From ebf937064c083e380ec744538b38de653d5f35f0 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Wed, 22 Apr 2026 13:34:56 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=8A=A5=E5=B7=A5=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E5=8F=AF=E4=BB=A5=E9=80=89=E6=8B=A9=E5=B9=B6=E8=A1=8C?= =?UTF-8?q?=E8=BF=98=E6=98=AF=E6=8C=89=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/ProductionPlanOrderRowData.java | 1 + .../data/ProductionPlanOrderSaveData.java | 1 + .../impl/ProductionPlanServiceImpl.java | 28 +++++++++++++++++++ .../longchuang/ProductionPlanMapper.xml | 8 ++++-- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderRowData.java b/src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderRowData.java index 370258a..0249592 100644 --- a/src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderRowData.java +++ b/src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderRowData.java @@ -24,6 +24,7 @@ public class ProductionPlanOrderRowData { private String planFinishDate; private String status; private Boolean autoAssignAllUsers; + private String nodeReportMode; private String finishDate; private String currentNode; private Integer nodeDoneCount; diff --git a/src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderSaveData.java b/src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderSaveData.java index 5a03b83..368d16e 100644 --- a/src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderSaveData.java +++ b/src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderSaveData.java @@ -30,6 +30,7 @@ public class ProductionPlanOrderSaveData { private Date planFinishDate; private String status; private Boolean autoAssignAllUsers; + private String nodeReportMode; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date finishDate; diff --git a/src/main/java/com/xujie/sys/modules/longchuang/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/xujie/sys/modules/longchuang/service/impl/ProductionPlanServiceImpl.java index 701bfee..f1bf587 100644 --- a/src/main/java/com/xujie/sys/modules/longchuang/service/impl/ProductionPlanServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/longchuang/service/impl/ProductionPlanServiceImpl.java @@ -54,6 +54,8 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { private static final String NODE_STATUS_NOT_START = "未开始"; private static final String NODE_STATUS_PROCESSING = "进行中"; private static final String NODE_STATUS_DONE = "已完成"; + private static final String NODE_REPORT_MODE_PARALLEL = "PARALLEL"; + private static final String NODE_REPORT_MODE_SEQUENTIAL = "SEQUENTIAL"; @Autowired private ProductionPlanMapper productionPlanMapper; @@ -387,6 +389,7 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { if (data.getAutoAssignAllUsers() == null) { data.setAutoAssignAllUsers(false); } + data.setNodeReportMode(normalizeNodeReportMode(data.getNodeReportMode())); Long userId = getCurrentUserId(); data.setUpdateBy(userId); boolean creating = !StringUtils.hasText(data.getOrderNo()); @@ -568,6 +571,20 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { if (node == null) { throw new RuntimeException("报工节点不存在"); } + String nodeReportMode = normalizeNodeReportMode(order.getNodeReportMode()); + if (NODE_REPORT_MODE_SEQUENTIAL.equals(nodeReportMode)) { + List nodeList = productionPlanMapper.queryOrderNodeList(Collections.singletonList(data.getOrderNo())); + ProductionPlanOrderNodeData firstUnDoneNode = null; + for (ProductionPlanOrderNodeData item : nodeList) { + if (!NODE_STATUS_DONE.equals(item.getStatus())) { + firstUnDoneNode = item; + break; + } + } + if (firstUnDoneNode != null && !firstUnDoneNode.getNodeCode().equals(data.getNodeCode())) { + throw new RuntimeException("当前订单按顺序报工,请先完成节点:" + firstUnDoneNode.getNodeName()); + } + } if (NODE_STATUS_DONE.equals(node.getStatus())) { throw new RuntimeException("节点已完成,无需重复报工"); } @@ -764,4 +781,15 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { } return orderType; } + + private String normalizeNodeReportMode(String mode) { + if (!StringUtils.hasText(mode)) { + return NODE_REPORT_MODE_PARALLEL; + } + String text = mode.trim().toUpperCase(); + if (NODE_REPORT_MODE_SEQUENTIAL.equals(text)) { + return NODE_REPORT_MODE_SEQUENTIAL; + } + return NODE_REPORT_MODE_PARALLEL; + } } diff --git a/src/main/resources/mapper/longchuang/ProductionPlanMapper.xml b/src/main/resources/mapper/longchuang/ProductionPlanMapper.xml index b16ce34..0281dfe 100644 --- a/src/main/resources/mapper/longchuang/ProductionPlanMapper.xml +++ b/src/main/resources/mapper/longchuang/ProductionPlanMapper.xml @@ -18,6 +18,7 @@ a.task_qty as taskQty, a.report_qty as reportQty, a.auto_assign_all_users as autoAssignAllUsers, + a.node_report_mode as nodeReportMode, convert(varchar(10), a.plan_delivery_date, 23) as planDeliveryDate, convert(varchar(10), a.plan_finish_date, 23) as planFinishDate, a.status, @@ -77,6 +78,7 @@ a.task_qty as taskQty, a.report_qty as reportQty, a.auto_assign_all_users as autoAssignAllUsers, + a.node_report_mode as nodeReportMode, convert(varchar(10), a.plan_delivery_date, 23) as planDeliveryDate, convert(varchar(10), a.plan_finish_date, 23) as planFinishDate, a.status, @@ -181,6 +183,7 @@ task_qty as taskQty, report_qty as reportQty, auto_assign_all_users as autoAssignAllUsers, + node_report_mode as nodeReportMode, convert(varchar(10), plan_delivery_date, 23) as planDeliveryDate, convert(varchar(10), plan_finish_date, 23) as planFinishDate, status, @@ -194,11 +197,11 @@ insert into lc_production_order (order_no, order_type, task_no, task_type, source_project_no, project_no, model_no, color, floor_count, special_requirement, task_qty, report_qty, plan_delivery_date, plan_finish_date, status, finish_date, - auto_assign_all_users, create_time, create_by, update_time, update_by) + auto_assign_all_users, node_report_mode, create_time, create_by, update_time, update_by) values (#{orderNo}, #{orderType}, #{taskNo}, #{taskType}, #{sourceProjectNo}, #{projectNo}, #{modelNo}, #{color}, #{floorCount}, #{specialRequirement}, #{taskQty}, ISNULL(#{reportQty}, 0), #{planDeliveryDate,jdbcType=DATE}, #{planFinishDate,jdbcType=DATE}, #{status}, #{finishDate,jdbcType=DATE}, - ISNULL(#{autoAssignAllUsers}, 0), GETDATE(), #{createBy}, GETDATE(), #{updateBy}) + ISNULL(#{autoAssignAllUsers}, 0), ISNULL(#{nodeReportMode}, 'PARALLEL'), GETDATE(), #{createBy}, GETDATE(), #{updateBy}) @@ -217,6 +220,7 @@ plan_finish_date = #{planFinishDate,jdbcType=DATE}, status = #{status}, auto_assign_all_users = ISNULL(#{autoAssignAllUsers}, 0), + node_report_mode = ISNULL(#{nodeReportMode}, 'PARALLEL'), finish_date = #{finishDate,jdbcType=DATE}, update_time = GETDATE(), update_by = #{updateBy}