Browse Source

培训统计方法

wangchangsheng 2 years ago
parent
commit
46262c03d2
16 changed files with 403 additions and 11 deletions
  1. 47 2
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/controller/CourseController.java
  2. 39 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseDepartTotalDTO.java
  3. 23 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseUserRankDTO.java
  4. 41 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/courseDepartIdTotalDTO.java
  5. 10 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseDepartMapper.java
  6. 7 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseFileLearnMapper.java
  7. 5 4
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseMapper.java
  8. 10 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseDepartService.java
  9. 5 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseFileLearnService.java
  10. 28 2
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseService.java
  11. 10 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseDepartServiceImpl.java
  12. 8 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseFileLearnServiceImpl.java
  13. 28 3
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseServiceImpl.java
  14. 35 0
      exam-06173-api/src/main/resources/mapper/course/CourseDepartMapper.xml
  15. 34 0
      exam-06173-api/src/main/resources/mapper/course/CourseFileLearnMapper.xml
  16. 73 0
      exam-06173-api/src/main/resources/mapper/course/CourseMapper.xml

+ 47 - 2
exam-06173-api/src/main/java/com/gyee/exam/modules/course/controller/CourseController.java

@@ -12,14 +12,14 @@ import com.gyee.boot.base.aspect.log.enums.LogType;
 import com.gyee.exam.modules.course.dto.CourseDTO;
 import com.gyee.exam.modules.course.dto.ext.CourseDetailExtDTO;
 import com.gyee.exam.modules.course.dto.request.UserCourseReqDTO;
-import com.gyee.exam.modules.course.dto.response.CourseDepartRankDTO;
-import com.gyee.exam.modules.course.dto.response.UserCourseRespDTO;
+import com.gyee.exam.modules.course.dto.response.*;
 import com.gyee.exam.modules.course.entity.Course;
 import com.gyee.exam.modules.course.service.CourseService;
 import com.gyee.exam.modules.qu.service.QuService;
 import com.gyee.exam.modules.tmpl.service.TmplService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.Logical;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -196,4 +196,49 @@ public class CourseController extends BaseController {
     }
 
 
+    /**
+     * 统计职员学习总时长(分钟)
+     * @return
+     */
+    @ApiOperation(value = "统计职员学习总时长(分钟)")
+    @GetMapping("/course-user-rank")
+    public ApiRest courseUserRank(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<CourseUserRankDTO> dtoList = baseService.courseUserRank(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+    /**
+     * 部门培训统计
+     * @return
+     */
+    @ApiOperation(value = "部门培训统计")
+    @GetMapping("/course-depart-total")
+    public ApiRest courseDepartTotal(@RequestBody BaseQueryReqDTO reqDTO) {
+        List<CourseDepartTotalDTO> dtoList = baseService.courseDepartTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+    /**
+     * 单部门培训统计
+     * @return
+     */
+    @ApiOperation(value = "单部门培训统计")
+    @GetMapping("/course-departid-total")
+    public ApiRest courseDepartIdTotal(@RequestBody BaseQueryReqDTO reqDTO) {
+        if(null == reqDTO || StringUtils.isEmpty(reqDTO.getQ().trim())){
+            return super.failure("请求部门参数为空");
+        }
+        List<courseDepartIdTotalDTO> dtoList = baseService.courseDepartIdTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+
+
 }

+ 39 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseDepartTotalDTO.java

@@ -0,0 +1,39 @@
+package com.gyee.exam.modules.course.dto.response;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value="部门培训统计", description="部门培训统计")
+public class CourseDepartTotalDTO {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "部门编码")
+    private String deptCode;
+
+    @ApiModelProperty(value = "部门名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "培训总人次")
+    private Integer ecTotalUser;
+
+    @ApiModelProperty(value = "培训人数")
+    private Integer ecActualUser;
+
+    @ApiModelProperty(value = "已培训结束人数")
+    private Integer ecPassUser;
+
+    @ApiModelProperty(value = "培训时长")
+    private Integer ecTotalMin;
+
+    public Integer getEcTotalMin() {
+        if (null == ecTotalMin)
+        {
+            ecTotalMin = 0;
+        }
+        return ecTotalMin;
+    }
+}

+ 23 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseUserRankDTO.java

@@ -0,0 +1,23 @@
+package com.gyee.exam.modules.course.dto.response;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value="用户课程学习排名响应类", description="用户课程学习排名响应类")
+public class CourseUserRankDTO {
+
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "部门编码")
+    private String deptName;
+
+    @ApiModelProperty(value = "部门名称")
+    private String realName;
+
+    @ApiModelProperty(value = "学习时长(分钟)")
+    private Integer total;
+}

+ 41 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/courseDepartIdTotalDTO.java

@@ -0,0 +1,41 @@
+package com.gyee.exam.modules.course.dto.response;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@Data
+@ApiModel(value="单部门培训统计", description="单部门培训统计")
+public class courseDepartIdTotalDTO {
+
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "课程id")
+    private String id;
+
+    @ApiModelProperty(value = "课程标题")
+    private String title;
+
+    @ApiModelProperty(value = "课时数")
+    private Integer periods;
+
+    @ApiModelProperty(value = "创建时间")
+    private String createTime;
+
+    @ApiModelProperty(value = "已学习完成人数")
+    private Integer  passUser;
+
+
+    @ApiModelProperty(value = "应培训学习人数")
+    private Integer  actualUser;
+
+
+    @ApiModelProperty(value = "课程是否完成培训;1(已完成),0(未完成)")
+    private Integer  passed;
+
+
+
+}

+ 10 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseDepartMapper.java

@@ -1,7 +1,13 @@
 package com.gyee.exam.modules.course.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.boot.base.api.api.dto.BaseQueryReqDTO;
+import com.gyee.exam.modules.course.dto.response.CourseUserRankDTO;
 import com.gyee.exam.modules.course.entity.CourseDepart;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
 /**
 * <p>
 * 课程部门Mapper
@@ -12,4 +18,8 @@ import com.gyee.exam.modules.course.entity.CourseDepart;
 */
 public interface CourseDepartMapper extends BaseMapper<CourseDepart> {
 
+
+    List<CourseUserRankDTO> courseUserRank(@Param("query") BaseQueryReqDTO reqDTO);
+
+
 }

+ 7 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseFileLearnMapper.java

@@ -3,11 +3,15 @@ package com.gyee.exam.modules.course.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gyee.boot.base.api.api.dto.BaseQueryReqDTO;
 import com.gyee.exam.modules.course.dto.CourseFileLearnDTO;
+import com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO;
 import com.gyee.exam.modules.course.dto.response.CourseFileLearnRespDTO;
 import com.gyee.exam.modules.course.entity.CourseFileLearn;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
 * <p>
 * 课件学习Mapper
@@ -34,4 +38,7 @@ public interface CourseFileLearnMapper extends BaseMapper<CourseFileLearn> {
      */
     Integer countFinished(@Param("userId") String userId,
                           @Param("courseId") String courseId);
+
+
+    List<CourseDepartTotalDTO> courseDepartTotalMin(@Param("query") BaseQueryReqDTO reqDTO);
 }

+ 5 - 4
exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseMapper.java

@@ -6,9 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gyee.boot.base.api.api.dto.BaseQueryReqDTO;
 import com.gyee.exam.modules.course.dto.ext.CourseDetailExtDTO;
 import com.gyee.exam.modules.course.dto.request.UserCourseReqDTO;
-import com.gyee.exam.modules.course.dto.response.CourseDepartRankDTO;
-import com.gyee.exam.modules.course.dto.response.UserCourseProcessDTO;
-import com.gyee.exam.modules.course.dto.response.UserCourseRespDTO;
+import com.gyee.exam.modules.course.dto.response.*;
 import com.gyee.exam.modules.course.entity.Course;
 import org.apache.ibatis.annotations.Param;
 
@@ -42,6 +40,9 @@ public interface CourseMapper extends BaseMapper<Course> {
 
     List<UserCourseProcessDTO> userPagingToal(Page page, @Param("query") UserCourseReqDTO reqDTO);
 
-
     List<CourseDepartRankDTO> courseDepartRank(@Param("query") BaseQueryReqDTO reqDTO);
+
+    List<CourseDepartTotalDTO> courseDepartTotal(@Param("query") BaseQueryReqDTO reqDTO);
+
+    List<courseDepartIdTotalDTO> courseDepartIdTotal(@Param("query") BaseQueryReqDTO reqDTO);
 }

+ 10 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseDepartService.java

@@ -1,5 +1,7 @@
 package com.gyee.exam.modules.course.service;
 
+import com.gyee.boot.base.api.api.dto.BaseQueryReqDTO;
+import com.gyee.exam.modules.course.dto.response.CourseUserRankDTO;
 import com.gyee.exam.modules.course.entity.CourseDepart;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -28,4 +30,12 @@ public interface CourseDepartService extends IService<CourseDepart> {
      * @return
      */
     List<String> listByExam(String courseId);
+
+
+    /**
+     * 统计职员学习总时长(分钟)
+     * @param reqDTO
+     * @return
+     */
+    List<CourseUserRankDTO> courseUserRank(BaseQueryReqDTO reqDTO);
 }

+ 5 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseFileLearnService.java

@@ -2,9 +2,11 @@ package com.gyee.exam.modules.course.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.gyee.boot.base.api.api.dto.BaseQueryReqDTO;
 import com.gyee.boot.base.api.api.dto.PagingReqDTO;
 import com.gyee.exam.modules.course.dto.CourseFileLearnDTO;
 import com.gyee.exam.modules.course.dto.ext.CourseLearnResultExtDTO;
+import com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO;
 import com.gyee.exam.modules.course.dto.response.CourseFileLearnRespDTO;
 import com.gyee.exam.modules.course.entity.CourseFileLearn;
 
@@ -58,4 +60,7 @@ public interface CourseFileLearnService extends IService<CourseFileLearn> {
      * @return
      */
     CourseFileLearn findOne(String userId, String courseId, String fileId);
+
+
+    List<CourseDepartTotalDTO> courseDepartTotalMin(BaseQueryReqDTO reqDTO);
 }

+ 28 - 2
exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseService.java

@@ -7,8 +7,7 @@ import com.gyee.boot.base.api.api.dto.PagingReqDTO;
 import com.gyee.exam.modules.course.dto.CourseDTO;
 import com.gyee.exam.modules.course.dto.ext.CourseDetailExtDTO;
 import com.gyee.exam.modules.course.dto.request.UserCourseReqDTO;
-import com.gyee.exam.modules.course.dto.response.CourseDepartRankDTO;
-import com.gyee.exam.modules.course.dto.response.UserCourseRespDTO;
+import com.gyee.exam.modules.course.dto.response.*;
 import com.gyee.exam.modules.course.entity.Course;
 
 import java.util.List;
@@ -80,4 +79,31 @@ public interface CourseService extends IService<Course> {
     List<CourseDepartRankDTO> courseDepartRank(BaseQueryReqDTO reqDTO);
 
 
+    /**
+     * 统计职员学习总时长(分钟)
+     * @param reqDTO
+     * @return
+     */
+    List<CourseUserRankDTO> courseUserRank(BaseQueryReqDTO reqDTO);
+
+
+
+    /**
+     * 部门培训统计
+     * @param reqDTO
+     * @return
+     */
+    List<CourseDepartTotalDTO> courseDepartTotal(BaseQueryReqDTO reqDTO);
+
+
+    /**
+     * 单部门培训统计
+     * @param reqDTO
+     * @return
+     */
+    List<courseDepartIdTotalDTO> courseDepartIdTotal(BaseQueryReqDTO reqDTO);
+
+
+
+
 }

+ 10 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseDepartServiceImpl.java

@@ -2,7 +2,9 @@ package com.gyee.exam.modules.course.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.boot.base.api.api.dto.BaseQueryReqDTO;
 import com.gyee.boot.base.api.exception.ServiceException;
+import com.gyee.exam.modules.course.dto.response.CourseUserRankDTO;
 import com.gyee.exam.modules.course.entity.CourseDepart;
 import com.gyee.exam.modules.course.mapper.CourseDepartMapper;
 import com.gyee.exam.modules.course.service.CourseDepartService;
@@ -62,4 +64,12 @@ public class CourseDepartServiceImpl extends ServiceImpl<CourseDepartMapper, Cou
 
         return ids;
     }
+
+    @Override
+    public List<CourseUserRankDTO> courseUserRank(BaseQueryReqDTO reqDTO) {
+
+        List<CourseUserRankDTO> dtos = baseMapper.courseUserRank(reqDTO);
+
+        return dtos;
+    }
 }

+ 8 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseFileLearnServiceImpl.java

@@ -3,10 +3,12 @@ package com.gyee.exam.modules.course.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.boot.base.api.api.dto.BaseQueryReqDTO;
 import com.gyee.boot.base.api.api.dto.PagingReqDTO;
 import com.gyee.exam.ability.redis.service.RedisService;
 import com.gyee.exam.modules.course.dto.CourseFileLearnDTO;
 import com.gyee.exam.modules.course.dto.ext.CourseLearnResultExtDTO;
+import com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO;
 import com.gyee.exam.modules.course.dto.response.CourseFileLearnRespDTO;
 import com.gyee.exam.modules.course.entity.*;
 import com.gyee.exam.modules.course.enums.CourseState;
@@ -221,6 +223,12 @@ public class CourseFileLearnServiceImpl extends ServiceImpl<CourseFileLearnMappe
         return record;
     }
 
+    @Override
+    public List<CourseDepartTotalDTO> courseDepartTotalMin(BaseQueryReqDTO reqDTO) {
+        List<CourseDepartTotalDTO> dtos = baseMapper.courseDepartTotalMin(reqDTO);
+        return dtos;
+    }
+
     /**
      * 校验整个课程的学习进度
      * @param courseId

+ 28 - 3
exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseServiceImpl.java

@@ -17,9 +17,7 @@ import com.gyee.exam.modules.course.dto.ext.CourseDetailExtDTO;
 import com.gyee.exam.modules.course.dto.ext.CourseRefDirExtDTO;
 import com.gyee.exam.modules.course.dto.ext.CourseRefFileExtDTO;
 import com.gyee.exam.modules.course.dto.request.UserCourseReqDTO;
-import com.gyee.exam.modules.course.dto.response.CourseDepartRankDTO;
-import com.gyee.exam.modules.course.dto.response.UserCourseProcessDTO;
-import com.gyee.exam.modules.course.dto.response.UserCourseRespDTO;
+import com.gyee.exam.modules.course.dto.response.*;
 import com.gyee.exam.modules.course.entity.Course;
 import com.gyee.exam.modules.course.entity.CourseRefDir;
 import com.gyee.exam.modules.course.entity.CourseRefFile;
@@ -73,6 +71,9 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
     @Autowired
     private CourseLearnDailyService courseLearnDailyService;
 
+    @Autowired
+    private  CourseFileLearnService courseFileLearnService;
+
     @Override
     public IPage<CourseDTO> paging(PagingReqDTO<CourseDTO> reqDTO) {
 
@@ -309,4 +310,28 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
         return dtoList;
     }
 
+    @Override
+    public List<CourseUserRankDTO> courseUserRank(BaseQueryReqDTO reqDTO) {
+        List<CourseUserRankDTO> dtos = courseDepartService.courseUserRank(reqDTO);
+        return dtos;
+    }
+
+    @Override
+    public List<CourseDepartTotalDTO> courseDepartTotal(BaseQueryReqDTO reqDTO) {
+        List<CourseDepartTotalDTO> dtos = baseMapper.courseDepartTotal(reqDTO);
+        List<CourseDepartTotalDTO> mindtos = courseFileLearnService.courseDepartTotalMin(reqDTO);
+        Map<String,Integer> map = mindtos.stream().collect(Collectors.toMap(CourseDepartTotalDTO::getDeptCode,CourseDepartTotalDTO::getEcTotalMin));
+        dtos.stream().forEach(d->{
+            d.setEcTotalMin(map.get(d.getDeptCode()));
+        });
+        return dtos;
+    }
+
+    @Override
+    public List<courseDepartIdTotalDTO> courseDepartIdTotal(BaseQueryReqDTO reqDTO) {
+        List<courseDepartIdTotalDTO> dtos = baseMapper.courseDepartIdTotal(reqDTO);
+        return dtos;
+    }
+
+
 }

+ 35 - 0
exam-06173-api/src/main/resources/mapper/course/CourseDepartMapper.xml

@@ -13,5 +13,40 @@
     <sql id="Base_Column_List">
         `id`,`course_id`,`dept_code`
     </sql>
+    <select id="courseUserRank" resultType="com.gyee.exam.modules.course.dto.response.CourseUserRankDTO">
+
+        SELECT
+        uc.user_name AS deptName,
+        uc.real_name AS realName,
+        SUM((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 total
+        FROM el_course_depart dept
+        LEFT JOIN sys_user uc ON dept.dept_code=uc.dept_code
+        LEFT JOIN el_course_learn cl ON cl.user_id=uc.id AND cl.course_id=dept.course_id
+        LEFT JOIN el_course ec on ec.id = dept.course_id
+
+        <where>
+
+            uc.id IS NOT NULL
+            <if test="query!=null">
+
+                <if test="query.statDateL!=null ">
+                    AND ec.create_time >= #{query.statDateL}
+                </if>
+
+                <if test="query.statDateR!=null ">
+                    AND ec.create_time &lt; #{query.statDateR}
+                </if>
+
+                <if test="query.q!=null and query.q!=''">
+                    AND cd.dept_code = #{query.q}
+                </if>
+
+            </if>
+
+        </where>
+        group by uc.user_name,uc.real_name, uc.id
+        ORDER BY total DESC
+
+    </select>
 
 </mapper>

+ 34 - 0
exam-06173-api/src/main/resources/mapper/course/CourseFileLearnMapper.xml

@@ -54,4 +54,38 @@
         AND fl.user_id=#{userId} AND fl.course_id=#{courseId}
     </select>
 
+
+    <select id="courseDepartTotalMin"
+            resultType="com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO">
+            select
+            sd.dept_name deptName,
+            sd.dept_code deptCode,
+            IFNULL(SUM(fl.learn_min),0) ecTotalMin
+            from sys_depart sd
+            LEFT JOIN sys_user su on sd.dept_code = su.dept_code
+            LEFT JOIN el_course_file_learn fl on fl.user_id = su.id
+            LEFT JOIN el_course ec on ec.id = fl.course_id
+
+            <where>
+
+                <if test="query!=null">
+
+                    <if test="query.statDateL!=null ">
+                        AND ec.create_time >= #{query.statDateL}
+                    </if>
+
+                    <if test="query.statDateR!=null ">
+                        AND ec.create_time &lt; #{query.statDateR}
+                    </if>
+
+                    <if test="query.q!=null and query.q!=''">
+                        AND sd.dept_code = #{query.q}
+                    </if>
+
+                </if>
+            </where>
+            GROUP BY   sd.dept_code
+
+    </select>
+
 </mapper>

+ 73 - 0
exam-06173-api/src/main/resources/mapper/course/CourseMapper.xml

@@ -207,5 +207,78 @@
 
     </select>
 
+    <select id="courseDepartTotal" resultType="com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO">
+        SELECT
+        sd.dept_name deptName,
+        dept.dept_code deptCode,
+        COUNT( uc.id) AS ecTotalUser,-- 应培训人数
+        COUNT(DISTINCT cl.user_id) AS ecActualUser,-- 学习人数
+        COUNT(IF( cl.state = 1 ,1, NULL)) AS ecPassUser -- 学完人数
+        FROM el_course ec
+        LEFT JOIN el_course_depart dept on ec.id =  dept.course_id
+        LEFT JOIN sys_depart sd on sd.dept_code = dept.dept_code
+        LEFT JOIN sys_user uc ON dept.dept_code=uc.dept_code
+        LEFT JOIN el_course_learn cl ON cl.user_id=uc.id AND cl.course_id=dept.course_id
+        <where>
+            AND uc.id IS NOT NULL
+            <if test="query!=null">
+
+                <if test="query.statDateL!=null ">
+                    AND ec.create_time >= #{query.statDateL}
+                </if>
+
+                <if test="query.statDateR!=null ">
+                    AND ec.create_time &lt; #{query.statDateR}
+                </if>
+
+                <if test="query.q!=null and query.q!=''">
+                    AND dept.dept_code = #{query.q}
+                </if>
+
+            </if>
+        </where>
+
+        GROUP BY   dept.dept_code
+        ORDER BY ecActualUser desc ,ecPassUser desc
+
+
+    </select>
+    <select id="courseDepartIdTotal"
+            resultType="com.gyee.exam.modules.course.dto.response.courseDepartIdTotalDTO">
+            SELECT
+            ec.id,
+            ec.title,
+            ec.periods,
+            ec.create_time,
+            SUM(IF( cl.state = 1 ,1, 0)) passUser,
+            count(uc.id) actualUser,
+            (CASE WHEN SUM(IF( cl.state = 1 ,1, 0))>=count(uc.id) THEN 1 ELSE 0 END) AS passed
+
+            FROM el_course ec
+            LEFT JOIN el_course_depart dept on ec.id =  dept.course_id
+            LEFT JOIN sys_user uc ON dept.dept_code=uc.dept_code
+            LEFT JOIN el_course_learn cl ON cl.user_id=uc.id AND cl.course_id=dept.course_id
+            <where>
+
+                <if test="query!=null">
+
+                    <if test="query.statDateL!=null ">
+                        AND ec.create_time >= #{query.statDateL}
+                    </if>
+
+                    <if test="query.statDateR!=null ">
+                        AND ec.create_time &lt; #{query.statDateR}
+                    </if>
+
+                    <if test="query.q!=null and query.q!=''">
+                        AND dept.dept_code = #{query.q}
+                    </if>
+
+                </if>
+
+            </where>
+            GROUP BY ec.id
+    </select>
+
 
 </mapper>