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