From 3ce57820e618b704ce61487b7cdb38fdd6b0f44a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 22 九月 2026 14:06:10 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_银川_九鸿化工' into dev_银川_九鸿化工
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java | 146 +++++-------------------------------------------
1 files changed, 15 insertions(+), 131 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java
index fcea450..1096ea4 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java
@@ -10,10 +10,6 @@
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcSaveReqVO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defectrecord.MesQcDefectRecordDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO;
@@ -23,15 +19,8 @@
import cn.iocoder.yudao.module.mes.enums.qc.MesQcDefectLevelEnum;
import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum;
import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
-import cn.iocoder.yudao.module.mes.enums.pro.MesProFeedbackStatusEnum;
import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
-import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
-import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
import cn.iocoder.yudao.module.mes.service.pro.feedback.MesProFeedbackService;
-import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService;
-import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProductService;
-import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService;
-import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
@@ -39,6 +28,7 @@
import cn.iocoder.yudao.module.mes.controller.admin.qc.ncr.vo.MesQcNcrSaveReqVO;
import cn.iocoder.yudao.module.mes.service.qc.ncr.MesQcNcrService;
import cn.iocoder.yudao.module.mes.service.wm.productproduce.MesWmProductProduceLineService;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -65,14 +55,6 @@
@Slf4j
public class MesQcIpqcServiceImpl implements MesQcIpqcService {
- /**
- * IPQC 淇濆瓨鏁版嵁鏍¢獙涓婁笅鏂�
- *
- * @param workstation 宸ヤ綅
- * @param task 鐢熶骇浠诲姟锛堝彲閫夛紝鎸囧畾 taskId 鏃堕潪绌猴級
- */
- private record SaveDataContext(MesMdWorkstationDO workstation, MesProTaskDO task) {}
-
@Resource
private MesQcIpqcMapper ipqcMapper;
@@ -85,25 +67,7 @@
private MesQcIpqcLineService ipqcLineService;
@Resource
@Lazy
- private MesProWorkOrderService workOrderService;
- @Resource
- @Lazy
- private MesMdWorkstationService workstationService;
- @Resource
- @Lazy
- private MesMdItemService itemService;
- @Resource
- @Lazy
private MesQcDefectRecordService defectRecordService;
- @Resource
- @Lazy
- private MesProRouteProductService routeProductService;
- @Resource
- @Lazy
- private MesProRouteProcessService routeProcessService;
- @Resource
- @Lazy
- private MesProTaskService taskService;
@Resource
@Lazy
private MesProFeedbackService feedbackService;
@@ -121,19 +85,18 @@
@Resource
private AdminUserApi adminUserApi;
+ @Resource
+ private MdmItemApi mdmItemApi;
+
@Override
@Transactional(rollbackFor = Exception.class)
public Long createIpqc(MesQcIpqcSaveReqVO createReqVO) {
// 1.1 鏍¢獙鏁版嵁
- SaveDataContext ctx = validateIpqcSaveData(createReqVO);
- // 1.2 鏍¢獙宸ュ崟瀛樺湪
- MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId());
- // 1.3 纭畾妫�楠岀墿鏂欙細鏈変换鍔℃椂鍙栦换鍔$殑鐗╂枡锛屾棤浠诲姟鏃跺彇宸ュ崟鐨勪骇鍝�
- Long itemId = (ctx.task() != null) ? ctx.task().getItemId() : workOrder.getProductId();
- // 1.4 鏍规嵁鐗╂枡 + IPQC 绫诲瀷鏌ユ壘鍙敤璐ㄦ鏂规锛堟敮鎸佸墠绔樉寮忔寚瀹氾級
- // 宸ュ崟浜у搧/浠诲姟鐗╂枡鏄� MES 鐗╂枡锛岀敱妯℃澘鏈嶅姟鍐呴儴杞崲涓� MDM 鐗╂枡鍚庡尮閰嶏紝鏁呬紶宸ュ崟/浠诲姟 ID
+ validateIpqcSaveData(createReqVO);
+ // 1.2 鏍规嵁浜у搧鐗╂枡 + IPQC 绫诲瀷鏌ユ壘鍙敤璐ㄦ鏂规锛堟敮鎸佸墠绔樉寮忔寚瀹氾級
+ // 鐗╂枡 ID 鏉ヨ嚜 MDM锛屾ā鏉挎湇鍔$洿鎺ユ寜 MDM 鐗╂枡鍖归厤
List<MesQcTemplateItemDO> templateItems = templateItemService.getTemplateItemList(
- null, MesQcTypeEnum.IPQC.getType(), createReqVO.getWorkOrderId(), createReqVO.getTaskId());
+ createReqVO.getItemId(), MesQcTypeEnum.IPQC.getType(), null, null);
if (CollUtil.isEmpty(templateItems)) {
throw exception(QC_NO_TEMPLATE);
}
@@ -147,14 +110,12 @@
}
}
Long templateId = templateItem.getTemplateId();
- // 1.5 鑾峰彇鏉ユ簮鍗曟嵁缂栧彿
+ // 1.3 鑾峰彇鏉ユ簮鍗曟嵁缂栧彿
String sourceDocCode = validateAndGetSourceDocCode(
createReqVO.getSourceDocType(), createReqVO.getSourceDocId(), createReqVO.getSourceLineId());
// 2. 鎻掑叆涓昏〃
MesQcIpqcDO ipqc = BeanUtils.toBean(createReqVO, MesQcIpqcDO.class)
- .setItemId(itemId)
- .setProcessId(getProcessId(itemId, ctx.workstation().getProcessId()))
.setTemplateId(templateId)
.setSourceDocCode(sourceDocCode)
.setStatus(MesQcStatusEnum.DRAFT.getStatus());
@@ -177,60 +138,23 @@
// 1.1 鏍¢獙瀛樺湪 + 鑽夌鐘舵��
validateIpqcStatusPrepare(updateReqVO.getId());
// 1.2 鏍¢獙鏁版嵁
- SaveDataContext ctx = validateIpqcSaveData(updateReqVO);
+ validateIpqcSaveData(updateReqVO);
// 2. 鏇存柊涓昏〃
- MesQcIpqcDO existIpqc = validateIpqcExists(updateReqVO.getId());
MesQcIpqcDO updateObj = BeanUtils.toBean(updateReqVO, MesQcIpqcDO.class);
updateObj.setSourceDocType(null).setSourceDocId(null).setSourceLineId(null); // 涓嶅厑璁镐慨鏀规潵婧愬崟鎹�
updateObj.setTemplateId(null); // 涓嶅厑璁镐慨鏀规ā鏉�
updateObj.setItemId(null); // 涓嶅厑璁镐慨鏀圭墿鏂�
- updateObj.setWorkOrderId(null); // 涓嶅厑璁镐慨鏀瑰伐鍗�
- updateObj.setProcessId(getProcessId(existIpqc.getItemId(), ctx.workstation().getProcessId()));
ipqcMapper.updateById(updateObj);
}
- private SaveDataContext validateIpqcSaveData(MesQcIpqcSaveReqVO reqVO) {
+ private void validateIpqcSaveData(MesQcIpqcSaveReqVO reqVO) {
// 鏍¢獙缂栧彿鍞竴
validateIpqcCodeUnique(reqVO.getId(), reqVO.getCode());
- // 鏍¢獙宸ヤ綅銆佹娴嬩汉鍛樺瓨鍦�
- MesMdWorkstationDO workstation = workstationService.validateWorkstationExists(reqVO.getWorkstationId());
+ // 鏍¢獙鐗╂枡銆佹娴嬩汉鍛樺瓨鍦�
+ // 娉細鐗╂枡 ID 鏉ヨ嚜 MDM
+ mdmItemApi.validateItemExists(reqVO.getItemId());
adminUserApi.validateUser(reqVO.getInspectorUserId());
- // 鏍¢獙宸ュ崟瀛樺湪
- MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId());
- if (reqVO.getProcessId() != null && ObjUtil.notEqual(workstation.getProcessId(), reqVO.getProcessId())) {
- throw exception(PRO_WORKSTATION_PROCESS_MISMATCH);
- }
- // 鏍¢獙浠诲姟鍏崇郴锛堝鏋滄寚瀹氫簡浠诲姟锛�
- MesProTaskDO task = null;
- if (reqVO.getTaskId() != null) {
- task = taskService.validateTaskNotFinished(reqVO.getTaskId());
- validateTaskRelation(task, workstation, workOrder, reqVO);
- } else {
- // 鏃犱换鍔℃椂锛宨temId 浠嶉渶涓庡伐鍗曚骇鍝佷竴鑷�
- if (reqVO.getItemId() != null && ObjUtil.notEqual(reqVO.getItemId(), workOrder.getProductId())) {
- throw exception(PRO_WORK_ORDER_PRODUCT_MISMATCH);
- }
- }
- return new SaveDataContext(workstation, task);
- }
-
- private void validateTaskRelation(MesProTaskDO task, MesMdWorkstationDO workstation,
- MesProWorkOrderDO workOrder, MesQcIpqcSaveReqVO reqVO) {
- if (ObjUtil.notEqual(task.getWorkOrderId(), workOrder.getId())) {
- throw exception(PRO_TASK_WORK_ORDER_MISMATCH);
- }
- if (ObjUtil.notEqual(task.getWorkstationId(), workstation.getId())) {
- throw exception(PRO_TASK_WORKSTATION_MISMATCH);
- }
- Long expectedProcessId = reqVO.getProcessId() != null ? reqVO.getProcessId() : workstation.getProcessId();
- if (expectedProcessId != null && ObjUtil.notEqual(task.getProcessId(), expectedProcessId)) {
- throw exception(PRO_TASK_ROUTE_PROCESS_MISMATCH);
- }
- // 鏍¢獙妫�楠岀墿鏂欎笌浠诲姟鐗╂枡涓�鑷达紙鏈変换鍔℃椂锛孖PQC 妫�楠岀殑鐗╂枡搴斾笌浠诲姟鍔犲伐鐨勭墿鏂欎竴鑷达級
- if (reqVO.getItemId() != null && ObjUtil.notEqual(reqVO.getItemId(), task.getItemId())) {
- throw exception(PRO_TASK_ITEM_MISMATCH);
- }
}
@Override
@@ -291,21 +215,8 @@
// 1. 纭畾 sourceDocType/sourceDocId
Long sourceDocId = ipqc.getSourceDocId();
Long sourceLineId = ipqc.getSourceLineId();
-
- // 濡傛灉 IPQC 鍗曟病鏈夎缃潵婧愶紝灏濊瘯閫氳繃 taskId 鏌ユ壘鍏宠仈鐨勫緟妫�楠屾姤宸�
- if (sourceDocId == null && ipqc.getTaskId() != null) {
- MesProFeedbackDO feedback = feedbackService.getFeedbackListByTaskId(ipqc.getTaskId()).stream()
- .filter(f -> MesProFeedbackStatusEnum.UNCHECK.getStatus().equals(f.getStatus()))
- .findFirst().orElse(null);
- if (feedback != null) {
- sourceDocId = feedback.getId();
- log.info("[writeBackSourceDoc] IPQC({}) 鏈缃潵婧愬崟鎹紝閫氳繃 taskId({}) 鎵惧埌寰呮楠屾姤宸�({})",
- ipqc.getId(), ipqc.getTaskId(), feedback.getId());
- }
- }
-
if (sourceDocId == null) {
- log.warn("[writeBackSourceDoc] IPQC({}) 鏃犳硶纭畾鏉ユ簮鎶ュ伐锛岃烦杩囧洖鍐�", ipqc.getId());
+ log.warn("[writeBackSourceDoc] IPQC({}) 鏈缃潵婧愭姤宸ワ紝璺宠繃鍥炲啓", ipqc.getId());
return;
}
@@ -389,33 +300,6 @@
}
// 鏈煡鏉ユ簮绫诲瀷搴旀姤閿欙紝鑰屼笉鏄潤榛樺拷鐣�
throw exception(QC_IPQC_SOURCE_DOC_TYPE_UNKNOWN);
- }
-
- /**
- * 鎺ㄥ宸ュ簭 ID
- *
- * <p>閫氳繃浜у搧 鈫� 宸ヨ壓璺嚎浜у搧 鈫� 宸ヨ壓璺嚎 鈫� 鏍¢獙宸ヤ綅宸ュ簭鏄惁鍦ㄨ璺嚎涓�
- * <p>濡傛灉宸ヤ綅鐨勫伐搴忓湪璺嚎涓紝鍒欒繑鍥炶 processId锛涘惁鍒欒繑鍥� null
- *
- * @param productId 浜у搧 ID锛堝伐鍗曚骇鍝侊級
- * @param workstationProcessId 宸ヤ綅鍏宠仈鐨勫伐搴� ID
- * @return 鎺ㄥ鍑虹殑宸ュ簭 ID锛屾棤娉曟帹瀵兼椂杩斿洖 null
- */
- private Long getProcessId(Long productId, Long workstationProcessId) {
- if (productId == null || workstationProcessId == null) {
- return null;
- }
- // 1. 浜у搧 鈫� 宸ヨ壓璺嚎
- MesProRouteProductDO routeProduct = routeProductService.getRouteProductByItemId(productId);
- if (routeProduct == null) {
- return null;
- }
- // 2. 鏍¢獙宸ヤ綅鐨勫伐搴忔槸鍚﹀湪璇ヨ矾绾夸腑
- if (routeProcessService.getRouteProcessByRouteIdAndProcessId(
- routeProduct.getRouteId(), workstationProcessId) == null) {
- return null;
- }
- return workstationProcessId;
}
@Override
--
Gitblit v1.9.3