From 71bc21abbfd1cf7665593fe8efff8965811373ad Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 15 三月 2024 15:15:55 +0800
Subject: [PATCH] 成绩统计增加数据权限、增加时间查询

---
 src/main/java/com/mindskip/xzs/viewmodel/admin/paper/ExamPaperGradeQuery.java |   39 +++++++++++++
 src/main/java/com/mindskip/xzs/utility/minio/DateUtils.java                   |   34 +++++++++++
 src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java |   61 ++++++++-----------
 src/main/java/com/mindskip/xzs/repository/UserMapper.java                     |    6 ++
 src/main/resources/mapper/UserMapper.xml                                      |   20 ++++++
 5 files changed, 125 insertions(+), 35 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java
index 0469737..e82e2ed 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperGradeController.java
@@ -1,16 +1,24 @@
 package com.mindskip.xzs.controller.admin;
 
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.mindskip.xzs.base.BaseApiController;
 import com.mindskip.xzs.base.RestResponse;
+import com.mindskip.xzs.context.WebContext;
 import com.mindskip.xzs.domain.ExamPaperAnswer;
 import com.mindskip.xzs.domain.User;
 import com.mindskip.xzs.domain.UserDepartment;
 import com.mindskip.xzs.domain.vo.ScoreTemplatesCountVO;
+import com.mindskip.xzs.repository.DepartmentMapper;
 import com.mindskip.xzs.repository.ExamPaperAnswerMapper;
+import com.mindskip.xzs.repository.UserDepartmentMapper;
+import com.mindskip.xzs.repository.UserMapper;
 import com.mindskip.xzs.service.*;
+import com.mindskip.xzs.utility.minio.DateUtils;
 import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradePageRequestVM;
+import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradeQuery;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -19,36 +27,26 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 @RestController("AdminExamPaperGradeController")
 @RequestMapping(value = "/api/admin/examPaperGrade")
+@RequiredArgsConstructor
 public class ExamPaperGradeController extends BaseApiController {
 
     private final ExamPaperAnswerService examPaperAnswerService;
-
     private final SubjectService subjectService;
     private final UserService userService;
+    private final UserMapper userMapper;
     private final ExamPaperSubjectService examPaperSubjectService;
-
     private final ScoreTemplatesUserCountService scoreTemplatesUserCountService;
-
     private final ExamPaperUserService examPaperUserService;
-
     private final UserDepartMentService userDepartMentService;
-
+    private final UserDepartmentMapper userDepartmentMapper;
     private final ExamPaperAnswerMapper examPaperAnswerMapper;
+    private final WebContext webContext;
+    private final DepartmentMapper departmentMapper;
 
-    @Autowired
-    public ExamPaperGradeController(ExamPaperAnswerService examPaperAnswerService, SubjectService subjectService, UserService userService, ExamPaperSubjectService examPaperSubjectService, ScoreTemplatesUserCountService scoreTemplatesUserCountService, ExamPaperUserService examPaperUserService, UserDepartMentService userDepartMentService, ExamPaperAnswerMapper examPaperAnswerMapper) {
-        this.examPaperAnswerService = examPaperAnswerService;
-        this.subjectService = subjectService;
-        this.userService = userService;
-        this.examPaperSubjectService = examPaperSubjectService;
-        this.scoreTemplatesUserCountService = scoreTemplatesUserCountService;
-        this.examPaperUserService = examPaperUserService;
-        this.userDepartMentService = userDepartMentService;
-        this.examPaperAnswerMapper = examPaperAnswerMapper;
-    }
 
 
 //    @RequestMapping(value = "/page", method = RequestMethod.POST)
@@ -106,27 +104,20 @@
 //    }
 
     @RequestMapping(value = "/page", method = RequestMethod.POST)
-    public RestResponse<PageInfo<ExamPaperAnswer>> pageJudgeList(@RequestBody ExamPaperGradePageRequestVM grade) {
-        List<ExamPaperAnswer> filteredList9 = new ArrayList<>();
-        PageInfo<User> info = PageHelper.startPage(grade.getPageIndex(), grade.getPageSize(), "id desc").doSelectPageInfo(() ->
-                userService.getUsers());
-        for (User user : info.getList()) {
-            if("绠$悊鍛�".equals(user.getRealName())){
-                continue;
+    public RestResponse<PageInfo<ExamPaperAnswer>> pageJudgeList(@RequestBody ExamPaperGradeQuery query) {
+        // 鏌ュ嚭鐢ㄦ埛锛堝苟鍋氭暟鎹潈闄愶級
+        User currentUser = webContext.getCurrentUser();
+        if (Objects.nonNull(currentUser)) {
+            // 濡傛灉鏄儴闂ㄧ鐞嗗憳锛岄渶瑕佸仛鏁版嵁鏉冮檺
+            if ("1".equals(currentUser.getDeptAdmin())) {
+                query.setDeptId(departmentMapper.selectByAdminId(currentUser.getId()));
             }
-            ExamPaperAnswer answer = new ExamPaperAnswer();
-            answer.setCreateUser(user.getId());
-            answer.setUserName(user.getRealName());
-            ScoreTemplatesCountVO vo = new ScoreTemplatesCountVO();
-            vo.setCreateUser(user.getId());
-            List<ExamPaperAnswer> byCreatUser = examPaperAnswerMapper.getByCreatUser(vo);
-            answer.setCounts(byCreatUser.size());
-            filteredList9.add(answer);
         }
-        PageHelper.startPage(grade.getPageIndex(), grade.getPageSize());
-        PageInfo<ExamPaperAnswer> pageInfoPageInfo = new PageInfo<>(filteredList9);
-        pageInfoPageInfo.setTotal(info.getTotal());
-        return RestResponse.ok(pageInfoPageInfo);
+        query.setFullTime();
+        // 鏌ヨ
+        PageInfo<ExamPaperAnswer> info = PageHelper.startPage(query.getPageIndex(), query.getPageSize()).doSelectPageInfo(() ->
+                userMapper.getUserByDept(query));
+        return RestResponse.ok(info);
     }
 
     @RequestMapping(value = "/details", method = RequestMethod.POST)
diff --git a/src/main/java/com/mindskip/xzs/repository/UserMapper.java b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
index 89aaf6f..d0e9942 100644
--- a/src/main/java/com/mindskip/xzs/repository/UserMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
@@ -1,7 +1,10 @@
 package com.mindskip.xzs.repository;
 
+import com.mindskip.xzs.domain.ExamPaperAnswer;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.User;
+import com.mindskip.xzs.domain.vo.UserVO;
+import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradeQuery;
 import com.mindskip.xzs.viewmodel.admin.user.UserPageRequestVM;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -142,4 +145,7 @@
      * @param deptAdmin
      */
     void updateDeptAdmin(Integer id, String deptAdmin);
+
+
+    List<ExamPaperAnswer> getUserByDept(@Param("query") ExamPaperGradeQuery query);
 }
diff --git a/src/main/java/com/mindskip/xzs/utility/minio/DateUtils.java b/src/main/java/com/mindskip/xzs/utility/minio/DateUtils.java
index f4482c6..c6066e3 100644
--- a/src/main/java/com/mindskip/xzs/utility/minio/DateUtils.java
+++ b/src/main/java/com/mindskip/xzs/utility/minio/DateUtils.java
@@ -1,12 +1,15 @@
 package com.mindskip.xzs.utility.minio;
 
 import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.lang.Nullable;
 
 import java.lang.management.ManagementFactory;
+import java.sql.Timestamp;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.*;
 import java.util.Date;
+import java.util.Objects;
 
 public class DateUtils extends org.apache.commons.lang3.time.DateUtils{
 
@@ -179,4 +182,35 @@
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+
+    /**
+     * 鑾峰彇鏌愬ぉ鐨勫紑濮嬫椂闂�
+     *
+     * @param date
+     * @return 2023-01-01 00:00:00
+     */
+    public static Date getDayStart(@Nullable Date date) {
+        if (Objects.isNull(date)) {
+            date = new Date();
+        }
+        LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.of("GMT+8"));
+        LocalDateTime of = LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonth(), localDateTime.getDayOfMonth(), 0, 0, 0);
+        return Timestamp.valueOf(of);
+    }
+
+    /**
+     * 鑾峰彇鏌愬ぉ鐨勭粨鏉熸椂闂�
+     *
+     * @param date
+     * @return 2023-01-01 23:59:59
+     */
+    public static Date getDayEnd(@Nullable Date date) {
+        if (Objects.isNull(date)) {
+            date = new Date();
+        }
+        LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
+        LocalDateTime of = LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonth(), localDateTime.getDayOfMonth(), 23, 59, 59);
+        return Timestamp.valueOf(of);
+    }
 }
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/paper/ExamPaperGradeQuery.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/paper/ExamPaperGradeQuery.java
new file mode 100644
index 0000000..2d16b9f
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/paper/ExamPaperGradeQuery.java
@@ -0,0 +1,39 @@
+package com.mindskip.xzs.viewmodel.admin.paper;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mindskip.xzs.base.BasePage;
+import com.mindskip.xzs.utility.minio.DateUtils;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/3/15 14:45
+ */
+@Data
+public class ExamPaperGradeQuery extends BasePage {
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date start;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date end;
+
+    /**
+     * 閮ㄩ棬ID
+     */
+    private Integer deptId;
+
+    public void setFullTime() {
+        // 瀹屽杽鏃堕棿鑼冨洿
+        if (Objects.nonNull(start)) {
+            start = DateUtils.getDayStart(start);
+        }
+        if (Objects.nonNull(end)) {
+            end = DateUtils.getDayEnd(end);
+        }
+    }
+
+}
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index 2afc008..bd9950c 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -444,4 +444,24 @@
     UPDATE t_user SET dept_admin = #{deptAdmin} WHERE id = #{id} AND deleted = 0
   </update>
 
+  <select id="getUserByDept" resultType="com.mindskip.xzs.domain.ExamPaperAnswer">
+    SELECT
+        tu.id as createUser, tu.real_name as userName, count(tepa.id) as counts
+    FROM
+         t_user tu INNER JOIN t_user_department tud ON tu.id = tud.user_id AND tu.deleted = 0
+                   LEFT JOIN t_exam_paper_answer tepa ON tepa.create_user = tu.id
+    <where>
+      <if test="query.deptId != null">
+        AND tud.department_id = #{query.deptId}
+      </if>
+      <if test="query.start != null and query.end != null">
+        AND tepa.create_time between #{query.start} and #{query.end}
+      </if>
+    </where>
+    group by
+        createUser, userName
+    ORDER BY
+        tu.id desc
+  </select>
+
 </mapper>

--
Gitblit v1.8.0