From ed01be06d17f1159d32e7fa2133a32f2986d3b9f Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 22 九月 2026 14:50:53 +0800
Subject: [PATCH] refactor(mes): 替换物料服务为MDM API并完善质检Word导出功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/MesQcOqcController.java                   |   28 +++---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilder.java     |   22 ++++-
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/MesQcIqcController.java                   |   27 +++---
 docs/project-business/data/flows.json                                                                                        |    4 
 docs/project-business/mermaid/05-quality-flow.mmd                                                                            |    2 
 docs/qc_product_report_word_integration.md                                                                                   |    7 +
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java                 |   30 ++++---
 docs/project-business/index.html                                                                                             |    4 
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/MesQcRqcController.java                   |   27 +++---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/pendinginspect/MesQcPendingInspectServiceImpl.java     |   32 +++++++
 yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java |   22 ++++-
 11 files changed, 133 insertions(+), 72 deletions(-)

diff --git a/docs/project-business/data/flows.json b/docs/project-business/data/flows.json
index 55797d2..e814e32 100644
--- a/docs/project-business/data/flows.json
+++ b/docs/project-business/data/flows.json
@@ -29,13 +29,13 @@
        {"stage": "鑱斿姩", "action": "瀹℃壒閫氳繃鎸夊伐搴忔爣璁�: 鍊掑啿鈫掕嚜鍔ㄧ墿鏂欐秷鑰楁墸绾胯竟搴�(鍏佽璐熷簱瀛�)锛涜川妫�鈫掍骇鍑哄緟妫�琛岀瓑 IPQC锛涘叧閿潪妫�鈫掔洿鎺ヤ骇鍑哄叆搴�", "roles": ["绯荤粺鑷姩"]},
        {"stage": "瀹屽伐", "action": "浠呮湯閬撳伐搴忓洖鍐欏伐鍗曞凡鐢熶骇鏁伴噺锛岃揪鏍囪嚜鍔ㄥ畬鎴愶紱MPS 绱鍒ゆ柇瀹屾垚骞跺彂浜嬩欢缁欓攢鍞鍗�", "roles": ["绯荤粺鑷姩"]}]},
     {"id": "quality", "name": "璐ㄩ噺娴佺▼", "mermaid": "mermaid/05-quality-flow.mmd", "color": "#e06c6c",
-     "summary": "鍥涢亾妫�楠岄椄鍙�(IQC/IPQC/OQC/RQC锛屼簩鎬� 0鈫�4) + 鍒ゅ畾鍥涙灉(鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾锛汷QC 鏀规寜浜у搧绛夌骇 1鍨�/2鍨�/搴熷搧锛屼粎搴熷搧鍒や笉鍚堟牸) + NCR 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曘�傛敮鎸佸寲宸ユ姤鍛婅寖寮忥細鍒嗙粍鎸囨爣鏍�+鍏紡鏂囨湰+骞宠娴嬮噺鎵规+閲囨牱琛ㄥご+绛惧瓧鍖猴紝娴忚鍣ㄦ墦鍗版楠屾姤鍛婏紱骞跺彲瀵煎嚭浜у搧妫�楠屽崟 Word锛堢焊璐ㄦ楠屽崟鐗堝紡锛屽垽瀹氱粨璁�/璐ㄦ绔�/妫�楠屄峰鏍嘎锋壒鍑嗙瀛楃暀绌烘墜濉紝Word 鎵撳嵃锛夈��",
+     "summary": "鍥涢亾妫�楠岄椄鍙�(IQC/IPQC/OQC/RQC锛屼簩鎬� 0鈫�4) + 鍒ゅ畾鍥涙灉(鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾锛汷QC 鏀规寜浜у搧绛夌骇 1鍨�/2鍨�/搴熷搧锛屼粎搴熷搧鍒や笉鍚堟牸) + NCR 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曘�傛敮鎸佸寲宸ユ姤鍛婅寖寮忥細鍒嗙粍鎸囨爣鏍�+鍏紡鏂囨湰+骞宠娴嬮噺鎵规+閲囨牱琛ㄥご+绛惧瓧鍖猴紝娴忚鍣ㄦ墦鍗版楠屾姤鍛婏紱骞跺彲瀵煎嚭浜у搧妫�楠屽崟 Word锛堢焊璐ㄦ楠屽崟鐗堝紡锛屽垽瀹氱粨璁哄甫鍑烘楠岀粨鏋溿�佹楠屄峰鏍嘎锋壒鍑嗙瀛楀甫鍑烘娴嬩汉路澶嶆牳浜郝峰鏍镐汉濮撳悕銆佽川妫�绔犵暀绌虹洊绔狅紝Word 鎵撳嵃锛夈��",
      "steps": [
        {"stage": "鏉ユ枡", "action": "鍒拌揣閫氱煡/澶栧崗鍏ュ簱鈫扞QC锛岀粨璁哄洖鍐欐帹杩涘緟鍏ュ簱鎴栬Е鍙戦��璐�", "roles": ["IQC 璐ㄦ鍛�"]},
        {"stage": "杩囩▼", "action": "鎶ュ伐璐ㄦ宸ュ簭浜у嚭琛屸啋IPQC锛屽悎鏍兼媶琛屽叆搴撱�佷笉鍚堟牸鐢熸垚 NCR", "roles": ["IPQC 璐ㄦ鍛�"]},
        {"stage": "鍑鸿揣", "action": "閿�鍞嚭搴撴彁浜も啋OQC(妫�娴嬬粨鏋滄寜浜у搧绛夌骇 1鍨�/2鍨�/搴熷搧蹇呭~锛�1鍨�/2鍨嬪垽琛屽悎鏍硷紝搴熷搧鍒よ涓嶅悎鏍�)锛屽叏閮ㄥ悎鏍煎悗鍑哄簱鍗曡繘鍏ュ緟鎷h揣锛屽嚭鐜板簾鍝佸垯鏁村崟鍙栨秷", "roles": ["OQC 璐ㄦ鍛�"]},
        {"stage": "閫�璐�", "action": "閫�鏂�/閿�鍞��璐�/鍞悗閫�璐р啋RQC锛岀粨璁哄洖璋冨崟鎹笌鍞悗", "roles": ["RQC 璐ㄦ鍛�"]},
-       {"stage": "鎶ュ憡", "action": "妫�楠岀粨鏋滄寜鍒嗙粍鏍�+娴嬮噺鎵规褰曞叆锛�/indicator-result/report 鑱氬悎鍚庡墠绔墦鍗版楠屾姤鍛�(鍚噰鏍峰湴鐐�/璇佷功缂栧彿/鎵ц鏍囧噯/鍒ゅ畾缁撹路璐ㄦ涓撶敤绔�/澶嶆牳路瀹℃牳绛惧瓧鍖猴紱鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋溌疯川妫�绔犵暀绌虹洊绔犅锋棤骞宠娴嬮噺鏃跺垪澶寸О娴嬮噺鍊�)锛�/indicator-result/export-product-word 瀵煎嚭浜у搧妫�楠屽崟Word(鏃犳妧鏈寚鏍囧垪路鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋溌疯川妫�绔�/妫�楠屄峰鏍嘎锋壒鍑嗙瀛楃暀绌烘墜濉峰钩琛屾祴閲忛】鍙峰悎骞堵蜂笅杞藉悗Word鎵撳嵃锛涜川妫�鍗曡鎯呮娴嬬粨鏋淭ab鍙寜鏍峰搧鏌ョ湅鍙妫�娴嬪�兼槑缁�)", "roles": ["璐ㄦ鍛�", "澶嶆牳浜�", "瀹℃牳浜�"]},
+       {"stage": "鎶ュ憡", "action": "妫�楠岀粨鏋滄寜鍒嗙粍鏍�+娴嬮噺鎵规褰曞叆锛�/indicator-result/report 鑱氬悎鍚庡墠绔墦鍗版楠屾姤鍛�(鍚噰鏍峰湴鐐�/璇佷功缂栧彿/鎵ц鏍囧噯/鍒ゅ畾缁撹路璐ㄦ涓撶敤绔�/澶嶆牳路瀹℃牳绛惧瓧鍖猴紱鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋溌疯川妫�绔犵暀绌虹洊绔犅锋棤骞宠娴嬮噺鏃跺垪澶寸О娴嬮噺鍊�)锛�/indicator-result/export-product-word 瀵煎嚭浜у搧妫�楠屽崟Word(鏃犳妧鏈寚鏍囧垪路鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋溌锋楠屄峰鏍嘎锋壒鍑嗙瀛楀甫鍑烘娴嬩汉/澶嶆牳浜�/瀹℃牳浜哄鍚嵚疯川妫�绔犵暀绌虹洊绔犅峰钩琛屾祴閲忛】鍙峰悎骞堵蜂笅杞藉悗Word鎵撳嵃锛涜川妫�鍗曡鎯呮娴嬬粨鏋淭ab鍙寜鏍峰搧鏌ョ湅鍙妫�娴嬪�兼槑缁�)", "roles": ["璐ㄦ鍛�", "澶嶆牳浜�", "瀹℃牳浜�"]},
        {"stage": "涓嶅悎鏍�", "action": "NCR: 寰呰瘎瀹♀啋璇勫鈫掑缃�(閫�璐�/鎶ュ簾/杩斿伐/璁╂鎺ユ敹/闄嶇骇)鈫掑叧闂�", "roles": ["璐ㄩ噺宸ョ▼甯�"]}]},
     {"id": "warehouse", "name": "浠撳偍娴佺▼", "mermaid": "mermaid/06-warehouse-flow.mmd", "color": "#7e6bd6",
      "summary": "15 绫诲崟鎹┍鍔ㄥ簱瀛樺彴璐�(鍏厓缁勩�佸洓閲�)鍙樺姩锛屽叏閮ㄧ粡浜嬪姟娴佹按鐣欑棔锛涙敮鎸佽皟鎷ㄥ湪閫斻�佺洏鐐硅皟鏁淬�佹壒娆�/SN 杩芥函銆佸簱瀛樺崰鐢ㄤ笌鍥涚骇鍐荤粨銆佺嚎杈硅櫄鎷熷簱璐熷簱瀛橈紱瀵瑰 WmsStockApi 渚� ERP 鏀跺彂銆�",
diff --git a/docs/project-business/index.html b/docs/project-business/index.html
index 6ba4d3c..14ddfa6 100644
--- a/docs/project-business/index.html
+++ b/docs/project-business/index.html
@@ -516,13 +516,13 @@
        {"stage": "鑱斿姩", "action": "瀹℃壒閫氳繃鎸夊伐搴忔爣璁�: 鍊掑啿鈫掕嚜鍔ㄧ墿鏂欐秷鑰楁墸绾胯竟搴�(鍏佽璐熷簱瀛�)锛涜川妫�鈫掍骇鍑哄緟妫�琛岀瓑 IPQC锛涘叧閿潪妫�鈫掔洿鎺ヤ骇鍑哄叆搴�", "roles": ["绯荤粺鑷姩"]},
        {"stage": "瀹屽伐", "action": "浠呮湯閬撳伐搴忓洖鍐欏伐鍗曞凡鐢熶骇鏁伴噺锛岃揪鏍囪嚜鍔ㄥ畬鎴愶紱MPS 绱鍒ゆ柇瀹屾垚骞跺彂浜嬩欢缁欓攢鍞鍗�", "roles": ["绯荤粺鑷姩"]}]},
     {"id": "quality", "name": "璐ㄩ噺娴佺▼", "mermaid": "mermaid/05-quality-flow.mmd", "color": "#e06c6c",
-     "summary": "鍥涢亾妫�楠岄椄鍙�(IQC/IPQC/OQC/RQC锛屼簩鎬� 0鈫�4) + 鍒ゅ畾鍥涙灉(鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾锛汷QC 鏀规寜浜у搧绛夌骇 1鍨�/2鍨�/搴熷搧锛屼粎搴熷搧鍒や笉鍚堟牸) + NCR 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曘�傛敮鎸佸寲宸ユ姤鍛婅寖寮忥細鍒嗙粍鎸囨爣鏍�+鍏紡鏂囨湰+骞宠娴嬮噺鎵规+閲囨牱琛ㄥご+绛惧瓧鍖猴紝娴忚鍣ㄦ墦鍗版楠屾姤鍛婏紱骞跺彲瀵煎嚭浜у搧妫�楠屽崟 Word锛堢焊璐ㄦ楠屽崟鐗堝紡锛屽垽瀹氱粨璁�/璐ㄦ绔�/妫�楠屄峰鏍嘎锋壒鍑嗙瀛楃暀绌烘墜濉紝Word 鎵撳嵃锛夈��",
+     "summary": "鍥涢亾妫�楠岄椄鍙�(IQC/IPQC/OQC/RQC锛屼簩鎬� 0鈫�4) + 鍒ゅ畾鍥涙灉(鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾锛汷QC 鏀规寜浜у搧绛夌骇 1鍨�/2鍨�/搴熷搧锛屼粎搴熷搧鍒や笉鍚堟牸) + NCR 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曘�傛敮鎸佸寲宸ユ姤鍛婅寖寮忥細鍒嗙粍鎸囨爣鏍�+鍏紡鏂囨湰+骞宠娴嬮噺鎵规+閲囨牱琛ㄥご+绛惧瓧鍖猴紝娴忚鍣ㄦ墦鍗版楠屾姤鍛婏紱骞跺彲瀵煎嚭浜у搧妫�楠屽崟 Word锛堢焊璐ㄦ楠屽崟鐗堝紡锛屽垽瀹氱粨璁哄甫鍑烘楠岀粨鏋溿�佹楠屄峰鏍嘎锋壒鍑嗙瀛楀甫鍑烘娴嬩汉路澶嶆牳浜郝峰鏍镐汉濮撳悕銆佽川妫�绔犵暀绌虹洊绔狅紝Word 鎵撳嵃锛夈��",
      "steps": [
        {"stage": "鏉ユ枡", "action": "鍒拌揣閫氱煡/澶栧崗鍏ュ簱鈫扞QC锛岀粨璁哄洖鍐欐帹杩涘緟鍏ュ簱鎴栬Е鍙戦��璐�", "roles": ["IQC 璐ㄦ鍛�"]},
        {"stage": "杩囩▼", "action": "鎶ュ伐璐ㄦ宸ュ簭浜у嚭琛屸啋IPQC锛屽悎鏍兼媶琛屽叆搴撱�佷笉鍚堟牸鐢熸垚 NCR", "roles": ["IPQC 璐ㄦ鍛�"]},
        {"stage": "鍑鸿揣", "action": "閿�鍞嚭搴撴彁浜も啋OQC(妫�娴嬬粨鏋滄寜浜у搧绛夌骇 1鍨�/2鍨�/搴熷搧蹇呭~锛�1鍨�/2鍨嬪垽琛屽悎鏍硷紝搴熷搧鍒よ涓嶅悎鏍�)锛屽叏閮ㄥ悎鏍煎悗鍑哄簱鍗曡繘鍏ュ緟鎷h揣锛屽嚭鐜板簾鍝佸垯鏁村崟鍙栨秷", "roles": ["OQC 璐ㄦ鍛�"]},
        {"stage": "閫�璐�", "action": "閫�鏂�/閿�鍞��璐�/鍞悗閫�璐р啋RQC锛岀粨璁哄洖璋冨崟鎹笌鍞悗", "roles": ["RQC 璐ㄦ鍛�"]},
-       {"stage": "鎶ュ憡", "action": "妫�楠岀粨鏋滄寜鍒嗙粍鏍�+娴嬮噺鎵规褰曞叆锛�/indicator-result/report 鑱氬悎鍚庡墠绔墦鍗版楠屾姤鍛�(鍚噰鏍峰湴鐐�/璇佷功缂栧彿/鎵ц鏍囧噯/鍒ゅ畾缁撹路璐ㄦ涓撶敤绔�/澶嶆牳路瀹℃牳绛惧瓧鍖猴紱鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋溌疯川妫�绔犵暀绌虹洊绔犅锋棤骞宠娴嬮噺鏃跺垪澶寸О娴嬮噺鍊�)锛�/indicator-result/export-product-word 瀵煎嚭浜у搧妫�楠屽崟Word(鏃犳妧鏈寚鏍囧垪路鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋溌疯川妫�绔�/妫�楠屄峰鏍嘎锋壒鍑嗙瀛楃暀绌烘墜濉峰钩琛屾祴閲忛】鍙峰悎骞堵蜂笅杞藉悗Word鎵撳嵃锛涜川妫�鍗曡鎯呮娴嬬粨鏋淭ab鍙寜鏍峰搧鏌ョ湅鍙妫�娴嬪�兼槑缁�)", "roles": ["璐ㄦ鍛�", "澶嶆牳浜�", "瀹℃牳浜�"]},
+       {"stage": "鎶ュ憡", "action": "妫�楠岀粨鏋滄寜鍒嗙粍鏍�+娴嬮噺鎵规褰曞叆锛�/indicator-result/report 鑱氬悎鍚庡墠绔墦鍗版楠屾姤鍛�(鍚噰鏍峰湴鐐�/璇佷功缂栧彿/鎵ц鏍囧噯/鍒ゅ畾缁撹路璐ㄦ涓撶敤绔�/澶嶆牳路瀹℃牳绛惧瓧鍖猴紱鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋溌疯川妫�绔犵暀绌虹洊绔犅锋棤骞宠娴嬮噺鏃跺垪澶寸О娴嬮噺鍊�)锛�/indicator-result/export-product-word 瀵煎嚭浜у搧妫�楠屽崟Word(鏃犳妧鏈寚鏍囧垪路鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋溌锋楠屄峰鏍嘎锋壒鍑嗙瀛楀甫鍑烘娴嬩汉/澶嶆牳浜�/瀹℃牳浜哄鍚嵚疯川妫�绔犵暀绌虹洊绔犅峰钩琛屾祴閲忛】鍙峰悎骞堵蜂笅杞藉悗Word鎵撳嵃锛涜川妫�鍗曡鎯呮娴嬬粨鏋淭ab鍙寜鏍峰搧鏌ョ湅鍙妫�娴嬪�兼槑缁�)", "roles": ["璐ㄦ鍛�", "澶嶆牳浜�", "瀹℃牳浜�"]},
        {"stage": "涓嶅悎鏍�", "action": "NCR: 寰呰瘎瀹♀啋璇勫鈫掑缃�(閫�璐�/鎶ュ簾/杩斿伐/璁╂鎺ユ敹/闄嶇骇)鈫掑叧闂�", "roles": ["璐ㄩ噺宸ョ▼甯�"]}]},
     {"id": "warehouse", "name": "浠撳偍娴佺▼", "mermaid": "mermaid/06-warehouse-flow.mmd", "color": "#7e6bd6",
      "summary": "15 绫诲崟鎹┍鍔ㄥ簱瀛樺彴璐�(鍏厓缁勩�佸洓閲�)鍙樺姩锛屽叏閮ㄧ粡浜嬪姟娴佹按鐣欑棔锛涙敮鎸佽皟鎷ㄥ湪閫斻�佺洏鐐硅皟鏁淬�佹壒娆�/SN 杩芥函銆佸簱瀛樺崰鐢ㄤ笌鍥涚骇鍐荤粨銆佺嚎杈硅櫄鎷熷簱璐熷簱瀛橈紱瀵瑰 WmsStockApi 渚� ERP 鏀跺彂銆�",
diff --git a/docs/project-business/mermaid/05-quality-flow.mmd b/docs/project-business/mermaid/05-quality-flow.mmd
index 3b21b28..f3f6bbd 100644
--- a/docs/project-business/mermaid/05-quality-flow.mmd
+++ b/docs/project-business/mermaid/05-quality-flow.mmd
@@ -23,4 +23,4 @@
   Q8[鏀拺鏁版嵁:璐ㄦ鏂规路妫�楠屾寚鏍嚶风己闄峰簱路鎸囨爣缁撴灉] --- A1
   Q9[鍖栧伐鎶ュ憡澧炲己:鎸囨爣鍒嗙粍鏍�+鍏紡鏂囨湰路骞宠娴嬮噺鎵规路閲囨牱鍦扮偣/璇佷功缂栧彿/鎵ц鏍囧噯琛ㄥご路澶嶆牳浜�/瀹℃牳浜篯 --- Q8
   A1 & A2 & A3 & A4 --> P1[妫�楠屾姤鍛婂崟鎵撳嵃路鍓嶇娴忚鍣ㄦ墦鍗奥峰垽瀹氱粨璁哄甫鍑烘楠岀粨鏋�+璐ㄦ涓撶敤绔犵暀绌虹洊绔�+绛惧瓧鍖郝锋棤骞宠娴嬮噺鏃跺垪澶寸О娴嬮噺鍊糫
-  A1 & A2 & A3 & A4 --> P2[浜у搧妫�楠屽崟Word瀵煎嚭路export-product-word路鏃犳妧鏈寚鏍囧垪路鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋�/璐ㄦ绔犵暀绌虹洊绔犅稺ord鎵撳嵃]
+  A1 & A2 & A3 & A4 --> P2[浜у搧妫�楠屽崟Word瀵煎嚭路export-product-word路鏃犳妧鏈寚鏍囧垪路鍒ゅ畾缁撹甯﹀嚭妫�楠岀粨鏋溌锋楠�/澶嶆牳/鎵瑰噯绛惧瓧甯﹀嚭妫�娴嬩汉/澶嶆牳浜�/瀹℃牳浜哄鍚嵚疯川妫�绔犵暀绌虹洊绔犅稺ord鎵撳嵃]
diff --git a/docs/qc_product_report_word_integration.md b/docs/qc_product_report_word_integration.md
index 2b3aebc..bc944b0 100644
--- a/docs/qc_product_report_word_integration.md
+++ b/docs/qc_product_report_word_integration.md
@@ -48,10 +48,10 @@
 | 妫�楠屾棩鏈� | `inspectDate`锛堟柊澧炲搷搴斿瓧娈碉級 | |
 | 妫�楠岄」鐩� | 褰曞叆椤瑰悕绉� | **涓嶅惈鎶�鏈寚鏍囧垪**锛涘垎缁勮涓庡叕寮忔枃鏈笉灞曠ず锛屽垎缁勪笅褰曞叆椤瑰钩閾� |
 | 妫�楠岀粨鏋� | 娴嬮噺鍊� | 骞宠娴嬮噺澶氬�奸】鍙峰悎骞讹紙濡� `10.023銆�10.115`锛夛紱鏃犲�� `/` |
-| 鍒ゅ畾缁撹 | 鐣欑┖ | 鎵撳嵃鍚庢墜宸ュ~鍐� |
+| 鍒ゅ畾缁撹 | `checkResultText` | 鑷姩甯﹀嚭妫�楠岀粨鏋滄枃妗堬紙鎸� `qcType` 鍙栧瓧鍏革紝OQC 鐢� `mes_oqc_check_result`锛夛紝鏈垽瀹氭椂鐣欑┖ |
 | 璐ㄦ涓撶敤绔� | 鐣欑┖ | 鎵撳嵃鍚庣洊绔� |
 | 澶囨敞 | 鍗曟嵁 `remark`锛屼负绌烘椂榛樿銆屾楠岀粨鏋滀粎瀵规牱鍝佹湰韬垨鏈壒娆¤礋璐c�傘�� | |
-| 妫�楠�/澶嶆牳/鎵瑰噯 | 鍥哄畾鐣欑┖ | 涓庡垽瀹氱粨璁�/璐ㄦ绔犱竴鑷达紝涓嶈緭鍑哄鍚嶏紝鎵撳嵃鍚庢墜鍐� |
+| 妫�楠� / 澶嶆牳 / 鎵瑰噯 | `inspectorName` / `auditName` / `approveName` | 鍒嗗埆瀵瑰簲鍗曟嵁鐨勬娴嬩汉鍛樸�佸鏍镐汉銆佸鏍镐汉锛涙湭鎸囧畾浜哄憳鏃惰娈电暀绌恒�佹墦鍗板悗鎵嬪啓 |
 
 ## 鎺ュ彛鍙樻洿鐐癸紙`/mes/qc/indicator-result/report` 鍝嶅簲锛�
 
@@ -68,7 +68,8 @@
 |------|------|
 | 澶氭牱鍝� | `resultId` 涓嶄紶鍙栨渶鏃╂牱鍝侊紱涓� `/report` 琛屼负涓�鑷� |
 | 鎶�鏈寚鏍� | 鏈増寮忓浐瀹氫笉杈撳嚭闃堝��/鏍囧噯鍊煎垪锛涢渶瑕佹妧鏈寚鏍囧鐓ф椂浣跨敤鏃㈡湁銆屾墦鍗版姤鍛娿�嶅寲楠岃褰曠増寮� |
-| 鍒ゅ畾缁撹 | 绯荤粺涓嶅啓鍏ョ粨璁猴紙鍚� checkResult锛夛紝涓�寰嬬暀绌烘墜濉� |
+| 鍒ゅ畾缁撹 | 鑷姩甯﹀嚭妫�楠岀粨鏋滄枃妗堬紱鍗曟嵁鏈垽瀹氾紙`checkResult` 涓虹┖锛夋椂鐣欑┖鎵嬪~ |
+| 妫�楠�/澶嶆牳/鎵瑰噯 | 鍒嗗埆鍙栨娴嬩汉鍛樸�佸鏍镐汉銆佸鏍镐汉濮撳悕鎵撳嵃锛涗笁椤瑰潎鍙负绌猴紙鎵撳嵃鍚庢墜鍐欙級锛屼笉鍥犵己浜哄憳鑰屾姤閿� |
 | 绌哄�� | 鏂囨湰绌烘墦鍗� `/`锛涙壒閲�/鏃ユ湡涓虹┖鎵撳嵃 `/` |
 | 鍒嗙粍鎸囨爣 | 鍒嗙粍鏈韩涓嶅崰琛岋紝浠呭钩閾哄叾涓嬪綍鍏ラ」锛堝惈涓棿鍙傛暟琛岋紝濡�"璇曟牱璐ㄩ噺 m/g"锛� |
 
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java
index 2030742..9137da8 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/ipqc/MesQcIpqcController.java
@@ -13,8 +13,6 @@
 import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcSaveReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcQualityExportVO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
@@ -23,8 +21,10 @@
 import cn.iocoder.yudao.module.mes.dal.mysql.qc.ipqc.MesQcIpqcLineMapper;
 import cn.iocoder.yudao.module.mes.enums.DictTypeConstants;
 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.unitmeasure.MesMdUnitMeasureService;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
+import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi;
+import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
 import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
 import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
 import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcService;
@@ -55,6 +55,7 @@
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
 
+
 @Tag(name = "绠$悊鍚庡彴 - MES 杩囩▼妫�楠屽崟锛圛PQC锛�")
 @RestController
 @RequestMapping("/mes/qc/ipqc")
@@ -64,9 +65,9 @@
     @Resource
     private MesQcIpqcService ipqcService;
     @Resource
-    private MesMdItemService itemService;
+    private MdmItemApi mdmItemApi;
     @Resource
-    private MesMdUnitMeasureService unitMeasureService;
+    private MdmUnitMeasureApi mdmUnitMeasureApi;
     @Resource
     private MesQcIndicatorResultService indicatorResultService;
     @Resource
@@ -145,12 +146,13 @@
         if (CollUtil.isEmpty(list)) {
             return Collections.emptyList();
         }
-        // 鎵归噺鏌ヨ鐗╂枡
-        Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
+        // 鎵归噺鏌ヨ鐗╂枡锛圡DM 鐗╂枡锛�
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                 convertSet(list, MesQcIpqcDO::getItemId));
-        // 鎵归噺鏌ヨ璁¢噺鍗曚綅锛�
-        Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
-                convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
+        // 鎵归噺鏌ヨ璁¢噺鍗曚綅
+        Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(
+                convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData()
+                .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e));
         // 鎵归噺鏌ヨ妫�娴�/澶嶆牳/瀹℃牳浜哄憳
         Set<Long> qcUserIds = new HashSet<>();
         qcUserIds.addAll(convertSet(list, MesQcIpqcDO::getInspectorUserId));
@@ -242,8 +244,8 @@
         // 鎵归噺鏌ヨ妫�娴嬩汉鍛�
         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
                 convertSet(list, MesQcIpqcDO::getInspectorUserId));
-        // 鎵归噺鏌ヨ鐗╂枡
-        Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
+        // 鎵归噺鏌ヨ鐗╂枡锛圡DM 鐗╂枡锛�
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                 convertSet(list, MesQcIpqcDO::getItemId));
         // 鎵归噺鏌ヨ琛屾槑缁�
         List<MesQcIpqcLineDO> lines = ipqcLineMapper.selectListByIpqcIds(convertSet(list, MesQcIpqcDO::getId));
@@ -260,7 +262,7 @@
         for (MesQcIpqcDO ipqc : list) {
             MesQcQualityExportVO vo = new MesQcQualityExportVO();
             vo.setDocName(ipqc.getName());
-            MesMdItemDO item = itemMap.get(ipqc.getItemId());
+            MdmItemRespDTO item = itemMap.get(ipqc.getItemId());
             vo.setItemName(item != null ? item.getName() : "");
             vo.setBatchNo(ipqc.getBatchCode());
             vo.setInspectDate(MesQcQualityExportVO.formatDateTime(ipqc.getInspectDate()));
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/MesQcIqcController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/MesQcIqcController.java
index b63e2e6..23ef2e3 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/MesQcIqcController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/iqc/MesQcIqcController.java
@@ -15,16 +15,16 @@
 import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcQualityExportVO;
 import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi;
 import cn.iocoder.yudao.module.srm.api.supplier.dto.SrmSupplierRespDTO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
+import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi;
+import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcLineDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.qc.iqc.MesQcIqcLineMapper;
-import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
-import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
 import cn.iocoder.yudao.module.mes.enums.DictTypeConstants;
 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
 import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
@@ -73,9 +73,9 @@
     @Resource
     private MesQcIndicatorService indicatorService;
     @Resource
-    private MesMdItemService itemService;
+    private MdmItemApi mdmItemApi;
     @Resource
-    private MesMdUnitMeasureService unitMeasureService;
+    private MdmUnitMeasureApi mdmUnitMeasureApi;
     @Resource
     private MesQcIqcLineMapper iqcLineMapper;
 
@@ -154,12 +154,13 @@
         Map<Long, SrmSupplierRespDTO> vendorMap = srmSupplierApi.getSupplierList(
                 convertSet(list, MesQcIqcDO::getVendorId)).getCheckedData().stream()
                 .collect(java.util.stream.Collectors.toMap(SrmSupplierRespDTO::getId, s -> s));
-        // 鎵归噺鏌ヨ鐗╂枡
-        Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
+        // 鎵归噺鏌ヨ鐗╂枡锛圡DM 鐗╂枡锛�
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                 convertSet(list, MesQcIqcDO::getItemId));
         // 鎵归噺鏌ヨ璁¢噺鍗曚綅锛堥�氳繃鐗╂枡鐨� unitMeasureId锛�
-        Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
-                convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
+        Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(
+                convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData()
+                .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e));
         // 鎵归噺鏌ヨ妫�娴�/澶嶆牳/瀹℃牳浜哄憳
         Set<Long> qcUserIds = new HashSet<>();
         qcUserIds.addAll(convertSet(list, MesQcIqcDO::getInspectorUserId));
@@ -255,8 +256,8 @@
         // 鎵归噺鏌ヨ妫�娴嬩汉鍛�
         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
                 convertSet(list, MesQcIqcDO::getInspectorUserId));
-        // 鎵归噺鏌ヨ鐗╂枡
-        Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
+        // 鎵归噺鏌ヨ鐗╂枡锛圡DM 鐗╂枡锛�
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                 convertSet(list, MesQcIqcDO::getItemId));
         // 鎵归噺鏌ヨ琛屾槑缁�
         List<MesQcIqcLineDO> lines = iqcLineMapper.selectListByIqcIds(convertSet(list, MesQcIqcDO::getId));
@@ -273,7 +274,7 @@
         for (MesQcIqcDO iqc : list) {
             MesQcQualityExportVO vo = new MesQcQualityExportVO();
             vo.setDocName(iqc.getName());
-            MesMdItemDO item = itemMap.get(iqc.getItemId());
+            MdmItemRespDTO item = itemMap.get(iqc.getItemId());
             vo.setItemName(item != null ? item.getName() : "");
             vo.setBatchNo(iqc.getVendorBatch());
             vo.setInspectDate(MesQcQualityExportVO.formatDateTime(iqc.getInspectDate()));
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/MesQcOqcController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/MesQcOqcController.java
index 40d7285..9f2be05 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/MesQcOqcController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/oqc/MesQcOqcController.java
@@ -15,8 +15,10 @@
 import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcQualityExportVO;
 import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
 import cn.iocoder.yudao.module.crm.api.customer.dto.CrmCustomerRespDTO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
+import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi;
+import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
@@ -25,9 +27,6 @@
 import cn.iocoder.yudao.module.mes.dal.mysql.qc.oqc.MesQcOqcLineMapper;
 import cn.iocoder.yudao.module.mes.enums.DictTypeConstants;
 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
-import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
-import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
-import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
 import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
 import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
 import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService;
@@ -69,9 +68,9 @@
     @Resource
     private CrmCustomerApi customerApi;
     @Resource
-    private MesMdItemService itemService;
+    private MdmItemApi mdmItemApi;
     @Resource
-    private MesMdUnitMeasureService unitMeasureService;
+    private MdmUnitMeasureApi mdmUnitMeasureApi;
     @Resource
     private MesQcIndicatorResultService indicatorResultService;
     @Resource
@@ -153,12 +152,13 @@
         // 鎵归噺鏌ヨ瀹㈡埛
         Map<Long, CrmCustomerRespDTO> clientMap = customerApi.getCustomerMap(
                 convertSet(list, MesQcOqcDO::getClientId));
-        // 鎵归噺鏌ヨ鐗╂枡
-        Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
+        // 鎵归噺鏌ヨ鐗╂枡锛圡DM 鐗╂枡锛�
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                 convertSet(list, MesQcOqcDO::getItemId));
         // 鎵归噺鏌ヨ璁¢噺鍗曚綅
-        Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
-                convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
+        Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(
+                convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData()
+                .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e));
         // 鎵归噺鏌ヨ妫�娴�/澶嶆牳/瀹℃牳浜哄憳
         Set<Long> qcUserIds = new HashSet<>();
         qcUserIds.addAll(convertSet(list, MesQcOqcDO::getInspectorUserId));
@@ -196,8 +196,8 @@
         // 鎵归噺鏌ヨ妫�娴嬩汉鍛�
         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
                 convertSet(list, MesQcOqcDO::getInspectorUserId));
-        // 鎵归噺鏌ヨ鐗╂枡
-        Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
+        // 鎵归噺鏌ヨ鐗╂枡锛圡DM 鐗╂枡锛�
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                 convertSet(list, MesQcOqcDO::getItemId));
         // 鎵归噺鏌ヨ琛屾槑缁�
         List<MesQcOqcLineDO> lines = oqcLineMapper.selectListByOqcIds(convertSet(list, MesQcOqcDO::getId));
@@ -214,7 +214,7 @@
         for (MesQcOqcDO oqc : list) {
             MesQcQualityExportVO vo = new MesQcQualityExportVO();
             vo.setDocName(oqc.getName());
-            MesMdItemDO item = itemMap.get(oqc.getItemId());
+            MdmItemRespDTO item = itemMap.get(oqc.getItemId());
             vo.setItemName(item != null ? item.getName() : "");
             vo.setBatchNo(oqc.getBatchCode());
             vo.setInspectDate(MesQcQualityExportVO.formatDateTime(oqc.getInspectDate()));
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/MesQcRqcController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/MesQcRqcController.java
index cb1243b..0088488 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/MesQcRqcController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/rqc/MesQcRqcController.java
@@ -13,8 +13,10 @@
 import cn.iocoder.yudao.module.mes.controller.admin.qc.rqc.vo.MesQcRqcRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.rqc.vo.MesQcRqcSaveReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcQualityExportVO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
+import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi;
+import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicator.MesQcIndicatorDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.indicatorresult.MesQcIndicatorResultDetailDO;
@@ -23,8 +25,6 @@
 import cn.iocoder.yudao.module.mes.dal.mysql.qc.rqc.MesQcRqcLineMapper;
 import cn.iocoder.yudao.module.mes.enums.DictTypeConstants;
 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.unitmeasure.MesMdUnitMeasureService;
 import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService;
 import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
 import cn.iocoder.yudao.module.mes.service.qc.rqc.MesQcRqcService;
@@ -64,9 +64,9 @@
     @Resource
     private MesQcRqcService rqcService;
     @Resource
-    private MesMdItemService itemService;
+    private MdmItemApi mdmItemApi;
     @Resource
-    private MesMdUnitMeasureService unitMeasureService;
+    private MdmUnitMeasureApi mdmUnitMeasureApi;
     @Resource
     private MesQcIndicatorResultService indicatorResultService;
     @Resource
@@ -145,12 +145,13 @@
         if (CollUtil.isEmpty(list)) {
             return Collections.emptyList();
         }
-        // 鎵归噺鏌ヨ鐗╂枡
-        Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
+        // 鎵归噺鏌ヨ鐗╂枡锛圡DM 鐗╂枡锛�
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                 convertSet(list, MesQcRqcDO::getItemId));
         // 鎵归噺鏌ヨ璁¢噺鍗曚綅
-        Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(
-                convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId));
+        Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(
+                convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData()
+                .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e));
         // 鎵归噺鏌ヨ妫�娴�/澶嶆牳/瀹℃牳浜哄憳
         Set<Long> qcUserIds = new HashSet<>();
         qcUserIds.addAll(convertSet(list, MesQcRqcDO::getInspectorUserId));
@@ -242,8 +243,8 @@
         // 鎵归噺鏌ヨ妫�娴嬩汉鍛�
         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
                 convertSet(list, MesQcRqcDO::getInspectorUserId));
-        // 鎵归噺鏌ヨ鐗╂枡
-        Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(
+        // 鎵归噺鏌ヨ鐗╂枡锛圡DM 鐗╂枡锛�
+        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                 convertSet(list, MesQcRqcDO::getItemId));
         // 鎵归噺鏌ヨ琛屾槑缁�
         List<MesQcRqcLineDO> lines = rqcLineMapper.selectListByRqcIds(convertSet(list, MesQcRqcDO::getId));
@@ -260,7 +261,7 @@
         for (MesQcRqcDO rqc : list) {
             MesQcQualityExportVO vo = new MesQcQualityExportVO();
             vo.setDocName(rqc.getName());
-            MesMdItemDO item = itemMap.get(rqc.getItemId());
+            MdmItemRespDTO item = itemMap.get(rqc.getItemId());
             vo.setItemName(item != null ? item.getName() : "");
             vo.setBatchNo(rqc.getBatchCode());
             vo.setInspectDate(MesQcQualityExportVO.formatDateTime(rqc.getInspectDate()));
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilder.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilder.java
index 1fca7f8..431081f 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilder.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilder.java
@@ -18,7 +18,8 @@
  * 浜у搧妫�楠屽崟锛堢焊璐�"脳脳浜у搧璐ㄩ噺妫�楠屽崟"鐗堝紡锛塛ord 鏋勫缓鍣�
  *
  * 鐗堝紡锛氭爣棰橈紙鍏徃 + 浜у搧妫�楠屽崟锛夆啋 琛ㄥご淇℃伅 5 琛� 鈫� 妫�楠岄」鐩�/妫�楠岀粨鏋� 涓ゅ垪鐭╅樀 鈫�
- * 鍒ゅ畾缁撹锛堣嚜鍔ㄥ甫鍑烘楠岀粨鏋滐級/璐ㄦ涓撶敤绔狅紙鐣欑┖鐩栫珷锛夆啋 澶囨敞 鈫� 妫�楠�/澶嶆牳/鎵瑰噯绛惧瓧琛屻��
+ * 鍒ゅ畾缁撹锛堣嚜鍔ㄥ甫鍑烘楠岀粨鏋滐級/璐ㄦ涓撶敤绔狅紙鐣欑┖鐩栫珷锛夆啋 澶囨敞 鈫�
+ * 妫�楠�/澶嶆牳/鎵瑰噯绛惧瓧琛岋紙鍒嗗埆甯﹀嚭妫�娴嬩汉銆佸鏍镐汉銆佸鏍镐汉濮撳悕锛夈��
  * 涓嶅惈鎶�鏈寚鏍囧垪锛涘垎缁勯」涓嶅睍绀猴紝褰曞叆椤瑰钩閾猴紱骞宠娴嬮噺澶氬�奸】鍙峰悎骞躲��
  */
 public class MesQcProductReportWordBuilder {
@@ -53,7 +54,7 @@
             writeItemTable(doc, report);
             writeConclusionTable(doc, report);
             writeRemarkTable(doc, report);
-            writeSignLine(doc);
+            writeSignLine(doc, report);
             doc.write(out);
             return out.toByteArray();
         }
@@ -172,12 +173,23 @@
 
     // ========== 绛惧瓧琛� ==========
 
-    /** 绛惧瓧琛屽浐瀹氱暀绌猴紝涓庡垽瀹氱粨璁�/璐ㄦ涓撶敤绔犱竴鑷达紝鎵撳嵃鍚庢墜鍐� */
-    private static void writeSignLine(XWPFDocument doc) {
+    /**
+     * 绛惧瓧琛岋細妫�楠�/澶嶆牳/鎵瑰噯鍒嗗埆甯﹀嚭妫�娴嬩汉锛坕nspectorUserId锛夈�佸鏍镐汉锛坅uditUserId锛夈��
+     * 瀹℃牳浜猴紙approveUserId锛夊鍚嶏紱鏈寚瀹氫汉鍛樻椂璇ユ鐣欑┖锛屾墦鍗板悗鎵嬪啓
+     */
+    private static void writeSignLine(XWPFDocument doc, MesQcQcReportRespVO report) {
         XWPFParagraph paragraph = doc.createParagraph();
         paragraph.setAlignment(ParagraphAlignment.LEFT);
         paragraph.setSpacingBefore(400);
-        addRun(paragraph, "妫�楠岋細銆�銆�銆�銆�銆�銆�銆�銆�銆�澶嶆牳锛氥��銆�銆�銆�銆�銆�銆�銆�銆�鎵瑰噯锛氥��銆�銆�銆�銆�銆�銆�銆�", 12, true);
+        String text = "妫�楠岋細" + signName(report.getInspectorName())
+                + "銆�銆�銆�銆�澶嶆牳锛�" + signName(report.getAuditName())
+                + "銆�銆�銆�銆�鎵瑰噯锛�" + signName(report.getApproveName());
+        addRun(paragraph, text, 12, true);
+    }
+
+    /** 绛惧悕娈碉細鏈夊鍚嶅垯鎵撳嵃濮撳悕骞剁暀绛惧悕浣欓噺锛屾棤濮撳悕鍒欐暣娈电暀绌轰究浜庢墜鍐� */
+    private static String signName(String name) {
+        return notBlank(name) ? name + "銆�銆�銆�" : "銆�銆�銆�銆�銆�";
     }
 
     // ========== 琛ㄦ牸鍩虹 ==========
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/pendinginspect/MesQcPendingInspectServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/pendinginspect/MesQcPendingInspectServiceImpl.java
index 091e519..58a9a37 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/pendinginspect/MesQcPendingInspectServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/pendinginspect/MesQcPendingInspectServiceImpl.java
@@ -1,7 +1,12 @@
 package cn.iocoder.yudao.module.mes.service.qc.pendinginspect;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
+import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi;
+import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.pendinginspect.vo.MesQcPendingInspectPageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.pendinginspect.vo.MesQcPendingInspectRespVO;
 import cn.iocoder.yudao.module.mes.dal.mysql.qc.pendinginspect.MesQcPendingInspectMapper;
@@ -9,6 +14,13 @@
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
+import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
 
 /**
  * MES 寰呮浠诲姟 Service 瀹炵幇绫�
@@ -19,6 +31,10 @@
 
     @Resource
     private MesQcPendingInspectMapper pendingInspectMapper;
+    @Resource
+    private MdmItemApi mdmItemApi;
+    @Resource
+    private MdmUnitMeasureApi mdmUnitMeasureApi;
 
     @Override
     public PageResult<MesQcPendingInspectRespVO> getPendingInspectPage(MesQcPendingInspectPageReqVO pageReqVO) {
@@ -26,8 +42,22 @@
         IPage<MesQcPendingInspectRespVO> page = MyBatisUtils.buildPage(pageReqVO);
         pendingInspectMapper.selectQcPendingPage(page,
                 pageReqVO.getSourceDocCode(), pageReqVO.getQcType(), pageReqVO.getItemId());
+        List<MesQcPendingInspectRespVO> list = page.getRecords();
+        // 濉厖鐗╂枡淇℃伅锛堟潵婧愬崟鎹殑 item_id 涓� MDM 鐗╂枡 ID锛�
+        if (CollUtil.isNotEmpty(list)) {
+            Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
+                    convertSet(list, MesQcPendingInspectRespVO::getItemId));
+            Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(
+                    convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData()
+                    .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e));
+            list.forEach(vo -> findAndThen(itemMap, vo.getItemId(), item -> {
+                vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification());
+                findAndThen(unitMeasureMap, item.getUnitMeasureId(),
+                        unitMeasure -> vo.setUnitName(unitMeasure.getName()));
+            }));
+        }
         // 杩斿洖缁撴灉
-        return new PageResult<>(page.getRecords(), page.getTotal());
+        return new PageResult<>(list, page.getTotal());
     }
 
 }
diff --git a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java
index f41d159..90d18f7 100644
--- a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java
+++ b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java
@@ -62,13 +62,27 @@
             // 澶囨敞榛樿鏂囨
             assertTrue(tables.get(3).getRow(0).getCell(1).getText().contains("妫�楠岀粨鏋滀粎瀵规牱鍝佹湰韬垨鏈壒娆¤礋璐�"));
 
-            // 绛惧瓧琛岀暀绌猴紙鎵撳嵃鍚庢墜鍐欙級锛屼笉寰楀嚭鐜板鍚�
+            // 绛惧瓧琛屽甫鍑哄鍚嶏細妫�楠�=妫�娴嬩汉銆佸鏍�=澶嶆牳浜恒�佹壒鍑�=瀹℃牳浜�
             String signLine = doc.getParagraphs().stream()
                     .filter(p -> p.getText().contains("鎵瑰噯锛�"))
                     .findFirst().orElseThrow().getText();
-            assertTrue(signLine.contains("妫�楠岋細") && signLine.contains("澶嶆牳锛�"));
-            assertTrue(!signLine.contains("鏉庡崥") && !signLine.contains("鍛ㄤ簹娲�") && !signLine.contains("鍖呯繝钀�"),
-                    "绛惧瓧琛屽簲鐣欑┖锛屼笉杈撳嚭妫�楠�/澶嶆牳/鎵瑰噯濮撳悕");
+            assertTrue(signLine.contains("妫�楠岋細鏉庡崥"), "妫�楠屽簲甯﹀嚭妫�娴嬩汉濮撳悕锛�" + signLine);
+            assertTrue(signLine.contains("澶嶆牳锛氬懆浜氭磥"), "澶嶆牳搴斿甫鍑哄鏍镐汉濮撳悕锛�" + signLine);
+            assertTrue(signLine.contains("鎵瑰噯锛氬寘缈犺悕"), "鎵瑰噯搴斿甫鍑哄鏍镐汉濮撳悕锛�" + signLine);
+        }
+    }
+
+    @Test
+    public void testBuildWithoutSigners() throws IOException {
+        MesQcQcReportRespVO report = randomReport();
+        report.setInspectorName(null).setAuditName("").setApproveName(null);
+        byte[] docx = MesQcProductReportWordBuilder.build(report);
+        try (InputStream in = new ByteArrayInputStream(docx); XWPFDocument doc = new XWPFDocument(in)) {
+            String signLine = doc.getParagraphs().stream()
+                    .filter(p -> p.getText().contains("鎵瑰噯锛�"))
+                    .findFirst().orElseThrow().getText();
+            assertTrue(signLine.contains("妫�楠岋細") && signLine.contains("澶嶆牳锛�") && signLine.contains("鎵瑰噯锛�"),
+                    "鏈寚瀹氫汉鍛樻椂浠嶄繚鐣欎笁涓爮浣嶄緵鎵嬪啓锛�" + signLine);
         }
     }
 

--
Gitblit v1.9.3