瀏覽代碼

课程学习统计

chenminghua 1 年之前
父節點
當前提交
5b596cb8df

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

@@ -3,7 +3,9 @@ package com.gyee.exam.modules.course.dto.response;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 @Data
 @ApiModel(value="部门培训统计", description="部门培训统计")

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

@@ -46,6 +46,10 @@ public interface CourseMapper extends BaseMapper<Course> {
 
     List<CourseDepartTotalDTO> courseDepartTotal(@Param("query") BaseQueryReqDTO reqDTO);
 
+    List<CourseDepartTotalDTO> courseCountTotal2(@Param("query") List<String> list); //指定部门
+
+    List<CourseDepartTotalDTO> courseCountTotal3(@Param("query") List<String> list); //指定人员
+
     List<courseDepartIdTotalDTO> courseDepartIdTotal(@Param("query") BaseQueryReqDTO reqDTO);
 
     List<CourseUserTotalDTO> selectCourseUserTotal(@Param("query") BaseUserQueryReqDTO reqDTO);

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

@@ -27,6 +27,7 @@ import com.gyee.exam.modules.course.entity.CourseRefFile;
 import com.gyee.exam.modules.course.enums.CourseState;
 import com.gyee.exam.modules.course.mapper.CourseMapper;
 import com.gyee.exam.modules.course.service.*;
+import com.gyee.exam.modules.stat.course.dto.StatCourseTotalDTO;
 import com.gyee.exam.modules.sys.user.dto.SysUserDTO;
 import com.gyee.exam.modules.sys.user.entity.SysUser;
 import com.gyee.exam.modules.sys.user.service.SysUserService;
@@ -38,11 +39,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static java.util.stream.Collectors.groupingBy;
 
 /**
  * <p>
@@ -334,7 +335,31 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
 
     @Override
     public List<CourseDepartTotalDTO> courseDepartTotal(BaseQueryReqDTO reqDTO) {
-        List<CourseDepartTotalDTO> dtos = baseMapper.courseDepartTotal(reqDTO);
+        QueryWrapper<Course> wrapper = new QueryWrapper<>();
+        wrapper.ge("start_time", reqDTO.getStatDateL()).le("end_time", reqDTO.getStatDateR());
+        List<Course> courses = baseMapper.selectList(wrapper);
+        Map<Integer, List<Course>> collect = courses.stream().collect(Collectors.groupingBy(Course::getOpenType));
+        List<String> courseId2 = collect.containsKey(2) ? collect.get(2).stream().map(m -> m.getId()).collect(Collectors.toList()) : Collections.EMPTY_LIST;
+        List<String> courseId3 = collect.containsKey(3) ? collect.get(2).stream().map(m -> m.getId()).collect(Collectors.toList()) : Collections.EMPTY_LIST;
+        List<CourseDepartTotalDTO> list = new ArrayList<>();
+        list.addAll(baseMapper.courseCountTotal2(courseId2));
+        list.addAll(baseMapper.courseCountTotal3(courseId3));
+        List<CourseDepartTotalDTO> dtos = list.stream().collect(groupingBy(CourseDepartTotalDTO::getDeptCode)).entrySet()
+                .stream().map(entry -> {
+                    String key = entry.getKey();
+                    List<CourseDepartTotalDTO> value = entry.getValue();
+                    Integer totalUser = value.stream().mapToInt(CourseDepartTotalDTO::getEcTotalUser).sum();
+                    Integer actualUser = value.stream().mapToInt(CourseDepartTotalDTO::getEcActualUser).sum();
+                    Integer passUser = value.stream().mapToInt(CourseDepartTotalDTO::getEcPassUser).sum();
+                    CourseDepartTotalDTO obj = new CourseDepartTotalDTO();
+                    obj.setDeptCode(key);
+                    obj.setDeptName(value.get(0).getDeptName());
+                    obj.setEcTotalUser(totalUser);
+                    obj.setEcActualUser(actualUser);
+                    obj.setEcPassUser(passUser);
+                    return obj;
+                }).collect(Collectors.toList());
+
         List<CourseDepartTotalDTO> mindtos = courseFileLearnService.courseDepartTotalMin(reqDTO);
         Map<String,Integer> map = mindtos.stream().collect(Collectors.toMap(CourseDepartTotalDTO::getDeptCode,CourseDepartTotalDTO::getEcTotalMin));
         dtos.stream().forEach(d->{
@@ -379,7 +404,7 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
         }
 
         if(null != learndtos && learndtos.size()>0){
-            Map<String,List<CourseLearnDTO> > groupmap = learndtos.stream().collect(Collectors.groupingBy(CourseLearnDTO::getCourseId));
+            Map<String,List<CourseLearnDTO> > groupmap = learndtos.stream().collect(groupingBy(CourseLearnDTO::getCourseId));
             dtoList.stream().forEach(d->{
                 d.setUpdateTime(groupmap.get(d.getId()).get(0).getUpdateTime());
                 d.setFinishTime(groupmap.get(d.getId()).get(0).getFinishTime());

+ 49 - 2
exam-06173-api/src/main/resources/mapper/course/CourseMapper.xml

@@ -213,14 +213,15 @@
         SELECT
         sd.dept_name deptName,
         dept.dept_code deptCode,
-        COUNT( uc.id) AS ecTotalUser,-- 应培训人数
-        COUNT( cl.user_id) AS ecActualUser,-- 学习人数
+        COUNT(cp.id) AS ecTotalUser,-- 应培训人数
+        COUNT(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
+        LEFT JOIN el_course_person cp ON cp.course_id=cl.course_id AND cp.user_id=uc.id
         <where>
             AND uc.id IS NOT NULL AND sd.data_flag != '1'
             <if test="query!=null">
@@ -240,9 +241,55 @@
 
         GROUP BY   dept.dept_code
         ORDER BY ecActualUser desc ,ecPassUser desc
+    </select>
 
+    <select id="courseCountTotal2" resultType="com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO">
+        SELECT
+        sd.dept_name deptName,
+        dept.dept_code deptCode,
+        COUNT(uc.id) AS ecTotalUser,-- 应培训人数
+        COUNT(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 AND sd.data_flag != '1'
+            AND ec.id in
+            <foreach collection="query" index="index" item="item" open="(" separator="," close=")">
+                '${item}'
+            </foreach>
+        </where>
+        GROUP BY   dept.dept_code
+        ORDER BY ecActualUser desc ,ecPassUser desc
+    </select>
 
+    <select id="courseCountTotal3" resultType="com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO">
+        SELECT
+        sd.dept_name deptName,
+        sd.dept_code deptCode,
+        COUNT(uc.id) AS ecTotalUser,-- 应培训人数
+        COUNT(cl.user_id) AS ecActualUser,-- 学习人数
+        COUNT(IF( cl.state = 1 ,1, NULL)) AS ecPassUser -- 学完人数
+        FROM el_course ec
+        LEFT JOIN el_course_person cp ON ec.id=cp.course_id
+        LEFT JOIN sys_user uc ON uc.id=cp.user_id
+        LEFT JOIN sys_depart sd on sd.dept_code = uc.dept_code
+        LEFT JOIN el_course_learn cl ON cp.user_id=cl.user_id AND cp.course_id=cl.course_id
+        <where>
+            AND uc.id IS NOT NULL AND sd.data_flag != '1'
+            AND ec.id in
+            <foreach collection="query" index="index" item="item" open="(" separator="," close=")">
+                '${item}'
+            </foreach>
+        </where>
+        GROUP BY   sd.dept_code
+        ORDER BY ecActualUser desc ,ecPassUser desc
     </select>
+
+
     <select id="courseDepartIdTotal"
             resultType="com.gyee.exam.modules.course.dto.response.courseDepartIdTotalDTO">
             SELECT