refactor(生产核算): 成品/白盒归属改为按工序指定
- 新增 production_costing_process(工序→成品/白盒)配置及 CRUD
- 核算 SQL 按工序 join(原按工序所属部门)
- 移除部门类型配置(production_costing_dept 相关文件与接口)
- 更新 sql/production_costing_config.sql
已删除2个文件
已添加2个文件
已重命名1个文件
已修改5个文件
| | |
| | | -- ============================================================ |
| | | -- çäº§æ ¸ç®ï¼æåé¨é¨ / ç½çé¨é¨ï¼é
ç½®ä¸ç»æè¡¥å
èæ¬ |
| | | -- æ°æ®åºï¼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 '夿³¨', |
| | |
| | | `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 '大æç´æç®ç', |
| | |
| | | `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; |
| | |
| | | import com.ruoyi.production.bean.dto.ProductionCostingQueryDto; |
| | | import com.ruoyi.production.bean.vo.ProductionCostingDetailVo; |
| | | import com.ruoyi.production.bean.vo.ProductionCostingSummaryVo; |
| | | import com.ruoyi.production.pojo.ProductionCostingDept; |
| | | import com.ruoyi.production.pojo.ProductionCostingProcess; |
| | | import com.ruoyi.production.pojo.ProductionCostingFactor; |
| | | import com.ruoyi.production.pojo.ProductionCostingStandard; |
| | | import com.ruoyi.production.pojo.ProductionCostingWorkday; |
| | |
| | | util.exportExcel(response, productionCostingService.detailList(dto), "çäº§æ ¸ç®æç»"); |
| | | } |
| | | |
| | | /* ---------------- é¨é¨ç±»åé
ç½® ---------------- */ |
| | | /* ---------------- å·¥åºç±»åé
ç½® ---------------- */ |
| | | |
| | | @GetMapping("/dept/list") |
| | | @Operation(summary = "é¨é¨ç±»åé
ç½®å表") |
| | | public R<List<ProductionCostingDept>> deptList() { |
| | | return R.ok(productionCostingService.listDept()); |
| | | @GetMapping("/process/list") |
| | | @Operation(summary = "å·¥åºç±»åé
ç½®å表") |
| | | public R<List<ProductionCostingProcess>> processList(ProductionCostingProcess query) { |
| | | return R.ok(productionCostingService.listProcess(query)); |
| | | } |
| | | |
| | | @PostMapping("/dept") |
| | | @Log(title = "çäº§æ ¸ç®-é¨é¨ç±»åé
ç½®æ°å¢", businessType = BusinessType.INSERT) |
| | | @Operation(summary = "æ°å¢é¨é¨ç±»åé
ç½®") |
| | | public R<Boolean> deptAdd(@RequestBody ProductionCostingDept dept) { |
| | | return R.ok(productionCostingService.saveDept(dept)); |
| | | @PostMapping("/process") |
| | | @Log(title = "çäº§æ ¸ç®-å·¥åºç±»åé
ç½®æ°å¢", businessType = BusinessType.INSERT) |
| | | @Operation(summary = "æ°å¢å·¥åºç±»åé
ç½®") |
| | | public R<Boolean> processAdd(@RequestBody ProductionCostingProcess process) { |
| | | return R.ok(productionCostingService.saveProcess(process)); |
| | | } |
| | | |
| | | @PutMapping("/dept") |
| | | @Log(title = "çäº§æ ¸ç®-é¨é¨ç±»åé
置修æ¹", businessType = BusinessType.UPDATE) |
| | | @Operation(summary = "ä¿®æ¹é¨é¨ç±»åé
ç½®") |
| | | public R<Boolean> deptEdit(@RequestBody ProductionCostingDept dept) { |
| | | return R.ok(productionCostingService.updateDept(dept)); |
| | | @PutMapping("/process") |
| | | @Log(title = "çäº§æ ¸ç®-å·¥åºç±»åé
置修æ¹", businessType = BusinessType.UPDATE) |
| | | @Operation(summary = "ä¿®æ¹å·¥åºç±»åé
ç½®") |
| | | public R<Boolean> processEdit(@RequestBody ProductionCostingProcess process) { |
| | | return R.ok(productionCostingService.updateProcess(process)); |
| | | } |
| | | |
| | | @DeleteMapping("/dept/{id}") |
| | | @Log(title = "çäº§æ ¸ç®-é¨é¨ç±»åé
ç½®å é¤", businessType = BusinessType.DELETE) |
| | | @Operation(summary = "å é¤é¨é¨ç±»åé
ç½®") |
| | | public R<Boolean> deptRemove(@PathVariable Long id) { |
| | | return R.ok(productionCostingService.removeDept(id)); |
| | | @DeleteMapping("/process/{id}") |
| | | @Log(title = "çäº§æ ¸ç®-å·¥åºç±»åé
ç½®å é¤", businessType = BusinessType.DELETE) |
| | | @Operation(summary = "å é¤å·¥åºç±»åé
ç½®") |
| | | public R<Boolean> processRemove(@PathVariable Long id) { |
| | | return R.ok(productionCostingService.removeProcess(id)); |
| | | } |
| | | |
| | | /* ---------------- æ åæ°éé
ç½® ---------------- */ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.production.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.production.pojo.ProductionCostingProcess; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * çäº§æ ¸ç®-å·¥åºç±»åé
ç½® Mapper |
| | | */ |
| | | @Mapper |
| | | public interface ProductionCostingProcessMapper extends BaseMapper<ProductionCostingProcess> { |
| | | |
| | | /** |
| | | * æ¥è¯¢å·¥åºç±»åé
ç½®å表ï¼å«å·¥åºåç§°ï¼ |
| | | */ |
| | | List<ProductionCostingProcess> selectProcessList(@Param("c") ProductionCostingProcess query); |
| | | } |
| ÎļþÃû´Ó src/main/java/com/ruoyi/production/pojo/ProductionCostingDept.java ÐÞ¸Ä |
| | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * çäº§æ ¸ç®-é¨é¨ç±»åé
ç½®ï¼åºåæåé¨é¨ / ç½çé¨é¨ï¼ |
| | | * çäº§æ ¸ç®-å·¥åºç±»åé
ç½®ï¼ç´æ¥æå®æä¸ªå·¥åºå±äºæå / ç½çï¼ |
| | | */ |
| | | @Data |
| | | @TableName("production_costing_dept") |
| | | @Schema(name = "ProductionCostingDept对象", description = "çäº§æ ¸ç®-é¨é¨ç±»åé
ç½®") |
| | | public class ProductionCostingDept implements Serializable { |
| | | @TableName("production_costing_process") |
| | | @Schema(name = "ProductionCostingProcess对象", description = "çäº§æ ¸ç®-å·¥åºç±»åé
ç½®") |
| | | public class ProductionCostingProcess implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | |
| | | @Schema(description = "主é®") |
| | | private Long id; |
| | | |
| | | @Schema(description = "é¨é¨ID") |
| | | private Long deptId; |
| | | @Schema(description = "å·¥åºID(technology_operation.id)") |
| | | private Long processId; |
| | | |
| | | @Schema(description = "é¨é¨ç±»åï¼1æåé¨é¨ï¼2ç½çé¨é¨") |
| | | @Schema(description = "ç±»åï¼1æåé¨é¨ï¼2ç½çé¨é¨") |
| | | private Integer deptType; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "é¨é¨åç§°ï¼éæ°æ®åºå段ï¼") |
| | | @Schema(description = "å·¥åºåç§°ï¼éæ°æ®åºå段ï¼") |
| | | @TableField(exist = false) |
| | | private String deptName; |
| | | private String processName; |
| | | |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Long createUser; |
| | |
| | | import com.ruoyi.production.bean.dto.ProductionCostingQueryDto; |
| | | import com.ruoyi.production.bean.vo.ProductionCostingDetailVo; |
| | | import com.ruoyi.production.bean.vo.ProductionCostingSummaryVo; |
| | | import com.ruoyi.production.pojo.ProductionCostingDept; |
| | | import com.ruoyi.production.pojo.ProductionCostingProcess; |
| | | import com.ruoyi.production.pojo.ProductionCostingFactor; |
| | | import com.ruoyi.production.pojo.ProductionCostingStandard; |
| | | import com.ruoyi.production.pojo.ProductionCostingWorkday; |
| | |
| | | /** æä»½å·¥ä½æ¥ä¿¡æ¯ */ |
| | | Map<String, Object> workdayInfo(String yearMonth); |
| | | |
| | | /* ---------------- é¨é¨ç±»åé
ç½® ---------------- */ |
| | | List<ProductionCostingDept> listDept(); |
| | | /* ---------------- å·¥åºç±»åé
ç½® ---------------- */ |
| | | List<ProductionCostingProcess> listProcess(ProductionCostingProcess query); |
| | | |
| | | boolean saveDept(ProductionCostingDept dept); |
| | | boolean saveProcess(ProductionCostingProcess process); |
| | | |
| | | boolean updateDept(ProductionCostingDept dept); |
| | | boolean updateProcess(ProductionCostingProcess process); |
| | | |
| | | boolean removeDept(Long id); |
| | | boolean removeProcess(Long id); |
| | | |
| | | /* ---------------- æ åæ°éé
ç½® ---------------- */ |
| | | List<ProductionCostingStandard> listStandard(ProductionCostingStandard query); |
| | |
| | | import com.ruoyi.production.bean.vo.ProductionCostingDetailVo; |
| | | import com.ruoyi.production.bean.vo.ProductionCostingRawVo; |
| | | import com.ruoyi.production.bean.vo.ProductionCostingSummaryVo; |
| | | import com.ruoyi.production.mapper.ProductionCostingDeptMapper; |
| | | import com.ruoyi.production.mapper.ProductionCostingProcessMapper; |
| | | import com.ruoyi.production.mapper.ProductionCostingFactorMapper; |
| | | import com.ruoyi.production.mapper.ProductionCostingMapper; |
| | | import com.ruoyi.production.mapper.ProductionCostingStandardMapper; |
| | | import com.ruoyi.production.mapper.ProductionCostingWorkdayMapper; |
| | | import com.ruoyi.production.pojo.ProductionCostingDept; |
| | | import com.ruoyi.production.pojo.ProductionCostingProcess; |
| | | import com.ruoyi.production.pojo.ProductionCostingFactor; |
| | | import com.ruoyi.production.pojo.ProductionCostingStandard; |
| | | import com.ruoyi.production.pojo.ProductionCostingWorkday; |
| | |
| | | private final ProductionCostingMapper productionCostingMapper; |
| | | private final ProductionCostingStandardMapper standardMapper; |
| | | private final ProductionCostingFactorMapper factorMapper; |
| | | private final ProductionCostingDeptMapper deptMapper; |
| | | private final ProductionCostingProcessMapper processMapper; |
| | | private final ProductionCostingWorkdayMapper workdayMapper; |
| | | |
| | | @Override |
| | |
| | | /* ================= é
ç½® CRUD ================= */ |
| | | |
| | | @Override |
| | | public List<ProductionCostingDept> listDept() { |
| | | return deptMapper.selectDeptConfigs(); |
| | | public List<ProductionCostingProcess> listProcess(ProductionCostingProcess query) { |
| | | return processMapper.selectProcessList(query == null ? new ProductionCostingProcess() : query); |
| | | } |
| | | |
| | | @Override |
| | | public boolean saveDept(ProductionCostingDept dept) { |
| | | return deptMapper.insert(dept) > 0; |
| | | public boolean saveProcess(ProductionCostingProcess process) { |
| | | return processMapper.insert(process) > 0; |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateDept(ProductionCostingDept dept) { |
| | | return deptMapper.updateById(dept) > 0; |
| | | public boolean updateProcess(ProductionCostingProcess process) { |
| | | return processMapper.updateById(process) > 0; |
| | | } |
| | | |
| | | @Override |
| | | public boolean removeDept(Long id) { |
| | | return deptMapper.deleteById(id) > 0; |
| | | public boolean removeProcess(Long id) { |
| | | return processMapper.deleteById(id) > 0; |
| | | } |
| | | |
| | | @Override |
| | |
| | | date_format(ppm.create_time, '%Y-%m') as yearMonth, |
| | | too.id as processId, |
| | | too.name as processName, |
| | | cd.dept_type as deptType, |
| | | cp.dept_type as deptType, |
| | | ppo.product_model_id as productModelId, |
| | | p.product_name as productName, |
| | | pm.model as modelName, |
| | |
| | | inner join production_operation_task pot on pot.id = ppm.production_operation_task_id |
| | | inner join production_order_routing_operation poro on poro.id = pot.production_order_routing_operation_id |
| | | inner join technology_operation too on too.id = poro.technology_operation_id |
| | | inner join production_costing_dept cd on cd.dept_id = too.dept_id |
| | | inner join production_costing_process cp on cp.process_id = too.id |
| | | inner join production_product_output ppo on ppo.production_product_main_id = ppm.id |
| | | left join product_model pm on pm.id = ppo.product_model_id |
| | | left join product p on p.id = pm.product_id |
| | |
| | | and ppm.report_type in (0, 1) |
| | | <if test="c != null"> |
| | | <if test="c.deptType != null"> |
| | | and cd.dept_type = #{c.deptType} |
| | | and cp.dept_type = #{c.deptType} |
| | | </if> |
| | | <if test="c.yearMonth != null and c.yearMonth != ''"> |
| | | and date_format(ppm.create_time, '%Y-%m') = #{c.yearMonth} |
| | |
| | | </if> |
| | | </if> |
| | | </where> |
| | | group by ppm.user_id, ppm.user_name, yearMonth, too.id, too.name, cd.dept_type, ppo.product_model_id, p.product_name, pm.model |
| | | group by ppm.user_id, ppm.user_name, yearMonth, too.id, too.name, cp.dept_type, ppo.product_model_id, p.product_name, pm.model |
| | | order by yearMonth desc, ppm.user_id, too.id |
| | | </select> |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.ruoyi.production.mapper.ProductionCostingProcessMapper"> |
| | | |
| | | <select id="selectProcessList" resultType="com.ruoyi.production.pojo.ProductionCostingProcess"> |
| | | select p.id, p.process_id, p.dept_type, p.remark, |
| | | p.create_user, p.create_time, p.update_user, p.update_time, |
| | | too.name as processName |
| | | from production_costing_process p |
| | | left join technology_operation too on too.id = p.process_id |
| | | <where> |
| | | <if test="c != null"> |
| | | <if test="c.deptType != null"> |
| | | and p.dept_type = #{c.deptType} |
| | | </if> |
| | | <if test="c.processId != null"> |
| | | and p.process_id = #{c.processId} |
| | | </if> |
| | | </if> |
| | | </where> |
| | | order by p.dept_type asc, p.process_id asc |
| | | </select> |
| | | |
| | | </mapper> |