소스 검색

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

Koishi 2 년 전
부모
커밋
d0a50cc0be
44개의 변경된 파일3319개의 추가작업 그리고 38개의 파일을 삭제
  1. 1343 0
      docs/开发文档/数据表结构.md
  2. 37 0
      exam-06173-api/src/main/java/com/gyee/boot/base/api/api/dto/BaseUserQueryReqDTO.java
  3. 85 5
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/controller/CourseController.java
  4. 24 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseDepartRankDTO.java
  5. 20 5
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseDepartTotalDTO.java
  6. 43 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseUserIdTotalDTO.java
  7. 23 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseUserRankDTO.java
  8. 36 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/CourseUserTotalDTO.java
  9. 41 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/dto/response/courseDepartIdTotalDTO.java
  10. 10 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseDepartMapper.java
  11. 17 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseFileLearnMapper.java
  12. 10 4
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/mapper/CourseMapper.java
  13. 10 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseDepartService.java
  14. 14 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseFileLearnService.java
  15. 46 2
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/CourseService.java
  16. 10 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseDepartServiceImpl.java
  17. 28 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseFileLearnServiceImpl.java
  18. 59 4
      exam-06173-api/src/main/java/com/gyee/exam/modules/course/service/impl/CourseServiceImpl.java
  19. 64 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/ectotal/controller/ExamAndCourseTotalController.java
  20. 47 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/ectotal/dto/response/ExamAndCourseDepartTotalDTO.java
  21. 42 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/ectotal/dto/response/ExamAndCourseUserTotalDTO.java
  22. 136 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/ectotal/service/ExamAndCourseTotalService.java
  23. 100 7
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/controller/ExamController.java
  24. 26 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamDepartPassedRateDTO.java
  25. 32 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamDepartTotalDTO.java
  26. 55 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamDepartidTotalDTO.java
  27. 25 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamUserPassedRateDTO.java
  28. 33 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamUserTotalDTO.java
  29. 33 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamUseridTotalDTO.java
  30. 24 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/mapper/ExamDepartMapper.java
  31. 31 2
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/mapper/ExamMapper.java
  32. 26 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/ExamDepartService.java
  33. 46 3
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/ExamService.java
  34. 17 0
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/impl/ExamDepartServiceImpl.java
  35. 51 3
      exam-06173-api/src/main/java/com/gyee/exam/modules/exam/service/impl/ExamServiceImpl.java
  36. 7 0
      exam-06173-api/src/main/resources/application-dev.yml
  37. 97 0
      exam-06173-api/src/main/resources/application-uat.yml
  38. 35 0
      exam-06173-api/src/main/resources/mapper/course/CourseDepartMapper.xml
  39. 117 0
      exam-06173-api/src/main/resources/mapper/course/CourseFileLearnMapper.xml
  40. 167 1
      exam-06173-api/src/main/resources/mapper/course/CourseMapper.xml
  41. 69 0
      exam-06173-api/src/main/resources/mapper/exam/ExamDepartMapper.xml
  42. 172 0
      exam-06173-api/src/main/resources/mapper/exam/ExamMapper.xml
  43. 0 1
      exam-06173-vue/src/views/admin/course/index.vue
  44. 11 1
      exam-06173-vue/src/views/web/course/list.vue

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1343 - 0
docs/开发文档/数据表结构.md


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

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

@@ -12,14 +12,14 @@ import com.gyee.boot.base.aspect.log.enums.LogType;
 import com.gyee.exam.modules.course.dto.CourseDTO;
 import com.gyee.exam.modules.course.dto.ext.CourseDetailExtDTO;
 import com.gyee.exam.modules.course.dto.request.UserCourseReqDTO;
-import com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO;
-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;
@@ -164,7 +164,7 @@ public class CourseController extends BaseController {
      * @return
      */
     @ApiOperation(value = "统计总课程数")
-    @GetMapping("/ctt-total")
+    @PostMapping("/ctt-total")
     public ApiRest courseAllTotal() {
         Map map = new HashMap<>();
 
@@ -187,13 +187,93 @@ public class CourseController extends BaseController {
      * @return
      */
     @ApiOperation(value = "课程部门排行")
-    @GetMapping("/cdt-total")
-    public ApiRest courseDepartTotal(@RequestBody BaseQueryReqDTO reqDTO) {
+    @PostMapping("/course-depart-rank")
+    public ApiRest courseDepartRank(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<CourseDepartRankDTO> dtoList = baseService.courseDepartRank(reqDTO);
+
+        return super.success(dtoList);
+    }
+
+
+    /**
+     * 职工培训课时排行榜(分钟)
+     * @return
+     */
+    @ApiOperation(value = "职工培训课时排行榜(分钟)")
+    @PostMapping("/course-user-rank")
+    public ApiRest courseUserRank(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<CourseUserRankDTO> dtoList = baseService.courseUserRank(reqDTO);
+        return super.success(dtoList);
+
+    }
 
+    /**
+     * 部门培训统计
+     * @return
+     */
+    @ApiOperation(value = "部门培训统计")
+    @PostMapping("/course-depart-total")
+    public ApiRest courseDepartTotal(@RequestBody BaseQueryReqDTO reqDTO) {
         List<CourseDepartTotalDTO> dtoList = baseService.courseDepartTotal(reqDTO);
+        return super.success(dtoList);
 
+    }
+
+
+    /**
+     * 单部门培训统计
+     * @return
+     */
+    @ApiOperation(value = "单部门培训统计")
+    @PostMapping("/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 = "职员培训统计")
+    @PostMapping("/course-user-total")
+    public ApiRest courseUserTotal(@RequestBody BaseUserQueryReqDTO reqDTO) {
+
+        List<CourseUserTotalDTO> dtoList = baseService.getCourseUserTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+
+    /**
+     * 单个职员培训统计
+     * @return
+     */
+    @ApiOperation(value = "单个职员培训统计")
+    @PostMapping("/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;
+
+}

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

@@ -1,15 +1,14 @@
 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="课程统计响应类")
+@ApiModel(value="部门培训统计", description="部门培训统计")
 public class CourseDepartTotalDTO {
 
-
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "部门编码")
@@ -18,7 +17,23 @@ public class CourseDepartTotalDTO {
     @ApiModelProperty(value = "部门名称")
     private String deptName;
 
-    @ApiModelProperty(value = "课程数量")
-    private Integer total;
+    @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);
 }

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

@@ -4,16 +4,14 @@ 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.CourseDepartTotalDTO;
-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;
 
 import java.util.List;
-import java.util.Map;
 
 /**
 * <p>
@@ -43,6 +41,14 @@ public interface CourseMapper extends BaseMapper<Course> {
 
     List<UserCourseProcessDTO> userPagingToal(Page page, @Param("query") UserCourseReqDTO reqDTO);
 
+    List<CourseDepartRankDTO> courseDepartRank(@Param("query") BaseQueryReqDTO reqDTO);
 
     List<CourseDepartTotalDTO> courseDepartTotal(@Param("query") BaseQueryReqDTO reqDTO);
+
+    List<courseDepartIdTotalDTO> courseDepartIdTotal(@Param("query") BaseQueryReqDTO reqDTO);
+
+    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);
 }

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

@@ -3,12 +3,12 @@ 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.CourseDepartTotalDTO;
-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;
@@ -77,7 +77,51 @@ public interface CourseService extends IService<Course> {
      * 部门课程排行榜
      * @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;
+    }
 
 }

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

@@ -8,6 +8,7 @@ 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;
@@ -17,9 +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.CourseDepartTotalDTO;
-import com.gyee.exam.modules.course.dto.response.UserCourseProcessDTO;
-import com.gyee.exam.modules.course.dto.response.UserCourseRespDTO;
+import com.gyee.exam.modules.course.dto.response.*;
 import com.gyee.exam.modules.course.entity.Course;
 import com.gyee.exam.modules.course.entity.CourseRefDir;
 import com.gyee.exam.modules.course.entity.CourseRefFile;
@@ -73,6 +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) {
 
@@ -304,9 +306,62 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
     }
 
     @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> dtoList = baseMapper.courseDepartTotal(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;
+
+    }
+
+
 }

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

@@ -0,0 +1,64 @@
+package com.gyee.exam.modules.ectotal.controller;
+
+
+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.BaseQueryReqDTO;
+import com.gyee.boot.base.api.api.dto.BaseUserQueryReqDTO;
+import com.gyee.exam.modules.ectotal.dto.response.ExamAndCourseDepartTotalDTO;
+import com.gyee.exam.modules.ectotal.dto.response.ExamAndCourseUserTotalDTO;
+import com.gyee.exam.modules.ectotal.service.ExamAndCourseTotalService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 考试培训统计控制类
+ * </p>
+ *
+ * @author 聪明笨狗
+ * @since 2020-12-17 11:28
+ */
+@Api(tags={"考试培训统计"})
+@RestController
+@RequestMapping("/api/total/ec")
+public class ExamAndCourseTotalController extends BaseController {
+
+
+
+    @Autowired
+    private ExamAndCourseTotalService baseService;
+
+    /**
+     * 全部门培训考试统计
+     * @return
+     */
+    @ApiOperation(value = "全部门培训考试统计")
+    @PostMapping("/ec-depart-total")
+    public ApiRest examAndCourseDepartTotal(@RequestBody BaseQueryReqDTO reqDTO) {
+        List<ExamAndCourseDepartTotalDTO> dtoList = baseService.examAndCourseTotal(reqDTO);
+        return super.success(dtoList);
+    }
+
+
+
+
+    /**
+     * 职员考培统计
+     * @return
+     */
+    @ApiOperation(value = "职员考培统计")
+    @PostMapping("/ec-user-total")
+    public ApiRest examAndCourseUserTotal(@RequestBody BaseUserQueryReqDTO reqDTO) {
+        List<ExamAndCourseUserTotalDTO> dtoList = baseService.getExamAndCourseUserTotal(reqDTO);
+        return super.success(dtoList);
+    }
+
+
+
+
+}

+ 47 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/ectotal/dto/response/ExamAndCourseDepartTotalDTO.java

@@ -0,0 +1,47 @@
+package com.gyee.exam.modules.ectotal.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value="部门考试培训统计", description="部门考试培训统计")
+public class ExamAndCourseDepartTotalDTO {
+
+    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;
+
+    @ApiModelProperty(value = "考试总人次")
+    private Integer eeTotalUser;
+
+    @ApiModelProperty(value = "考试人次")
+    private Integer eeActualUser;
+
+    @ApiModelProperty(value = "已考试结束人数")
+    private Integer eePassUser;
+
+    public Integer getEcTotalMin() {
+        if (null == ecTotalMin)
+        {
+            ecTotalMin = 0;
+        }
+        return ecTotalMin;
+    }
+}

+ 42 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/ectotal/dto/response/ExamAndCourseUserTotalDTO.java

@@ -0,0 +1,42 @@
+package com.gyee.exam.modules.ectotal.dto.response;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value="职员考试培训统计", description="职员考试培训统计")
+public class ExamAndCourseUserTotalDTO {
+
+
+    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;
+
+    @ApiModelProperty(value = "参与课程数")
+    private int courseNum;
+
+    @ApiModelProperty(value = "已学习课程")
+    private int learnCourse;
+
+    @ApiModelProperty(value = "学习时长(分钟)")
+    private int totalMin;
+
+}

+ 136 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/ectotal/service/ExamAndCourseTotalService.java

@@ -0,0 +1,136 @@
+package com.gyee.exam.modules.ectotal.service;
+
+
+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.response.CourseDepartTotalDTO;
+import com.gyee.exam.modules.course.dto.response.CourseUserTotalDTO;
+import com.gyee.exam.modules.course.service.CourseService;
+import com.gyee.exam.modules.ectotal.dto.response.ExamAndCourseDepartTotalDTO;
+import com.gyee.exam.modules.ectotal.dto.response.ExamAndCourseUserTotalDTO;
+import com.gyee.exam.modules.exam.dto.response.ExamDepartTotalDTO;
+import com.gyee.exam.modules.exam.dto.response.ExamUserTotalDTO;
+import com.gyee.exam.modules.exam.service.ExamService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.security.PublicKey;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class ExamAndCourseTotalService {
+
+
+    @Autowired
+    private CourseService courseService;
+
+    @Autowired
+    private ExamService examService;
+
+    public List<ExamAndCourseDepartTotalDTO> examAndCourseTotal(BaseQueryReqDTO reqDTO) {
+
+        List<ExamAndCourseDepartTotalDTO> totalDTOS = new ArrayList<>();
+        List<CourseDepartTotalDTO> coursedtos = courseService.courseDepartTotal(reqDTO);
+        List<ExamDepartTotalDTO> examdtos = examService.examDepartTotal(reqDTO);
+
+        ExamAndCourseDepartTotalDTO totalDTO = null;
+        if (coursedtos.size() >= examdtos.size()) {
+            Map<String, List<ExamDepartTotalDTO>> groupexamdtos = examdtos.stream().collect(Collectors.groupingBy(ExamDepartTotalDTO::getDeptCode));
+            for (int i = 0; i < coursedtos.size(); i++) {
+                totalDTO = new ExamAndCourseDepartTotalDTO();
+                totalDTO.setDeptCode(coursedtos.get(i).getDeptCode());
+                totalDTO.setDeptName(coursedtos.get(i).getDeptName());
+                totalDTO.setEcTotalUser(coursedtos.get(i).getEcTotalUser());
+                totalDTO.setEcActualUser(coursedtos.get(i).getEcActualUser());
+                totalDTO.setEcPassUser(coursedtos.get(i).getEcPassUser());
+                totalDTO.setEcTotalMin(coursedtos.get(i).getEcTotalMin());
+                List<ExamDepartTotalDTO> groupexams = groupexamdtos.get(coursedtos.get(i).getDeptCode()) == null ? null : groupexamdtos.get(coursedtos.get(i).getDeptCode());
+                if (null != groupexams && groupexams.size() == 1) {
+                    totalDTO.setEeTotalUser(groupexams.get(0).getEeTotalUser());
+                    totalDTO.setEeActualUser(groupexams.get(0).getEePassUser());
+                    totalDTO.setEePassUser(groupexams.get(0).getEePassUser());
+
+                }
+                totalDTOS.add(totalDTO);
+            }
+
+        } else {
+            Map<String, List<CourseDepartTotalDTO>> groupcoursedtos = coursedtos.stream().collect(Collectors.groupingBy(CourseDepartTotalDTO::getDeptCode));
+            for (int i = 0; i < examdtos.size(); i++) {
+                totalDTO = new ExamAndCourseDepartTotalDTO();
+                totalDTO.setDeptCode(examdtos.get(i).getDeptCode());
+                totalDTO.setDeptName(examdtos.get(i).getDeptName());
+                totalDTO.setEeTotalUser(examdtos.get(i).getEeTotalUser());
+                totalDTO.setEeActualUser(examdtos.get(i).getEePassUser());
+                totalDTO.setEePassUser(examdtos.get(i).getEePassUser());
+                List<CourseDepartTotalDTO> groupcourses = groupcoursedtos.get(examdtos.get(i).getDeptCode()) == null ? null : groupcoursedtos.get(examdtos.get(i).getDeptCode());
+
+                if (null != groupcourses && groupcourses.size() == 1) {
+                    totalDTO.setEcTotalUser(groupcourses.get(0).getEcTotalUser());
+                    totalDTO.setEcActualUser(groupcourses.get(0).getEcActualUser());
+                    totalDTO.setEcPassUser(groupcourses.get(0).getEcPassUser());
+                    totalDTO.setEcTotalMin(groupcourses.get(0).getEcTotalMin());
+                }
+                totalDTOS.add(totalDTO);
+            }
+
+        }
+        return totalDTOS;
+    }
+
+
+    public List<ExamAndCourseUserTotalDTO> getExamAndCourseUserTotal(BaseUserQueryReqDTO reqDTO) {
+        List<ExamAndCourseUserTotalDTO> totalDTOS = new ArrayList<>();
+        List<CourseUserTotalDTO> courseList = courseService.getCourseUserTotal(reqDTO);
+        List<ExamUserTotalDTO> examList = examService.getExamUserTotal(reqDTO);
+        ExamAndCourseUserTotalDTO userTotalDTO = null;
+        if (courseList.size() >= examList.size()) {
+            Map<String, List<ExamUserTotalDTO>> groupexamuserdtos = examList.stream().collect(Collectors.groupingBy(ExamUserTotalDTO::getUserName));
+            for (int i = 0; i < courseList.size(); i++) {
+                userTotalDTO = new ExamAndCourseUserTotalDTO();
+                userTotalDTO.setDeptName(courseList.get(i).getDeptName());
+                userTotalDTO.setDeptCode(courseList.get(i).getDeptCode());
+                userTotalDTO.setRealName(courseList.get(i).getRealName());
+                userTotalDTO.setUserName(courseList.get(i).getUserName());
+                userTotalDTO.setCourseNum(courseList.get(i).getCourseNum());
+                userTotalDTO.setLearnCourse(courseList.get(i).getLearnCourse());
+                userTotalDTO.setTotalMin(courseList.get(i).getTotalMin());
+                List<ExamUserTotalDTO> groupusers = groupexamuserdtos.get(courseList.get(i).getUserName()) == null ? null : groupexamuserdtos.get(courseList.get(i).getUserName());
+                if (null != groupusers && groupusers.size() == 1) {
+                    userTotalDTO.setTryCount(groupusers.get(0).getTryCount());
+                    userTotalDTO.setPassed(groupusers.get(0).getPassed());
+                }
+                totalDTOS.add(userTotalDTO);
+            }
+
+        } else {
+            Map<String, List<CourseUserTotalDTO>> groupcourseuserdtos = courseList.stream().collect(Collectors.groupingBy(CourseUserTotalDTO::getUserName));
+
+            for (int i = 0; i < examList.size(); i++) {
+                userTotalDTO = new ExamAndCourseUserTotalDTO();
+                userTotalDTO.setDeptName(examList.get(i).getDeptName());
+                userTotalDTO.setDeptCode(examList.get(i).getDeptCode());
+                userTotalDTO.setRealName(examList.get(i).getRealName());
+                userTotalDTO.setUserName(examList.get(i).getUserName());
+                userTotalDTO.setTryCount(examList.get(i).getTryCount());
+                userTotalDTO.setPassed(examList.get(i).getPassed());
+                List<CourseUserTotalDTO> groupcourses = groupcourseuserdtos.get(examList.get(i).getUserName()) == null ? null : groupcourseuserdtos.get(examList.get(i).getUserName());
+
+                if (null != groupcourses && groupcourses.size() == 1) {
+                    userTotalDTO.setCourseNum(groupcourses.get(0).getCourseNum());
+                    userTotalDTO.setLearnCourse(groupcourses.get(0).getLearnCourse());
+                    userTotalDTO.setTotalMin(groupcourses.get(0).getTotalMin());
+
+                }
+                totalDTOS.add(userTotalDTO);
+            }
+        }
+        return totalDTOS;
+    }
+
+
+
+}

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

@@ -6,28 +6,25 @@ 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.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 +178,100 @@ public class ExamController extends BaseController {
         respDTO.setPassword("");
         return super.success(respDTO);
     }
+
+    /**
+     * 部门考试及格率排行
+     * @return
+     */
+    @ApiOperation(value = "部门考试及格率排行")
+    @PostMapping("/depart-passed-rate")
+    public ApiRest departPassedRate(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<ExamDepartPassedRateDTO> dtoList = baseService.departPassedRate(reqDTO);
+        return super.success(dtoList);
+    }
+
+
+    /**
+     * 职工考试及格率排行榜
+     * @return
+     */
+    @ApiOperation(value = "职工考试及格率排行榜")
+    @PostMapping("/user-passed-rate")
+    public ApiRest userPassedRate(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<ExamUserPassedRateDTO> dtoList = baseService.userPassedRate(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+
+    /**
+     * 部门培训统计
+     * @return
+     */
+    @ApiOperation(value = "部门培训统计")
+    @PostMapping("/exam-depart-total")
+    public ApiRest examDepartTotal(@RequestBody BaseQueryReqDTO reqDTO) {
+
+        List<ExamDepartTotalDTO> dtoList = baseService.examDepartTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+    /**
+     * 单部门考试统计
+     * @return
+     */
+    @ApiOperation(value = "单部门考试统计")
+    @PostMapping("/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 = "职员考试统计")
+    @PostMapping("/exam-user-total")
+    public ApiRest examUserTotal(@RequestBody BaseUserQueryReqDTO reqDTO) {
+
+        List<ExamUserTotalDTO> dtoList = baseService.getExamUserTotal(reqDTO);
+        return super.success(dtoList);
+
+    }
+
+
+
+    /**
+     * 单个职员考试统计
+     * @return
+     */
+    @ApiOperation(value = "单个职员考试统计")
+    @PostMapping("/exam-userid-total")
+    public ApiRest examUseridTotal(@RequestBody BaseUserQueryReqDTO reqDTO) {
+        if(null == reqDTO || StringUtils.isEmpty(reqDTO.getUserName().trim())){
+            return super.failure("请求职员名称参数为空");
+        }
+        List<ExamUseridTotalDTO> dtoList = baseService.getExamUseridTotal(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;
+
+
+}

+ 33 - 0
exam-06173-api/src/main/java/com/gyee/exam/modules/exam/dto/response/ExamUseridTotalDTO.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 ExamUseridTotalDTO {
+
+
+    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 score;
+
+    @ApiModelProperty(value = "是否关联课程")
+    private String associate;
+
+}

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

+ 31 - 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,30 @@ 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);
+
+
+    /**
+     * 单个职员考试统计
+     * @param baseUserQueryReqDTO
+     * @return
+     */
+    List<ExamUseridTotalDTO> selectExamUseridTotal(@Param("query") BaseUserQueryReqDTO baseUserQueryReqDTO);
 }

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

+ 46 - 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,47 @@ 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);
+
+
+    /**
+     * 单个职员考试统计
+     * @param baseUserQueryReqDTO
+     * @return
+     */
+    List<ExamUseridTotalDTO>   getExamUseridTotal(BaseUserQueryReqDTO baseUserQueryReqDTO);
+
+
+
 }

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

+ 51 - 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,52 @@ 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;
+
+    }
+
+    @Override
+    public List<ExamUseridTotalDTO> getExamUseridTotal(BaseUserQueryReqDTO reqDTO) {
+
+        List<ExamUseridTotalDTO>  dtoList =  baseMapper.selectExamUseridTotal(reqDTO);
+        return dtoList;
+
+    }
+
+
 }

+ 7 - 0
exam-06173-api/src/main/resources/application-dev.yml

@@ -1,8 +1,12 @@
 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
+    #华为云
     url: jdbc:mysql://123.60.213.70:3306/yf_exam?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
     username: root
     password: 123456
@@ -23,6 +27,9 @@ spring:
   # Redis配置
   redis:
     database: 0
+    #国电考培服务器
+    #host: 10.155.32.18
+    #华为云
     host: 123.60.213.70
     port: 6379
     password: gdnxfd123

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

+ 167 - 1
exam-06173-api/src/main/resources/mapper/course/CourseMapper.xml

@@ -174,7 +174,7 @@
     </select>
 
 
-    <select id="courseDepartTotal" resultType="com.gyee.exam.modules.course.dto.response.CourseDepartTotalDTO">
+    <select id="courseDepartRank" resultType="com.gyee.exam.modules.course.dto.response.CourseDepartRankDTO">
 
         select
         cd.dept_code deptCode,
@@ -207,5 +207,171 @@
 
     </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,
+                    ec.create_time createTime
+
+
+
+					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>

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

@@ -196,4 +196,176 @@
 
     </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>
+
+
+    <select id="selectExamUseridTotal" resultType="com.gyee.exam.modules.exam.dto.response.ExamUseridTotalDTO">
+				SELECT
+					ec.id id,
+				    ec.title title,
+					ep.create_time startTime,
+					ep.limit_time endTime,
+					ep.user_score score
+				FROM
+					el_exam ec
+					INNER JOIN el_user_exam ue ON ec.id = ue.exam_id
+					LEFT JOIN el_paper ep ON ep.user_id = ue.user_id  AND ec.id = ep.exam_id
+					INNER JOIN sys_user su ON su.id = ue.user_id
+                <where>
+
+                    <if test="query!=null">
+
+                        <if test="query.statDateL!=null ">
+                            AND ep.create_time >= #{query.statDateL}
+                        </if>
+
+                        <if test="query.statDateR!=null ">
+                            AND ep.limit_time &lt; #{query.statDateR}
+                        </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>
+
+
+    </select>
+
 </mapper>

+ 0 - 1
exam-06173-vue/src/views/admin/course/index.vue

@@ -39,7 +39,6 @@
         align="center"
       />
 
-
       <el-table-column
         label="课时"
         prop="periods"

+ 11 - 1
exam-06173-vue/src/views/web/course/list.vue

@@ -71,11 +71,21 @@
           width="150px"
         />
 
+        <el-table-column
+          label="学习进度"
+          prop="proportion"
+          align="center"
+          width="180px"
+        >
+          <template slot-scope="scope">
+            <el-progress :text-inside="true" :stroke-width="15" :percentage="Number(scope.row.proportion*100).toFixed(0)" color="#c11920" />
+          </template>
+        </el-table-column>
 
         <el-table-column
           label="状态"
           align="center"
-          width="100px"
+          width="120px"
         >
 
           <template slot-scope="scope">