From 086b2186789ea04362db4bce71c6112686c43caa Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 21 九月 2026 15:33:26 +0800
Subject: [PATCH] feat(crm): 支持合同编号自定义配置
---
docs/project-business/data/objects.json | 2
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemService.java | 14 +++---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java | 1
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/template/MesQcTemplateItemDO.java | 3 -
docs/project-business/index.html | 2
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemServiceImpl.java | 45 ++++++++++++++--------
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java | 6 +++
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java | 31 ++++++++++++---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImpl.java | 3 +
9 files changed, 72 insertions(+), 35 deletions(-)
diff --git a/docs/project-business/data/objects.json b/docs/project-business/data/objects.json
index adaa873..29ac7ce 100644
--- a/docs/project-business/data/objects.json
+++ b/docs/project-business/data/objects.json
@@ -7,7 +7,7 @@
{"name": "鑱旂郴浜�", "module": "閿�鍞鐞�", "table": "crm_contact", "doc": "瀹㈡埛涓嬭仈绯讳汉锛屼笌鍟嗘満澶氬澶�", "upstream": ["瀹㈡埛"], "downstream": ["鍟嗘満"], "keywords": "鑱旂郴浜� contact"},
{"name": "鍟嗘満", "module": "閿�鍞鐞�", "table": "crm_business", "doc": "閿�鍞満浼氾紝DB 閰嶇疆寮忛樁娈垫帹杩涳紝缁撴潫鎬�: 璧�/杈�/鏃犳晥", "upstream": ["瀹㈡埛"], "downstream": ["鎶ヤ环鍗�", "鍚堝悓"], "keywords": "鍟嗘満 business 璧㈠崟 杈撳崟 闃舵"},
{"name": "鎶ヤ环鍗�", "module": "閿�鍞鐞�", "table": "crm_sale_quotation", "doc": "QT缂栧彿锛岄�� MDM 鐗╂枡鎶ヤ环锛孉I OCR 褰曞叆锛岃崏绋库啋宸茶浆鍚堝悓", "upstream": ["鍟嗘満"], "downstream": ["鍚堝悓"], "keywords": "鎶ヤ环 quotation QT"},
- {"name": "鍚堝悓", "module": "閿�鍞鐞�", "table": "crm_contract", "doc": "HT缂栧彿锛孊PM 瀹℃壒(0鑽夌/10瀹℃壒涓�/20閫氳繃/30椹冲洖/40鍙栨秷/50浣滃簾)锛岄�氳繃鍚庡彲鐢熸垚閿�鍞鍗�", "upstream": ["鎶ヤ环鍗�"], "downstream": ["閿�鍞鍗�", "鍥炴璁″垝", "寮�绁�"], "keywords": "鍚堝悓 contract 瀹℃壒"},
+ {"name": "鍚堝悓", "module": "閿�鍞鐞�", "table": "crm_contract", "doc": "HT缂栧彿(鏂板/缂栬緫鍧囧彲鑷畾涔夛紝鐣欑┖鍒欐柊澧炶嚜鍔ㄧ敓鎴愩�佺紪杈戜繚鎸佸師缂栧彿)锛孊PM 瀹℃壒(0鑽夌/10瀹℃壒涓�/20閫氳繃/30椹冲洖/40鍙栨秷/50浣滃簾)锛岄�氳繃鍚庡彲鐢熸垚閿�鍞鍗�", "upstream": ["鎶ヤ环鍗�"], "downstream": ["閿�鍞鍗�", "鍥炴璁″垝", "寮�绁�"], "keywords": "鍚堝悓 contract 瀹℃壒"},
{"name": "鍙戠エ", "module": "閿�鍞鐞�", "table": "crm_invoice", "doc": "KP缂栧彿锛孊PM 瀹℃壒锛岀疮璁″紑绁ㄢ墹鍚堝悓棰濓紝闄勪欢蹇呬紶", "upstream": ["鍚堝悓"], "downstream": ["鍥炴"], "keywords": "寮�绁� 鍙戠エ invoice"},
{"name": "鍥炴", "module": "閿�鍞鐞�", "table": "crm_receivable", "doc": "HK缂栧彿锛屽垱寤哄嵆瀹℃壒涓�(鎵嬪姩瀹℃牳)锛屽己鍒跺厛寮�绁紝閲戦鍙屾牎楠�", "upstream": ["鍚堝悓", "鍙戠エ"], "downstream": ["鏀舵鍗�(鍏宠仈)"], "keywords": "鍥炴 鏀舵璁″垝 receivable"},
{"name": "閿�鍞洰鏍�", "module": "閿�鍞鐞�", "table": "crm_sales_target", "doc": "骞�/瀛�/鏈埫椾釜浜�/閮ㄩ棬/浜у搧缁村害鐨勫悎鍚屽洖娆剧瓑鐩爣", "upstream": [], "downstream": ["涓氱哗缁熻"], "keywords": "鐩爣 target 涓氱哗"},
diff --git a/docs/project-business/index.html b/docs/project-business/index.html
index 2cf6913..47214d7 100644
--- a/docs/project-business/index.html
+++ b/docs/project-business/index.html
@@ -442,7 +442,7 @@
{"name": "鑱旂郴浜�", "module": "閿�鍞鐞�", "table": "crm_contact", "doc": "瀹㈡埛涓嬭仈绯讳汉锛屼笌鍟嗘満澶氬澶�", "upstream": ["瀹㈡埛"], "downstream": ["鍟嗘満"], "keywords": "鑱旂郴浜� contact"},
{"name": "鍟嗘満", "module": "閿�鍞鐞�", "table": "crm_business", "doc": "閿�鍞満浼氾紝DB 閰嶇疆寮忛樁娈垫帹杩涳紝缁撴潫鎬�: 璧�/杈�/鏃犳晥", "upstream": ["瀹㈡埛"], "downstream": ["鎶ヤ环鍗�", "鍚堝悓"], "keywords": "鍟嗘満 business 璧㈠崟 杈撳崟 闃舵"},
{"name": "鎶ヤ环鍗�", "module": "閿�鍞鐞�", "table": "crm_sale_quotation", "doc": "QT缂栧彿锛岄�� MDM 鐗╂枡鎶ヤ环锛孉I OCR 褰曞叆锛岃崏绋库啋宸茶浆鍚堝悓", "upstream": ["鍟嗘満"], "downstream": ["鍚堝悓"], "keywords": "鎶ヤ环 quotation QT"},
- {"name": "鍚堝悓", "module": "閿�鍞鐞�", "table": "crm_contract", "doc": "HT缂栧彿锛孊PM 瀹℃壒(0鑽夌/10瀹℃壒涓�/20閫氳繃/30椹冲洖/40鍙栨秷/50浣滃簾)锛岄�氳繃鍚庡彲鐢熸垚閿�鍞鍗�", "upstream": ["鎶ヤ环鍗�"], "downstream": ["閿�鍞鍗�", "鍥炴璁″垝", "寮�绁�"], "keywords": "鍚堝悓 contract 瀹℃壒"},
+ {"name": "鍚堝悓", "module": "閿�鍞鐞�", "table": "crm_contract", "doc": "HT缂栧彿(鏂板/缂栬緫鍧囧彲鑷畾涔夛紝鐣欑┖鍒欐柊澧炶嚜鍔ㄧ敓鎴愩�佺紪杈戜繚鎸佸師缂栧彿)锛孊PM 瀹℃壒(0鑽夌/10瀹℃壒涓�/20閫氳繃/30椹冲洖/40鍙栨秷/50浣滃簾)锛岄�氳繃鍚庡彲鐢熸垚閿�鍞鍗�", "upstream": ["鎶ヤ环鍗�"], "downstream": ["閿�鍞鍗�", "鍥炴璁″垝", "寮�绁�"], "keywords": "鍚堝悓 contract 瀹℃壒"},
{"name": "鍙戠エ", "module": "閿�鍞鐞�", "table": "crm_invoice", "doc": "KP缂栧彿锛孊PM 瀹℃壒锛岀疮璁″紑绁ㄢ墹鍚堝悓棰濓紝闄勪欢蹇呬紶", "upstream": ["鍚堝悓"], "downstream": ["鍥炴"], "keywords": "寮�绁� 鍙戠エ invoice"},
{"name": "鍥炴", "module": "閿�鍞鐞�", "table": "crm_receivable", "doc": "HK缂栧彿锛屽垱寤哄嵆瀹℃壒涓�(鎵嬪姩瀹℃牳)锛屽己鍒跺厛寮�绁紝閲戦鍙屾牎楠�", "upstream": ["鍚堝悓", "鍙戠エ"], "downstream": ["鏀舵鍗�(鍏宠仈)"], "keywords": "鍥炴 鏀舵璁″垝 receivable"},
{"name": "閿�鍞洰鏍�", "module": "閿�鍞鐞�", "table": "crm_sales_target", "doc": "骞�/瀛�/鏈埫椾釜浜�/閮ㄩ棬/浜у搧缁村害鐨勫悎鍚屽洖娆剧瓑鐩爣", "upstream": [], "downstream": ["涓氱哗缁熻"], "keywords": "鐩爣 target 涓氱哗"},
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java
index 5e7b2c0..169b1e1 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java
@@ -7,6 +7,7 @@
import com.mzt.logapi.starter.annotation.DiffLogField;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -30,6 +31,11 @@
@NotNull(message = "鍚堝悓鍚嶇О涓嶈兘涓虹┖")
private String name;
+ @Schema(description = "鍚堝悓缂栧彿锛岀暀绌哄垯鑷姩鐢熸垚锛涙柊澧炲拰鏇存柊鍧囧彲鑷畾涔夛紝鏇存柊鏃剁暀绌哄垯淇濇寔鍘熺紪鍙�", example = "HT20260921001")
+ @DiffLogField(name = "鍚堝悓缂栧彿")
+ @Size(max = 100, message = "鍚堝悓缂栧彿闀垮害涓嶈兘瓒呰繃 100 涓瓧绗�")
+ private String no;
+
@Schema(description = "瀹㈡埛缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "18336")
@DiffLogField(name = "瀹㈡埛", function = CrmCustomerParseFunction.NAME)
@NotNull(message = "瀹㈡埛缂栧彿涓嶈兘涓虹┖")
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
index ffcdf9c..c133f54 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
@@ -20,6 +20,7 @@
ErrorCode CONTRACT_GENERATE_ORDER_FAIL_EXISTS_ORDER = new ErrorCode(1_020_000_007, "鐢熸垚閿�鍞鍗曞け璐ワ紝鍘熷洜锛氬凡鍏宠仈閿�鍞鍗曘�恵}銆�");
ErrorCode CONTRACT_GENERATE_ORDER_FAIL_NO_PRODUCT = new ErrorCode(1_020_000_008, "鐢熸垚閿�鍞鍗曞け璐ワ紝鍘熷洜锛氬悎鍚屾病鏈変骇鍝佷俊鎭�");
ErrorCode CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_020_000_009, "鍚堝悓瀹℃壒娴佺▼涓嶅瓨鍦ㄦ垨鏈縺娲伙紝璇锋鏌� BPM 閰嶇疆");
+ ErrorCode CONTRACT_NO_DUPLICATE = new ErrorCode(1_020_000_010, "鍚堝悓缂栧彿銆恵}銆戝凡瀛樺湪锛岃鏇存崲鍚庨噸璇�");
// ========== 绾跨储绠$悊 1-020-001-000 ==========
ErrorCode CLUE_NOT_EXISTS = new ErrorCode(1_020_001_000, "绾跨储涓嶅瓨鍦�");
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
index 448dae2..91138a8 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
@@ -150,10 +150,15 @@
List<CrmContractProductDO> contractProducts = validateContractProducts(createReqVO.getProducts());
// 1.2 鏍¢獙鍏宠仈瀛楁
validateRelationDataExists(createReqVO);
- // 1.3 鐢熸垚搴忓彿
- String no = noRedisDAO.generate(CrmNoRedisDAO.CONTRACT_NO_PREFIX);
- if (contractMapper.selectByNo(no) != null) {
- throw exception(CONTRACT_NO_EXISTS);
+ // 1.3 鐢熸垚鎴栨牎楠屽悎鍚岀紪鍙凤細鏀寔鑷畾涔夌紪鍙凤紝鏈~鍐欐椂鑷姩鐢熸垚
+ String no = StrUtil.trimToNull(createReqVO.getNo());
+ if (no == null) {
+ no = noRedisDAO.generate(CrmNoRedisDAO.CONTRACT_NO_PREFIX);
+ if (contractMapper.selectByNo(no) != null) {
+ throw exception(CONTRACT_NO_EXISTS);
+ }
+ } else if (contractMapper.selectByNo(no) != null) {
+ throw exception(CONTRACT_NO_DUPLICATE, no);
}
// 2.1 鎻掑叆鍚堝悓
@@ -188,14 +193,26 @@
updateReqVO.setOwnerUserId(null); // 涓嶅厑璁告洿鏂扮殑瀛楁
// 1.1 鏍¢獙瀛樺湪
CrmContractDO oldContract = validateContractExists(updateReqVO.getId());
- // 1.2 鍙湁鑽夌銆佸鎵逛腑锛屽彲浠ョ紪杈戯紱
+ // 1.2 鍚堝悓缂栧彿锛氱暀绌哄垯淇濇寔鍘熺紪鍙凤紝濉啓鍒欐牎楠屽敮涓�鎬э紙鎺掗櫎鑷韩锛�
+ // 鐣欑┖鏃跺洖濉師缂栧彿鑰岄潪缃┖锛岄伩鍏嶆搷浣滄棩蹇� diff 鍑虹幇鈥滅紪鍙疯娓呯┖鈥�
+ String no = StrUtil.trimToNull(updateReqVO.getNo());
+ if (no == null) {
+ no = oldContract.getNo();
+ } else {
+ CrmContractDO noContract = contractMapper.selectByNo(no);
+ if (noContract != null && !ObjUtil.equal(noContract.getId(), updateReqVO.getId())) {
+ throw exception(CONTRACT_NO_DUPLICATE, no);
+ }
+ }
+ updateReqVO.setNo(no);
+ // 1.3 鍙湁鑽夌銆佸鎵逛腑锛屽彲浠ョ紪杈戯紱
if (!ObjectUtils.equalsAny(oldContract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(),
CrmAuditStatusEnum.PROCESS.getStatus())) {
throw exception(CONTRACT_UPDATE_FAIL_NOT_DRAFT);
}
- // 1.3 鏍¢獙浜у搧椤圭殑鏈夋晥鎬�
+ // 1.4 鏍¢獙浜у搧椤圭殑鏈夋晥鎬�
List<CrmContractProductDO> contractProducts = validateContractProducts(updateReqVO.getProducts());
- // 1.4 鏍¢獙鍏宠仈瀛楁
+ // 1.5 鏍¢獙鍏宠仈瀛楁
validateRelationDataExists(updateReqVO);
// 2.1 鏇存柊鍚堝悓
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/template/MesQcTemplateItemDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/template/MesQcTemplateItemDO.java
index ef0b02b..163f3ed 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/template/MesQcTemplateItemDO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/qc/template/MesQcTemplateItemDO.java
@@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.mes.dal.dataobject.qc.template;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -38,7 +37,7 @@
/**
* 浜у搧鐗╂枡缂栧彿
*
- * 鍏宠仈 {@link MesMdItemDO#getId()}
+ * 鍏宠仈 MDM 鐗╂枡缂栧彿锛坢dm_item.id锛夛紝闈� MES 鐗╂枡
*/
private Long itemId;
/**
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 47e9ed3..fcea450 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
@@ -131,8 +131,9 @@
// 1.3 纭畾妫�楠岀墿鏂欙細鏈変换鍔℃椂鍙栦换鍔$殑鐗╂枡锛屾棤浠诲姟鏃跺彇宸ュ崟鐨勪骇鍝�
Long itemId = (ctx.task() != null) ? ctx.task().getItemId() : workOrder.getProductId();
// 1.4 鏍规嵁鐗╂枡 + IPQC 绫诲瀷鏌ユ壘鍙敤璐ㄦ鏂规锛堟敮鎸佸墠绔樉寮忔寚瀹氾級
+ // 宸ュ崟浜у搧/浠诲姟鐗╂枡鏄� MES 鐗╂枡锛岀敱妯℃澘鏈嶅姟鍐呴儴杞崲涓� MDM 鐗╂枡鍚庡尮閰嶏紝鏁呬紶宸ュ崟/浠诲姟 ID
List<MesQcTemplateItemDO> templateItems = templateItemService.getTemplateItemList(
- itemId, MesQcTypeEnum.IPQC.getType(), null, null);
+ null, MesQcTypeEnum.IPQC.getType(), createReqVO.getWorkOrderId(), createReqVO.getTaskId());
if (CollUtil.isEmpty(templateItems)) {
throw exception(QC_NO_TEMPLATE);
}
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemService.java
index 4a6ab79..1dba9d4 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemService.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemService.java
@@ -64,21 +64,21 @@
/**
* 鏍规嵁浜у搧鐗╂枡 ID 鍜� QC 绫诲瀷鏌ユ壘妫�楠屾ā鏉跨殑浜у搧鍏宠仈锛堝繀椤诲瓨鍦紝鍚﹀垯鎶涘紓甯革級
*
- * @param itemId 浜у搧鐗╂枡 ID
- * @param qcType 妫�娴嬬绫伙紙鏋氫妇 {@link MesQcTypeEnum}锛�
+ * @param mdmItemId MDM 浜у搧鐗╂枡 ID锛坢dm_item.id锛�
+ * @param qcType 妫�娴嬬绫伙紙鏋氫妇 {@link MesQcTypeEnum}锛�
* @return 鍖归厤鐨勪骇鍝佸叧鑱�
*/
- MesQcTemplateItemDO getRequiredTemplateByItemIdAndType(Long itemId, Integer qcType);
+ MesQcTemplateItemDO getRequiredTemplateByItemIdAndType(Long mdmItemId, Integer qcType);
/**
* 鏍规嵁浜у搧鐗╂枡锛堟垨宸ュ崟/浠诲姟锛夊拰 QC 绫诲瀷锛岃幏鍙栨墍鏈夊彲鐢ㄧ殑璐ㄦ鏂规浜у搧鍏宠仈鍒楄〃
*
- * @param itemId 浜у搧鐗╂枡 ID锛坢es_md_item.id锛夛紱涓� workOrderId/taskId 鑷冲皯鍏朵竴
+ * @param mdmItemId MDM 浜у搧鐗╂枡 ID锛坢dm_item.id锛夛紱涓� workOrderId/taskId 鑷冲皯鍏朵竴
* @param qcType 妫�娴嬬绫伙紙鏋氫妇 {@link MesQcTypeEnum}锛�
- * @param workOrderId 鐢熶骇宸ュ崟 ID锛堝彲閫夛紝IPQC 鍦烘櫙鐢ㄤ簬瑙f瀽浜у搧鐗╂枡锛�
- * @param taskId 鐢熶骇浠诲姟 ID锛堝彲閫夛紝浼樺厛鐢ㄤ簬瑙f瀽浜у搧鐗╂枡锛�
+ * @param workOrderId 鐢熶骇宸ュ崟 ID锛堝彲閫夛紝IPQC 鍦烘櫙鐢ㄤ簬瑙f瀽浜у搧鐗╂枡锛涘伐鍗曚骇鍝佷负 MES 鐗╂枡锛屽唴閮ㄨ浆鎹负 MDM 鐗╂枡锛�
+ * @param taskId 鐢熶骇浠诲姟 ID锛堝彲閫夛紝浼樺厛鐢ㄤ簬瑙f瀽浜у搧鐗╂枡锛涗换鍔$墿鏂欎负 MES 鐗╂枡锛屽唴閮ㄨ浆鎹负 MDM 鐗╂枡锛�
* @return 鍖归厤鐨勪骇鍝佸叧鑱斿垪琛紙淇濇寔鍘熼『搴忥級锛屾棤鍖归厤杩斿洖绌哄垪琛�
*/
- List<MesQcTemplateItemDO> getTemplateItemList(Long itemId, Integer qcType, Long workOrderId, Long taskId);
+ List<MesQcTemplateItemDO> getTemplateItemList(Long mdmItemId, Integer qcType, Long workOrderId, Long taskId);
}
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemServiceImpl.java
index 712c693..8ff8e40 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateItemServiceImpl.java
@@ -126,8 +126,8 @@
}
@Override
- public MesQcTemplateItemDO getRequiredTemplateByItemIdAndType(Long itemId, Integer qcType) {
- List<MesQcTemplateItemDO> templateItems = getTemplateItemList(itemId, qcType, null, null);
+ public MesQcTemplateItemDO getRequiredTemplateByItemIdAndType(Long mdmItemId, Integer qcType) {
+ List<MesQcTemplateItemDO> templateItems = getTemplateItemList(mdmItemId, qcType, null, null);
if (CollUtil.isEmpty(templateItems)) {
throw exception(QC_NO_TEMPLATE);
}
@@ -135,28 +135,27 @@
}
@Override
- public List<MesQcTemplateItemDO> getTemplateItemList(Long itemId, Integer qcType, Long workOrderId, Long taskId) {
- // 1. 瑙f瀽鐪熷疄浜у搧鐗╂枡 ID锛氫换鍔′紭鍏堬紝鍏舵宸ュ崟锛屾渶鍚庣洿鎺ョ敤鍏ュ弬
- Long resolvedItemId = itemId;
+ public List<MesQcTemplateItemDO> getTemplateItemList(Long mdmItemId, Integer qcType, Long workOrderId, Long taskId) {
+ // 1. 瑙f瀽 MDM 浜у搧鐗╂枡 ID锛氫换鍔′紭鍏堬紝鍏舵宸ュ崟锛涗袱鑰呭瓨鐨勬槸 MES 鐗╂枡 ID锛岄渶杞崲涓� MDM 鐗╂枡 ID銆�
+ // 鏈紶宸ュ崟/浠诲姟鏃讹紝鍏ュ弬鏈韩鍗� MDM 鐗╂枡 ID锛堣川妫�鍗曞墠绔�夋嫨鐨勫氨鏄� MDM 鐗╂枡锛�
+ Long resolvedMdmItemId;
if (taskId != null) {
- resolvedItemId = proTaskService.validateTaskExists(taskId).getItemId();
+ resolvedMdmItemId = convertMesItemIdToMdmItemId(proTaskService.validateTaskExists(taskId).getItemId());
} else if (workOrderId != null) {
- resolvedItemId = proWorkOrderService.validateWorkOrderExists(workOrderId).getProductId();
+ resolvedMdmItemId = convertMesItemIdToMdmItemId(
+ proWorkOrderService.validateWorkOrderExists(workOrderId).getProductId());
+ } else {
+ resolvedMdmItemId = mdmItemId;
}
- if (resolvedItemId == null) {
+ if (resolvedMdmItemId == null) {
return Collections.emptyList();
}
- // 2. mes_md_item.id 杞� mdm_item.id锛堜骇鍝佸叧鑱旇〃瀛樼殑鏄� mdm 鐗╂枡锛�
- MesMdItemDO item = mesMdItemService.getItem(resolvedItemId);
- if (item == null || item.getMdmItemId() == null) {
- return Collections.emptyList();
- }
- // 3. 鏌ュ嚭璇ョ墿鏂欏叧鑱旂殑鎵�鏈変骇鍝佸叧鑱�
- List<MesQcTemplateItemDO> templateItems = templateItemMapper.selectListByItemId(item.getMdmItemId());
+ // 2. 鏌ュ嚭璇ョ墿鏂欏叧鑱旂殑鎵�鏈変骇鍝佸叧鑱�
+ List<MesQcTemplateItemDO> templateItems = templateItemMapper.selectListByItemId(resolvedMdmItemId);
if (CollUtil.isEmpty(templateItems)) {
return Collections.emptyList();
}
- // 4. 杩囨护锛氭柟妗堝惎鐢ㄤ笖妫�娴嬬绫诲寘鍚� qcType锛岃繑鍥炲叏閮ㄥ尮閰嶉」
+ // 3. 杩囨护锛氭柟妗堝惎鐢ㄤ笖妫�娴嬬绫诲寘鍚� qcType锛岃繑鍥炲叏閮ㄥ尮閰嶉」
List<MesQcTemplateDO> templates = templateService.getTemplateList(
convertSet(templateItems, MesQcTemplateItemDO::getTemplateId));
Set<Long> matchedTemplateIds = templates.stream()
@@ -169,4 +168,18 @@
.collect(Collectors.toList());
}
+ /**
+ * MES 鐗╂枡 ID 杞� MDM 鐗╂枡 ID
+ *
+ * @param mesItemId MES 鐗╂枡 ID锛坢es_md_item.id锛�
+ * @return MDM 鐗╂枡 ID锛坢dm_item.id锛夛紱MES 鐗╂枡涓嶅瓨鍦ㄦ垨鏈叧鑱� MDM 鐗╂枡鏃惰繑鍥� null
+ */
+ private Long convertMesItemIdToMdmItemId(Long mesItemId) {
+ if (mesItemId == null) {
+ return null;
+ }
+ MesMdItemDO item = mesMdItemService.getItem(mesItemId);
+ return item != null ? item.getMdmItemId() : null;
+ }
+
}
--
Gitblit v1.9.3