Browse Source

节点报工模式可以选择并行还是按顺序

master
han\hanst 1 month ago
parent
commit
ebf937064c
  1. 1
      src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderRowData.java
  2. 1
      src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderSaveData.java
  3. 28
      src/main/java/com/xujie/sys/modules/longchuang/service/impl/ProductionPlanServiceImpl.java
  4. 8
      src/main/resources/mapper/longchuang/ProductionPlanMapper.xml

1
src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderRowData.java

@ -24,6 +24,7 @@ public class ProductionPlanOrderRowData {
private String planFinishDate; private String planFinishDate;
private String status; private String status;
private Boolean autoAssignAllUsers; private Boolean autoAssignAllUsers;
private String nodeReportMode;
private String finishDate; private String finishDate;
private String currentNode; private String currentNode;
private Integer nodeDoneCount; private Integer nodeDoneCount;

1
src/main/java/com/xujie/sys/modules/longchuang/data/ProductionPlanOrderSaveData.java

@ -30,6 +30,7 @@ public class ProductionPlanOrderSaveData {
private Date planFinishDate; private Date planFinishDate;
private String status; private String status;
private Boolean autoAssignAllUsers; private Boolean autoAssignAllUsers;
private String nodeReportMode;
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date finishDate; private Date finishDate;

28
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_NOT_START = "未开始";
private static final String NODE_STATUS_PROCESSING = "进行中"; private static final String NODE_STATUS_PROCESSING = "进行中";
private static final String NODE_STATUS_DONE = "已完成"; 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 @Autowired
private ProductionPlanMapper productionPlanMapper; private ProductionPlanMapper productionPlanMapper;
@ -387,6 +389,7 @@ public class ProductionPlanServiceImpl implements ProductionPlanService {
if (data.getAutoAssignAllUsers() == null) { if (data.getAutoAssignAllUsers() == null) {
data.setAutoAssignAllUsers(false); data.setAutoAssignAllUsers(false);
} }
data.setNodeReportMode(normalizeNodeReportMode(data.getNodeReportMode()));
Long userId = getCurrentUserId(); Long userId = getCurrentUserId();
data.setUpdateBy(userId); data.setUpdateBy(userId);
boolean creating = !StringUtils.hasText(data.getOrderNo()); boolean creating = !StringUtils.hasText(data.getOrderNo());
@ -568,6 +571,20 @@ public class ProductionPlanServiceImpl implements ProductionPlanService {
if (node == null) { if (node == null) {
throw new RuntimeException("报工节点不存在"); throw new RuntimeException("报工节点不存在");
} }
String nodeReportMode = normalizeNodeReportMode(order.getNodeReportMode());
if (NODE_REPORT_MODE_SEQUENTIAL.equals(nodeReportMode)) {
List<ProductionPlanOrderNodeData> 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())) { if (NODE_STATUS_DONE.equals(node.getStatus())) {
throw new RuntimeException("节点已完成,无需重复报工"); throw new RuntimeException("节点已完成,无需重复报工");
} }
@ -764,4 +781,15 @@ public class ProductionPlanServiceImpl implements ProductionPlanService {
} }
return orderType; 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;
}
} }

8
src/main/resources/mapper/longchuang/ProductionPlanMapper.xml

@ -18,6 +18,7 @@
a.task_qty as taskQty, a.task_qty as taskQty,
a.report_qty as reportQty, a.report_qty as reportQty,
a.auto_assign_all_users as autoAssignAllUsers, 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_delivery_date, 23) as planDeliveryDate,
convert(varchar(10), a.plan_finish_date, 23) as planFinishDate, convert(varchar(10), a.plan_finish_date, 23) as planFinishDate,
a.status, a.status,
@ -77,6 +78,7 @@
a.task_qty as taskQty, a.task_qty as taskQty,
a.report_qty as reportQty, a.report_qty as reportQty,
a.auto_assign_all_users as autoAssignAllUsers, 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_delivery_date, 23) as planDeliveryDate,
convert(varchar(10), a.plan_finish_date, 23) as planFinishDate, convert(varchar(10), a.plan_finish_date, 23) as planFinishDate,
a.status, a.status,
@ -181,6 +183,7 @@
task_qty as taskQty, task_qty as taskQty,
report_qty as reportQty, report_qty as reportQty,
auto_assign_all_users as autoAssignAllUsers, auto_assign_all_users as autoAssignAllUsers,
node_report_mode as nodeReportMode,
convert(varchar(10), plan_delivery_date, 23) as planDeliveryDate, convert(varchar(10), plan_delivery_date, 23) as planDeliveryDate,
convert(varchar(10), plan_finish_date, 23) as planFinishDate, convert(varchar(10), plan_finish_date, 23) as planFinishDate,
status, status,
@ -194,11 +197,11 @@
insert into lc_production_order insert into lc_production_order
(order_no, order_type, task_no, task_type, source_project_no, project_no, model_no, color, floor_count, (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, 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 values
(#{orderNo}, #{orderType}, #{taskNo}, #{taskType}, #{sourceProjectNo}, #{projectNo}, #{modelNo}, #{color}, #{floorCount}, (#{orderNo}, #{orderType}, #{taskNo}, #{taskType}, #{sourceProjectNo}, #{projectNo}, #{modelNo}, #{color}, #{floorCount},
#{specialRequirement}, #{taskQty}, ISNULL(#{reportQty}, 0), #{planDeliveryDate,jdbcType=DATE}, #{planFinishDate,jdbcType=DATE}, #{status}, #{finishDate,jdbcType=DATE}, #{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})
</insert> </insert>
<update id="updateOrder"> <update id="updateOrder">
@ -217,6 +220,7 @@
plan_finish_date = #{planFinishDate,jdbcType=DATE}, plan_finish_date = #{planFinishDate,jdbcType=DATE},
status = #{status}, status = #{status},
auto_assign_all_users = ISNULL(#{autoAssignAllUsers}, 0), auto_assign_all_users = ISNULL(#{autoAssignAllUsers}, 0),
node_report_mode = ISNULL(#{nodeReportMode}, 'PARALLEL'),
finish_date = #{finishDate,jdbcType=DATE}, finish_date = #{finishDate,jdbcType=DATE},
update_time = GETDATE(), update_time = GETDATE(),
update_by = #{updateBy} update_by = #{updateBy}

Loading…
Cancel
Save