Compare commits
189 Commits
fdb13b7261
...
0.8.X
| Author | SHA1 | Date | |
|---|---|---|---|
| dc47a91d0f | |||
| 97c9a3741a | |||
| 40c2f83589 | |||
| 230b18eee6 | |||
| 238e0d2963 | |||
| 395700b8d6 | |||
| c20965406f | |||
| b3dbdaef58 | |||
| ce3998db74 | |||
| d627a72aea | |||
| 16ba2dfa18 | |||
| 289555fd44 | |||
| 1c0b0da99e | |||
| 7e9caf9bb7 | |||
| 86200d189d | |||
| 3277610ff7 | |||
| 143853a87d | |||
| 47931b75ae | |||
| e084e56841 | |||
| a9b4d5ddd6 | |||
| e994afb97f | |||
| 24030dd93f | |||
| a4f8ecb48b | |||
| fa84bae4f2 | |||
| 13f83a56b6 | |||
| c7b899735f | |||
| fc537a1aa6 | |||
| 8d2d22de50 | |||
| 7eda414846 | |||
| 74f7866986 | |||
| 499d9c5611 | |||
| 6cf855b004 | |||
| 9fd96c3cf5 | |||
| 6265292cbb | |||
| 2490f487fd | |||
| 25b4dfe006 | |||
| faaa5b1b75 | |||
| 1f16c984a8 | |||
| 41557c606b | |||
| a8435a3716 | |||
| 01128d293e | |||
| 2d008f64ea | |||
| 29d99a4f8d | |||
| 416202360b | |||
| fd6c568d19 | |||
| 7efa20dd94 | |||
| b5a269a37a | |||
| 6436d56ab8 | |||
| eda206a4d5 | |||
| 15703216c3 | |||
| 3e640b4a4d | |||
| b5708ea8f0 | |||
| 1167bc117b | |||
| 5f142050a9 | |||
| 26c834780c | |||
| 0fe9bce02a | |||
| 2e79a5beb0 | |||
| 119b9105c7 | |||
| 4aba91abd9 | |||
| 7ec3f49c73 | |||
| 1a0a904903 | |||
| de5a82d0a7 | |||
| a07ced4b25 | |||
| b939052a88 | |||
| c33b27d174 | |||
| 691c8289dd | |||
| ca094574f5 | |||
| f068daba0b | |||
| 0c05455ae3 | |||
| 274671f309 | |||
| b4fba79838 | |||
| 6910278ba7 | |||
| 491eed3dad | |||
| 66838b6c69 | |||
| c8c2523fe7 | |||
| d0afe5eaaf | |||
| 7374b810c1 | |||
| 041e5aef0e | |||
| 6120e87966 | |||
| 5828dbd133 | |||
| ee49fbdcc0 | |||
| 7f1a89eb61 | |||
| 759bbbed63 | |||
| 5b0cb314e4 | |||
| 2fc4bf4043 | |||
| 2fb5a64124 | |||
| 379aa9d44b | |||
| b4a9a48ae6 | |||
| 41716b3430 | |||
| 585017873c | |||
| 605f7b85a1 | |||
| 192a27afbc | |||
| 768b18c22a | |||
| 3719416cbf | |||
| 791be3e1a5 | |||
| 7b7f4b902e | |||
| c547456108 | |||
| 931fc74ed7 | |||
| e7f1e584eb | |||
| b43b44d044 | |||
| d053dd0319 | |||
| 3b1ce45043 | |||
| 5473fbf28f | |||
| 2874f1727a | |||
| a3a4986cb8 | |||
| f525770094 | |||
| 25beef5517 | |||
| e6b1e31bd1 | |||
| 8c3a3eec28 | |||
| 1510f43aee | |||
| cb8fce435c | |||
| 7bb68483e6 | |||
| 696280bd47 | |||
| bdf01feacb | |||
| 120320c800 | |||
| 3db1651efd | |||
| 9d679954fa | |||
| a2844ec54a | |||
| 91ddc8602a | |||
| 22fd3c4a58 | |||
| ceab5d4be3 | |||
| bf8b69d193 | |||
| 7feaf8021b | |||
| 6328b4ac7a | |||
| 183e6d08d8 | |||
| a037c56122 | |||
| 857daa24af | |||
| 0968dcaded | |||
| cced2ff4aa | |||
| f197462b11 | |||
| 9559e5810e | |||
| 92ad229104 | |||
| ee1cb31321 | |||
| f0de25a3a2 | |||
| 0d40774194 | |||
| 948e62daae | |||
| 48d12fe056 | |||
| 6edc6e1100 | |||
| 12ea9b0b83 | |||
| c149216ebd | |||
| 325a93fd84 | |||
| f0656b57d4 | |||
| 9c7d2dca65 | |||
| 36b1e3da82 | |||
| c83eb79d25 | |||
| e0cf4b46b6 | |||
| 00972112d2 | |||
| 2559dc27cb | |||
| 7a0d7e1b12 | |||
| 1cd2cf2b9a | |||
| 98116fa042 | |||
| d3c6790603 | |||
| c1e3fa5141 | |||
| f319308196 | |||
| 185745b7da | |||
| 7440706e2e | |||
| 0adb29139e | |||
| 2148a068f8 | |||
| e1bb9e5431 | |||
| 8b2039f06a | |||
| 9761faa2d2 | |||
| d5f00a4b0b | |||
| b9fb4b4611 | |||
| 7d76ef0c52 | |||
| ea71a6dd93 | |||
| b9b6ae7e79 | |||
| 20a75aec4b | |||
| 3ad7bf40b5 | |||
| 196e628665 | |||
| 7c61c42eb5 | |||
| 1223b634b7 | |||
| 87913ba0a0 | |||
| eab45a8706 | |||
| a9a7a0889e | |||
| cd2e4016a6 | |||
| 87d72b2a0d | |||
| 4342215c00 | |||
| 7bf7d24f29 | |||
| 4da8d8d297 | |||
| c4eab467ee | |||
| fd50118161 | |||
| cc63aa80b2 | |||
| c95ea7db61 | |||
| f50c240bbe | |||
| 66278e635b | |||
| 74d0ba57e2 | |||
| e00d1357b0 | |||
| b9f87c6cc4 | |||
| 7c9c99bf45 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -62,4 +62,6 @@ nbdist/
|
||||
/tables/
|
||||
*.local.*
|
||||
*.py
|
||||
*.pyc
|
||||
*.pyc
|
||||
*.json
|
||||
*.toml
|
||||
|
||||
20
docs/deleted-menu-backup.sql
Normal file
20
docs/deleted-menu-backup.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- 删除「采购需求」「采购看板」菜单前的备份 生成于脚本 库:klp-oa
|
||||
-- 回滚:执行下面的 INSERT 即可恢复菜单与角色授权
|
||||
|
||||
INSERT INTO sys_menu (menu_id,menu_name,parent_id,order_num,path,component,query_param,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time,update_by,update_time,remark) VALUES (1990706561827045378,'采购需求',1954721010120728578,0,'requirement','erp/requirement/index',NULL,1,0,'C','0','0',NULL,'nested','admin','2025-11-18 17:00:05','admin','2026-02-01 22:39:54','');
|
||||
INSERT INTO sys_menu (menu_id,menu_name,parent_id,order_num,path,component,query_param,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time,update_by,update_time,remark) VALUES (1990706888819179521,'采购看板',1954721010120728578,6,'dashboard','erp/dashboard/index',NULL,1,0,'C','0','0',NULL,'dashboard','admin','2025-11-18 17:01:23','admin','2026-05-08 19:06:02','');
|
||||
INSERT INTO sys_role_menu (role_id,menu_id) VALUES (1993591990145687554,1990706561827045378);
|
||||
INSERT INTO sys_role_menu (role_id,menu_id) VALUES (1993591990145687554,1990706888819179521);
|
||||
|
||||
-- 第二批删除:供应商库/采购订单/收货记录/退货管理/采购汇总
|
||||
INSERT INTO sys_menu (menu_id,menu_name,parent_id,order_num,path,component,query_param,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time,update_by,update_time,remark) VALUES (1955113252714999810,'供应商库',1954721010120728578,1,'supplier','erp/supplier/index',NULL,1,0,'C','0','0',NULL,'people','admin','2025-08-12 11:44:58','admin','2026-02-01 22:40:28','');
|
||||
INSERT INTO sys_menu (menu_id,menu_name,parent_id,order_num,path,component,query_param,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time,update_by,update_time,remark) VALUES (1990705902968995841,'采购订单',1954721010120728578,1,'order','erp/order/index',NULL,1,0,'C','0','0',NULL,'edit','admin','2025-11-18 16:57:27','admin','2025-11-18 17:03:49','');
|
||||
INSERT INTO sys_menu (menu_id,menu_name,parent_id,order_num,path,component,query_param,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time,update_by,update_time,remark) VALUES (1990706263360372737,'收货记录',1954721010120728578,1,'receipt','erp/receipt/index',NULL,1,0,'C','0','1',NULL,'log','admin','2025-11-18 16:58:53','admin','2026-05-08 19:06:09','');
|
||||
INSERT INTO sys_menu (menu_id,menu_name,parent_id,order_num,path,component,query_param,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time,update_by,update_time,remark) VALUES (1990706419627556866,'采购汇总',1954721010120728578,13,'report','erp/report/index',NULL,1,0,'C','0','1',NULL,'druid','admin','2025-11-18 16:59:31','admin','2026-05-08 19:05:51','');
|
||||
INSERT INTO sys_menu (menu_id,menu_name,parent_id,order_num,path,component,query_param,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time,update_by,update_time,remark) VALUES (1990706698213228545,'退货管理',1954721010120728578,5,'return','erp/return/index',NULL,1,0,'C','0','1',NULL,'guide','admin','2025-11-18 17:00:37','admin','2026-05-08 19:06:06','');
|
||||
INSERT INTO sys_role_menu (role_id,menu_id) VALUES (1993591990145687554,1955113252714999810);
|
||||
INSERT INTO sys_role_menu (role_id,menu_id) VALUES (1993591990145687554,1990705902968995841);
|
||||
INSERT INTO sys_role_menu (role_id,menu_id) VALUES (1993591990145687554,1990706263360372737);
|
||||
INSERT INTO sys_role_menu (role_id,menu_id) VALUES (1993591990145687554,1990706419627556866);
|
||||
INSERT INTO sys_role_menu (role_id,menu_id) VALUES (1993591990145687554,1990706698213228545);
|
||||
qin
|
||||
131
docs/purchase-plan-ddl.sql
Normal file
131
docs/purchase-plan-ddl.sql
Normal file
@@ -0,0 +1,131 @@
|
||||
-- 采购计划 (erp_purchase_plan) 相关 DDL
|
||||
-- 在主库 jdbc:mysql://140.143.206.120:13306/klp-oa-test 上执行
|
||||
|
||||
-- 1. 采购计划头
|
||||
CREATE TABLE IF NOT EXISTS `erp_purchase_plan` (
|
||||
`plan_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '计划ID',
|
||||
`plan_no` VARCHAR(64) NOT NULL COMMENT '采购计划号',
|
||||
`plan_status` CHAR(1) NOT NULL DEFAULT '0' COMMENT '计划状态: 0-进行中 1-已完成归档',
|
||||
`audit_status` CHAR(1) NOT NULL DEFAULT '0' COMMENT '审核状态: 0-待审核 1-通过 2-驳回',
|
||||
`audit_opinion` VARCHAR(512) DEFAULT NULL COMMENT '申请/审核意见',
|
||||
`auditor` VARCHAR(64) DEFAULT NULL COMMENT '审核人',
|
||||
`audit_time` DATETIME DEFAULT NULL COMMENT '审核时间',
|
||||
`supplier` VARCHAR(128) DEFAULT NULL COMMENT '供货商',
|
||||
`purchase_date` DATE DEFAULT NULL COMMENT '采购日期',
|
||||
`plan_weight` DECIMAL(14,3) NOT NULL DEFAULT 0 COMMENT '计划总重量(T)',
|
||||
`arrived_weight` DECIMAL(14,3) NOT NULL DEFAULT 0 COMMENT '已到货重量(T)',
|
||||
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0-存在 2-删除',
|
||||
`create_by` VARCHAR(64) DEFAULT NULL,
|
||||
`create_time` DATETIME DEFAULT NULL,
|
||||
`update_by` VARCHAR(64) DEFAULT NULL,
|
||||
`update_time` DATETIME DEFAULT NULL,
|
||||
`remark` VARCHAR(512) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`plan_id`),
|
||||
UNIQUE KEY `uk_plan_no` (`plan_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划头';
|
||||
|
||||
-- 2. 采购计划明细(多规格行,字段对齐 crm_order_item)
|
||||
CREATE TABLE IF NOT EXISTS `erp_purchase_plan_item` (
|
||||
`item_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '明细ID',
|
||||
`plan_id` BIGINT NOT NULL COMMENT '关联计划ID',
|
||||
`product_type` VARCHAR(64) DEFAULT NULL COMMENT '产品(如热轧卷板)',
|
||||
`material` VARCHAR(64) DEFAULT NULL COMMENT '材质',
|
||||
`grade` VARCHAR(64) DEFAULT NULL COMMENT '牌号',
|
||||
`coil_no` VARCHAR(64) DEFAULT NULL COMMENT '卷号',
|
||||
`width` VARCHAR(64) DEFAULT NULL COMMENT '宽度(mm,可为区间文本,对齐 crm_order_item)',
|
||||
`thickness` VARCHAR(64) DEFAULT NULL COMMENT '厚度(mm,可为区间文本)',
|
||||
`width_tolerance` VARCHAR(64) DEFAULT '0' COMMENT '宽度公差(自由文本)',
|
||||
`thickness_tolerance` VARCHAR(64) DEFAULT '0' COMMENT '厚度公差(自由文本)',
|
||||
`weight` DECIMAL(14,3) DEFAULT NULL COMMENT '重量(T)',
|
||||
`quantity` INT DEFAULT NULL COMMENT '数量(件/卷数,来自合同 product_num)',
|
||||
`arrived_weight` DECIMAL(14,3) NOT NULL DEFAULT 0 COMMENT '已到货重量(T),由到货Excel按牌号+规格累加',
|
||||
`item_status` CHAR(1) NOT NULL DEFAULT '0' COMMENT '到货状态: 0-未到货 1-部分到货 2-已到货',
|
||||
`supplier` VARCHAR(128) DEFAULT NULL COMMENT '供货商',
|
||||
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`create_by` VARCHAR(64) DEFAULT NULL,
|
||||
`create_time` DATETIME DEFAULT NULL,
|
||||
`update_by` VARCHAR(64) DEFAULT NULL,
|
||||
`update_time` DATETIME DEFAULT NULL,
|
||||
`remark` VARCHAR(512) DEFAULT NULL,
|
||||
PRIMARY KEY (`item_id`),
|
||||
KEY `idx_plan_id` (`plan_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划明细';
|
||||
|
||||
-- 3. 计划↔销售合同(crm_order) 中间表(多对多,挂合同头)
|
||||
CREATE TABLE IF NOT EXISTS `erp_purchase_plan_contract_rel` (
|
||||
`rel_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '关系ID',
|
||||
`plan_id` BIGINT NOT NULL COMMENT '采购计划ID',
|
||||
`order_id` BIGINT NOT NULL COMMENT '销售合同ID(crm_order.order_id)',
|
||||
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`create_by` VARCHAR(64) DEFAULT NULL,
|
||||
`create_time` DATETIME DEFAULT NULL,
|
||||
`update_by` VARCHAR(64) DEFAULT NULL,
|
||||
`update_time` DATETIME DEFAULT NULL,
|
||||
`remark` VARCHAR(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`rel_id`),
|
||||
KEY `idx_plan_id` (`plan_id`),
|
||||
KEY `idx_order_id` (`order_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划-销售合同关联表';
|
||||
|
||||
-- 4. 到货明细(对应上传的到货 Excel,一行一卷,独立于 WMS)
|
||||
CREATE TABLE IF NOT EXISTS `erp_purchase_plan_delivery` (
|
||||
`delivery_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '到货明细ID',
|
||||
`plan_id` BIGINT NOT NULL COMMENT '关联计划ID',
|
||||
`arrival_date` DATE DEFAULT NULL COMMENT '日期',
|
||||
`grade` VARCHAR(64) DEFAULT NULL COMMENT '牌号',
|
||||
`spec` VARCHAR(64) DEFAULT NULL COMMENT '规格(厚×宽)',
|
||||
`coil_no` VARCHAR(64) DEFAULT NULL COMMENT '卷号',
|
||||
`coil_weight` DECIMAL(14,3) DEFAULT NULL COMMENT '单卷重量(T)',
|
||||
`truck_no` VARCHAR(64) DEFAULT NULL COMMENT '车号',
|
||||
`truck_weight` DECIMAL(14,3) DEFAULT NULL COMMENT '整车数量(T)',
|
||||
`piece_count` INT DEFAULT NULL COMMENT '件数',
|
||||
`sales_code` VARCHAR(64) DEFAULT NULL COMMENT '销售代码',
|
||||
`arrival_station` VARCHAR(64) DEFAULT NULL COMMENT '钢厂到站',
|
||||
`del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
|
||||
`create_by` VARCHAR(64) DEFAULT NULL,
|
||||
`create_time` DATETIME DEFAULT NULL,
|
||||
`update_by` VARCHAR(64) DEFAULT NULL,
|
||||
`update_time` DATETIME DEFAULT NULL,
|
||||
`remark` VARCHAR(512) DEFAULT NULL,
|
||||
PRIMARY KEY (`delivery_id`),
|
||||
KEY `idx_plan_id` (`plan_id`),
|
||||
KEY `idx_coil_no` (`coil_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划到货明细';
|
||||
|
||||
|
||||
-- ============ 菜单 ============
|
||||
-- 采购目录挂在「生产辅助」(path=helper) 下;父 id 按 path 动态解析,兼容不同环境的不同 menu_id。
|
||||
-- 整段可重复执行(叶子菜单用 REPLACE,目录用 存在判断 + 归位 UPDATE)。
|
||||
|
||||
-- 1) 解析「生产辅助」目录 id
|
||||
SET @helper_id = (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE path = 'helper' AND parent_id = 0 LIMIT 1) t);
|
||||
|
||||
-- 2) 确保「采购」目录存在(不存在则在「生产辅助」下创建;用派生表规避同表 INSERT...SELECT 限制)
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT 2100000000000000000, '采购', @helper_id, 50, 'purchase', '', '', 1, 0, 'M', '0', '0', '', 'shopping', 'admin', sysdate(), '采购目录'
|
||||
FROM dual
|
||||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT menu_id FROM sys_menu WHERE path = 'purchase' AND menu_type = 'M') x);
|
||||
|
||||
-- 3) 无论新建还是已存在,确保「采购」目录归位到「生产辅助」下,并设为显示(visible=0,否则其下所有菜单都不会出现在侧边栏)
|
||||
UPDATE sys_menu SET parent_id = @helper_id, visible = '0', status = '0' WHERE path = 'purchase' AND menu_type = 'M';
|
||||
|
||||
-- 4) 解析「采购」目录 id(供下方叶子菜单使用)
|
||||
SET @purchase_id = (SELECT menu_id FROM (SELECT menu_id FROM sys_menu WHERE path = 'purchase' AND menu_type = 'M' LIMIT 1) t);
|
||||
|
||||
-- 5) 采购计划 + 按钮(REPLACE 可重复执行)
|
||||
REPLACE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
|
||||
(2100000000000000001, '采购计划', @purchase_id, 2, 'purchasePlan', 'erp/purchasePlan/index', '', 1, 0, 'C', '0', '0', 'erp:purchasePlan:list', 'form', 'admin', sysdate(), '采购计划菜单'),
|
||||
(2100000000000000002, '采购计划查询', 2100000000000000001, 1, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:query', '#', 'admin', sysdate(), ''),
|
||||
(2100000000000000003, '采购计划新增', 2100000000000000001, 2, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:add', '#', 'admin', sysdate(), ''),
|
||||
(2100000000000000004, '采购计划修改', 2100000000000000001, 3, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:edit', '#', 'admin', sysdate(), ''),
|
||||
(2100000000000000005, '采购计划删除', 2100000000000000001, 4, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:remove', '#', 'admin', sysdate(), ''),
|
||||
(2100000000000000006, '到货导入', 2100000000000000001, 5, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:import', '#', 'admin', sysdate(), '');
|
||||
|
||||
-- 6) 采购审核 + 按钮(REPLACE 可重复执行)
|
||||
REPLACE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
|
||||
(2100000000000000010, '采购审核', @purchase_id, 3, 'purchaseAudit', 'erp/purchaseAudit/index', '', 1, 0, 'C', '0', '0', 'erp:purchasePlan:auditList', 'validCode', 'admin', sysdate(), '采购审核菜单'),
|
||||
(2100000000000000011, '审核操作', 2100000000000000010, 1, '', '', '', 1, 0, 'F', '0', '0', 'erp:purchasePlan:audit', '#', 'admin', sysdate(), '');
|
||||
|
||||
-- 7) 采购进度(计划级到货进度总览)
|
||||
REPLACE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
|
||||
(2100000000000000020, '采购进度', @purchase_id, 4, 'purchaseProgress', 'erp/purchaseProgress/index', '', 1, 0, 'C', '0', '0', 'erp:purchasePlan:list', 'data-line', 'admin', sysdate(), '采购进度总览');
|
||||
@@ -129,6 +129,10 @@
|
||||
<artifactId>klp-cost</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.klp</groupId>
|
||||
<artifactId>klp-flow</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
||||
@@ -36,6 +36,9 @@ CREATE TABLE IF NOT EXISTS wms_furnace_plan_coil (
|
||||
plan_coil_id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
plan_id BIGINT NOT NULL COMMENT '计划ID',
|
||||
coil_id BIGINT NOT NULL COMMENT '钢卷ID',
|
||||
logic_warehouse_id BIGINT NULL COMMENT '逻辑库区去向(钢卷退火后目标逻辑库区)',
|
||||
furnace_level TINYINT(1) NULL COMMENT '炉火层级(1=一层,2=二层,3=三层)',
|
||||
contract_id BIGINT NULL COMMENT '合同ID',
|
||||
del_flag TINYINT DEFAULT 0 COMMENT '删除标记(0正常 1删除)',
|
||||
create_by VARCHAR(64) NULL,
|
||||
update_by VARCHAR(64) NULL,
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.klp.cost.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.cost.domain.vo.CostProdMetricResultVo;
|
||||
import com.klp.cost.domain.bo.CostProdMetricResultBo;
|
||||
import com.klp.cost.service.ICostProdMetricResultService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/cost/prodMetricResult")
|
||||
public class CostProdMetricResultController extends BaseController {
|
||||
|
||||
private final ICostProdMetricResultService iCostProdMetricResultService;
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<CostProdMetricResultVo> list(CostProdMetricResultBo bo, PageQuery pageQuery) {
|
||||
return iCostProdMetricResultService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出生产指标计算结果列表
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(CostProdMetricResultBo bo, HttpServletResponse response) {
|
||||
List<CostProdMetricResultVo> list = iCostProdMetricResultService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "生产指标计算结果", CostProdMetricResultVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取生产指标计算结果详细信息
|
||||
*
|
||||
* @param resultId 主键
|
||||
*/
|
||||
@GetMapping("/{resultId}")
|
||||
public R<CostProdMetricResultVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long resultId) {
|
||||
return R.ok(iCostProdMetricResultService.queryById(resultId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增生产指标计算结果
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody CostProdMetricResultBo bo) {
|
||||
return toAjax(iCostProdMetricResultService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量保存生产指标计算结果(先删除再插入)
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/batch")
|
||||
public R<Void> batchSave(@RequestBody CostProdMetricResultBo bo) {
|
||||
return toAjax(iCostProdMetricResultService.batchSaveWithDelete(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改生产指标计算结果
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody CostProdMetricResultBo bo) {
|
||||
return toAjax(iCostProdMetricResultService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除生产指标计算结果
|
||||
*
|
||||
* @param resultIds 主键串
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{resultIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] resultIds) {
|
||||
return toAjax(iCostProdMetricResultService.deleteWithValidByIds(Arrays.asList(resultIds), true));
|
||||
}
|
||||
}
|
||||
@@ -42,13 +42,21 @@ public class CostProdMetric extends BaseEntity {
|
||||
*/
|
||||
private String metricFormula;
|
||||
/**
|
||||
* 指标计算结果值
|
||||
* 单价
|
||||
*/
|
||||
private BigDecimal metricValue;
|
||||
/**
|
||||
* 是否使用单价 0=否 1=是
|
||||
*/
|
||||
private Integer usePrice;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
private String tags;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.klp.cost.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果对象 cost_prod_metric_result
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("cost_prod_metric_result")
|
||||
public class CostProdMetricResult extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "result_id")
|
||||
private Long resultId;
|
||||
/**
|
||||
* 报表ID(关联生产日报)
|
||||
*/
|
||||
private Long reportId;
|
||||
/**
|
||||
* 指标ID(关联cost_prod_metric)
|
||||
*/
|
||||
private Long metricId;
|
||||
/**
|
||||
* 计算日期
|
||||
*/
|
||||
private Date metricDate;
|
||||
/**
|
||||
* 班组
|
||||
*/
|
||||
private String teamGroup;
|
||||
/**
|
||||
* 计算值
|
||||
*/
|
||||
private BigDecimal calcValue;
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
private String tags;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -44,14 +44,23 @@ public class CostProdMetricBo extends BaseEntity {
|
||||
private String metricFormula;
|
||||
|
||||
/**
|
||||
* 指标计算结果值
|
||||
* 单价
|
||||
*/
|
||||
private BigDecimal metricValue;
|
||||
|
||||
/**
|
||||
* 是否使用单价 0=否 1=是
|
||||
*/
|
||||
private Integer usePrice;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
private String tags;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
package com.klp.cost.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果业务对象 cost_prod_metric_result
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class CostProdMetricResultBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
private Long resultId;
|
||||
|
||||
/**
|
||||
* 报表ID(关联生产日报)
|
||||
*/
|
||||
private Long reportId;
|
||||
|
||||
/**
|
||||
* 指标ID(关联cost_prod_metric)
|
||||
*/
|
||||
private Long metricId;
|
||||
|
||||
/**
|
||||
* 计算日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date metricDate;
|
||||
|
||||
/**
|
||||
* 班组
|
||||
*/
|
||||
private String teamGroup;
|
||||
|
||||
/**
|
||||
* 计算值
|
||||
*/
|
||||
private BigDecimal calcValue;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
private String tags;
|
||||
|
||||
/**
|
||||
* 要删除的主键ID集合
|
||||
*/
|
||||
private List<Long> resultIds;
|
||||
|
||||
/**
|
||||
* 要批量插入的数据集合
|
||||
*/
|
||||
private List<CostProdMetricResultBo> prodMetricResultList;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.klp.cost.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 生产指标计算结果视图对象 cost_prod_metric_result
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class CostProdMetricResultVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long resultId;
|
||||
|
||||
/**
|
||||
* 报表ID(关联生产日报)
|
||||
*/
|
||||
@ExcelProperty(value = "报表ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "关=联生产日报")
|
||||
private Long reportId;
|
||||
|
||||
/**
|
||||
* 指标ID(关联cost_prod_metric)
|
||||
*/
|
||||
@ExcelProperty(value = "指标ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "关=联cost_prod_metric")
|
||||
private Long metricId;
|
||||
|
||||
/**
|
||||
* 计算日期
|
||||
*/
|
||||
@ExcelProperty(value = "计算日期")
|
||||
private Date metricDate;
|
||||
|
||||
/**
|
||||
* 班组
|
||||
*/
|
||||
@ExcelProperty(value = "班组")
|
||||
private String teamGroup;
|
||||
|
||||
/**
|
||||
* 计算值
|
||||
*/
|
||||
@ExcelProperty(value = "计算值")
|
||||
private BigDecimal calcValue;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
@ExcelProperty(value = "标签")
|
||||
private String tags;
|
||||
|
||||
|
||||
}
|
||||
@@ -52,16 +52,27 @@ public class CostProdMetricVo {
|
||||
private String metricFormula;
|
||||
|
||||
/**
|
||||
* 指标计算结果值
|
||||
* 单价
|
||||
*/
|
||||
@ExcelProperty(value = "指标计算结果值")
|
||||
@ExcelProperty(value = "单价")
|
||||
private BigDecimal metricValue;
|
||||
|
||||
/**
|
||||
* 是否使用单价 0=否 1=是
|
||||
*/
|
||||
@ExcelProperty(value = "是否使用单价")
|
||||
private Integer usePrice;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
@ExcelProperty(value = "标签")
|
||||
private String tags;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.cost.mapper;
|
||||
|
||||
import com.klp.cost.domain.CostProdMetricResult;
|
||||
import com.klp.cost.domain.vo.CostProdMetricResultVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
public interface CostProdMetricResultMapper extends BaseMapperPlus<CostProdMetricResultMapper, CostProdMetricResult, CostProdMetricResultVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.klp.cost.service;
|
||||
|
||||
import com.klp.cost.domain.CostProdMetricResult;
|
||||
import com.klp.cost.domain.vo.CostProdMetricResultVo;
|
||||
import com.klp.cost.domain.bo.CostProdMetricResultBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
public interface ICostProdMetricResultService {
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果
|
||||
*/
|
||||
CostProdMetricResultVo queryById(Long resultId);
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
TableDataInfo<CostProdMetricResultVo> queryPageList(CostProdMetricResultBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
List<CostProdMetricResultVo> queryList(CostProdMetricResultBo bo);
|
||||
|
||||
/**
|
||||
* 新增生产指标计算结果
|
||||
*/
|
||||
Boolean insertByBo(CostProdMetricResultBo bo);
|
||||
|
||||
/**
|
||||
* 修改生产指标计算结果
|
||||
*/
|
||||
Boolean updateByBo(CostProdMetricResultBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除生产指标计算结果信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 批量保存生产指标计算结果(先删除再插入)
|
||||
*/
|
||||
Boolean batchSaveWithDelete(CostProdMetricResultBo bo);
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
package com.klp.cost.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import com.klp.cost.domain.bo.CostProdMetricResultBo;
|
||||
import com.klp.cost.domain.vo.CostProdMetricResultVo;
|
||||
import com.klp.cost.domain.CostProdMetricResult;
|
||||
import com.klp.cost.mapper.CostProdMetricResultMapper;
|
||||
import com.klp.cost.service.ICostProdMetricResultService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class CostProdMetricResultServiceImpl implements ICostProdMetricResultService {
|
||||
|
||||
private final CostProdMetricResultMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果
|
||||
*/
|
||||
@Override
|
||||
public CostProdMetricResultVo queryById(Long resultId){
|
||||
return baseMapper.selectVoById(resultId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<CostProdMetricResultVo> queryPageList(CostProdMetricResultBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<CostProdMetricResult> lqw = buildQueryWrapper(bo);
|
||||
Page<CostProdMetricResultVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
@Override
|
||||
public List<CostProdMetricResultVo> queryList(CostProdMetricResultBo bo) {
|
||||
LambdaQueryWrapper<CostProdMetricResult> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<CostProdMetricResult> buildQueryWrapper(CostProdMetricResultBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<CostProdMetricResult> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getReportId() != null, CostProdMetricResult::getReportId, bo.getReportId());
|
||||
lqw.eq(bo.getMetricId() != null, CostProdMetricResult::getMetricId, bo.getMetricId());
|
||||
lqw.eq(bo.getMetricDate() != null, CostProdMetricResult::getMetricDate, bo.getMetricDate());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getTeamGroup()), CostProdMetricResult::getTeamGroup, bo.getTeamGroup());
|
||||
lqw.eq(bo.getCalcValue() != null, CostProdMetricResult::getCalcValue, bo.getCalcValue());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getTags()), CostProdMetricResult::getTags, bo.getTags());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增生产指标计算结果
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(CostProdMetricResultBo bo) {
|
||||
CostProdMetricResult add = BeanUtil.toBean(bo, CostProdMetricResult.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setResultId(add.getResultId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改生产指标计算结果
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(CostProdMetricResultBo bo) {
|
||||
CostProdMetricResult update = BeanUtil.toBean(bo, CostProdMetricResult.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(CostProdMetricResult entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除生产指标计算结果
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量保存(先删除再插入)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean batchSaveWithDelete(CostProdMetricResultBo bo) {
|
||||
if (CollUtil.isNotEmpty(bo.getProdMetricResultList())) {
|
||||
if (CollUtil.isNotEmpty(bo.getResultIds())) {
|
||||
baseMapper.deleteBatchIds(bo.getResultIds());
|
||||
}
|
||||
List<CostProdMetricResult> list = bo.getProdMetricResultList().stream()
|
||||
.map(item -> BeanUtil.toBean(item, CostProdMetricResult.class))
|
||||
.collect(Collectors.toList());
|
||||
return baseMapper.insertBatch(list);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -66,6 +66,8 @@ public class CostProdMetricServiceImpl implements ICostProdMetricService {
|
||||
lqw.like(StringUtils.isNotBlank(bo.getMetricName()), CostProdMetric::getMetricName, bo.getMetricName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getMetricFormula()), CostProdMetric::getMetricFormula, bo.getMetricFormula());
|
||||
lqw.eq(bo.getMetricValue() != null, CostProdMetric::getMetricValue, bo.getMetricValue());
|
||||
lqw.eq(bo.getUsePrice() != null, CostProdMetric::getUsePrice, bo.getUsePrice());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getTags()), CostProdMetric::getTags, bo.getTags());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,7 +71,10 @@ public class CostProdReportServiceImpl implements ICostProdReportService {
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getLineType()), CostProdReport::getLineType, bo.getLineType());
|
||||
lqw.eq(bo.getInputWeight() != null, CostProdReport::getInputWeight, bo.getInputWeight());
|
||||
lqw.eq(bo.getOutputWeight() != null, CostProdReport::getOutputWeight, bo.getOutputWeight());
|
||||
lqw.apply(bo.getReportDate() != null, "DATE_FORMAT(report_date, '%Y-%m') = {0}", bo.getReportDate());
|
||||
if (bo.getReportDate() != null) {
|
||||
String monthStr = new java.text.SimpleDateFormat("yyyy-MM").format(bo.getReportDate());
|
||||
lqw.apply("DATE_FORMAT(report_date, '%Y-%m') = {0}", monthStr);
|
||||
}
|
||||
return lqw;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="metricName" column="metric_name"/>
|
||||
<result property="metricFormula" column="metric_formula"/>
|
||||
<result property="metricValue" column="metric_value"/>
|
||||
<result property="usePrice" column="use_price"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="tags" column="tags"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?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.klp.cost.mapper.CostProdMetricResultMapper">
|
||||
|
||||
<resultMap type="com.klp.cost.domain.CostProdMetricResult" id="CostProdMetricResultResult">
|
||||
<result property="resultId" column="result_id"/>
|
||||
<result property="reportId" column="report_id"/>
|
||||
<result property="metricId" column="metric_id"/>
|
||||
<result property="metricDate" column="metric_date"/>
|
||||
<result property="teamGroup" column="team_group"/>
|
||||
<result property="calcValue" column="calc_value"/>
|
||||
<result property="tags" column="tags"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -12,4 +12,9 @@ import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
*/
|
||||
public interface CrmCustomerMapper extends BaseMapperPlus<CrmCustomerMapper, CrmCustomer, CrmCustomerVo> {
|
||||
|
||||
/**
|
||||
* 查询当前最大的customer_code,用于自动生成新编码
|
||||
*/
|
||||
String selectMaxCustomerCode();
|
||||
|
||||
}
|
||||
|
||||
@@ -91,6 +91,25 @@ public class CrmCustomerServiceImpl implements ICrmCustomerService {
|
||||
@Override
|
||||
public Boolean insertByBo(CrmCustomerBo bo) {
|
||||
CrmCustomer add = BeanUtil.toBean(bo, CrmCustomer.class);
|
||||
// 自动生成customer_code:查询最大编码并加1
|
||||
if (StringUtils.isBlank(add.getCustomerCode())) {
|
||||
String maxCode = baseMapper.selectMaxCustomerCode();
|
||||
if (StringUtils.isBlank(maxCode)) {
|
||||
add.setCustomerCode("00001");
|
||||
} else {
|
||||
// 提取末尾数字后缀并递增,支持纯数字("00001")和带前缀("KH00001")两种格式
|
||||
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("^(.*?)(\\d+)$");
|
||||
java.util.regex.Matcher matcher = pattern.matcher(maxCode);
|
||||
if (matcher.matches()) {
|
||||
String prefix = matcher.group(1);
|
||||
String numStr = matcher.group(2);
|
||||
long num = Long.parseLong(numStr) + 1;
|
||||
add.setCustomerCode(prefix + String.format("%0" + numStr.length() + "d", num));
|
||||
} else {
|
||||
add.setCustomerCode(maxCode + "1");
|
||||
}
|
||||
}
|
||||
}
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
|
||||
@@ -107,6 +107,12 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
extracted(records);
|
||||
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
private void extracted(List<CrmOrderVo> records) {
|
||||
Set<String> userNames = records.stream()
|
||||
.flatMap(v -> java.util.stream.Stream.of(v.getCreateBy(), v.getUpdateBy()))
|
||||
.filter(StringUtils::isNotBlank)
|
||||
@@ -178,8 +184,6 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
private QueryWrapper<CrmOrder> buildQueryWrapperPlus(CrmOrderBo bo) {
|
||||
@@ -262,7 +266,9 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
|
||||
@Override
|
||||
public List<CrmOrderVo> queryList(CrmOrderBo bo) {
|
||||
QueryWrapper<CrmOrder> lqw = buildQueryWrapperPlus(bo);
|
||||
return baseMapper.selectVoPagePlus(lqw);
|
||||
List<CrmOrderVo> crmOrderVos = baseMapper.selectVoPagePlus(lqw);
|
||||
extracted(crmOrderVos);
|
||||
return crmOrderVos;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -285,9 +291,37 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(CrmOrderBo bo) {
|
||||
// 查询旧订单获取原销售员和原合同编号,用于判断是否需要同步钢卷
|
||||
CrmOrder oldOrder = null;
|
||||
String oldSalesman = null;
|
||||
String oldContractCode = null;
|
||||
if (bo.getOrderId() != null) {
|
||||
oldOrder = baseMapper.selectById(bo.getOrderId());
|
||||
if (oldOrder != null) {
|
||||
oldSalesman = oldOrder.getSalesman();
|
||||
oldContractCode = oldOrder.getContractCode();
|
||||
}
|
||||
}
|
||||
|
||||
CrmOrder update = BeanUtil.toBean(bo, CrmOrder.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
boolean result = baseMapper.updateById(update) > 0;
|
||||
|
||||
// 如果销售员或合同编号变更,同步更新所有关联钢卷
|
||||
if (result && oldOrder != null) {
|
||||
String newSalesman = update.getSalesman();
|
||||
String newContractCode = update.getContractCode();
|
||||
boolean salesmanChanged = !Objects.equals(oldSalesman, newSalesman);
|
||||
boolean contractCodeChanged = !Objects.equals(oldContractCode, newContractCode);
|
||||
if (salesmanChanged || contractCodeChanged) {
|
||||
coilContractRelMapper.updateCoilSaleNameByOrderId(
|
||||
bo.getOrderId(),
|
||||
StringUtils.isNotBlank(newSalesman) ? newSalesman : oldSalesman,
|
||||
StringUtils.isNotBlank(newContractCode) ? newContractCode : oldContractCode);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -23,5 +23,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="selectMaxCustomerCode" resultType="String">
|
||||
SELECT customer_code FROM crm_customer WHERE del_flag = 0 ORDER BY LENGTH(customer_code) DESC, customer_code DESC LIMIT 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
package com.klp.erp.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.erp.domain.bo.ErpPurchasePlanAuditBo;
|
||||
import com.klp.erp.domain.bo.ErpPurchasePlanBo;
|
||||
import com.klp.erp.domain.vo.ErpContractOptionVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanDeliveryVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanItemVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanVo;
|
||||
import com.klp.erp.service.IErpPurchasePlanService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 采购计划
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/erp/purchasePlan")
|
||||
public class ErpPurchasePlanController extends BaseController {
|
||||
|
||||
private final IErpPurchasePlanService iErpPurchasePlanService;
|
||||
|
||||
/** 查询采购计划列表 */
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<ErpPurchasePlanVo> list(ErpPurchasePlanBo bo, PageQuery pageQuery) {
|
||||
return iErpPurchasePlanService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/** 总体到货进度统计(已完成 N / 共 M) */
|
||||
@GetMapping("/statistics")
|
||||
public R<Map<String, Object>> statistics(ErpPurchasePlanBo bo) {
|
||||
return R.ok(iErpPurchasePlanService.statistics(bo));
|
||||
}
|
||||
|
||||
/** 导出采购计划列表 */
|
||||
@Log(title = "采购计划", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(ErpPurchasePlanBo bo, HttpServletResponse response) {
|
||||
List<ErpPurchasePlanVo> list = iErpPurchasePlanService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "采购计划", ErpPurchasePlanVo.class, response);
|
||||
}
|
||||
|
||||
/** 获取采购计划详细信息 */
|
||||
@GetMapping("/{planId}")
|
||||
public R<ErpPurchasePlanVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long planId) {
|
||||
return R.ok(iErpPurchasePlanService.queryById(planId));
|
||||
}
|
||||
|
||||
/** 按销售合同取明细(选合同自动带出明细:1/2/3合同 -> 1/2/3/4明细) */
|
||||
@GetMapping("/itemsByOrders")
|
||||
public R<List<ErpPurchasePlanItemVo>> itemsByOrders(@RequestParam("orderIds") List<Long> orderIds) {
|
||||
return R.ok(iErpPurchasePlanService.queryItemsByOrders(orderIds));
|
||||
}
|
||||
|
||||
/** 合同列表(左侧):crm_order + 每个合同已有的采购计划数 */
|
||||
@GetMapping("/contracts")
|
||||
public TableDataInfo<ErpContractOptionVo> contracts(@RequestParam(value = "keyword", required = false) String keyword,
|
||||
PageQuery pageQuery) {
|
||||
return iErpPurchasePlanService.queryContractPage(keyword, pageQuery);
|
||||
}
|
||||
|
||||
/** 某合同下的所有采购计划 */
|
||||
@GetMapping("/byContract/{orderId}")
|
||||
public R<List<ErpPurchasePlanVo>> byContract(@PathVariable Long orderId) {
|
||||
return R.ok(iErpPurchasePlanService.queryPlansByContract(orderId));
|
||||
}
|
||||
|
||||
/** 新增采购计划 */
|
||||
@Log(title = "采购计划", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpPurchasePlanBo bo) {
|
||||
return toAjax(iErpPurchasePlanService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/** 修改采购计划 */
|
||||
@Log(title = "采购计划", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpPurchasePlanBo bo) {
|
||||
return toAjax(iErpPurchasePlanService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/** 审核(通过/驳回 + 申请意见) */
|
||||
@Log(title = "采购计划", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/audit")
|
||||
public R<Void> audit(@Validated @RequestBody ErpPurchasePlanAuditBo bo) {
|
||||
return toAjax(iErpPurchasePlanService.audit(bo, getUsername()));
|
||||
}
|
||||
|
||||
/** 送审 / 重新送审 */
|
||||
@Log(title = "采购计划", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/submit/{planId}")
|
||||
public R<Void> submit(@NotNull(message = "主键不能为空") @PathVariable Long planId) {
|
||||
return toAjax(iErpPurchasePlanService.submitForAudit(planId));
|
||||
}
|
||||
|
||||
/** 删除采购计划 */
|
||||
@Log(title = "采购计划", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{planIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] planIds) {
|
||||
return toAjax(iErpPurchasePlanService.deleteWithValidByIds(Arrays.asList(planIds), true));
|
||||
}
|
||||
|
||||
/** 导入到货 Excel */
|
||||
@Log(title = "采购计划-到货", businessType = BusinessType.IMPORT)
|
||||
@PostMapping(value = "/{planId}/importDelivery", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
public R<Map<String, Object>> importDelivery(@PathVariable Long planId,
|
||||
@RequestPart("file") MultipartFile file) throws Exception {
|
||||
Map<String, Object> result = iErpPurchasePlanService.importDelivery(planId, file.getInputStream(), getUsername());
|
||||
return R.ok(String.valueOf(result.get("message")), result);
|
||||
}
|
||||
|
||||
/** 查询某计划的到货明细 */
|
||||
@GetMapping("/{planId}/delivery")
|
||||
public R<List<ErpPurchasePlanDeliveryVo>> deliveryList(@PathVariable Long planId) {
|
||||
return R.ok(iErpPurchasePlanService.queryDeliveryList(planId));
|
||||
}
|
||||
|
||||
/** 删除到货明细 */
|
||||
@Log(title = "采购计划-到货", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/delivery/{deliveryId}")
|
||||
public R<Void> deleteDelivery(@PathVariable Long deliveryId) {
|
||||
return toAjax(iErpPurchasePlanService.deleteDelivery(deliveryId));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购计划头对象 erp_purchase_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_purchase_plan")
|
||||
public class ErpPurchasePlan extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 计划ID */
|
||||
@TableId(value = "plan_id")
|
||||
private Long planId;
|
||||
|
||||
/** 采购计划号 */
|
||||
private String planNo;
|
||||
|
||||
/** 计划状态: 0-进行中 1-已完成归档 */
|
||||
private String planStatus;
|
||||
|
||||
/** 审核状态: 0-待审核 1-通过 2-驳回 */
|
||||
private String auditStatus;
|
||||
|
||||
/** 申请/审核意见 */
|
||||
private String auditOpinion;
|
||||
|
||||
/** 审核人 */
|
||||
private String auditor;
|
||||
|
||||
/** 审核时间 */
|
||||
private Date auditTime;
|
||||
|
||||
/** 供货商 */
|
||||
private String supplier;
|
||||
|
||||
/** 采购日期 */
|
||||
private Date purchaseDate;
|
||||
|
||||
/** 计划总重量(T) */
|
||||
private BigDecimal planWeight;
|
||||
|
||||
/** 已到货重量(T) */
|
||||
private BigDecimal arrivedWeight;
|
||||
|
||||
/** 删除标志 */
|
||||
@TableLogic
|
||||
private String delFlag;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购计划审核日志(每次审核留痕)
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-25
|
||||
*/
|
||||
@Data
|
||||
@TableName("erp_purchase_plan_audit_log")
|
||||
public class ErpPurchasePlanAuditLog implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "log_id")
|
||||
private Long logId;
|
||||
|
||||
private Long planId;
|
||||
|
||||
/** 审核结果: 1-通过 2-驳回 */
|
||||
private String auditStatus;
|
||||
|
||||
/** 审核/驳回意见 */
|
||||
private String auditOpinion;
|
||||
|
||||
private String auditor;
|
||||
|
||||
private Date auditTime;
|
||||
|
||||
private Date createTime;
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 采购计划-销售合同关联对象 erp_purchase_plan_contract_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_purchase_plan_contract_rel")
|
||||
public class ErpPurchasePlanContractRel extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 关系ID */
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
|
||||
/** 采购计划ID */
|
||||
private Long planId;
|
||||
|
||||
/** 销售合同ID(crm_order.order_id) */
|
||||
private Long orderId;
|
||||
|
||||
/** 删除标志 */
|
||||
@TableLogic
|
||||
private String delFlag;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购计划到货明细对象 erp_purchase_plan_delivery
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_purchase_plan_delivery")
|
||||
public class ErpPurchasePlanDelivery extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 到货明细ID */
|
||||
@TableId(value = "delivery_id")
|
||||
private Long deliveryId;
|
||||
|
||||
/** 关联计划ID */
|
||||
private Long planId;
|
||||
|
||||
/** 日期 */
|
||||
private Date arrivalDate;
|
||||
|
||||
/** 牌号 */
|
||||
private String grade;
|
||||
|
||||
/** 规格(厚×宽) */
|
||||
private String spec;
|
||||
|
||||
/** 卷号 */
|
||||
private String coilNo;
|
||||
|
||||
/** 单卷重量(T) */
|
||||
private BigDecimal coilWeight;
|
||||
|
||||
/** 车号 */
|
||||
private String truckNo;
|
||||
|
||||
/** 整车数量(T) */
|
||||
private BigDecimal truckWeight;
|
||||
|
||||
/** 件数 */
|
||||
private Integer pieceCount;
|
||||
|
||||
/** 销售代码 */
|
||||
private String salesCode;
|
||||
|
||||
/** 钢厂到站 */
|
||||
private String arrivalStation;
|
||||
|
||||
/** 删除标志 */
|
||||
@TableLogic
|
||||
private String delFlag;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购计划明细对象 erp_purchase_plan_item
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_purchase_plan_item")
|
||||
public class ErpPurchasePlanItem extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 明细ID */
|
||||
@TableId(value = "item_id")
|
||||
private Long itemId;
|
||||
|
||||
/** 关联计划ID */
|
||||
private Long planId;
|
||||
|
||||
/** 产品(如热轧卷板) */
|
||||
private String productType;
|
||||
|
||||
/** 材质 */
|
||||
private String material;
|
||||
|
||||
/** 牌号 */
|
||||
private String grade;
|
||||
|
||||
/** 卷号 */
|
||||
private String coilNo;
|
||||
|
||||
/** 宽度(mm,可为区间文本) */
|
||||
private String width;
|
||||
|
||||
/** 厚度(mm,可为区间文本) */
|
||||
private String thickness;
|
||||
|
||||
/** 宽度公差 */
|
||||
private String widthTolerance;
|
||||
|
||||
/** 厚度公差 */
|
||||
private String thicknessTolerance;
|
||||
|
||||
/** 重量(T) */
|
||||
private BigDecimal weight;
|
||||
|
||||
/** 数量(件/卷数) */
|
||||
private Integer quantity;
|
||||
|
||||
/** 已到货重量(T),由到货Excel按牌号+规格累加 */
|
||||
private BigDecimal arrivedWeight;
|
||||
|
||||
/** 到货状态: 0-未到货 1-部分到货 2-已到货 */
|
||||
private String itemStatus;
|
||||
|
||||
/** 供货商 */
|
||||
private String supplier;
|
||||
|
||||
/** 删除标志 */
|
||||
@TableLogic
|
||||
private String delFlag;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 采购计划审核业务对象
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
public class ErpPurchasePlanAuditBo {
|
||||
|
||||
/** 计划ID */
|
||||
@NotNull(message = "计划ID不能为空")
|
||||
private Long planId;
|
||||
|
||||
/** 审核结果: 1-通过 2-驳回 */
|
||||
@NotNull(message = "审核结果不能为空")
|
||||
private String auditStatus;
|
||||
|
||||
/** 申请/审核意见 */
|
||||
private String auditOpinion;
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 采购计划头业务对象 erp_purchase_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ErpPurchasePlanBo extends BaseEntity {
|
||||
|
||||
/** 计划ID */
|
||||
@NotNull(message = "计划ID不能为空", groups = {EditGroup.class})
|
||||
private Long planId;
|
||||
|
||||
/** 采购计划号(为空时自动生成) */
|
||||
private String planNo;
|
||||
|
||||
/** 综合搜索关键字:计划号 / 供货商 / 合同号 */
|
||||
private String keyword;
|
||||
|
||||
/** 计划状态: 0-进行中 1-已完成归档 */
|
||||
private String planStatus;
|
||||
|
||||
/** 审核状态: 0-待审核 1-通过 2-驳回 */
|
||||
private String auditStatus;
|
||||
|
||||
/** 供货商 */
|
||||
private String supplier;
|
||||
|
||||
/** 采购日期 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date purchaseDate;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
|
||||
/** 明细行 */
|
||||
private List<ErpPurchasePlanItemBo> items;
|
||||
|
||||
/** 关联的销售合同ID列表(crm_order.order_id) */
|
||||
private List<Long> orderIds;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购计划明细业务对象 erp_purchase_plan_item
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ErpPurchasePlanItemBo extends BaseEntity {
|
||||
|
||||
/** 明细ID */
|
||||
private Long itemId;
|
||||
|
||||
/** 关联计划ID */
|
||||
private Long planId;
|
||||
|
||||
/** 产品(如热轧卷板) */
|
||||
private String productType;
|
||||
|
||||
/** 材质 */
|
||||
private String material;
|
||||
|
||||
/** 牌号 */
|
||||
private String grade;
|
||||
|
||||
/** 卷号 */
|
||||
private String coilNo;
|
||||
|
||||
/** 宽度(mm,可为区间文本) */
|
||||
private String width;
|
||||
|
||||
/** 厚度(mm,可为区间文本) */
|
||||
private String thickness;
|
||||
|
||||
/** 宽度公差 */
|
||||
private String widthTolerance;
|
||||
|
||||
/** 厚度公差 */
|
||||
private String thicknessTolerance;
|
||||
|
||||
/** 重量(T) */
|
||||
private BigDecimal weight;
|
||||
|
||||
/** 数量(件/卷数) */
|
||||
private Integer quantity;
|
||||
|
||||
/** 供货商 */
|
||||
private String supplier;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购计划左侧「合同列表」视图对象:crm_order + 该合同已有的采购计划数。
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-25
|
||||
*/
|
||||
@Data
|
||||
public class ErpContractOptionVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 销售合同ID(crm_order.order_id) */
|
||||
private Long orderId;
|
||||
|
||||
/** 订单编号 */
|
||||
private String orderCode;
|
||||
|
||||
/** 合同号 */
|
||||
private String contractCode;
|
||||
|
||||
/** 合同名称 */
|
||||
private String contractName;
|
||||
|
||||
/** 需方(客户) */
|
||||
private String customer;
|
||||
|
||||
/** 供方 */
|
||||
private String supplier;
|
||||
|
||||
/** 订单总金额 */
|
||||
private BigDecimal orderAmount;
|
||||
|
||||
/** 销售员 */
|
||||
private String salesman;
|
||||
|
||||
/** 该合同已挂接的采购计划数 */
|
||||
private Integer planCount;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购计划审核日志视图对象
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-25
|
||||
*/
|
||||
@Data
|
||||
public class ErpPurchasePlanAuditLogVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long logId;
|
||||
|
||||
private Long planId;
|
||||
|
||||
/** 审核结果: 1-通过 2-驳回 */
|
||||
private String auditStatus;
|
||||
|
||||
private String auditOpinion;
|
||||
|
||||
private String auditor;
|
||||
|
||||
private Date auditTime;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购计划到货导入模板(对应到货 Excel,一行一卷)
|
||||
*
|
||||
* 列:日期 牌号 规格 卷号 单卷重量 车号 数量 件数 销售 钢厂到站
|
||||
* 注:车号/数量/件数 为合并单元格,仅首行有值,导入时向下填充。
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpPurchasePlanDeliveryImportVo {
|
||||
|
||||
@ExcelProperty("日期")
|
||||
private String arrivalDate;
|
||||
|
||||
@ExcelProperty("牌号")
|
||||
private String grade;
|
||||
|
||||
@ExcelProperty("规格")
|
||||
private String spec;
|
||||
|
||||
@ExcelProperty("卷号")
|
||||
private String coilNo;
|
||||
|
||||
@ExcelProperty("单卷重量")
|
||||
private BigDecimal coilWeight;
|
||||
|
||||
@ExcelProperty("车号")
|
||||
private String truckNo;
|
||||
|
||||
@ExcelProperty("数量")
|
||||
private BigDecimal truckWeight;
|
||||
|
||||
@ExcelProperty("件数")
|
||||
private Integer pieceCount;
|
||||
|
||||
@ExcelProperty("销售")
|
||||
private String salesCode;
|
||||
|
||||
@ExcelProperty("钢厂到站")
|
||||
private String arrivalStation;
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购计划到货明细视图对象 erp_purchase_plan_delivery
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpPurchasePlanDeliveryVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty(value = "到货明细ID")
|
||||
private Long deliveryId;
|
||||
|
||||
private Long planId;
|
||||
|
||||
@ExcelProperty(value = "日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date arrivalDate;
|
||||
|
||||
@ExcelProperty(value = "牌号")
|
||||
private String grade;
|
||||
|
||||
@ExcelProperty(value = "规格")
|
||||
private String spec;
|
||||
|
||||
@ExcelProperty(value = "卷号")
|
||||
private String coilNo;
|
||||
|
||||
@ExcelProperty(value = "单卷重量")
|
||||
private BigDecimal coilWeight;
|
||||
|
||||
@ExcelProperty(value = "车号")
|
||||
private String truckNo;
|
||||
|
||||
@ExcelProperty(value = "数量")
|
||||
private BigDecimal truckWeight;
|
||||
|
||||
@ExcelProperty(value = "件数")
|
||||
private Integer pieceCount;
|
||||
|
||||
@ExcelProperty(value = "销售")
|
||||
private String salesCode;
|
||||
|
||||
@ExcelProperty(value = "钢厂到站")
|
||||
private String arrivalStation;
|
||||
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购计划明细视图对象 erp_purchase_plan_item
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpPurchasePlanItemVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty(value = "明细ID")
|
||||
private Long itemId;
|
||||
|
||||
private Long planId;
|
||||
|
||||
@ExcelProperty(value = "产品")
|
||||
private String productType;
|
||||
|
||||
@ExcelProperty(value = "材质")
|
||||
private String material;
|
||||
|
||||
@ExcelProperty(value = "牌号")
|
||||
private String grade;
|
||||
|
||||
@ExcelProperty(value = "卷号")
|
||||
private String coilNo;
|
||||
|
||||
@ExcelProperty(value = "宽度")
|
||||
private String width;
|
||||
|
||||
@ExcelProperty(value = "厚度")
|
||||
private String thickness;
|
||||
|
||||
@ExcelProperty(value = "宽度公差")
|
||||
private String widthTolerance;
|
||||
|
||||
@ExcelProperty(value = "厚度公差")
|
||||
private String thicknessTolerance;
|
||||
|
||||
@ExcelProperty(value = "重量(T)")
|
||||
private BigDecimal weight;
|
||||
|
||||
@ExcelProperty(value = "数量")
|
||||
private Integer quantity;
|
||||
|
||||
@ExcelProperty(value = "已到货(T)")
|
||||
private BigDecimal arrivedWeight;
|
||||
|
||||
/** 到货状态: 0未到货 1部分到货 2已到货 */
|
||||
private String itemStatus;
|
||||
|
||||
@ExcelProperty(value = "供货商")
|
||||
private String supplier;
|
||||
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 采购计划头视图对象 erp_purchase_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpPurchasePlanVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty(value = "计划ID")
|
||||
private Long planId;
|
||||
|
||||
@ExcelProperty(value = "采购计划号")
|
||||
private String planNo;
|
||||
|
||||
/** 计划状态: 0-进行中 1-已完成归档 */
|
||||
@ExcelProperty(value = "计划状态")
|
||||
private String planStatus;
|
||||
|
||||
/** 审核状态: 0-待审核 1-通过 2-驳回 */
|
||||
@ExcelProperty(value = "审核状态")
|
||||
private String auditStatus;
|
||||
|
||||
@ExcelProperty(value = "审核意见")
|
||||
private String auditOpinion;
|
||||
|
||||
@ExcelProperty(value = "审核人")
|
||||
private String auditor;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@ExcelProperty(value = "审核时间")
|
||||
private Date auditTime;
|
||||
|
||||
@ExcelProperty(value = "供货商")
|
||||
private String supplier;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@ExcelProperty(value = "采购日期")
|
||||
private Date purchaseDate;
|
||||
|
||||
@ExcelProperty(value = "计划总重量(T)")
|
||||
private BigDecimal planWeight;
|
||||
|
||||
@ExcelProperty(value = "已到货重量(T)")
|
||||
private BigDecimal arrivedWeight;
|
||||
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/** 到货进度百分比(0-100) */
|
||||
private BigDecimal progress;
|
||||
|
||||
/** 明细行 */
|
||||
private List<ErpPurchasePlanItemVo> items;
|
||||
|
||||
/** 关联销售合同ID */
|
||||
private List<Long> orderIds;
|
||||
|
||||
/** 关联销售合同编号(展示用) */
|
||||
private List<String> contractCodes;
|
||||
|
||||
/** 审核历史(每次审核/驳回留痕) */
|
||||
private List<ErpPurchasePlanAuditLogVo> auditLogs;
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package com.klp.erp.listener;
|
||||
|
||||
import com.alibaba.excel.context.AnalysisContext;
|
||||
import com.alibaba.excel.event.AnalysisEventListener;
|
||||
import com.alibaba.excel.exception.ExcelDataConvertException;
|
||||
import com.klp.common.exception.ServiceException;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanDeliveryImportVo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 到货 Excel 导入监听器
|
||||
* <p>
|
||||
* 负责:表头/列名校验、逐行数值转换异常收集(不中断),供 Service 统一反馈。
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public class ErpDeliveryExcelListener extends AnalysisEventListener<ErpPurchasePlanDeliveryImportVo> {
|
||||
|
||||
/** 必需列(与到货模板表头一致) */
|
||||
private static final List<String> REQUIRED_HEADERS = Arrays.asList("日期", "牌号", "规格", "卷号", "单卷重量");
|
||||
|
||||
private final List<ErpPurchasePlanDeliveryImportVo> list = new ArrayList<>();
|
||||
private final List<String> errors = new ArrayList<>();
|
||||
private Map<Integer, String> headMap;
|
||||
|
||||
@Override
|
||||
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
|
||||
this.headMap = headMap;
|
||||
List<String> headers = headMap.values().stream()
|
||||
.filter(h -> h != null)
|
||||
.map(String::trim)
|
||||
.collect(Collectors.toList());
|
||||
List<String> missing = REQUIRED_HEADERS.stream()
|
||||
.filter(req -> !headers.contains(req))
|
||||
.collect(Collectors.toList());
|
||||
if (!missing.isEmpty()) {
|
||||
throw new ServiceException("到货文件列不匹配,缺少必需列:" + String.join("、", missing)
|
||||
+ "。请使用标准到货模板(日期/牌号/规格/卷号/单卷重量/车号/数量/件数/销售/钢厂到站)");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(ErpPurchasePlanDeliveryImportVo data, AnalysisContext context) {
|
||||
list.add(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Exception exception, AnalysisContext context) throws Exception {
|
||||
// 列校验等业务异常直接上抛,保持原始友好文案
|
||||
if (exception instanceof ServiceException) {
|
||||
throw exception;
|
||||
}
|
||||
if (exception instanceof ExcelDataConvertException) {
|
||||
ExcelDataConvertException e = (ExcelDataConvertException) exception;
|
||||
String head = headMap != null ? headMap.get(e.getColumnIndex()) : null;
|
||||
String headName = head != null ? head : ("第" + (e.getColumnIndex() + 1) + "列");
|
||||
errors.add("第" + (e.getRowIndex() + 1) + "行「" + headName + "」列的值无法识别(应为数字)");
|
||||
} else {
|
||||
errors.add("第" + (context.readRowHolder().getRowIndex() + 1) + "行解析失败:" + exception.getMessage());
|
||||
}
|
||||
// 转换类异常不抛出,继续解析以收集所有错误行
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||
// no-op
|
||||
}
|
||||
|
||||
public List<ErpPurchasePlanDeliveryImportVo> getList() {
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<String> getErrors() {
|
||||
return errors;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchasePlanAuditLog;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanAuditLogVo;
|
||||
|
||||
/**
|
||||
* 采购计划审核日志 Mapper
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-25
|
||||
*/
|
||||
public interface ErpPurchasePlanAuditLogMapper extends BaseMapperPlus<ErpPurchasePlanAuditLogMapper, ErpPurchasePlanAuditLog, ErpPurchasePlanAuditLogVo> {
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchasePlanContractRel;
|
||||
|
||||
/**
|
||||
* 采购计划-销售合同关联Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface ErpPurchasePlanContractRelMapper extends BaseMapperPlus<ErpPurchasePlanContractRelMapper, ErpPurchasePlanContractRel, ErpPurchasePlanContractRel> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchasePlanDelivery;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanDeliveryVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购计划到货明细Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface ErpPurchasePlanDeliveryMapper extends BaseMapperPlus<ErpPurchasePlanDeliveryMapper, ErpPurchasePlanDelivery, ErpPurchasePlanDeliveryVo> {
|
||||
|
||||
/**
|
||||
* 汇总某计划下的已到货重量(Σ单卷重量)
|
||||
*/
|
||||
BigDecimal sumCoilWeightByPlan(@Param("planId") Long planId);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchasePlanItem;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanItemVo;
|
||||
|
||||
/**
|
||||
* 采购计划明细Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface ErpPurchasePlanItemMapper extends BaseMapperPlus<ErpPurchasePlanItemMapper, ErpPurchasePlanItem, ErpPurchasePlanItemVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchasePlan;
|
||||
import com.klp.erp.domain.vo.ErpContractOptionVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanItemVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 采购计划头Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface ErpPurchasePlanMapper extends BaseMapperPlus<ErpPurchasePlanMapper, ErpPurchasePlan, ErpPurchasePlanVo> {
|
||||
|
||||
/**
|
||||
* 根据销售合同ID查询合同编号(crm_order,同库跨表)
|
||||
*/
|
||||
List<String> selectOrderCodes(@Param("ids") List<Long> ids);
|
||||
|
||||
/**
|
||||
* 按销售合同ID批量取明细,映射为采购计划明细(来自 crm_order_item)。
|
||||
* 用于「选合同自动带出明细」:1/2/3合同 -> 1/2/3/4明细。
|
||||
*/
|
||||
List<ErpPurchasePlanItemVo> selectItemsByOrderIds(@Param("ids") List<Long> ids);
|
||||
|
||||
/**
|
||||
* 合同列表分页:crm_order + 该合同已挂接的采购计划数。
|
||||
*/
|
||||
Page<ErpContractOptionVo> selectContractPage(IPage<ErpContractOptionVo> page, @Param("kw") String kw);
|
||||
|
||||
/**
|
||||
* 某合同下的所有采购计划(经中间表挂接)。
|
||||
*/
|
||||
List<ErpPurchasePlanVo> selectPlansByContract(@Param("orderId") Long orderId);
|
||||
|
||||
/**
|
||||
* 按合同关键字(订单编号/合同号/合同名称)查出关联的采购计划ID,用于综合搜索。
|
||||
*/
|
||||
List<Long> selectPlanIdsByContractKeyword(@Param("kw") String kw);
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.klp.erp.service;
|
||||
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.erp.domain.bo.ErpPurchasePlanAuditBo;
|
||||
import com.klp.erp.domain.bo.ErpPurchasePlanBo;
|
||||
import com.klp.erp.domain.vo.ErpContractOptionVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanAuditLogVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanDeliveryVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanItemVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanVo;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 采购计划Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface IErpPurchasePlanService {
|
||||
|
||||
/** 查询采购计划详情(含明细、关联合同、进度) */
|
||||
ErpPurchasePlanVo queryById(Long planId);
|
||||
|
||||
/** 按销售合同ID批量取明细(来自 crm_order_item),用于「选合同自动带出明细」 */
|
||||
List<ErpPurchasePlanItemVo> queryItemsByOrders(List<Long> orderIds);
|
||||
|
||||
/** 合同列表分页(含每个合同已有的采购计划数),用于采购计划页左侧 */
|
||||
TableDataInfo<ErpContractOptionVo> queryContractPage(String keyword, PageQuery pageQuery);
|
||||
|
||||
/** 某合同下的所有采购计划 */
|
||||
List<ErpPurchasePlanVo> queryPlansByContract(Long orderId);
|
||||
|
||||
/** 分页查询采购计划 */
|
||||
TableDataInfo<ErpPurchasePlanVo> queryPageList(ErpPurchasePlanBo bo, PageQuery pageQuery);
|
||||
|
||||
/** 查询采购计划列表 */
|
||||
List<ErpPurchasePlanVo> queryList(ErpPurchasePlanBo bo);
|
||||
|
||||
/** 新增采购计划(含明细、合同挂接) */
|
||||
Boolean insertByBo(ErpPurchasePlanBo bo);
|
||||
|
||||
/** 修改采购计划(含明细、合同挂接) */
|
||||
Boolean updateByBo(ErpPurchasePlanBo bo);
|
||||
|
||||
/** 校验并批量删除采购计划 */
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/** 审核(通过/驳回 + 申请意见),每次审核留痕 */
|
||||
Boolean audit(ErpPurchasePlanAuditBo bo, String operator);
|
||||
|
||||
/** 送审 / 重新送审:待送审(3) 或 已驳回(2) → 待审核(0),之后才进入审核页 */
|
||||
Boolean submitForAudit(Long planId);
|
||||
|
||||
/** 某计划的审核历史 */
|
||||
List<ErpPurchasePlanAuditLogVo> queryAuditLogs(Long planId);
|
||||
|
||||
/**
|
||||
* 导入到货 Excel:校验列/数值、kg→t 单位纠正,写入并刷新进度归档。
|
||||
* 返回 {count: 入库条数, message: 回执文案, kgConverted: 是否做了单位换算}
|
||||
*/
|
||||
Map<String, Object> importDelivery(Long planId, InputStream inputStream, String operator);
|
||||
|
||||
/** 查询某计划的到货明细 */
|
||||
List<ErpPurchasePlanDeliveryVo> queryDeliveryList(Long planId);
|
||||
|
||||
/** 删除到货明细,并刷新进度 */
|
||||
Boolean deleteDelivery(Long deliveryId);
|
||||
|
||||
/** 刷新到货进度:arrivedWeight = Σ单卷重量;满 100% 自动归档 */
|
||||
void refreshProgress(Long planId);
|
||||
|
||||
/** 总体到货进度统计(已完成 N / 共 M) */
|
||||
Map<String, Object> statistics(ErpPurchasePlanBo bo);
|
||||
}
|
||||
@@ -0,0 +1,577 @@
|
||||
package com.klp.erp.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.exception.ServiceException;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.erp.domain.ErpPurchasePlan;
|
||||
import com.klp.erp.domain.ErpPurchasePlanContractRel;
|
||||
import com.klp.erp.domain.ErpPurchasePlanDelivery;
|
||||
import com.klp.erp.domain.ErpPurchasePlanItem;
|
||||
import com.klp.erp.domain.ErpPurchasePlanAuditLog;
|
||||
import com.klp.erp.domain.bo.ErpPurchasePlanAuditBo;
|
||||
import com.klp.erp.domain.bo.ErpPurchasePlanBo;
|
||||
import com.klp.erp.domain.bo.ErpPurchasePlanItemBo;
|
||||
import com.klp.erp.domain.vo.ErpContractOptionVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanAuditLogVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanDeliveryImportVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanDeliveryVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanItemVo;
|
||||
import com.klp.erp.domain.vo.ErpPurchasePlanVo;
|
||||
import com.klp.erp.mapper.ErpPurchasePlanContractRelMapper;
|
||||
import com.klp.erp.mapper.ErpPurchasePlanDeliveryMapper;
|
||||
import com.klp.erp.mapper.ErpPurchasePlanItemMapper;
|
||||
import com.klp.erp.mapper.ErpPurchasePlanAuditLogMapper;
|
||||
import com.klp.erp.mapper.ErpPurchasePlanMapper;
|
||||
import com.klp.erp.listener.ErpDeliveryExcelListener;
|
||||
import com.klp.erp.service.IErpPurchasePlanService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 采购计划Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class ErpPurchasePlanServiceImpl implements IErpPurchasePlanService {
|
||||
|
||||
private static final String PLAN_STATUS_ONGOING = "0";
|
||||
private static final String PLAN_STATUS_ARCHIVED = "1";
|
||||
private static final String AUDIT_PENDING = "0";
|
||||
private static final String AUDIT_PASS = "1";
|
||||
private static final String AUDIT_REJECT = "2";
|
||||
private static final String AUDIT_DRAFT = "3";
|
||||
private static final String ITEM_NOT_ARRIVED = "0";
|
||||
private static final String ITEM_PARTIAL = "1";
|
||||
private static final String ITEM_ARRIVED = "2";
|
||||
|
||||
private final ErpPurchasePlanMapper baseMapper;
|
||||
private final ErpPurchasePlanItemMapper itemMapper;
|
||||
private final ErpPurchasePlanContractRelMapper relMapper;
|
||||
private final ErpPurchasePlanDeliveryMapper deliveryMapper;
|
||||
private final ErpPurchasePlanAuditLogMapper auditLogMapper;
|
||||
|
||||
@Override
|
||||
public ErpPurchasePlanVo queryById(Long planId) {
|
||||
ErpPurchasePlanVo vo = baseMapper.selectVoById(planId);
|
||||
if (vo == null) {
|
||||
return null;
|
||||
}
|
||||
// 明细
|
||||
vo.setItems(itemMapper.selectVoList(Wrappers.lambdaQuery(ErpPurchasePlanItem.class)
|
||||
.eq(ErpPurchasePlanItem::getPlanId, planId)));
|
||||
// 关联合同
|
||||
List<Long> orderIds = relMapper.selectList(Wrappers.lambdaQuery(ErpPurchasePlanContractRel.class)
|
||||
.eq(ErpPurchasePlanContractRel::getPlanId, planId)).stream()
|
||||
.map(ErpPurchasePlanContractRel::getOrderId).collect(Collectors.toList());
|
||||
vo.setOrderIds(orderIds);
|
||||
if (!orderIds.isEmpty()) {
|
||||
vo.setContractCodes(baseMapper.selectOrderCodes(orderIds));
|
||||
}
|
||||
vo.setProgress(calcProgress(vo.getArrivedWeight(), vo.getPlanWeight()));
|
||||
// 审核历史(含每次驳回理由)
|
||||
vo.setAuditLogs(queryAuditLogs(planId));
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpPurchasePlanItemVo> queryItemsByOrders(List<Long> orderIds) {
|
||||
if (orderIds == null || orderIds.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return baseMapper.selectItemsByOrderIds(orderIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<ErpPurchasePlanVo> queryPageList(ErpPurchasePlanBo bo, PageQuery pageQuery) {
|
||||
Page<ErpPurchasePlanVo> result = baseMapper.selectVoPage(pageQuery.build(), buildQueryWrapper(bo));
|
||||
result.getRecords().forEach(v -> v.setProgress(calcProgress(v.getArrivedWeight(), v.getPlanWeight())));
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpPurchasePlanVo> queryList(ErpPurchasePlanBo bo) {
|
||||
List<ErpPurchasePlanVo> list = baseMapper.selectVoList(buildQueryWrapper(bo));
|
||||
list.forEach(v -> v.setProgress(calcProgress(v.getArrivedWeight(), v.getPlanWeight())));
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<ErpContractOptionVo> queryContractPage(String keyword, PageQuery pageQuery) {
|
||||
Page<ErpContractOptionVo> page = baseMapper.selectContractPage(pageQuery.build(), keyword);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpPurchasePlanVo> queryPlansByContract(Long orderId) {
|
||||
List<ErpPurchasePlanVo> list = baseMapper.selectPlansByContract(orderId);
|
||||
list.forEach(v -> v.setProgress(calcProgress(v.getArrivedWeight(), v.getPlanWeight())));
|
||||
return list;
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<ErpPurchasePlan> buildQueryWrapper(ErpPurchasePlanBo bo) {
|
||||
LambdaQueryWrapper<ErpPurchasePlan> lqw = Wrappers.lambdaQuery();
|
||||
lqw.like(StringUtils.isNotBlank(bo.getPlanNo()), ErpPurchasePlan::getPlanNo, bo.getPlanNo());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getPlanStatus()), ErpPurchasePlan::getPlanStatus, bo.getPlanStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), ErpPurchasePlan::getAuditStatus, bo.getAuditStatus());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getSupplier()), ErpPurchasePlan::getSupplier, bo.getSupplier());
|
||||
// 综合关键字:计划号 / 供货商 / 合同号(合同号经中间表预查出 planId 再 OR 进来)
|
||||
if (StringUtils.isNotBlank(bo.getKeyword())) {
|
||||
String kw = bo.getKeyword().trim();
|
||||
List<Long> planIdsByContract = baseMapper.selectPlanIdsByContractKeyword(kw);
|
||||
lqw.and(w -> {
|
||||
w.like(ErpPurchasePlan::getPlanNo, kw)
|
||||
.or().like(ErpPurchasePlan::getSupplier, kw);
|
||||
if (!planIdsByContract.isEmpty()) {
|
||||
w.or().in(ErpPurchasePlan::getPlanId, planIdsByContract);
|
||||
}
|
||||
});
|
||||
}
|
||||
lqw.orderByDesc(ErpPurchasePlan::getPlanId);
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insertByBo(ErpPurchasePlanBo bo) {
|
||||
ErpPurchasePlan add = BeanUtil.toBean(bo, ErpPurchasePlan.class);
|
||||
if (StringUtils.isBlank(add.getPlanNo())) {
|
||||
add.setPlanNo(generatePlanNo());
|
||||
}
|
||||
add.setPlanStatus(PLAN_STATUS_ONGOING);
|
||||
add.setAuditStatus(AUDIT_DRAFT); // 新建为「待送审」,需手动送审后才进入审核池
|
||||
add.setArrivedWeight(BigDecimal.ZERO);
|
||||
add.setPlanWeight(sumItemWeight(bo.getItems()));
|
||||
if (baseMapper.insert(add) <= 0) {
|
||||
return false;
|
||||
}
|
||||
bo.setPlanId(add.getPlanId());
|
||||
saveItems(add.getPlanId(), bo.getItems());
|
||||
saveContractRels(add.getPlanId(), bo.getOrderIds());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean updateByBo(ErpPurchasePlanBo bo) {
|
||||
ErpPurchasePlan update = baseMapper.selectById(bo.getPlanId());
|
||||
if (update == null) {
|
||||
throw new ServiceException("采购计划不存在");
|
||||
}
|
||||
update.setSupplier(bo.getSupplier());
|
||||
update.setPurchaseDate(bo.getPurchaseDate());
|
||||
update.setRemark(bo.getRemark());
|
||||
if (StringUtils.isNotBlank(bo.getPlanNo())) {
|
||||
update.setPlanNo(bo.getPlanNo());
|
||||
}
|
||||
update.setPlanWeight(sumItemWeight(bo.getItems()));
|
||||
baseMapper.updateById(update);
|
||||
// 覆盖式重写明细与合同关联
|
||||
itemMapper.delete(Wrappers.lambdaQuery(ErpPurchasePlanItem.class)
|
||||
.eq(ErpPurchasePlanItem::getPlanId, bo.getPlanId()));
|
||||
saveItems(bo.getPlanId(), bo.getItems());
|
||||
relMapper.delete(Wrappers.lambdaQuery(ErpPurchasePlanContractRel.class)
|
||||
.eq(ErpPurchasePlanContractRel::getPlanId, bo.getPlanId()));
|
||||
saveContractRels(bo.getPlanId(), bo.getOrderIds());
|
||||
return true;
|
||||
}
|
||||
|
||||
private void saveItems(Long planId, List<ErpPurchasePlanItemBo> items) {
|
||||
if (items == null || items.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
for (ErpPurchasePlanItemBo itemBo : items) {
|
||||
ErpPurchasePlanItem item = BeanUtil.toBean(itemBo, ErpPurchasePlanItem.class);
|
||||
item.setItemId(null);
|
||||
item.setPlanId(planId);
|
||||
itemMapper.insert(item);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveContractRels(Long planId, List<Long> orderIds) {
|
||||
if (orderIds == null || orderIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
for (Long orderId : orderIds) {
|
||||
if (orderId == null) {
|
||||
continue;
|
||||
}
|
||||
ErpPurchasePlanContractRel rel = new ErpPurchasePlanContractRel();
|
||||
rel.setPlanId(planId);
|
||||
rel.setOrderId(orderId);
|
||||
relMapper.insert(rel);
|
||||
}
|
||||
}
|
||||
|
||||
private BigDecimal sumItemWeight(List<ErpPurchasePlanItemBo> items) {
|
||||
if (items == null) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
return items.stream()
|
||||
.map(i -> i.getWeight() == null ? BigDecimal.ZERO : i.getWeight())
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
for (Long planId : ids) {
|
||||
itemMapper.delete(Wrappers.lambdaQuery(ErpPurchasePlanItem.class).eq(ErpPurchasePlanItem::getPlanId, planId));
|
||||
relMapper.delete(Wrappers.lambdaQuery(ErpPurchasePlanContractRel.class).eq(ErpPurchasePlanContractRel::getPlanId, planId));
|
||||
deliveryMapper.delete(Wrappers.lambdaQuery(ErpPurchasePlanDelivery.class).eq(ErpPurchasePlanDelivery::getPlanId, planId));
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean audit(ErpPurchasePlanAuditBo bo, String operator) {
|
||||
if (!AUDIT_PASS.equals(bo.getAuditStatus()) && !AUDIT_REJECT.equals(bo.getAuditStatus())) {
|
||||
throw new ServiceException("审核结果只能为通过或驳回");
|
||||
}
|
||||
ErpPurchasePlan plan = baseMapper.selectById(bo.getPlanId());
|
||||
if (plan == null) {
|
||||
throw new ServiceException("采购计划不存在");
|
||||
}
|
||||
Date now = new Date();
|
||||
plan.setAuditStatus(bo.getAuditStatus());
|
||||
plan.setAuditOpinion(bo.getAuditOpinion());
|
||||
plan.setAuditor(operator);
|
||||
plan.setAuditTime(now);
|
||||
boolean ok = baseMapper.updateById(plan) > 0;
|
||||
// 每次审核留痕(含驳回后重新审核)
|
||||
ErpPurchasePlanAuditLog log = new ErpPurchasePlanAuditLog();
|
||||
log.setPlanId(plan.getPlanId());
|
||||
log.setAuditStatus(bo.getAuditStatus());
|
||||
log.setAuditOpinion(bo.getAuditOpinion());
|
||||
log.setAuditor(operator);
|
||||
log.setAuditTime(now);
|
||||
log.setCreateTime(now);
|
||||
auditLogMapper.insert(log);
|
||||
return ok;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean submitForAudit(Long planId) {
|
||||
ErpPurchasePlan plan = baseMapper.selectById(planId);
|
||||
if (plan == null) {
|
||||
throw new ServiceException("采购计划不存在");
|
||||
}
|
||||
if (!AUDIT_DRAFT.equals(plan.getAuditStatus()) && !AUDIT_REJECT.equals(plan.getAuditStatus())) {
|
||||
throw new ServiceException("仅「待送审」或「已驳回」的计划可送审");
|
||||
}
|
||||
plan.setAuditStatus(AUDIT_PENDING);
|
||||
return baseMapper.updateById(plan) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpPurchasePlanAuditLogVo> queryAuditLogs(Long planId) {
|
||||
return auditLogMapper.selectVoList(Wrappers.lambdaQuery(ErpPurchasePlanAuditLog.class)
|
||||
.eq(ErpPurchasePlanAuditLog::getPlanId, planId)
|
||||
.orderByDesc(ErpPurchasePlanAuditLog::getAuditTime));
|
||||
}
|
||||
|
||||
/** 单卷重量阈值(吨):超过则判定整份文件以 kg 录入(无单卷热轧钢卷重达 200t) */
|
||||
private static final BigDecimal KG_THRESHOLD = BigDecimal.valueOf(200);
|
||||
private static final BigDecimal KG_TO_T = BigDecimal.valueOf(1000);
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Map<String, Object> importDelivery(Long planId, InputStream inputStream, String operator) {
|
||||
ErpPurchasePlan plan = baseMapper.selectById(planId);
|
||||
if (plan == null) {
|
||||
throw new ServiceException("采购计划不存在");
|
||||
}
|
||||
if (!AUDIT_PASS.equals(plan.getAuditStatus())) {
|
||||
throw new ServiceException("仅审核通过的采购计划可导入到货");
|
||||
}
|
||||
// 1) 读取 + 列校验 + 数值异常收集(监听器内完成)
|
||||
ErpDeliveryExcelListener listener = new ErpDeliveryExcelListener();
|
||||
try {
|
||||
EasyExcel.read(inputStream, ErpPurchasePlanDeliveryImportVo.class, listener).sheet().doRead();
|
||||
} catch (ServiceException se) {
|
||||
throw se;
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException("到货文件无法解析,请确认为标准 Excel(.xlsx/.xls) 且格式正确");
|
||||
}
|
||||
if (!listener.getErrors().isEmpty()) {
|
||||
throw new ServiceException("到货文件存在问题:<br/>" + String.join("<br/>", listener.getErrors()));
|
||||
}
|
||||
List<ErpPurchasePlanDeliveryImportVo> rows = listener.getList();
|
||||
// 过滤空行(无卷号且无重量)
|
||||
List<ErpPurchasePlanDeliveryImportVo> valid = rows.stream()
|
||||
.filter(r -> StringUtils.isNotBlank(r.getCoilNo()) || r.getCoilWeight() != null)
|
||||
.collect(Collectors.toList());
|
||||
if (valid.isEmpty()) {
|
||||
throw new ServiceException("未解析到有效到货数据,请检查文件内容或列名是否与模板一致");
|
||||
}
|
||||
// 2) kg→t 单位判定(文件级:单卷重量最大值超阈值视为 kg)
|
||||
BigDecimal maxCoil = valid.stream()
|
||||
.map(ErpPurchasePlanDeliveryImportVo::getCoilWeight)
|
||||
.filter(w -> w != null)
|
||||
.max(BigDecimal::compareTo)
|
||||
.orElse(BigDecimal.ZERO);
|
||||
boolean kgConverted = maxCoil.compareTo(KG_THRESHOLD) > 0;
|
||||
|
||||
// 3) 合并单元格向下填充 + 单位换算 + 落库
|
||||
String lastTruckNo = null;
|
||||
BigDecimal lastTruckWeight = null;
|
||||
Integer lastPieceCount = null;
|
||||
int count = 0;
|
||||
for (ErpPurchasePlanDeliveryImportVo row : rows) {
|
||||
if (StringUtils.isNotBlank(row.getTruckNo())) {
|
||||
lastTruckNo = row.getTruckNo();
|
||||
lastTruckWeight = row.getTruckWeight();
|
||||
lastPieceCount = row.getPieceCount();
|
||||
}
|
||||
if (StringUtils.isBlank(row.getCoilNo()) && row.getCoilWeight() == null) {
|
||||
continue;
|
||||
}
|
||||
BigDecimal truckWeight = row.getTruckWeight() != null ? row.getTruckWeight() : lastTruckWeight;
|
||||
ErpPurchasePlanDelivery d = new ErpPurchasePlanDelivery();
|
||||
d.setPlanId(planId);
|
||||
d.setArrivalDate(parseDate(row.getArrivalDate()));
|
||||
d.setGrade(row.getGrade());
|
||||
d.setSpec(row.getSpec());
|
||||
d.setCoilNo(row.getCoilNo());
|
||||
d.setCoilWeight(convertWeight(row.getCoilWeight(), kgConverted));
|
||||
d.setTruckNo(StringUtils.isNotBlank(row.getTruckNo()) ? row.getTruckNo() : lastTruckNo);
|
||||
d.setTruckWeight(convertWeight(truckWeight, kgConverted));
|
||||
d.setPieceCount(row.getPieceCount() != null ? row.getPieceCount() : lastPieceCount);
|
||||
d.setSalesCode(row.getSalesCode());
|
||||
d.setArrivalStation(row.getArrivalStation());
|
||||
deliveryMapper.insert(d);
|
||||
count++;
|
||||
}
|
||||
refreshProgress(planId);
|
||||
|
||||
StringBuilder msg = new StringBuilder("成功导入 " + count + " 条到货记录");
|
||||
if (kgConverted) {
|
||||
msg.append(";检测到重量疑似按 kg 录入(最大单卷 ")
|
||||
.append(maxCoil.stripTrailingZeros().toPlainString())
|
||||
.append("),已自动 ÷1000 换算为吨");
|
||||
}
|
||||
Map<String, Object> result = new HashMap<>(4);
|
||||
result.put("count", count);
|
||||
result.put("kgConverted", kgConverted);
|
||||
result.put("message", msg.toString());
|
||||
return result;
|
||||
}
|
||||
|
||||
/** kg→t 换算:kgConverted 为真时 ÷1000,保留3位 */
|
||||
private BigDecimal convertWeight(BigDecimal v, boolean kgConverted) {
|
||||
if (v == null) {
|
||||
return null;
|
||||
}
|
||||
return kgConverted ? v.divide(KG_TO_T, 3, RoundingMode.HALF_UP) : v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpPurchasePlanDeliveryVo> queryDeliveryList(Long planId) {
|
||||
return deliveryMapper.selectVoList(Wrappers.lambdaQuery(ErpPurchasePlanDelivery.class)
|
||||
.eq(ErpPurchasePlanDelivery::getPlanId, planId)
|
||||
.orderByAsc(ErpPurchasePlanDelivery::getTruckNo, ErpPurchasePlanDelivery::getDeliveryId));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteDelivery(Long deliveryId) {
|
||||
ErpPurchasePlanDelivery d = deliveryMapper.selectById(deliveryId);
|
||||
if (d == null) {
|
||||
return false;
|
||||
}
|
||||
boolean ok = deliveryMapper.deleteById(deliveryId) > 0;
|
||||
refreshProgress(d.getPlanId());
|
||||
return ok;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void refreshProgress(Long planId) {
|
||||
ErpPurchasePlan plan = baseMapper.selectById(planId);
|
||||
if (plan == null) {
|
||||
return;
|
||||
}
|
||||
// 1. 计划总到货 = Σ单卷重量
|
||||
BigDecimal arrived = deliveryMapper.sumCoilWeightByPlan(planId);
|
||||
if (arrived == null) {
|
||||
arrived = BigDecimal.ZERO;
|
||||
}
|
||||
plan.setArrivedWeight(arrived);
|
||||
|
||||
// 2. 明细级回填:到货行按 牌号+规格(厚×宽) 聚合,再顺序分配到匹配明细
|
||||
List<ErpPurchasePlanItem> items = itemMapper.selectList(Wrappers.lambdaQuery(ErpPurchasePlanItem.class)
|
||||
.eq(ErpPurchasePlanItem::getPlanId, planId));
|
||||
List<ErpPurchasePlanDelivery> deliveries = deliveryMapper.selectList(Wrappers.lambdaQuery(ErpPurchasePlanDelivery.class)
|
||||
.eq(ErpPurchasePlanDelivery::getPlanId, planId));
|
||||
|
||||
Map<String, BigDecimal> arrivedByKey = new HashMap<>();
|
||||
for (ErpPurchasePlanDelivery d : deliveries) {
|
||||
String key = specKey(d.getGrade(), d.getSpec());
|
||||
if (key == null) {
|
||||
continue;
|
||||
}
|
||||
BigDecimal w = d.getCoilWeight() == null ? BigDecimal.ZERO : d.getCoilWeight();
|
||||
arrivedByKey.merge(key, w, BigDecimal::add);
|
||||
}
|
||||
|
||||
// 明细按 key 分组(保持原顺序),便于同规格多行顺序分配
|
||||
Map<String, List<ErpPurchasePlanItem>> itemsByKey = new LinkedHashMap<>();
|
||||
for (ErpPurchasePlanItem it : items) {
|
||||
it.setArrivedWeight(BigDecimal.ZERO);
|
||||
it.setItemStatus(ITEM_NOT_ARRIVED);
|
||||
String key = itemSpecKey(it.getGrade(), it.getThickness(), it.getWidth());
|
||||
if (key != null) {
|
||||
itemsByKey.computeIfAbsent(key, k -> new ArrayList<>()).add(it);
|
||||
}
|
||||
}
|
||||
for (Map.Entry<String, List<ErpPurchasePlanItem>> e : itemsByKey.entrySet()) {
|
||||
BigDecimal remaining = arrivedByKey.getOrDefault(e.getKey(), BigDecimal.ZERO);
|
||||
List<ErpPurchasePlanItem> group = e.getValue();
|
||||
for (int i = 0; i < group.size(); i++) {
|
||||
ErpPurchasePlanItem it = group.get(i);
|
||||
BigDecimal planned = it.getWeight() == null ? BigDecimal.ZERO : it.getWeight();
|
||||
// 末项吃掉剩余(含富余),其余按计划量封顶
|
||||
BigDecimal give = (i == group.size() - 1) ? remaining : remaining.min(planned);
|
||||
if (give.compareTo(BigDecimal.ZERO) < 0) {
|
||||
give = BigDecimal.ZERO;
|
||||
}
|
||||
it.setArrivedWeight(give);
|
||||
remaining = remaining.subtract(give);
|
||||
if (remaining.compareTo(BigDecimal.ZERO) < 0) {
|
||||
remaining = BigDecimal.ZERO;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 明细状态 + 是否全部到货
|
||||
boolean allArrived = !items.isEmpty();
|
||||
for (ErpPurchasePlanItem it : items) {
|
||||
BigDecimal planned = it.getWeight() == null ? BigDecimal.ZERO : it.getWeight();
|
||||
BigDecimal aw = it.getArrivedWeight() == null ? BigDecimal.ZERO : it.getArrivedWeight();
|
||||
if (aw.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
it.setItemStatus(ITEM_NOT_ARRIVED);
|
||||
} else if (planned.compareTo(BigDecimal.ZERO) > 0 && aw.compareTo(planned) >= 0) {
|
||||
it.setItemStatus(ITEM_ARRIVED);
|
||||
} else {
|
||||
it.setItemStatus(ITEM_PARTIAL);
|
||||
}
|
||||
if (!ITEM_ARRIVED.equals(it.getItemStatus())) {
|
||||
allArrived = false;
|
||||
}
|
||||
itemMapper.updateById(it);
|
||||
}
|
||||
|
||||
// 4. 计划状态:所有明细到货 或 总量达标 → 自动归档
|
||||
BigDecimal planWeight = plan.getPlanWeight() == null ? BigDecimal.ZERO : plan.getPlanWeight();
|
||||
boolean weightDone = planWeight.compareTo(BigDecimal.ZERO) > 0 && arrived.compareTo(planWeight) >= 0;
|
||||
plan.setPlanStatus((allArrived || weightDone) ? PLAN_STATUS_ARCHIVED : PLAN_STATUS_ONGOING);
|
||||
baseMapper.updateById(plan);
|
||||
}
|
||||
|
||||
/** 到货行规格 key:牌号 + 厚×宽(规格形如 "3.00×1230") */
|
||||
private String specKey(String grade, String spec) {
|
||||
if (StringUtils.isBlank(spec)) {
|
||||
return null;
|
||||
}
|
||||
String[] parts = spec.split("[×xX*]");
|
||||
if (parts.length < 2) {
|
||||
return null;
|
||||
}
|
||||
String t = normNum(parts[0]);
|
||||
String w = normNum(parts[1]);
|
||||
if (t == null || w == null) {
|
||||
return null;
|
||||
}
|
||||
return normGrade(grade) + "|" + t + "×" + w;
|
||||
}
|
||||
|
||||
/** 明细规格 key:牌号 + 厚×宽 */
|
||||
private String itemSpecKey(String grade, String thickness, String width) {
|
||||
String t = normNum(thickness);
|
||||
String w = normNum(width);
|
||||
if (t == null || w == null) {
|
||||
return null;
|
||||
}
|
||||
return normGrade(grade) + "|" + t + "×" + w;
|
||||
}
|
||||
|
||||
private String normGrade(String g) {
|
||||
return g == null ? "" : g.trim().toUpperCase();
|
||||
}
|
||||
|
||||
/** 数字归一:去尾零,无法解析(区间文本等)返回 null 不参与匹配 */
|
||||
private String normNum(String s) {
|
||||
if (s == null) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return new BigDecimal(s.trim()).stripTrailingZeros().toPlainString();
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> statistics(ErpPurchasePlanBo bo) {
|
||||
Long total = baseMapper.selectCount(buildQueryWrapper(bo));
|
||||
LambdaQueryWrapper<ErpPurchasePlan> completedWrapper = buildQueryWrapper(bo)
|
||||
.eq(ErpPurchasePlan::getPlanStatus, PLAN_STATUS_ARCHIVED);
|
||||
Long completed = baseMapper.selectCount(completedWrapper);
|
||||
Map<String, Object> map = new HashMap<>(4);
|
||||
map.put("total", total == null ? 0 : total);
|
||||
map.put("completed", completed == null ? 0 : completed);
|
||||
return map;
|
||||
}
|
||||
|
||||
/** 进度百分比(0-100,保留2位) */
|
||||
private BigDecimal calcProgress(BigDecimal arrived, BigDecimal planWeight) {
|
||||
if (planWeight == null || planWeight.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
BigDecimal a = arrived == null ? BigDecimal.ZERO : arrived;
|
||||
BigDecimal pct = a.multiply(BigDecimal.valueOf(100)).divide(planWeight, 2, RoundingMode.HALF_UP);
|
||||
return pct.min(BigDecimal.valueOf(100));
|
||||
}
|
||||
|
||||
/** 自动生成计划号:CG + yyyyMMdd + 4位流水 */
|
||||
private String generatePlanNo() {
|
||||
String prefix = "CG" + DateUtil.format(new Date(), "yyyyMMdd");
|
||||
Long todayCount = baseMapper.selectCount(Wrappers.lambdaQuery(ErpPurchasePlan.class)
|
||||
.likeRight(ErpPurchasePlan::getPlanNo, prefix));
|
||||
long seq = (todayCount == null ? 0L : todayCount) + 1L;
|
||||
return prefix + String.format("%04d", seq);
|
||||
}
|
||||
|
||||
private Date parseDate(String text) {
|
||||
if (StringUtils.isBlank(text)) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return DateUtil.parse(text.trim());
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?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.klp.erp.mapper.ErpPurchasePlanDeliveryMapper">
|
||||
|
||||
<select id="sumCoilWeightByPlan" resultType="java.math.BigDecimal">
|
||||
SELECT COALESCE(SUM(coil_weight), 0)
|
||||
FROM erp_purchase_plan_delivery
|
||||
WHERE del_flag = '0' AND plan_id = #{planId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,80 @@
|
||||
<?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.klp.erp.mapper.ErpPurchasePlanMapper">
|
||||
|
||||
<select id="selectOrderCodes" resultType="java.lang.String">
|
||||
SELECT order_code FROM crm_order
|
||||
WHERE del_flag = 0 AND order_id IN
|
||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<!-- 选合同自动带出明细:crm_order_item -> 采购计划明细VO;公差空值给 '0' -->
|
||||
<select id="selectItemsByOrderIds" resultType="com.klp.erp.domain.vo.ErpPurchasePlanItemVo">
|
||||
SELECT
|
||||
product_type AS productType,
|
||||
material AS material,
|
||||
grade AS grade,
|
||||
width AS width,
|
||||
thickness AS thickness,
|
||||
COALESCE(NULLIF(TRIM(width_tolerance), ''), '0') AS widthTolerance,
|
||||
COALESCE(NULLIF(TRIM(thickness_tolerance), ''), '0') AS thicknessTolerance,
|
||||
weight AS weight,
|
||||
product_num AS quantity
|
||||
FROM crm_order_item
|
||||
WHERE del_flag = 0 AND order_id IN
|
||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
ORDER BY order_id, item_id
|
||||
</select>
|
||||
|
||||
<!-- 合同列表 + 该合同已挂接的采购计划数 -->
|
||||
<select id="selectContractPage" resultType="com.klp.erp.domain.vo.ErpContractOptionVo">
|
||||
SELECT
|
||||
o.order_id AS orderId,
|
||||
o.order_code AS orderCode,
|
||||
o.contract_code AS contractCode,
|
||||
o.contract_name AS contractName,
|
||||
o.customer AS customer,
|
||||
o.supplier AS supplier,
|
||||
o.order_amount AS orderAmount,
|
||||
o.salesman AS salesman,
|
||||
(SELECT COUNT(*) FROM erp_purchase_plan_contract_rel r
|
||||
JOIN erp_purchase_plan p ON p.plan_id = r.plan_id AND p.del_flag = '0'
|
||||
WHERE r.del_flag = '0' AND r.order_id = o.order_id) AS planCount
|
||||
FROM crm_order o
|
||||
WHERE o.del_flag = 0
|
||||
<if test="kw != null and kw != ''">
|
||||
AND (o.order_code LIKE CONCAT('%', #{kw}, '%')
|
||||
OR o.contract_name LIKE CONCAT('%', #{kw}, '%')
|
||||
OR o.contract_code LIKE CONCAT('%', #{kw}, '%')
|
||||
OR o.customer LIKE CONCAT('%', #{kw}, '%'))
|
||||
</if>
|
||||
ORDER BY o.is_top DESC, o.order_id DESC
|
||||
</select>
|
||||
|
||||
<!-- 某合同下的所有采购计划 -->
|
||||
<select id="selectPlansByContract" resultType="com.klp.erp.domain.vo.ErpPurchasePlanVo">
|
||||
SELECT p.*
|
||||
FROM erp_purchase_plan p
|
||||
JOIN erp_purchase_plan_contract_rel r ON r.plan_id = p.plan_id AND r.del_flag = '0'
|
||||
WHERE p.del_flag = '0' AND r.order_id = #{orderId}
|
||||
ORDER BY p.plan_id DESC
|
||||
</select>
|
||||
|
||||
<!-- 按合同关键字查关联的采购计划ID(订单编号/合同号/合同名称) -->
|
||||
<select id="selectPlanIdsByContractKeyword" resultType="java.lang.Long">
|
||||
SELECT DISTINCT r.plan_id
|
||||
FROM erp_purchase_plan_contract_rel r
|
||||
JOIN crm_order o ON o.order_id = r.order_id AND o.del_flag = 0
|
||||
WHERE r.del_flag = '0'
|
||||
AND (o.order_code LIKE CONCAT('%', #{kw}, '%')
|
||||
OR o.contract_code LIKE CONCAT('%', #{kw}, '%')
|
||||
OR o.contract_name LIKE CONCAT('%', #{kw}, '%'))
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
27
klp-flow/pom.xml
Normal file
27
klp-flow/pom.xml
Normal file
@@ -0,0 +1,27 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.klp</groupId>
|
||||
<artifactId>klp-oa</artifactId>
|
||||
<version>0.8.3</version>
|
||||
</parent>
|
||||
<artifactId>klp-flow</artifactId>
|
||||
<name>klp-flow</name>
|
||||
<description>流程管理模块</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.klp</groupId>
|
||||
<artifactId>klp-common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.klp</groupId>
|
||||
<artifactId>klp-wms</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.klp</groupId>
|
||||
<artifactId>klp-crm</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.EqpMaintenancePlanAbnormalVo;
|
||||
import com.klp.flow.domain.bo.EqpMaintenancePlanAbnormalBo;
|
||||
import com.klp.flow.service.IEqpMaintenancePlanAbnormalService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 维修计划-异常记录关联
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/maintenancePlanAbnormal")
|
||||
public class EqpMaintenancePlanAbnormalController extends BaseController {
|
||||
|
||||
private final IEqpMaintenancePlanAbnormalService iEqpMaintenancePlanAbnormalService;
|
||||
|
||||
/**
|
||||
* 查询维修计划-异常记录关联列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<EqpMaintenancePlanAbnormalVo> list(EqpMaintenancePlanAbnormalBo bo, PageQuery pageQuery) {
|
||||
return iEqpMaintenancePlanAbnormalService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出维修计划-异常记录关联列表
|
||||
*/
|
||||
@Log(title = "维修计划-异常记录关联", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(EqpMaintenancePlanAbnormalBo bo, HttpServletResponse response) {
|
||||
List<EqpMaintenancePlanAbnormalVo> list = iEqpMaintenancePlanAbnormalService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "维修计划-异常记录关联", EqpMaintenancePlanAbnormalVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取维修计划-异常记录关联详细信息
|
||||
*
|
||||
* @param relId 主键
|
||||
*/
|
||||
@GetMapping("/{relId}")
|
||||
public R<EqpMaintenancePlanAbnormalVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId) {
|
||||
return R.ok(iEqpMaintenancePlanAbnormalService.queryById(relId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增维修计划-异常记录关联
|
||||
*/
|
||||
@Log(title = "维修计划-异常记录关联", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody EqpMaintenancePlanAbnormalBo bo) {
|
||||
return toAjax(iEqpMaintenancePlanAbnormalService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改维修计划-异常记录关联
|
||||
*/
|
||||
@Log(title = "维修计划-异常记录关联", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody EqpMaintenancePlanAbnormalBo bo) {
|
||||
return toAjax(iEqpMaintenancePlanAbnormalService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除维修计划-异常记录关联
|
||||
*
|
||||
* @param relIds 主键串
|
||||
*/
|
||||
@Log(title = "维修计划-异常记录关联", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{relIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] relIds) {
|
||||
return toAjax(iEqpMaintenancePlanAbnormalService.deleteWithValidByIds(Arrays.asList(relIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.EqpMaintenancePlanVo;
|
||||
import com.klp.flow.domain.bo.EqpMaintenancePlanBo;
|
||||
import com.klp.flow.service.IEqpMaintenancePlanService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 维修计划主
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/maintenancePlan")
|
||||
public class EqpMaintenancePlanController extends BaseController {
|
||||
|
||||
private final IEqpMaintenancePlanService iEqpMaintenancePlanService;
|
||||
|
||||
/**
|
||||
* 查询维修计划主列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<EqpMaintenancePlanVo> list(EqpMaintenancePlanBo bo, PageQuery pageQuery) {
|
||||
return iEqpMaintenancePlanService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出维修计划主列表
|
||||
*/
|
||||
@Log(title = "维修计划主", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(EqpMaintenancePlanBo bo, HttpServletResponse response) {
|
||||
List<EqpMaintenancePlanVo> list = iEqpMaintenancePlanService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "维修计划主", EqpMaintenancePlanVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取维修计划主详细信息
|
||||
*
|
||||
* @param planId 主键
|
||||
*/
|
||||
@GetMapping("/{planId}")
|
||||
public R<EqpMaintenancePlanVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long planId) {
|
||||
return R.ok(iEqpMaintenancePlanService.queryById(planId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增维修计划主
|
||||
*/
|
||||
@Log(title = "维修计划主", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody EqpMaintenancePlanBo bo) {
|
||||
return toAjax(iEqpMaintenancePlanService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改维修计划主
|
||||
*/
|
||||
@Log(title = "维修计划主", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody EqpMaintenancePlanBo bo) {
|
||||
return toAjax(iEqpMaintenancePlanService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除维修计划主
|
||||
*
|
||||
* @param planIds 主键串
|
||||
*/
|
||||
@Log(title = "维修计划主", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{planIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] planIds) {
|
||||
return toAjax(iEqpMaintenancePlanService.deleteWithValidByIds(Arrays.asList(planIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.EqpMaintenancePlanDetailVo;
|
||||
import com.klp.flow.domain.bo.EqpMaintenancePlanDetailBo;
|
||||
import com.klp.flow.service.IEqpMaintenancePlanDetailService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 维修计划明细
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/maintenancePlanDetail")
|
||||
public class EqpMaintenancePlanDetailController extends BaseController {
|
||||
|
||||
private final IEqpMaintenancePlanDetailService iEqpMaintenancePlanDetailService;
|
||||
|
||||
/**
|
||||
* 查询维修计划明细列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<EqpMaintenancePlanDetailVo> list(EqpMaintenancePlanDetailBo bo, PageQuery pageQuery) {
|
||||
return iEqpMaintenancePlanDetailService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出维修计划明细列表
|
||||
*/
|
||||
@Log(title = "维修计划明细", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(EqpMaintenancePlanDetailBo bo, HttpServletResponse response) {
|
||||
List<EqpMaintenancePlanDetailVo> list = iEqpMaintenancePlanDetailService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "维修计划明细", EqpMaintenancePlanDetailVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取维修计划明细详细信息
|
||||
*
|
||||
* @param detailId 主键
|
||||
*/
|
||||
@GetMapping("/{detailId}")
|
||||
public R<EqpMaintenancePlanDetailVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long detailId) {
|
||||
return R.ok(iEqpMaintenancePlanDetailService.queryById(detailId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增维修计划明细
|
||||
*/
|
||||
@Log(title = "维修计划明细", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody EqpMaintenancePlanDetailBo bo) {
|
||||
return toAjax(iEqpMaintenancePlanDetailService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改维修计划明细
|
||||
*/
|
||||
@Log(title = "维修计划明细", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody EqpMaintenancePlanDetailBo bo) {
|
||||
return toAjax(iEqpMaintenancePlanDetailService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除维修计划明细
|
||||
*
|
||||
* @param detailIds 主键串
|
||||
*/
|
||||
@Log(title = "维修计划明细", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{detailIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] detailIds) {
|
||||
return toAjax(iEqpMaintenancePlanDetailService.deleteWithValidByIds(Arrays.asList(detailIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.InvCountDiscrepancyVo;
|
||||
import com.klp.flow.domain.bo.InvCountDiscrepancyBo;
|
||||
import com.klp.flow.service.IInvCountDiscrepancyService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 盘库差异记录
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/countDiscrepancy")
|
||||
public class InvCountDiscrepancyController extends BaseController {
|
||||
|
||||
private final IInvCountDiscrepancyService iInvCountDiscrepancyService;
|
||||
|
||||
/**
|
||||
* 查询盘库差异记录列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<InvCountDiscrepancyVo> list(InvCountDiscrepancyBo bo, PageQuery pageQuery) {
|
||||
return iInvCountDiscrepancyService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出盘库差异记录列表
|
||||
*/
|
||||
@Log(title = "盘库差异记录", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(InvCountDiscrepancyBo bo, HttpServletResponse response) {
|
||||
List<InvCountDiscrepancyVo> list = iInvCountDiscrepancyService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "盘库差异记录", InvCountDiscrepancyVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取盘库差异记录详细信息
|
||||
*
|
||||
* @param discrepancyId 主键
|
||||
*/
|
||||
@GetMapping("/{discrepancyId}")
|
||||
public R<InvCountDiscrepancyVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long discrepancyId) {
|
||||
return R.ok(iInvCountDiscrepancyService.queryById(discrepancyId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增盘库差异记录
|
||||
*/
|
||||
@Log(title = "盘库差异记录", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody InvCountDiscrepancyBo bo) {
|
||||
return toAjax(iInvCountDiscrepancyService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量新增盘库差异记录
|
||||
*/
|
||||
@Log(title = "盘库差异记录", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/batch")
|
||||
public R<Void> addBatch(@Validated(AddGroup.class) @RequestBody List<InvCountDiscrepancyBo> bos) {
|
||||
return toAjax(iInvCountDiscrepancyService.insertBatchByBo(bos));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改盘库差异记录
|
||||
*/
|
||||
@Log(title = "盘库差异记录", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody InvCountDiscrepancyBo bo) {
|
||||
return toAjax(iInvCountDiscrepancyService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除盘库差异记录
|
||||
*
|
||||
* @param discrepancyIds 主键串
|
||||
*/
|
||||
@Log(title = "盘库差异记录", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{discrepancyIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] discrepancyIds) {
|
||||
return toAjax(iInvCountDiscrepancyService.deleteWithValidByIds(Arrays.asList(discrepancyIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.InvCountPlanVo;
|
||||
import com.klp.flow.domain.bo.InvCountPlanBo;
|
||||
import com.klp.flow.service.IInvCountPlanService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 盘库计划主
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/countPlan")
|
||||
public class InvCountPlanController extends BaseController {
|
||||
|
||||
private final IInvCountPlanService iInvCountPlanService;
|
||||
|
||||
/**
|
||||
* 查询盘库计划主列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<InvCountPlanVo> list(InvCountPlanBo bo, PageQuery pageQuery) {
|
||||
return iInvCountPlanService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出盘库计划主列表
|
||||
*/
|
||||
@Log(title = "盘库计划主", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(InvCountPlanBo bo, HttpServletResponse response) {
|
||||
List<InvCountPlanVo> list = iInvCountPlanService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "盘库计划主", InvCountPlanVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取盘库计划主详细信息
|
||||
*
|
||||
* @param planId 主键
|
||||
*/
|
||||
@GetMapping("/{planId}")
|
||||
public R<InvCountPlanVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long planId) {
|
||||
return R.ok(iInvCountPlanService.queryById(planId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增盘库计划主
|
||||
*/
|
||||
@Log(title = "盘库计划主", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody InvCountPlanBo bo) {
|
||||
return toAjax(iInvCountPlanService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改盘库计划主
|
||||
*/
|
||||
@Log(title = "盘库计划主", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody InvCountPlanBo bo) {
|
||||
return toAjax(iInvCountPlanService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除盘库计划主
|
||||
*
|
||||
* @param planIds 主键串
|
||||
*/
|
||||
@Log(title = "盘库计划主", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{planIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] planIds) {
|
||||
return toAjax(iInvCountPlanService.deleteWithValidByIds(Arrays.asList(planIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.InvCountPlanWarehouseVo;
|
||||
import com.klp.flow.domain.bo.InvCountPlanWarehouseBo;
|
||||
import com.klp.flow.service.IInvCountPlanWarehouseService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/countPlanWarehouse")
|
||||
public class InvCountPlanWarehouseController extends BaseController {
|
||||
|
||||
private final IInvCountPlanWarehouseService iInvCountPlanWarehouseService;
|
||||
|
||||
/**
|
||||
* 查询盘库计划-库区关联列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<InvCountPlanWarehouseVo> list(InvCountPlanWarehouseBo bo, PageQuery pageQuery) {
|
||||
return iInvCountPlanWarehouseService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出盘库计划-库区关联列表
|
||||
*/
|
||||
@Log(title = "盘库计划-库区关联", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(InvCountPlanWarehouseBo bo, HttpServletResponse response) {
|
||||
List<InvCountPlanWarehouseVo> list = iInvCountPlanWarehouseService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "盘库计划-库区关联", InvCountPlanWarehouseVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取盘库计划-库区关联详细信息
|
||||
*
|
||||
* @param relId 主键
|
||||
*/
|
||||
@GetMapping("/{relId}")
|
||||
public R<InvCountPlanWarehouseVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId) {
|
||||
return R.ok(iInvCountPlanWarehouseService.queryById(relId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增盘库计划-库区关联
|
||||
*/
|
||||
@Log(title = "盘库计划-库区关联", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody InvCountPlanWarehouseBo bo) {
|
||||
return toAjax(iInvCountPlanWarehouseService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改盘库计划-库区关联
|
||||
*/
|
||||
@Log(title = "盘库计划-库区关联", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody InvCountPlanWarehouseBo bo) {
|
||||
return toAjax(iInvCountPlanWarehouseService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除盘库计划-库区关联
|
||||
*
|
||||
* @param relIds 主键串
|
||||
*/
|
||||
@Log(title = "盘库计划-库区关联", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{relIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] relIds) {
|
||||
return toAjax(iInvCountPlanWarehouseService.deleteWithValidByIds(Arrays.asList(relIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.SchDetailCoilRelVo;
|
||||
import com.klp.flow.domain.bo.SchDetailCoilRelBo;
|
||||
import com.klp.flow.service.ISchDetailCoilRelService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 排产明细钢卷关系
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-25
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/detailCoilRel")
|
||||
public class SchDetailCoilRelController extends BaseController {
|
||||
|
||||
private final ISchDetailCoilRelService iSchDetailCoilRelService;
|
||||
|
||||
/**
|
||||
* 查询排产明细钢卷关系列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<SchDetailCoilRelVo> list(SchDetailCoilRelBo bo, PageQuery pageQuery) {
|
||||
return iSchDetailCoilRelService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出排产明细钢卷关系列表
|
||||
*/
|
||||
@Log(title = "排产明细钢卷关系", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(SchDetailCoilRelBo bo, HttpServletResponse response) {
|
||||
List<SchDetailCoilRelVo> list = iSchDetailCoilRelService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "排产明细钢卷关系", SchDetailCoilRelVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取排产明细钢卷关系详细信息
|
||||
*
|
||||
* @param relId 主键
|
||||
*/
|
||||
@GetMapping("/{relId}")
|
||||
public R<SchDetailCoilRelVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId) {
|
||||
return R.ok(iSchDetailCoilRelService.queryById(relId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增排产明细钢卷关系
|
||||
*/
|
||||
@Log(title = "排产明细钢卷关系", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody SchDetailCoilRelBo bo) {
|
||||
return toAjax(iSchDetailCoilRelService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改排产明细钢卷关系
|
||||
*/
|
||||
@Log(title = "排产明细钢卷关系", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SchDetailCoilRelBo bo) {
|
||||
return toAjax(iSchDetailCoilRelService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除排产明细钢卷关系
|
||||
*
|
||||
* @param relIds 主键串
|
||||
*/
|
||||
@Log(title = "排产明细钢卷关系", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{relIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] relIds) {
|
||||
return toAjax(iSchDetailCoilRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.SchProdScheduleVo;
|
||||
import com.klp.flow.domain.bo.SchProdScheduleBo;
|
||||
import com.klp.flow.service.ISchProdScheduleService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 排产单主
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/prodSchedule")
|
||||
public class SchProdScheduleController extends BaseController {
|
||||
|
||||
private final ISchProdScheduleService iSchProdScheduleService;
|
||||
|
||||
/**
|
||||
* 查询排产单主列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<SchProdScheduleVo> list(SchProdScheduleBo bo, PageQuery pageQuery) {
|
||||
return iSchProdScheduleService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出排产单主列表
|
||||
*/
|
||||
@Log(title = "排产单主", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(SchProdScheduleBo bo, HttpServletResponse response) {
|
||||
List<SchProdScheduleVo> list = iSchProdScheduleService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "排产单主", SchProdScheduleVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取排产单主详细信息
|
||||
*
|
||||
* @param scheduleId 主键
|
||||
*/
|
||||
@GetMapping("/{scheduleId}")
|
||||
public R<SchProdScheduleVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long scheduleId) {
|
||||
return R.ok(iSchProdScheduleService.queryById(scheduleId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增排产单主
|
||||
*/
|
||||
@Log(title = "排产单主", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody SchProdScheduleBo bo) {
|
||||
return toAjax(iSchProdScheduleService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改排产单主
|
||||
*/
|
||||
@Log(title = "排产单主", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SchProdScheduleBo bo) {
|
||||
return toAjax(iSchProdScheduleService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除排产单主
|
||||
*
|
||||
* @param scheduleIds 主键串
|
||||
*/
|
||||
@Log(title = "排产单主", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{scheduleIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] scheduleIds) {
|
||||
return toAjax(iSchProdScheduleService.deleteWithValidByIds(Arrays.asList(scheduleIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.SchProdScheduleDetailVo;
|
||||
import com.klp.flow.domain.bo.SchProdScheduleDetailBo;
|
||||
import com.klp.flow.service.ISchProdScheduleDetailService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 排产单明细
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/prodScheduleDetail")
|
||||
public class SchProdScheduleDetailController extends BaseController {
|
||||
|
||||
private final ISchProdScheduleDetailService iSchProdScheduleDetailService;
|
||||
|
||||
/**
|
||||
* 查询排产单明细列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<SchProdScheduleDetailVo> list(SchProdScheduleDetailBo bo, PageQuery pageQuery) {
|
||||
return iSchProdScheduleDetailService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出排产单明细列表
|
||||
*/
|
||||
@Log(title = "排产单明细", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(SchProdScheduleDetailBo bo, HttpServletResponse response) {
|
||||
List<SchProdScheduleDetailVo> list = iSchProdScheduleDetailService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "排产单明细", SchProdScheduleDetailVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取排产单明细详细信息
|
||||
*
|
||||
* @param scheduleDetailId 主键
|
||||
*/
|
||||
@GetMapping("/{scheduleDetailId}")
|
||||
public R<SchProdScheduleDetailVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long scheduleDetailId) {
|
||||
return R.ok(iSchProdScheduleDetailService.queryById(scheduleDetailId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增排产单明细
|
||||
*/
|
||||
@Log(title = "排产单明细", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody SchProdScheduleDetailBo bo) {
|
||||
return toAjax(iSchProdScheduleDetailService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改排产单明细
|
||||
*/
|
||||
@Log(title = "排产单明细", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SchProdScheduleDetailBo bo) {
|
||||
return toAjax(iSchProdScheduleDetailService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除排产单明细
|
||||
*
|
||||
* @param scheduleDetailIds 主键串
|
||||
*/
|
||||
@Log(title = "排产单明细", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{scheduleDetailIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] scheduleDetailIds) {
|
||||
return toAjax(iSchProdScheduleDetailService.deleteWithValidByIds(Arrays.asList(scheduleDetailIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.SchSaleScheduleRelVo;
|
||||
import com.klp.flow.domain.bo.SchSaleScheduleRelBo;
|
||||
import com.klp.flow.service.ISchSaleScheduleRelService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 销售订单-排产单多对多关联
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/saleScheduleRel")
|
||||
public class SchSaleScheduleRelController extends BaseController {
|
||||
|
||||
private final ISchSaleScheduleRelService iSchSaleScheduleRelService;
|
||||
|
||||
/**
|
||||
* 查询销售订单-排产单多对多关联列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<SchSaleScheduleRelVo> list(SchSaleScheduleRelBo bo, PageQuery pageQuery) {
|
||||
return iSchSaleScheduleRelService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出销售订单-排产单多对多关联列表
|
||||
*/
|
||||
@Log(title = "销售订单-排产单多对多关联", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(SchSaleScheduleRelBo bo, HttpServletResponse response) {
|
||||
List<SchSaleScheduleRelVo> list = iSchSaleScheduleRelService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "销售订单-排产单多对多关联", SchSaleScheduleRelVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取销售订单-排产单多对多关联详细信息
|
||||
*
|
||||
* @param relId 主键
|
||||
*/
|
||||
@GetMapping("/{relId}")
|
||||
public R<SchSaleScheduleRelVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId) {
|
||||
return R.ok(iSchSaleScheduleRelService.queryById(relId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增销售订单-排产单多对多关联
|
||||
*/
|
||||
@Log(title = "销售订单-排产单多对多关联", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody SchSaleScheduleRelBo bo) {
|
||||
return toAjax(iSchSaleScheduleRelService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改销售订单-排产单多对多关联
|
||||
*/
|
||||
@Log(title = "销售订单-排产单多对多关联", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SchSaleScheduleRelBo bo) {
|
||||
return toAjax(iSchSaleScheduleRelService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除销售订单-排产单多对多关联
|
||||
*
|
||||
* @param relIds 主键串
|
||||
*/
|
||||
@Log(title = "销售订单-排产单多对多关联", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{relIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] relIds) {
|
||||
return toAjax(iSchSaleScheduleRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.TsAcceptCoilRelVo;
|
||||
import com.klp.flow.domain.bo.TsAcceptCoilRelBo;
|
||||
import com.klp.flow.service.ITsAcceptCoilRelService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/acceptCoilRel")
|
||||
public class TsAcceptCoilRelController extends BaseController {
|
||||
|
||||
private final ITsAcceptCoilRelService iTsAcceptCoilRelService;
|
||||
|
||||
/**
|
||||
* 查询受理单关联钢卷中间列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<TsAcceptCoilRelVo> list(TsAcceptCoilRelBo bo, PageQuery pageQuery) {
|
||||
return iTsAcceptCoilRelService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出受理单关联钢卷中间列表
|
||||
*/
|
||||
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(TsAcceptCoilRelBo bo, HttpServletResponse response) {
|
||||
List<TsAcceptCoilRelVo> list = iTsAcceptCoilRelService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "受理单关联钢卷中间", TsAcceptCoilRelVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取受理单关联钢卷中间详细信息
|
||||
*
|
||||
* @param relId 主键
|
||||
*/
|
||||
@GetMapping("/{relId}")
|
||||
public R<TsAcceptCoilRelVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId) {
|
||||
return R.ok(iTsAcceptCoilRelService.queryById(relId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增受理单关联钢卷中间
|
||||
*/
|
||||
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsAcceptCoilRelBo bo) {
|
||||
return toAjax(iTsAcceptCoilRelService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改受理单关联钢卷中间
|
||||
*/
|
||||
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsAcceptCoilRelBo bo) {
|
||||
return toAjax(iTsAcceptCoilRelService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除受理单关联钢卷中间
|
||||
*
|
||||
* @param relIds 主键串
|
||||
*/
|
||||
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{relIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] relIds) {
|
||||
return toAjax(iTsAcceptCoilRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.TsComplaintAcceptVo;
|
||||
import com.klp.flow.domain.bo.TsComplaintAcceptBo;
|
||||
import com.klp.flow.service.ITsComplaintAcceptService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 投诉受理单主
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/complaintAccept")
|
||||
public class TsComplaintAcceptController extends BaseController {
|
||||
|
||||
private final ITsComplaintAcceptService iTsComplaintAcceptService;
|
||||
|
||||
/**
|
||||
* 查询投诉受理单主列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<TsComplaintAcceptVo> list(TsComplaintAcceptBo bo, PageQuery pageQuery) {
|
||||
return iTsComplaintAcceptService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出投诉受理单主列表
|
||||
*/
|
||||
@Log(title = "投诉受理单主", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(TsComplaintAcceptBo bo, HttpServletResponse response) {
|
||||
List<TsComplaintAcceptVo> list = iTsComplaintAcceptService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "投诉受理单主", TsComplaintAcceptVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取投诉受理单主详细信息
|
||||
*
|
||||
* @param acceptId 主键
|
||||
*/
|
||||
@GetMapping("/{acceptId}")
|
||||
public R<TsComplaintAcceptVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long acceptId) {
|
||||
return R.ok(iTsComplaintAcceptService.queryById(acceptId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增投诉受理单主
|
||||
*/
|
||||
@Log(title = "投诉受理单主", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsComplaintAcceptBo bo) {
|
||||
return toAjax(iTsComplaintAcceptService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改投诉受理单主
|
||||
*/
|
||||
@Log(title = "投诉受理单主", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsComplaintAcceptBo bo) {
|
||||
return toAjax(iTsComplaintAcceptService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除投诉受理单主
|
||||
*
|
||||
* @param acceptIds 主键串
|
||||
*/
|
||||
@Log(title = "投诉受理单主", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{acceptIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] acceptIds) {
|
||||
return toAjax(iTsComplaintAcceptService.deleteWithValidByIds(Arrays.asList(acceptIds), true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 意见下发:修改flow_status=2,按字典部门创建代办任务
|
||||
*
|
||||
* @param acceptId 受理单ID
|
||||
*/
|
||||
@Log(title = "意见下发", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/opinionDispatch/{acceptId}")
|
||||
public R<Void> opinionDispatch(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long acceptId) {
|
||||
return toAjax(iTsComplaintAcceptService.opinionDispatch(acceptId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 反馈下发:修改flow_status=4,按字典部门创建执行反馈记录
|
||||
*
|
||||
* @param acceptId 受理单ID
|
||||
*/
|
||||
@Log(title = "反馈下发", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/feedbackDispatch")
|
||||
public R<Void> feedbackDispatch(@RequestParam Long acceptId,
|
||||
@RequestParam String deptIds) {
|
||||
List<Long> deptIdList = Arrays.stream(deptIds.split(",")).map(Long::parseLong).collect(Collectors.toList());
|
||||
return toAjax(iTsComplaintAcceptService.feedbackDispatch(acceptId, deptIdList));
|
||||
}
|
||||
|
||||
/**
|
||||
* 意见驳回:当前部门taskStatus→1、rejectMark→1,主表flowStatus→1,其他部门rejectMark→2
|
||||
*
|
||||
* @param taskId 代办任务ID
|
||||
* @param reason 驳回意见(填入deptOpinion)
|
||||
*/
|
||||
@Log(title = "意见驳回", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/opinionReject/{taskId}")
|
||||
public R<Void> opinionReject(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long taskId,
|
||||
@RequestParam String reason) {
|
||||
return toAjax(iTsComplaintAcceptService.opinionReject(taskId, reason));
|
||||
}
|
||||
|
||||
/**
|
||||
* 反馈驳回:当前部门executeStatus→1、rejectMark→1,主表flowStatus→3,其他部门rejectMark→2
|
||||
*
|
||||
* @param relId 执行反馈记录ID
|
||||
* @param reason 驳回原因(填入executeResult)
|
||||
*/
|
||||
@Log(title = "反馈驳回", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/feedbackReject/{relId}")
|
||||
public R<Void> feedbackReject(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId,
|
||||
@RequestParam String reason) {
|
||||
return toAjax(iTsComplaintAcceptService.feedbackReject(relId, reason));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.TsComplaintTaskVo;
|
||||
import com.klp.flow.domain.bo.TsComplaintTaskBo;
|
||||
import com.klp.flow.service.ITsComplaintTaskService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/complaintTask")
|
||||
public class TsComplaintTaskController extends BaseController {
|
||||
|
||||
private final ITsComplaintTaskService iTsComplaintTaskService;
|
||||
|
||||
/**
|
||||
* 查询各部门投诉代办任务&意见列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<TsComplaintTaskVo> list(TsComplaintTaskBo bo, PageQuery pageQuery) {
|
||||
return iTsComplaintTaskService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出各部门投诉代办任务&意见列表
|
||||
*/
|
||||
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(TsComplaintTaskBo bo, HttpServletResponse response) {
|
||||
List<TsComplaintTaskVo> list = iTsComplaintTaskService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "各部门投诉代办任务&意见", TsComplaintTaskVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取各部门投诉代办任务&意见详细信息
|
||||
*
|
||||
* @param taskId 主键
|
||||
*/
|
||||
@GetMapping("/{taskId}")
|
||||
public R<TsComplaintTaskVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long taskId) {
|
||||
return R.ok(iTsComplaintTaskService.queryById(taskId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增各部门投诉代办任务&意见
|
||||
*/
|
||||
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsComplaintTaskBo bo) {
|
||||
return toAjax(iTsComplaintTaskService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改各部门投诉代办任务&意见
|
||||
*/
|
||||
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsComplaintTaskBo bo) {
|
||||
return toAjax(iTsComplaintTaskService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除各部门投诉代办任务&意见
|
||||
*
|
||||
* @param taskIds 主键串
|
||||
*/
|
||||
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{taskIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] taskIds) {
|
||||
return toAjax(iTsComplaintTaskService.deleteWithValidByIds(Arrays.asList(taskIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.TsPlanExecuteRelVo;
|
||||
import com.klp.flow.domain.bo.TsPlanExecuteRelBo;
|
||||
import com.klp.flow.service.ITsPlanExecuteRelService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/planExecuteRel")
|
||||
public class TsPlanExecuteRelController extends BaseController {
|
||||
|
||||
private final ITsPlanExecuteRelService iTsPlanExecuteRelService;
|
||||
|
||||
/**
|
||||
* 查询最终方案下发部门及执行反馈列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<TsPlanExecuteRelVo> list(TsPlanExecuteRelBo bo, PageQuery pageQuery) {
|
||||
return iTsPlanExecuteRelService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出最终方案下发部门及执行反馈列表
|
||||
*/
|
||||
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(TsPlanExecuteRelBo bo, HttpServletResponse response) {
|
||||
List<TsPlanExecuteRelVo> list = iTsPlanExecuteRelService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "最终方案下发部门及执行反馈", TsPlanExecuteRelVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最终方案下发部门及执行反馈详细信息
|
||||
*
|
||||
* @param relId 主键
|
||||
*/
|
||||
@GetMapping("/{relId}")
|
||||
public R<TsPlanExecuteRelVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId) {
|
||||
return R.ok(iTsPlanExecuteRelService.queryById(relId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增最终方案下发部门及执行反馈
|
||||
*/
|
||||
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsPlanExecuteRelBo bo) {
|
||||
return toAjax(iTsPlanExecuteRelService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改最终方案下发部门及执行反馈
|
||||
*/
|
||||
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsPlanExecuteRelBo bo) {
|
||||
return toAjax(iTsPlanExecuteRelService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除最终方案下发部门及执行反馈
|
||||
*
|
||||
* @param relIds 主键串
|
||||
*/
|
||||
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{relIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] relIds) {
|
||||
return toAjax(iTsPlanExecuteRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 维修计划主对象 eqp_maintenance_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("eqp_maintenance_plan")
|
||||
public class EqpMaintenancePlan extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 计划ID
|
||||
*/
|
||||
@TableId(value = "plan_id")
|
||||
private Long planId;
|
||||
/**
|
||||
* 计划编号
|
||||
*/
|
||||
private String planNo;
|
||||
/**
|
||||
* 计划名称
|
||||
*/
|
||||
private String planName;
|
||||
/**
|
||||
* 维修类型:1=定期保养 2=安全整改 3=专项检修 4=故障维修
|
||||
*/
|
||||
private Long repairType;
|
||||
/**
|
||||
* 优先级:1=普通 2=重要
|
||||
*/
|
||||
private Long priorityLevel;
|
||||
/**
|
||||
* 计划执行状态:1=待维修,2=维修中,3=已完成,4=已取消
|
||||
*/
|
||||
private Long planStatus;
|
||||
/**
|
||||
* 审批状态:0=草稿 1=待审批 2=已审批 3=已驳回
|
||||
*/
|
||||
private Long approvalStatus;
|
||||
/**
|
||||
* 计划开始时间
|
||||
*/
|
||||
private Date plannedStartTime;
|
||||
/**
|
||||
* 计划结束时间
|
||||
*/
|
||||
private Date plannedEndTime;
|
||||
/**
|
||||
* 负责部门
|
||||
*/
|
||||
private String dutyDept;
|
||||
/**
|
||||
* 计划负责人
|
||||
*/
|
||||
private String planOwner;
|
||||
/**
|
||||
* 预算金额(元)
|
||||
*/
|
||||
private BigDecimal budgetAmount;
|
||||
/**
|
||||
* 计划说明
|
||||
*/
|
||||
private String planDescription;
|
||||
/**
|
||||
* 实际完成时间
|
||||
*/
|
||||
private Date actualCompleteTime;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0正常 2删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
/**
|
||||
* 维修计划-异常记录关联对象 eqp_maintenance_plan_abnormal
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("eqp_maintenance_plan_abnormal")
|
||||
public class EqpMaintenancePlanAbnormal extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 关联ID
|
||||
*/
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
/**
|
||||
* 维修计划ID
|
||||
*/
|
||||
private Long planId;
|
||||
/**
|
||||
* 巡检记录ID(eqp_equipment_inspection_record.record_id,run_status=2 异常记录)
|
||||
*/
|
||||
private Long recordId;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0正常 2删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 维修计划明细对象 eqp_maintenance_plan_detail
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("eqp_maintenance_plan_detail")
|
||||
public class EqpMaintenancePlanDetail extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 明细ID
|
||||
*/
|
||||
@TableId(value = "detail_id")
|
||||
private Long detailId;
|
||||
/**
|
||||
* 维修计划ID
|
||||
*/
|
||||
private Long planId;
|
||||
/**
|
||||
* 巡检记录ID(来源异常工单)
|
||||
*/
|
||||
private Long recordId;
|
||||
/**
|
||||
* 设备ID(用户手动选择,关联 eqp_equipment_management.equipment_id)
|
||||
*/
|
||||
private Long equipmentId;
|
||||
/**
|
||||
* 产线名称
|
||||
*/
|
||||
private String productionLine;
|
||||
/**
|
||||
* 设备部件名称
|
||||
*/
|
||||
private String componentName;
|
||||
/**
|
||||
* 单条维修项计划执行日期
|
||||
*/
|
||||
private Date itemPlanDate;
|
||||
/**
|
||||
* 明细类型:0=保养 1=维修
|
||||
*/
|
||||
private Long maintenanceCategory;
|
||||
/**
|
||||
* 明细完成状态:0=未开始 1=进行中 2=已完成
|
||||
*/
|
||||
private Long detailStatus;
|
||||
/**
|
||||
* 维修内容描述
|
||||
*/
|
||||
private String repairContent;
|
||||
/**
|
||||
* 维修负责人
|
||||
*/
|
||||
private String repairUser;
|
||||
/**
|
||||
* 完成时间(打勾时记录)
|
||||
*/
|
||||
private Date completeTime;
|
||||
/**
|
||||
* 实际支出金额(元)
|
||||
*/
|
||||
private BigDecimal actualCost;
|
||||
/**
|
||||
* 完成进度百分比(0-100)
|
||||
*/
|
||||
private Long progressRate;
|
||||
/**
|
||||
* 目标厂家
|
||||
*/
|
||||
private String targetManufacturer;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0正常 2删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库差异记录对象 inv_count_discrepancy
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("inv_count_discrepancy")
|
||||
public class InvCountDiscrepancy extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "discrepancy_id")
|
||||
private Long discrepancyId;
|
||||
/**
|
||||
* 盘库计划明细ID
|
||||
*/
|
||||
private Long relId;
|
||||
/**
|
||||
* 差异类型:1=盘盈, 2=盘亏, 3=状态不符, 4=重量偏差
|
||||
*/
|
||||
private Integer discrepancyType;
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
private Long coilId;
|
||||
/**
|
||||
* 钢卷号
|
||||
*/
|
||||
private String enterCoilNo;
|
||||
/**
|
||||
* 差异详情(JSON:含系统值、实盘值对比)
|
||||
*/
|
||||
private String discrepancyDetail;
|
||||
/**
|
||||
* 原因分析
|
||||
*/
|
||||
private String reasonAnalysis;
|
||||
/**
|
||||
* 处理建议
|
||||
*/
|
||||
private String processSuggestion;
|
||||
/**
|
||||
* 处理结果
|
||||
*/
|
||||
private String processResult;
|
||||
/**
|
||||
* 处理状态:0=待处理, 1=处理中, 2=已处理
|
||||
*/
|
||||
private Integer processStatus;
|
||||
/**
|
||||
* 处理人ID
|
||||
*/
|
||||
private Long processUserId;
|
||||
/**
|
||||
* 处理人姓名
|
||||
*/
|
||||
private String processUserName;
|
||||
/**
|
||||
* 处理时间
|
||||
*/
|
||||
private Date processTime;
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
private String attachFile;
|
||||
/**
|
||||
* 删除标志(0=正常,1=已删除)
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
87
klp-flow/src/main/java/com/klp/flow/domain/InvCountPlan.java
Normal file
87
klp-flow/src/main/java/com/klp/flow/domain/InvCountPlan.java
Normal file
@@ -0,0 +1,87 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库计划主对象 inv_count_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("inv_count_plan")
|
||||
public class InvCountPlan extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "plan_id")
|
||||
private Long planId;
|
||||
/**
|
||||
* 盘库计划编号(如 PD-20260622-001)
|
||||
*/
|
||||
private String planCode;
|
||||
/**
|
||||
* 盘库计划名称
|
||||
*/
|
||||
private String planName;
|
||||
/**
|
||||
* 盘库日期
|
||||
*/
|
||||
private Date countDate;
|
||||
/**
|
||||
* 截止时间
|
||||
*/
|
||||
private Date deadlineTime;
|
||||
/**
|
||||
* 盘点人ID
|
||||
*/
|
||||
private Long countUserId;
|
||||
/**
|
||||
* 盘点人姓名
|
||||
*/
|
||||
private String countUserName;
|
||||
/**
|
||||
* 负责人ID
|
||||
*/
|
||||
private Long principalUserId;
|
||||
/**
|
||||
* 负责人姓名
|
||||
*/
|
||||
private String principalUserName;
|
||||
/**
|
||||
* 参与人员ID列表(逗号分隔)
|
||||
*/
|
||||
private String participantIds;
|
||||
/**
|
||||
* 参与人员姓名列表(逗号分隔)
|
||||
*/
|
||||
private String participantNames;
|
||||
/**
|
||||
* 计划状态:0=草稿, 1=待审批, 2=执行中, 3=差异处理中, 4=已归档
|
||||
*/
|
||||
private Integer planStatus;
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
private String attachFile;
|
||||
/**
|
||||
* 删除标志(0=正常,1=已删除)
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联对象 inv_count_plan_warehouse
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("inv_count_plan_warehouse")
|
||||
public class InvCountPlanWarehouse extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
/**
|
||||
* 盘库计划ID
|
||||
*/
|
||||
private Long planId;
|
||||
/**
|
||||
* 逻辑库区ID
|
||||
*/
|
||||
private Long warehouseId;
|
||||
/**
|
||||
* 逻辑库区名称(冗余)
|
||||
*/
|
||||
private String warehouseName;
|
||||
/**
|
||||
* 实际库区ID
|
||||
*/
|
||||
private Long actualWarehouseId;
|
||||
/**
|
||||
* 实际库区名称(冗余)
|
||||
*/
|
||||
private String actualWarehouseName;
|
||||
/**
|
||||
* 系统钢卷数量
|
||||
*/
|
||||
private Long systemCoilCount;
|
||||
/**
|
||||
* 系统总重量(kg)
|
||||
*/
|
||||
private BigDecimal systemTotalWeight;
|
||||
/**
|
||||
* 实际盘点数量
|
||||
*/
|
||||
private Long actualCoilCount;
|
||||
/**
|
||||
* 实际盘点总重量(kg)
|
||||
*/
|
||||
private BigDecimal actualTotalWeight;
|
||||
/**
|
||||
* 是否账实一致(0=不一致, 1=一致, NULL=未盘点)
|
||||
*/
|
||||
private Integer isConsistent;
|
||||
/**
|
||||
* 出入库记录查询起始时间
|
||||
*/
|
||||
private Date ioStartTime;
|
||||
/**
|
||||
* 出入库记录查询截止时间
|
||||
*/
|
||||
private Date ioEndTime;
|
||||
/**
|
||||
* 出入库记录快照(JSON)
|
||||
*/
|
||||
private String snapshotIoRecord;
|
||||
/**
|
||||
* 逻辑库区钢卷明细快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilLogic;
|
||||
/**
|
||||
* 实际库区钢卷明细快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilActual;
|
||||
/**
|
||||
* 钢卷数量统计快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilStats;
|
||||
/**
|
||||
* 删除标志(0=正常,1=已删除)
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
/**
|
||||
* 排产明细钢卷关系对象 sch_detail_coil_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-25
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("sch_detail_coil_rel")
|
||||
public class SchDetailCoilRel extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
/**
|
||||
* 排产明细ID(关联 sch_prod_schedule_detail.schedule_detail_id)
|
||||
*/
|
||||
private Long scheduleDetailId;
|
||||
/**
|
||||
* 钢卷ID(关联 wms_material_coil.coil_id)
|
||||
*/
|
||||
private Long coilId;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标志(0=正常,1=已删除)
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
|
||||
}
|
||||
140
klp-flow/src/main/java/com/klp/flow/domain/SchProdSchedule.java
Normal file
140
klp-flow/src/main/java/com/klp/flow/domain/SchProdSchedule.java
Normal file
@@ -0,0 +1,140 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 排产单主对象 sch_prod_schedule
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("sch_prod_schedule")
|
||||
public class SchProdSchedule extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 排产单主键ID
|
||||
*/
|
||||
@TableId(value = "schedule_id")
|
||||
private Long scheduleId;
|
||||
/**
|
||||
* 排产单号(唯一标识,钢卷关联依据)
|
||||
*/
|
||||
private String scheduleNo;
|
||||
/**
|
||||
* 生产日期(和合同号组成业务关联键)
|
||||
*/
|
||||
private Date prodDate;
|
||||
/**
|
||||
* 排产状态:0草稿 1待审核 2已下达 3已退回
|
||||
*/
|
||||
private Long scheduleStatus;
|
||||
/**
|
||||
* 排产总计划吨数
|
||||
*/
|
||||
private BigDecimal totalPlanWeight;
|
||||
/**
|
||||
* 关联销售合同号
|
||||
*/
|
||||
private String relContractNo;
|
||||
/**
|
||||
* 业务员
|
||||
*/
|
||||
private String businessUser;
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
private String businessPhone;
|
||||
/**
|
||||
* 订单日期
|
||||
*/
|
||||
private Date orderDate;
|
||||
/**
|
||||
* 订货单位
|
||||
*/
|
||||
private String customerName;
|
||||
/**
|
||||
* 交货期(天)
|
||||
*/
|
||||
private Long deliveryCycle;
|
||||
/**
|
||||
* 产品用途
|
||||
*/
|
||||
private String usePurpose;
|
||||
/**
|
||||
* 品名:冷硬钢卷/镀锌钢卷/冷轧钢卷/镀铬钢卷
|
||||
*/
|
||||
private String productType;
|
||||
/**
|
||||
* 厚度公差
|
||||
*/
|
||||
private String thicknessTolerance;
|
||||
/**
|
||||
* 宽度公差
|
||||
*/
|
||||
private String widthTolerance;
|
||||
/**
|
||||
* 表面质量
|
||||
*/
|
||||
private String surfaceQuality;
|
||||
/**
|
||||
* 表面处理
|
||||
*/
|
||||
private String surfaceTreatment;
|
||||
/**
|
||||
* 内径尺寸
|
||||
*/
|
||||
private String innerDiameter;
|
||||
/**
|
||||
* 外径要求
|
||||
*/
|
||||
private String outerDiameter;
|
||||
/**
|
||||
* 包装要求
|
||||
*/
|
||||
private String packReq;
|
||||
/**
|
||||
* 切边要求
|
||||
*/
|
||||
private String cutEdgeReq;
|
||||
/**
|
||||
* 单件重量
|
||||
*/
|
||||
private String singleCoilWeight;
|
||||
/**
|
||||
* 交货重量偏差
|
||||
*/
|
||||
private String weightDeviation;
|
||||
/**
|
||||
* 其他技术要求
|
||||
*/
|
||||
private String otherTechReq;
|
||||
/**
|
||||
* 付款情况说明
|
||||
*/
|
||||
private String paymentDesc;
|
||||
/**
|
||||
* 退回原因
|
||||
*/
|
||||
private String returnReason;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0正常 2删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 排产单明细对象 sch_prod_schedule_detail
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("sch_prod_schedule_detail")
|
||||
public class SchProdScheduleDetail extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 排产明细ID
|
||||
*/
|
||||
@TableId(value = "schedule_detail_id")
|
||||
private Long scheduleDetailId;
|
||||
/**
|
||||
* 排产单主表ID
|
||||
*/
|
||||
private Long scheduleId;
|
||||
/**
|
||||
* 来源销售订单明细ID(溯源原始订单规格)
|
||||
*/
|
||||
private Long orderDetailId;
|
||||
/**
|
||||
* 规格 例:1.0X1250
|
||||
*/
|
||||
private String spec;
|
||||
/**
|
||||
* 材质 DX51D
|
||||
*/
|
||||
private String material;
|
||||
/**
|
||||
* 本次排产吨数(数量),可审核修改
|
||||
*/
|
||||
private BigDecimal scheduleWeight;
|
||||
/**
|
||||
* 品名
|
||||
*/
|
||||
private String productType;
|
||||
/**
|
||||
* 单行排产备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0正常 2删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 销售订单-排产单多对多关联对象 sch_sale_schedule_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("sch_sale_schedule_rel")
|
||||
public class SchSaleScheduleRel extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 关联主键ID
|
||||
*/
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
/**
|
||||
* 销售订单ID
|
||||
*/
|
||||
private Long orderId;
|
||||
/**
|
||||
* 排产单ID
|
||||
*/
|
||||
private Long scheduleId;
|
||||
/**
|
||||
* 本次排产占用该订单重量
|
||||
*/
|
||||
private BigDecimal relWeight;
|
||||
/**
|
||||
* 关联备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0正常 2删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间对象 ts_accept_coil_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ts_accept_coil_rel")
|
||||
public class TsAcceptCoilRel extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
/**
|
||||
* 投诉受理单ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
private Long coilId;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 投诉受理单主对象 ts_complaint_accept
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ts_complaint_accept")
|
||||
public class TsComplaintAccept extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 受理单主键
|
||||
*/
|
||||
@TableId(value = "accept_id")
|
||||
private Long acceptId;
|
||||
/**
|
||||
* 投诉编号 TS-2026-001
|
||||
*/
|
||||
private String complaintNo;
|
||||
/**
|
||||
* 投诉日期
|
||||
*/
|
||||
private Date complaintDate;
|
||||
/**
|
||||
* 投诉情况描述
|
||||
*/
|
||||
private String complaintContent;
|
||||
/**
|
||||
* 客户诉求
|
||||
*/
|
||||
private String customerDemand;
|
||||
/**
|
||||
* 客户照片凭证等
|
||||
*/
|
||||
private String file;
|
||||
/**
|
||||
* 审核状态 0待审核 1已通过 2未通过
|
||||
*/
|
||||
private Long auditStatus;
|
||||
/**
|
||||
* 审核意见
|
||||
*/
|
||||
private String auditOpinion;
|
||||
/**
|
||||
* 审核人ID
|
||||
*/
|
||||
private Long auditUserId;
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
private Date auditTime;
|
||||
/**
|
||||
* 流程阶段:
|
||||
1=待审核 2=部门意见填写中 3=待总负责人汇总方案 4=方案下发执行反馈中 5=全部办结
|
||||
*/
|
||||
private Long flowStatus;
|
||||
/**
|
||||
* 总负责人ID
|
||||
*/
|
||||
private Long principalUserId;
|
||||
/**
|
||||
* 总负责人整合后的完整处理方案
|
||||
*/
|
||||
private String planContent;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见对象 ts_complaint_task
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ts_complaint_task")
|
||||
public class TsComplaintTask extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 代办任务ID
|
||||
*/
|
||||
@TableId(value = "task_id")
|
||||
private Long taskId;
|
||||
/**
|
||||
* 关联投诉受理单ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
/**
|
||||
* 负责部门ID(销售/质量/生产)
|
||||
*/
|
||||
private Long deptId;
|
||||
/**
|
||||
* 任务状态 0待填写意见 1已完成填写
|
||||
*/
|
||||
private Long taskStatus;
|
||||
/**
|
||||
* 意见单号
|
||||
*/
|
||||
private String fillNo;
|
||||
/**
|
||||
* 部门处理意见
|
||||
*/
|
||||
private String deptOpinion;
|
||||
/**
|
||||
* 填写意见的部门员工ID
|
||||
*/
|
||||
private Long fillUserId;
|
||||
/**
|
||||
* 意见填写时间
|
||||
*/
|
||||
private Date fillTime;
|
||||
/**
|
||||
* 意见文件
|
||||
*/
|
||||
private String fillFile;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 驳回标记 0=无驳回 1=本部门驳回 2=存在部门驳回
|
||||
*/
|
||||
private Long rejectMark;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈对象 ts_plan_execute_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ts_plan_execute_rel")
|
||||
public class TsPlanExecuteRel extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
/**
|
||||
* 关联最终方案ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
/**
|
||||
* 被下发执行的部门ID
|
||||
*/
|
||||
private Long deptId;
|
||||
/**
|
||||
* 执行状态 0待执行反馈 1已反馈完成
|
||||
*/
|
||||
private Long executeStatus;
|
||||
/**
|
||||
* 部门执行结果反馈
|
||||
*/
|
||||
private String executeResult;
|
||||
/**
|
||||
* 反馈单号
|
||||
*/
|
||||
private String feedbackNo;
|
||||
/**
|
||||
* 反馈人
|
||||
*/
|
||||
private Long feedbackUserId;
|
||||
/**
|
||||
* 反馈时间
|
||||
*/
|
||||
private Date feedbackTime;
|
||||
/**
|
||||
* 反馈文件
|
||||
*/
|
||||
private String feedbackFile;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 驳回标记 0=无驳回 1=本部门驳回 2=存在部门驳回
|
||||
*/
|
||||
private Long rejectMark;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
|
||||
/**
|
||||
* 维修计划-异常记录关联业务对象 eqp_maintenance_plan_abnormal
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class EqpMaintenancePlanAbnormalBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 关联ID
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 维修计划ID
|
||||
*/
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 巡检记录ID(eqp_equipment_inspection_record.record_id,run_status=2 异常记录)
|
||||
*/
|
||||
private Long recordId;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
/**
|
||||
* 维修计划主业务对象 eqp_maintenance_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class EqpMaintenancePlanBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 计划ID
|
||||
*/
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 计划编号
|
||||
*/
|
||||
private String planNo;
|
||||
|
||||
/**
|
||||
* 计划名称
|
||||
*/
|
||||
private String planName;
|
||||
|
||||
/**
|
||||
* 维修类型:1=定期保养 2=安全整改 3=专项检修 4=故障维修
|
||||
*/
|
||||
private Long repairType;
|
||||
|
||||
/**
|
||||
* 优先级:1=普通 2=重要
|
||||
*/
|
||||
private Long priorityLevel;
|
||||
|
||||
/**
|
||||
* 计划执行状态:1=待维修,2=维修中,3=已完成,4=已取消
|
||||
*/
|
||||
private Long planStatus;
|
||||
|
||||
/**
|
||||
* 审批状态:0=草稿 1=待审批 2=已审批 3=已驳回
|
||||
*/
|
||||
private Long approvalStatus;
|
||||
|
||||
/**
|
||||
* 计划开始时间
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
|
||||
private Date plannedStartTime;
|
||||
|
||||
/**
|
||||
* 计划结束时间
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
|
||||
private Date plannedEndTime;
|
||||
|
||||
/**
|
||||
* 负责部门
|
||||
*/
|
||||
private String dutyDept;
|
||||
|
||||
/**
|
||||
* 计划负责人
|
||||
*/
|
||||
private String planOwner;
|
||||
|
||||
/**
|
||||
* 预算金额(元)
|
||||
*/
|
||||
private BigDecimal budgetAmount;
|
||||
|
||||
/**
|
||||
* 计划说明
|
||||
*/
|
||||
private String planDescription;
|
||||
|
||||
/**
|
||||
* 实际完成时间
|
||||
*/
|
||||
private Date actualCompleteTime;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 维修计划明细业务对象 eqp_maintenance_plan_detail
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class EqpMaintenancePlanDetailBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 明细ID
|
||||
*/
|
||||
private Long detailId;
|
||||
|
||||
/**
|
||||
* 维修计划ID
|
||||
*/
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 巡检记录ID(来源异常工单)
|
||||
*/
|
||||
private Long recordId;
|
||||
|
||||
/**
|
||||
* 设备ID(用户手动选择,关联 eqp_equipment_management.equipment_id)
|
||||
*/
|
||||
private Long equipmentId;
|
||||
|
||||
/**
|
||||
* 产线名称
|
||||
*/
|
||||
private String productionLine;
|
||||
|
||||
/**
|
||||
* 设备部件名称
|
||||
*/
|
||||
private String componentName;
|
||||
|
||||
/**
|
||||
* 单条维修项计划执行日期
|
||||
*/
|
||||
private Date itemPlanDate;
|
||||
|
||||
/**
|
||||
* 明细类型:0=保养 1=维修
|
||||
*/
|
||||
private Long maintenanceCategory;
|
||||
|
||||
/**
|
||||
* 明细完成状态:0=未开始 1=进行中 2=已完成
|
||||
*/
|
||||
private Long detailStatus;
|
||||
|
||||
/**
|
||||
* 维修内容描述
|
||||
*/
|
||||
private String repairContent;
|
||||
|
||||
/**
|
||||
* 维修负责人
|
||||
*/
|
||||
private String repairUser;
|
||||
|
||||
/**
|
||||
* 完成时间(打勾时记录)
|
||||
*/
|
||||
private Date completeTime;
|
||||
|
||||
/**
|
||||
* 实际支出金额(元)
|
||||
*/
|
||||
private BigDecimal actualCost;
|
||||
|
||||
/**
|
||||
* 完成进度百分比(0-100)
|
||||
*/
|
||||
private Long progressRate;
|
||||
|
||||
/**
|
||||
* 目标厂家
|
||||
*/
|
||||
private String targetManufacturer;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库差异记录业务对象 inv_count_discrepancy
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class InvCountDiscrepancyBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
private Long discrepancyId;
|
||||
|
||||
/**
|
||||
* 盘库计划明细ID
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 差异类型:1=盘盈, 2=盘亏, 3=状态不符, 4=重量偏差
|
||||
*/
|
||||
private Integer discrepancyType;
|
||||
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
* 钢卷号
|
||||
*/
|
||||
private String enterCoilNo;
|
||||
|
||||
/**
|
||||
* 差异详情(JSON:含系统值、实盘值对比)
|
||||
*/
|
||||
private String discrepancyDetail;
|
||||
|
||||
/**
|
||||
* 原因分析
|
||||
*/
|
||||
private String reasonAnalysis;
|
||||
|
||||
/**
|
||||
* 处理建议
|
||||
*/
|
||||
private String processSuggestion;
|
||||
|
||||
/**
|
||||
* 处理结果
|
||||
*/
|
||||
private String processResult;
|
||||
|
||||
/**
|
||||
* 处理状态:0=待处理, 1=处理中, 2=已处理
|
||||
*/
|
||||
private Integer processStatus;
|
||||
|
||||
/**
|
||||
* 处理人ID
|
||||
*/
|
||||
private Long processUserId;
|
||||
|
||||
/**
|
||||
* 处理人姓名
|
||||
*/
|
||||
private String processUserName;
|
||||
|
||||
/**
|
||||
* 处理时间
|
||||
*/
|
||||
private Date processTime;
|
||||
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
private String attachFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
/**
|
||||
* 盘库计划主业务对象 inv_count_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class InvCountPlanBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 盘库计划编号(如 PD-20260622-001)
|
||||
*/
|
||||
private String planCode;
|
||||
|
||||
/**
|
||||
* 盘库计划名称
|
||||
*/
|
||||
private String planName;
|
||||
|
||||
/**
|
||||
* 盘库日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date countDate;
|
||||
|
||||
/**
|
||||
* 截止时间
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
|
||||
private Date deadlineTime;
|
||||
|
||||
/**
|
||||
* 盘点人ID
|
||||
*/
|
||||
private Long countUserId;
|
||||
|
||||
/**
|
||||
* 盘点人姓名
|
||||
*/
|
||||
private String countUserName;
|
||||
|
||||
/**
|
||||
* 负责人ID
|
||||
*/
|
||||
private Long principalUserId;
|
||||
|
||||
/**
|
||||
* 负责人姓名
|
||||
*/
|
||||
private String principalUserName;
|
||||
|
||||
/**
|
||||
* 参与人员ID列表(逗号分隔)
|
||||
*/
|
||||
private String participantIds;
|
||||
|
||||
/**
|
||||
* 参与人员姓名列表(逗号分隔)
|
||||
*/
|
||||
private String participantNames;
|
||||
|
||||
/**
|
||||
* 计划状态:0=草稿, 1=待审批, 2=执行中, 3=差异处理中, 4=已归档
|
||||
*/
|
||||
private Integer planStatus;
|
||||
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
private String attachFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联业务对象 inv_count_plan_warehouse
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class InvCountPlanWarehouseBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 盘库计划ID
|
||||
*/
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 逻辑库区ID
|
||||
*/
|
||||
private Long warehouseId;
|
||||
|
||||
/**
|
||||
* 逻辑库区名称(冗余)
|
||||
*/
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 实际库区ID
|
||||
*/
|
||||
private Long actualWarehouseId;
|
||||
|
||||
/**
|
||||
* 实际库区名称(冗余)
|
||||
*/
|
||||
private String actualWarehouseName;
|
||||
|
||||
/**
|
||||
* 系统钢卷数量
|
||||
*/
|
||||
private Long systemCoilCount;
|
||||
|
||||
/**
|
||||
* 系统总重量(kg)
|
||||
*/
|
||||
private BigDecimal systemTotalWeight;
|
||||
|
||||
/**
|
||||
* 实际盘点数量
|
||||
*/
|
||||
private Long actualCoilCount;
|
||||
|
||||
/**
|
||||
* 实际盘点总重量(kg)
|
||||
*/
|
||||
private BigDecimal actualTotalWeight;
|
||||
|
||||
/**
|
||||
* 是否账实一致(0=不一致, 1=一致, NULL=未盘点)
|
||||
*/
|
||||
private Integer isConsistent;
|
||||
|
||||
/**
|
||||
* 出入库记录查询起始时间
|
||||
*/
|
||||
private Date ioStartTime;
|
||||
|
||||
/**
|
||||
* 出入库记录查询截止时间
|
||||
*/
|
||||
private Date ioEndTime;
|
||||
|
||||
/**
|
||||
* 出入库记录快照(JSON)
|
||||
*/
|
||||
private String snapshotIoRecord;
|
||||
|
||||
/**
|
||||
* 逻辑库区钢卷明细快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilLogic;
|
||||
|
||||
/**
|
||||
* 实际库区钢卷明细快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilActual;
|
||||
|
||||
/**
|
||||
* 钢卷数量统计快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilStats;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
|
||||
/**
|
||||
* 排产明细钢卷关系业务对象 sch_detail_coil_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-25
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class SchDetailCoilRelBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 排产明细ID(关联 sch_prod_schedule_detail.schedule_detail_id)
|
||||
*/
|
||||
private Long scheduleDetailId;
|
||||
|
||||
/**
|
||||
* 钢卷ID(关联 wms_material_coil.coil_id)
|
||||
*/
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
/**
|
||||
* 排产单主业务对象 sch_prod_schedule
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class SchProdScheduleBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 排产单主键ID
|
||||
*/
|
||||
private Long scheduleId;
|
||||
|
||||
/**
|
||||
* 排产单号(唯一标识,钢卷关联依据)
|
||||
*/
|
||||
private String scheduleNo;
|
||||
|
||||
/**
|
||||
* 生产日期(和合同号组成业务关联键)
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date prodDate;
|
||||
|
||||
/**
|
||||
* 排产状态:0草稿 1待审核 2已下达 3已退回
|
||||
*/
|
||||
private Long scheduleStatus;
|
||||
|
||||
/**
|
||||
* 排产总计划吨数
|
||||
*/
|
||||
private BigDecimal totalPlanWeight;
|
||||
|
||||
/**
|
||||
* 关联销售合同号
|
||||
*/
|
||||
private String relContractNo;
|
||||
|
||||
/**
|
||||
* 业务员
|
||||
*/
|
||||
private String businessUser;
|
||||
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
private String businessPhone;
|
||||
|
||||
/**
|
||||
* 订单日期
|
||||
*/
|
||||
private Date orderDate;
|
||||
|
||||
/**
|
||||
* 订货单位
|
||||
*/
|
||||
private String customerName;
|
||||
|
||||
/**
|
||||
* 交货期(天)
|
||||
*/
|
||||
private Long deliveryCycle;
|
||||
|
||||
/**
|
||||
* 产品用途
|
||||
*/
|
||||
private String usePurpose;
|
||||
|
||||
/**
|
||||
* 品名:冷硬钢卷/镀锌钢卷/冷轧钢卷/镀铬钢卷
|
||||
*/
|
||||
private String productType;
|
||||
|
||||
/**
|
||||
* 厚度公差
|
||||
*/
|
||||
private String thicknessTolerance;
|
||||
|
||||
/**
|
||||
* 宽度公差
|
||||
*/
|
||||
private String widthTolerance;
|
||||
|
||||
/**
|
||||
* 表面质量
|
||||
*/
|
||||
private String surfaceQuality;
|
||||
|
||||
/**
|
||||
* 表面处理
|
||||
*/
|
||||
private String surfaceTreatment;
|
||||
|
||||
/**
|
||||
* 内径尺寸
|
||||
*/
|
||||
private String innerDiameter;
|
||||
|
||||
/**
|
||||
* 外径要求
|
||||
*/
|
||||
private String outerDiameter;
|
||||
|
||||
/**
|
||||
* 包装要求
|
||||
*/
|
||||
private String packReq;
|
||||
|
||||
/**
|
||||
* 切边要求
|
||||
*/
|
||||
private String cutEdgeReq;
|
||||
|
||||
/**
|
||||
* 单件重量
|
||||
*/
|
||||
private String singleCoilWeight;
|
||||
|
||||
/**
|
||||
* 交货重量偏差
|
||||
*/
|
||||
private String weightDeviation;
|
||||
|
||||
/**
|
||||
* 其他技术要求
|
||||
*/
|
||||
private String otherTechReq;
|
||||
|
||||
/**
|
||||
* 付款情况说明
|
||||
*/
|
||||
private String paymentDesc;
|
||||
|
||||
/**
|
||||
* 退回原因
|
||||
*/
|
||||
private String returnReason;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 排产单明细业务对象 sch_prod_schedule_detail
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class SchProdScheduleDetailBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 排产明细ID
|
||||
*/
|
||||
private Long scheduleDetailId;
|
||||
|
||||
/**
|
||||
* 排产单主表ID
|
||||
*/
|
||||
private Long scheduleId;
|
||||
|
||||
/**
|
||||
* 来源销售订单明细ID(溯源原始订单规格)
|
||||
*/
|
||||
private Long orderDetailId;
|
||||
|
||||
/**
|
||||
* 规格 例:1.0X1250
|
||||
*/
|
||||
private String spec;
|
||||
|
||||
/**
|
||||
* 材质 DX51D
|
||||
*/
|
||||
private String material;
|
||||
|
||||
/**
|
||||
* 本次排产吨数(数量),可审核修改
|
||||
*/
|
||||
private BigDecimal scheduleWeight;
|
||||
|
||||
/**
|
||||
* 品名
|
||||
*/
|
||||
private String productType;
|
||||
|
||||
/**
|
||||
* 单行排产备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 销售订单-排产单多对多关联业务对象 sch_sale_schedule_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class SchSaleScheduleRelBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 关联主键ID
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 销售订单ID
|
||||
*/
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 排产单ID
|
||||
*/
|
||||
private Long scheduleId;
|
||||
|
||||
/**
|
||||
* 本次排产占用该订单重量
|
||||
*/
|
||||
private BigDecimal relWeight;
|
||||
|
||||
/**
|
||||
* 关联备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间业务对象 ts_accept_coil_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class TsAcceptCoilRelBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 投诉受理单ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
/**
|
||||
* 投诉受理单主业务对象 ts_complaint_accept
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class TsComplaintAcceptBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 受理单主键
|
||||
*/
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 投诉编号 TS-2026-001
|
||||
*/
|
||||
private String complaintNo;
|
||||
|
||||
/**
|
||||
* 投诉日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date complaintDate;
|
||||
|
||||
/**
|
||||
* 投诉情况描述
|
||||
*/
|
||||
private String complaintContent;
|
||||
|
||||
/**
|
||||
* 客户诉求
|
||||
*/
|
||||
private String customerDemand;
|
||||
|
||||
/**
|
||||
* 客户照片凭证等
|
||||
*/
|
||||
private String file;
|
||||
|
||||
/**
|
||||
* 审核状态 0待审核 1已通过 2未通过
|
||||
*/
|
||||
private Long auditStatus;
|
||||
|
||||
/**
|
||||
* 审核意见
|
||||
*/
|
||||
private String auditOpinion;
|
||||
|
||||
/**
|
||||
* 审核人ID
|
||||
*/
|
||||
private Long auditUserId;
|
||||
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
private Date auditTime;
|
||||
|
||||
/**
|
||||
* 流程阶段:
|
||||
1=待审核 2=部门意见填写中 3=待总负责人汇总方案 4=方案下发执行反馈中 5=全部办结
|
||||
*/
|
||||
private Long flowStatus;
|
||||
|
||||
/**
|
||||
* 总负责人ID
|
||||
*/
|
||||
private Long principalUserId;
|
||||
|
||||
/**
|
||||
* 总负责人整合后的完整处理方案
|
||||
*/
|
||||
private String planContent;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 关联的钢卷ID列表(新增受理单时一并插入到ts_accept_coil_rel)
|
||||
*/
|
||||
private List<Long> coilIds;
|
||||
|
||||
/**
|
||||
* 受理单ID列表(批量查询用)
|
||||
*/
|
||||
private List<Long> acceptIds;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见业务对象 ts_complaint_task
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class TsComplaintTaskBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 代办任务ID
|
||||
*/
|
||||
private Long taskId;
|
||||
|
||||
/**
|
||||
* 关联投诉受理单ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 负责部门ID(销售/质量/生产)
|
||||
*/
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 任务状态 0待填写意见 1已完成填写
|
||||
*/
|
||||
private Long taskStatus;
|
||||
|
||||
/**
|
||||
* 意见单号
|
||||
*/
|
||||
private String fillNo;
|
||||
|
||||
/**
|
||||
* 部门处理意见
|
||||
*/
|
||||
private String deptOpinion;
|
||||
|
||||
/**
|
||||
* 填写意见的部门员工ID
|
||||
*/
|
||||
private Long fillUserId;
|
||||
|
||||
/**
|
||||
* 意见填写时间
|
||||
*/
|
||||
private Date fillTime;
|
||||
|
||||
/**
|
||||
* 意见文件
|
||||
*/
|
||||
private String fillFile;
|
||||
|
||||
/**
|
||||
* 驳回标记 0=无驳回 1=本部门驳回 2=存在部门驳回
|
||||
*/
|
||||
private Long rejectMark;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈业务对象 ts_plan_execute_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class TsPlanExecuteRelBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 关联最终方案ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 被下发执行的部门ID
|
||||
*/
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 执行状态 0待执行反馈 1已反馈完成
|
||||
*/
|
||||
private Long executeStatus;
|
||||
|
||||
/**
|
||||
* 部门执行结果反馈
|
||||
*/
|
||||
private String executeResult;
|
||||
|
||||
/**
|
||||
* 反馈单号
|
||||
*/
|
||||
private String feedbackNo;
|
||||
|
||||
/**
|
||||
* 反馈人
|
||||
*/
|
||||
private Long feedbackUserId;
|
||||
|
||||
/**
|
||||
* 反馈时间
|
||||
*/
|
||||
private Date feedbackTime;
|
||||
|
||||
/**
|
||||
* 反馈文件
|
||||
*/
|
||||
private String feedbackFile;
|
||||
|
||||
/**
|
||||
* 驳回标记 0=无驳回 1=本部门驳回 2=存在部门驳回
|
||||
*/
|
||||
private Long rejectMark;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 维修计划-异常记录关联视图对象 eqp_maintenance_plan_abnormal
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class EqpMaintenancePlanAbnormalVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 关联ID
|
||||
*/
|
||||
@ExcelProperty(value = "关联ID")
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 维修计划ID
|
||||
*/
|
||||
@ExcelProperty(value = "维修计划ID")
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 巡检记录ID(eqp_equipment_inspection_record.record_id,run_status=2 异常记录)
|
||||
*/
|
||||
@ExcelProperty(value = "巡检记录ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "e=qp_equipment_inspection_record.record_id,run_status=2,异=常记录")
|
||||
private Long recordId;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 维修计划明细视图对象 eqp_maintenance_plan_detail
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class EqpMaintenancePlanDetailVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 明细ID
|
||||
*/
|
||||
@ExcelProperty(value = "明细ID")
|
||||
private Long detailId;
|
||||
|
||||
/**
|
||||
* 维修计划ID
|
||||
*/
|
||||
@ExcelProperty(value = "维修计划ID")
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 巡检记录ID(来源异常工单)
|
||||
*/
|
||||
@ExcelProperty(value = "巡检记录ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "来=源异常工单")
|
||||
private Long recordId;
|
||||
|
||||
/**
|
||||
* 设备ID(用户手动选择,关联 eqp_equipment_management.equipment_id)
|
||||
*/
|
||||
@ExcelProperty(value = "设备ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "用=户手动选择,关联,e=qp_equipment_management.equipment_id")
|
||||
private Long equipmentId;
|
||||
|
||||
/**
|
||||
* 产线名称
|
||||
*/
|
||||
@ExcelProperty(value = "产线名称")
|
||||
private String productionLine;
|
||||
|
||||
/**
|
||||
* 设备部件名称
|
||||
*/
|
||||
@ExcelProperty(value = "设备部件名称")
|
||||
private String componentName;
|
||||
|
||||
/**
|
||||
* 单条维修项计划执行日期
|
||||
*/
|
||||
@ExcelProperty(value = "单条维修项计划执行日期")
|
||||
private Date itemPlanDate;
|
||||
|
||||
/**
|
||||
* 明细类型:0=保养 1=维修
|
||||
*/
|
||||
@ExcelProperty(value = "明细类型:0=保养 1=维修")
|
||||
private Long maintenanceCategory;
|
||||
|
||||
/**
|
||||
* 明细完成状态:0=未开始 1=进行中 2=已完成
|
||||
*/
|
||||
@ExcelProperty(value = "明细完成状态:0=未开始 1=进行中 2=已完成")
|
||||
private Long detailStatus;
|
||||
|
||||
/**
|
||||
* 维修内容描述
|
||||
*/
|
||||
@ExcelProperty(value = "维修内容描述")
|
||||
private String repairContent;
|
||||
|
||||
/**
|
||||
* 维修负责人
|
||||
*/
|
||||
@ExcelProperty(value = "维修负责人")
|
||||
private String repairUser;
|
||||
|
||||
/**
|
||||
* 完成时间(打勾时记录)
|
||||
*/
|
||||
@ExcelProperty(value = "完成时间", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "打=勾时记录")
|
||||
private Date completeTime;
|
||||
|
||||
/**
|
||||
* 实际支出金额(元)
|
||||
*/
|
||||
@ExcelProperty(value = "实际支出金额(元)")
|
||||
private BigDecimal actualCost;
|
||||
|
||||
/**
|
||||
* 完成进度百分比(0-100)
|
||||
*/
|
||||
@ExcelProperty(value = "完成进度百分比(0-100)")
|
||||
private Long progressRate;
|
||||
|
||||
/**
|
||||
* 目标厂家
|
||||
*/
|
||||
@ExcelProperty(value = "目标厂家")
|
||||
private String targetManufacturer;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 维修计划主视图对象 eqp_maintenance_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class EqpMaintenancePlanVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 计划ID
|
||||
*/
|
||||
@ExcelProperty(value = "计划ID")
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 计划编号
|
||||
*/
|
||||
@ExcelProperty(value = "计划编号")
|
||||
private String planNo;
|
||||
|
||||
/**
|
||||
* 计划名称
|
||||
*/
|
||||
@ExcelProperty(value = "计划名称")
|
||||
private String planName;
|
||||
|
||||
/**
|
||||
* 维修类型:1=定期保养 2=安全整改 3=专项检修 4=故障维修
|
||||
*/
|
||||
@ExcelProperty(value = "维修类型:1=定期保养 2=安全整改 3=专项检修 4=故障维修")
|
||||
private Long repairType;
|
||||
|
||||
/**
|
||||
* 优先级:1=普通 2=重要
|
||||
*/
|
||||
@ExcelProperty(value = "优先级:1=普通 2=重要")
|
||||
private Long priorityLevel;
|
||||
|
||||
/**
|
||||
* 计划执行状态:1=待维修,2=维修中,3=已完成,4=已取消
|
||||
*/
|
||||
@ExcelProperty(value = "计划执行状态:1=待维修,2=维修中,3=已完成,4=已取消")
|
||||
private Long planStatus;
|
||||
|
||||
/**
|
||||
* 审批状态:0=草稿 1=待审批 2=已审批 3=已驳回
|
||||
*/
|
||||
@ExcelProperty(value = "审批状态:0=草稿 1=待审批 2=已审批 3=已驳回")
|
||||
private Long approvalStatus;
|
||||
|
||||
/**
|
||||
* 计划开始时间
|
||||
*/
|
||||
@ExcelProperty(value = "计划开始时间")
|
||||
private Date plannedStartTime;
|
||||
|
||||
/**
|
||||
* 计划结束时间
|
||||
*/
|
||||
@ExcelProperty(value = "计划结束时间")
|
||||
private Date plannedEndTime;
|
||||
|
||||
/**
|
||||
* 负责部门
|
||||
*/
|
||||
@ExcelProperty(value = "负责部门")
|
||||
private String dutyDept;
|
||||
|
||||
/**
|
||||
* 计划负责人
|
||||
*/
|
||||
@ExcelProperty(value = "计划负责人")
|
||||
private String planOwner;
|
||||
|
||||
/**
|
||||
* 预算金额(元)
|
||||
*/
|
||||
@ExcelProperty(value = "预算金额(元)")
|
||||
private BigDecimal budgetAmount;
|
||||
|
||||
/**
|
||||
* 计划说明
|
||||
*/
|
||||
@ExcelProperty(value = "计划说明")
|
||||
private String planDescription;
|
||||
|
||||
/**
|
||||
* 实际完成时间
|
||||
*/
|
||||
@ExcelProperty(value = "实际完成时间")
|
||||
private Date actualCompleteTime;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 盘库差异记录视图对象 inv_count_discrepancy
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class InvCountDiscrepancyVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long discrepancyId;
|
||||
|
||||
/**
|
||||
* 盘库计划明细ID
|
||||
*/
|
||||
@ExcelProperty(value = "盘库计划明细ID")
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 差异类型:1=盘盈, 2=盘亏, 3=状态不符, 4=重量偏差
|
||||
*/
|
||||
@ExcelProperty(value = "差异类型:1=盘盈, 2=盘亏, 3=状态不符, 4=重量偏差")
|
||||
private Integer discrepancyType;
|
||||
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
@ExcelProperty(value = "钢卷ID")
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
* 钢卷号
|
||||
*/
|
||||
@ExcelProperty(value = "钢卷号")
|
||||
private String enterCoilNo;
|
||||
|
||||
/**
|
||||
* 差异详情(JSON:含系统值、实盘值对比)
|
||||
*/
|
||||
@ExcelProperty(value = "差异详情", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON:含系统值、实盘值对比")
|
||||
private String discrepancyDetail;
|
||||
|
||||
/**
|
||||
* 原因分析
|
||||
*/
|
||||
@ExcelProperty(value = "原因分析")
|
||||
private String reasonAnalysis;
|
||||
|
||||
/**
|
||||
* 处理建议
|
||||
*/
|
||||
@ExcelProperty(value = "处理建议")
|
||||
private String processSuggestion;
|
||||
|
||||
/**
|
||||
* 处理结果
|
||||
*/
|
||||
@ExcelProperty(value = "处理结果")
|
||||
private String processResult;
|
||||
|
||||
/**
|
||||
* 处理状态:0=待处理, 1=处理中, 2=已处理
|
||||
*/
|
||||
@ExcelProperty(value = "处理状态:0=待处理, 1=处理中, 2=已处理")
|
||||
private Integer processStatus;
|
||||
|
||||
/**
|
||||
* 处理人ID
|
||||
*/
|
||||
@ExcelProperty(value = "处理人ID")
|
||||
private Long processUserId;
|
||||
|
||||
/**
|
||||
* 处理人姓名
|
||||
*/
|
||||
@ExcelProperty(value = "处理人姓名")
|
||||
private String processUserName;
|
||||
|
||||
/**
|
||||
* 处理时间
|
||||
*/
|
||||
@ExcelProperty(value = "处理时间")
|
||||
private Date processTime;
|
||||
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
@ExcelProperty(value = "附件文件名称集合,多文件逗号分隔,前端展示")
|
||||
private String attachFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 盘库计划主视图对象 inv_count_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class InvCountPlanVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 盘库计划编号(如 PD-20260622-001)
|
||||
*/
|
||||
@ExcelProperty(value = "盘库计划编号", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "如=,P=D-20260622-001")
|
||||
private String planCode;
|
||||
|
||||
/**
|
||||
* 盘库计划名称
|
||||
*/
|
||||
@ExcelProperty(value = "盘库计划名称")
|
||||
private String planName;
|
||||
|
||||
/**
|
||||
* 盘库日期
|
||||
*/
|
||||
@ExcelProperty(value = "盘库日期")
|
||||
private Date countDate;
|
||||
|
||||
/**
|
||||
* 截止时间
|
||||
*/
|
||||
@ExcelProperty(value = "截止时间")
|
||||
private Date deadlineTime;
|
||||
|
||||
/**
|
||||
* 盘点人ID
|
||||
*/
|
||||
@ExcelProperty(value = "盘点人ID")
|
||||
private Long countUserId;
|
||||
|
||||
/**
|
||||
* 盘点人姓名
|
||||
*/
|
||||
@ExcelProperty(value = "盘点人姓名")
|
||||
private String countUserName;
|
||||
|
||||
/**
|
||||
* 负责人ID
|
||||
*/
|
||||
@ExcelProperty(value = "负责人ID")
|
||||
private Long principalUserId;
|
||||
|
||||
/**
|
||||
* 负责人姓名
|
||||
*/
|
||||
@ExcelProperty(value = "负责人姓名")
|
||||
private String principalUserName;
|
||||
|
||||
/**
|
||||
* 参与人员ID列表(逗号分隔)
|
||||
*/
|
||||
@ExcelProperty(value = "参与人员ID列表", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "逗=号分隔")
|
||||
private String participantIds;
|
||||
|
||||
/**
|
||||
* 参与人员姓名列表(逗号分隔)
|
||||
*/
|
||||
@ExcelProperty(value = "参与人员姓名列表", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "逗=号分隔")
|
||||
private String participantNames;
|
||||
|
||||
/**
|
||||
* 计划状态:0=草稿, 1=待审批, 2=执行中, 3=差异处理中, 4=已归档
|
||||
*/
|
||||
@ExcelProperty(value = "计划状态:0=草稿, 1=待审批, 2=执行中, 3=差异处理中, 4=已归档")
|
||||
private Integer planStatus;
|
||||
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
@ExcelProperty(value = "附件文件名称集合,多文件逗号分隔,前端展示")
|
||||
private String attachFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 盘库计划关联的库区列表
|
||||
*/
|
||||
private List<InvCountPlanWarehouseVo> warehouseList;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联视图对象 inv_count_plan_warehouse
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class InvCountPlanWarehouseVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 盘库计划ID
|
||||
*/
|
||||
@ExcelProperty(value = "盘库计划ID")
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 逻辑库区ID
|
||||
*/
|
||||
@ExcelProperty(value = "逻辑库区ID")
|
||||
private Long warehouseId;
|
||||
|
||||
/**
|
||||
* 逻辑库区名称(冗余)
|
||||
*/
|
||||
@ExcelProperty(value = "逻辑库区名称", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "冗=余")
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 实际库区ID
|
||||
*/
|
||||
@ExcelProperty(value = "实际库区ID")
|
||||
private Long actualWarehouseId;
|
||||
|
||||
/**
|
||||
* 实际库区名称(冗余)
|
||||
*/
|
||||
@ExcelProperty(value = "实际库区名称", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "冗=余")
|
||||
private String actualWarehouseName;
|
||||
|
||||
/**
|
||||
* 系统钢卷数量
|
||||
*/
|
||||
@ExcelProperty(value = "系统钢卷数量")
|
||||
private Long systemCoilCount;
|
||||
|
||||
/**
|
||||
* 系统总重量(kg)
|
||||
*/
|
||||
@ExcelProperty(value = "系统总重量(kg)")
|
||||
private BigDecimal systemTotalWeight;
|
||||
|
||||
/**
|
||||
* 实际盘点数量
|
||||
*/
|
||||
@ExcelProperty(value = "实际盘点数量")
|
||||
private Long actualCoilCount;
|
||||
|
||||
/**
|
||||
* 实际盘点总重量(kg)
|
||||
*/
|
||||
@ExcelProperty(value = "实际盘点总重量(kg)")
|
||||
private BigDecimal actualTotalWeight;
|
||||
|
||||
/**
|
||||
* 是否账实一致(0=不一致, 1=一致, NULL=未盘点)
|
||||
*/
|
||||
@ExcelProperty(value = "是否账实一致", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "0==不一致,,1==一致,,N=ULL=未盘点")
|
||||
private Integer isConsistent;
|
||||
|
||||
/**
|
||||
* 出入库记录查询起始时间
|
||||
*/
|
||||
@ExcelProperty(value = "出入库记录查询起始时间")
|
||||
private Date ioStartTime;
|
||||
|
||||
/**
|
||||
* 出入库记录查询截止时间
|
||||
*/
|
||||
@ExcelProperty(value = "出入库记录查询截止时间")
|
||||
private Date ioEndTime;
|
||||
|
||||
/**
|
||||
* 出入库记录快照(JSON)
|
||||
*/
|
||||
@ExcelProperty(value = "出入库记录快照", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON")
|
||||
private String snapshotIoRecord;
|
||||
|
||||
/**
|
||||
* 逻辑库区钢卷明细快照(JSON)
|
||||
*/
|
||||
@ExcelProperty(value = "逻辑库区钢卷明细快照", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON")
|
||||
private String snapshotCoilLogic;
|
||||
|
||||
/**
|
||||
* 实际库区钢卷明细快照(JSON)
|
||||
*/
|
||||
@ExcelProperty(value = "实际库区钢卷明细快照", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON")
|
||||
private String snapshotCoilActual;
|
||||
|
||||
/**
|
||||
* 钢卷数量统计快照(JSON)
|
||||
*/
|
||||
@ExcelProperty(value = "钢卷数量统计快照", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON")
|
||||
private String snapshotCoilStats;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 排产明细钢卷关系视图对象 sch_detail_coil_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-25
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class SchDetailCoilRelVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@ExcelProperty(value = "主键")
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 排产明细ID(关联 sch_prod_schedule_detail.schedule_detail_id)
|
||||
*/
|
||||
@ExcelProperty(value = "排产明细ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "关=联,s=ch_prod_schedule_detail.schedule_detail_id")
|
||||
private Long scheduleDetailId;
|
||||
|
||||
/**
|
||||
* 钢卷ID(关联 wms_material_coil.coil_id)
|
||||
*/
|
||||
@ExcelProperty(value = "钢卷ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "关=联,w=ms_material_coil.coil_id")
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 排产单明细视图对象 sch_prod_schedule_detail
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class SchProdScheduleDetailVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 排产明细ID
|
||||
*/
|
||||
@ExcelProperty(value = "排产明细ID")
|
||||
private Long scheduleDetailId;
|
||||
|
||||
/**
|
||||
* 排产单主表ID
|
||||
*/
|
||||
@ExcelProperty(value = "排产单主表ID")
|
||||
private Long scheduleId;
|
||||
|
||||
/**
|
||||
* 来源销售订单明细ID(溯源原始订单规格)
|
||||
*/
|
||||
@ExcelProperty(value = "来源销售订单明细ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "溯=源原始订单规格")
|
||||
private Long orderDetailId;
|
||||
|
||||
/**
|
||||
* 规格 例:1.0X1250
|
||||
*/
|
||||
@ExcelProperty(value = "规格 例:1.0X1250")
|
||||
private String spec;
|
||||
|
||||
/**
|
||||
* 材质 DX51D
|
||||
*/
|
||||
@ExcelProperty(value = "材质 DX51D")
|
||||
private String material;
|
||||
|
||||
/**
|
||||
* 本次排产吨数(数量),可审核修改
|
||||
*/
|
||||
@ExcelProperty(value = "本次排产吨数(数量),可审核修改")
|
||||
private BigDecimal scheduleWeight;
|
||||
|
||||
/**
|
||||
* 品名
|
||||
*/
|
||||
@ExcelProperty(value = "品名")
|
||||
private String productType;
|
||||
|
||||
/**
|
||||
* 单行排产备注
|
||||
*/
|
||||
@ExcelProperty(value = "单行排产备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 关联的排产单主表信息
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private SchProdScheduleVo schedule;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import com.klp.crm.domain.vo.CrmOrderVo;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 排产单主视图对象 sch_prod_schedule
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-23
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class SchProdScheduleVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 排产单主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "排产单主键ID")
|
||||
private Long scheduleId;
|
||||
|
||||
/**
|
||||
* 排产单号(唯一标识,钢卷关联依据)
|
||||
*/
|
||||
@ExcelProperty(value = "排产单号", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "唯=一标识,钢卷关联依据")
|
||||
private String scheduleNo;
|
||||
|
||||
/**
|
||||
* 生产日期(和合同号组成业务关联键)
|
||||
*/
|
||||
@ExcelProperty(value = "生产日期", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "和=合同号组成业务关联键")
|
||||
private Date prodDate;
|
||||
|
||||
/**
|
||||
* 排产状态:0草稿 1待审核 2已下达 3已退回
|
||||
*/
|
||||
@ExcelProperty(value = "排产状态:0草稿 1待审核 2已下达 3已退回")
|
||||
private Long scheduleStatus;
|
||||
|
||||
/**
|
||||
* 排产总计划吨数
|
||||
*/
|
||||
@ExcelProperty(value = "排产总计划吨数")
|
||||
private BigDecimal totalPlanWeight;
|
||||
|
||||
/**
|
||||
* 关联销售合同号
|
||||
*/
|
||||
@ExcelProperty(value = "关联销售合同号")
|
||||
private String relContractNo;
|
||||
|
||||
/**
|
||||
* 业务员
|
||||
*/
|
||||
@ExcelProperty(value = "业务员")
|
||||
private String businessUser;
|
||||
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
@ExcelProperty(value = "联系电话")
|
||||
private String businessPhone;
|
||||
|
||||
/**
|
||||
* 订单日期
|
||||
*/
|
||||
@ExcelProperty(value = "订单日期")
|
||||
private Date orderDate;
|
||||
|
||||
/**
|
||||
* 订货单位
|
||||
*/
|
||||
@ExcelProperty(value = "订货单位")
|
||||
private String customerName;
|
||||
|
||||
/**
|
||||
* 交货期(天)
|
||||
*/
|
||||
@ExcelProperty(value = "交货期(天)")
|
||||
private Long deliveryCycle;
|
||||
|
||||
/**
|
||||
* 产品用途
|
||||
*/
|
||||
@ExcelProperty(value = "产品用途")
|
||||
private String usePurpose;
|
||||
|
||||
/**
|
||||
* 品名:冷硬钢卷/镀锌钢卷/冷轧钢卷/镀铬钢卷
|
||||
*/
|
||||
@ExcelProperty(value = "品名:冷硬钢卷/镀锌钢卷/冷轧钢卷/镀铬钢卷")
|
||||
private String productType;
|
||||
|
||||
/**
|
||||
* 厚度公差
|
||||
*/
|
||||
@ExcelProperty(value = "厚度公差")
|
||||
private String thicknessTolerance;
|
||||
|
||||
/**
|
||||
* 宽度公差
|
||||
*/
|
||||
@ExcelProperty(value = "宽度公差")
|
||||
private String widthTolerance;
|
||||
|
||||
/**
|
||||
* 表面质量
|
||||
*/
|
||||
@ExcelProperty(value = "表面质量")
|
||||
private String surfaceQuality;
|
||||
|
||||
/**
|
||||
* 表面处理
|
||||
*/
|
||||
@ExcelProperty(value = "表面处理")
|
||||
private String surfaceTreatment;
|
||||
|
||||
/**
|
||||
* 内径尺寸
|
||||
*/
|
||||
@ExcelProperty(value = "内径尺寸")
|
||||
private String innerDiameter;
|
||||
|
||||
/**
|
||||
* 外径要求
|
||||
*/
|
||||
@ExcelProperty(value = "外径要求")
|
||||
private String outerDiameter;
|
||||
|
||||
/**
|
||||
* 包装要求
|
||||
*/
|
||||
@ExcelProperty(value = "包装要求")
|
||||
private String packReq;
|
||||
|
||||
/**
|
||||
* 切边要求
|
||||
*/
|
||||
@ExcelProperty(value = "切边要求")
|
||||
private String cutEdgeReq;
|
||||
|
||||
/**
|
||||
* 单件重量
|
||||
*/
|
||||
@ExcelProperty(value = "单件重量")
|
||||
private String singleCoilWeight;
|
||||
|
||||
/**
|
||||
* 交货重量偏差
|
||||
*/
|
||||
@ExcelProperty(value = "交货重量偏差")
|
||||
private String weightDeviation;
|
||||
|
||||
/**
|
||||
* 其他技术要求
|
||||
*/
|
||||
@ExcelProperty(value = "其他技术要求")
|
||||
private String otherTechReq;
|
||||
|
||||
/**
|
||||
* 付款情况说明
|
||||
*/
|
||||
@ExcelProperty(value = "付款情况说明")
|
||||
private String paymentDesc;
|
||||
|
||||
/**
|
||||
* 退回原因
|
||||
*/
|
||||
@ExcelProperty(value = "退回原因")
|
||||
private String returnReason;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 关联的排产明细列表
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private List<SchProdScheduleDetailVo> detailList;
|
||||
|
||||
/**
|
||||
* 关联的CRM订单列表(通过合同号 relContractNo 匹配 CrmOrder.contractCode)
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private List<CrmOrderVo> orderList;
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user