StatCourseMapper.xml 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.gyee.exam.modules.stat.course.mapper.StatCourseMapper">
  4. <select id="findOverview" resultType="com.gyee.exam.modules.stat.course.dto.StatCourseTotalDTO">
  5. <!--部门开放-->
  6. <if test="openType == 2">
  7. SELECT COUNT(uc.id) AS totalUser,
  8. COUNT(DISTINCT cl.user_id) AS actualUser,
  9. COUNT(IF( cl.state = 1 ,1, NULL)) AS passUser
  10. FROM el_course_depart dept
  11. LEFT JOIN sys_user uc ON dept.dept_code=uc.dept_code
  12. LEFT JOIN el_course_learn cl ON cl.user_id=uc.id AND cl.course_id=dept.course_id
  13. WHERE uc.id IS NOT NULL AND dept.course_id=#{courseId}
  14. </if>
  15. <!--指定人员-->
  16. <if test="openType == 3">
  17. SELECT
  18. COUNT(DISTINCT cp.user_id) AS totalUser,
  19. COUNT(DISTINCT cl.user_id) AS actualUser,
  20. COUNT(IF( cl.state = 1 ,1, NULL)) AS passUser
  21. FROM el_course_person cp
  22. LEFT JOIN el_course_learn cl ON cp.user_id=cl.user_id AND cp.course_id=cl.course_id
  23. WHERE cp.course_id=#{courseId}
  24. </if>
  25. <!--其它公开的-->
  26. <if test="openType!=2 and openType!=3">
  27. SELECT 0 AS totalUser,
  28. (
  29. SELECT COUNT(DISTINCT user_id) FROM el_course_learn WHERE course_id=#{courseId}
  30. ) AS actualUser,
  31. (
  32. SELECT COUNT(DISTINCT user_id) FROM el_course_learn WHERE course_id=#{courseId} AND state=1
  33. ) AS passUser
  34. </if>
  35. </select>
  36. <select id="fileStatPaging" resultType="com.gyee.exam.modules.stat.course.dto.response.StatCourseFileDTO">
  37. SELECT ff.title AS fileName,
  38. (SELECT COUNT(DISTINCT user_id) FROM el_course_file_learn WHERE course_id=rf.course_id) AS learnUser,
  39. (SELECT COUNT(DISTINCT user_id) FROM el_course_file_learn WHERE learn_min >= rf.need_learn AND course_id=rf.course_id) AS finishUser
  40. FROM el_course_ref_file rf
  41. LEFT JOIN el_course_file ff ON rf.file_id=ff.id
  42. WHERE rf.course_id=#{query.courseId}
  43. <if test="query.fileName!=null and query.fileName!=''">
  44. AND ff.title LIKE CONCAT('%',#{query.fileName},'%')
  45. </if>
  46. </select>
  47. <select id="userStatPaging" resultType="com.gyee.exam.modules.stat.course.dto.response.StatCourseLearnDTO">
  48. <choose>
  49. <!--部门开放-->
  50. <when test="openType == 2">
  51. <include refid="queryDept"></include>
  52. </when>
  53. <!-- 指定人员 -->
  54. <when test="openType == 3">
  55. <include refid="queryUser"></include>
  56. </when>
  57. <otherwise>
  58. <include refid="queryOpen"></include>
  59. </otherwise>
  60. </choose>
  61. </select>
  62. <select id="checkUserCourseStat"
  63. resultType="com.gyee.exam.modules.stat.course.dto.response.StatCourseLearnDTO">
  64. SELECT
  65. uc.id,
  66. cl.state,
  67. uc.id AS userId,
  68. IFNULL(cl.learn_file, 0) AS learnFile,
  69. (SELECT COUNT(0) FROM el_course_ref_file WHERE course_id=dept.course_id) AS totalFile,
  70. uc.real_name AS realName,
  71. (SELECT IFNULL(SUM(learn_min),0) FROM el_course_file_learn fl WHERE fl.course_id=cl.course_id AND fl.user_id=cl.user_id) AS totalMin
  72. FROM el_course_depart dept
  73. LEFT JOIN sys_user uc ON dept.dept_code=uc.dept_code
  74. LEFT JOIN el_course_person cp ON cp.user_id=uc.id
  75. LEFT JOIN el_course_learn cl ON cl.user_id=uc.id AND (cl.course_id=dept.course_id or cl.course_id=cp.course_id)
  76. WHERE uc.id IS NOT NULL AND cl.course_id=#{query.courseId}
  77. <if test="query.userId!=null and query.userId!=''">
  78. AND uc.id = #{query.userId}
  79. </if>
  80. ORDER BY cl.state DESC,totalMin DESC LIMIT 1
  81. </select>
  82. <sql id="queryOpen">
  83. SELECT
  84. cl.id,
  85. cl.state,
  86. cl.user_id AS userId,
  87. cl.learn_file AS learnFile,
  88. cl.total_file AS totalFile,
  89. uc.real_name AS realName,
  90. (SELECT SUM(learn_min) FROM el_course_file_learn fl WHERE fl.course_id=cl.course_id AND fl.user_id=cl.user_id) AS totalMin
  91. FROM el_course_learn cl
  92. LEFT JOIN sys_user uc ON cl.user_id=uc.id
  93. WHERE uc.id IS NOT NULL AND cl.course_id=#{query.courseId}
  94. <if test="query.realName!=null and query.realName!=''">
  95. AND uc.real_name LIKE CONCAT('%', #{query.realName} , '%')
  96. </if>
  97. <if test="query.courseDeparts!=null and query.courseDeparts!=''">
  98. AND uc.dept_code in <foreach item="item" collection="query.courseDeparts" separator="," open="(" close=")" index="">'${item}'</foreach>
  99. </if>
  100. ORDER BY cl.state DESC,totalMin DESC
  101. </sql>
  102. <sql id="queryDept">
  103. SELECT
  104. uc.id,
  105. cl.state,
  106. uc.id AS userId,
  107. IFNULL(cl.learn_file, 0) AS learnFile,
  108. (SELECT COUNT(0) FROM el_course_ref_file WHERE course_id=dept.course_id) AS totalFile,
  109. uc.real_name AS realName,
  110. (SELECT IFNULL(SUM(learn_min),0) FROM el_course_file_learn fl WHERE fl.course_id=cl.course_id AND fl.user_id=cl.user_id) AS totalMin,
  111. dept.dept_code deptCode
  112. FROM el_course_depart dept
  113. LEFT JOIN sys_user uc ON dept.dept_code=uc.dept_code
  114. LEFT JOIN el_course_learn cl ON cl.user_id=uc.id AND cl.course_id=dept.course_id
  115. WHERE uc.id IS NOT NULL AND dept.course_id=#{query.courseId}
  116. <if test="query.realName!=null and query.realName!=''">
  117. AND (uc.real_name LIKE '%${query.realName}%' OR uc.user_name LIKE '%${query.realName}%')
  118. </if>
  119. <if test="query.courseDeparts!=null">
  120. AND dept.dept_code in <foreach item="item" collection="query.courseDeparts" separator="," open="(" close=")" index="">'${item}'</foreach>
  121. </if>
  122. ORDER BY cl.state DESC,totalMin DESC
  123. </sql>
  124. <sql id="queryUser">
  125. SELECT
  126. uc.id,
  127. cl.state,
  128. uc.id AS userId,
  129. IFNULL(cl.learn_file, 0) AS learnFile,
  130. (SELECT COUNT(0) FROM el_course_ref_file WHERE course_id=ps.course_id) AS totalFile,
  131. uc.real_name AS realName,
  132. (SELECT IFNULL(SUM(learn_min),0) FROM el_course_file_learn fl WHERE fl.course_id=cl.course_id AND fl.user_id=cl.user_id) AS totalMin,
  133. uc.dept_code deptCode
  134. FROM el_course_person ps
  135. LEFT JOIN sys_user uc ON ps.user_id=uc.id
  136. LEFT JOIN el_course_learn cl ON cl.user_id=uc.id AND cl.course_id=ps.course_id
  137. WHERE ps.course_id=#{query.courseId}
  138. <if test="query.realName!=null and query.realName!=''">
  139. AND (uc.real_name LIKE '%${query.realName}%' OR uc.user_name LIKE '%${query.realName}%')
  140. </if>
  141. <if test="query.courseDeparts!=null">
  142. AND uc.dept_code in <foreach item="item" collection="query.courseDeparts" separator="," open="(" close=")" index="">'${item}'</foreach>
  143. </if>
  144. ORDER BY cl.state DESC,totalMin DESC
  145. </sql>
  146. </mapper>