|  | @@ -638,7 +638,7 @@
 | 
	
		
			
				|  |  |          SELECT
 | 
	
		
			
				|  |  |              (
 | 
	
		
			
				|  |  |                  SELECT
 | 
	
		
			
				|  |  | -                    count( fcc.user_id )
 | 
	
		
			
				|  |  | +                    count(distinct fcc.user_id )
 | 
	
		
			
				|  |  |                  FROM
 | 
	
		
			
				|  |  |                      fs_user_course_count fcc
 | 
	
		
			
				|  |  |                          LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
 | 
	
	
		
			
				|  | @@ -661,7 +661,7 @@
 | 
	
		
			
				|  |  |              ) as courseWatchNum,
 | 
	
		
			
				|  |  |              (
 | 
	
		
			
				|  |  |                  SELECT
 | 
	
		
			
				|  |  | -                    count( fcc.user_id )
 | 
	
		
			
				|  |  | +                    count(distinct fcc.user_id )
 | 
	
		
			
				|  |  |                  FROM
 | 
	
		
			
				|  |  |                      fs_user_course_count fcc
 | 
	
		
			
				|  |  |                          LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
 | 
	
	
		
			
				|  | @@ -689,7 +689,7 @@
 | 
	
		
			
				|  |  |          SELECT
 | 
	
		
			
				|  |  |          (
 | 
	
		
			
				|  |  |          SELECT
 | 
	
		
			
				|  |  | -        count( fs_user.user_id )
 | 
	
		
			
				|  |  | +        count(distinct fs_user.user_id )
 | 
	
		
			
				|  |  |          FROM
 | 
	
		
			
				|  |  |          fs_course_answer_logs
 | 
	
		
			
				|  |  |          LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
 | 
	
	
		
			
				|  | @@ -711,7 +711,7 @@
 | 
	
		
			
				|  |  |          ) AS answerNum,
 | 
	
		
			
				|  |  |          (
 | 
	
		
			
				|  |  |          SELECT
 | 
	
		
			
				|  |  | -        count( fs_user.user_id )
 | 
	
		
			
				|  |  | +        count(distinct fs_user.user_id )
 | 
	
		
			
				|  |  |          FROM
 | 
	
		
			
				|  |  |          fs_course_answer_logs
 | 
	
		
			
				|  |  |          LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
 | 
	
	
		
			
				|  | @@ -783,17 +783,20 @@
 | 
	
		
			
				|  |  |      </select>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <select id="countCourseDetails" resultType="Map">
 | 
	
		
			
				|  |  | -    select (SELECT count(fc.course_id)
 | 
	
		
			
				|  |  | +    select (SELECT count(DISTINCT fc.course_id)
 | 
	
		
			
				|  |  |              FROM fs_user_course fc
 | 
	
		
			
				|  |  |              WHERE fc.is_del = 0
 | 
	
		
			
				|  |  | +            AND FIND_IN_SET(#{companyId}, fc.company_ids)
 | 
	
		
			
				|  |  |              <if test="courseId != null and courseId != ''">
 | 
	
		
			
				|  |  |                  AND fc.course_id =  #{courseId}
 | 
	
		
			
				|  |  |              </if>
 | 
	
		
			
				|  |  |              ) as courseNum,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -           (SELECT count(fcv.video_id)
 | 
	
		
			
				|  |  | +           (SELECT count(DISTINCT fcv.video_id)
 | 
	
		
			
				|  |  |              FROM fs_user_course_video fcv
 | 
	
		
			
				|  |  |                       LEFT JOIN fs_user_course fc ON fc.course_id = fcv.course_id
 | 
	
		
			
				|  |  | +            WHERE fc.is_del = 0
 | 
	
		
			
				|  |  | +            AND FIND_IN_SET(#{companyId}, fc.company_ids)
 | 
	
		
			
				|  |  |              <if test="courseId != null and courseId != ''">
 | 
	
		
			
				|  |  |                  AND fcv.course_id =  #{courseId}
 | 
	
		
			
				|  |  |              </if>
 | 
	
	
		
			
				|  | @@ -801,7 +804,7 @@
 | 
	
		
			
				|  |  |                  AND fcv.video_id = #{videoId}
 | 
	
		
			
				|  |  |              </if>
 | 
	
		
			
				|  |  |              ) as videoNum,
 | 
	
		
			
				|  |  | -        ( SELECT count( user_id ) FROM fs_user_course_count fcc
 | 
	
		
			
				|  |  | +        ( SELECT count(DISTINCT user_id ) FROM fs_user_course_count fcc
 | 
	
		
			
				|  |  |              LEFT JOIN fs_user_course_video fcv ON fcv.course_id = fcc.course_id
 | 
	
		
			
				|  |  |          <if test="courseId != null and courseId != ''">
 | 
	
		
			
				|  |  |              AND fcc.course_id =  #{courseId}
 | 
	
	
		
			
				|  | @@ -812,11 +815,11 @@
 | 
	
		
			
				|  |  |           ) as courseUserNum
 | 
	
		
			
				|  |  |      </select>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    <select id="countUserRanking" resultType="FsUserRankingVO">
 | 
	
		
			
				|  |  | +    <select id="countUserRankingByComplete" resultType="FsUserRankingVO">
 | 
	
		
			
				|  |  |          SELECT
 | 
	
		
			
				|  |  |          company_user.nick_name as userName,
 | 
	
		
			
				|  |  |          ifnull(
 | 
	
		
			
				|  |  | -            ROUND((COUNT( CASE WHEN fcc.complete_watch_count > 0 THEN 1 END ) / count( fcc.user_id ))*100,2),0
 | 
	
		
			
				|  |  | +            ROUND((COUNT(DISTINCT CASE WHEN fcc.complete_watch_count > 0 THEN 1 END ) / count(1))*100,2),0
 | 
	
		
			
				|  |  |          ) as completeRate
 | 
	
		
			
				|  |  |          FROM
 | 
	
		
			
				|  |  |          fs_user_course_count fcc
 | 
	
	
		
			
				|  | @@ -824,7 +827,7 @@
 | 
	
		
			
				|  |  |          LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
 | 
	
		
			
				|  |  |          LEFT JOIN fs_user_course_video fcv ON fcv.course_id = fcc.course_id
 | 
	
		
			
				|  |  |          WHERE
 | 
	
		
			
				|  |  | -        company_user.parent_id = #{userId}
 | 
	
		
			
				|  |  | +        ( company_user.user_id = #{userId} OR company_user.parent_id = #{userId} )
 | 
	
		
			
				|  |  |          <if test="startTime != null and startTime !='' ">
 | 
	
		
			
				|  |  |              AND fcc.create_time >= #{startTime}
 | 
	
		
			
				|  |  |          </if>
 | 
	
	
		
			
				|  | @@ -838,15 +841,25 @@
 | 
	
		
			
				|  |  |              AND fcv.video_id = #{videoId}
 | 
	
		
			
				|  |  |          </if>
 | 
	
		
			
				|  |  |          group by fcc.user_id
 | 
	
		
			
				|  |  | -        order by completeRate #{order}
 | 
	
		
			
				|  |  | +        <choose>
 | 
	
		
			
				|  |  | +            <when test="order != null and order == 'asc'">
 | 
	
		
			
				|  |  | +                order by completeRate asc
 | 
	
		
			
				|  |  | +            </when>
 | 
	
		
			
				|  |  | +            <when test="order != null and order == 'desc'">
 | 
	
		
			
				|  |  | +                order by completeRate desc
 | 
	
		
			
				|  |  | +            </when>
 | 
	
		
			
				|  |  | +            <otherwise>
 | 
	
		
			
				|  |  | +                order by completeRate desc
 | 
	
		
			
				|  |  | +            </otherwise>
 | 
	
		
			
				|  |  | +        </choose>
 | 
	
		
			
				|  |  |          limit 20
 | 
	
		
			
				|  |  |      </select>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    <select id="countCourseRanking" resultType="FsUserRankingVO">
 | 
	
		
			
				|  |  | +    <select id="countUserRankingByRight" resultType="FsUserRankingVO">
 | 
	
		
			
				|  |  |          SELECT
 | 
	
		
			
				|  |  |              company_user.nick_name as userName,
 | 
	
		
			
				|  |  |              ifnull(ROUND(
 | 
	
		
			
				|  |  | -                           (COUNT( CASE WHEN fs_course_answer_logs.is_right = 1 THEN 1 END ) / count( fs_user.user_id ))
 | 
	
		
			
				|  |  | +                           (COUNT(DISTINCT CASE WHEN fs_course_answer_logs.is_right = 1 THEN 1 END ) / count(1))
 | 
	
		
			
				|  |  |                                 *100,2),0
 | 
	
		
			
				|  |  |              ) as answerRightRate
 | 
	
		
			
				|  |  |          FROM
 | 
	
	
		
			
				|  | @@ -854,7 +867,7 @@
 | 
	
		
			
				|  |  |                  LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
 | 
	
		
			
				|  |  |                  LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
 | 
	
		
			
				|  |  |          WHERE
 | 
	
		
			
				|  |  | -            company_user.parent_id = #{userId}
 | 
	
		
			
				|  |  | +        ( company_user.user_id = #{userId} OR company_user.parent_id = #{userId} )
 | 
	
		
			
				|  |  |              <if test="startTime != null and startTime !='' ">
 | 
	
		
			
				|  |  |                  AND fs_course_answer_logs.create_time >= #{startTime}
 | 
	
		
			
				|  |  |              </if>
 | 
	
	
		
			
				|  | @@ -868,8 +881,109 @@
 | 
	
		
			
				|  |  |                  AND fs_course_answer_logs.video_id = #{videoId}
 | 
	
		
			
				|  |  |              </if>
 | 
	
		
			
				|  |  |          group by fs_user.user_id
 | 
	
		
			
				|  |  | -        order by answerRightRate #{order}
 | 
	
		
			
				|  |  | +        <choose>
 | 
	
		
			
				|  |  | +            <when test="order != null and order == 'asc'">
 | 
	
		
			
				|  |  | +                order by answerRightRate asc
 | 
	
		
			
				|  |  | +            </when>
 | 
	
		
			
				|  |  | +            <when test="order != null and order == 'desc'">
 | 
	
		
			
				|  |  | +                order by answerRightRate desc
 | 
	
		
			
				|  |  | +            </when>
 | 
	
		
			
				|  |  | +            <otherwise>
 | 
	
		
			
				|  |  | +                order by answerRightRate desc
 | 
	
		
			
				|  |  | +            </otherwise>
 | 
	
		
			
				|  |  | +        </choose>
 | 
	
		
			
				|  |  |          limit 20
 | 
	
		
			
				|  |  |      </select>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    <select id="countCourseRankingByComplete" resultType="FsCourseRankingVO">
 | 
	
		
			
				|  |  | +        SELECT
 | 
	
		
			
				|  |  | +        fcv.title AS videoName,
 | 
	
		
			
				|  |  | +        ifnull(
 | 
	
		
			
				|  |  | +        ROUND((
 | 
	
		
			
				|  |  | +        COUNT( DISTINCT CASE WHEN fcc.complete_watch_count > 0 THEN 1 END ) / count(1))* 100,
 | 
	
		
			
				|  |  | +        2
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        0
 | 
	
		
			
				|  |  | +        ) AS completeRate
 | 
	
		
			
				|  |  | +        FROM
 | 
	
		
			
				|  |  | +        fs_user_course_count fcc
 | 
	
		
			
				|  |  | +        LEFT JOIN fs_user ON fs_user.user_id = fcc.user_id
 | 
	
		
			
				|  |  | +        LEFT JOIN company_user ON fs_user.company_user_id = company_user.user_id
 | 
	
		
			
				|  |  | +        LEFT JOIN fs_user_course_video fcv ON fcv.course_id = fcc.course_id
 | 
	
		
			
				|  |  | +        WHERE
 | 
	
		
			
				|  |  | +        ( company_user.user_id = #{userId} OR company_user.parent_id = #{userId} )
 | 
	
		
			
				|  |  | +        <if test="startTime != null and startTime !='' ">
 | 
	
		
			
				|  |  | +            AND fcc.create_time >= #{startTime}
 | 
	
		
			
				|  |  | +        </if>
 | 
	
		
			
				|  |  | +        <if test="endTime != null and endTime != ''">
 | 
	
		
			
				|  |  | +            AND fcc.create_time <= #{endTime}
 | 
	
		
			
				|  |  | +        </if>
 | 
	
		
			
				|  |  | +        <if test="courseId != null and courseId != ''">
 | 
	
		
			
				|  |  | +            AND fcc.course_id =  #{courseId}
 | 
	
		
			
				|  |  | +        </if>
 | 
	
		
			
				|  |  | +        <if test="videoId != null and videoId != ''">
 | 
	
		
			
				|  |  | +            AND fcv.video_id = #{videoId}
 | 
	
		
			
				|  |  | +        </if>
 | 
	
		
			
				|  |  | +        GROUP BY
 | 
	
		
			
				|  |  | +        fcv.video_id
 | 
	
		
			
				|  |  | +        <choose>
 | 
	
		
			
				|  |  | +            <when test="order != null and order == 'asc'">
 | 
	
		
			
				|  |  | +                ORDER BY completeRate asc
 | 
	
		
			
				|  |  | +            </when>
 | 
	
		
			
				|  |  | +            <when test="order != null and order == 'desc'">
 | 
	
		
			
				|  |  | +                ORDER BY completeRate desc
 | 
	
		
			
				|  |  | +            </when>
 | 
	
		
			
				|  |  | +            <otherwise>
 | 
	
		
			
				|  |  | +                ORDER BY completeRate desc
 | 
	
		
			
				|  |  | +            </otherwise>
 | 
	
		
			
				|  |  | +        </choose>
 | 
	
		
			
				|  |  | +        LIMIT 20
 | 
	
		
			
				|  |  | +    </select>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <select id="countCourseRankingByRight" resultType="FsCourseRankingVO">
 | 
	
		
			
				|  |  | +        SELECT
 | 
	
		
			
				|  |  | +        fcv.title AS videoName,
 | 
	
		
			
				|  |  | +        ifnull(
 | 
	
		
			
				|  |  | +        ROUND(
 | 
	
		
			
				|  |  | +        (
 | 
	
		
			
				|  |  | +        COUNT( DISTINCT CASE WHEN fs_course_answer_logs.is_right = 1 THEN 1 END ) / count(1)) * 100,
 | 
	
		
			
				|  |  | +        2
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        0
 | 
	
		
			
				|  |  | +        ) AS answerRightRate
 | 
	
		
			
				|  |  | +        FROM
 | 
	
		
			
				|  |  | +        fs_course_answer_logs
 | 
	
		
			
				|  |  | +        LEFT JOIN fs_user ON fs_user.user_id = fs_course_answer_logs.user_id
 | 
	
		
			
				|  |  | +        LEFT JOIN company_user ON company_user.user_id = fs_user.company_user_id
 | 
	
		
			
				|  |  | +        LEFT JOIN fs_user_course_video fcv ON fcv.video_id = fs_course_answer_logs.video_id
 | 
	
		
			
				|  |  | +        WHERE
 | 
	
		
			
				|  |  | +        ( company_user.user_id = #{userId} OR company_user.parent_id = #{userId} )
 | 
	
		
			
				|  |  | +        <if test="startTime != null and startTime !='' ">
 | 
	
		
			
				|  |  | +            AND fs_course_answer_logs.create_time >= #{startTime}
 | 
	
		
			
				|  |  | +        </if>
 | 
	
		
			
				|  |  | +        <if test="endTime != null and endTime != ''">
 | 
	
		
			
				|  |  | +            AND fs_course_answer_logs.create_time <= #{endTime}
 | 
	
		
			
				|  |  | +        </if>
 | 
	
		
			
				|  |  | +        <if test="courseId != null and courseId != ''">
 | 
	
		
			
				|  |  | +            AND fs_course_answer_logs.course_id =  #{courseId}
 | 
	
		
			
				|  |  | +        </if>
 | 
	
		
			
				|  |  | +        <if test="videoId != null and videoId != ''">
 | 
	
		
			
				|  |  | +            AND fs_course_answer_logs.video_id = #{videoId}
 | 
	
		
			
				|  |  | +        </if>
 | 
	
		
			
				|  |  | +        GROUP BY
 | 
	
		
			
				|  |  | +        fs_course_answer_logs.video_id
 | 
	
		
			
				|  |  | +        <choose>
 | 
	
		
			
				|  |  | +            <when test="order != null and order == 'asc'">
 | 
	
		
			
				|  |  | +                ORDER BY answerRightRate asc
 | 
	
		
			
				|  |  | +            </when>
 | 
	
		
			
				|  |  | +            <when test="order != null and order == 'desc'">
 | 
	
		
			
				|  |  | +                ORDER BY answerRightRate desc
 | 
	
		
			
				|  |  | +            </when>
 | 
	
		
			
				|  |  | +            <otherwise>
 | 
	
		
			
				|  |  | +                ORDER BY answerRightRate desc
 | 
	
		
			
				|  |  | +            </otherwise>
 | 
	
		
			
				|  |  | +        </choose>
 | 
	
		
			
				|  |  | +        LIMIT 20
 | 
	
		
			
				|  |  | +    </select>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  </mapper>
 |