From 6dfaa6130f92eff53467e449526ee80f7c93344b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B1=9F=E7=8E=AE?= Date: Thu, 4 May 2023 17:27:58 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E5=8E=BB=E5=8C=85=E8=A3=85=E7=BA=BF?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/wms/basedata/eum/StandStatus.java | 38 +++ .../acs/service/impl/AcsToWmsServiceImpl.java | 42 +++- .../java/org/nl/wms/sch/manage/TaskType.java | 3 +- .../wms/sch/service/impl/TaskServiceImpl.java | 2 +- .../sch/task/call/empty/FJCallEmptyTask.java | 111 +++++---- .../sch/task/call/empty/GTKCallEmptyTask.java | 56 +++-- .../sch/task/call/empty/HLCallEmptyTask.java | 13 +- .../sch/task/call/empty/YZCallEmptyTask.java | 113 +++++---- .../task/call/empty/wql/CALL_EMPTY_TASK.wql | 2 +- .../call/material/FJCallMaterialTask.java | 125 ++++++---- .../call/material/SZCallMaterialTask.java | 72 +++--- .../call/material/wql/CALL_MATERIAL_TASK.wql | 2 +- .../sch/task/send/empty/FJSendEmptyTask.java | 121 +++++---- .../task/send/empty/wql/SEND_EMPTY_TASK.wql | 2 +- .../send/material/FJSendMaterialTask.java | 131 ++++++---- .../send/material/HLSendMaterialTask.java | 10 +- .../send/material/SZSendMaterialTask.java | 125 ++++++---- .../send/material/YZSendMaterialTask.java | 125 ++++++---- .../send/material/wql/SEND_MATERIAL_TASK.wql | 2 +- .../sch/task/to/pack/BTHCToPackageTask.java | 228 +++++++++++++++++ .../wms/sch/task/to/pack/FJToPackageTask.java | 230 ++++++++++++++++++ .../sch/task/to/pack/wql/TO_PACKAGE_TASK.wql | 40 +++ .../org/nl/wms/sch/task/util/TaskUtils.java | 8 +- .../src/main/java/org/nl/wms/wms.xls | Bin 270848 -> 270848 bytes .../src/views/wms/sch/point/index.vue | 25 +- .../src/views/wms/sch/task/index.vue | 5 +- 26 files changed, 1183 insertions(+), 448 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/StandStatus.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/BTHCToPackageTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/FJToPackageTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/wql/TO_PACKAGE_TASK.wql diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/StandStatus.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/StandStatus.java new file mode 100644 index 0000000..dd1261a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/StandStatus.java @@ -0,0 +1,38 @@ +package org.nl.wms.basedata.eum; + +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * 静置状态 + * + * @author zhangjiangwei + * @date 2023/05/04 09:26 + */ +@RequiredArgsConstructor +public enum StandStatus { + + WITHOUT("无需静置", "1"), + STANDING("静置中", "2"), + COMPLETED("静置完成", "3"), + FORCE_COMPLETION("强制静置完成", "4"), + TIMEOUT("静置超时", "5"); + + + private final String label; + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } + + public static StandStatus get(String value) { + return Arrays.stream(StandStatus.values()).filter(vt -> vt.value.equals(value)).collect(Collectors.toList()).get(0); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index fdceb0e..a11ab59 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -15,7 +15,6 @@ import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.basedata.eum.TrueOrFalse; -import org.nl.wms.basedata.eum.VehicleStatus; import org.nl.wms.basedata.eum.VehicleType; import org.nl.wms.basedata.service.dto.VehicleDto; import org.nl.wms.ext.acs.service.AcsToWmsService; @@ -30,16 +29,15 @@ import org.nl.wms.sch.task.send.material.FJSendMaterialTask; import org.nl.wms.sch.task.send.material.HLSendMaterialTask; import org.nl.wms.sch.task.send.material.SZSendMaterialTask; import org.nl.wms.sch.task.send.material.YZSendMaterialTask; +import org.nl.wms.sch.task.to.pack.BTHCToPackageTask; +import org.nl.wms.sch.task.to.pack.FJToPackageTask; import org.nl.wms.sch.task.util.TaskUtils; -import org.redisson.api.RLock; -import org.redisson.api.RedissonClient; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.lang.reflect.Method; import java.util.Map; -import java.util.concurrent.TimeUnit; @Service @RequiredArgsConstructor @@ -66,6 +64,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private final FJCallEmptyTask fjCallEmptyTask; + private final FJToPackageTask fjToPackageTask; + + private final BTHCToPackageTask bthcToPackageTask; + /** * task_id:任务标识 * task_code:任务编码 @@ -334,6 +336,29 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { throw new BadRequestException("[" + region.label() + "] 不能发起叫空任务!"); } break; + case "5": + // 去包装 + switch (region) { + case FJ: + method_param.put("workorder", param.getJSONObject("workorder")); + method_param.put("vd", param.getJSONObject("vd")); + task_code = yzSendMaterialTask.createTask(method_param); + break; + case BTHC: + TaskUtils.isNotEmptyPoint(point); + JSONObject vd = WQLObject + .getWQLObject("st_ivt_vehicle_detail").query("is_delete = '0' vehicle_type = '" + point.getString("vehicle_type") + "' AND vehicle_code = '" + point.getString("vehicle_code") + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(vd)) { + throw new BadRequestException("未找到 [" + point_code + "] 上的组盘信息!"); + } + method_param.put("vd", vd); + task_code = bthcToPackageTask.createTask(method_param); + break; + default: + throw new BadRequestException("[" + region.label() + "] 不能发起去包装任务!"); + } + break; default: throw new BadRequestException("未知任务类型!"); } @@ -464,13 +489,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (Region.FJ.value().equals(region_code)) { vd.put("is_in_kiln", TrueOrFalse.FALSE.value()); } + if (Region.FJ.value().equals(region_code)) { + vd.put("is_package", jsonObject.getString("is_package")); + } vd_table.insert(vd); - JSONObject vehicle_update = new JSONObject(); - vehicle_update.put("vehicle_status", VehicleStatus.NOT_EMPTY.value()); - WQLObject.getWQLObject("md_pb_vehicle").update(vehicle_update, "vehicle_type = '" + vehicle_type + "' AND vehicle_code = '" + vehicle_code + "'"); - // 入库 JSONObject param = new JSONObject(); param.put("device_code", point.getString("point_code")); @@ -478,7 +502,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { param.put("workorder", workorder); param.put("vd", vd); param.put("vehicle_code", vehicle_code); - param.put("type", "1"); + param.put("type", jsonObject.getString("type")); param.put("request_param", jsonObject.toJSONString()); return this.apply(param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskType.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskType.java index fbad602..d3ff10e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskType.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskType.java @@ -15,7 +15,8 @@ public enum TaskType { SEND_MATERIAL("送料", "1"), CALL_MATERIAL("叫料", "2"), SEND_EMPTY("送空", "3"), - CALL_EMPTY("叫空", "4"); + CALL_EMPTY("叫空", "4"), + TO_PACKAGE("去包装", "5"); private final String label; private final String value; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java index 2a3075b..efa3c59 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java @@ -132,7 +132,7 @@ public class TaskServiceImpl implements TaskService { wo.update(param); } } catch (Exception e) { - e.printStackTrace(); + log.error("任务操作失败!", e); throw new BadRequestException(e.getMessage()); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/FJCallEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/FJCallEmptyTask.java index 65d3556..e4925dd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/FJCallEmptyTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/FJCallEmptyTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.call.empty; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -143,34 +144,47 @@ public class FJCallEmptyTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } - public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -180,34 +194,41 @@ public class FJCallEmptyTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - point1.put("vehicle_type", ""); - point1.put("vehicle_code", ""); - point1.put("point_status", PointStatus.EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - point2.put("vehicle_type", task.getString("vehicle_type")); - point2.put("vehicle_code", task.getString("vehicle_code")); - point2.put("point_status", PointStatus.NOT_EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/GTKCallEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/GTKCallEmptyTask.java index 32c73cb..bbed5c9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/GTKCallEmptyTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/GTKCallEmptyTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.call.empty; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -120,22 +121,31 @@ public class GTKCallEmptyTask extends AbstractAcsTask { } WQLObject.getWQLObject("sch_base_task").update(task); - WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } - public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -144,16 +154,20 @@ public class GTKCallEmptyTask extends AbstractAcsTask { } WQLObject.getWQLObject("sch_base_task").update(task); - WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java index 1f3655e..f0dd13b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java @@ -12,7 +12,6 @@ import org.nl.wms.basedata.eum.VehicleType; import org.nl.wms.sch.manage.*; import org.nl.wms.sch.task.util.TaskUtils; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; /** * 辽宁晟华混料 叫空 任务类 @@ -42,7 +41,7 @@ public class HLCallEmptyTask extends AbstractAcsTask { public String createTask(JSONObject form) { JSONObject point = form.getJSONObject("point"); - TaskUtils.isEmpty(point); + TaskUtils.isEmptyPoint(point); TaskUtils.isLocked(point); JSONObject work_order = TaskUtils.hasWorkOrder(point); @@ -162,8 +161,14 @@ public class HLCallEmptyTask extends AbstractAcsTask { } - public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/YZCallEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/YZCallEmptyTask.java index da2051a..475086d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/YZCallEmptyTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/YZCallEmptyTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.call.empty; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -145,34 +146,47 @@ public class YZCallEmptyTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } - public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -182,34 +196,43 @@ public class YZCallEmptyTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - point1.put("vehicle_type", ""); - point1.put("vehicle_code", ""); - point1.put("point_status", PointStatus.EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1)) { + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - point2.put("vehicle_type", task.getString("vehicle_type")); - point2.put("vehicle_code", task.getString("vehicle_code")); - point2.put("point_status", PointStatus.NOT_EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql index 50590d1..731215e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql @@ -1,5 +1,5 @@ [交易说明] - 交易名: 叫空托盘 + 交易名: 叫空 所属模块: 功能简述: 版权所有: diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/FJCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/FJCallMaterialTask.java index 2fdf1d4..e304ce8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/FJCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/FJCallMaterialTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.call.material; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -19,9 +20,9 @@ import org.springframework.stereotype.Component; */ @RequiredArgsConstructor @Component -public class FJCallMaterialTask extends AbstractAcsTask { +public class FJCallMaterialTask extends AbstractAcsTask { + - @Override public void updateTaskStatus(JSONObject task, String status) { if (TaskStatus.EXECUTING.value().equals(status)) { @@ -35,7 +36,7 @@ public class FJCallMaterialTask extends AbstractAcsTask { } } - + @Override public String createTask(JSONObject form) { JSONObject point = form.getJSONObject("point"); @@ -68,7 +69,7 @@ public class FJCallMaterialTask extends AbstractAcsTask { return task.getString("task_code"); } - + @Override public void findStartPoint() { WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); @@ -106,7 +107,7 @@ public class FJCallMaterialTask extends AbstractAcsTask { } } - + @Override public void forceFinish(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -116,7 +117,7 @@ public class FJCallMaterialTask extends AbstractAcsTask { this.finishTask(task, OperationType.MANUAL); } - + @Override public void cancel(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -126,7 +127,7 @@ public class FJCallMaterialTask extends AbstractAcsTask { this.cancelTask(task, OperationType.MANUAL); } - + public void cancelTask(JSONObject task, OperationType operation_type) { if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { task.put("task_status", TaskStatus.CANCELLED.value()); @@ -138,35 +139,48 @@ public class FJCallMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } - + public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -176,34 +190,41 @@ public class FJCallMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - point1.put("vehicle_type", ""); - point1.put("vehicle_code", ""); - point1.put("point_status", PointStatus.EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - point2.put("vehicle_type", task.getString("vehicle_type")); - point2.put("vehicle_code", task.getString("vehicle_code")); - point2.put("point_status", PointStatus.NOT_EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/SZCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/SZCallMaterialTask.java index 64ba472..709bbe5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/SZCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/SZCallMaterialTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.call.material; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -20,7 +21,7 @@ import org.springframework.stereotype.Component; @Component public class SZCallMaterialTask extends AbstractAcsTask { - + @Override public void autoCreate() { JSONArray points = WQL.getWO("CALL_MATERIAL_TASK").addParam("flag", "2").process().getResultJSONArray(0); @@ -38,7 +39,7 @@ public class SZCallMaterialTask extends AbstractAcsTask { } } - + @Override public void updateTaskStatus(JSONObject task, String status) { if (TaskStatus.EXECUTING.value().equals(status)) { @@ -52,7 +53,7 @@ public class SZCallMaterialTask extends AbstractAcsTask { } } - + @Override public String createTask(JSONObject form) { JSONObject point = form.getJSONObject("point"); @@ -84,7 +85,7 @@ public class SZCallMaterialTask extends AbstractAcsTask { return task.getString("task_code"); } - + @Override public void findStartPoint() { WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); @@ -122,7 +123,7 @@ public class SZCallMaterialTask extends AbstractAcsTask { } } - + @Override public void forceFinish(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -132,7 +133,7 @@ public class SZCallMaterialTask extends AbstractAcsTask { this.finishTask(task, OperationType.MANUAL); } - + @Override public void cancel(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -142,7 +143,7 @@ public class SZCallMaterialTask extends AbstractAcsTask { this.cancelTask(task, OperationType.MANUAL); } - + public void cancelTask(JSONObject task, OperationType operation_type) { if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { task.put("task_status", TaskStatus.CANCELLED.value()); @@ -154,35 +155,48 @@ public class SZCallMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } - - public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/wql/CALL_MATERIAL_TASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/wql/CALL_MATERIAL_TASK.wql index d86435a..16f1e35 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/wql/CALL_MATERIAL_TASK.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/wql/CALL_MATERIAL_TASK.wql @@ -1,5 +1,5 @@ [交易说明] - 交易名: 叫空托盘 + 交易名: 叫料 所属模块: 功能简述: 版权所有: diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/FJSendEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/FJSendEmptyTask.java index add9cab..9c5af69 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/FJSendEmptyTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/FJSendEmptyTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.send.empty; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -18,9 +19,9 @@ import org.springframework.stereotype.Component; */ @RequiredArgsConstructor @Component -public class FJSendEmptyTask extends AbstractAcsTask { +public class FJSendEmptyTask extends AbstractAcsTask { + - @Override public void updateTaskStatus(JSONObject task, String status) { if (TaskStatus.EXECUTING.value().equals(status)) { @@ -34,7 +35,7 @@ public class FJSendEmptyTask extends AbstractAcsTask { } } - + @Override public String createTask(JSONObject form) { JSONObject point = form.getJSONObject("point"); @@ -66,7 +67,7 @@ public class FJSendEmptyTask extends AbstractAcsTask { return task.getString("task_code"); } - + @Override public void findNextPoint() { WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); @@ -101,7 +102,7 @@ public class FJSendEmptyTask extends AbstractAcsTask { } } - + @Override public void forceFinish(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -111,7 +112,7 @@ public class FJSendEmptyTask extends AbstractAcsTask { this.finishTask(task, OperationType.MANUAL); } - + @Override public void cancel(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -121,7 +122,7 @@ public class FJSendEmptyTask extends AbstractAcsTask { this.cancelTask(task, OperationType.MANUAL); } - + public void cancelTask(JSONObject task, OperationType operation_type) { if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { task.put("task_status", TaskStatus.CANCELLED.value()); @@ -133,34 +134,47 @@ public class FJSendEmptyTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } - - public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -170,32 +184,39 @@ public class FJSendEmptyTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - point1.put("vehicle_type", ""); - point1.put("vehicle_code", ""); - point1.put("point_status", PointStatus.EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/wql/SEND_EMPTY_TASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/wql/SEND_EMPTY_TASK.wql index 8ce7492..e929233 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/wql/SEND_EMPTY_TASK.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/wql/SEND_EMPTY_TASK.wql @@ -1,5 +1,5 @@ [交易说明] - 交易名: 叫空托盘 + 交易名: 送空 所属模块: 功能简述: 版权所有: diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/FJSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/FJSendMaterialTask.java index d75c02a..cdf52cc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/FJSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/FJSendMaterialTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.send.material; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -45,16 +46,13 @@ public class FJSendMaterialTask extends AbstractAcsTask { int priority = TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? 50 : 1; JSONObject vd = form.getJSONObject("vd"); - JSONObject pn = TaskUtils.buildPN(PickType.CP, vd.getLongValue("qty"), vd.getLongValue("workorder_id")); - WQLObject.getWQLObject("das_produce_number").insert(pn); - JSONObject material_task = TaskUtils.buildTask( "分拣区送料", TaskType.SEND_MATERIAL.value(), TaskStatus.SURE_START.value(), point.getString("point_code"), null, - pn.getLongValue("data_id"), + null, vd.getString("material_id"), vd.getString("vehicle_type"), vd.getString("vehicle_code"), @@ -65,9 +63,12 @@ public class FJSendMaterialTask extends AbstractAcsTask { form.getString("create_id"), form.getString("create_name") ); - WQLObject.getWQLObject("sch_base_task").insert(material_task); if (TrueOrFalse.trueOrFalse(vd.getString("is_full"))) { + JSONObject pn = TaskUtils.buildPN(PickType.CP, vd.getLongValue("qty"), vd.getLongValue("workorder_id")); + WQLObject.getWQLObject("das_produce_number").insert(pn); + material_task.put("group_id", pn.getLong("data_id")); + JSONObject empty_task = TaskUtils.buildTask( "分拣区叫空", TaskType.CALL_EMPTY.value(), @@ -89,6 +90,8 @@ public class FJSendMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").insert(empty_task); } + WQLObject.getWQLObject("sch_base_task").insert(material_task); + point.put("lock_type", LockType.TASK_LOCKED.value()); point.put("task_code", material_task.getString("task_code")); TaskUtils.addFormUpdateColum(point, form); @@ -210,38 +213,53 @@ public class FJSendMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); - if (TaskType.SEND_MATERIAL.value().equals(task.getString("task_type"))) { - WQLObject.getWQLObject("das_produce_number").delete("data_id = " + task.getLongValue("group_id")); + String data_id = task.getString("group_id"); + if (TaskType.SEND_MATERIAL.value().equals(task.getString("task_type")) + && StrUtil.isNotBlank(data_id)) { + WQLObject.getWQLObject("das_produce_number").delete("data_id = " + data_id); } } } public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -251,37 +269,46 @@ public class FJSendMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - point1.put("vehicle_type", ""); - point1.put("vehicle_code", ""); - point1.put("point_status", PointStatus.EMPTY.value()); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + } + + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (TaskType.CALL_EMPTY.value().equals(task.getString("task_type"))) { + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + } if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); + TaskUtils.addACSUpdateColum(point2); } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + TaskUtils.addCurrentUpdateColum(point2); } - point_table.update(point1); + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (TaskType.CALL_EMPTY.value().equals(task.getString("task_type"))) { - point2.put("vehicle_type", task.getString("vehicle_type")); - point2.put("vehicle_code", task.getString("vehicle_code")); - point2.put("point_status", PointStatus.NOT_EMPTY.value()); - } - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); - } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + // todo 如果是送料任务需要发送唛头信息到包装机 } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java index 4dd0e94..cec8c3f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java @@ -163,8 +163,14 @@ public class HLSendMaterialTask extends AbstractAcsTask { } - public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java index 89ce191..afbfd1e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.send.material; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -19,7 +20,7 @@ import org.springframework.stereotype.Component; @Component public class SZSendMaterialTask extends AbstractAcsTask { - + @Override public void updateTaskStatus(JSONObject task, String status) { if (TaskStatus.EXECUTING.value().equals(status)) { @@ -33,7 +34,7 @@ public class SZSendMaterialTask extends AbstractAcsTask { } } - + @Override public String createTask(JSONObject form) { JSONObject point = form.getJSONObject("point"); @@ -66,7 +67,7 @@ public class SZSendMaterialTask extends AbstractAcsTask { return task.getString("task_code"); } - + @Override public void findNextPoint() { WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); @@ -101,7 +102,7 @@ public class SZSendMaterialTask extends AbstractAcsTask { } } - + @Override public void forceFinish(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -111,7 +112,7 @@ public class SZSendMaterialTask extends AbstractAcsTask { this.finishTask(task, OperationType.MANUAL); } - + @Override public void cancel(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -121,7 +122,7 @@ public class SZSendMaterialTask extends AbstractAcsTask { this.cancelTask(task, OperationType.MANUAL); } - + public void cancelTask(JSONObject task, OperationType operation_type) { if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { task.put("task_status", TaskStatus.CANCELLED.value()); @@ -133,34 +134,47 @@ public class SZSendMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } - - public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -170,35 +184,42 @@ public class SZSendMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - point1.put("vehicle_type", ""); - point1.put("vehicle_code", ""); - point1.put("point_status", PointStatus.EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - point2.put("vehicle_type", task.getString("vehicle_type")); - point2.put("vehicle_code", task.getString("vehicle_code")); - point2.put("point_status", PointStatus.NOT_EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 +"'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java index 0990b49..c440ff2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task.send.material; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -21,7 +22,7 @@ import org.springframework.stereotype.Component; @Component public class YZSendMaterialTask extends AbstractAcsTask { - + @Override public void updateTaskStatus(JSONObject task, String status) { if (TaskStatus.EXECUTING.value().equals(status)) { @@ -35,7 +36,7 @@ public class YZSendMaterialTask extends AbstractAcsTask { } } - + @Override public String createTask(JSONObject form) { JSONObject point = form.getJSONObject("point"); @@ -73,7 +74,7 @@ public class YZSendMaterialTask extends AbstractAcsTask { return task.getString("task_code"); } - + @Override public void findNextPoint() { WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); @@ -109,7 +110,7 @@ public class YZSendMaterialTask extends AbstractAcsTask { } } - + @Override public void forceFinish(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -119,7 +120,7 @@ public class YZSendMaterialTask extends AbstractAcsTask { this.finishTask(task, OperationType.MANUAL); } - + @Override public void cancel(String task_id) { JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); @@ -129,7 +130,7 @@ public class YZSendMaterialTask extends AbstractAcsTask { this.cancelTask(task, OperationType.MANUAL); } - + public void cancelTask(JSONObject task, OperationType operation_type) { if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { task.put("task_status", TaskStatus.CANCELLED.value()); @@ -141,36 +142,49 @@ public class YZSendMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); WQLObject.getWQLObject("das_produce_number").delete("data_id = " + task.getLongValue("group_id")); } } - - public void finishTask(JSONObject task, OperationType operation_type) { - if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + task.put("task_status", TaskStatus.FINISHED.value()); if (operation_type == OperationType.AUTO) { TaskUtils.addACSUpdateColum(task); @@ -180,35 +194,42 @@ public class YZSendMaterialTask extends AbstractAcsTask { WQLObject.getWQLObject("sch_base_task").update(task); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(point1) - && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) - && task.getString("task_code").equals(point1.getString("task_code"))) { - point1.put("lock_type", LockType.UNLOCKED.value()); - point1.put("task_code", ""); - point1.put("vehicle_type", ""); - point1.put("vehicle_code", ""); - point1.put("point_status", PointStatus.EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point1); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point1); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); } - point_table.update(point1); } - JSONObject point2 = new JSONObject(); - point2.put("lock_type", LockType.UNLOCKED.value()); - point2.put("task_code", ""); - point2.put("vehicle_type", task.getString("vehicle_type")); - point2.put("vehicle_code", task.getString("vehicle_code")); - point2.put("point_status", PointStatus.NOT_EMPTY.value()); - if (operation_type == OperationType.AUTO) { - TaskUtils.addACSUpdateColum(point2); - } else if (operation_type == OperationType.MANUAL) { - TaskUtils.addCurrentUpdateColum(point2); + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); } - point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql index b80c52e..de23e30 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql @@ -1,5 +1,5 @@ [交易说明] - 交易名: 送料入库 + 交易名: 送料 所属模块: 功能简述: 版权所有: diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/BTHCToPackageTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/BTHCToPackageTask.java new file mode 100644 index 0000000..2b0e811 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/BTHCToPackageTask.java @@ -0,0 +1,228 @@ +package org.nl.wms.sch.task.to.pack; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.eum.TrueOrFalse; +import org.nl.wms.common.PickType; +import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; + +/** + * @author zhangjiangwei + * @date 2023/05/04 10:05 + */ +@RequiredArgsConstructor +@Component +public class BTHCToPackageTask extends AbstractAcsTask { + + @Override + public void updateTaskStatus(JSONObject task, String status) { + if (TaskStatus.EXECUTING.value().equals(status)) { + task.put("task_status", TaskStatus.EXECUTING.value()); + TaskUtils.addACSUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + } else if (TaskStatus.FINISHED.value().equals(status)) { + this.finishTask(task, OperationType.AUTO); + } else if (TaskStatus.CANCELLED.value().equals(status)) { + this.cancelTask(task, OperationType.AUTO); + } + } + + @Override + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + JSONObject vd = form.getJSONObject("vd"); + + JSONObject pn = TaskUtils.buildPN(PickType.CP, vd.getLongValue("qty"), vd.getLongValue("workorder_id")); + WQLObject.getWQLObject("das_produce_number").insert(pn); + + JSONObject task = TaskUtils.buildTask( + "半托缓存区去包装", + TaskType.TO_PACKAGE.value(), + TaskStatus.SURE_START.value(), + point.getString("point_code"), + null, + pn.getLongValue("data_id"), + vd.getString("material_id"), + vd.getString("vehicle_type"), + vd.getString("vehicle_code"), + 1, + BTHCToPackageTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + WQLObject.getWQLObject("sch_base_task").insert(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + TaskUtils.addFormUpdateColum(point, form); + WQLObject.getWQLObject("sch_base_point").update(point); + + return task.getString("task_code"); + } + + + @Override + public void findNextPoint() { + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = task_table + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_START.value() + "' AND handle_class = '" + BTHCToPackageTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + + if (ObjectUtil.isNotEmpty(tasks)) { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + for (int i = 0; i < tasks.size(); i++) { + JSONObject task = tasks.getJSONObject(i); + + JSONObject point = WQL + .getWO("TO_PACKAGE_TASK") + .addParam("flag", "1") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code2", point.getString("point_code")); + task.put("remark", ""); + TaskUtils.addAutoUpdateColum(task); + task_table.update(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + TaskUtils.addAutoUpdateColum(point); + point_table.update(point); + } + } + } + } + + + @Override + public void forceFinish(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.finishTask(task, OperationType.MANUAL); + } + + + @Override + public void cancel(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.cancelTask(task, OperationType.MANUAL); + } + + + public void cancelTask(JSONObject task, OperationType operation_type) { + if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + task.put("task_status", TaskStatus.CANCELLED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + } + + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); + } + + WQLObject.getWQLObject("das_produce_number").delete("data_id = " + task.getLongValue("group_id")); + } + } + + + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + + task.put("task_status", TaskStatus.FINISHED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + } + + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); + } + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/FJToPackageTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/FJToPackageTask.java new file mode 100644 index 0000000..96cf452 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/FJToPackageTask.java @@ -0,0 +1,230 @@ +package org.nl.wms.sch.task.to.pack; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.eum.TrueOrFalse; +import org.nl.wms.common.PickType; +import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; + +/** + * @author zhangjiangwei + * @date 2023/05/04 09:40 + */ +@RequiredArgsConstructor +@Component +public class FJToPackageTask extends AbstractAcsTask { + + @Override + public void updateTaskStatus(JSONObject task, String status) { + if (TaskStatus.EXECUTING.value().equals(status)) { + task.put("task_status", TaskStatus.EXECUTING.value()); + TaskUtils.addACSUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + } else if (TaskStatus.FINISHED.value().equals(status)) { + this.finishTask(task, OperationType.AUTO); + } else if (TaskStatus.CANCELLED.value().equals(status)) { + this.cancelTask(task, OperationType.AUTO); + } + } + + @Override + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + JSONObject work_order = form.getJSONObject("workorder"); + int priority = TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? 50 : 1; + JSONObject vd = form.getJSONObject("vd"); + + JSONObject pn = TaskUtils.buildPN(PickType.CP, vd.getLongValue("qty"), vd.getLongValue("workorder_id")); + WQLObject.getWQLObject("das_produce_number").insert(pn); + + JSONObject task = TaskUtils.buildTask( + "分拣区去包装", + TaskType.TO_PACKAGE.value(), + TaskStatus.SURE_START.value(), + point.getString("point_code"), + null, + pn.getLongValue("data_id"), + vd.getString("material_id"), + vd.getString("vehicle_type"), + vd.getString("vehicle_code"), + priority, + FJToPackageTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + WQLObject.getWQLObject("sch_base_task").insert(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + TaskUtils.addFormUpdateColum(point, form); + WQLObject.getWQLObject("sch_base_point").update(point); + + return task.getString("task_code"); + } + + + @Override + public void findNextPoint() { + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = task_table + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_START.value() + "' AND handle_class = '" + FJToPackageTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + + if (ObjectUtil.isNotEmpty(tasks)) { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + for (int i = 0; i < tasks.size(); i++) { + JSONObject task = tasks.getJSONObject(i); + + JSONObject point = WQL + .getWO("TO_PACKAGE_TASK") + .addParam("flag", "1") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code2", point.getString("point_code")); + task.put("remark", ""); + TaskUtils.addAutoUpdateColum(task); + task_table.update(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + TaskUtils.addAutoUpdateColum(point); + point_table.update(point); + } + } + } + } + + + @Override + public void forceFinish(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.finishTask(task, OperationType.MANUAL); + } + + + @Override + public void cancel(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.cancelTask(task, OperationType.MANUAL); + } + + + public void cancelTask(JSONObject task, OperationType operation_type) { + if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + task.put("task_status", TaskStatus.CANCELLED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + } + + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); + } + + WQLObject.getWQLObject("das_produce_number").delete("data_id = " + task.getLongValue("group_id")); + } + } + + + public void finishTask(JSONObject task, OperationType operation_type) { + int current_task_status = task.getIntValue("task_status"); + if (current_task_status < Integer.parseInt(TaskStatus.FINISHED.value())) { + if (operation_type == OperationType.MANUAL + && current_task_status < Integer.parseInt(TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能手动完成 [确认起点和终点] 之后的任务!"); + } + + task.put("task_status", TaskStatus.FINISHED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + String point_code1 = task.getString("point_code1"); + if (StrUtil.isNotBlank(point_code1)) { + JSONObject point1 = point_table.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + } + + String point_code2 = task.getString("point_code2"); + if (StrUtil.isNotBlank(point_code2)) { + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + point_code2 + "'"); + } + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/wql/TO_PACKAGE_TASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/wql/TO_PACKAGE_TASK.wql new file mode 100644 index 0000000..beac8b7 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/to/pack/wql/TO_PACKAGE_TASK.wql @@ -0,0 +1,40 @@ +[交易说明] + 交易名: 去包装 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + IF 输入.flag = "1" + QUERY + SELECT + * + FROM + sch_base_point + WHERE + is_used = '1' + AND lock_type = '1' + AND point_status = '0' + AND region_code = 'FJ' + AND point_type = '5' + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java index 17c92af..a055458 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java @@ -23,12 +23,18 @@ import org.nl.wms.sch.manage.PointStatus; */ public class TaskUtils { - public static void isEmpty(JSONObject point) { + public static void isEmptyPoint(JSONObject point) { if (PointStatus.NOT_EMPTY.value().equals(point.getString("point_status"))) { throw new BadRequestException("[" + point.getString("point_code") + "] 上有货!"); } } + public static void isNotEmptyPoint(JSONObject point) { + if (PointStatus.EMPTY.value().equals(point.getString("point_status"))) { + throw new BadRequestException("[" + point.getString("point_code") + "] 上无货!"); + } + } + public static void isLocked(JSONObject point) { String lock_type = point.getString("lock_type"); if (!LockType.UNLOCKED.value().equals(lock_type)) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index 12241d84fb59da534b6e948f51b0921d35e4a199..bbd53a2d94c0232d9aa92e998c8f552786c54c06 100644 GIT binary patch delta 54811 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 diff --git a/lms/nladmin-ui/src/views/wms/sch/point/index.vue b/lms/nladmin-ui/src/views/wms/sch/point/index.vue index 0b14512..0141fdc 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue @@ -39,6 +39,7 @@ @@ -123,30 +124,6 @@ > 禁用 - - 锁定 - - - 解锁 - @@ -23,7 +22,6 @@ @@ -32,7 +30,6 @@ @@ -53,7 +50,7 @@