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 3d2ef51..fdceb0e 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 @@ -20,11 +20,13 @@ import org.nl.wms.basedata.eum.VehicleType; import org.nl.wms.basedata.service.dto.VehicleDto; import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.call.empty.FJCallEmptyTask; import org.nl.wms.sch.task.call.empty.GTKCallEmptyTask; 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.send.empty.FJSendEmptyTask; +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; @@ -60,6 +62,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private final GTKCallEmptyTask gtkCallEmptyTask; + private final FJSendMaterialTask fjSendMaterialTask; + + private final FJCallEmptyTask fjCallEmptyTask; + /** * task_id:任务标识 * task_code:任务编码 @@ -249,6 +255,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { task_code = szSendMaterialTask.createTask(method_param); break; + case FJ: + method_param.put("workorder", param.getJSONObject("workorder")); + method_param.put("vd", param.getJSONObject("vd")); + task_code = fjSendMaterialTask.createTask(method_param); + break; default: throw new BadRequestException("[" + region.label() + "] 不能发起送料任务!"); } @@ -295,25 +306,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { switch (region) { case HL: String device_code = point.getString("device_code"); - JSONObject work_order = WQLObject + workorder = WQLObject .getWQLObject("pdm_bd_workorder") .query("is_delete = '0' AND device_code = '" + device_code + "' AND order_status = '3'") .uniqueResult(0); - method_param.put("workorder", work_order); + method_param.put("workorder", workorder); task_code = hlCallEmptyTask.createTask(method_param); break; case YZ: device_code = point.getString("device_code"); - work_order = WQLObject + workorder = WQLObject .getWQLObject("pdm_bd_workorder") .query("is_delete = '0' AND device_code = '" + device_code + "' AND order_status = '3'") .uniqueResult(0); - method_param.put("workorder", work_order); + method_param.put("workorder", workorder); task_code = yzCallEmptyTask.createTask(method_param); break; case GTK: task_code = gtkCallEmptyTask.createTask(method_param); break; + case FJ: + workorder = TaskUtils.hasWorkOrder(point); + method_param.put("workorder", workorder); + task_code = fjCallEmptyTask.createTask(method_param); + break; default: throw new BadRequestException("[" + region.label() + "] 不能发起叫空任务!"); } @@ -368,8 +384,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } TaskUtils.isLocked(point); - JSONObject work_order = TaskUtils.hasWorkOrder(point); - String vehicle_type = work_order.getString("vehicle_type"); + JSONObject workorder = TaskUtils.hasWorkOrder(point); + String vehicle_type = workorder.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()); @@ -380,11 +396,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { vd.put("vd_id", IdUtil.getSnowflake(1, 1).nextId()); vd.put("vehicle_type", vehicle_type); vd.put("vehicle_code", vehicle_code); - vd.put("material_id", work_order.getString("material_id")); + 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", work_order.getString("workorder_id")); + vd.put("workorder_id", workorder.getString("workorder_id")); vd.put("point_code", point_code); vd.put("tray_high", jsonObject.get("tray_high")); vd.put("crib_category", jsonObject.get("crib_category")); @@ -459,7 +475,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject param = new JSONObject(); param.put("device_code", point.getString("point_code")); param.put("point", point); - param.put("workorder", work_order); + param.put("workorder", workorder); param.put("vd", vd); param.put("vehicle_code", vehicle_code); param.put("type", "1"); @@ -718,11 +734,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } JSONObject update = new JSONObject(); - update.put("vehicle_type", String.valueOf(Integer.parseInt(vehicle_type) + 2)); + if ("0".equals(vehicle_type)) { + update.put("vehicle_type", ""); + } else { + update.put("vehicle_type", String.valueOf(Integer.parseInt(vehicle_type) + 2)); + } WQLObject .getWQLObject("sch_base_point") .update(update, "point_code = '" + point_code + "'"); + JSONObject result = new JSONObject(); result.put("status", HttpStatus.OK.value()); result.put("message", "反馈成功!"); 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 new file mode 100644 index 0000000..65d3556 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/FJCallEmptyTask.java @@ -0,0 +1,213 @@ +package org.nl.wms.sch.task.call.empty; + +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.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; + +/** + * @author zhangjiangwei + * @date 2023/04/28 15:27 + */ +@RequiredArgsConstructor +@Component +public class FJCallEmptyTask extends AbstractAcsTask { + + private final WmsToAcsService wmsToAcsService; + + @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"); + + JSONObject task = TaskUtils.buildTask( + "分拣区叫空", + TaskType.CALL_EMPTY.value(), + TaskStatus.SURE_END.value(), + null, + point.getString("point_code"), + null, + null, + work_order.getString("vehicle_type"), + null, + TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? 50 : 1, + FJCallEmptyTask.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 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 = '" + FJCallEmptyTask.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("CALL_EMPTY_TASK") + .addParam("flag", "4") + .addParam("vehicle_type", task.getString("vehicle_type")) + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + JSONArray request_param = new JSONArray(); + request_param.add(point.getString("point_code")); + JSONObject result = wmsToAcsService.getTray(request_param); + if (!"200".equals(result.getString("status"))) { + continue; + } + + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code1", point.getString("device_code")); + task.put("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_code"))); + task.put("remark", ""); + TaskUtils.addAutoUpdateColum(task); + task_table.update(task); + + JSONObject update_point = new JSONObject(); + update_point.put("lock_type", LockType.TASK_LOCKED.value()); + update_point.put("task_code", task.getString("task_code")); + TaskUtils.addAutoUpdateColum(update_point); + point_table.update(update_point, "point_code = '" + point.getString("device_code") + "'"); + } + } + } + } + + @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"); + 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") + "'"); + } + } + + 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()); + 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", ""); + 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/empty/YZCallEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/YZCallEmptyTask.java index f22cfa0..da2051a 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 @@ -78,36 +78,39 @@ public class YZCallEmptyTask extends AbstractAcsTask { JSONArray tasks = task_table .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + YZCallEmptyTask.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_EMPTY_TASK") - .addParam("flag", "1") - .addParam("point_code", task.getString("point_code2")) - .process() - .uniqueResult(0); - if (ObjectUtil.isEmpty(point)) { - point = WQL + + 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("CALL_EMPTY_TASK") - .addParam("flag", "2") + .addParam("flag", "1") + .addParam("point_code", task.getString("point_code2")) .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("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_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); + if (ObjectUtil.isEmpty(point)) { + point = WQL + .getWO("CALL_EMPTY_TASK") + .addParam("flag", "2") + .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("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_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); + } } } } 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 faab788..50590d1 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 @@ -15,6 +15,7 @@ ################################################# 输入.flag TYPEAS s_string 输入.point_code TYPEAS s_string + 输入.vehicle_type TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -92,3 +93,23 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + tpw.* + FROM + sch_base_point tpw + LEFT JOIN sch_base_point djw ON tpw.device_code = djw.point_code + WHERE + tpw.is_used = '1' + AND djw.is_used = '1' + AND tpw.region_code = 'FJ' + AND djw.region_code = 'FJ' + AND tpw.point_type = '4' + AND djw.point_type = '3' + AND djw.lock_type = '1' + AND tpw.vehicle_type = 输入.vehicle_type + ENDSELECT + ENDQUERY + ENDIF 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 7ec5a9e..2fdf1d4 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 @@ -75,31 +75,33 @@ public class FJCallMaterialTask extends AbstractAcsTask { JSONArray tasks = task_table .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"); - - for (int i = 0; i < tasks.size(); i++) { - JSONObject task = tasks.getJSONObject(i); - - JSONObject point = WQL - .getWO("CALL_MATERIAL_TASK") - .addParam("flag", "3") - .addParam("material_id", task.getString("material_id")) - .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("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_code"))); - task.put("remark", ""); - TaskUtils.addAutoUpdateColum(task); - 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")); - TaskUtils.addAutoUpdateColum(point_update); - point_table.update(point_update, "point_id = " + point.getLongValue("point_id")); + 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("CALL_MATERIAL_TASK") + .addParam("flag", "3") + .addParam("material_id", task.getString("material_id")) + .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("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_code"))); + task.put("remark", ""); + TaskUtils.addAutoUpdateColum(task); + 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")); + TaskUtils.addAutoUpdateColum(point_update); + point_table.update(point_update, "point_id = " + point.getLongValue("point_id")); + } } } } 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 6188cb9..64ba472 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 @@ -91,31 +91,33 @@ public class SZCallMaterialTask extends AbstractAcsTask { 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", ""); - TaskUtils.addAutoUpdateColum(task); - 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")); - TaskUtils.addAutoUpdateColum(point_update); - point_table.update(point_update, "point_id = " + point.getLongValue("point_id")); + 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("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", ""); + TaskUtils.addAutoUpdateColum(task); + 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")); + TaskUtils.addAutoUpdateColum(point_update); + point_table.update(point_update, "point_id = " + point.getLongValue("point_id")); + } } } } 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 e07e3b1..add9cab 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 @@ -73,28 +73,30 @@ public class FJSendEmptyTask extends AbstractAcsTask { JSONArray tasks = task_table .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_START.value() + "' AND handle_class = '" + FJSendEmptyTask.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_EMPTY_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); + 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("SEND_EMPTY_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); + } } } } 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 new file mode 100644 index 0000000..d75c02a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/FJSendMaterialTask.java @@ -0,0 +1,287 @@ +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.common.PickType; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; + +/** + * @author zhangjiangwei + * @date 2023/04/28 12:33 + */ +@RequiredArgsConstructor +@Component +public class FJSendMaterialTask extends AbstractAcsTask { + + private final WmsToAcsService wmsToAcsService; + + @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 material_task = TaskUtils.buildTask( + "分拣区送料", + TaskType.SEND_MATERIAL.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, + FJSendMaterialTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + WQLObject.getWQLObject("sch_base_task").insert(material_task); + + if (TrueOrFalse.trueOrFalse(vd.getString("is_full"))) { + JSONObject empty_task = TaskUtils.buildTask( + "分拣区叫空", + TaskType.CALL_EMPTY.value(), + TaskStatus.SURE_END.value(), + null, + point.getString("point_code"), + null, + null, + work_order.getString("vehicle_type"), + null, + priority, + FJSendMaterialTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + empty_task.put("task_group_id", material_task.getLongValue("task_id")); + WQLObject.getWQLObject("sch_base_task").insert(empty_task); + } + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", material_task.getString("task_code")); + TaskUtils.addFormUpdateColum(point, form); + WQLObject.getWQLObject("sch_base_point").update(point); + + return material_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 = '" + FJSendMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + + if (ObjectUtil.isNotEmpty(tasks)) { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + WQLObject vd_table = WQLObject.getWQLObject("st_ivt_vehicle_detail"); + + for (int i = 0; i < tasks.size(); i++) { + JSONObject material_task = tasks.getJSONObject(i); + + JSONObject vd = vd_table + .query("is_delete = '0' AND vehicle_type = '" + material_task.getString("vehicle_type") + "' AND vehicle_code = '" + material_task.getString("vehicle_code") + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(vd)) { + JSONObject send_point = WQL + .getWO("SEND_MATERIAL_TASK") + .addParam("flag", "2") + .addParam("is_full", vd.getString("is_full")) + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(send_point)) { + material_task.put("task_status", TaskStatus.START_AND_END.value()); + material_task.put("point_code2", send_point.getString("point_code")); + material_task.put("remark", ""); + TaskUtils.addAutoUpdateColum(material_task); + + send_point.put("lock_type", LockType.TASK_LOCKED.value()); + send_point.put("task_code", material_task.getString("task_code")); + TaskUtils.addAutoUpdateColum(send_point); + + JSONObject empty_task = task_table + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + FJSendMaterialTask.class.getName() + "' AND task_group_id = " + material_task.getLongValue("task_id")) + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(empty_task)) { + JSONObject fmj_point = WQL + .getWO("SEND_MATERIAL_TASK") + .addParam("flag", "3") + .addParam("vehicle_type", empty_task.getString("vehicle_type")) + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(fmj_point)) { + JSONArray request_param = new JSONArray(); + request_param.add(fmj_point.getString("point_code")); + JSONObject result = wmsToAcsService.getTray(request_param); + if (!"200".equals(result.getString("status"))) { + continue; + } + + empty_task.put("task_status", TaskStatus.START_AND_END.value()); + empty_task.put("point_code1", fmj_point.getString("device_code")); + empty_task.put("vehicle_code", TaskUtils.formatVehicleCode(fmj_point.getString("vehicle_code"))); + empty_task.put("remark", ""); + TaskUtils.addAutoUpdateColum(empty_task); + + JSONObject update_point = new JSONObject(); + update_point.put("lock_type", LockType.TASK_LOCKED.value()); + update_point.put("task_code", material_task.getString("task_code")); + TaskUtils.addAutoUpdateColum(update_point); + + task_table.update(material_task); + point_table.update(send_point); + task_table.update(empty_task); + point_table.update(update_point, "point_code = '" + fmj_point.getString("device_code") + "'"); + } + } else { + task_table.update(material_task); + point_table.update(send_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"); + 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") + "'"); + + if (TaskType.SEND_MATERIAL.value().equals(task.getString("task_type"))) { + 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())) { + 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()); + 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 (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") + "'"); + } + } +} 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 05d2d9b..89ce191 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 @@ -73,28 +73,30 @@ public class SZSendMaterialTask extends AbstractAcsTask { JSONArray tasks = task_table .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_START.value() + "' AND handle_class = '" + SZSendMaterialTask.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", ""); - 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); + 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("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", ""); + 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); + } } } } 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 22cbc04..0990b49 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,7 +1,5 @@ package org.nl.wms.sch.task.send.material; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; 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 d71bbc5..b80c52e 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 @@ -14,8 +14,8 @@ ## 表字段对应输入参数 ################################################# 输入.flag TYPEAS s_string - 输入.point_type TYPEAS s_string - 输入.device_code TYPEAS s_string + 输入.is_full TYPEAS s_string + 输入.vehicle_type TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -54,3 +54,47 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + sch_base_point + WHERE + is_used = '1' + AND lock_type = '1' + AND point_status = '0' + OPTION 输入.is_full = "1" + region_code = 'FJ' + AND point_type = '5' + ENDOPTION + OPTION 输入.is_full = "0" + region_code = 'BTHC' + AND point_type = '1' + AND point_status = '0' + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + tpw.* + FROM + sch_base_point tpw + LEFT JOIN sch_base_point djw ON tpw.device_code = djw.point_code + WHERE + tpw.is_used = '1' + AND djw.is_used = '1' + AND tpw.region_code = 'FJ' + AND djw.region_code = 'FJ' + AND tpw.point_type = '4' + AND djw.point_type = '3' + AND djw.lock_type = '1' + AND tpw.vehicle_type = 输入.vehicle_type + ENDSELECT + ENDQUERY + ENDIF + diff --git a/lms/nladmin-system/src/test/java/org/nl/test/TempTest.java b/lms/nladmin-system/src/test/java/org/nl/test/TempTest.java index 801d06c..28ce95b 100644 --- a/lms/nladmin-system/src/test/java/org/nl/test/TempTest.java +++ b/lms/nladmin-system/src/test/java/org/nl/test/TempTest.java @@ -25,12 +25,11 @@ public class TempTest { @Test public void test01() { JSONObject data = WQL - .getWO("ACS_TO_WMS") - .addParam("flag", "1") - .addParam("vehicle_type", "2") - .addParam("vehicle_code", "5555") + .getWO("SEND_MATERIAL_TASK") + .addParam("flag", "4") + .addParam("is_full", "0") .process() .uniqueResult(0); - System.out.println(data); + System.out.println(data.getString("region_name")); } } 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 d5a89c0..0b14512 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue @@ -241,21 +241,6 @@ - - - - -