From 416558785276159b8730b2826e71995fc16b59a7 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期四, 29 十月 2026 11:47:44 +0800
Subject: [PATCH] refactor(safety): 人员与车间字段全面改为主数据关联
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java | 76 ++++++++++++++++++++++++++++++++++----
1 files changed, 68 insertions(+), 8 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java
index 77c9b00..3899bc6 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java
@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.mes.service.safety;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@@ -41,6 +42,8 @@
@Resource
private SafetyWorkPermitMapper permitMapper;
@Resource
+ private SafetyRefResolver refResolver;
+ @Resource
private SafetyWorkPermitMonitorMapper monitorMapper;
/**
@@ -53,7 +56,7 @@
SafetyWorkPermitDO permit = BeanUtils.toBean(reqVO, SafetyWorkPermitDO.class);
permit.setCode(permitMapper.selectNextCode("WP" + LocalDate.now().format(CODE_DATE)));
permit.setTitle(StrUtil.trim(reqVO.getTitle()));
- permit.setApplicant(StrUtil.trim(reqVO.getApplicant()));
+ applyPermitRefs(permit, reqVO);
permit.setApplyTime(reqVO.getApplyTime() == null ? LocalDateTime.now() : reqVO.getApplyTime());
permit.setRiskLevel(StrUtil.blankToDefault(reqVO.getRiskLevel(), SafetyRiskLevelEnum.NORMAL.getLevel()));
permit.setStatus(SafetyPermitStatusEnum.PENDING.getStatus());
@@ -72,7 +75,23 @@
SafetyWorkPermitDO update = BeanUtils.toBean(reqVO, SafetyWorkPermitDO.class);
update.setCode(null);
update.setStatus(null);
+ applyPermitRefs(update, reqVO);
permitMapper.updateById(update);
+ }
+
+ /**
+ * 浣滀笟绁ㄧ殑涓绘暟鎹紩鐢細浣滀笟杞﹂棿 + 鐢宠浜� + 鐩戞姢浜猴紝浠庝富鏁版嵁甯﹀嚭鍚嶇О钀藉揩鐓�
+ */
+ private void applyPermitRefs(SafetyWorkPermitDO permit, SafetyWorkPermitSaveReqVO reqVO) {
+ permit.setWorkshopId(reqVO.getWorkshopId());
+ permit.setWorkshopName(reqVO.getWorkshopId() == null ? ""
+ : refResolver.requireWorkshop(reqVO.getWorkshopId()).getName());
+ var applicant = refResolver.requireEmployee(reqVO.getApplicantId(), SAFETY_EMPLOYEE_REQUIRED);
+ permit.setApplicantId(applicant.getId());
+ permit.setApplicant(applicant.getName());
+ permit.setGuardianId(reqVO.getGuardianId());
+ permit.setGuardian(reqVO.getGuardianId() == null ? ""
+ : refResolver.requireEmployee(reqVO.getGuardianId(), SAFETY_EMPLOYEE_REQUIRED).getName());
}
/**
@@ -85,19 +104,20 @@
public void approvePermit(SafetyWorkPermitApproveReqVO reqVO) {
SafetyWorkPermitDO permit = validatePermitExists(reqVO.getId());
ensureStatus(permit, SafetyPermitStatusEnum.PENDING);
- String approver = StrUtil.trim(reqVO.getApprover());
- // 鐢宠浜轰笉鑳藉鎵硅嚜宸辩殑浣滀笟绁�
- if (approver.equals(permit.getApplicant())) {
- throw exception(SAFETY_PERMIT_STATUS_ERROR);
+ var approver = refResolver.requireEmployee(reqVO.getApproverId(), SAFETY_EMPLOYEE_REQUIRED);
+ // 鐢宠浜轰笉鑳藉鎵硅嚜宸辩殑浣滀笟绁紙鎸夊憳宸ョ紪鍙锋瘮杈冿紝閬垮厤鍚屽悕璇垽锛�
+ if (permit.getApplicantId() != null && permit.getApplicantId().equals(approver.getId())) {
+ throw exception(SAFETY_PERMIT_SELF_APPROVE);
}
boolean approved = "APPROVED".equals(reqVO.getDecision());
if (approved && SafetyPermitTypeEnum.requiresGuardian(permit.getPermitType())
- && StrUtil.isBlank(permit.getGuardian())) {
+ && permit.getGuardianId() == null) {
throw exception(SAFETY_PERMIT_GUARDIAN_REQUIRED);
}
SafetyWorkPermitDO update = new SafetyWorkPermitDO();
update.setId(permit.getId());
- update.setApprover(approver);
+ update.setApproverId(approver.getId());
+ update.setApprover(approver.getName());
update.setApproveTime(LocalDateTime.now());
update.setApproveComment(reqVO.getApproveComment());
update.setStatus(approved ? SafetyPermitStatusEnum.APPROVED.getStatus()
@@ -173,7 +193,9 @@
}
SafetyWorkPermitMonitorDO monitor = BeanUtils.toBean(reqVO, SafetyWorkPermitMonitorDO.class);
monitor.setId(null);
- monitor.setGuardian(StrUtil.trim(reqVO.getGuardian()));
+ var guardian = refResolver.requireEmployee(reqVO.getGuardianId(), SAFETY_EMPLOYEE_REQUIRED);
+ monitor.setGuardianId(guardian.getId());
+ monitor.setGuardian(guardian.getName());
monitor.setMonitorTime(reqVO.getMonitorTime() == null ? LocalDateTime.now() : reqVO.getMonitorTime());
monitorMapper.insert(monitor);
return monitor.getId();
@@ -192,6 +214,44 @@
// ==================== 灞曠ず瀛楁 ====================
+ /**
+ * 鎵归噺鍥炲~浣滀笟绁ㄧ殑杞﹂棿鍚嶄笌涓変釜浜哄憳濮撳悕锛堢敵璇蜂汉/瀹℃壒浜�/鐩戞姢浜猴級
+ */
+ public void fillPermitRefs(List<SafetyWorkPermitDO> permits) {
+ if (CollUtil.isEmpty(permits)) {
+ return;
+ }
+ var workshopMap = refResolver.workshopMap(permits.stream().map(SafetyWorkPermitDO::getWorkshopId).toList());
+ var ids = new java.util.ArrayList<Long>(permits.size() * 3);
+ permits.forEach(p -> { ids.add(p.getApplicantId()); ids.add(p.getApproverId()); ids.add(p.getGuardianId()); });
+ var employeeMap = refResolver.employeeMap(ids);
+ permits.forEach(permit -> {
+ var workshop = workshopMap.get(permit.getWorkshopId());
+ if (workshop != null) permit.setWorkshopName(workshop.getName());
+ var applicant = employeeMap.get(permit.getApplicantId());
+ if (applicant != null) permit.setApplicant(applicant.getName());
+ var approver = employeeMap.get(permit.getApproverId());
+ if (approver != null) permit.setApprover(approver.getName());
+ var guardian = employeeMap.get(permit.getGuardianId());
+ if (guardian != null) permit.setGuardian(guardian.getName());
+ });
+ }
+
+ /**
+ * 鎵归噺鍥炲~鐩戞姢璁板綍鐨勭洃鎶や汉鏈�鏂板鍚�
+ */
+ public void fillMonitorGuardians(List<SafetyWorkPermitMonitorDO> monitors) {
+ if (CollUtil.isEmpty(monitors)) {
+ return;
+ }
+ var employeeMap = refResolver.employeeMap(
+ monitors.stream().map(SafetyWorkPermitMonitorDO::getGuardianId).toList());
+ monitors.forEach(monitor -> {
+ var employee = employeeMap.get(monitor.getGuardianId());
+ if (employee != null) monitor.setGuardian(employee.getName());
+ });
+ }
+
public static void fillPermitDisplay(SafetyWorkPermitDO permit, SafetyWorkPermitRespVO respVO) {
respVO.setPermitTypeName(SafetyPermitTypeEnum.getNameByType(permit.getPermitType()));
respVO.setRiskLevelName(SafetyRiskLevelEnum.getNameByLevel(permit.getRiskLevel()));
--
Gitblit v1.9.3