From 7591ba21194595cc8d9a1293dfdbfa945bc9948f Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 17 八月 2026 16:36:54 +0800
Subject: [PATCH] Merge branch 'dev_business' of http://114.132.189.42:9002/r/mom-pro2-after into dev_business
---
docs/clean_business_data.sql | 330 ++++++++++++++++++++++++++++++++++++
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java | 46 ++++
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java | 20 +
docs/mdm_item_sync_switch.md | 62 ++++++
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemSyncUpdateReqVO.java | 19 ++
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/item/MesMdItemMapper.java | 15 +
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemService.java | 8
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java | 6
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java | 9 +
9 files changed, 507 insertions(+), 8 deletions(-)
diff --git a/docs/clean_business_data.sql b/docs/clean_business_data.sql
new file mode 100644
index 0000000..3f41649
--- /dev/null
+++ b/docs/clean_business_data.sql
@@ -0,0 +1,330 @@
+-- =============================================
+-- 涓氬姟鏁版嵁娓呯悊瀛樺偍杩囩▼
+-- 璇存槑锛�
+-- 1. 浠呮竻鐞嗐�愪笟鍔″崟鎹�/杩愯鏁版嵁銆戯紝淇濈暀銆愬熀纭�鏁版嵁/閰嶇疆/涓绘暟鎹��
+-- 2. 淇濈暀鑼冨洿锛欱PM 閰嶇疆銆丅I 澶у睆銆丟oView 澶у睆銆佸瓧鍏�/鑿滃崟/瑙掕壊/鐢ㄦ埛銆�
+-- 鐗╂枡/鍒嗙被/鍗曚綅/浠撳簱/搴撲綅/杞﹂棿/宸ヤ綔绔�/璁惧/宸ュ叿/宸ュ簭/宸ヨ壓/璐ㄦ鏂规/缂洪櫡/鎸囨爣銆�
+-- 缂栫爜瑙勫垯銆佹潯鐮侀厤缃�佸畨鐏厤缃�佺彮缁勬帓鐝�丅OM/SOP/SIP銆�
+-- CRM 瀹㈡埛/鑱旂郴浜�/鍟嗘満鐘舵��/鍚堝悓閰嶇疆/瀹㈡埛闄愬埗/鍏捣閰嶇疆銆�
+-- ERP 渚涘簲鍟�/缁撶畻璐︽埛銆丼RM 渚涘簲鍟嗕富琛�/鍒嗙被/鎷涙姇鏍囬厤缃��
+-- HRM 鍛樺伐妗f鍙婅�冨嫟/钖祫/绀句繚/绋庣巼閰嶇疆銆丄I 妯″瀷/宸ュ叿/瑙掕壊/鐭ヨ瘑搴�/宸ヤ綔娴併��
+-- IM 鏁忔劅璇�/琛ㄦ儏鍖呫�侀�氱煡鍏憡鍐呭銆佺郴缁熸潈闄愮敤鎴蜂綋绯荤瓑
+-- 3. 鑻ュ瓨鍌ㄨ繃绋嬪凡瀛樺湪锛岃鍏堟墽琛� DROP PROCEDURE sp_clean_business_data; 鍐嶆墽琛屾湰鑴氭湰
+-- =============================================
+
+CREATE DEFINER=`root`@`%` PROCEDURE `sp_clean_business_data`()
+BEGIN
+ SET FOREIGN_KEY_CHECKS = 0;
+
+ -- ============================================================
+ -- 1. 绯荤粺杩愯鏁版嵁锛堟棩蹇� / Token / 楠岃瘉鐮� / 绔欏唴淇� / 绀句氦缁戝畾锛�
+ -- ============================================================
+ TRUNCATE TABLE system_login_log;
+ TRUNCATE TABLE system_operate_log;
+ TRUNCATE TABLE system_notify_message;
+ TRUNCATE TABLE system_oauth2_access_token;
+ TRUNCATE TABLE system_oauth2_refresh_token;
+ TRUNCATE TABLE system_oauth2_code;
+ TRUNCATE TABLE system_oauth2_approve;
+ TRUNCATE TABLE system_sms_code;
+ TRUNCATE TABLE system_sms_log;
+ TRUNCATE TABLE system_mail_log;
+ TRUNCATE TABLE system_social_user;
+ TRUNCATE TABLE system_social_user_bind;
+ TRUNCATE TABLE infra_api_access_log;
+ TRUNCATE TABLE infra_api_error_log;
+ TRUNCATE TABLE infra_job_log;
+
+ -- ============================================================
+ -- 2. 鏂囦欢涓庨檮浠�
+ -- ============================================================
+ TRUNCATE TABLE system_storage_attachment;
+ TRUNCATE TABLE system_storage_blob;
+ TRUNCATE TABLE storage_attachment;
+ TRUNCATE TABLE storage_blob;
+ TRUNCATE TABLE infra_file;
+ TRUNCATE TABLE infra_file_content;
+
+ -- ============================================================
+ -- 3. BPM 娴佺▼瀹炰緥涓庡鎵瑰巻鍙�
+ -- 淇濈暀锛氭祦绋嬪畾涔�/琛ㄥ崟/鍒嗙被/琛ㄨ揪寮�/鐩戝惉鍣�/鐢ㄦ埛缁�/涓氬姟闄勪欢閰嶇疆
+ -- ============================================================
+ TRUNCATE TABLE bpm_oa_leave;
+ TRUNCATE TABLE bpm_process_instance_copy;
+ TRUNCATE TABLE act_hi_procinst;
+ TRUNCATE TABLE act_hi_taskinst;
+ TRUNCATE TABLE act_hi_actinst;
+ TRUNCATE TABLE act_hi_varinst;
+ TRUNCATE TABLE act_hi_identitylink;
+ TRUNCATE TABLE act_hi_comment;
+ TRUNCATE TABLE act_hi_detail;
+ TRUNCATE TABLE act_hi_attachment;
+ TRUNCATE TABLE act_hi_entitylink;
+ TRUNCATE TABLE act_hi_tsk_log;
+ TRUNCATE TABLE act_ru_task;
+ TRUNCATE TABLE act_ru_execution;
+ TRUNCATE TABLE act_ru_actinst;
+ TRUNCATE TABLE act_ru_variable;
+ TRUNCATE TABLE act_ru_identitylink;
+ TRUNCATE TABLE act_ru_job;
+ TRUNCATE TABLE act_ru_timer_job;
+ TRUNCATE TABLE act_ru_deadletter_job;
+ TRUNCATE TABLE act_ru_suspended_job;
+ TRUNCATE TABLE act_ru_external_job;
+ TRUNCATE TABLE act_ru_history_job;
+ TRUNCATE TABLE act_ru_event_subscr;
+ TRUNCATE TABLE act_ru_entitylink;
+ TRUNCATE TABLE act_evt_log;
+
+ -- ============================================================
+ -- 4. MES 鐢熶骇妯″潡 鈥� 涓氬姟鍗曟嵁
+ -- ============================================================
+ TRUNCATE TABLE mes_pro_work_order_param_record_detail;
+ TRUNCATE TABLE mes_pro_work_order_param_record;
+ TRUNCATE TABLE mes_pro_work_order_process;
+ TRUNCATE TABLE mes_pro_work_order_bom;
+ TRUNCATE TABLE mes_pro_work_order;
+ TRUNCATE TABLE mes_pro_task_issue;
+ TRUNCATE TABLE mes_pro_task;
+ TRUNCATE TABLE mes_pro_feedback;
+ TRUNCATE TABLE mes_pro_mps_merge_item;
+ TRUNCATE TABLE mes_pro_mps;
+ TRUNCATE TABLE mes_pro_card_process;
+ TRUNCATE TABLE mes_pro_card;
+ TRUNCATE TABLE mes_pro_work_record_log;
+ TRUNCATE TABLE mes_pro_work_record;
+ TRUNCATE TABLE mes_pro_andon_record;
+
+ -- ============================================================
+ -- 5. MES 浠撳簱妯″潡 鈥� 涓氬姟鍗曟嵁
+ -- ============================================================
+ TRUNCATE TABLE mes_wm_transaction;
+ TRUNCATE TABLE mes_wm_stock_reserve;
+ TRUNCATE TABLE mes_wm_material_stock;
+ TRUNCATE TABLE mes_wm_sn;
+ TRUNCATE TABLE mes_wm_batch;
+ TRUNCATE TABLE mes_wm_barcode;
+ TRUNCATE TABLE mes_wm_stock_taking_task_result;
+ TRUNCATE TABLE mes_wm_stock_taking_task_line;
+ TRUNCATE TABLE mes_wm_stock_taking_task;
+ TRUNCATE TABLE mes_wm_stock_taking_plan_param;
+ TRUNCATE TABLE mes_wm_stock_taking_plan;
+ TRUNCATE TABLE mes_wm_package_line;
+ TRUNCATE TABLE mes_wm_package;
+ TRUNCATE TABLE mes_wm_item_receipt_detail;
+ TRUNCATE TABLE mes_wm_item_receipt_line;
+ TRUNCATE TABLE mes_wm_item_receipt;
+ TRUNCATE TABLE mes_wm_item_consume_detail;
+ TRUNCATE TABLE mes_wm_item_consume_line;
+ TRUNCATE TABLE mes_wm_item_consume;
+ TRUNCATE TABLE mes_wm_product_produce_detail;
+ TRUNCATE TABLE mes_wm_product_produce_line;
+ TRUNCATE TABLE mes_wm_product_produce;
+ TRUNCATE TABLE mes_wm_product_issue_detail;
+ TRUNCATE TABLE mes_wm_product_issue_line;
+ TRUNCATE TABLE mes_wm_product_issue;
+ TRUNCATE TABLE mes_wm_product_receipt_detail;
+ TRUNCATE TABLE mes_wm_product_receipt_line;
+ TRUNCATE TABLE mes_wm_product_receipt;
+ TRUNCATE TABLE mes_wm_product_sales_detail;
+ TRUNCATE TABLE mes_wm_product_sales_line;
+ TRUNCATE TABLE mes_wm_product_sales;
+ TRUNCATE TABLE mes_wm_misc_receipt_detail;
+ TRUNCATE TABLE mes_wm_misc_receipt_line;
+ TRUNCATE TABLE mes_wm_misc_receipt;
+ TRUNCATE TABLE mes_wm_misc_issue_detail;
+ TRUNCATE TABLE mes_wm_misc_issue_line;
+ TRUNCATE TABLE mes_wm_misc_issue;
+ TRUNCATE TABLE mes_wm_outsource_receipt_detail;
+ TRUNCATE TABLE mes_wm_outsource_receipt_line;
+ TRUNCATE TABLE mes_wm_outsource_receipt;
+ TRUNCATE TABLE mes_wm_outsource_issue_detail;
+ TRUNCATE TABLE mes_wm_outsource_issue_line;
+ TRUNCATE TABLE mes_wm_outsource_issue;
+ TRUNCATE TABLE mes_wm_return_vendor_detail;
+ TRUNCATE TABLE mes_wm_return_vendor_line;
+ TRUNCATE TABLE mes_wm_return_vendor;
+ TRUNCATE TABLE mes_wm_return_issue_detail;
+ TRUNCATE TABLE mes_wm_return_issue_line;
+ TRUNCATE TABLE mes_wm_return_issue;
+ TRUNCATE TABLE mes_wm_return_sales_detail;
+ TRUNCATE TABLE mes_wm_return_sales_line;
+ TRUNCATE TABLE mes_wm_return_sales;
+ TRUNCATE TABLE mes_wm_sales_notice_line;
+ TRUNCATE TABLE mes_wm_sales_notice;
+ TRUNCATE TABLE mes_wm_transfer_detail;
+ TRUNCATE TABLE mes_wm_transfer_line;
+ TRUNCATE TABLE mes_wm_transfer;
+ TRUNCATE TABLE mes_wm_arrival_notice_line;
+ TRUNCATE TABLE mes_wm_arrival_notice;
+
+ -- ============================================================
+ -- 6. MES 璐ㄦ妯″潡 鈥� 涓氬姟鍗曟嵁
+ -- ============================================================
+ TRUNCATE TABLE mes_qc_indicator_result_detail;
+ TRUNCATE TABLE mes_qc_indicator_result;
+ TRUNCATE TABLE mes_qc_defect_record;
+ TRUNCATE TABLE mes_qc_ncr;
+ TRUNCATE TABLE mes_qc_iqc_line;
+ TRUNCATE TABLE mes_qc_iqc;
+ TRUNCATE TABLE mes_qc_ipqc_line;
+ TRUNCATE TABLE mes_qc_ipqc;
+ TRUNCATE TABLE mes_qc_oqc_line;
+ TRUNCATE TABLE mes_qc_oqc;
+ TRUNCATE TABLE mes_qc_rqc_line;
+ TRUNCATE TABLE mes_qc_rqc;
+
+ -- ============================================================
+ -- 7. MES 璁惧妯″潡 鈥� 鐐规/淇濆吇/缁翠慨/璁¢噺妫�娴嬭褰�
+ -- ============================================================
+ TRUNCATE TABLE mes_dv_check_record_line;
+ TRUNCATE TABLE mes_dv_check_record;
+ TRUNCATE TABLE mes_dv_mainten_record_line;
+ TRUNCATE TABLE mes_dv_mainten_record;
+ TRUNCATE TABLE mes_dv_repair_line;
+ TRUNCATE TABLE mes_dv_repair;
+ TRUNCATE TABLE mes_dv_metering_check;
+
+ -- ============================================================
+ -- 8. MES 宸ヨ壓/璁捐妯″潡 鈥� 涓氬姟鍗曟嵁锛堢紪鐮佺敓鎴愯褰曚负娴佹按鏁版嵁锛�
+ -- ============================================================
+ TRUNCATE TABLE mes_pd_archive;
+ TRUNCATE TABLE mes_pd_document_audit;
+ TRUNCATE TABLE mes_pd_document;
+ TRUNCATE TABLE mes_pd_project;
+ TRUNCATE TABLE mes_md_auto_code_record;
+
+ -- ============================================================
+ -- 9. CRM 妯″潡 鈥� 涓氬姟鍗曟嵁
+ -- 淇濈暀锛歝rm_customer / crm_contact / crm_business_status(_type)
+ -- / crm_contract_config / crm_customer_limit_config / crm_customer_pool_config
+ -- ============================================================
+ TRUNCATE TABLE crm_receivable_plan;
+ TRUNCATE TABLE crm_receivable;
+ TRUNCATE TABLE crm_contract_product;
+ TRUNCATE TABLE crm_contract;
+ TRUNCATE TABLE crm_sale_quotation_product;
+ TRUNCATE TABLE crm_sale_quotation;
+ TRUNCATE TABLE crm_business_product;
+ TRUNCATE TABLE crm_contact_business;
+ TRUNCATE TABLE crm_business;
+ TRUNCATE TABLE crm_clue;
+ TRUNCATE TABLE crm_follow_up_record;
+ TRUNCATE TABLE crm_invoice;
+ TRUNCATE TABLE crm_sales_target;
+ TRUNCATE TABLE crm_permission;
+
+ -- ============================================================
+ -- 10. 鍞悗妯″潡 鈥� 涓氬姟鍗曟嵁
+ -- ============================================================
+ TRUNCATE TABLE after_sale_return_item;
+ TRUNCATE TABLE after_sale_return;
+ TRUNCATE TABLE after_sale_ticket_item;
+ TRUNCATE TABLE after_sale_ticket;
+ TRUNCATE TABLE after_sale_repair;
+ TRUNCATE TABLE after_sale_permission;
+
+ -- ============================================================
+ -- 11. ERP 妯″潡 鈥� 涓氬姟鍗曟嵁
+ -- 淇濈暀锛歟rp_supplier / erp_account
+ -- ============================================================
+ TRUNCATE TABLE erp_finance_payment_item;
+ TRUNCATE TABLE erp_finance_payment;
+ TRUNCATE TABLE erp_finance_receipt_item;
+ TRUNCATE TABLE erp_finance_receipt;
+ TRUNCATE TABLE erp_purchase_order_items;
+ TRUNCATE TABLE erp_purchase_order;
+ TRUNCATE TABLE erp_purchase_request_items;
+ TRUNCATE TABLE erp_purchase_request;
+ TRUNCATE TABLE erp_sale_order_items;
+ TRUNCATE TABLE erp_sale_order;
+ TRUNCATE TABLE erp_purchase_invoice;
+
+ -- ============================================================
+ -- 12. SRM 妯″潡 鈥� 涓氬姟鍗曟嵁
+ -- 淇濈暀锛歴rm_supplier / srm_supplier_contact / srm_supplier_category
+ -- / srm_tender_config
+ -- ============================================================
+ TRUNCATE TABLE srm_bid_award;
+ TRUNCATE TABLE srm_bid_evaluation;
+ TRUNCATE TABLE srm_bid_open;
+ TRUNCATE TABLE srm_tender_bid;
+ TRUNCATE TABLE srm_tender_material;
+ TRUNCATE TABLE srm_tender_project;
+ TRUNCATE TABLE srm_delivery_plan;
+ TRUNCATE TABLE srm_purchase_collaboration;
+ TRUNCATE TABLE srm_supplier_quote;
+ TRUNCATE TABLE srm_supplier_evaluation;
+ TRUNCATE TABLE srm_supplier_certificate;
+ TRUNCATE TABLE srm_supplier_apply;
+
+ -- ============================================================
+ -- 13. HRM 妯″潡 鈥� 涓氬姟鍗曟嵁
+ -- 淇濈暀锛歨rm_employee 鍙婃。妗堝瓙琛紙鏁欒偛/宸ヤ綔缁忓巻/绱ф�ヨ仈绯讳汉/
+ -- 绀句繚鍏Н閲�/钖叕妗f/鍚堝悓锛夈�佽�冨嫟鑺傚亣鏃�/瑙勫垯銆佽鍋囩被鍨嬮厤缃��
+ -- 钖叕缁撴瀯銆佺ぞ淇濆叕绉噾鏂规銆佷釜绋庣◣鐜囬厤缃�
+ -- ============================================================
+ TRUNCATE TABLE hrm_salary_payment_detail;
+ TRUNCATE TABLE hrm_salary_payment;
+ TRUNCATE TABLE hrm_salary_calculation;
+ TRUNCATE TABLE hrm_attendance_summary;
+ TRUNCATE TABLE hrm_attendance_record;
+ TRUNCATE TABLE hrm_attendance_exception;
+ TRUNCATE TABLE hrm_leave_application;
+ TRUNCATE TABLE hrm_resignation_application;
+ TRUNCATE TABLE hrm_transfer_application;
+
+ -- ============================================================
+ -- 14. AI 妯″潡 鈥� 瀵硅瘽涓庣敓鎴愬唴瀹�
+ -- 淇濈暀锛歛i_api_key / ai_model / ai_tool / ai_chat_role
+ -- / ai_knowledge(_document/_segment) / ai_workflow
+ -- ============================================================
+ TRUNCATE TABLE ai_chat_message;
+ TRUNCATE TABLE ai_chat_conversation;
+ TRUNCATE TABLE ai_image;
+ TRUNCATE TABLE ai_mind_map;
+ TRUNCATE TABLE ai_music;
+ TRUNCATE TABLE ai_write;
+
+ -- ============================================================
+ -- 15. IM 妯″潡 鈥� 浼氳瘽涓庢秷鎭�
+ -- 淇濈暀锛歩m_sensitive_word / im_face_pack / im_face_pack_item
+ -- ============================================================
+ TRUNCATE TABLE im_group_message_receipt;
+ TRUNCATE TABLE im_group_message;
+ TRUNCATE TABLE im_private_message;
+ TRUNCATE TABLE im_message_file;
+ TRUNCATE TABLE im_group_request;
+ TRUNCATE TABLE im_group_member;
+ TRUNCATE TABLE im_group;
+ TRUNCATE TABLE im_friend_request;
+ TRUNCATE TABLE im_friend;
+ TRUNCATE TABLE im_conversation_read;
+ TRUNCATE TABLE im_conversation;
+ TRUNCATE TABLE im_channel_message;
+ TRUNCATE TABLE im_channel_material;
+ TRUNCATE TABLE im_channel;
+ TRUNCATE TABLE im_rtc_participant;
+ TRUNCATE TABLE im_rtc_call;
+ TRUNCATE TABLE im_user_online;
+ TRUNCATE TABLE im_face_user_item;
+
+ -- ============================================================
+ -- 16. OA 宸茶/鎸囧畾浜哄叧鑱旓紙淇濈暀閫氱煡鍏憡鍐呭 oa_notice / system_notice锛�
+ -- ============================================================
+ TRUNCATE TABLE oa_notice_read;
+ TRUNCATE TABLE oa_notice_user;
+
+ -- ============================================================
+ -- 17. 绀轰緥鏁版嵁
+ -- ============================================================
+ TRUNCATE TABLE yudao_demo01_contact;
+ TRUNCATE TABLE yudao_demo02_category;
+ TRUNCATE TABLE yudao_demo03_course;
+ TRUNCATE TABLE yudao_demo03_grade;
+ TRUNCATE TABLE yudao_demo03_student;
+
+ SET FOREIGN_KEY_CHECKS = 1;
+
+ SELECT '涓氬姟鏁版嵁娓呯悊瀹屾垚' AS result;
+END
diff --git a/docs/mdm_item_sync_switch.md b/docs/mdm_item_sync_switch.md
new file mode 100644
index 0000000..cf33791
--- /dev/null
+++ b/docs/mdm_item_sync_switch.md
@@ -0,0 +1,62 @@
+# MDM 鐗╂枡鍚屾鐘舵�佸紑鍏� - 鍓嶇鑱旇皟鏂规
+
+## 娑夊強椤甸潰
+
+- 鍩虹鏁版嵁 鈫� 鐗╂枡绠$悊锛坄basicData/mdm`锛孧DM 鐗╂枡涓绘暟鎹垪琛ㄩ〉锛�
+- 鐗╂枡鏂板 / 缂栬緫寮圭獥锛坄basicData/mdm/modules/form.vue`锛�
+
+## 鑳屾櫙
+
+鐗╂枡绠$悊鍒楄〃椤靛師鏈夌殑"鍚屾鐘舵��"鍒椾负鍙鏍囩锛堝凡鍚屾/鏈悓姝ワ級锛屾湰娆℃敼涓�**鍙搷浣滅殑寮�鍏筹紙Switch锛�**锛岀敤鎴峰彲鐩存帴鍦ㄥ垪琛ㄤ腑鍒囨崲鐗╂枡鏄惁鍚屾鍒� MES銆傚悓鏃�**鏂板/缂栬緫鐗╂枡寮圭獥**涓篃澧炲姞"鍚屾鍒癕ES"寮�鍏筹紝鍒涘缓鎴栦繚瀛樼墿鏂欐椂鎸夊紑鍏冲喅瀹氭槸鍚﹀悓姝ュ埌 MES銆�
+
+## API
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| POST | /mdm/item/create | 鍒涘缓鐗╂枡锛宍syncMes` 涓� true 鏃跺悓姝ュ埌 MES |
+| PUT | /mdm/item/update | 缂栬緫鐗╂枡锛宍syncMes` 涓� true 鏃跺悓姝ュ埌 MES锛屼负 false 鏃跺彇娑堝悓姝ワ紙浠� MES 鍒犻櫎锛� |
+| PUT | /mdm/item/update-sync | 鏇存柊鐗╂枡鍚屾鐘舵�侊紙鍒楄〃椤靛紑鍏宠皟鐢級 |
+
+**update-sync 璇锋眰鍙傛暟锛�**
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| id | Long | 鏄� | 鐗╂枡缂栧彿 |
+| sync | Boolean | 鏄� | true=鍚屾鍒� MES锛沠alse=鍙栨秷鍚屾锛堜粠 MES 鍒犻櫎璇ョ墿鏂欙級 |
+
+**create / update 鏂板璇锋眰鍙傛暟锛�**
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| syncMes | Boolean | 鍚� | 鏄惁鍚屾鍒� MES锛岄粯璁� true锛沠alse=涓嶅悓姝� / 鍙栨秷鍚屾 |
+
+**鍝嶅簲锛�** `{ "code": 0, "data": true, "msg": "" }`
+
+**鍝嶅簲瀛楁璇存槑锛�**
+
+| 瀛楁 | 绫诲瀷 | 璇存槑 |
+|------|------|------|
+| syncedMes | Boolean | 鍒嗛〉鎺ュ彛 `GET /mdm/item/page`銆佽鎯呮帴鍙� `GET /mdm/item/get` 宸茶繑鍥烇紝琛ㄧず褰撳墠鏄惁宸插悓姝ワ紙MES 琛ㄥ瓨鍦ㄨ鐗╂枡璁板綍鍗� true锛� |
+
+## 瀛楁灞曠ず瑙勫垯
+
+| 瀛楁 | 灞曠ず浣嶇疆 | 璇存槑 |
+|------|----------|------|
+| 鍚屾鐘舵�� | 鍒楄〃椤靛浐瀹氬彸鍒� | Switch 寮�鍏筹細鎵撳紑=宸插悓姝ワ紝鍏抽棴=鏈悓姝ワ紱鍒囨崲涓樉绀� loading |
+| 鍚屾鍒癕ES | 鏂板 / 缂栬緫寮圭獥 | Switch 寮�鍏筹細鎵撳紑鍒欎繚瀛樻椂鍚屾鍒� MES锛涚紪杈戞椂榛樿鍥炴樉褰撳墠鍚屾鐘舵�� |
+
+## 涓氬姟瑙勫垯璇存槑
+
+| 鍦烘櫙 | 瑙勫垯 |
+|------|------|
+| 鎵撳紑寮�鍏筹紙鍒楄〃锛� | 灏� MDM 鐗╂枡鏁版嵁锛堝惈鎵规閰嶇疆锛夐噸鏂板悓姝ュ埌 MES锛宍syncedMes` 鍙樹负 true |
+| 鍏抽棴寮�鍏筹紙鍒楄〃锛� | 浠� MES 鍒犻櫎璇ョ墿鏂欙紝绾ц仈鍒犻櫎鍏� BOM / SOP / SIP / 鎵规閰嶇疆锛宍syncedMes` 鍙樹负 false |
+| 鏂板鐗╂枡 | 琛ㄥ崟"鍚屾鍒癕ES"寮�鍏抽粯璁ゆ墦寮�锛涘叧闂垯鍙缓 MDM 鐗╂枡锛屼笉鍚屾鍒� MES |
+| 缂栬緫鐗╂枡 | 寮�鍏抽粯璁ゅ洖鏄惧綋鍓嶅悓姝ョ姸鎬侊紱鎵撳紑淇濆瓨=鍚屾锛堟洿鏂� MES锛夛紝鍏抽棴淇濆瓨=鍙栨秷鍚屾锛堜粠 MES 鍒犻櫎锛� |
+| 鎿嶄綔鏉冮檺 | 鍒楄〃寮�鍏充緷璧栨潈闄愮偣 `mdm:item:update` |
+
+## 娉ㄦ剰浜嬮」
+
+- 鍒楄〃鍏抽棴寮�鍏冲墠闇�寮圭‘璁ゆ彁绀猴紝鏄庣‘鍛婄煡浼氫粠 MES 鍒犻櫎鐗╂枡鍙婂叧鑱旈厤缃紙BOM/SOP/SIP/鎵规閰嶇疆锛夛紝閬垮厤璇搷浣溿��
+- 鑻� MES 璇ョ墿鏂欏凡琚伐鍗曘�丅OM 绛変笟鍔″紩鐢紝鍒犻櫎鍚庣浉鍏充笟鍔℃暟鎹彲鑳藉彈褰卞搷锛屽睘涓氬姟渚ф棦鏈夎涓恒��
+- 缂栬緫鐗╂枡鏃跺叧闂�"鍚屾鍒癕ES"寮�鍏冲苟淇濆瓨锛屼細浠� MES 鍒犻櫎璇ョ墿鏂欙紙鍙栨秷鍚屾锛夛紝鍒楄〃寮�鍏冲彉涓�"鏈悓姝�"銆�
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java
index fda9a92..af0912e 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java
@@ -90,10 +90,24 @@
@DeleteMapping("/delete")
@Operation(summary = "鍒犻櫎閿�鍞姤浠峰崟")
- @Parameter(name = "ids", description = "缂栧彿鏁扮粍", required = true)
+ @Parameter(name = "id", description = "鍗曚釜缂栧彿", required = false)
+ @Parameter(name = "ids", description = "缂栧彿鏁扮粍", required = false)
@PreAuthorize("@ss.hasPermission('crm:sale-quotation:delete')")
- public CommonResult<Boolean> deleteSaleQuotation(@RequestParam("ids") List<Long> ids) {
- saleQuotationService.deleteSaleQuotation(ids);
+ public CommonResult<Boolean> deleteSaleQuotation(
+ @RequestParam(value = "id", required = false) Long id,
+ @RequestParam(value = "ids", required = false) List<Long> ids) {
+ // 鏀寔鍗曚釜id鎴栧涓猧ds
+ List<Long> deleteIds = new java.util.ArrayList<>();
+ if (id != null) {
+ deleteIds.add(id);
+ }
+ if (ids != null && !ids.isEmpty()) {
+ deleteIds.addAll(ids);
+ }
+ if (deleteIds.isEmpty()) {
+ throw new IllegalArgumentException("璇锋眰鍙傛暟缂哄け:id 鎴� ids");
+ }
+ saleQuotationService.deleteSaleQuotation(deleteIds);
return success(true);
}
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java
index d48f4e4..664126c 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java
@@ -7,6 +7,7 @@
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemRespVO;
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemSaveReqVO;
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemStatusUpdateReqVO;
+import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemSyncUpdateReqVO;
import cn.iocoder.yudao.module.mdm.dal.dataobject.category.MdmItemCategoryDO;
import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemBatchConfigDO;
import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO;
@@ -80,6 +81,14 @@
return success(true);
}
+ @PutMapping("/update-sync")
+ @Operation(summary = "鏇存柊鐗╂枡鍚屾鐘舵��")
+ @PreAuthorize("@ss.hasPermission('mdm:item:update')")
+ public CommonResult<Boolean> updateItemSync(@Valid @RequestBody MdmItemSyncUpdateReqVO reqVO) {
+ itemService.updateItemSync(reqVO.getId(), reqVO.getSync());
+ return success(true);
+ }
+
@DeleteMapping("/delete")
@Operation(summary = "鍒犻櫎鐗╂枡")
@Parameter(name = "id", description = "缂栧彿", required = true, example = "1")
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemSyncUpdateReqVO.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemSyncUpdateReqVO.java
new file mode 100644
index 0000000..5f6cb7d
--- /dev/null
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemSyncUpdateReqVO.java
@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.mdm.controller.admin.item.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Schema(description = "绠$悊鍚庡彴 - MDM 鐗╂枡鍚屾鐘舵�佹洿鏂� Request VO")
+@Data
+public class MdmItemSyncUpdateReqVO {
+
+ @Schema(description = "鐗╂枡缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "鐗╂枡缂栧彿涓嶈兘涓虹┖")
+ private Long id;
+
+ @Schema(description = "鏄惁鍚屾鍒� MES", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
+ @NotNull(message = "鍚屾鐘舵�佷笉鑳戒负绌�")
+ private Boolean sync;
+
+}
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemService.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemService.java
index c1d09de..3ade231 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemService.java
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemService.java
@@ -50,6 +50,14 @@
void deleteItem(Long id);
/**
+ * 鏇存柊鐗╂枡鍚屾鐘舵�侊紙鍚屾/鍙栨秷鍚屾鍒� MES锛�
+ *
+ * @param id 鐗╂枡缂栧彿
+ * @param sync true=鍚屾鍒� MES锛宖alse=鍙栨秷鍚屾锛堜粠 MES 鍒犻櫎锛�
+ */
+ void updateItemSync(Long id, Boolean sync);
+
+ /**
* 鎵归噺鍒犻櫎鐗╂枡
*
* @param ids 缂栧彿鍒楄〃
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
index 7154a10..138b8e0 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
@@ -9,6 +9,7 @@
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemPageReqVO;
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemSaveReqVO;
import cn.iocoder.yudao.module.mdm.dal.dataobject.category.MdmItemCategoryDO;
+import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemBatchConfigDO;
import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO;
import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO;
import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemBatchConfigMapper;
@@ -77,9 +78,11 @@
// 淇濆瓨鎵规閰嶇疆锛堝鏋滄湁锛�
saveBatchConfig(item.getId(), createReqVO);
- // 濮嬬粓鍚屾鍒� MES
- createReqVO.setId(item.getId());
- syncItemToMes(createReqVO);
+ // 鍕鹃�夊悓姝ユ椂锛屽悓姝ュ埌 MES
+ if (Boolean.TRUE.equals(createReqVO.getSyncMes())) {
+ createReqVO.setId(item.getId());
+ syncItemToMes(createReqVO);
+ }
return item.getId();
}
@@ -98,8 +101,12 @@
// 淇濆瓨鎵规閰嶇疆锛堝鏋滄湁锛�
saveBatchConfig(updateReqVO.getId(), updateReqVO);
- // 濮嬬粓鍚屾鍒� MES
- syncItemToMes(updateReqVO);
+ // 鏍规嵁鍚屾寮�鍏冲喅瀹氾細鎵撳紑鍒欏悓姝ュ埌 MES锛屽叧闂垯鍙栨秷鍚屾锛堜粠 MES 鍒犻櫎锛�
+ if (Boolean.TRUE.equals(updateReqVO.getSyncMes())) {
+ syncItemToMes(updateReqVO);
+ } else {
+ mesMdItemApi.deleteItem(updateReqVO.getId());
+ }
}
private void validateItemSaveData(MdmItemSaveReqVO reqVO) {
@@ -185,6 +192,35 @@
mesMdItemApi.deleteItem(id);
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void updateItemSync(Long id, Boolean sync) {
+ // 鏍¢獙瀛樺湪
+ MdmItemDO item = validateItemExists(id);
+ if (Boolean.TRUE.equals(sync)) {
+ // 鍚屾鍒� MES锛氫粠 DB 璇诲彇瀹屾暣鐗╂枡鏁版嵁缁勮鍚庤蛋 syncItemToMes
+ MdmItemSaveReqVO reqVO = BeanUtils.toBean(item, MdmItemSaveReqVO.class);
+ // DO 瀛楁鍚嶄负 highValue锛屼笌 VO 鐨� isHighValue 涓嶈嚜鍔ㄥ尮閰嶏紝鎵嬪姩琛ラ綈
+ reqVO.setIsHighValue(item.getHighValue());
+ // 琛ラ綈鎵规灞炴�ч厤缃�
+ MdmItemBatchConfigDO config = itemBatchConfigMapper.selectOne(
+ MdmItemBatchConfigDO::getItemId, id);
+ if (config != null) {
+ reqVO.setProduceDateFlag(config.getProduceDateFlag());
+ reqVO.setExpireDateFlag(config.getExpireDateFlag());
+ reqVO.setReceiptDateFlag(config.getReceiptDateFlag());
+ reqVO.setVendorFlag(config.getVendorFlag());
+ reqVO.setPurchaseOrderCodeFlag(config.getPurchaseOrderCodeFlag());
+ reqVO.setLotNumberFlag(config.getLotNumberFlag());
+ reqVO.setQualityStatusFlag(config.getQualityStatusFlag());
+ }
+ syncItemToMes(reqVO);
+ } else {
+ // 鍙栨秷鍚屾锛氫粠 MES 鍒犻櫎璇ョ墿鏂欙紙MES 鏃犳鐗╂枡鏃跺唴閮ㄤ负绌烘搷浣滐級
+ mesMdItemApi.deleteItem(id);
+ }
+ }
+
/**
* 鏍¢獙鐗╂枡鏈涓氬姟寮曠敤锛堥攢鍞�侀噰璐�佺敓浜с�佽川妫�銆佸簱瀛樼瓑锛�
*
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/item/MesMdItemMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/item/MesMdItemMapper.java
index 26502d5..5a5a843 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/item/MesMdItemMapper.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/item/MesMdItemMapper.java
@@ -7,6 +7,8 @@
import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.MesMdItemPageReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
import java.util.Collection;
import java.util.Collections;
@@ -55,6 +57,19 @@
}
/**
+ * 鎸� ID 鏌ヨ璁板綍锛堜笉杩囨护閫昏緫鍒犻櫎锛屽惈宸插垹闄よ锛�
+ * 鐢ㄤ簬"鍙栨秷鍚屾锛堥�昏緫鍒犻櫎锛夊悗閲嶆柊鍚屾"鏃跺垽鏂富閿槸鍚﹁鍗犵敤
+ */
+ @Select("SELECT * FROM mes_md_item WHERE id = #{id} LIMIT 1")
+ MesMdItemDO selectAnyById(Long id);
+
+ /**
+ * 鎭㈠閫昏緫鍒犻櫎鐨勮褰曪紙deleted 缃� 0锛�
+ */
+ @Update("UPDATE mes_md_item SET deleted = 0, update_time = NOW() WHERE id = #{id}")
+ int restoreById(Long id);
+
+ /**
* 鎵归噺鏌ヨ宸插瓨鍦ㄧ殑 MDM 鐗╂枡 ID 闆嗗悎
*
* @param mdmItemIds MDM 鐗╂枡 ID 鍒楄〃
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java
index 5a46e79..319ea0f 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java
@@ -80,6 +80,12 @@
updateItem(createReqVO);
return createReqVO.getId();
}
+ // 瀛樺湪閫昏緫鍒犻櫎璁板綍锛堝彇娑堝悓姝ュ悗閲嶆柊鍚屾锛夛細鎭㈠璇ヨ褰曞悗璧版洿鏂帮紝閬垮厤涓婚敭鍐茬獊
+ if (itemMapper.selectAnyById(createReqVO.getId()) != null) {
+ itemMapper.restoreById(createReqVO.getId());
+ updateItem(createReqVO);
+ return createReqVO.getId();
+ }
}
// 鎻掑叆
--
Gitblit v1.9.3