From 2c4bc1808f272b7d7282d1b8ba416d606ebc7df5 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期五, 18 九月 2026 15:25:31 +0800
Subject: [PATCH] refactor(生产核算): 成品/白盒归属改为按工序指定

---
 sql/production_costing_config.sql |  188 +++++++++++++++++++++++++++-------------------
 1 files changed, 111 insertions(+), 77 deletions(-)

diff --git a/sql/production_costing_config.sql b/sql/production_costing_config.sql
index b386772..a1a029b 100644
--- a/sql/production_costing_config.sql
+++ b/sql/production_costing_config.sql
@@ -1,46 +1,63 @@
 -- ============================================================
--- 鐢熶骇鏍哥畻锛堟垚鍝侀儴闂� / 鐧界洅閮ㄩ棬锛夐厤缃笌缁撴瀯琛ュ厖鑴氭湰
--- 鏁版嵁搴擄細product-inventory-management-new-pro
--- 璇存槑锛氭湰鍦板簱缁撴瀯钀藉悗浜庝唬鐮侊紝production_product_main 缂哄皯
---       鎶ュ伐缁撴灉/瀹℃牳鐩稿叧鍒楋紝杩欓噷琛ラ綈锛涘苟鏂板鏍哥畻閰嶇疆琛ㄤ笌婕旂ず鏁版嵁銆�
+-- 鐢熶骇鏍哥畻锛堟垚鍝侀儴闂� / 鐧界洅閮ㄩ棬锛夋暟鎹簱鑴氭湰
+-- 鐩爣搴擄細product-inventory-management-new-pro锛堟寜瀹為檯鐜鏇挎崲锛�
+-- 璇存槑锛�
+--   绗� 1 閮ㄥ垎锛氱粨鏋勫彉鏇达紙琛ュ垪 + 鏂板缓閰嶇疆琛級鈥斺�� 蹇呴』鎵ц锛屽箓绛夊彲閲嶅鎵ц
+--   绗� 2 閮ㄥ垎锛氭紨绀烘暟鎹� 鈥斺�� 鍙�夛紝浠呯敤浜庢湰鍦�/婕旂ず鐜锛屾寮忕幆澧冭鍕挎墽琛屾垨鎸夐渶璋冩暣
+-- 鎴愬搧/鐧界洅 鐨勫綊灞烇細鍦ㄣ�愬伐搴忕被鍨嬮厤缃�戦噷鐩存帴鎶婃煇涓伐搴忔寚瀹氫负 鎴愬搧 鎴� 鐧界洅
+--   锛�1=鎴愬搧閮ㄩ棬锛�2=鐧界洅閮ㄩ棬锛�
 -- ============================================================
 SET NAMES utf8mb4;
 
--- ------------------------------------------------------------
--- 1. 琛ュ厖 production_product_main 缂哄け鍒楋紙鎶ュ伐缁撴灉 / 瀹℃牳 / 琛ヤ慨鐞嗗伐鏃讹級
--- ------------------------------------------------------------
-ALTER TABLE `production_product_main`
-    ADD COLUMN `report_type`     int          NULL COMMENT '鎶ュ伐缁撴灉绫诲瀷锛�0鍚堟牸锛�1杞诲井杩斿伐锛�2涓ラ噸杩斿伐锛�3鎶ュ簾' AFTER `status`,
-    ADD COLUMN `audit_status`    int          NULL DEFAULT 1 COMMENT '瀹℃牳鐘舵�侊細0寰呭鏍革紝1瀹℃牳閫氳繃锛�2瀹℃牳涓嶉�氳繃' AFTER `report_type`,
-    ADD COLUMN `audit_remark`    varchar(255) NULL COMMENT '瀹℃牳鎰忚' AFTER `audit_status`,
-    ADD COLUMN `repair_work_hour` decimal(10,2) NULL DEFAULT 0 COMMENT '琛ヤ慨鐞嗗伐鏃�' AFTER `work_hour`;
+/* ============================================================
+ * 绗� 1 閮ㄥ垎锛氱粨鏋勫彉鏇达紙蹇呴』鎵ц锛�
+ * ============================================================ */
 
--- 宸插瓨鍦ㄦ姤宸ユ暟鎹粯璁よ涓猴細瀹℃牳閫氳繃銆佸悎鏍�
+-- 1.1 琛ラ綈 production_product_main 缂哄け鍒�
+SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='production_product_main' AND COLUMN_NAME='report_type');
+SET @s := IF(@c=0, 'ALTER TABLE `production_product_main` ADD COLUMN `report_type` int NULL COMMENT ''鎶ュ伐缁撴灉绫诲瀷锛�0鍚堟牸锛�1杞诲井杩斿伐锛�2涓ラ噸杩斿伐锛�3鎶ュ簾'' AFTER `status`', 'DO 0');
+PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
+
+SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='production_product_main' AND COLUMN_NAME='audit_status');
+SET @s := IF(@c=0, 'ALTER TABLE `production_product_main` ADD COLUMN `audit_status` int NULL DEFAULT 1 COMMENT ''瀹℃牳鐘舵�侊細0寰呭鏍革紝1瀹℃牳閫氳繃锛�2瀹℃牳涓嶉�氳繃'' AFTER `report_type`', 'DO 0');
+PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
+
+SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='production_product_main' AND COLUMN_NAME='audit_remark');
+SET @s := IF(@c=0, 'ALTER TABLE `production_product_main` ADD COLUMN `audit_remark` varchar(255) NULL COMMENT ''瀹℃牳鎰忚'' AFTER `audit_status`', 'DO 0');
+PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
+
+SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='production_product_main' AND COLUMN_NAME='repair_work_hour');
+SET @s := IF(@c=0, 'ALTER TABLE `production_product_main` ADD COLUMN `repair_work_hour` decimal(10,2) NULL DEFAULT 0 COMMENT ''琛ヤ慨鐞嗗伐鏃�'' AFTER `work_hour`', 'DO 0');
+PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
+
+-- 1.2 琛ラ綈 product 缂哄け鍒� standard_quantity
+SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='product' AND COLUMN_NAME='standard_quantity');
+SET @s := IF(@c=0, 'ALTER TABLE `product` ADD COLUMN `standard_quantity` decimal(18,4) NULL COMMENT ''鏍囧噯鏁伴噺'' AFTER `product_name`', 'DO 0');
+PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
+
+-- 1.3 宸插瓨鍦ㄦ姤宸ユ暟鎹粯璁わ細瀹℃牳閫氳繃銆佸悎鏍�
 UPDATE `production_product_main` SET `report_type` = 0 WHERE `report_type` IS NULL;
 UPDATE `production_product_main` SET `audit_status` = 1 WHERE `audit_status` IS NULL;
 
--- ------------------------------------------------------------
--- 2. 鏂板鏍哥畻閰嶇疆琛�
--- ------------------------------------------------------------
-DROP TABLE IF EXISTS `production_costing_dept`;
-CREATE TABLE `production_costing_dept` (
+-- 1.4 鏂板缓鏍哥畻閰嶇疆琛�
+CREATE TABLE IF NOT EXISTS `production_costing_process` (
     `id`          bigint       NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
-    `dept_id`     bigint       NULL COMMENT '閮ㄩ棬ID(sys_dept.dept_id)',
-    `dept_type`   int          NULL COMMENT '閮ㄩ棬绫诲瀷锛�1鎴愬搧閮ㄩ棬锛�2鐧界洅閮ㄩ棬',
+    `process_id`  bigint       NULL COMMENT '宸ュ簭ID(technology_operation.id)',
+    `dept_type`   int          NULL COMMENT '绫诲瀷锛�1鎴愬搧閮ㄩ棬锛�2鐧界洅閮ㄩ棬',
     `remark`      varchar(255) NULL COMMENT '澶囨敞',
     `create_user` bigint       NULL COMMENT '鍒涘缓浜�',
     `create_time` datetime     NULL COMMENT '鍒涘缓鏃堕棿',
     `update_user` bigint       NULL COMMENT '淇敼浜�',
     `update_time` datetime     NULL COMMENT '淇敼鏃堕棿',
-    PRIMARY KEY (`id`)
-) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '鐢熶骇鏍哥畻-閮ㄩ棬绫诲瀷閰嶇疆';
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `uk_process` (`process_id`)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '鐢熶骇鏍哥畻-宸ュ簭绫诲瀷閰嶇疆';
 
-DROP TABLE IF EXISTS `production_costing_standard`;
-CREATE TABLE `production_costing_standard` (
+CREATE TABLE IF NOT EXISTS `production_costing_standard` (
     `id`                bigint        NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
-    `dept_type`         int           NULL COMMENT '閮ㄩ棬绫诲瀷锛�1鎴愬搧锛�2鐧界洅',
-    `process_id`        bigint        NULL COMMENT '宸ュ簭ID(technology_operation.id)',
-    `product_model_id`  bigint        NULL COMMENT '鍨嬪彿ID(product_model.id)锛岀櫧鐩掑繀濉�',
+    `dept_type`         int           NULL COMMENT '绫诲瀷锛�1鎴愬搧锛�2鐧界洅',
+    `process_id`        bigint        NULL COMMENT '宸ュ簭ID',
+    `product_model_id`  bigint        NULL COMMENT '鍨嬪彿ID锛岀櫧鐩掑繀濉�',
     `standard_quantity` decimal(18,4) NULL COMMENT '鏍囧噯鏁伴噺',
     `unit`              varchar(50)   NULL COMMENT '鍗曚綅',
     `remark`            varchar(255)  NULL COMMENT '澶囨敞',
@@ -48,14 +65,14 @@
     `create_time`       datetime      NULL COMMENT '鍒涘缓鏃堕棿',
     `update_user`       bigint        NULL COMMENT '淇敼浜�',
     `update_time`       datetime      NULL COMMENT '淇敼鏃堕棿',
-    PRIMARY KEY (`id`)
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `uk_std` (`dept_type`, `process_id`, `product_model_id`)
 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '鐢熶骇鏍哥畻-鏍囧噯鏁伴噺閰嶇疆';
 
-DROP TABLE IF EXISTS `production_costing_factor`;
-CREATE TABLE `production_costing_factor` (
+CREATE TABLE IF NOT EXISTS `production_costing_factor` (
     `id`            bigint        NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
-    `process_id`    bigint        NULL COMMENT '宸ュ簭ID(technology_operation.id)',
-    `staff_id`      bigint        NULL COMMENT '鍛樺伐ID(sys_user.user_id)',
+    `process_id`    bigint        NULL COMMENT '宸ュ簭ID',
+    `staff_id`      bigint        NULL COMMENT '鍛樺伐ID',
     `staff_name`    varchar(255)  NULL COMMENT '鍛樺伐濮撳悕',
     `violin_factor` decimal(18,4) NULL DEFAULT 1 COMMENT '灏忔彁鐞存姌绠楃巼(鍩哄噯)',
     `viola_factor`  decimal(18,4) NULL COMMENT '澶ф彁鐞存姌绠楃巼',
@@ -65,66 +82,83 @@
     `create_time`   datetime      NULL COMMENT '鍒涘缓鏃堕棿',
     `update_user`   bigint        NULL COMMENT '淇敼浜�',
     `update_time`   datetime      NULL COMMENT '淇敼鏃堕棿',
-    PRIMARY KEY (`id`)
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `uk_factor` (`process_id`, `staff_id`)
 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '鐢熶骇鏍哥畻-鎶樼畻鐜囬厤缃�(宸ュ簭+鍛樺伐)';
 
--- ------------------------------------------------------------
--- 3. 婕旂ず鏁版嵁锛堜究浜庢湰鍦版煡鐪嬫晥鏋滐級
--- ------------------------------------------------------------
--- 3.1 鏂板閮ㄩ棬锛氭垚鍝侀儴闂� / 鐧界洅閮ㄩ棬
-INSERT INTO `sys_dept` (`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `status`, `del_flag`, `create_by`, `create_time`)
-VALUES (220, 100, '0,100', '鎴愬搧閮ㄩ棬', 1, '0', '0', 'admin', NOW()),
-       (221, 100, '0,100', '鐧界洅閮ㄩ棬', 2, '0', '0', 'admin', NOW());
+CREATE TABLE IF NOT EXISTS `production_costing_workday` (
+    `id`          bigint       NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
+    `work_month`  varchar(7)   NULL COMMENT '骞存湀 yyyy-MM',
+    `work_days`   int          NULL COMMENT '褰撴湀宸ヤ綔鏃ュぉ鏁�',
+    `remark`      varchar(255) NULL COMMENT '澶囨敞',
+    `create_user` bigint       NULL COMMENT '鍒涘缓浜�',
+    `create_time` datetime     NULL COMMENT '鍒涘缓鏃堕棿',
+    `update_user` bigint       NULL COMMENT '淇敼浜�',
+    `update_time` datetime     NULL COMMENT '淇敼鏃堕棿',
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `uk_work_month` (`work_month`)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '鐢熶骇鏍哥畻-鏈堝害宸ヤ綔鏃ラ厤缃�';
 
--- 3.2 鎶婃紨绀哄伐搴忓綊鍏ュ搴旈儴闂紙鎴愬搧锛氬喎宸ヨ壓27/纭寲28锛涚櫧鐩掞細鏀剁嚎25/鍒囧壊2锛�
-UPDATE `technology_operation` SET `dept_id` = 220 WHERE `id` IN (27, 28);
-UPDATE `technology_operation` SET `dept_id` = 221 WHERE `id` IN (2, 25);
+/* ============================================================
+ * 绗� 2 閮ㄥ垎锛氭紨绀烘暟鎹紙鍙�夛紝浠呮湰鍦�/婕旂ず鐜锛�
+ * ============================================================ */
 
--- 3.3 閮ㄩ棬绫诲瀷閰嶇疆
-INSERT INTO `production_costing_dept` (`dept_id`, `dept_type`, `remark`, `create_time`)
-VALUES (220, 1, '鎴愬搧閮ㄩ棬', NOW()),
-       (221, 2, '鐧界洅閮ㄩ棬', NOW());
+-- 2.1 宸ュ簭绫诲瀷閰嶇疆锛堟垚鍝侊細鍐峰伐鑹�27/纭寲28锛涚櫧鐩掞細鍒囧壊2/鏀剁嚎25锛�
+INSERT INTO `production_costing_process` (`process_id`, `dept_type`, `remark`, `create_time`)
+SELECT 27, 1, '鍐峰伐鑹�-鎴愬搧', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_process` WHERE `process_id`=27);
+INSERT INTO `production_costing_process` (`process_id`, `dept_type`, `remark`, `create_time`)
+SELECT 28, 1, '纭寲-鎴愬搧', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_process` WHERE `process_id`=28);
+INSERT INTO `production_costing_process` (`process_id`, `dept_type`, `remark`, `create_time`)
+SELECT 2, 2, '鍒囧壊-鐧界洅', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_process` WHERE `process_id`=2);
+INSERT INTO `production_costing_process` (`process_id`, `dept_type`, `remark`, `create_time`)
+SELECT 25, 2, '鏀剁嚎-鐧界洅', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_process` WHERE `process_id`=25);
 
--- 3.4 鏍囧噯鏁伴噺閰嶇疆
---     鎴愬搧锛氭寜宸ュ簭
---     鐧界洅锛氭寜宸ュ簭 + 鍨嬪彿
+-- 2.2 鏍囧噯鏁伴噺閰嶇疆锛堟垚鍝侊細鎸夊伐搴忥紱鐧界洅锛氭寜宸ュ簭+鍨嬪彿锛�
 INSERT INTO `production_costing_standard` (`dept_type`, `process_id`, `product_model_id`, `standard_quantity`, `unit`, `remark`, `create_time`)
-VALUES (1, 27, NULL, 10, 'm', '鍐峰伐鑹烘爣鍑嗘暟閲�', NOW()),
-       (1, 28, NULL, 20, 'm', '纭寲鏍囧噯鏁伴噺', NOW()),
-       (2, 25, 251, 5, 'kg/km', '鏀剁嚎-閾濆悎閲戠嚎', NOW()),
-       (2, 25, 256, 2, 'm', '鏀剁嚎-閾濆悎閲戠粸绾�', NOW()),
-       (2, 2, 246, 4, 'kg/km', '鍒囧壊-閾濆悎閲戠嚎', NOW());
+SELECT 1, 27, NULL, 10, 'm', '鍐峰伐鑹烘爣鍑嗘暟閲�', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_standard` WHERE `dept_type`=1 AND `process_id`=27 AND `product_model_id` IS NULL);
+INSERT INTO `production_costing_standard` (`dept_type`, `process_id`, `product_model_id`, `standard_quantity`, `unit`, `remark`, `create_time`)
+SELECT 1, 28, NULL, 20, 'm', '纭寲鏍囧噯鏁伴噺', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_standard` WHERE `dept_type`=1 AND `process_id`=28 AND `product_model_id` IS NULL);
+INSERT INTO `production_costing_standard` (`dept_type`, `process_id`, `product_model_id`, `standard_quantity`, `unit`, `remark`, `create_time`)
+SELECT 2, 25, 251, 5, 'kg/km', '鏀剁嚎-閾濆悎閲戠嚎', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_standard` WHERE `dept_type`=2 AND `process_id`=25 AND `product_model_id`=251);
+INSERT INTO `production_costing_standard` (`dept_type`, `process_id`, `product_model_id`, `standard_quantity`, `unit`, `remark`, `create_time`)
+SELECT 2, 25, 256, 2, 'm', '鏀剁嚎-閾濆悎閲戠粸绾�', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_standard` WHERE `dept_type`=2 AND `process_id`=25 AND `product_model_id`=256);
+INSERT INTO `production_costing_standard` (`dept_type`, `process_id`, `product_model_id`, `standard_quantity`, `unit`, `remark`, `create_time`)
+SELECT 2, 2, 246, 4, 'kg/km', '鍒囧壊-閾濆悎閲戠嚎', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_standard` WHERE `dept_type`=2 AND `process_id`=2 AND `product_model_id`=246);
 
--- 3.5 鎶樼畻鐜囬厤缃紙宸ュ簭 + 鍛樺伐锛�
+-- 2.3 鎶樼畻鐜囬厤缃紙宸ュ簭+鍛樺伐锛�
 INSERT INTO `production_costing_factor` (`process_id`, `staff_id`, `staff_name`, `violin_factor`, `viola_factor`, `bass_factor`, `remark`, `create_time`)
-VALUES (27, 1, '绠$悊鍛樿处鍙�', 1, 3, 6, '鍐峰伐鑹�-鎶樼畻鐜�', NOW()),
-       (28, 1, '绠$悊鍛樿处鍙�', 1, 2, 4, '纭寲-鎶樼畻鐜�', NOW());
+SELECT 27, 1, '绠$悊鍛樿处鍙�', 1, 3, 6, '鍐峰伐鑹�-鎶樼畻鐜�', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_factor` WHERE `process_id`=27 AND `staff_id`=1);
+INSERT INTO `production_costing_factor` (`process_id`, `staff_id`, `staff_name`, `violin_factor`, `viola_factor`, `bass_factor`, `remark`, `create_time`)
+SELECT 28, 1, '绠$悊鍛樿处鍙�', 1, 2, 4, '纭寲-鎶樼畻鐜�', NOW() WHERE NOT EXISTS (SELECT 1 FROM `production_costing_factor` WHERE `process_id`=28 AND `staff_id`=1);
 
--- 3.6 涔愬櫒婕旂ず鏁版嵁锛堝皬鎻愮惔/澶ф彁鐞�/璐濇柉锛夛紝鐢ㄤ簬灞曠ず鎴愬搧閮ㄩ棬鎶樼畻鏁堟灉
+-- 2.4 涔愬櫒婕旂ず鏁版嵁锛堝皬鎻愮惔/澶ф彁鐞�/璐濇柉锛�+ 鎶ュ伐閾�
 INSERT INTO `product` (`id`, `parent_id`, `product_name`, `create_user`, `dept_id`)
-VALUES (510, 276, '灏忔彁鐞�', 1, 220),
-       (511, 276, '澶ф彁鐞�', 1, 220),
-       (512, 276, '璐濇柉', 1, 220);
+SELECT 510, 276, '灏忔彁鐞�', 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `product` WHERE `id` = 510);
+INSERT INTO `product` (`id`, `parent_id`, `product_name`, `create_user`, `dept_id`)
+SELECT 511, 276, '澶ф彁鐞�', 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `product` WHERE `id` = 511);
+INSERT INTO `product` (`id`, `parent_id`, `product_name`, `create_user`, `dept_id`)
+SELECT 512, 276, '璐濇柉', 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `product` WHERE `id` = 512);
 
 INSERT INTO `product_model` (`id`, `product_id`, `model`, `unit`, `create_user`, `dept_id`)
-VALUES (5001, 510, 'VIOLIN-STD', '鎶�', 1, 220),
-       (5002, 511, 'CELLO-STD', '鎶�', 1, 220),
-       (5003, 512, 'BASS-STD', '鎶�', 1, 220);
+SELECT 5001, 510, 'VIOLIN-STD', '鎶�', 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `product_model` WHERE `id` = 5001);
+INSERT INTO `product_model` (`id`, `product_id`, `model`, `unit`, `create_user`, `dept_id`)
+SELECT 5002, 511, 'CELLO-STD', '鎶�', 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `product_model` WHERE `id` = 5002);
+INSERT INTO `product_model` (`id`, `product_id`, `model`, `unit`, `create_user`, `dept_id`)
+SELECT 5003, 512, 'BASS-STD', '鎶�', 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `product_model` WHERE `id` = 5003);
 
--- 鎶ュ伐閾撅細璁㈠崟 -> 宸ヨ壓璺嚎宸ュ簭 -> 宸ュ崟 -> 鎶ュ伐 -> 浜у嚭
 INSERT INTO `production_order` (`id`, `product_model_id`, `technology_routing_id`, `nps_no`, `quantity`, `create_user`, `dept_id`)
-VALUES (5000, 5001, 0, 'DEMO-ORDER-1', 100, 1, 220);
-
+SELECT 5000, 5001, 0, 'DEMO-ORDER-1', 100, 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `production_order` WHERE `id` = 5000);
 INSERT INTO `production_order_routing_operation` (`id`, `production_order_id`, `technology_routing_operation_id`, `technology_operation_id`, `operation_name`, `product_model_id`, `type`, `create_user`, `dept_id`)
-VALUES (5000, 5000, 0, 27, '鍐峰伐鑹�', 5001, 1, 1, 220);
-
+SELECT 5000, 5000, 0, 27, '鍐峰伐鑹�', 5001, 1, 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `production_order_routing_operation` WHERE `id` = 5000);
 INSERT INTO `production_operation_task` (`id`, `production_order_routing_operation_id`, `technology_routing_operation_id`, `work_order_no`, `status`, `production_order_id`, `create_user`, `dept_id`)
-VALUES (5000, 5000, 0, 'DEMO-WO-1', 4, 5000, 1, 220);
-
+SELECT 5000, 5000, 0, 'DEMO-WO-1', 4, 5000, 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `production_operation_task` WHERE `id` = 5000);
 INSERT INTO `production_product_main` (`id`, `product_no`, `user_id`, `user_name`, `production_operation_task_id`, `status`, `dept_id`, `create_time`, `create_user`, `report_type`, `audit_status`)
-VALUES (5000, 'BG-DEMO-001', 1, '绠$悊鍛樿处鍙�', 5000, 4, 220, '2026-09-15 10:00:00', 1, 0, 1);
-
+SELECT 5000, 'BG-DEMO-001', 1, '绠$悊鍛樿处鍙�', 5000, 4, 100, '2026-09-15 10:00:00', 1, 0, 1 WHERE NOT EXISTS (SELECT 1 FROM `production_product_main` WHERE `id` = 5000);
 INSERT INTO `production_product_output` (`production_product_main_id`, `product_model_id`, `quantity`, `scrap_qty`, `create_user`, `dept_id`)
-VALUES (5000, 5001, 20, 0, 1, 220),
-       (5000, 5002, 10, 0, 1, 220),
-       (5000, 5003, 5, 0, 1, 220);
+SELECT 5000, 5001, 20, 0, 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `production_product_output` WHERE `production_product_main_id` = 5000 AND `product_model_id` = 5001);
+INSERT INTO `production_product_output` (`production_product_main_id`, `product_model_id`, `quantity`, `scrap_qty`, `create_user`, `dept_id`)
+SELECT 5000, 5002, 10, 0, 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `production_product_output` WHERE `production_product_main_id` = 5000 AND `product_model_id` = 5002);
+INSERT INTO `production_product_output` (`production_product_main_id`, `product_model_id`, `quantity`, `scrap_qty`, `create_user`, `dept_id`)
+SELECT 5000, 5003, 5, 0, 1, 100 WHERE NOT EXISTS (SELECT 1 FROM `production_product_output` WHERE `production_product_main_id` = 5000 AND `product_model_id` = 5003);
+
+SELECT '鐢熶骇鏍哥畻鏁版嵁搴撹剼鏈墽琛屽畬鎴�' AS result_message;

--
Gitblit v1.9.3