Browse Source

Merge branch 'master' of http://124.70.43.205:3000/GYEE_R.D/exam

chenminghua 2 years ago
parent
commit
ae2abb50df
35 changed files with 1640 additions and 25 deletions
  1. 37 0
      exam-06173-api/src/main/java/com/gyee/boot/base/api/api/dto/BaseUserQueryReqDTO.java
  2. 99 5
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/controller/CourseController.java
  3. 24 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseDepartRankDTO.java
  4. 39 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseDepartTotalDTO.java
  5. 43 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseUserIdTotalDTO.java
  6. 23 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseUserRankDTO.java
  7. 36 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseUserTotalDTO.java
  8. 41 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/courseDepartIdTotalDTO.java
  9. 10 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseDepartMapper.java
  10. 17 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseFileLearnMapper.java
  11. 14 2
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseMapper.java
  12. 10 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseDepartService.java
  13. 14 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseFileLearnService.java
  14. 56 1
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseService.java
  15. 10 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseDepartServiceImpl.java
  16. 28 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseFileLearnServiceImpl.java
  17. 65 2
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseServiceImpl.java
  18. 85 7
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/controller/ExamController.java
  19. 26 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamDepartPassedRateDTO.java
  20. 32 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamDepartTotalDTO.java
  21. 55 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamDepartidTotalDTO.java
  22. 25 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamUserPassedRateDTO.java
  23. 33 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/examUserTotalDTO.java
  24. 24 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/mapper/ExamDepartMapper.java
  25. 23 2
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/mapper/ExamMapper.java
  26. 26 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/ExamDepartService.java
  27. 38 3
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/ExamService.java
  28. 17 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/impl/ExamDepartServiceImpl.java
  29. 43 3
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/impl/ExamServiceImpl.java
  30. 97 0
      exam-06173-api/src/main/resources/application-uat.yml
  31. 35 0
      exam-06173-api/src/main/resources/mapper/course/CourseDepartMapper.xml
  32. 117 0
      exam-06173-api/src/main/resources/mapper/course/CourseFileLearnMapper.xml
  33. 197 0
      exam-06173-api/src/main/resources/mapper/course/CourseMapper.xml
  34. 69 0
      exam-06173-api/src/main/resources/mapper/exam/ExamDepartMapper.xml
  35. 132 0
      exam-06173-api/src/main/resources/mapper/exam/ExamMapper.xml

+ 37 - 0
exam-06173-api/src/main/java/com/gyee/boot/base/api/api/dto/BaseUserQueryReqDTO.java

@@ -0,0 +1,37 @@
+package com.gyee.boot.base.api.api.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+@ApiModel(value="按关键字查询请求通用类", description="按关键字查询请求通用类")
+@AllArgsConstructor
+@NoArgsConstructor
+public class BaseUserQueryReqDTO {
+
+    @ApiModelProperty(value = "日期开始", required=true)
+    private Date statDateL;
+
+    @ApiModelProperty(value = "日期结束", required=true)
+    private Date statDateR;
+
+    @ApiModelProperty(value = "部门名", required=true)
+    private String deptName;
+
+    @ApiModelProperty(value = "部门code", required=true)
+    private String deptCode;
+
+    @ApiModelProperty(value = "用户名称(CH)", required=true)
+    private String realName;
+
+    @ApiModelProperty(value = "用户名称(EN)", required=true)
+    private String userName;
+
+
+}

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

@@ -6,28 +6,27 @@ import com.gyee.boot.base.api.annon.DataProtect;
 import com.gyee.boot.base.api.annon.LogInject;
 import com.gyee.boot.base.api.api.ApiRest;
 import com.gyee.boot.base.api.api.controller.BaseController;
-import com.gyee.boot.base.api.api.dto.BaseIdReqDTO;
-import com.gyee.boot.base.api.api.dto.BaseIdsReqDTO;
-import com.gyee.boot.base.api.api.dto.BaseStateReqDTO;
-import com.gyee.boot.base.api.api.dto.PagingReqDTO;
+import com.gyee.boot.base.api.api.dto.*;
 import com.gyee.boot.base.api.utils.BeanMapper;
 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.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;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -182,4 +181,99 @@ public class CourseController extends BaseController {
 
 
 
+
+    /**
+     * 各部门课程排行
+     * @return
+     */
+    @ApiOperation(value = "课程部门排行")
+    @GetMapping("/course-depart-rank")
+    public ApiRest courseDepartRank(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<CourseDepartRankDTO> dtoList = baseService.courseDepartRank(reqDTO);
+
+        return super.success(dtoList);
+    }
+
+
+    /**
+     * 统计职员学习总时长(分钟)
+     * @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);
+
+    }
+
+
+
+
+
+    /**
+     * 职员培训统计
+     * @return
+     */
+    @ApiOperation(value = "职员培训统计")
+    @GetMapping("/course-user-total")
+    public ApiRest courseUserTotal(@RequestBody BaseUserQueryReqDTO reqDTO) {
+
+        List<CourseUserTotalDTO> dtoList = baseService.getCourseUserTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+
+    /**
+     * 单个职员培训统计
+     * @return
+     */
+    @ApiOperation(value = "单个职员培训统计")
+    @GetMapping("/course-userId-total")
+    public ApiRest courseUserIdTotal(@RequestBody BaseUserQueryReqDTO reqDTO) {
+
+        if(null == reqDTO || StringUtils.isEmpty(reqDTO.getUserName().trim())){
+            return super.failure("请求职员编号为空");
+        }
+        List<CourseUserIdTotalDTO> dtoList = baseService.getCourseUserIdTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+
 }

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

@@ -0,0 +1,24 @@
+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 CourseDepartRankDTO {
+
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "部门编码")
+    private String deptCode;
+
+    @ApiModelProperty(value = "部门名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "课程数量")
+    private Integer total;
+
+}

+ 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;
+    }
+}

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

@@ -0,0 +1,43 @@
+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 CourseUserIdTotalDTO {
+
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "课程id")
+    private String id;
+
+    @ApiModelProperty(value = "课程标题")
+    private String title;
+
+    @ApiModelProperty(value = "课程是否完成培训;1(已完成),0(未完成)")
+    private Integer  state;
+
+    @ApiModelProperty(value = "课时数")
+    private Integer periods;
+
+    @ApiModelProperty(value = "创建时间")
+    private String createTime;
+
+    @ApiModelProperty(value = "最后学习时间时间")
+    private String updateTime;
+
+    @ApiModelProperty(value = "是否关联考试")
+    private String associate;
+
+    @ApiModelProperty(value = "规定学习时长(分钟)")
+    private int needLearn;
+
+    @ApiModelProperty(value = "已学习时长(分钟)")
+    private int learnMin;
+
+
+}

+ 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;
+}

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

@@ -0,0 +1,36 @@
+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 CourseUserTotalDTO {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "部门名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "部门code")
+    private String deptCode;
+
+    @ApiModelProperty(value = "职员名称")
+    private String realName;
+
+    @ApiModelProperty(value = "职员code")
+    private String userName;
+
+    @ApiModelProperty(value = "参与课程数")
+    private int courseNum;
+
+    @ApiModelProperty(value = "已学习课程")
+    private int learnCourse;
+
+    @ApiModelProperty(value = "学习时长(分钟)")
+    private int totalMin;
+
+
+}

+ 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);
+
+
 }

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

@@ -3,11 +3,18 @@ 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.boot.base.api.api.dto.BaseUserQueryReqDTO;
 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.dto.response.CourseUserIdTotalDTO;
+import com.gyee.exam.modules.course.dto.response.CourseUserTotalDTO;
 import com.gyee.exam.modules.course.entity.CourseFileLearn;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
 * <p>
 * 课件学习Mapper
@@ -34,4 +41,14 @@ public interface CourseFileLearnMapper extends BaseMapper<CourseFileLearn> {
      */
     Integer countFinished(@Param("userId") String userId,
                           @Param("courseId") String courseId);
+
+
+    List<CourseDepartTotalDTO> courseDepartTotalMin(@Param("query") BaseQueryReqDTO reqDTO);
+
+
+    List<CourseUserTotalDTO> selectCourseUserTotalMin(@Param("query") BaseUserQueryReqDTO reqDTO);
+
+
+
+    List<CourseUserIdTotalDTO> selectCourseUserIdTotalMin(@Param("query")  BaseUserQueryReqDTO reqDTO);
 }

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

@@ -3,10 +3,11 @@ 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.boot.base.api.api.dto.BaseUserQueryReqDTO;
 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.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;
 
@@ -39,4 +40,15 @@ public interface CourseMapper extends BaseMapper<Course> {
     IPage<UserCourseRespDTO> userPaging(Page page, @Param("query") UserCourseReqDTO reqDTO);
 
     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);
+
+    List<CourseUserTotalDTO> selectCourseUserTotal(@Param("query") BaseUserQueryReqDTO reqDTO);
+
+
+    List<CourseUserIdTotalDTO> selectCourseUserIdTotal(@Param("query") BaseUserQueryReqDTO 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);
 }

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

@@ -2,11 +2,17 @@ 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.BaseUserQueryReqDTO;
 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.dto.response.CourseUserTotalDTO;
+import com.gyee.exam.modules.course.dto.response.CourseUserIdTotalDTO;
 import com.gyee.exam.modules.course.entity.CourseFileLearn;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -58,4 +64,12 @@ public interface CourseFileLearnService extends IService<CourseFileLearn> {
      * @return
      */
     CourseFileLearn findOne(String userId, String courseId, String fileId);
+
+
+    List<CourseDepartTotalDTO> courseDepartTotalMin(BaseQueryReqDTO reqDTO);
+
+
+    List<CourseUserTotalDTO> getCourseUserTotalMin(BaseUserQueryReqDTO reqDTO);
+
+    List<CourseUserIdTotalDTO> getCourseUserIdTotalMin(@Param("query") BaseUserQueryReqDTO reqDTO);
 }

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

@@ -2,13 +2,17 @@ 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.BaseUserQueryReqDTO;
 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.UserCourseRespDTO;
+import com.gyee.exam.modules.course.dto.response.*;
 import com.gyee.exam.modules.course.entity.Course;
 
+import java.util.List;
+
 /**
 * <p>
 * 课程信息业务类
@@ -69,4 +73,55 @@ public interface CourseService extends IService<Course> {
      */
     int courseAllTotal();
 
+    /**
+     * 部门课程排行榜
+     * @return
+     */
+    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);
+
+
+    /**
+     * 职员培训统计
+     * @param reqDTO
+     * @return
+     */
+    List<CourseUserTotalDTO> getCourseUserTotal(BaseUserQueryReqDTO reqDTO);
+
+
+
+    /**
+     * 单个职员培训统计
+     * @param reqDTO
+     * @return
+     */
+    List<CourseUserIdTotalDTO> getCourseUserIdTotal(BaseUserQueryReqDTO 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;
+    }
 }

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

@@ -3,11 +3,16 @@ 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.BaseUserQueryReqDTO;
 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.dto.response.CourseUserTotalDTO;
+import com.gyee.exam.modules.course.dto.response.CourseUserIdTotalDTO;
 import com.gyee.exam.modules.course.entity.*;
 import com.gyee.exam.modules.course.enums.CourseState;
 import com.gyee.exam.modules.course.mapper.CourseFileLearnMapper;
@@ -221,6 +226,8 @@ public class CourseFileLearnServiceImpl extends ServiceImpl<CourseFileLearnMappe
         return record;
     }
 
+
+
     /**
      * 校验整个课程的学习进度
      * @param courseId
@@ -269,5 +276,26 @@ public class CourseFileLearnServiceImpl extends ServiceImpl<CourseFileLearnMappe
         courseLearnService.saveOrUpdate(learn);
     }
 
+    @Override
+    public List<CourseDepartTotalDTO> courseDepartTotalMin(BaseQueryReqDTO reqDTO) {
+        List<CourseDepartTotalDTO> dtos = baseMapper.courseDepartTotalMin(reqDTO);
+        return dtos;
+    }
+
+    @Override
+    public List<CourseUserTotalDTO> getCourseUserTotalMin(BaseUserQueryReqDTO reqDTO) {
+        List<CourseUserTotalDTO> dtos =  baseMapper.selectCourseUserTotalMin(reqDTO);
+        return dtos;
+    }
+
+
+
+    @Override
+    public List<CourseUserIdTotalDTO> getCourseUserIdTotalMin(BaseUserQueryReqDTO reqDTO) {
+
+        List<CourseUserIdTotalDTO> dtos = baseMapper.selectCourseUserIdTotalMin(reqDTO);
+
+        return dtos;
+    }
 
 }

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

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.BaseUserQueryReqDTO;
 import com.gyee.boot.base.api.api.dto.PagingReqDTO;
 import com.gyee.boot.base.api.utils.BeanMapper;
 import com.gyee.boot.base.api.utils.DecimalUtils;
@@ -16,8 +18,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.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;
@@ -71,6 +72,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) {
 
@@ -301,4 +305,63 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
         return count;
     }
 
+    @Override
+    public List<CourseDepartRankDTO> courseDepartRank(BaseQueryReqDTO reqDTO) {
+        List<CourseDepartRankDTO> dtoList = baseMapper.courseDepartRank(reqDTO);
+        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;
+    }
+
+    @Override
+    public List<CourseUserTotalDTO> getCourseUserTotal(BaseUserQueryReqDTO reqDTO) {
+
+
+        List<CourseUserTotalDTO>  dtoList =  baseMapper.selectCourseUserTotal(reqDTO);
+        List<CourseUserTotalDTO>  mindtos = courseFileLearnService.getCourseUserTotalMin(reqDTO);
+        Map<String,Integer> map = mindtos.stream().collect(Collectors.toMap(CourseUserTotalDTO::getUserName,CourseUserTotalDTO::getTotalMin));
+
+        dtoList.stream().forEach(d->{
+            d.setTotalMin(map.get(d.getUserName()));
+
+        });
+        return dtoList;
+
+    }
+
+    @Override
+    public List<CourseUserIdTotalDTO> getCourseUserIdTotal(BaseUserQueryReqDTO reqDTO) {
+
+        List<CourseUserIdTotalDTO> dtoList = baseMapper.selectCourseUserIdTotal(reqDTO);
+        List<CourseUserIdTotalDTO> mindtos = courseFileLearnService.getCourseUserIdTotalMin(reqDTO);
+        Map<String,Integer> map = mindtos.stream().collect(Collectors.toMap(CourseUserIdTotalDTO::getId, CourseUserIdTotalDTO::getLearnMin));
+        dtoList.stream().forEach(d->{
+            d.setLearnMin(map.get(d.getId()));
+        });
+        return dtoList;
+
+    }
+
+
 }

+ 85 - 7
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/controller/ExamController.java

@@ -6,28 +6,26 @@ import com.gyee.boot.base.api.annon.DataProtect;
 import com.gyee.boot.base.api.annon.LogInject;
 import com.gyee.boot.base.api.api.ApiRest;
 import com.gyee.boot.base.api.api.controller.BaseController;
-import com.gyee.boot.base.api.api.dto.BaseIdReqDTO;
-import com.gyee.boot.base.api.api.dto.BaseIdsReqDTO;
-import com.gyee.boot.base.api.api.dto.BaseStateReqDTO;
-import com.gyee.boot.base.api.api.dto.PagingReqDTO;
+import com.gyee.boot.base.api.api.dto.*;
 import com.gyee.boot.base.api.utils.BeanMapper;
 import com.gyee.boot.base.aspect.log.enums.LogType;
+import com.gyee.exam.modules.course.dto.response.courseDepartIdTotalDTO;
 import com.gyee.exam.modules.exam.dto.ExamDTO;
 import com.gyee.exam.modules.exam.dto.request.ExamReqDTO;
 import com.gyee.exam.modules.exam.dto.request.ExamSaveReqDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamCheckRespDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamOnlineRespDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamReviewRespDTO;
+import com.gyee.exam.modules.exam.dto.response.*;
 import com.gyee.exam.modules.exam.entity.Exam;
 import com.gyee.exam.modules.exam.service.ExamService;
 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;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
+import java.util.List;
 
 /**
 * <p>
@@ -181,4 +179,84 @@ public class ExamController extends BaseController {
         respDTO.setPassword("");
         return super.success(respDTO);
     }
+
+    /**
+     * 各部门考试及格率
+     * @return
+     */
+    @ApiOperation(value = "部门考试及格率")
+    @GetMapping("/depart-passed-rate")
+    public ApiRest departPassedRate(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<ExamDepartPassedRateDTO> dtoList = baseService.departPassedRate(reqDTO);
+        return super.success(dtoList);
+    }
+
+
+    /**
+     * 各职员考试及格率
+     * @return
+     */
+    @ApiOperation(value = "用户考试及格率")
+    @GetMapping("/user-passed-rate")
+    public ApiRest userPassedRate(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<ExamUserPassedRateDTO> dtoList = baseService.userPassedRate(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+
+    /**
+     * 部门培训统计
+     * @return
+     */
+    @ApiOperation(value = "部门培训统计")
+    @GetMapping("/exam-depart-total")
+    public ApiRest examDepartTotal(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<ExamDepartTotalDTO> dtoList = baseService.examDepartTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+    /**
+     * 单部门考试统计
+     * @return
+     */
+    @ApiOperation(value = "单部门考试统计")
+    @GetMapping("/exam-departid-total")
+    public ApiRest examDepartidTotal(@RequestBody BaseQueryReqDTO reqDTO) {
+        if(null == reqDTO || StringUtils.isEmpty(reqDTO.getQ().trim())){
+            return super.failure("请求部门参数为空");
+        }
+        List<ExamDepartidTotalDTO> dtoList = baseService.examDepartidTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+
+
+    /**
+     * 职员考试统计
+     * @return
+     */
+    @ApiOperation(value = "职员考试统计")
+    @GetMapping("/exam-user-total")
+    public ApiRest examUserTotal(@RequestBody BaseUserQueryReqDTO reqDTO) {
+
+        List<examUserTotalDTO> dtoList = baseService.getExamUserTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+
 }

+ 26 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamDepartPassedRateDTO.java

@@ -0,0 +1,26 @@
+package com.gyee.exam.modules.exam.dto.response;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value="考试及格率统计响应类", description="考试及格率统计响应类")
+public class ExamDepartPassedRateDTO {
+
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "部门编码")
+    private String deptCode;
+
+    @ApiModelProperty(value = "部门名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "参加考试总人次")
+    private Integer total;
+
+    @ApiModelProperty(value = "参加考试通过人数")
+    private double passed;
+}

+ 32 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamDepartTotalDTO.java

@@ -0,0 +1,32 @@
+package com.gyee.exam.modules.exam.dto.response;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value="考试统计响应类", description="考试统计响应类")
+public class ExamDepartTotalDTO {
+
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "部门编码")
+    private String deptCode;
+
+    @ApiModelProperty(value = "部门名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "考试总人次")
+    private Integer eeTotalUser;
+
+    @ApiModelProperty(value = "考试人次")
+    private Integer eeActualUser;
+
+    @ApiModelProperty(value = "已考试结束人数")
+    private Integer eePassUser;
+
+
+
+}

+ 55 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamDepartidTotalDTO.java

@@ -0,0 +1,55 @@
+package com.gyee.exam.modules.exam.dto.response;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value="单部门考试统计响应类", description="单部门考试统计响应类")
+public class ExamDepartidTotalDTO {
+
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "考试id")
+    private String id;
+
+    @ApiModelProperty(value = "考试题目")
+    private String title;
+
+    @ApiModelProperty(value = "开始考试时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "结束考试时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "总分数")
+    private double totalScore;
+
+    @ApiModelProperty(value = "考试总时长")
+    private int totalTime;
+
+    @ApiModelProperty(value = "考试最高分")
+    private double maxScore;
+
+    @ApiModelProperty(value = "考试最低分")
+    private double minScore;
+
+    @ApiModelProperty(value = "参加考试人数")
+    private int actualUser;
+
+    @ApiModelProperty(value = "考试及格人数")
+    private int passed;
+
+
+
+
+
+
+
+
+
+
+
+}

+ 25 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamUserPassedRateDTO.java

@@ -0,0 +1,25 @@
+package com.gyee.exam.modules.exam.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@Data
+@ApiModel(value="职员考试及格率统计响应类", description="职员考试及格率统计响应类")
+public class ExamUserPassedRateDTO {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "用户名")
+    private String userName;
+
+    @ApiModelProperty(value = "真实名称")
+    private String realName;
+
+    @ApiModelProperty(value = "参加考试总人次")
+    private Integer total;
+
+    @ApiModelProperty(value = "参加考试通过人数")
+    private double passed;
+}

+ 33 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/examUserTotalDTO.java

@@ -0,0 +1,33 @@
+package com.gyee.exam.modules.exam.dto.response;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value="职员考试统计响应类", description="职员考试统计响应类")
+public class examUserTotalDTO {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "部门名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "部门code")
+    private String deptCode;
+
+    @ApiModelProperty(value = "职员名称")
+    private String realName;
+
+    @ApiModelProperty(value = "职员code")
+    private String userName;
+
+    @ApiModelProperty(value = "考试次数")
+    private int tryCount;
+
+    @ApiModelProperty(value = "及格次数")
+    private int passed;
+
+
+}

+ 24 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/mapper/ExamDepartMapper.java

@@ -1,7 +1,14 @@
 package com.gyee.exam.modules.exam.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.boot.base.api.api.dto.BaseQueryReqDTO;
+import com.gyee.exam.modules.exam.dto.response.ExamDepartPassedRateDTO;
+import com.gyee.exam.modules.exam.dto.response.ExamUserPassedRateDTO;
 import com.gyee.exam.modules.exam.entity.ExamDepart;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
 /**
 * <p>
 * 考试部门Mapper
@@ -12,4 +19,21 @@ import com.gyee.exam.modules.exam.entity.ExamDepart;
 */
 public interface ExamDepartMapper extends BaseMapper<ExamDepart> {
 
+
+    /**
+     * 根据部门统计考试及格率
+     * @param reqDTO
+     * @return
+     */
+    List<ExamDepartPassedRateDTO> departPassedRate(@Param("query") BaseQueryReqDTO reqDTO);
+
+
+    /**
+     * 职员考试及格率统计
+     * @param reqDTO
+     * @return
+     */
+    List<ExamUserPassedRateDTO> userPassedRate(@Param("query") BaseQueryReqDTO reqDTO);
+
+
 }

+ 23 - 2
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/mapper/ExamMapper.java

@@ -3,12 +3,15 @@ package com.gyee.exam.modules.exam.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.boot.base.api.api.dto.BaseUserQueryReqDTO;
 import com.gyee.exam.modules.exam.dto.ExamDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamReviewRespDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamOnlineRespDTO;
+import com.gyee.exam.modules.exam.dto.response.*;
 import com.gyee.exam.modules.exam.entity.Exam;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
 * <p>
 * 考试Mapper
@@ -42,4 +45,22 @@ public interface ExamMapper extends BaseMapper<Exam> {
      * @return
      */
     IPage<ExamOnlineRespDTO> online(Page page, @Param("query") ExamDTO query);
+
+
+    /**
+     * 部门培训统计
+     * @param reqDTO
+     * @return
+     */
+    List<ExamDepartTotalDTO> examDepartTotal(@Param("query") BaseQueryReqDTO reqDTO);
+
+
+    List<ExamDepartidTotalDTO> selectExamDepartidTotal(@Param("query") BaseQueryReqDTO reqDTO);
+
+    /**
+     * 职员考试统计
+     * @param reqDTO
+     * @return
+     */
+    List<examUserTotalDTO> selectExamUserTotal(@Param("query")  BaseUserQueryReqDTO reqDTO);
 }

+ 26 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/ExamDepartService.java

@@ -1,7 +1,12 @@
 package com.gyee.exam.modules.exam.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.gyee.boot.base.api.api.dto.BaseQueryReqDTO;
+import com.gyee.exam.modules.exam.dto.response.ExamDepartPassedRateDTO;
+import com.gyee.exam.modules.exam.dto.response.ExamDepartTotalDTO;
+import com.gyee.exam.modules.exam.dto.response.ExamUserPassedRateDTO;
 import com.gyee.exam.modules.exam.entity.ExamDepart;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -29,4 +34,25 @@ public interface ExamDepartService extends IService<ExamDepart> {
      * @return
      */
     List<String> listByExam(String examId);
+
+    /**
+     * 更具部们统计考试及格率
+     * @param reqDTO
+     * @return
+     */
+    List<ExamDepartPassedRateDTO> departPassedRate(BaseQueryReqDTO reqDTO);
+
+
+    /**
+     * 职员考试及格率统计
+     * @param reqDTO
+     * @return
+     */
+    List<ExamUserPassedRateDTO> userPassedRate(BaseQueryReqDTO reqDTO);
+
+
+
+
+
+
 }

+ 38 - 3
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/ExamService.java

@@ -2,13 +2,13 @@ package com.gyee.exam.modules.exam.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.BaseUserQueryReqDTO;
 import com.gyee.boot.base.api.api.dto.PagingReqDTO;
 import com.gyee.exam.modules.exam.dto.ExamDTO;
 import com.gyee.exam.modules.exam.dto.request.ExamReqDTO;
 import com.gyee.exam.modules.exam.dto.request.ExamSaveReqDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamCheckRespDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamOnlineRespDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamReviewRespDTO;
+import com.gyee.exam.modules.exam.dto.response.*;
 import com.gyee.exam.modules.exam.entity.Exam;
 
 import java.util.List;
@@ -85,4 +85,39 @@ public interface ExamService extends IService<Exam> {
      * @param ids
      */
     void delete(List<String> ids);
+
+    /**
+     * 部门考试及格率统计
+     * @param reqDTO
+     * @return
+     */
+    List<ExamDepartPassedRateDTO> departPassedRate(BaseQueryReqDTO reqDTO);
+
+    /**
+     * 职员考试及格率统计
+     * @param reqDTO
+     * @return
+     */
+    List<ExamUserPassedRateDTO> userPassedRate(BaseQueryReqDTO reqDTO);
+
+    /**
+     * 考试统计方法
+     * @param reqDTO
+     * @return
+     */
+    List<ExamDepartTotalDTO> examDepartTotal(BaseQueryReqDTO reqDTO);
+
+
+    List<ExamDepartidTotalDTO> examDepartidTotal(BaseQueryReqDTO reqDTO);
+
+
+    /**
+     * 职员考试统计
+     * @param reqDTO
+     * @return
+     */
+    List<examUserTotalDTO>  getExamUserTotal(BaseUserQueryReqDTO reqDTO);
+
+
+
 }

+ 17 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/impl/ExamDepartServiceImpl.java

@@ -2,7 +2,10 @@ package com.gyee.exam.modules.exam.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.exam.dto.response.ExamDepartPassedRateDTO;
+import com.gyee.exam.modules.exam.dto.response.ExamUserPassedRateDTO;
 import com.gyee.exam.modules.exam.entity.ExamDepart;
 import com.gyee.exam.modules.exam.mapper.ExamDepartMapper;
 import com.gyee.exam.modules.exam.service.ExamDepartService;
@@ -63,4 +66,18 @@ public class ExamDepartServiceImpl extends ServiceImpl<ExamDepartMapper, ExamDep
         return ids;
 
     }
+
+    @Override
+    public List<ExamDepartPassedRateDTO> departPassedRate(BaseQueryReqDTO reqDTO) {
+        List<ExamDepartPassedRateDTO> dtos = baseMapper.departPassedRate(reqDTO);
+        return dtos;
+    }
+
+    @Override
+    public List<ExamUserPassedRateDTO> userPassedRate(BaseQueryReqDTO reqDTO) {
+        List<ExamUserPassedRateDTO>  dtos = baseMapper.userPassedRate(reqDTO);
+        return dtos;
+    }
+
+
 }

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

@@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 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.BaseUserQueryReqDTO;
 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.exam.dto.response.*;
 import org.apache.commons.lang3.StringUtils;
 import com.gyee.exam.ability.redis.service.RedisService;
 import com.gyee.exam.enums.OpenType;
 import com.gyee.exam.modules.exam.dto.ExamDTO;
 import com.gyee.exam.modules.exam.dto.request.ExamReqDTO;
 import com.gyee.exam.modules.exam.dto.request.ExamSaveReqDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamCheckRespDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamOnlineRespDTO;
-import com.gyee.exam.modules.exam.dto.response.ExamReviewRespDTO;
 import com.gyee.exam.modules.exam.entity.Exam;
 import com.gyee.exam.modules.exam.mapper.ExamMapper;
 import com.gyee.exam.modules.exam.service.ExamDepartService;
@@ -217,4 +217,44 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements Ex
         return null;
     }
 
+
+    @Override
+    public List<ExamDepartPassedRateDTO> departPassedRate(BaseQueryReqDTO reqDTO) {
+        List<ExamDepartPassedRateDTO> dtos = examDepartService.departPassedRate(reqDTO);
+
+        return dtos;
+    }
+
+    @Override
+    public List<ExamUserPassedRateDTO> userPassedRate(BaseQueryReqDTO reqDTO) {
+        List<ExamUserPassedRateDTO> dtos  = examDepartService.userPassedRate(reqDTO);
+        return dtos;
+    }
+
+
+    @Override
+    public List<ExamDepartTotalDTO> examDepartTotal(BaseQueryReqDTO reqDTO) {
+
+        List<ExamDepartTotalDTO> dtos = baseMapper.examDepartTotal(reqDTO);
+
+        return dtos;
+    }
+
+    @Override
+    public List<ExamDepartidTotalDTO> examDepartidTotal(BaseQueryReqDTO reqDTO) {
+
+        List<ExamDepartidTotalDTO> dtos = baseMapper.selectExamDepartidTotal(reqDTO);
+
+        return dtos;
+    }
+
+    @Override
+    public List<examUserTotalDTO> getExamUserTotal(BaseUserQueryReqDTO reqDTO) {
+
+        List<examUserTotalDTO> dtoList = baseMapper.selectExamUserTotal(reqDTO);
+        return dtoList;
+
+    }
+
+
 }

+ 97 - 0
exam-06173-api/src/main/resources/application-uat.yml

@@ -0,0 +1,97 @@
+spring:
+#  123.60.213.70
+  # 数据库配置
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    #国电考培服务器
+    url: jdbc:mysql://10.155.32.18:3306/yf_exam?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
+    username: root
+    password: 123456
+    filters: stat
+    max-active: 5000
+    initial-size: 20
+    max-wait: 6000
+    min-idle: 1
+    time-between-eviction-runs-millis: 60000
+    min-evictable-idle-time-millis: 300000
+    test-while-idle: true
+    test-on-borrow: false
+    test-on-return: false
+    pool-prepared-statements: true
+    max-open-prepared-statements: 1000
+    async-init: true
+
+  # Redis配置
+  redis:
+    database: 0
+    #国电考培服务器
+    host: 10.155.32.18
+    port: 6379
+    password: gdnxfd123
+    timeout: 5000
+
+  # 定时任务配置
+  quartz:
+    #数据库方式
+    job-store-type: jdbc
+    # quartz 相关属性配置
+    properties:
+      org:
+        quartz:
+          scheduler:
+            instanceName: examScheduler
+            instanceId: AUTO
+          jobStore:
+            class: org.quartz.impl.jdbcjobstore.JobStoreTX
+            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+            tablePrefix: qrtz_
+            isClustered: true
+            clusterCheckinInterval: 10000
+            useProperties: false
+          threadPool:
+            class: org.quartz.simpl.SimpleThreadPool
+            threadCount: 10
+            threadPriority: 5
+            threadsInheritContextClassLoaderOfInitializingThread: true
+
+
+# 文档转换
+jodconverter:
+  local:
+    enabled: true
+    office-home: C:\Program Files\LibreOffice
+    max-tasks-per-process: 10
+    port-numbers: 8100
+
+# 基础配置
+ycloud:
+  # 运行模式,ture为演示/false为正式
+  demo: false
+  # false允许用户多处登录,true为T下线
+  login-tick: false
+  # 微信登录成功以后,将token推送到这个链接同步登录
+  login-sync-pc: https://exam.yfhl.net/#/sync/{token}/{roleType}
+  # 微信登录成功以后,将token推送到这个链接同步登录
+  login-sync-h5: https://exam-m.yfhl.net/#/pages/login/sync?token={token}
+  # 微信获取code以后回调此URL
+  login-redirect: https://exam.yfhl.net/api/common/wx/redirect
+
+# 微信相关配置
+wechat:
+  login:
+    # 小程序登录appId
+    mp-app-id:
+    mp-app-secret:
+    # 网站登录appId
+    site-app-id:
+    site-app-secret:
+
+# 开启文档
+swagger:
+  enable: true
+
+logging:
+  level:
+    root: info
+  path: logs/${spring.application.name}/

+ 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>

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

@@ -54,4 +54,121 @@
         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>
+
+
+    <select id="selectCourseUserTotalMin"
+            resultType="com.gyee.exam.modules.course.dto.response.CourseUserTotalDTO">
+
+					SELECT
+					sd.dept_name deptName,
+					sd.dept_code deptCode,
+					su.user_name userName,
+					su.real_name realName,
+					IFNULL(SUM(fl.learn_min),0) totalMin
+					FROM el_course_learn cl
+					INNER JOIN el_course ec ON cl.course_id = ec.id
+					INNER JOIN sys_user su ON su.id = cl.user_id
+					INNER JOIN sys_depart sd on sd.dept_code = su.dept_code
+					LEFT JOIN el_course_file_learn fl on fl.user_id = su.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.deptName!=null and query.deptName!=''">
+                                AND sd.dept_name LIKE '%${query.deptName}%'
+                            </if>
+
+                            <if test="query.deptCode!=null and query.deptCode!=''">
+                                AND sd.dept_code = #{query.deptCode}
+                            </if>
+
+                            <if test="query.realName!=null and query.realName!=''">
+                                AND su.real_name LIKE '%${query.realName}%'
+                            </if>
+
+                            <if test="query.userName!=null and query.userName!=''">
+                                AND su.user_name, = #{query.userName}
+                            </if>
+
+                        </if>
+
+                    </where>
+					group by cl.user_id
+
+
+    </select>
+    <select id="selectCourseUserIdTotalMin"
+            resultType="com.gyee.exam.modules.course.dto.response.CourseUserIdTotalDTO">
+
+        		    select
+					ec.id,
+					ec.title,
+					SUM(fl.learn_min) learn_min
+					from  el_course ec
+					LEFT JOIN el_course_file_learn fl ON  fl.course_id = ec.id
+					LEFT JOIN sys_user su ON su.id = fl.user_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.userName!=null and query.userName!=''">
+                                AND su.user_name = #{query.userName}
+                            </if>
+
+                        </if>
+
+                    </where>
+					GROUP BY ec.id
+
+    </select>
+
 </mapper>

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

@@ -174,4 +174,201 @@
     </select>
 
 
+    <select id="courseDepartRank" resultType="com.gyee.exam.modules.course.dto.response.CourseDepartRankDTO">
+
+        select
+        cd.dept_code deptCode,
+        sd.dept_name deptName,
+        count(cd .id) total
+        from  el_course_depart cd
+        LEFT JOIN sys_depart sd on cd.dept_code = sd.dept_code
+        LEFT JOIN el_course ec on ec.id = cd.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 cd.dept_code = #{query.q}
+                </if>
+
+            </if>
+
+        </where>
+
+        GROUP BY cd.dept_code order by count(cd .id)	desc
+
+    </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>
+
+
+    <select id="selectCourseUserTotal"
+            resultType="com.gyee.exam.modules.course.dto.response.CourseUserTotalDTO">
+
+				SELECT
+					sd.dept_name deptName,
+					sd.dept_code deptCode,
+					su.user_name userName,
+					su.real_name realName,
+					COUNT(cl.id) courseNum,
+					SUM(IF( cl.state = 1 ,1, 0))  learnCourse
+					FROM el_course_learn cl
+					INNER JOIN el_course ec ON cl.course_id = ec.id
+					INNER JOIN sys_user su ON su.id = cl.user_id
+					INNER JOIN sys_depart sd on sd.dept_code = su.dept_code
+					<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.deptName!=null and query.deptName!=''">
+                                AND sd.dept_name LIKE '%${query.deptName}%'
+                            </if>
+
+                            <if test="query.deptCode!=null and query.deptCode!=''">
+                                AND sd.dept_code = #{query.deptCode}
+                            </if>
+
+                            <if test="query.realName!=null and query.realName!=''">
+                                AND su.real_name LIKE '%${query.realName}%'
+                            </if>
+
+                            <if test="query.userName!=null and query.userName!=''">
+                                AND su.user_name, = #{query.userName}
+                            </if>
+
+                        </if>
+
+                    </where>
+
+					group by cl.user_id ORDER BY learnCourse desc
+
+    </select>
+
+
+    <select id="selectCourseUserIdTotal"
+            resultType="com.gyee.exam.modules.course.dto.response.CourseUserIdTotalDTO">
+
+					select
+					ec.id,
+					ec.title,
+					(CASE WHEN SUM(IF( cl.state = 1 ,1, 0))>=count(rf.id) THEN 1 ELSE 0 END) AS state,
+					SUM(ec.periods) periods,
+					SUM(rf.need_learn) needLearn
+
+					from  el_course ec
+					INNER JOIN el_course_ref_file rf ON rf.course_id = ec.id
+					LEFT JOIN el_course_learn  cl  ON cl.course_id = ec.id
+					LEFT JOIN sys_user su ON su.id = cl.user_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.userName!=null and query.userName!=''">
+                                AND su.user_name = #{query.userName}
+                            </if>
+
+                        </if>
+                    </where>
+
+					GROUP BY ec.id
+
+
+    </select>
+
+
 </mapper>

+ 69 - 0
exam-06173-api/src/main/resources/mapper/exam/ExamDepartMapper.xml

@@ -14,4 +14,73 @@
         `id`,`exam_id`,`dept_code`
     </sql>
 
+    <select id="departPassedRate" resultType="com.gyee.exam.modules.exam.dto.response.ExamDepartPassedRateDTO">
+
+        SELECT  dept.dept_code deptCode,sd.dept_name deptName,
+        SUM((SELECT IFNULL(MAX(passed),0) FROM el_paper WHERE user_id=uc.id AND exam_id=dept.exam_id and passed >0)) AS passed,
+        count(dept.dept_code) total
+        FROM el_exam_depart dept
+        LEFT JOIN sys_user uc ON dept.dept_code=uc.dept_code
+        LEFT JOIN sys_depart sd on dept.dept_code = sd.dept_code
+        LEFT JOIN el_exam ee on ee.id = dept.exam_id
+        <where>
+
+            and uc.id IS NOT NULL
+
+            <if test="query!=null">
+
+                <if test="query.statDateL!=null ">
+                    AND ee.start_time >=    #{query.statDateL}
+                </if>
+
+                <if test="query.statDateR!=null ">
+                    AND ee.end_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
+
+
+    </select>
+
+    <select id="userPassedRate" resultType="com.gyee.exam.modules.exam.dto.response.ExamUserPassedRateDTO">
+        SELECT  uc.user_name userName,uc.real_name realName,
+        SUM((SELECT IFNULL(MAX(passed),0) FROM el_paper WHERE user_id=uc.id AND exam_id=dept.exam_id and passed >0)) AS passed,
+        count(ee.id) total
+        FROM el_exam_depart dept
+        LEFT JOIN sys_user uc ON dept.dept_code=uc.dept_code
+        LEFT JOIN sys_depart sd on dept.dept_code = sd.dept_code
+        LEFT JOIN el_exam ee on ee.id = dept.exam_id
+        <where>
+            uc.id IS NOT NULL
+
+        </where>
+
+        <if test="query!=null">
+
+            <if test="query.statDateL!=null ">
+                AND ee.start_time >=    #{query.statDateL}
+            </if>
+
+            <if test="query.statDateR!=null ">
+                AND ee.end_time &lt; #{query.statDateR}
+            </if>
+
+            <if test="query.q!=null and query.q!=''">
+                AND dept.dept_code = #{query.q}
+            </if>
+
+        </if>
+
+        GROUP BY uc.user_name,uc.real_name order by passed desc
+
+
+    </select>
+
 </mapper>

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

@@ -196,4 +196,136 @@
 
     </select>
 
+
+    <select id="examDepartTotal" resultType="com.gyee.exam.modules.exam.dto.response.ExamDepartTotalDTO">
+        SELECT
+        sd.dept_name deptName,
+        dept.dept_code deptCode,
+        COUNT(uc.id) AS eeTotalUser,
+        COUNT(DISTINCT ue.user_id) AS eeActualUser,
+        COUNT(IF( ue.passed = 1 ,1, NULL)) AS eePassUser
+        FROM el_exam ee
+        LEFT JOIN el_exam_depart dept on ee.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 ue ON ue.user_id=uc.id AND ue.exam_id=dept.exam_id
+        <where>
+
+            uc.id IS NOT NULL
+            <if test="query!=null">
+
+                <if test="query.statDateL!=null ">
+                    AND ee.start_time >=  #{query.statDateL}
+                </if>
+
+                <if test="query.statDateR!=null ">
+                    AND ee.end_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 eeActualUser desc ,eePassUser desc
+
+    </select>
+
+    <select id="selectExamDepartidTotal"
+            resultType="com.gyee.exam.modules.exam.dto.response.ExamDepartidTotalDTO">
+                SELECT
+                    ee.id id,
+                    ee.title title,
+                    ee.start_time startTime,
+                    ee.end_time endTime,
+                    ee.total_score totalScore,
+                    ee.total_Time totalTime,
+                    MAX(ue.max_score) maxScore,
+                    MIN(ue.max_score) minScore,
+                    COUNT(uc.id) actualUser,
+                    SUM(IF( ue.passed = 1 ,1, 0)) passed
+                FROM el_exam ee
+                    LEFT JOIN el_exam_depart dept on ee.id = dept.exam_id
+                    LEFT JOIN sys_user uc ON dept.dept_code=uc.dept_code
+                    LEFT JOIN el_user_exam ue ON ue.user_id=uc.id AND ue.exam_id=dept.exam_id
+                    <where>
+
+                        <if test="query!=null">
+
+                            <if test="query.statDateL!=null ">
+                                AND ee.start_time >= #{query.statDateL}
+                            </if>
+
+                            <if test="query.statDateR!=null ">
+                                AND ee.end_time &lt; #{query.statDateR}
+                            </if>
+
+                            <if test="query.q!=null and query.q!=''">
+                                AND dept.dept_code = #{query.q}
+                            </if>
+
+                        </if>
+                    </where>
+
+                    GROUP BY ee.id
+
+    </select>
+
+
+    <select id="selectExamUserTotal" resultType="com.gyee.exam.modules.exam.dto.response.examUserTotalDTO">
+				SELECT
+					sd.dept_name,
+					sd.dept_code,
+					su.user_name,
+					su.real_name,
+					COUNT(ue.id) try_count,
+					SUM(IF( ue.passed = 1 ,1, 0)) passed
+
+				FROM el_user_exam ue
+				INNER JOIN el_exam ee ON ue.exam_id = ee.id
+				INNER JOIN sys_user su on su.id = ue.user_id
+				INNER JOIN sys_depart sd on sd.dept_code = su.dept_code
+
+				<where>
+
+                    <if test="query!=null">
+
+                        <if test="query.statDateL!=null ">
+                            AND ee.start_time >= #{query.statDateL}
+                        </if>
+
+                        <if test="query.statDateR!=null ">
+                            AND ee.end_time &lt; #{query.statDateR}
+                        </if>
+
+                        <if test="query.deptName!=null and query.deptName!=''">
+                            AND sd.dept_name LIKE '%${query.deptName}%'
+                        </if>
+
+                        <if test="query.deptCode!=null and query.deptCode!=''">
+                            AND sd.dept_code = #{query.deptCode}
+                        </if>
+
+                        <if test="query.realName!=null and query.realName!=''">
+                            AND su.real_name LIKE '%${query.realName}%'
+                        </if>
+
+                        <if test="query.userName!=null and query.userName!=''">
+                            AND su.user_name, = #{query.userName}
+                        </if>
+
+                    </if>
+
+                </where>
+
+				group by ue.user_id ORDER BY  passed desc
+
+
+
+    </select>
+
 </mapper>