From ed0b34e7377749befc33465318285bcc52128770 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 17 八月 2026 11:42:01 +0800
Subject: [PATCH] feat(mdm): 添加物料同步状态开关功能

---
 docs/clean_business_data.sql                                                                                    |  330 ++++++++++++++++++++++++++++++++++++
 yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java                 |   46 ++++
 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 +
 8 files changed, 490 insertions(+), 5 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-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