From ac2e2b5af3726ee64dc37c3ebf26989a0346f22a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 07 十一月 2026 19:16:05 +0800
Subject: [PATCH] feat(feedback): 优化报工审批流程并增加报工人校验
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 46 insertions(+), 6 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java
index d20475f..5ef87eb 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/rqc/MesQcRqcServiceImpl.java
@@ -10,6 +10,8 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defectrecord.MesQcDefectRecordDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.rqc.MesQcRqcDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.rqc.MesQcRqcMapper;
import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum;
import cn.iocoder.yudao.module.mes.enums.qc.MesQcDefectLevelEnum;
@@ -40,6 +42,7 @@
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
import cn.iocoder.yudao.module.mes.controller.admin.qc.rqc.vo.MesQcRqcImportExcelVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.rqc.vo.MesQcRqcImportRespVO;
@@ -119,6 +122,13 @@
.setTemplateId(templateId)
.setSourceDocCode(sourceDocCode)
.setStatus(MesQcStatusEnum.DRAFT.getStatus());
+ // 妫�娴嬩汉鍛樸�佹娴嬫棩鏈熸湭濉啓鏃朵娇鐢ㄩ粯璁ゅ�硷紝涓嶅奖鍝嶆祦绋�
+ if (rqc.getInspectorUserId() == null) {
+ rqc.setInspectorUserId(getLoginUserId());
+ }
+ if (rqc.getInspectDate() == null) {
+ rqc.setInspectDate(LocalDateTime.now());
+ }
rqcMapper.insert(rqc);
// 3. 浠庢ā鏉挎寚鏍囪嚜鍔ㄧ敓鎴愭楠岃
@@ -146,7 +156,10 @@
validateRqcCodeUnique(reqVO.getId(), reqVO.getCode());
// 鏍¢獙鐗╂枡銆佹娴嬩汉鍛樺瓨鍦紙鍏煎 mdm_item.id / mes_md_item.id锛�
qcItemResolver.validateItemExists(reqVO.getItemId());
- adminUserApi.validateUser(reqVO.getInspectorUserId());
+ // 鏍¢獙妫�娴嬩汉鍛樺瓨鍦紙闈炲繀濉紝鏈~鍐欐椂鐢卞垱寤洪�昏緫榛樿褰撳墠鐧诲綍浜猴級
+ if (reqVO.getInspectorUserId() != null) {
+ adminUserApi.validateUser(reqVO.getInspectorUserId());
+ }
}
@Override
@@ -166,7 +179,9 @@
throw exception(QC_RQC_QUANTITY_MISMATCH);
}
}
- // 1.4 鏍¢獙鑷冲皯瀛樺湪涓�鏉℃娴嬬粨鏋�
+ // 1.4 鏍¢獙妫�娴嬫暟閲忎笌鏉ユ簮閫�璐ц鏁伴噺涓�鑷达紝閬垮厤鍥炲啓鏃惰鐩栨潵婧愯鏁伴噺
+ validateSourceLineQuantity(rqc);
+ // 1.5 鏍¢獙鑷冲皯瀛樺湪涓�鏉℃娴嬬粨鏋�
indicatorResultService.validateIndicatorResultExistsByQcIdAndType(id, MesQcTypeEnum.RQC.getType());
// 2. 鏇存柊鐘舵�佷负宸插畬鎴�
@@ -178,6 +193,33 @@
// 4. 鍥炲啓鏉ユ簮鍗曟嵁
writeBackSourceDoc(rqc);
+ }
+
+ /**
+ * 鏍¢獙妫�娴嬫暟閲忎笌鏉ユ簮閫�璐ц鏁伴噺涓�鑷�
+ *
+ * <p>鍥炲啓鏉ユ簮鍗曟嵁鏃朵細鐢ㄥ悎鏍�/涓嶅悎鏍兼暟閲忛噸鍐欒鐨勬暟閲忥紝鑻ユ娴嬫暟閲忎笌鏉ユ簮琛屼笉涓�鑷翠細闈欓粯鏀瑰彉閫�璐ф暟閲忥紝
+ * 鍥犳瀹屾垚妫�楠屽墠蹇呴』淇濊瘉涓よ�呯浉绛夈��
+ */
+ private void validateSourceLineQuantity(MesQcRqcDO rqc) {
+ if (rqc.getSourceDocType() == null || rqc.getSourceLineId() == null || rqc.getCheckQuantity() == null) {
+ return;
+ }
+ BigDecimal sourceQuantity = null;
+ if (Objects.equals(rqc.getSourceDocType(), MesBizTypeConstants.WM_RETURN_ISSUE)) {
+ MesWmReturnIssueLineDO line = returnIssueLineService.getReturnIssueLine(rqc.getSourceLineId());
+ if (line != null) {
+ sourceQuantity = line.getQuantity();
+ }
+ } else if (Objects.equals(rqc.getSourceDocType(), MesBizTypeConstants.WM_RETURN_SALES)) {
+ MesWmReturnSalesLineDO line = returnSalesLineService.getReturnSalesLine(rqc.getSourceLineId());
+ if (line != null) {
+ sourceQuantity = line.getQuantity();
+ }
+ }
+ if (sourceQuantity != null && rqc.getCheckQuantity().compareTo(sourceQuantity) != 0) {
+ throw exception(QC_RQC_SOURCE_QUANTITY_INVALID, sourceQuantity.stripTrailingZeros().toPlainString());
+ }
}
/**
@@ -216,8 +258,7 @@
return;
}
if (rqc.getSourceLineId() == null) {
- throw new IllegalArgumentException(
- "RQC 鍗昜" + rqc.getId() + "] sourceDocType 闈炵┖浣� sourceLineId 涓虹┖");
+ throw exception(QC_RQC_SOURCE_LINE_REQUIRED);
}
if (Objects.equals(rqc.getSourceDocType(), MesBizTypeConstants.WM_RETURN_ISSUE)) {
@@ -231,8 +272,7 @@
rqc.getSourceLineId(), rqc.getSourceDocId(), rqc.getCheckResult(),
rqc.getQualifiedQuantity(), rqc.getUnqualifiedQuantity());
} else {
- throw new IllegalArgumentException(
- "RQC 鍗昜" + rqc.getId() + "] sourceDocType=" + rqc.getSourceDocType() + " 鏃犳硶璇嗗埆锛屾棤娉曞洖鍐欐潵婧愬崟鎹�");
+ throw exception(QC_RQC_SOURCE_DOC_TYPE_UNKNOWN, rqc.getSourceDocType());
}
}
--
Gitblit v1.9.3