Ver código fonte

考培档案统计bug

chenminghua 2 anos atrás
pai
commit
8e40432e96

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

@@ -28,6 +28,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Calendar;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -243,6 +244,10 @@ public class CourseController extends BaseController {
         if(null == reqDTO || StringUtils.isEmpty(reqDTO.getQ().trim())){
             return super.failure("请求部门参数为空");
         }
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(reqDTO.getStatDateR());
+        cal.add(Calendar.DATE, 1);
+        reqDTO.setStatDateR(cal.getTime());
         List<courseDepartIdTotalDTO> dtoList = baseService.courseDepartIdTotal(reqDTO);
         return super.success(dtoList);
 

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

@@ -340,10 +340,12 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
         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<String> courseId3 = collect.containsKey(3) ? collect.get(3).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> courseDepartTotalDTOS = baseMapper.courseCountTotal2(courseId2);
+        List<CourseDepartTotalDTO> courseDepartTotalDTOS1 = baseMapper.courseCountTotal3(courseId3);
+        list.addAll(courseDepartTotalDTOS);
+        list.addAll(courseDepartTotalDTOS1);
         List<CourseDepartTotalDTO> dtos = list.stream().collect(groupingBy(CourseDepartTotalDTO::getDeptCode)).entrySet()
                 .stream().map(entry -> {
                     String key = entry.getKey();
@@ -360,11 +362,11 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                     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->{
-            d.setEcTotalMin(map.get(d.getDeptCode()));
-        });
+//        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;
     }
 

+ 6 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/ectotal/controller/ExamAndCourseTotalController.java

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.Calendar;
 import java.util.List;
 
 /**
@@ -46,6 +47,11 @@ public class ExamAndCourseTotalController extends BaseController {
     @ApiOperation(value = "全部门培训考试统计")
     @PostMapping("/ec-depart-total")
     public ApiRest examAndCourseDepartTotal(@RequestBody BaseQueryReqDTO reqDTO) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(reqDTO.getStatDateR());
+        cal.add(Calendar.DATE, 1);
+        reqDTO.setStatDateR(cal.getTime());
+
         List<ExamAndCourseDepartTotalDTO> dtoList = baseService.examAndCourseTotal(reqDTO);
         return super.success(dtoList);
     }

+ 5 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/controller/ExamController.java

@@ -23,6 +23,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
@@ -233,6 +234,10 @@ public class ExamController extends BaseController {
         if(null == reqDTO || StringUtils.isEmpty(reqDTO.getQ().trim())){
             return super.failure("请求部门参数为空");
         }
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(reqDTO.getStatDateR());
+        cal.add(Calendar.DATE, 1);
+        reqDTO.setStatDateR(cal.getTime());
         List<ExamDepartidTotalDTO> dtoList = baseService.examDepartidTotal(reqDTO);
         return super.success(dtoList);
 

+ 3 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/mapper/ExamMapper.java

@@ -56,6 +56,9 @@ public interface ExamMapper extends BaseMapper<Exam> {
     //不破毁逻辑的情况下,正确统计eePassUser
     List<ExamDepartTotalDTO> examDepartTotal2(@Param("query") BaseQueryReqDTO reqDTO);
 
+    List<ExamDepartTotalDTO> examCountTotal2(@Param("query") List<String> list);  //指定部门
+    List<ExamDepartTotalDTO> examCountTotal3(@Param("query") List<String> list);  //指定人员
+
     /**
      * 部门考试统计
      * @param reqDTO

+ 84 - 51
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/impl/ExamServiceImpl.java

@@ -10,6 +10,8 @@ import com.gyee.boot.base.api.api.dto.PagingReqDTO;
 import com.gyee.boot.base.api.exception.ServiceException;
 import com.gyee.boot.base.api.utils.BeanMapper;
 import com.gyee.exam.modules.course.dto.request.CheckUserCourseStatDTO;
+import com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO;
+import com.gyee.exam.modules.course.entity.Course;
 import com.gyee.exam.modules.exam.dto.response.*;
 import com.gyee.exam.modules.stat.course.dto.response.StatCourseLearnDTO;
 import com.gyee.exam.modules.stat.course.service.StatCourseService;
@@ -35,12 +37,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
+import static java.util.stream.Collectors.groupingBy;
+
 /**
 * <p>
 * 考试业务实现类
@@ -272,55 +273,87 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements Ex
     @Override
     public List<ExamDepartTotalDTO> examDepartTotal(BaseQueryReqDTO reqDTO) {
 
-        List<ExamDepartTotalDTO> allList = new ArrayList<>();
-        List<ExamDepartTotalDTO> examList = baseMapper.examDepartTotal(reqDTO);
-        List<ExamDepartTotalDTO> userList = baseMapper.selectUserTotal(reqDTO);
-        List<String> exams = examList.stream().map(ExamDepartTotalDTO::getDeptCode).collect(Collectors.toList());
-        List<String> users = userList.stream().map(ExamDepartTotalDTO::getDeptCode).collect(Collectors.toList());
-        ExamDepartTotalDTO totalDTO = null;
-        Map<String, List<ExamDepartTotalDTO>> groupexam = examList.stream().collect(Collectors.groupingBy(ExamDepartTotalDTO::getDeptCode));
-        Map<String, List<ExamDepartTotalDTO>> groupuser = userList.stream().collect(Collectors.groupingBy(ExamDepartTotalDTO::getDeptCode));
-
-        // 差集 (list1 - list2)
-        List<String> reduce = exams.stream().filter(item -> !users.contains(item)).collect(Collectors.toList());
-
-        // 交集
-        List<String> intersection = exams.stream().filter(users::contains).collect(Collectors.toList());
-
-        for (String key : intersection) {
-            totalDTO = new ExamDepartTotalDTO();
-            totalDTO.setDeptCode(groupexam.get(key).get(0).getDeptCode());
-            totalDTO.setDeptName(groupexam.get(key).get(0).getDeptName());
-            totalDTO.setEeActualUser(groupexam.get(key).get(0).getEeActualUser()+groupuser.get(key).get(0).getEeActualUser());
-            totalDTO.setEePassUser(groupexam.get(key).get(0).getEePassUser()+groupuser.get(key).get(0).getEePassUser());
-            totalDTO.setEeTotalUser(groupexam.get(key).get(0).getEeTotalUser()+groupuser.get(key).get(0).getEeTotalUser());
-            allList.add(totalDTO);
-        }
-
-        for (String key : reduce){
-
-            List<ExamDepartTotalDTO> groupexams = groupexam.get(key)== null ? null : groupexam.get(key);
-            List<ExamDepartTotalDTO> groupusers = groupuser.get(key) == null ? null : groupuser.get(key);
-
-            totalDTO = new ExamDepartTotalDTO();
-            totalDTO.setDeptCode(null != groupexams ? groupexams.get(0).getDeptCode() : groupusers.get(0).getDeptCode());
-            totalDTO.setDeptName(null != groupexams ? groupexams.get(0).getDeptName() : groupusers.get(0).getDeptName());
-            if (null != groupexams && groupexams.size() == 1){
-                totalDTO.setEeActualUser(groupexams.get(0).getEeActualUser());
-                totalDTO.setEePassUser(groupexams.get(0).getEePassUser());
-                totalDTO.setEeTotalUser(groupexams.get(0).getEeTotalUser());
-                allList.add(totalDTO);
-            }
+//        List<ExamDepartTotalDTO> allList = new ArrayList<>();
+//        List<ExamDepartTotalDTO> examList = baseMapper.examDepartTotal(reqDTO);
+//        List<ExamDepartTotalDTO> userList = baseMapper.selectUserTotal(reqDTO);
+//        List<String> exams = examList.stream().map(ExamDepartTotalDTO::getDeptCode).collect(Collectors.toList());
+//        List<String> users = userList.stream().map(ExamDepartTotalDTO::getDeptCode).collect(Collectors.toList());
+//        ExamDepartTotalDTO totalDTO = null;
+//        Map<String, List<ExamDepartTotalDTO>> groupexam = examList.stream().collect(Collectors.groupingBy(ExamDepartTotalDTO::getDeptCode));
+//        Map<String, List<ExamDepartTotalDTO>> groupuser = userList.stream().collect(Collectors.groupingBy(ExamDepartTotalDTO::getDeptCode));
+//
+//        // 差集 (list1 - list2)
+//        List<String> reduce = exams.stream().filter(item -> !users.contains(item)).collect(Collectors.toList());
+//
+//        // 交集
+//        List<String> intersection = exams.stream().filter(users::contains).collect(Collectors.toList());
+//
+//        for (String key : intersection) {
+//            totalDTO = new ExamDepartTotalDTO();
+//            totalDTO.setDeptCode(groupexam.get(key).get(0).getDeptCode());
+//            totalDTO.setDeptName(groupexam.get(key).get(0).getDeptName());
+//            totalDTO.setEeActualUser(groupexam.get(key).get(0).getEeActualUser()+groupuser.get(key).get(0).getEeActualUser());
+//            totalDTO.setEePassUser(groupexam.get(key).get(0).getEePassUser()+groupuser.get(key).get(0).getEePassUser());
+//            totalDTO.setEeTotalUser(groupexam.get(key).get(0).getEeTotalUser()+groupuser.get(key).get(0).getEeTotalUser());
+//            allList.add(totalDTO);
+//        }
+//
+//        for (String key : reduce){
+//
+//            List<ExamDepartTotalDTO> groupexams = groupexam.get(key)== null ? null : groupexam.get(key);
+//            List<ExamDepartTotalDTO> groupusers = groupuser.get(key) == null ? null : groupuser.get(key);
+//
+//            totalDTO = new ExamDepartTotalDTO();
+//            totalDTO.setDeptCode(null != groupexams ? groupexams.get(0).getDeptCode() : groupusers.get(0).getDeptCode());
+//            totalDTO.setDeptName(null != groupexams ? groupexams.get(0).getDeptName() : groupusers.get(0).getDeptName());
+//            if (null != groupexams && groupexams.size() == 1){
+//                totalDTO.setEeActualUser(groupexams.get(0).getEeActualUser());
+//                totalDTO.setEePassUser(groupexams.get(0).getEePassUser());
+//                totalDTO.setEeTotalUser(groupexams.get(0).getEeTotalUser());
+//                allList.add(totalDTO);
+//            }
+//
+//            if (null != groupusers && groupusers.size() == 1){
+//                totalDTO.setEeActualUser(groupusers.get(0).getEeActualUser());
+//                totalDTO.setEePassUser(groupusers.get(0).getEePassUser());
+//                totalDTO.setEeTotalUser(groupusers.get(0).getEeTotalUser());
+//                allList.add(totalDTO);
+//            }
+//
+//        }
 
-            if (null != groupusers && groupusers.size() == 1){
-                totalDTO.setEeActualUser(groupusers.get(0).getEeActualUser());
-                totalDTO.setEePassUser(groupusers.get(0).getEePassUser());
-                totalDTO.setEeTotalUser(groupusers.get(0).getEeTotalUser());
-                allList.add(totalDTO);
-            }
+        QueryWrapper<Exam> wrapper = new QueryWrapper<>();
+        wrapper.ge("start_time", reqDTO.getStatDateL()).le("end_time", reqDTO.getStatDateR());
+        List<Exam> courses = baseMapper.selectList(wrapper);
+        Map<Integer, List<Exam>> collect = courses.stream().collect(Collectors.groupingBy(Exam::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(3).stream().map(m -> m.getId()).collect(Collectors.toList()) : Collections.EMPTY_LIST;
+        List<ExamDepartTotalDTO> list = new ArrayList<>();
+        list.addAll(baseMapper.examCountTotal2(courseId2));
+        list.addAll(baseMapper.examCountTotal3(courseId3));
+        List<ExamDepartTotalDTO> dtos = list.stream().collect(groupingBy(ExamDepartTotalDTO::getDeptCode)).entrySet()
+                .stream().map(entry -> {
+                    String key = entry.getKey();
+                    List<ExamDepartTotalDTO> value = entry.getValue();
+                    Integer totalUser = value.stream().mapToInt(ExamDepartTotalDTO::getEeTotalUser).sum();
+                    Integer actualUser = value.stream().mapToInt(ExamDepartTotalDTO::getEeActualUser).sum();
+                    Integer passUser = value.stream().mapToInt(ExamDepartTotalDTO::getEePassUser).sum();
+                    ExamDepartTotalDTO obj = new ExamDepartTotalDTO();
+                    obj.setDeptCode(key);
+                    obj.setDeptName(value.get(0).getDeptName());
+                    obj.setEeTotalUser(totalUser);
+                    obj.setEeActualUser(actualUser);
+                    obj.setEePassUser(passUser);
+                    return obj;
+                }).collect(Collectors.toList());
+
+//        List<ExamDepartTotalDTO> mindtos = examDepartService.departPassedRate(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 allList;
+        return dtos;
     }
 
     @Override

+ 16 - 8
exam-06173-api/src/main/resources/mapper/course/CourseMapper.xml

@@ -257,10 +257,14 @@
         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>
+            <if test="query != null and query.size>0">
+                AND ec.id in
+                <foreach collection="query" index="index" item="item" open="(" separator="," close=")">
+                    '${item}'
+                </foreach>
+            </if>
+            -- 加2个if判断,如果为空则永远让语句查询不到数据
+            <if test="query==null or query.size==0">and 1=0</if>
         </where>
         GROUP BY   dept.dept_code
         ORDER BY ecActualUser desc ,ecPassUser desc
@@ -280,10 +284,14 @@
         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>
+            <if test="query != null and query.size>0">
+                AND ec.id in
+                <foreach collection="query" index="index" item="item" open="(" separator="," close=")">
+                    '${item}'
+                </foreach>
+            </if>
+            -- 加2个if判断,如果为空则永远让语句查询不到数据
+            <if test="query==null or query.size==0">and 1=0</if>
         </where>
         GROUP BY   sd.dept_code
         ORDER BY ecActualUser desc ,ecPassUser desc

+ 55 - 0
exam-06173-api/src/main/resources/mapper/exam/ExamMapper.xml

@@ -443,4 +443,59 @@
     </select>
 
 
+    <select id="examCountTotal2" resultType="com.gyee.exam.modules.exam.dto.response.ExamDepartTotalDTO">
+        SELECT
+        sd.dept_name deptName,
+        dept.dept_code deptCode,
+        COUNT(uc.id) AS eeTotalUser,-- 应培训人数
+        COUNT(cl.user_id) AS eeActualUser,-- 学习人数
+        COUNT(IF( cl.passed = 1 ,1, NULL)) AS eePassUser -- 学完人数
+        FROM el_exam ec
+        LEFT JOIN el_exam_depart dept on ec.id =  dept.exam_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_user_exam cl ON cl.user_id=uc.id AND cl.exam_id=dept.exam_id
+        <where>
+            AND uc.id IS NOT NULL AND sd.data_flag != '1'
+            <if test="query != null and query.size>0">
+                AND ec.id in
+                <foreach collection="query" index="index" item="item" open="(" separator="," close=")">
+                    '${item}'
+                </foreach>
+            </if>
+            -- 加2个if判断,如果为空则永远让语句查询不到数据
+            <if test="query==null or query.size==0">and 1=0</if>
+        </where>
+        GROUP BY   dept.dept_code
+        ORDER BY eeActualUser desc ,eePassUser desc
+    </select>
+
+    <select id="examCountTotal3" resultType="com.gyee.exam.modules.exam.dto.response.ExamDepartTotalDTO">
+        SELECT
+        sd.dept_name deptName,
+        sd.dept_code deptCode,
+        COUNT(uc.id) AS eeTotalUser,-- 应培训人数
+        COUNT(cl.user_id) AS eeActualUser,-- 学习人数
+        COUNT(IF( cl.passed = 1 ,1, NULL)) AS eePassUser -- 学完人数
+        FROM el_exam ec
+        LEFT JOIN el_exam_person cp ON ec.id=cp.exam_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_user_exam cl ON cp.user_id=cl.user_id AND cp.exam_id=cl.exam_id
+        <where>
+            AND uc.id IS NOT NULL AND sd.data_flag != '1'
+            AND ec.id in
+            <if test="query != null and query.size>0">
+                <foreach collection="query" index="index" item="item" open="(" separator="," close=")">
+                    '${item}'
+                </foreach>
+            </if>
+            -- 加2个if判断,如果为空则永远让语句查询不到数据
+            <if test="query==null or query.size==0">and 1=0</if>
+        </where>
+        GROUP BY   sd.dept_code
+        ORDER BY eeActualUser desc ,eePassUser desc
+    </select>
+
+
 </mapper>