From 30c63b8c103910812fb055994fe255bf883862ed Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Thu, 9 Jan 2025 11:47:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor(examine):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=80=83=E6=A0=B8=E8=AF=84=E5=88=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 ExamineDetailServiceImpl 中的系统核算单独处理逻辑 - 在 ExamineUserServiceImpl 中新增系统核算处理方法- 更新 ExamineDto 和 ExamineUser 类,添加 selfScore 字段 - 修改数据库 mapper,增加 self_score 相关的 SQL 语句 - 优化工作日志查询 SQL,提高查询效率 --- .../detail/ExamineDetailController.java | 6 ++ .../examine/detail/dto/ExamineDto.java | 1 + .../impl/ExamineDetailServiceImpl.java | 36 +----------- .../examine/task/domain/ExamineTaskDto.java | 1 + .../examine/user/domain/ExamineUser.java | 1 + .../service/impl/ExamineUserServiceImpl.java | 56 +++++++++++++++++++ .../business/WorkLogger/WorkLoggerMapper.xml | 5 +- .../business/examine/ExamineUserMapper.xml | 8 ++- 8 files changed, 75 insertions(+), 39 deletions(-) diff --git a/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/examine/detail/ExamineDetailController.java b/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/examine/detail/ExamineDetailController.java index e2ee372..9dcbac0 100644 --- a/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/examine/detail/ExamineDetailController.java +++ b/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/examine/detail/ExamineDetailController.java @@ -106,6 +106,12 @@ public class ExamineDetailController extends BaseController { if (examineDto.getManageScore().compareTo(bigDecimal) != 0) { return AjaxResult.error("总分与明细分数不一致"); } + } else { + //非主管需要计算个人分数 + Map scoreMap = examineDetailService.calculateScoreByDetail(examineDto.getTaskId() + , examineDto.getExamineDetailList(), ReviewTypeEnum.SELF); + BigDecimal bigDecimal = scoreMap.get(examineDto.getExamineId()); + examineDto.setSelfScore(bigDecimal); } //保存detail详情 diff --git a/pms-business/src/main/java/tech/unissense/pms/business/examine/detail/dto/ExamineDto.java b/pms-business/src/main/java/tech/unissense/pms/business/examine/detail/dto/ExamineDto.java index 226d218..b598c2f 100644 --- a/pms-business/src/main/java/tech/unissense/pms/business/examine/detail/dto/ExamineDto.java +++ b/pms-business/src/main/java/tech/unissense/pms/business/examine/detail/dto/ExamineDto.java @@ -25,6 +25,7 @@ public class ExamineDto { private Integer examineId; private String judgeContent; private BigDecimal manageScore; + private BigDecimal selfScore; private Integer taskId; private String reviewType; /** diff --git a/pms-business/src/main/java/tech/unissense/pms/business/examine/detail/service/impl/ExamineDetailServiceImpl.java b/pms-business/src/main/java/tech/unissense/pms/business/examine/detail/service/impl/ExamineDetailServiceImpl.java index 7dc25f3..7f8502a 100644 --- a/pms-business/src/main/java/tech/unissense/pms/business/examine/detail/service/impl/ExamineDetailServiceImpl.java +++ b/pms-business/src/main/java/tech/unissense/pms/business/examine/detail/service/impl/ExamineDetailServiceImpl.java @@ -131,7 +131,7 @@ public class ExamineDetailServiceImpl implements ExamineDetailService { examineUser.setId(dto.getExamineId()); List list1 = userMapper.list(examineUser); if (CollUtil.isEmpty(list1)){ - throw new ServiceException("未找到考核人员"); + throw new ServiceException("未在考核任务中"); } result.put("examineUser",list1.get(0)); result.put("examineTask",examineTaskMapper.queryById(dto.getExamineTaskId())); @@ -156,9 +156,6 @@ public class ExamineDetailServiceImpl implements ExamineDetailService { examineConfigQueryDto.setReviewType(typeEnum.getType()); } List configList = configMapper.list(examineConfigQueryDto); - ExamineTask examineTask = examineTaskMapper.queryById(taskId); - //系统核算单独处理 - dealSystemBusinessAccount(examineList, configList,examineTask); Map configMap = configList.stream().collect(Collectors.toMap(ExamineConfig::getId, Function.identity())); Map scoreMap = new HashMap<>(); for (ExamineDetail detail : examineList) { @@ -181,37 +178,6 @@ public class ExamineDetailServiceImpl implements ExamineDetailService { return scoreMap; } - private void dealSystemBusinessAccount(List examineList, List configList, ExamineTask examineTask) { - Map systemExamineConfigMap = configList.stream().filter(item -> - ReviewTypeEnum.SYSTEM.getType().equals(item.getReviewType())).collect(Collectors.toMap(ExamineConfig::getId, Function.identity())); - //如有系统核算才处理 - if (CollUtil.isNotEmpty(systemExamineConfigMap)) { - String workDay = sysDictDataService.selectDictLabel("pms_work_day", examineTask.getYear().toString()); - workDay = StrUtil.isNotEmpty(workDay) ? workDay : "251"; - BigDecimal configWorkDay = new BigDecimal(workDay); - List collect = examineList.stream().filter(item -> systemExamineConfigMap.containsKey(item.getConfigId())).collect(Collectors.toList()); - Map workTimeByExamineDetail = workLoggerService.getWorkTimeByExamineDetail(collect.stream().map(ExamineDetail::getExamineId).collect(Collectors.toList())); - for (ExamineDetail examineDetail : collect) { - BigDecimal bigDecimal = workTimeByExamineDetail.get(examineDetail.getExamineId()); - if (bigDecimal == null) { - examineDetail.setScore(0); - continue; - } - BigDecimal max = configWorkDay.multiply(new BigDecimal("0.9")); - BigDecimal min = configWorkDay.multiply(new BigDecimal("0.8")); - if (bigDecimal.compareTo(max) >= 0) { - //比90%大 满分 - examineDetail.setScore(10); - } else if (bigDecimal.compareTo(min) >= 0) { - //比80%大 比90%小 6分 - examineDetail.setScore(6); - } else { - //比80%小 0分 - examineDetail.setScore(0); - } - } - } - } @Override public void saveBatch(List examineDetailList) { diff --git a/pms-business/src/main/java/tech/unissense/pms/business/examine/task/domain/ExamineTaskDto.java b/pms-business/src/main/java/tech/unissense/pms/business/examine/task/domain/ExamineTaskDto.java index a0e705f..5b7aa56 100644 --- a/pms-business/src/main/java/tech/unissense/pms/business/examine/task/domain/ExamineTaskDto.java +++ b/pms-business/src/main/java/tech/unissense/pms/business/examine/task/domain/ExamineTaskDto.java @@ -44,5 +44,6 @@ public class ExamineTaskDto implements Serializable { private Integer year; private Integer examineStatusSelf; private Integer examineId; + private Boolean taskEditFlag; } diff --git a/pms-business/src/main/java/tech/unissense/pms/business/examine/user/domain/ExamineUser.java b/pms-business/src/main/java/tech/unissense/pms/business/examine/user/domain/ExamineUser.java index a040656..cb6fd9b 100644 --- a/pms-business/src/main/java/tech/unissense/pms/business/examine/user/domain/ExamineUser.java +++ b/pms-business/src/main/java/tech/unissense/pms/business/examine/user/domain/ExamineUser.java @@ -40,6 +40,7 @@ public class ExamineUser extends BaseEntity { * 主管评分(权重计算后) */ private BigDecimal manageScore; + private BigDecimal selfScore; /** * 个人评分状态 0:待完成 1:已完成 */ diff --git a/pms-business/src/main/java/tech/unissense/pms/business/examine/user/service/impl/ExamineUserServiceImpl.java b/pms-business/src/main/java/tech/unissense/pms/business/examine/user/service/impl/ExamineUserServiceImpl.java index e5403ce..5005ffb 100644 --- a/pms-business/src/main/java/tech/unissense/pms/business/examine/user/service/impl/ExamineUserServiceImpl.java +++ b/pms-business/src/main/java/tech/unissense/pms/business/examine/user/service/impl/ExamineUserServiceImpl.java @@ -1,16 +1,24 @@ package tech.unissense.pms.business.examine.user.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import org.springframework.beans.factory.annotation.Autowired; +import tech.unissense.pms.business.examine.config.domain.ExamineConfig; import tech.unissense.pms.business.examine.config.enums.ReviewTypeEnum; +import tech.unissense.pms.business.examine.config.service.impl.ExamineConfigServiceImpl; +import tech.unissense.pms.business.examine.detail.domain.ExamineDetail; import tech.unissense.pms.business.examine.detail.dto.ExamineDto; import tech.unissense.pms.business.examine.detail.service.ExamineDetailService; +import tech.unissense.pms.business.examine.task.domain.ExamineTask; +import tech.unissense.pms.business.examine.task.mapper.ExamineTaskMapper; import tech.unissense.pms.business.examine.user.domain.ExamineUser; import tech.unissense.pms.business.examine.user.mapper.ExamineUserMapper; import tech.unissense.pms.business.examine.user.service.ExamineUserService; import org.springframework.stereotype.Service; +import tech.unissense.pms.business.work.logger.service.IWorkLoggerService; import tech.unissense.pms.common.annotation.DataScope; import tech.unissense.pms.common.utils.SecurityUtils; +import tech.unissense.pms.system.service.ISysDictDataService; import javax.annotation.Resource; import java.math.BigDecimal; @@ -19,6 +27,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -33,6 +42,14 @@ public class ExamineUserServiceImpl implements ExamineUserService { private ExamineUserMapper examineUserMapper; @Autowired private ExamineDetailService detailService; + @Autowired + private ExamineConfigServiceImpl examineConfigService; + @Resource + private ExamineTaskMapper taskMapper; + @Autowired + private IWorkLoggerService workLoggerService; + @Autowired + private ISysDictDataService sysDictDataService; /** * 通过ID查询单条数据 @@ -97,6 +114,7 @@ public class ExamineUserServiceImpl implements ExamineUserService { examineUser.setExamineStatus(examineDto.getExamineStatus()); examineUser.setExamineStatusSelf(examineDto.getExamineStatusSelf()); examineUser.setManageScore(examineDto.getManageScore()); + examineUser.setSelfScore(examineDto.getSelfScore()); String examineStatus = StrUtil.isNotEmpty(examineDto.getExamineStatus()) ? examineDto.getExamineStatus() : user.getExamineStatus(); String examineStatusSelf = StrUtil.isNotEmpty(examineDto.getExamineStatusSelf()) ? examineDto.getExamineStatusSelf() : user.getExamineStatusSelf(); if ("1".equals(examineStatus) && user.getManageUserId() == null) { @@ -105,6 +123,8 @@ public class ExamineUserServiceImpl implements ExamineUserService { //均已完成 计算总分数 boolean flag = "1".equals(examineStatus) && "1".equals(examineStatusSelf); if (flag) { + //保存系统核算分数 + detailService.insert(dealSystemBusinessAccount(examineDto.getExamineId(), examineDto.getTaskId())); Map scoreMap = detailService.calculateScoreByExamineId(examineDto.getTaskId() , Collections.singletonList(examineDto.getExamineId()), ReviewTypeEnum.ALL); examineUser.setScore(scoreMap.get(examineDto.getExamineId())); @@ -113,6 +133,42 @@ public class ExamineUserServiceImpl implements ExamineUserService { } + private ExamineDetail dealSystemBusinessAccount(Integer examineId, Integer taskId) { + ExamineTask examineTask = taskMapper.queryById(taskId); + //如有系统核算才处理 + String workDay = sysDictDataService.selectDictLabel("pms_work_day", examineTask.getYear().toString()); + workDay = StrUtil.isNotEmpty(workDay) ? workDay : "251"; + BigDecimal configWorkDay = new BigDecimal(workDay); + + Map workTimeByExamineDetail = workLoggerService.getWorkTimeByExamineDetail(Collections.singletonList(examineId)); + ExamineDetail examineDetail = new ExamineDetail(); + examineDetail.setExamineId(examineId); + ExamineConfig examineConfig = new ExamineConfig(); + examineConfig.setExamineTaskId(taskId); + examineConfig.setReviewType(ReviewTypeEnum.SYSTEM.getType()); + List configList = examineConfigService.list(examineConfig); + examineDetail.setConfigId(configList.get(0).getId()); + BigDecimal bigDecimal = workTimeByExamineDetail.get(examineDetail.getExamineId()); + if (bigDecimal == null) { + examineDetail.setScore(0); + return examineDetail; + } + BigDecimal max = configWorkDay.multiply(new BigDecimal("0.9")); + BigDecimal min = configWorkDay.multiply(new BigDecimal("0.8")); + if (bigDecimal.compareTo(max) >= 0) { + //比90%大 满分 + examineDetail.setScore(10); + } else if (bigDecimal.compareTo(min) >= 0) { + //比80%大 比90%小 6分 + examineDetail.setScore(6); + } else { + //比80%小 0分 + examineDetail.setScore(0); + } + return examineDetail; + } + + @Override public ExamineUser queryByTaskIdAndUserId(Integer examineTaskId, Integer userId) { return examineUserMapper.queryByTaskIdAndUserId(examineTaskId, userId); diff --git a/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml b/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml index bd23181..8b219ec 100644 --- a/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml +++ b/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml @@ -256,14 +256,13 @@ diff --git a/pms-business/src/main/resources/mapper/business/examine/ExamineUserMapper.xml b/pms-business/src/main/resources/mapper/business/examine/ExamineUserMapper.xml index fc8437e..2fe733e 100644 --- a/pms-business/src/main/resources/mapper/business/examine/ExamineUserMapper.xml +++ b/pms-business/src/main/resources/mapper/business/examine/ExamineUserMapper.xml @@ -12,6 +12,7 @@ + @@ -23,7 +24,8 @@ manage_score, examine_status, examine_status_self, - manage_user_id + manage_user_id, + self_score from pms_examine_user @@ -70,6 +72,7 @@ t1.examine_status, t1.examine_status_self, t1.manage_user_id, + t1.self_score, t2.nick_name as userName, t3.nick_name as manageUserName from pms_examine_user t1 left join sys_user t2 on t1.user_id = t2.user_id @@ -164,6 +167,9 @@ manage_score = #{manageScore}, + + self_score = #{selfScore}, + examine_status = #{examineStatus},