From 79937af8d521bcfa6f40ca3f368f7321a6c3c7b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B1=9F=E7=8E=AE?= <zhangjiangwei2000@outlook.com> Date: Fri, 14 Apr 2023 21:32:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pdm/service/impl/DeviceServiceImpl.java | 2 +- .../service/impl/WorkorderServiceImpl.java | 4 +- .../org/nl/wms/pdm/wql/MPS_PRODUCEDURE001.wql | 4 +- .../org/nl/wms/sch/rest/TaskController.java | 1 - .../wms/sch/service/impl/TaskServiceImpl.java | 2 +- .../sch/task/call/empty/HLCallEmptyTask.java | 107 +++++++++- .../call/material/FJCallMaterialTask.java | 195 +++++++++++++++++ .../call/material/SZCallMaterialTask.java | 2 +- .../call/material/wql/CALL_MATERIAL_TASK.wql | 2 +- .../sch/task/send/empty/FJSendEmptyTask.java | 200 ++++++++++++++++++ .../task/send/empty/wql/SEND_EMPTY_TASK.wql | 79 +++++++ .../send/material/HLSendMaterialTask.java | 137 +++++++++++- .../src/main/java/org/nl/wms/wms.xls | Bin 266240 -> 266240 bytes .../src/views/wms/pdm/workerorder/index.vue | 2 +- 14 files changed, 713 insertions(+), 24 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/FJCallMaterialTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/FJSendEmptyTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/wql/SEND_EMPTY_TASK.wql diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java index 9105e33..14ccae5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java @@ -44,7 +44,7 @@ public class DeviceServiceImpl implements DeviceService { if (!StrUtil.isEmpty(search)) { map.put("search", "%" + search + "%"); } - JSONObject json = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "device.device_model, device.device_code"); + JSONObject json = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "device.device_code"); return json; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java index c22b728..c690ede 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java @@ -183,7 +183,7 @@ public class WorkorderServiceImpl implements WorkordeService { String workorder_id = param.getString("workorder_id"); JSONObject submit_obj = WQL .getWO("MPS_PRODUCEDURE001") - .addParam("flag", "5") + .addParam("flag", "6") .addParam("workorder_id", workorder_id) .process() .uniqueResult(0); @@ -193,7 +193,7 @@ public class WorkorderServiceImpl implements WorkordeService { JSONObject workorder = WQLObject .getWQLObject("pdm_bd_workorder") - .query("is_delete = '0' AND device_code = '" + submit_obj.getString("workorder_code") + "' AND order_status IN ('2', '3')") + .query("is_delete = '0' AND device_id = '" + submit_obj.getString("device_id") + "' AND order_status IN ('2', '3')") .uniqueResult(0); if (ObjectUtil.isNotEmpty(workorder)) { throw new BadRequestException("该设备正在执行其它工单!"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/MPS_PRODUCEDURE001.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/MPS_PRODUCEDURE001.wql index 0f5ba51..9836da1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/MPS_PRODUCEDURE001.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/MPS_PRODUCEDURE001.wql @@ -161,8 +161,9 @@ SELECT workorder.workorder_code, workorder.plan_qty, - workorder.device_code, workorder.order_status, + workorder.device_id, + device.device_code, material.material_code, material.product_code, material.a, @@ -172,6 +173,7 @@ FROM pdm_bd_workorder workorder LEFT JOIN md_me_materialbase material ON workorder.material_id = material.material_id + LEFT JOIN pdm_bi_device device ON workorder.device_id = device.device_id WHERE workorder.is_delete = '0' AND workorder.workorder_id = 输入.workorder_id diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java index 90ea8d6..fd6d20a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java @@ -1,4 +1,3 @@ - package org.nl.wms.sch.rest; 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 4f34900..8e04426 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 @@ -124,7 +124,7 @@ public class TaskServiceImpl implements TaskService { public void operation(Map<String, Object> map) { String task_id = MapUtil.getStr(map, "task_id"); String method_name = MapUtil.getStr(map, "method_name"); - JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + JSONObject taskObj = WQLObject.getWQLObject("sch_base_task").query("task_id = '" + task_id + "'").uniqueResult(0); if (taskObj.getString("task_status").equals(TaskStatus.FINISHED.value())) throw new BadRequestException("任务已完成!"); // 任务处理类 String processing_class = taskObj.getString("handle_class"); 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 4d305dc..292c4d1 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 @@ -4,14 +4,12 @@ import cn.hutool.core.util.ObjectUtil; 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.basedata.eum.VehicleType; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.LockType; -import org.nl.wms.sch.manage.TaskStatus; -import org.nl.wms.sch.manage.TaskType; +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; @@ -27,8 +25,16 @@ import org.springframework.transaction.annotation.Transactional; public class HLCallEmptyTask extends AbstractAcsTask { @Override - public void updateTaskStatus(JSONObject taskObj, String status) { - + 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); + } } @Transactional(rollbackFor = Exception.class) @@ -96,13 +102,100 @@ public class HLCallEmptyTask extends AbstractAcsTask { } } + @Transactional(rollbackFor = Exception.class) @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); } + @Transactional(rollbackFor = Exception.class) @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); + } + + @Transactional(rollbackFor = Exception.class) + 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"); + 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); + } + 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); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } + } + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, OperationType operation_type) { + if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + 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"); + 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()); + TaskUtils.addCurrentUpdateColum(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); + } + 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/FJCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/FJCallMaterialTask.java new file mode 100644 index 0000000..75644e7 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/FJCallMaterialTask.java @@ -0,0 +1,195 @@ +package org.nl.wms.sch.task.call.material; + +import cn.hutool.core.util.ObjectUtil; +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.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; + +/** + * @author zhangjiangwei + * @date 2023/04/14 21:28 + */ +@RequiredArgsConstructor +@Component +public class FJCallMaterialTask extends AbstractAcsTask { + + @Transactional(rollbackFor = Exception.class) + @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); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + + JSONObject task = TaskUtils.buildTask( + "烧制区叫料", + TaskType.CALL_MATERIAL.value(), + TaskStatus.SURE_END.value(), + null, + point.getString("point_code"), + null, + VehicleType.STEEL_TRAY.value(), + null, + "1", + SZCallMaterialTask.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")); + WQLObject.getWQLObject("sch_base_point").update(point); + + return task.getString("task_id"); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void findStartPoint() { + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = task_table + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + SZCallMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + 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("CALL_MATERIAL_TASK") + .addParam("flag", "1") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code1", point.getString("point_code")); + task.put("material_id", point.getString("material_id")); + task.put("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_code"))); + task.put("remark", ""); + task_table.update(task); + + JSONObject point_update = new JSONObject(); + point_update.put("lock_type", LockType.TASK_LOCKED.value()); + point_update.put("task_code", task.getString("task_code")); + point_table.update(point_update, "point_id = " + point.getLongValue("point_id")); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @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); + } + + @Transactional(rollbackFor = Exception.class) + @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); + } + + @Transactional(rollbackFor = Exception.class) + 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"); + 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); + } + 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); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, OperationType operation_type) { + if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + 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"); + 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()); + TaskUtils.addCurrentUpdateColum(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); + } + 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 57052c8..add73f9 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 @@ -24,7 +24,7 @@ public class SZCallMaterialTask extends AbstractAcsTask { @Transactional(rollbackFor = Exception.class) @Override public void autoCreate() { - JSONArray points = WQL.getWO("CALL_MATERIAL_TASK").addParam("flag", "1").process().getResultJSONArray(0); + JSONArray points = WQL.getWO("CALL_MATERIAL_TASK").addParam("flag", "2").process().getResultJSONArray(0); if (ObjectUtil.isNotEmpty(points) && !points.isEmpty()) { JSONObject form = new JSONObject(); form.put("create_mode", CreateMode.ZDSC.value()); 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 03f14d2..fe07fe8 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 @@ -56,7 +56,7 @@ AND point.point_status = '1' AND point.vehicle_type = '2' AND vd.is_fire = '0' - AND vd.if_in_kiln = '1' + AND vd.is_in_kiln = '1' ORDER BY workorder.is_urgent DESC, vd.create_time ASC ENDSELECT 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 new file mode 100644 index 0000000..94f2fa6 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/FJSendEmptyTask.java @@ -0,0 +1,200 @@ +package org.nl.wms.sch.task.send.empty; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +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.basedata.eum.VehicleType; +import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.send.material.HLSendMaterialTask; +import org.nl.wms.sch.task.send.material.YZSendMaterialTask; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author zhangjiangwei + * @date 2023/04/14 21:29 + */ +public class FJSendEmptyTask 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 + @Transactional + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + + TaskUtils.isLocked(point); + JSONObject work_order = TaskUtils.hasWorkOrder(point); + + String vehicle_code = form.getString("vehicle_code"); + if ("0000".equals(vehicle_code)) { + throw new BadRequestException("载具编码不能为空!"); + } + + // todo 组盘 + + JSONObject task = TaskUtils.buildTask( + "混料机送料入库", + TaskType.SEND_MATERIAL.value(), + TaskStatus.SURE_START.value(), + point.getString("point_code"), + null, + work_order.getString("material_id"), + VehicleType.CUP.value(), + vehicle_code, + TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? "99" : "1", + HLSendMaterialTask.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); + + return task.getString("task_id"); + } + + @Transactional(rollbackFor = Exception.class) + @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 = '" + YZSendMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + 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("SEND_MATERIAL_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", ""); + task_table.update(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + point_table.update(point); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @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); + } + + @Transactional(rollbackFor = Exception.class) + @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); + } + + @Transactional(rollbackFor = Exception.class) + 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"); + 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); + } + 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); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, OperationType operation_type) { + if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + 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"); + 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()); + TaskUtils.addCurrentUpdateColum(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); + } + 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 new file mode 100644 index 0000000..fe07fe8 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/empty/wql/SEND_EMPTY_TASK.wql @@ -0,0 +1,79 @@ +[交易说明] + 交易名: 叫空托盘 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF flag = "1" + QUERY + SELECT + point.*, + vd.material_id, + workorder.is_urgent + FROM + sch_base_point point + JOIN st_ivt_vehicle_detail vd ON point.vehicle_type = vd.vehicle_type + AND point.vehicle_code = vd.vehicle_code + AND vd.is_delete = '0' + LEFT JOIN pdm_bd_workorder workorder ON vd.workorder_id = workorder.workorder_id + WHERE + point.is_used = '1' + AND point.lock_type = '1' + AND point.region_code = 'CPHJ' + AND point.point_status = '1' + AND point.vehicle_type = '2' + AND vd.is_fire = '0' + AND vd.is_in_kiln = '1' + ORDER BY + workorder.is_urgent DESC, vd.create_time ASC + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + sch_base_point + WHERE + is_used = '1' + AND lock_type = '1' + AND region_code = 'SZ' + AND point_type = '1' + ENDSELECT + ENDQUERY + ENDIF 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 1487abc..c32a3d0 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 @@ -1,14 +1,15 @@ package org.nl.wms.sch.task.send.material; +import cn.hutool.core.util.ObjectUtil; +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.basedata.eum.VehicleType; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatus; -import org.nl.wms.sch.manage.TaskType; +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; @@ -25,8 +26,16 @@ public class HLSendMaterialTask extends AbstractAcsTask { @Override - public void updateTaskStatus(JSONObject taskObj, String status) { - + 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 @@ -65,19 +74,131 @@ public class HLSendMaterialTask extends AbstractAcsTask { return task.getString("task_id"); } + @Transactional(rollbackFor = Exception.class) @Override - @Transactional 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 = '" + YZSendMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + 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("SEND_MATERIAL_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", ""); + task_table.update(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + point_table.update(point); + } + } } + @Transactional(rollbackFor = Exception.class) @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); } + @Transactional(rollbackFor = Exception.class) @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); + } + + @Transactional(rollbackFor = Exception.class) + 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"); + 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); + } + 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); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } + } + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, OperationType operation_type) { + if (task.getIntValue("task_status") < Integer.parseInt(TaskStatus.FINISHED.value())) { + 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"); + 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()); + TaskUtils.addCurrentUpdateColum(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); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } } } 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 6a50c5de25dfa40b53d9ce1823682063f78109f7..9de783a1b2c6d2c77acceefadce8be1fcc894166 100644 GIT binary patch delta 10328 zcmai42Ut``*FJOaHddCRfDLtBR6yF&J6m8W0yeN46l4VySQM~Dv-n#-OGHVy8d225 zmc$Yf*NPZ57F3KiF^MIX7!w7>-uTbGdw133|DK=wuyg0!ne)EynVB=Q7s}Q+l&x{t zo-Yut>9MA+s$zm*9+^?`LNHz?FWg*NRroXM@9|q@Rm}w97lcS^Y{h#;9TO?Ca70=^ ze{h0d0l)^z2^KInvErJnJxQ#{6tkc9cI`iGNk9VoDZZuZ-%oAcJvIFEDS-4HO7*{= zM!kF5`0uAN@17pwxS2ouNk3rNjMOCWT8^@3RhU1QaQEh32ig0Y%k~c56@F2PM7k`h zeMM`evSxCW1Koa4Zt{0CBpxtB!s@jAI8<y;@v1qY${1w)!-kC&Maal3W)3*Om9}hM zK<4Sk<UU?#H<q=%>TI?Z=?lkvJbmF1);3USw%zPYrgR_2+U(%&Al62c-1&+b&ZF2? z^D@n?UJg-DVSCTPA<}=%+C*e!zt1w_`wUu?zHUTl7Tb7RgSm0H(v5w)j~l|lB#GDo z5)gXPh77Z<ErhFBn~>c8Xi3J)0r~+I8Eo$f70sXL_1+~J`<_w?>;anBa28Q>8I~kW z0QLxDM{1T-W=SemRXSBXT-{0hxtMLaxTbA&GHvVzq`8#_P=L7k8J3jbuVZJai!IS_ zuC41mI<e;K6|Ha{?JQmM&sJI;-Kn_&ZU1apCAG8xD8bt<_}gf5fX5*MSb^=~?G&<p zaB5=u0H>Iy#h-p@7p^ysefzoFe7!0zbEo9o+aA3aeCt4UckI*OwYEw=d)OSgpfG<- z_R4XNS?Rks7p-ur&2`@$kk?bTTaxlcT~poUvAzKgk3XGW+!+4s^}$yU&O0uRQRhig zwn&GrOpfa{a_P&!_Kgd|0)#Ilk9C!@pZ}Wk+~z+!!xVulpDK!l0k3{_HVVoc=9jk3 zRn2(dl#=#%SpFwJ>6o#1yLiS|N%QBdKXb&h-f;Xsl6IecueEJo`d9YyGdmhC?3lUg z>eY<nJ5^vjvUG3J$aC}Q0du_<)BpKsN1JJ513DJ1-nhB`*|))~CwV7`GXKnu-nemN z&FZb6uN8&tJU!?}qIT28s)mM!VU6W_<B)==`@LN|mYq30ZNvFLzs;F>dzdh?y)mQP z)4uB;j~Tpnf8ec=T^RopU2bi%{UahfeEqctosQAdj=fNo56*l3_;$;JMKMWNBV$(N z-@f#F%BDZ>ewpo6;&h;sH1(^jX)88P-Q7c>Z+o<GsAAJ*t;?lRe*29N$36L_(f*pL zzIV4E7vtq#?iDxE+zW*3)B+D-R=u*m`0$=%@cD%N#fy%fz4In)=c4n1zXhi{Y@e3X z=PSpk;sHi-m&}E>L(U}WuWT2sKH$2(@2x+Ihp#;EdcptcnuA}T8hNT+k9kk;1$Z3) zxXr`^0}Yom7d5ASX*>8*{mcKkur|EI!Xp_;yHa8j?d}h1G=BQ*>YZupGyWR=$(@@g zGX`z=bYgi#(7Ye|JohhHF}>XNir2OF%O;<{HEsRXt+QUtA7`w+EicWrTkZBk%JXkd z(sizgbaLOqTfZ&dld;+K*XRd=`iv9pzWq`v8948%{iK-Hp4yw={A&M^zJ7Y^-o~H$ zIbDyM^gPPt=Q}OayACN6EH^4I1<!bKsNz&=)3qlzLnC~rUTJ-^*zd>U2bZ!ZPRg2~ zda-fU!=6{4C|X2SsWC5?KltU9xb}4Ga+?{eW>ns4l^iSEJl@Cc$*W!!i;8m|PgqgW zc5OjjhYJ&2cHZy3WO3=|OHL#o8K1v8<<Xu2f81Z3wC}qS+8<KlpFCgk!)FPd&!i49 zo~aBEPrJ8g-+<XG+@8)jGPdu%kK<2m?D<M|WB-fAH)8(mT@EMVlUaLb-iH~6x6{t| z+G6;nWJz6ns5^WsudyYalu-Mce%O0?U*VE1pKdF;^{R5<vDGV9zLmu^ello@%fORk zB1?~(G_uVt*T=wSho9)&>XSDgW<PPQx;L!m(Jni`zea!b_X;Qac&iXTdQ`J?gP|L9 zh7g+yo8w*9{Xj_^aM>0a@(L@q{pM1!rd3>%d^|S7xN8l7Ek21~3s8k+?s|Ya0l<1J zUt!r}1Hd#Pz)CD1VmWRjK)nc{d=tPOF+lKUfQ6W%PGPCA0Vwzy;4qd>-(XwJA}g_c zh~=tp0b1Gs_-p}~g@AjpbdZ4&3btYg8NgF4Q|tf?+W?MY`3si*nBK^D07H=bSS<Hr zc@ax5M+Dx1z*wHbQqdOR#!i4xCx9Po0o<JdHtqs=gXKXJfOC7S@5VZopYOqR*8xDk z7hqpUBY<ij8an|D*pH1m10){+SnCRqQ3tRS6W`v0$g~^4v3gAD7@?mJ0k~ii{px!J z#j@xyz!uEyBaZ-=8?PV5e2I~AKL(JEk!p7wpg%^c+X-xgk?MI8APXa;Zva?l#L#%1 z!mwj#!cGH}VrYKHvKvMu`3%5(ERSO;#E7If0xZSy7M9&HGULwzY{F9WBfuvZnWS@g zdccSzoClbV5t(`cU{^bU>WcusVq}^w0eHIrh<^fz!$_EZ1~5LxPz?SBpaLT>?Kd={ z@{g|q>_+9wu3^^i3h>2sfXf(x9XBxi7=h!zV+c|C&6~I*;%*?hjUq5K-R=NrQF-DY zNDh^k-39m(m2dwO;5;h7a}SR>C|L0~fDQ!@z7K<8Dk`4#04E44H8x>LP+_Ns0MV$Z z@e#lyRP<d7zy(xP`50giDjM?ym7*e_rx;os<KSliLs41ab99Qz#+XJ4$y%z?mh{>n zAp%n`Thc}<C2a_F!EN+sN2Z?#`PTG@3pq}V`%wr^d2j(5x5fkH!%KosI&j1Op`EQs z;0>OqP$$$8)(PuFgg)xXhnLw0#^GO2>WIY1Il&m<L-v5cI<ft)PB2FQmlMth#s#0T zn=|X9-GB9gaeL2)nCHsu>`02+?cw{kh0Yj`Jp?Z%q7%`Hxm&EveZO+<y^5)8XOc<Y zwR3&1)4BI6UAvHl9rqGW37)IGfr5R+dNJR3Azre*?+j!g^Rf#GrS=hK=1j_oN$5&C zGhcKiN+zo-31hTT#D%%umBfjf+Yz|lksaB3B4HdnNw7&SCsiUsOb2?A`NYP#3xVIf z2#hlI^&owngpURi*kxK9MV9uIQbP#L9z~#JH0QwdI*VMC$}UePP`!XaOBI1+)71jf zHIV`xGx{>|V0!H$|B)KMA&^%`V9QB!x2YylCU2AWfIuV4$`n#ee-EPA@Drh!QCVcF zsrm}J6W#?^82>XG%k^z2=-!QjWBwF$jG>t81!R>e)|px$B%@7dI#EnJn_O;+)|2&2 zp)ZwSgF5i146A*XlUa<$k8<K|K<t?eKdPJ9+(XUG_M;}#*wOUXkNTWy$IjPY*!L&$ z20!cYsMw3yx`p&Kx?^=Q;1cI%k~_|w#qgcAMqzD-wMJu&oolQ!cU&5ap~hMhVr{3j zCc;{+wI+s7VVAWg!Dl8*&4}NA7Q=2!6&)`IOw&9>8?0fn=4-ZC!;H<>WLU!l!Po4t zhFKgwp`_q}B`cv>#S-;ENe7^nZ|Q-fbAUSuo1cZ!@Fl#pKEzZ;E@6#OBJ3!{rsifM zY=!BPTVEa^hOd~SD9Sm(6HP1<sM%(oh_nOPgkY{w@CDq*8tcpx7u7=EE`XJA1v{DT zLO8)V1X1lHs$dl?$E%vV*5LOOR!namLc&4xMu_o5is^!d=#65=5gUrh45FOe3JK09 z&S`ICo`VC;wh%!9xrIL1%+Q;$4W>F8y?B=noJ%isc^bb^nO%CJ%i-j2p0$^iwHFTe zJ}YZ41USu6@UjB1YP>Ks>v+2aPH|gB9kfNe4SWU-P|04*>qyGR=*^RG;z)QSi6TPt zB-qRlN1S;Q-c}OcNTQJ77R9ObMiNDwN^gz?J3cH4ZzM5_w@Y9$5n@zW65bq%VqzxY z9YWbKTY@QxYX^>j4>BkrGCs0C$e@(iQp}IRl#|CKV#i0;$12<hF~0;hvMi<#C!CRm zP#u^jk(5J}FE7uPbMDK<nEkfN4vH^2e+&b7dA=xb8E+Thgu4mMgb=C|w_<%cx9rAS zhY8b{X^yAbGY3K_NoP6d*N^i%nD^_4eq+f%=6VRF&s1;?l-QsJFvW2IN^For(s*Dc z0ypz^Gq72U5;eB)c8f-qw(>nPuApSLhEd(z{CS-{I5>X}ZYU4u&*>b-To0uR#`oeH z1Ym;&WDMUR02}Ne**u>B<TIKZw*VaH1=e*KfP6A}y9nlTvzd)~0P<PL+a<7wEaJww z69h2oaH<P)It<6wgF_AEP#yWP4dhT4Q_RCK%7qFfj7>P@OO`TW;gnBWZ>~cScE}<$ z-ysM)%p&eQ%^;+?3D|%HAx(*uW)RY><?SL&cjiUc6@r+=2&y}CKOE_JbKZkF?-cJn z7`<;NxKB7nP)@4(#EHiVw)zXksg_4@|KbutFv@1rr+G+&@r_G15%AK3nd=c$mk}ZS zp!jldAqe*n60ti=It1aS5jP$r#5(yxxCL%mTOkN;Uf>}JzRW5ngc%x1b$1Kp0hAm- zC<l<l1B7w_?HG9^<*aIgcpfR#>M;~OHiJb@C^xGt$vPC}JcI=7!>-s+rWu{&h4E<q z99kHn9f03?{b7jKpRn(M*eMZ)a=zqbhM^pGEm`cAR33)l=CNUe5r*JjaR*y=eT6ZF zQB-?lI1d-V!G$B-UXbzP!Vzu+Y2o3*5pFLB7mjdy@g<EJE*!Nk;q4;4V>1&A7mjcl z#MbId0wW1J<g|ukc3Q$-x#ogT{}DWyK#oiVlG%W7m(1=Wu<u7i$b&{8na?<w2qe?M zy;)>q5`knacFS^RH-iW!Kbq>87s&$zaR8AB@EDqSfJg**40xvDf*XkdLT<f9A^;(l z;6@_AV-7eHgKN%-tlCIaD<GES70En^#^6TraKRj06vAo9Lmn;);nbv=hl{f6i9)zy z@)!1G^+Z|qL~(GI;6@?b9<T&A3MZ19JVIaWM2g~4znD}ea$C?QKDg05nGlXlG#6YC zo=h~7*+x8hGSOBt(OhsZG3pqqy^UpKjpkx$jN$!-a{gjCf9(4}HX1SLPfL39{$i~D zVmN=6MIU1o7sH9OtdbZMw-LRYk2EnTt^vGxaWR(7)%bxp6;CFNBcnnxr|~7GnT!g_ ztOYSoMulX|XA>2Y*$0*+ph7a{B%u0WU{y$F9cDg@FA1cQXIS%OL#?u~;m9x;>C2#n z4Ezc=l$s9ZFdeUQW}S-iCySVKDyknfkT7m)s)s;L?14$fJNDShOjJ`n(^!*)a)3Ul zr5%`$w)JE?XG?z1W@(r5o(-LF?NZ;fVLRrYn#$}@PX-g#aT-3fw>n-A%oq(7L0&Pd zHI#dAbN^xQHL>6ff6vCcVwyBmQRi?j(rPZ!j(l{~T%;YCX<Evs3&UkSb~dOngrm4j zz$P9wj^`=ntd{C*jNp7|&_@o5;eBY(M-EY8jh+7*9IXUy8ESB}a)>4AXmGSFb`joL z)`bS4@=>gLv@{4co`|u=4weQ7tI>L;6T3ogi_xMy_E;Oqk<oI3e0VZiBy$>kc`{lg zV?MlSxvBFj_F_qDty4$)!PL=mQ-^(p&+6842O76n9xjT5i{;?_c(_;&PRX>5qx6B% zT!T2Sfj{3Mj%yIW^NF+aiR1WOV!n=}QjIZOM;&%dBQN-lI_#KBUh*Av*zpOlL!-lv zPXXUwa6)t_<TY;>;hBwH@#a=yELkDungl(+#u^({9Y*yTJck$D^%CqnxTwbSGF57} zOFT#BE$<+nBlC(`rlXR{8|JEx>Y1tL+9hym@9?k**e-|s!IMj{s!ib3T1Y2Yqo43W z^b<aaegYSLW1^W>nHeq-;WohEJX|8eHNbryE)n6(J4qtKHGm}}CnB81&TasfnU{!g zd!P+3F_BAJQa(nBmNb$3LDEVxlK~B<JqgJSBlw1h3vv>YF%W!D#0^XmlBweD0zBOW zqGNXEB_WyRyq#SJ_>Kq%#RZa>2MJWiC^nPe)Gjjv^x*({@eKPQfQUTg0s2@0`k>kz z@)DTF1j^Oe6|<2TPZlDw90rjsz+Qt0w{_#r-Ig0_HaD>gNXyAc=1}m37Dp?YLuuhr zlC3Doh>}R~H5Vr%*(xI$htMp8m6vSfz}Xp;i~$vqC)k0VbjcXd_X(N5J+cXrm1`!F zf<$u2Q?#-DQ;<jwdBy{#AQ5x=NI@b)t?^7jA{IMKB*PNW6eMyR#(WS3Gbo#JS@p4; z`qU3VQ#sHVJZP#FG}RL0ge0m5$zk%7s7^s;W)FQi53jHfOS>=U;Wh7}FM1fsWy8Ll zhahHe5)~}0gB~!DDeptMGdX>zW-{D-Z%n3+i)?KH@+qcY3KfNKbIztv!-<F)b(wg& z+n@^!KSmPo1h=6RI=90M|NMr(?2jG3MCrw7oTxbFU@B$TepMVE!BQw#kH3>gP*9tX zZ%ih>dzJHrz|=X7y60<udI|-`1r#)`q@a5By9QMPQ|dgbrdOqk6jg4evSsy;zvljG zT=witWtC~dR!Zzh_L!y~q=a?~3ex(w;t$I)&B1!-WWK|vPRyFql#5Y=Urpli`&t}? zVloQGZ>RD2>5u16AAF+4w6DZFEn4HayFhH`53$@8h~E&xv9%JvU(JAzArRa7bN&MH zGXVRAWB)j8%lgvc(@@S9hlgn`-eFHCbR2?>G+5E$<1m&ClXQl{g~k+}p<?hA`0Q2+ zC#|5OyP&h_+!<<GGP`6xf-~?fWOJVsJQAqckmJuk?PX|tJaT#KKkfBs2dKGkVmi@F zCX;5yeHra<)C9#V<3e>9hWKFraGxO5uk_Kz$0>avFw{RbHZ~9y2P*?+d>n{UgW>~& z0(?+oT&z!!PK)Bg<HEE)!Agh^(P)Bop<$AE<qTPNLcSquc4j_Vm{ycIh8X1Wnfb+f z+Xb-`)%whm%&dIpZvD$9>a+D@jQN=$ic89d3+WR}Wm?_nDMf~2J+X6Crh~qqC_l4A zALpQ-m^Z1iZER_=yu?tDH*H~DTpkq2(}(rfjfw+pfQP?Q=`Ak{@RVzc<!P|Xp)f}# zoonB3phgm#qU+?CnwB;|nzGVi*m8%oM4b-OllsQ#hK@=HjW)%oOH0=bq|#^Vk_t=o zIeM5VcR%^2?zivY{;o~uZr2|90h&+lKUZ^X^IpkOnKTyMcfY8kew!&d_<Q~Jv!`wM zo<2lrC{yjepBye<+I5E5$)x>hOtZ=I_|n2LC6H$*l;`M6;t1rXPc71WWM}<QQbxpT zZ+Ui^s6nvZ=qZ!R@lO@;dGp;DCkV3}+RSfLY#86y_UJ5e-b_)nTp3Hp5=a^=S7c`e zC=S=pKGHKiS6_Hoq><Y|ojec3N_o0rw>&&tEFxmMd$f3RbDp<cIotP;_z*w`)f}6- z;R`$Hq{kD%RUyBtkoW52;-BJjNH#l2<lkWIsS)X><dw*2wO_JGSC}nN8awltps#*P zi9GKZEpsC}JRi9kCT5O#ov$~#ec~n<am{UA#5K3pHOr2<&1<9T(cMiC_$i#_+2gjN zptyKK{xwDGRmH5S2NeeuWc<STv2Cgq*My22P_0-iSf-d-ttd0JRx5sIsuk5nMY%$c z&kwm8_4vHIaDn1(zC5qz5_xO#2=7nS*KSDkB{x90>Gn4ICLH}Htu#v>Yk-0*gVr!5 zU{qObZf0SQ-eb*dSD7?ZyoNp`bgy{=C-?8$*7$w>7T1H15^6HVJztGVDlE$@$;-^o zoAx_BYv7PEd3lA|`YHF)jhzpXIVnlk$eO~5hRI92(uJi35kw}f&ebf<jh2VV-EZdX zg!8pmLeAA3{JQGo{!H5n3G|RjgNL>E6Lc384cDl1Ch3QOVdD5KgJHZcq~+@MCB?q6 zN<(R33Dq~aoxg9rCObQ+M8Dmp8(mgX?2+f`Tc|EC^{3rOry1qbg*V}x(D&exWv*0( zc!J;&x!BEpbk`eCZ1dzk@*5+RMANz3p<#1+6p1f&sgx=T^c{+`v(_pO62*|X_~dHx zP^K6dJCnGtP|=D3)g;hSk+_V!87c`JB8eSxLUf!IeOgY+WK#E&d(I!8>8?I>_PhHs z=~1zNxo=vDaq7A+#uhBYKYUFz6vY`P7doWm6_+?F<?ff^&%KQYA6=?FnQ~07A+vg2 zstp%t$#vK4SVMkkL7}m{pL)h|S*wt}UI+sw`Mwq2ZWGwlhP~vvKZSu!Lig=IrrDo> zyO$21`MUPXxw3t`pPqVh<Y1D0;4z1C#L)IIJ|h9X-@GLANZ?}PPSxnk*JaB+Dm=X8 z{sSbj`xDP!`03&*nbb=a9V8E&*h${9j;v{Tp}uhC>{*%gM^&`9Jm?n50r!VdL1*pG zwnRNt?}(B~hvfR^ZI>?zlt+3D7km1uWA*v@#U2hKZ&EMy9h{k8s+TuM#mE(z9>#J} z$gZ=(>Y2+&cQ*(P!aQMs=NMtD+D|CFHAf}9qT43jAXNz;j5<8kPv|EsS+nDu-xYhj zAC<bUfVKDu4Kb6upIBl4++Nd=CG_`fvUe8rHFhfP6m0Ko<E#=syFJ|AS>zm~5=xxe z=C3A<mpTXf@wFsh;oFejLfW~=N$E5Iu7|jhB`pC1KtY<7`oiqYuor<Kch9=tKew^{ zMg3;+o1zN;x#DSM*N0C0#;Z)73I&;k+1k>Q5-_z}PTvdNb(Yo(ZQ0!s|F`O_*Ex2V zyhtZV31J2tr@FOm#hr!5ja-Q5CIEJ8WR@C;lj-d>dN_@LJQ{YBR#16hnsJlfXY>Db zVm`S~yEvxeZWe+Y;aJ?sf^bg@W!B%P;~f+JWq!??6aQsSdq77xCjHC2nl<<Nm-){J zwAv;4pJo)|iLVHoXeTDEiFS8P`DX)WVG|v{w8%k#f2acHL=)X(X^|6izlnBW9yZha zmllOFTOML1<2coJX_11FHPfz3i{y+amd3Fj%OjqCb|7xu{>Jrn=T%eKsNta)rba!O zw|i)0(ihY1qvtJcRaorC#Jfu~ewm+Gaj|xEYni~-Vh_!$%II?}t?z*iwHLR{T^(Yv zdv@+xSrM}^Vc8#@Z-k^(9ktkv<F-ZECLih^TUYybz^^gmYb+0Xw`}@8*Ljd`OL)@S zaVs`UO&>j?pU{+#4|D1%tzafSrPHacv<WL+DXNxc{(esXMMb+aKfj=T*;Y0$&1E=S zdgm~Ce0{}BdMa(0;?Fq0qI=S)kcoapk074RidW_iCtlH>bV-SUdBPidzNY<%r)kh@ z+D$-u)=m|)(5dmU@j6|YQs*BQp!1J?|5qWC#`V`mEBwR!HOklkJb0LY(Vh?+tq2SX o3<*#M<8NqSfIs^i7Hirk5X>Q_7?I!?N)R;wr*jt@!A;Ts0&en$3IG5A delta 10661 zcmaJ{2V4}#_kXi{jSdPZ2znkUpp>Kca=_6A6%@OIoQTq-M2Y3_XNj@Ig1VX*K@*KF zHq^5sMvcA1uF<G5CNa@~qOqXze>=B_sK4L;_QTE2n>X+KeQ##o%<fTHV_8{axiw!T zK0jw=;*zRyqR+^qs+Xd%X7#SD`{Kgur14U=`{LSh;x7pi*P2TAO6=}2WX|C9G;gqm zn*d-03kVi4^Ip|$vkv55RhE?hwlMGTz9s<~>}Lec$d6l%-nABe*a~3$4yF3z*06W2 z=RR(Yc-MM}a?^jO8NbJ{5vj@EX%4sGz0iNpr}z3^2l@Njs}`2-RbF8URV|K^sz;&G zwd2Dq*$yM0h6YcTxx!=_@225nS+zB#XYGl|Vg0mb#(bz4LWX2>Gr$s{Jzp1*&om=P zKb>PfikEeD(94Q7g(D|Unv==PCMfl?d#PkX*D<`z9L)RkGM0><rI>6poY(q3ORx1R zGin0gdj^isoDIB8LcU5{JS;A$-`tGVg9Ed9<;$n^%3aF8OYJ%)lfo29`0)`DcJA6? zdRaSIAIZza<o?k4!(R2#^r;%g_r6=zxFoN~X4$AVo-$wo(723BB#jfWBz__=M;J3w zJAdgIS=F<Zou!ARyw<*2`|4!Y%nL}PhX^AA(nja1t|FWMEeO{3vzb+3+e;R8L>I56 zXJq_5{pXTtj@NEluKl(JE~A`xL;u;#Mupoqo<Z4%npN9YJ7~Yc26#Jxtm&Vekdb8_ z@%)SVk5#D)mv8B-a-V29<0r-F(|r{&CuS>T_KVwD$9Hp?HKM=O?h@afmSz1sqUUxl z>@j4=!qv8qoJVI}NNP7kG^*F_=eH-0nvx^`v-8W}Bma2)$K;mg;f_{zusE*%(z?o> zdj{nEV6#4S^5&sO7A79o#@Bf5$Ui>p<gv7bZ;x6nzrLfx%2QR>k8PG$mN{KXthsk- zdBC#n4@&Q6T@?-ea@F{6W#dk6>nGpYJ+<?cnA8EwYDBi#yZh?;$31Z0m*Uas+JlCM z&r+J%#(0PI9_zS%N2a<uE&Xxo5zp)5@QV-pg3evcxHIue$F$I;PKURa`K-LCy?D_s z?dr+iW}R+~+F0!Dd1=hqHEY()%{{(-qtD7uY`!p6{V^&mGc(h7WyR9mZV!jNu9$o+ z)W&Dlz!@cH7nGI{`O$g&f^U3Q{Jr4*;wgK^I#~Sa|A#hh^@YZ__de6?30<;#a@dkt zC1b~Rzf|^Ar7(6>Z<#r%{rXwMe$VUdX`Z}%akf?$^~1XLLu{{9d+o1yl7GKxzV7y} z`W_wpY_E2A`TF;CmjZFpRAp}_wz5y<A2UnmLyvpc?Cs{PI@A2@yiaQTt?iW~>;L-N zZDCyFY4v26^Cok_dGm^@lRL7^!X^$(T6z3T?#_Vkg4d0Fn5FHve9tnM1oKCiHN6)+ zx6PTj=9kTfJ8JKKH^^?&rm4@w>tjllwx1tZl)rq^0*4zLS2{KvIP-7Pfh&hzpFXza zz=jmZ`||S9=JRZxkG$dYQXae`v(C%8VeJW287ghE>i2fcDb-)+9m3-0+C9%)^4X+d zL|QVw!-;*JY7g`+x_ap5xXJ^ITn5B<v;5ZlK$nM;!qTVzm|0<|-8;MT<=gV=ZPk4% zo37n$8j$nVxu%L0(qBgyZ{7Uhl*P)N!cSW^cR6_D;{Cjq=eoN2D@z0We*W9Wqi=pY zxa;ck$D2DW54@9K(&zQ5`d=c~6})Xu`Saq#Z$vHeL6VeV`F0zB=8}|W_uWp{q_#Uy zACPJKSCGk#UFGrF1-HB_W>1)RM!Q~A-KqSSVJRVVhj#H<dvU`tt>4<P8^witOLm<; zvAplOTl1n%J8Wx^2bA``9Xcw)V|kJ6k26K4&l5XT2KAOScCu!7u}=@YZBlQH9lq<Y z&XYq)-QnNz&NXG250QLwd-jnlTW;+?=u>yI>hHlxjuS@}z6yL1*4!_AP(qLSkACZV z+ePB<eC|K<;oC_gENUkAn18J5r_$mLxo1xPT(@aj`L^7?B6&*(P0&BJW7igSS^XnZ zb>nFFs@q46YmJW&3(?-J0Wih&o4*QR1(si|0jR^waSF?3ER)s(d@2Swgymx_7kmd$ zF9F!K4&Zkwz~J=&b1)@6!BSxaP_+TzFqR=30mc|(KP(?(d3X~*lL<ij_W;un@D7%i zW}t<t&DdxL;IIWC#T;M>mPfH9TLHW=rMYYa$i$337t8%vHe=b-3W2vHFqTiSRI~$- z?gR+526&F8iw(e;T>x*eysrbW>45d!SjTeT9)Q0)V&A=ZZ>I&&>_bp{fbshQzUu@q z?f}3l2Y~5y06QF!=|N=L1>jLVrf`f<%OL<;OpYgi0Jw|g(!&7XV=n*C5rE~G3MD@R zIAWxF9RtY0NCh7U=#7z5p8yzwkxD)Zkc|<Va|&R!7DLnLG{9&K&9E~7<ro^-S%5AW zk#Shg!tx(1#Tb!K&jBpN()c_;SB%U;EZ1R~`xC$vj7-r5JS<>D3N9jfj7aq*9H#ad z&C38cF)}t+0o-i?Jgx!6VkB-|2hcvnP)zz6#|<M;a|=L+p0D}^U^jZc`!>M2&N$w8 z0Ip&LuH6MdTky}X7((>i=r{BhJ@&khLxQ1E{|*q1o)`WBFcv*u`zOFR==qfgxO1TA zrhj7}bU5K5>Y~Gw9zlPoK#yzw0r(m{UDJReK@X!I1B9bT&z|7;qDNPo04||N`=0{r zL61IvhMuBF>HlJAaf}B)2N-~!4SWI6A3ghA7c3^Ln6)w@;%-Pu_g$vM#Ms2egg}f1 zffg&m{c@Ekxau%c!PRsjmbyc><T%mpL7#B;gDtSQ`|Ty~UovdzNN2$Na=s>mH+Ygl zmth~_jqo-kXk#CF|I*vQkbKm#kI1yt2!;b2`Lh9U#Poj}!EpUIBh&_l2;2B=nYYpY zf7-whwy_}<xN=|Ek<#}2h5qfJ6NY0y!HcuDCu%9Z#mb1bl}&9bx)=5&i@eiwXwzv^ z+sX?EGRN)!;XSFtBb7TISL#UX#jS88J<Sfh6OcOYk|POZ>IiqYJ!8#v?Mymx`JG7+ z7uK05xo<m@K~h_50uuWV#@CrhxlPlEzwT8RvO+=_9oL=AA||1Z1Xy<hGrT_3*FA70 z^V&;0rW3fCp>NdTWGU!o;+jcd!*Bv$j`*n0m27g^*y7E20!L>Pu=|?8xb^RpCh9T^ zi8h{*sJZ<qjO)@}<a3iX8wt#>BXIHLJ3TrfoptFtQYn{K{6pXwFl(<7hJnwxn^%c5 z&%?!B=kg~Ba+k|7a{5me7UxVDNbbVGJZ}bKA{aOp!QHw_ocL)zQD<kv%odX@Zsl%b zr#oQJOlfa~?(-jF!Nqzq@s6WuwVtd28Dj}bY-taAl}fUPTj$A4^RgFIwo;X#HY#X^ z%7WX<xItdbcs7by=q`CNOPJ6)aE9)vunfkMv1AA-#P4{##*$^Q3BIS-W;}uOYsm%m zu8}wRT?Yzq;fmLgZdzBY&I8OuRK*qN^*q?tT0_raduxrw8ov&BW3ISt=Rs|2O^mf2 ztu+bOcDB}}@CD%3A@q}Bo6b<v;xpMi*lnny;dy|&iJ)qNHQZB#nkm+BV-ad*Si?Lf z)XcGln+;51jKK{{-i5|Uo~RqTbO2feO*dQ+2k1du-=<~Z8+hB=h#8k$!5U#C*inqC zdNm1ZVOFPW-wmYjEu4nMcrB$DhXLk+d!Pmn3{iZq9tgZ0_}rzhG4Lfk!WwV82d@7) zyj+X7BKQh!U@v`x7)}Ts+Jg2#&=v4Cj`K38rdN#s+EW0PQP7?UI+hq?uH!*_qPJs+ z5!QIyJq@6ECxSwPa~rh!1~KH~#Nazfpn%{WL_O_^pu<TovKWSv_dRtNKrJb#JA$6U zM@2m-pK}J0hk~c>t)T7*y06tycZ}{Cc%wy7_f}Azj5~s^rtIDE8TT~Z73-iK%8fAK zr#=X|hd{)d67fJH#e@}zcp#BjVj~doXeHu7y~hn1qoS372Qn$9-g{6Y{5bPOJgE14 zR6LN#cp}Dd@kBf*k<t$$;wcd6NQrnNkuqW?41*^UDJQ1FFnG2S@dS|;J|X6<4KySO z=!rzW0e%>GBA%@g@qCYn=YNfemq5gU62Yfd40AsrB3?-3DfAH{;)O&wyFg}8mYnJ; zsV@Jh&O5C{-5AnW&{d-DB0(;~WpPj7rqmB3)i-d~_vS~DKiTlxkdj*&$8>P=7N{vG zoHxQX0VaQH)*In+Njhg6#1v#XQw1NYFhEf7q1*=we0-2kBkkyeqxp`H5Atae<Zb!* z&=~6ZIDii~B#7za>?`o;PT_nJZZ;Vy!1*HFc9KIluVBWOxdL2#Fyl$)a-Re<9%Ef; z2S3`uN*H86+F_nBmVU@@1f5iV$Zt0B6?pq0zbrv6fthrv@nh_V{N@O98O$XM(M}!M zgCF-#5aXEbFEH&vf&CFUo3H|~KLSr9E&_l*0<WV1@JC=-Yc}&o;GKe8g4tNV#yf*Q z0_y<%To}SA9Nek>0BRriN2(uy_O}wkaO1uu){(Oa9tY^O3~03&fYUXP^h7zI1p}x> zBrNonp>>hqP5}2s2;(?7P;keS!UZDSV@Sa6{LBeNxKD|b020_b?*h@CeV|{p64WxR zl|Tev)ap(kCkbV`YWaPX&%{a!5JUkI1%Mz5z`xDn10U215QG2?5Z5X<00bdGBN)63 zq7%umxdh>Yd<^l}htCW_h6Sm8Z(HCuaGs1eB@>Kf4#2Ni=e-R^GQCMV0W=uNd?U!) z&gx+FR=*VmBN_eR>3j2Akzthu(|pNqOWOCdb%;Q~hY|=u0(<d2m!3cf5*SRH1Og#Q zU@s*Qg3;JZ--z*13PA$%1-S(8_#DX-2*GF!Bc`pkWH5xFK`jkO2!>;Rn@hh*h6-eS zDVb0tvld_D>CJ^=-=Rb-kO@UHiz!Sfk~u}+;PPZbk&HoZSmXSmJQT@%hkEG0VVhVd zY?5IDs2>FlL(r$tAb^G;=u^OBA)OCl2r8xvF$_ToF(kS$1bs@$gy9hAlQSQIFa#A5 z!w`hw5Ilv&T9AIQJ%kGc{3(HOB%mUX1p?tnAc`~!1j1Xr4o3o|1RwAyvG7)}!zls7 z5QHOvJzyAua3l~#20cMz{EQ5zGtxlD5RC|dOaLVlL5ILqAQORPwh%XgOhhZ02s#9q z2OA<7TMNSpAwnN=&OMUpqz$CzBB?q4?JOUjNHiBsdI;tsTg^pMbB0tB+3H&)_06!@ zBB^=9Vv9uIP60k$P}d?2i;b=|bj=p7LNvUx!sk|I5-fm8cr5@|?nWfz&6!0psmvPS zhDI^YqI%rcxEXlIAEdcWQB1dV!x=pZL(?Ag=XPwQ2k_)JvU+@n!k^_++Q<xgz1qmo z9_OrLvN{?X)3MP)FkDai6Ygsj6M{<DRE$fHW@>Zbdn)>8hCyv)yeZBtnknuSL?a!A zkv@a(%k`0t!bq<IDYqk<@o;-LKcg^&t8pJND9NA~c`k%73XHh7(KvF!)Simkvl3KQ z)Se~Q_%)}(k)sDzylb0>RXB2ZjKh&u;mC0`P3mj>(UG5({Qj>JGLvCh8V=0S=pAN8 zErd`4(MTYdL<j_;kw7kq6bM8kfq1$uqme)^;osHs#G;XaK`y~N!?K7*zw?Pqn1<0v zU@Vbhjb9bfICajoUKzwqpP6FxY#@}9iJ{T(5Xi(JnKR(YMa43jPGM9bmMVA&3b9l{ z$<@a)9mq}YS}fBmE1c@7sh+o>r>1&70(&)jr9W1wX;=-<9_rSxs^7~tYC4)m*qaZl zT7RsH6L?2ZxHyDMCocuKID{KbUU8?@Ofq@Rb&O-WX(Op#Jk@(E=*3gLW`R~b(s~B` zIL0Hbe*s@Q(O}0Tt=EEFg6Bv+4d}I`Sn{;=H5oE^gEc<b@fhsq@B&`a>lK)D$~Z=x zmmrXiisHK@&=~zLm`gx1xdh*MQP70e7$wjc8OS8G#wg*v7$v+HqXZfwZK58oQV*Ai zaBJbA0GEhxr{IwQmxyrs-6av>PJto+CL)|c&TjyQiI#|Pd%#5SJ(1=p{--nE_e4XE zN;D)XdP3rp41XX{QQwo0%s_&#>uB(jkW3N5mv+?mBqXy!kc;q$<V(26@r(m&3rXCH zc*ZW2&rN8mQg14mn(8iaNk&r=@>npH+-fQr{mR8Tk)ObH64yazNaidP@X*BPG@e#8 zrIkW$;oCwApF(Xl3AR#NZKa^C1cL7nDcux|(K11wUyL@baw$GB@B^KK@sW^cDCgso zg7H~~Pbc&}1?QZ|SUObd(R(3!F8LSr_+GsbJ(oP^dM7eAq5*sq@)8+mZdE*E9h!<d zJnNV!UNiN*eyOzIOKjy+MJlq^r;1b|0yh&G|Ka?ZHBE1%Qg0-U8fiuuZ!(P<c`X=8 zLnA|I9!jG|{95IPJd}pBQSUl`C`sd9Co*<icoNe{26CRsOoOc06n`6F<^t!G!i3rJ zyU7SN(spy;-|CFuB9a&<qpN6*KfM4qB83^mKqP(F<-+eZ=oLl=skhw6Cj}OdI{2QK z{_$<*_`b)5n|hVRa%sI7b6YbtX0Q|nY<e;9$6yA!6)^Co<o(xKUy5`a`!audnuk{~ z&@h{U;VbZ$((3n>R)}=BW-_(imu_Zq%tkCUqCdS?ZtCs6ST}AnBef#CbQK2~vAF{C zP*@9oc%J|Lj;lGt*y3S529M7E5C^{C4L<mQ9fLcDAJ#qa+Z&}Syo<)VA3j`o;F&oP zV)6Nuzx+|x4|@lpWHL;|HZ@8DQ0|R?v8b)Y-Z3cE+fvax70P^sJEb*k4x;e>*fkCt zyt%})On0K<iqA3;3`0w2-KDe4gyduuz)(1gZ`X3@Hv>;ZQ5bLLzsM{9hrAx;_3N*T zb(}pre>{1_xh!J6wLvjK{&BwE7=Rd+Uz~>@dam+_j`IsZmjh#!N~J&g8Wa>ed15d+ z8Q|~jAM2r%sbbWSq*8mRL@FPUDPz<@ah1OQ0dZ>Y$!0lG@%csBS@~p6x~w>BBq@r^ z$}eR!rn6&8G+AX?qU?N|F1<@MIhur#`B_?!B<8@S3{gqBS+sgWaZ#y6L(Hv|8JdFP ze8?)(#A-_NJ|Ron#gvzp6&2($pU#Pm%`1>+420h5;jz&^uHK+jy32js<SJRIJRNow z=9(E#ooSKQR~3_@wzsP3m7d-w<txj9%Pb*1L9Nb6OpOKgfZ-Xc=oGa)U7Mlmn=w_L zSO{gBTuq7G<s`hRyS44nu5}mS{>~#mHlEynp|bYa`n^ZZjAKCVvioJ-t*Nquzt-2^ zIe%vFnL~_<0o~4h*REdKb=I4hn;G}U{F^L~gYv?WWqCz~a?4yzSuBjss3;zxam~pt zt0dAWcT;&zrR0>z&CFOU$KPyJae1>`;>9_qOlFx3C@mVBYC27tH&qgDDp$s^F(h%6 zT%pX#_EFSNKhiB@^a@SkVTno(b@DurRx0HgMe^Wasl<dx*{<Qz@p<lYWy^HWL()S4 z9cLKL44%_bZ9MIG0yrq-3VHV=+d}UY+e2p4{k%_gQ%SUH<%GO4d6ZYOL|tf^BTpQ4 zOq8mbaIH+9cZ_u+YCO(3)fbgyjm+0*ou)Xohz8$wS{-uRsb<kJr_W3xog=$CX&}<M ztJux?zM`P?Md`Tw+lpTl(<%-s4k}v6*g0{dOsW-P#a*aYtP;Ihq^PJ?R2Ee$e&wna z)ryt{T7?GN4>@SCy{mY(;`yKX^1N>I<;jEHr$pVpD~r^W-39Tw`&;h8(T(ZlkS&iX zD#$L1hN1~R!(&Eg6&}ykxYkTJGtQFMu;h@~rS{p${rk4mpZlTy`-4y7YqO-JTl4V5 z!o0G)tf2h7Pk&|mW{%9uE8Lx<nebP}A)=j;l6ad~)fAQ#jql7BmKWHC5HsWI(F;e1 z%L7DmmwUN8F7CV$P=BHJ;D(d?vrMaG72s@U>_5;;)KyeGNJXM@Khb0sm5j}XqN1^$ z>7z9oC@b}hDJm~4W0_R{_THYVoSa0{GR;<_E^Jw;Yu*4i&%&q$-mJ@rbouj1TJb%& zAoe`6$bqSnjuUlyLN0f48PWNfX`bBUt^Dp_B~f)cG;oG<vGj`L)TPFX0!?X7_9{iz zL88cvO|B-7%@m9K#!MwHk*uOmHM#C<rASyr2FQFfWigo+CnU#7@fQowBbSr1Jr@s8 zbvbl?+ar;g@lmO_XL?zM(Q56NqY4&5Y)Mfu#1@S&Ovx)PBUVbe%hd;a&mF9Pa%Jbq zV{#Rl*4_Hb&R|jW9fzElqQ?C4g2Dx9QIn6GwTN?D#4X~NVjs`9;`=7PnGGiVC4V6H zZ4kSNw*HiEapKP_htI->oi{G*+x_q9pl3%8CR!Y`T!0X@(az6_*2nV|`Hc9^BS|hy zt!BY$xoeec&zW-XKC+no7cX7A{B^9EanHzbxo?TRoNZc7YEHepbmRQ_BWA`wq15j; zk_*4OJPz|af4(W~an$y(J7&h2qw}`P=ljY-8P`ElH_sSNe!g|7tEI%f-q^E$7UY*} z<Y5tVMN5|J0*N+Y*Lm^OWh1&4iHpQ9^Ta-GBgIi(V)1V?BE=0i)LV?#8b^wUAFl8c zdx=+;)oj1ub;H6-JiOQHf<JhXm$+zr*AvSvURX4#PGyU|-7IWGsapGT`zihwHbyp) z;`@UvY$P^*2P4HY8(w|fSYsPsFL8su<|&Q~=pklpimh9e)_vekfD>u*=>rPVs9dHg z%*hJ!#gvo%=yvbX=Q>>0td|y7dC!!7T4`}-K*`3Ql~KJ4vI=t`y1cARXS<C3D^U05 z96MTU%I}K!k7>oZ{rKJSG8=Df)zTuyg9HA`i@Rb=3kwX_=Qz`aX=$l?Tw|?!dz&4^ z5;-^U9;;yNr|Kr(WA_>T|9!YAk62qPe$xxUt#TA@j(i!+t$D=8S%rTje$9&`J`$(@ z!-iNzek5MWi=#dgKlq1@vQ>R3Mt|HG&Z>d6=F%Hj7pv$G6}UMKY#cL!;d&ou>^a9q z){+}`oU!CIk68z96@D!&mNN;oS-!A%4Cm3v?$_e+3k|>fH1~*q>ToGCcKQz+9eo0( z1oAC-;sy5bi~dCqFQitt3;4vp|Dn|e`HP$TS+|%m3A3Vqx^uqA;e7_V+0iZIg8!^l zO@FxkN8K9so<Tlq?&g~Xy#mrUh}JdRm^XN@H8hOfUT4wm$9~DP7yn!T<VfT&gM9g; zxCWPIv(#1T315Ax_)DQ1`h<PPGB(cK>3>-T_sPF(24mKu!%Alc$CP{cg8dtP;;z4B zJsEK0j9y`h+QEE@^*mYvxBL}b!MZ~i&Ze2|#uiQR=E9rV!2}zc^@=B&SvMBafqO;; zz;%1g;`6Ak-)q)ML|k@Oh?>~6Ky_eDfJz-5toDxej`i_w`=>B7j_n;Cu80eci&n=f z)oQi=59RSO;fg@Nz<>Z{oVQ9D5UcX$|AKvVdqkocL>DCyU1wy={pj>&@!#RP=%S27 H^^*Ss%CgSJ diff --git a/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue b/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue index 5027529..b952d16 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue @@ -205,7 +205,6 @@ {{ dict.label.vehicle_type[scope.row.vehicle_type] }} </template> </el-table-column> - <el-table-column prop="create_name" label="创建人" /> <el-table-column prop="plan_qty" label="计划数量" /> <el-table-column prop="is_urgent" label="是否加急"> <template slot-scope="scope"> @@ -222,6 +221,7 @@ <el-table-column prop="real_qty" label="实际数量" /> <el-table-column prop="qualified_qty" label="合格数量" /> <el-table-column prop="unqualified_qty" label="不合格数量" width="100" /> + <el-table-column prop="create_name" label="创建人" /> <el-table-column prop="create_time" label="创建时间" width="150" /> <el-table-column prop="update_optname" label="修改人" /> <el-table-column prop="update_time" label="修改时间" width="150" /> From 3b54f3f201e41e8c407ad29f9cc7eec9d049bdfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B1=9F=E7=8E=AE?= <zhangjiangwei2000@outlook.com> Date: Sat, 15 Apr 2023 16:12:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rest/MobileAuthorizationController.java | 2 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 62 +++--- .../org/nl/wms/pda/rest/PdaController.java | 100 +++++++-- .../org/nl/wms/pda/service/PdaService.java | 40 +++- .../wms/pda/service/impl/PdaServiceImpl.java | 198 +++++++++++++++--- .../java/org/nl/wms/pda/util/PdaUtils.java | 6 +- .../src/main/java/org/nl/wms/pda/wql/PDA.wql | 47 ++++- .../service/impl/WorkorderServiceImpl.java | 5 +- .../call/material/FJCallMaterialTask.java | 18 +- .../call/material/wql/CALL_MATERIAL_TASK.wql | 23 ++ .../org/nl/wms/sch/task/util/TaskUtils.java | 6 +- .../src/test/java/org/nl/test/PointTest.java | 24 +-- 12 files changed, 397 insertions(+), 134 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/MobileAuthorizationController.java b/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/MobileAuthorizationController.java index bddbc15..ca2e956 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/MobileAuthorizationController.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/MobileAuthorizationController.java @@ -78,7 +78,7 @@ public class MobileAuthorizationController { JSONObject jsonObject = new JSONObject(); jsonObject.put("user", userDto); Map<String, Object> authInfo = new HashMap<String, Object>(2) {{ - put("token", "Bearer "+StpUtil.getTokenValue()); + put("token", "Bearer " + StpUtil.getTokenValue()); put("user", jsonObject); }}; 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 0f82680..14b96a9 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 @@ -21,7 +21,9 @@ import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.sch.manage.*; import org.nl.wms.sch.task.call.empty.HLCallEmptyTask; import org.nl.wms.sch.task.call.empty.YZCallEmptyTask; +import org.nl.wms.sch.task.call.material.FJCallMaterialTask; import org.nl.wms.sch.task.call.material.SZCallMaterialTask; +import org.nl.wms.sch.task.send.empty.FJSendEmptyTask; 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; @@ -53,6 +55,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private final SZSendMaterialTask szSendMaterialTask; + private final FJCallMaterialTask fjCallMaterialTask; + + private final FJSendEmptyTask fjSendEmptyTask; + /** * task_id:任务标识 * task_code:任务编码 @@ -237,20 +243,28 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { szSendMaterialTask.createTask(method_param); break; default: - throw new BadRequestException("[" + region.label() + "] 不存在送料任务!"); + throw new BadRequestException("[" + region.label() + "] 不能发起送料任务!"); } break; case "2": // 叫料 switch (region) { case FJ: + fjCallMaterialTask.createTask(method_param); break; default: - throw new BadRequestException("[" + region.label() + "] 不存在叫料任务!"); + throw new BadRequestException("[" + region.label() + "] 不能发起叫料任务!"); } break; case "3": // 送空 + switch (region) { + case FJ: + fjSendEmptyTask.createTask(method_param); + break; + default: + throw new BadRequestException("[" + region.label() + "] 不能发起送空任务!"); + } break; case "4": // 叫空 @@ -264,7 +278,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { case GTK: break; default: - throw new BadRequestException("[" + region.label() + "] 不存在叫空任务!"); + throw new BadRequestException("[" + region.label() + "] 不能发起叫空任务!"); } break; default: @@ -326,16 +340,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { TaskUtils.isLocked(point); JSONObject work_order = TaskUtils.hasWorkOrder(point); - - String vehicle_type = null; - if (work_order.getString("device_code").startsWith("FJ")) { - vehicle_type = work_order.getString("vehicle_type"); - } else if (work_order.getString("device_code").startsWith("YZ")) { - vehicle_type = VehicleType.STEEL_TRAY.value(); - } else if (work_order.getString("device_code").startsWith("HL")) { - vehicle_type = VehicleType.CUP.value(); - } - + String device_code = work_order.getString("device_code"); + String vehicle_type = work_order.getString("vehicle_type"); WQLObject vd_table = WQLObject.getWQLObject("st_ivt_vehicle_detail"); JSONObject vd_update = new JSONObject(); vd_update.put("is_delete", TrueOrFalse.TRUE.value()); @@ -343,7 +349,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject vd = new JSONObject(); vd.put("vd_id", IdUtil.getSnowflake(1, 1).nextId()); - vd.put("vehicle_type", VehicleType.STEEL_TRAY.value()); + vd.put("vehicle_type", vehicle_type); vd.put("vehicle_code", vehicle_code); vd.put("material_id", work_order.getString("material_id")); vd.put("qty", qty); @@ -404,7 +410,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { vd.put("create_time", DateUtil.now()); vd.put("is_delete", TrueOrFalse.FALSE.value()); vd.put("is_fire", TrueOrFalse.FALSE.value()); + if (device_code.startsWith("FJ")) { + vd.put("is_fire", TrueOrFalse.TRUE.value()); + } vd.put("is_in_kiln", TrueOrFalse.trueOrFalse(is_full) ? TrueOrFalse.TRUE.value() : TrueOrFalse.FALSE.value()); + if (device_code.startsWith("FJ")) { + vd.put("is_in_kiln", TrueOrFalse.FALSE.value()); + } + vd_table.insert(vd); JSONObject vehicle_update = new JSONObject(); @@ -659,21 +672,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return result; } - private JSONObject getProduceInfoByCode(String code) { // 查找工单 - //根据 设备点位去找生产任务信息 - //1 根据点位去找设备,去找对应的设备信息 - JSONObject pointObj = WQLObject.getWQLObject("sch_base_point").query("point_code ='" + code + "'").uniqueResult(0); - String device_code = pointObj.getString("device_code"); - //2 根据设备去找对应的生产任务 1-未生产、2-已下发、3-生产中、4-暂停、5-完成 - JSONObject productTaskObj = WQLObject.getWQLObject("PDM_BD_WorkOrder") - .query("device_code ='" + device_code + "' and order_status in ('3','2','4')", "workorder_procedure") - .uniqueResult(0); - if (ObjectUtil.isEmpty(productTaskObj)) { - throw new BadRequestException("未找到点位为'" + code + "'的生产任务!"); - } - return productTaskObj; - } - @Override public JSONObject feedbackVehicleType(JSONObject param) { String point_code = param.getString("device_code"); @@ -704,9 +702,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { throw new BadRequestException("点位不能为空!"); } String vehicle_code = whereJson.getString("vehicle_code"); - if (StrUtil.isBlank(vehicle_code) || "0".equals(vehicle_code)) { - throw new BadRequestException("载具编码不能为空!"); - } + vehicle_code = TaskUtils.formatVehicleCode(vehicle_code); JSONObject point = WQLObject .getWQLObject("sch_base_point") .query("is_used = '1' AND point_code = '" + point_code + "'") @@ -734,7 +730,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } if (StrUtil.isBlank(vehicle_type)) { - throw new BadRequestException("未知载具类型! b "); + throw new BadRequestException("未知载具类型!"); } JSONObject data = null; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java index 1570563..349f3f4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java @@ -11,6 +11,7 @@ import org.nl.modules.logging.annotation.Log; import org.nl.wms.pda.util.PdaUtils; import org.nl.wms.pda.anno.PdaAnnotation; import org.nl.wms.pda.service.PdaService; +import org.nl.wms.sch.task.util.TaskUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -31,41 +32,98 @@ public class PdaController { private final PdaService pdaService; - @PostMapping("/queryRegion") + @PostMapping("/region") @Log("查询区域") @ApiOperation("查询区域") @PdaAnnotation - public JSONObject queryRegion() { - return PdaUtils.buildSuccessResultJSON(pdaService.queryRegion()); + public JSONObject region(@RequestBody JSONObject param) { + String func = param.getString("func"); + if (StrUtil.isBlank(func)) { + throw new BadRequestException("未知功能!"); + } + return PdaUtils.buildSuccessResultJSON(pdaService.region(func)); + } + + @PostMapping("/point") + @Log("查询点位") + @ApiOperation("查询点位") + @PdaAnnotation + public JSONObject point(@RequestBody JSONObject param) { + String func = param.getString("func"); + if (StrUtil.isBlank(func)) { + throw new BadRequestException("未知功能!"); + } + String region_code = param.getString("region_code"); + if (StrUtil.isBlank(region_code)) { + throw new BadRequestException("区域不能为空!"); + } + + return PdaUtils.buildSuccessResultJSON(pdaService.point(func, region_code)); } - @PostMapping("/queryPoint") - @Log("查询对接位") - @ApiOperation("查询对接位") + @PostMapping("/device") + @Log("查询设备") + @ApiOperation("查询设备") @PdaAnnotation - public JSONObject queryPoint(@RequestBody JSONObject request_body) { - String type = request_body.getString("type"); - if (StrUtil.isBlank(type)) { - throw new BadRequestException("未知界面!"); + public JSONObject device(@RequestBody JSONObject param) { + String func = param.getString("func"); + if (StrUtil.isBlank(func)) { + throw new BadRequestException("未知功能!"); } - return PdaUtils.buildSuccessResultJSON(pdaService.queryPoint(type)); + + return PdaUtils.buildSuccessResultJSON(pdaService.device(func)); } - @PostMapping("/createTask") - @Log("创建任务") - @ApiOperation("创建任务") + @PostMapping("/report") + @Log("查询设备") + @ApiOperation("查询设备") @PdaAnnotation - public JSONObject createTask(@RequestBody JSONObject request_body) { - String type = request_body.getString("type"); - if (StrUtil.isBlank(type)) { - throw new BadRequestException("未知任务类型!"); + public JSONObject report(@RequestBody JSONObject param) { + String func = param.getString("func"); + if (StrUtil.isBlank(func)) { + throw new BadRequestException("未知功能!"); + } + String device_code = param.getString("device_code"); + if (StrUtil.isBlank(device_code)) { + throw new BadRequestException("区域不能为空!"); + } + String unqualified_qty = param.getString("unqualified_qty"); + if (StrUtil.isBlank(unqualified_qty)) { + throw new BadRequestException("不合格数量不能为空!"); } - String point_code = request_body.getString("point_code"); + + pdaService.report(device_code, unqualified_qty); + return PdaUtils.buildSuccessResultJSON(null); + } + + @PostMapping("/sendMaterial") + @Log("送料") + @ApiOperation("送料") + @PdaAnnotation + public JSONObject sendMaterial(@RequestBody JSONObject param) { + String point_code = param.getString("point_code"); if (StrUtil.isBlank(point_code)) { - throw new BadRequestException("点位不能为空!"); + throw new BadRequestException("点位编码不能为空!"); + } + String vehicle_code = param.getString("vehicle_code"); + vehicle_code = TaskUtils.formatVehicleCode(vehicle_code); + if ("0000".equals(vehicle_code)) { + throw new BadRequestException("载具编码不能为空!"); + } + String qty = param.getString("qty"); + if (StrUtil.isBlank(qty)) { + throw new BadRequestException("数量不能为空!"); + } + String weight = param.getString("weight"); + if (StrUtil.isBlank(weight)) { + throw new BadRequestException("重量不能为空!"); + } + String is_full = param.getString("is_full"); + if (StrUtil.isBlank(is_full)) { + throw new BadRequestException("是否满拖不能为空!"); } - pdaService.createTask(request_body); + pdaService.sendMaterial(point_code, vehicle_code, qty, weight, is_full, param.toJSONString()); return PdaUtils.buildSuccessResultJSON(null); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java index 133fe42..dd25397 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java @@ -1,7 +1,7 @@ package org.nl.wms.pda.service; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; /** * 辽宁晟华手持服务层接口 @@ -11,10 +11,42 @@ import com.alibaba.fastjson.JSONObject; */ public interface PdaService { + /** + * 查询区域 + * @param func 手持功能 + * @return 区域编码 区域名称 + */ + JSONArray region(String func); - JSONArray queryRegion(); + /** + * 查询点位 + * @param func 手持功能 + * @param region_code 区域编码 + * @return 点位编码 点位名称 + */ + JSONArray point(String func, String region_code); - JSONArray queryPoint(String type); + /** + * 查询设备 + * @param func 手持功能 + * @return 设备编码 设备名称 + */ + JSONArray device(String func); - void createTask(JSONObject request_param); + /** + * 不合格品上报 + * @param device_code 设备编码 + * @param unqualified_qty 不合格数量 + */ + void report(String device_code, String unqualified_qty); + + /** + * 送料 + * @param point_code 点位编码 + * @param vehicle_code 载具编码 + * @param qty 数量 + * @param weight 重量 + * @param is_full 是否满拖 + */ + void sendMaterial(String point_code, String vehicle_code, String qty, String weight, String is_full, String request_param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java index 6d79e68..95f5927 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java @@ -1,6 +1,9 @@ package org.nl.wms.pda.service.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; 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; @@ -9,11 +12,16 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.SecurityUtils; 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.pda.service.PdaService; +import org.nl.wms.sch.manage.ACSSystem; import org.nl.wms.sch.manage.CreateMode; +import org.nl.wms.sch.manage.Region; import org.nl.wms.sch.task.send.material.HLSendMaterialTask; +import org.nl.wms.sch.task.send.material.YZSendMaterialTask; import org.nl.wms.sch.task.util.TaskUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * @author 张江玮 @@ -26,63 +34,185 @@ public class PdaServiceImpl implements PdaService { private final HLSendMaterialTask hlSendMaterialTask; - /** - * 查询所有区域 - * - * @return 所有区域信息 - */ + private final YZSendMaterialTask yzSendMaterialTask; + @Override - public JSONArray queryRegion() { - return WQLObject - .getWQLObject("sch_base_region") - .query() - .getResultJSONArray(0); + public JSONArray region(String func) { + switch (func) { + case "send_material": + // 送料 + case "call_material": + // 送料 + return WQL + .getWO("PDA") + .addParam("flag", "1") + .addParam("where", "('HL', 'YZ', 'FJ')") + .process() + .getResultJSONArray(0); + default: + throw new BadRequestException("未知功能!"); + } + } + + @Override + public JSONArray point(String func, String region_code) { + Region region = Region.get(region_code); + if (ObjectUtil.isEmpty(region)) { + throw new BadRequestException("未知区域!"); + } + + switch (func) { + case "send_material": + // 送料 + switch (region) { + case HL: + return WQL + .getWO("PDA") + .addParam("flag", "2") + .addParam("region_code", region_code) + .addParam("point_type", "('1', '2')") + .process() + .getResultJSONArray(0); + case YZ: + return WQL + .getWO("PDA") + .addParam("flag", "2") + .addParam("region_code", region_code) + .addParam("point_type", "('1')") + .process() + .getResultJSONArray(0); + case FJ: + return WQL + .getWO("PDA") + .addParam("flag", "2") + .addParam("region_code", region_code) + .addParam("point_type", "('2')") + .process() + .getResultJSONArray(0); + default: + throw new BadRequestException(region.label() + "没有送料点位!"); + } + case "call_material": + // 叫料 + switch (region) { + case YZ: + JSONArray result = WQL + .getWO("PDA") + .addParam("flag", "2") + .addParam("region_code", region_code) + .addParam("point_type", "('2')") + .process() + .getResultJSONArray(0); + result.addAll(WQL + .getWO("PDA") + .addParam("flag", "2") + .addParam("region_code", Region.KLHJ.value()) + .addParam("point_type", "('2')") + .process() + .getResultJSONArray(0)); + return result; + case FJ: + return WQL + .getWO("PDA") + .addParam("flag", "2") + .addParam("region_code", region_code) + .addParam("point_type", "('1')") + .process() + .getResultJSONArray(0); + default: + throw new BadRequestException(region.label() + "没有叫料点位!"); + } + default: + throw new BadRequestException("未知功能!"); + } } - /** - * 查询对接位 - * - * @param type 手持界面 HLSL-混料送料 - * @return 对接位信息 - */ @Override - public JSONArray queryPoint(String type) { + public JSONArray device(String func) { return WQL .getWO("PDA") - .addParam("flag", "1") - .addParam("type", type) + .addParam("flag", "3") .process() .getResultJSONArray(0); } - /** - * 创建任务 - * - * @param request_param 请求带的参数 - */ + @Transactional(rollbackFor = Exception.class) + @Override + public void report(String device_code, String unqualified_qty) { + WQLObject workorder_table = WQLObject.getWQLObject("pdm_bd_workorder"); + JSONObject work_order = workorder_table + .query("is_delete = '0' AND device_code = '" + device_code + "' AND order_status = '3'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(work_order)) { + throw new BadRequestException("设备 [" + device_code + "] 未开始生产!"); + } + + int current_qty = work_order.getIntValue("unqualified_qty"); + work_order.put("unqualified_qty", current_qty + Integer.parseInt(unqualified_qty)); + workorder_table.update(work_order); + } + + @Transactional(rollbackFor = Exception.class) @Override - public void createTask(JSONObject request_param) { - String type = request_param.getString("type"); + public void sendMaterial(String point_code, String vehicle_code, String qty, String weight, String is_full, String request_param) { JSONObject point = WQLObject .getWQLObject("sch_base_point") - .query("is_delete = '0' AND is_used = '1' AND point_code = '" + request_param.getString("point_code") + "'") + .query("is_used = '1' AND point_code = '" + point_code + "'") .uniqueResult(0); if (ObjectUtil.isEmpty(point)) { - throw new BadRequestException("点位已删除或未启用!"); + throw new BadRequestException("[" + point_code + "] 已删除或未启用!"); } + TaskUtils.isLocked(point); + JSONObject workorder = TaskUtils.hasWorkOrder(point); + String vehicle_type = workorder.getString("vehicle_type"); + String device_code = workorder.getString("device_code"); + WQLObject vd_table = WQLObject.getWQLObject("st_ivt_vehicle_detail"); + JSONObject vd_update = new JSONObject(); + vd_update.put("is_delete", TrueOrFalse.TRUE.value()); + vd_table.update(vd_update, "vehicle_type = '" + vehicle_type + "' AND vehicle_code = '" + vehicle_code + "'"); + + // 组盘 + JSONObject vd = new JSONObject(); + vd.put("vd_id", IdUtil.getSnowflake(1L, 1L).nextId()); + vd.put("vehicle_type", vehicle_type); + vd.put("vehicle_code", vehicle_code); + vd.put("material_id", workorder.getString("material_id")); + vd.put("qty", qty); + vd.put("weight", weight); + vd.put("is_full", is_full); + vd.put("workorder_id", workorder.getString("workorder_id")); + vd.put("point_code", point_code); + vd.put("create_id", SecurityUtils.getCurrentUserId()); + vd.put("create_name", SecurityUtils.getCurrentNickName()); + vd.put("create_time", DateUtil.now()); + vd.put("is_delete", "0"); + if (device_code.startsWith("FJ")) { + vd.put("is_fire", TrueOrFalse.TRUE.value()); + } + vd.put("is_in_kiln", TrueOrFalse.trueOrFalse(is_full) ? TrueOrFalse.TRUE.value() : TrueOrFalse.FALSE.value()); + if (device_code.startsWith("FJ")) { + vd.put("is_in_kiln", TrueOrFalse.FALSE.value()); + } + vd_table.insert(vd); + + Region region = Region.get(point.getString("region_code")); JSONObject method_param = new JSONObject(); + method_param.put("point", point); + method_param.put("workorder", workorder); + method_param.put("vd", vd); method_param.put("create_mode", CreateMode.SCCJ.value()); method_param.put("request_param", request_param); method_param.put("create_id", SecurityUtils.getCurrentUserId()); method_param.put("create_name", SecurityUtils.getCurrentNickName()); - switch (type) { - case "1": - // 混料机送料 - method_param.put("point", point); - method_param.put("vehicle_code", TaskUtils.formatVehicleCode(request_param.getString("vehicle_code"))); + switch (region) { + case HL: hlSendMaterialTask.createTask(method_param); break; - case "2": + case YZ: + yzSendMaterialTask.createTask(method_param); + break; + default: + throw new BadRequestException("[" + region.label() + "] 不能发起送料任务!"); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java index bbd7edf..e770d79 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java @@ -15,13 +15,13 @@ public final class PdaUtils { * 服务层调用方法 * 创建操作成功的 JSONObject 并携带需要返回的数据 * - * @param result 返回数据, 可为 NULL + * @param result 返回数据,可为 NULL * @return 携带了返回数据的 JSONObject */ public static JSONObject buildSuccessResultJSON(JSON result) { JSONObject resultJSON = new JSONObject(); resultJSON.put("code", "1"); - resultJSON.put("desc", "操作成功"); + resultJSON.put("desc", "操作成功!"); resultJSON.put("result", result); return resultJSON; } @@ -30,7 +30,7 @@ public final class PdaUtils { * 服务层调用方法 * 创建操作失败的 JSONObject * - * @param desc 错误提示, 可为 NULL + * @param desc 错误提示,可为 NULL * @return 自定义错误提示的 JSONObject */ public static JSONObject buildFailResultJSON(String desc) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql index 30562c4..0d42136 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql @@ -14,7 +14,9 @@ ## 表字段对应输入参数 ################################################# 输入.flag TYPEAS s_string - 输入.type TYPEAS s_string + 输入.where TYPEAS f_string + 输入.region_code TYPEAS s_string + 输入.point_type TYPEAS f_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -41,19 +43,44 @@ IF 输入.flag = "1" QUERY SELECT - point_id, + region_code, + region_name + FROM + sch_base_region + WHERE + region_code IN 输入.where + ORDER BY + create_time ASC + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT point_code, point_name FROM sch_base_point WHERE - is_delete = '0' - AND is_used = '1' - AND lock_type = '1' - OPTION 输入.type = "HL" - region_code = 'HL' - AND point_type IN ('1', '2') - ENDOPTION - ENDSELECT + is_used = '1' + AND region_code = 输入.region_code + AND point_type IN 输入.point_type + ORDER BY + point_code ASC + ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + device_code, + device_name + FROM + pdm_bi_device + ORDER BY + device_code ASC + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java index c690ede..589bded 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java @@ -114,14 +114,15 @@ public class WorkorderServiceImpl implements WorkordeService { String device_code = dto.getDevice_code(); String vehicle_type = dto.getVehicle_type(); if (!device_code.startsWith("FJ")) { - if (device_code.startsWith("YZJ")) { + if (device_code.startsWith("YZ")) { vehicle_type = VehicleType.STEEL_TRAY.value(); - } else if (device_code.startsWith("HLJ")) { + } else if (device_code.startsWith("HL")) { vehicle_type = VehicleType.CUP.value(); } } work_order.put("vehicle_type", vehicle_type); work_order.put("device_id", dto.getDevice_id()); + work_order.put("device_code", dto.getDevice_code()); work_order.put("order_status", WorkOrderEnum.ORDER_STATUS_UNPRODUCED.value()); work_order.put("is_urgent", dto.getIs_urgent()); work_order.put("is_pri", dto.getIs_pri()); 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 75644e7..17c15c5 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 @@ -7,6 +7,7 @@ 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.basedata.eum.VehicleType; import org.nl.wms.sch.manage.*; import org.nl.wms.sch.task.util.TaskUtils; @@ -39,18 +40,19 @@ public class FJCallMaterialTask extends AbstractAcsTask { @Override public String createTask(JSONObject form) { JSONObject point = form.getJSONObject("point"); + JSONObject workorder = TaskUtils.hasWorkOrder(point); JSONObject task = TaskUtils.buildTask( - "烧制区叫料", + "分拣区叫料", TaskType.CALL_MATERIAL.value(), TaskStatus.SURE_END.value(), null, point.getString("point_code"), - null, + workorder.getString("material_id"), VehicleType.STEEL_TRAY.value(), null, - "1", - SZCallMaterialTask.class.getName(), + TrueOrFalse.trueOrFalse(workorder.getString("is_urgent")) ? "99" : "1", + FJCallMaterialTask.class.getName(), form.getString("create_mode"), form.getString("request_param"), form.getString("create_id"), @@ -70,7 +72,7 @@ public class FJCallMaterialTask extends AbstractAcsTask { public void findStartPoint() { WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); JSONArray tasks = task_table - .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + SZCallMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + FJCallMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") .getResultJSONArray(0); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); @@ -79,14 +81,13 @@ public class FJCallMaterialTask extends AbstractAcsTask { JSONObject point = WQL .getWO("CALL_MATERIAL_TASK") - .addParam("flag", "1") + .addParam("flag", "3") .process() .uniqueResult(0); if (ObjectUtil.isNotEmpty(point)) { task.put("task_status", TaskStatus.START_AND_END.value()); task.put("point_code1", point.getString("point_code")); - task.put("material_id", point.getString("material_id")); task.put("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_code"))); task.put("remark", ""); task_table.update(task); @@ -184,6 +185,9 @@ public class FJCallMaterialTask extends AbstractAcsTask { 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) { 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 fe07fe8..ea27da3 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 @@ -77,3 +77,26 @@ ENDSELECT ENDQUERY ENDIF + + IF flag = "3" + QUERY + SELECT + point.* + FROM + sch_base_point point + JOIN st_ivt_vehicle_detail vd ON point.vehicle_type = vd.vehicle_type + AND point.vehicle_code = vd.vehicle_code + AND vd.is_delete = '0' + LEFT JOIN pdm_bd_workorder workorder ON vd.workorder_id = workorder.workorder_id + WHERE + point.is_used = '1' + AND point.lock_type = '1' + AND point.region_code = 'CPHJ' + AND point.point_status = '1' + AND point.vehicle_type = '2' + AND vd.is_fire = '1' + ORDER BY + workorder.is_urgent DESC, vd.create_time ASC + ENDSELECT + ENDQUERY + ENDIF 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 dcc131a..5d9dd27 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 @@ -85,7 +85,11 @@ public class TaskUtils { public static String formatVehicleCode(String vehicle_code) { if (StrUtil.isBlank(vehicle_code)) { - return "0000"; + vehicle_code = "0000"; + } else { + if (vehicle_code.length() > 4 || vehicle_code.matches("^\\d+$")) { + throw new BadRequestException("载具编码错误!"); + } } StringBuilder vehicle_code_builder = new StringBuilder(vehicle_code); diff --git a/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java b/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java index 0f70f58..7247f85 100644 --- a/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java +++ b/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java @@ -2,9 +2,11 @@ package org.nl.test; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; +import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @@ -19,23 +21,9 @@ public class PointTest { @Test public void test01() { - WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - - JSONObject point = new JSONObject(); - String now = DateUtil.now(); - for (int i = 0; i < 52; i++) { - point.put("point_id", IdUtil.getSnowflake().nextId()); - point.put("point_code", "CPHW" + String.format("%02d", i + 1)); - point.put("point_name", "成品货位" + (i + 1)); - point.put("region_id", 1643438902574452736L); - point.put("region_code", "CPHJ"); - point.put("region_name", "成品货架"); - point.put("point_type", "1"); - point.put("device_code", null); - point.put("create_id", 1L); - point.put("create_name", "管理员"); - point.put("create_time", now); - point_table.insert(point); - } + String pattern = "^\\d+$"; + System.out.println("ddd".matches(pattern)); + System.out.println("0010".matches(pattern)); + System.out.println("1232d".matches(pattern)); } }