From de1f553f6e830914a59839af787cc9261f5b10e3 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Fri, 2 Jun 2023 16:17:02 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E6=96=B0=E5=A2=9E=E9=9C=80=E6=B1=82:=20?= =?UTF-8?q?=E7=A9=BA=E6=89=98=E9=99=90=E4=BD=8D=E9=80=81=E7=A9=BA=E7=9B=98?= =?UTF-8?q?=EF=BC=8C=E8=B4=A7=E6=A2=AF=E6=BB=A1=E6=96=99=E5=85=A5=E5=BA=93?= =?UTF-8?q?=20fix:=20=E4=BF=AE=E5=A4=8D=E4=BE=9B=E7=BB=99=E7=BA=BF?= =?UTF-8?q?=E7=82=B9=E4=BD=8D=E5=86=B2=E7=AA=81bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acs/service/impl/AcsToWmsServiceImpl.java | 35 ++- .../pda/group/{ => rest}/GroupController.java | 2 +- .../service/impl/SendVehicleServiceImpl.java | 18 +- .../sendvehicle/wql/PDA_SENDVEHICLE_01.wql | 5 +- .../org/nl/wms/pda/sendvehicle/wql/remark.txt | 78 ++++++ .../sch/service/impl/PointServiceImpl.java | 6 + .../org/nl/wms/sch/tasks/RegionTypeEnum.java | 4 +- .../sendEmpty/DpxwSendEmpVehicleTask.java | 237 ++++++++++++++++ .../sendEmpty/YqxSendEmpVehicleTask.java | 51 +++- .../wql/QSCH_dpxwSendEmpVehicle_01.wql | 60 ++++ .../sendMaterial/GjxSendMaterialTask.java | 4 +- .../sendMaterial/HtSendMaterialTask.java | 259 ++++++++++++++++++ .../sendMaterial/YqxSendMaterialTask.java | 12 +- .../wql/QSCH_gjxSendMaterial_01.wql | 99 ++++--- .../wql/QSCH_yqxSendMaterial_01.wql | 2 +- .../src/views/wms/sch/point/index.vue | 10 +- 16 files changed, 789 insertions(+), 93 deletions(-) rename lms/nladmin-system/src/main/java/org/nl/wms/pda/group/{ => rest}/GroupController.java (97%) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/remark.txt create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpxwSendEmpVehicleTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_dpxwSendEmpVehicle_01.wql create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HtSendMaterialTask.java 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 09b1f7b..f523cef 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 @@ -18,10 +18,12 @@ import org.nl.wms.sch.service.TaskService; import org.nl.wms.sch.tasks.callEmpty.GjxCallEmpVehicleTask; import org.nl.wms.sch.tasks.callEmpty.YqxCallEmpVehicleTask; import org.nl.wms.sch.tasks.callMaterial.YqxCallMaterialTask; +import org.nl.wms.sch.tasks.sendEmpty.DpxwSendEmpVehicleTask; import org.nl.wms.sch.tasks.sendEmpty.HtSendEmpVehicleTask; import org.nl.wms.sch.tasks.sendEmpty.YqxSendEmpVehicleTask; import org.nl.wms.sch.tasks.sendMaterial.GjxSendMaterialTask; import org.nl.wms.sch.tasks.sendMaterial.HkxSendMaterialTask; +import org.nl.wms.sch.tasks.sendMaterial.HtSendMaterialTask; import org.nl.wms.sch.tasks.sendMaterial.YqxSendMaterialTask; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -190,6 +192,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { * 6.一楼空盘入库 (有载具号) * 7.油漆线->输送线(油漆线满料) * 8.豪凯自动线下料入库 + * 9.碟盘限位送空盘到输送线 + * 10.一楼货梯送料 */ if (StrUtil.equals(type, "1")) { // 1.共挤线申请空盘: 调用空托盘出库处理类创建任务 @@ -249,30 +253,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject param = new JSONObject(); param.put("point_code1", point_code); param.put("qty", vehicle_num); -// param.put("vehicle_type", vehicle_type); -// param.put("vehicle_code", vehicle_code); // 创建任务 YqxSendEmpVehicleTask taskBean = SpringContextHolder.getBean(YqxSendEmpVehicleTask.class); taskBean.createTask(param); - - } else if (StrUtil.equals(type, "6")) { // 6.一楼空盘入库 (有载具号): 调用空托盘入库处理类创建任务 if (ObjectUtil.isEmpty(vehicle_code)) throw new BadRequestException("载具号不能为空"); JSONObject param = new JSONObject(); - - // 查询载具号对应的数量 -// JSONObject jsonVeQty = new JSONObject(); -// if (ObjectUtil.isEmpty(vehicle_num)) { -// if (ObjectUtil.isEmpty(jsonVeQty)) throw new BadRequestException("请先手持扫码"); -// } else { -// jsonVeQty.put("qty", vehicle_num); -// } - -// param.put("qty", jsonVeQty.getString("qty")); param.put("point_code1", point_code); param.put("vehicle_code", vehicle_code); -// param.put("vehicle_type", vehicle_type); // 创建任务 HtSendEmpVehicleTask taskBean = SpringContextHolder.getBean(HtSendEmpVehicleTask.class); String task_id = taskBean.createTask(param); @@ -295,6 +284,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { HkxSendMaterialTask taskBean = SpringContextHolder.getBean(HkxSendMaterialTask.class); String task_id = taskBean.createTask(param); + } else if (StrUtil.equals(type, "9")) { + // 9.碟盘限位送空盘到输送线 + JSONObject param = new JSONObject(); + param.put("point_code1", point_code); + param.put("vehicle_code", vehicle_code); + param.put("vehicle_qty", vehicle_num); + DpxwSendEmpVehicleTask taskBean = SpringContextHolder.getBean(DpxwSendEmpVehicleTask.class); + String task_id = taskBean.createTask(param); + } else if (StrUtil.equals(type, "10")) { + // 10.一楼货梯送料 + JSONObject param = new JSONObject(); + param.put("point_code1", point_code); + param.put("vehicle_code", vehicle_code); + param.put("task_id", whereJson.getString("task_id")); + HtSendMaterialTask taskBean = SpringContextHolder.getBean(HtSendMaterialTask.class); + String task_id = taskBean.createTask(param); } return null; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/group/GroupController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/group/rest/GroupController.java similarity index 97% rename from lms/nladmin-system/src/main/java/org/nl/wms/pda/group/GroupController.java rename to lms/nladmin-system/src/main/java/org/nl/wms/pda/group/rest/GroupController.java index 85e4b16..44caaee 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/group/GroupController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/group/rest/GroupController.java @@ -1,4 +1,4 @@ -package org.nl.wms.pda.group; +package org.nl.wms.pda.group.rest; import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java index 6a0f17a..941719c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java @@ -31,7 +31,7 @@ public class SendVehicleServiceImpl implements SendVehicleService { JSONObject resultJson = new JSONObject(); for (int i = 0; i < regionArr.size(); i++) { JSONObject jsonRegion = regionArr.getJSONObject(i); - if (StrUtil.equals(jsonRegion.getString("region_id"), RegionTypeEnum.SSX.getId())) { + if (StrUtil.equals(jsonRegion.getString("region_id"), RegionTypeEnum.DPXWQ01.getId())) { JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); jsonRegion.put("pointArr", pointArr); } else { @@ -50,13 +50,13 @@ public class SendVehicleServiceImpl implements SendVehicleService { @Transactional(rollbackFor = Exception.class) public JSONObject confirm(JSONObject whereJson) { JSONObject result = new JSONObject(); - // 1、准备参数:point_code、type:6为输送线区域,5为油漆区域 + // 1、准备参数:point_code、type:9为碟盘限位区,5为油漆区域 JSONObject param = new JSONObject(); String region_id = whereJson.getString("region_id"); JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0); String region_code = jsonObject.getString("region_code"); - if (StrUtil.equals(region_code, "SSX01")) param.put("type","6"); + if (StrUtil.equals(region_code, "DPXWQ01")) param.put("type","9"); if (StrUtil.equals(region_code, "YQQY01")) param.put("type","5"); param.put("point_code",whereJson.getString("point_code")); @@ -64,15 +64,9 @@ public class SendVehicleServiceImpl implements SendVehicleService { param.put("vehicle_num",whereJson.getString("qty")); // 2、调用接口 JSONObject json = acsToWmsService.apply(param); - if (StrUtil.equals(json.getString("status"), "200")) { - result.put("result", ""); - result.put("code", "1"); - result.put("desc", "操作成功"); - } else { - result.put("result", ""); - result.put("code", "0"); - result.put("desc", "操作失败:"+json.getString("message")); - } + result.put("result", ""); + result.put("code", "1"); + result.put("desc", "操作成功"); return result; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql index b8bb4a3..e80b53b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql @@ -47,7 +47,7 @@ FROM sch_base_region WHERE - region_code in ('SSX01','YQQY01') + region_code in ('YQQY01','DPXWQ01') ENDSELECT ENDQUERY @@ -64,8 +64,7 @@ WHERE is_used = '1' AND is_delete = '0' - AND point_type = '6' - + AND lock_type = '1' OPTION 输入.region_id <> "" region_id = 输入.region_id ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/remark.txt b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/remark.txt new file mode 100644 index 0000000..6a0f17a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/remark.txt @@ -0,0 +1,78 @@ +package org.nl.wms.pda.sendvehicle.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.pda.sendvehicle.service.SendVehicleService; +import org.nl.wms.sch.tasks.RegionTypeEnum; + + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class SendVehicleServiceImpl implements SendVehicleService { + + private final AcsToWmsService acsToWmsService; + + @Override + public JSONObject queryPoint() { + JSONObject result = new JSONObject(); + // 1.查询区域:输送区域 SSX01、油漆区域 YQQY01 + JSONArray regionArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "1").process().getResultJSONArray(0); + // 2.根据区域查询对应的物料上料位 + JSONObject resultJson = new JSONObject(); + for (int i = 0; i < regionArr.size(); i++) { + JSONObject jsonRegion = regionArr.getJSONObject(i); + if (StrUtil.equals(jsonRegion.getString("region_id"), RegionTypeEnum.SSX.getId())) { + JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); + jsonRegion.put("pointArr", pointArr); + } else { + JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "3").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); + jsonRegion.put("pointArr", pointArr); + } + } + resultJson.put("regionja", regionArr); + result.put("result", resultJson); + result.put("code", "1"); + result.put("desc", "查询成功"); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject confirm(JSONObject whereJson) { + JSONObject result = new JSONObject(); + // 1、准备参数:point_code、type:6为输送线区域,5为油漆区域 + JSONObject param = new JSONObject(); + + String region_id = whereJson.getString("region_id"); + JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0); + String region_code = jsonObject.getString("region_code"); + if (StrUtil.equals(region_code, "SSX01")) param.put("type","6"); + if (StrUtil.equals(region_code, "YQQY01")) param.put("type","5"); + + param.put("point_code",whereJson.getString("point_code")); + param.put("vehicle_code",whereJson.getString("vehicle_code")); + param.put("vehicle_num",whereJson.getString("qty")); + // 2、调用接口 + JSONObject json = acsToWmsService.apply(param); + if (StrUtil.equals(json.getString("status"), "200")) { + result.put("result", ""); + result.put("code", "1"); + result.put("desc", "操作成功"); + } else { + result.put("result", ""); + result.put("code", "0"); + result.put("desc", "操作失败:"+json.getString("message")); + } + return result; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java index ae3110a..8e6c4c6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -168,6 +168,7 @@ public class PointServiceImpl implements PointService { WQLObject materialBaseTab = WQLObject.getWQLObject("MD_ME_MaterialBase"); WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); + WQLObject regionTab = WQLObject.getWQLObject("sch_base_region"); Long currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); @@ -181,6 +182,11 @@ public class PointServiceImpl implements PointService { dto.setUpdate_optname(nickName); String pointStatus = dto.getPoint_status(); + JSONObject regionObj = regionTab.query("region_id = '" + dto.getRegion_id() + "'").uniqueResult(0); + dto.setRegion_id(regionObj.getLong("region_id")); + dto.setRegion_code(regionObj.getString("region_code")); + dto.setRegion_name(regionObj.getString("region_name")); + if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals("1")) { // 空位 dto.setMaterial_id(""); dto.setVehicle_type(""); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java index 21ce4b5..ff01451 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java @@ -15,7 +15,9 @@ public enum RegionTypeEnum { KTPHCQB(9, "KTPHCQB01", "空托盘缓存B区","1558015870570205184"), HKQY(10, "HKQY01", "豪凯区域","1564862312702152704"), SSX(12, "SSX01", "输送线区域","1559374522581389312"), - YSAQKTPQ01(13, "YSAQKTPQ01", "养生A空托盘区","1582909373552922624"); + YSAQKTPQ01(13, "YSAQKTPQ01", "养生A空托盘区","1582909373552922624"), + DPXWQ01(14, "DPXWQ01", "碟盘限位区01","1663805048154624000"), + YSQB01(15, "YSQB01", "养生区B","1663803432005406720"); private int index; private String code; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpxwSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpxwSendEmpVehicleTask.java new file mode 100644 index 0000000..f75f488 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpxwSendEmpVehicleTask.java @@ -0,0 +1,237 @@ +package org.nl.wms.sch.tasks.sendEmpty; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.pda.group.service.impl.GroupServiceImpl; +import org.nl.wms.sch.SchTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.sch.tasks.utils.PointUpdateUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: lyd + * @Description: 碟盘限位送空盘 + * @Date: 2023/5/31 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class DpxwSendEmpVehicleTask extends AbstractAcsTask { + private final String THIS_CLASS = DpxwSendEmpVehicleTask.class.getName(); + @Override + public List addTask() { + /* + * 下发给ACS时需要特殊处理 + */ + JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + + ArrayList acsTaskArr = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + AcsTaskDto dto = AcsTaskDto.builder() + .task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code")) + .vehicle_type(json.getString("vehicle_type")) + .priority(json.getString("priority")) + .remark(json.getString("remark")) + .build(); + acsTaskArr.add(dto); + } + return acsTaskArr; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + /** + *改变任务状态 + **/ + String task_id = taskObj.getString("task_id"); + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + //点位基础表【SCH_BASE_Point】 + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); + JSONObject jsonTask = taskTab.query("task_id='" + task_id + "'").uniqueResult(0); + + if (StrUtil.equals(status, "0")) { + //取消任务,释放相关点位的锁 + String point_code2 = jsonTask.getString("point_code2"); + if (ObjectUtil.isNotEmpty(point_code2)) { + // 锁定所有当前货梯 + String allPre = point_code2.substring(0, 5); + JSONObject param2 = new JSONObject(); + param2.put("lock_type", "1"); + param2.put("task_id", ""); + pointTab.update(param2, "point_code like '" + allPre + "%' AND point_code <> '" + allPre + "'"); + } + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("remark", "已取消"); + taskTab.update(jsonTask); + } + + if (StrUtil.equals(status, "1")) { + //更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); + taskTab.update(jsonTask); + } + + if (StrUtil.equals(status, "2")) { + // 更新任务状态为完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode")); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("remark", "任务执行完成"); + taskTab.update(jsonTask); + + //取消任务,释放相关点位的锁 + String point_code2 = jsonTask.getString("point_code2"); + JSONObject param = new JSONObject(); + param.put("lock_type", "1"); + param.put("task_id", ""); + if (ObjectUtil.isNotEmpty(point_code2)) { + // 锁定所有当前货梯 + String allPre = point_code2.substring(0, 5); + JSONObject param2 = new JSONObject(); + param2.put("lock_type", "1"); + param2.put("task_id", ""); + pointTab.update(param2, "point_code like '" + allPre + "%' " + + "AND point_code <> '" + allPre + "' " + + "AND point_code <> '" + point_code2 + "'"); + } + param.put("point_status", "2"); + pointTab.update(param, "point_code = '" + point_code2 + "'"); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String createTask(JSONObject form) { + /* + * 1.先生成确定起点的任务 + * 2.通过findNextPoint()找终点 + * 3.下发给ACS + */ + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_point"); // 点位表 + //任务表【SCH_BASE_Task】 + //判断当前点是否有未完成的任务 + String point_code1 = form.getString("point_code1"); + + JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务"); + + SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId()) + .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_type("") + .acs_task_type("1") + .task_name("碟盘限位送空托盘") + .task_status(TaskStatusEnum.SURE_START.getCode()) + .point_code1(point_code1) + .vehicle_code(form.getString("vehicle_code")) + .vehicle_qty(form.getInteger("vehicle_qty")) + .handle_class(THIS_CLASS) + .create_time(DateUtil.now()) + .build(); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + taskTab.insert(json); +// this.findNextPoint(); + this.immediateNotifyAcs(); + return String.valueOf(dto.getTask_id()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void findNextPoint() { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); + JSONArray taskArry = taskTab.query("task_status='" + TaskStatusEnum.SURE_START.getCode() + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0); + for (int i = 0; i < taskArry.size(); i++) { + JSONObject taskObj = taskArry.getJSONObject(i); + String task_id = taskObj.getString("task_id"); + // 更新点位 +// JSONArray jsonArray = WQL.getWO("QSCH_yqxSendMaterial_01").addParam("flag", "2").process().getResultJSONArray(0); +// PointUpdateUtil.updatePoint(jsonArray); + // 判断楼上是否有送下来得任务 ??? + // 1、找到货梯货位 + JSONObject param = new JSONObject(); + param.put("flag", "1"); + JSONObject endPoint = WQL.getWO("QSCH_yqxSendMaterial_01").addParamMap(param).process().uniqueResult(0); + if (ObjectUtil.isEmpty(endPoint)) { + taskObj.put("remark", "电梯无可用点"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } else { // 找到对应的货梯单位 + // 锁定所有当前货梯 + String pointCode = endPoint.getString("point_code"); + String allPre = pointCode.substring(0, 5); + JSONObject param2 = new JSONObject(); + param2.put("lock_type", "2"); + param2.put("task_id", task_id);; + pointTab.update(param2, "point_code like '" + allPre + "%' AND point_code <> '" + allPre + "'"); + + //修改任务状态 + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("point_code2", pointCode); + taskObj.put("remark", ""); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } + // 2、组盘 + GroupServiceImpl groupService = SpringContextHolder.getBean(GroupServiceImpl.class); + JSONObject pa = new JSONObject(); + pa.put("qty", taskObj.getString("vehicle_qty")); + pa.put("vehicle_code", taskObj.getString("vehicle_code")); + JSONObject confirm = groupService.confirm(pa); + if (confirm.getString("code").equals("0")) { // 组盘出错就给提示需要人工组盘 +// taskObj.put("remark", confirm.getString("desc") + ", 请人工组盘"); +// taskObj.put("update_time", DateUtil.now()); + throw new BadRequestException(confirm.getString("desc")); + } + } + + } + + @Override + public void forceFinish(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) + this.updateTaskStatus(taskObj,"2"); + else { + throw new BadRequestException("未找到该任务或者任务已完成!"); + } + } + + @Override + public void cancel(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) + this.updateTaskStatus(taskObj,"0"); + else { + throw new BadRequestException("未找到该任务或者任务已完成!"); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java index 17afca2..63c96bf 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java @@ -280,11 +280,11 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask { // } // } // 为空就去养生A区 - JSONObject endPointObj = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'", "in_empty_seq desc").uniqueResult(0); + String endPointCode = goToYSAQ(vehicle_type); // 判断是否有任务 - boolean is_point = this.isTask(endPointObj.getString("point_code")); + boolean is_point = this.isTask(endPointCode); if (is_point) { - end_code = endPointObj.getString("point_code"); + end_code = endPointCode; } } } @@ -306,18 +306,55 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask { // } // } // 为空就去养生A区 - JSONObject endPointObj = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'", "in_empty_seq desc").uniqueResult(0); + String endPointCode = goToYSAQ(vehicle_type); // 判断是否有任务 - boolean is_point = this.isTask(endPointObj.getString("point_code")); + boolean is_point = this.isTask(endPointCode); if (is_point) { - end_code = endPointObj.getString("point_code"); + end_code = endPointCode; } } } - return end_code; } + /** + * 到养生A区寻找点位 + * @param vehicle_type + * @return + */ + public String goToYSAQ(String vehicle_type) { + String endPointCode = null; + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位表 + // 先找看看有没有放过托盘的 + JSONObject emptyObj = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "'" + + " AND can_vehicle_type = '" + vehicle_type + "'" + + " AND point_status = '2' AND is_used = '1' AND is_delete = '0'","block_num, row_num, in_empty_seq") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(emptyObj)) { + // 如果存在则往下继续放 + Integer block_num = emptyObj.getInteger("block_num"); + Integer col_num = emptyObj.getInteger("col_num"); // 列 + Integer row_num = emptyObj.getInteger("row_num"); // 排 + // 因为找到的是对应相同的物料点,所以是下一个位置 + JSONObject firstRow = pointTab.query("block_num = '" + block_num + "'" + + " and row_num = '" + row_num + "'and col_num = '" + (col_num - 1) +"'" + + " and lock_type = '1' and point_status = '1' and is_used = '1'" + + " and is_delete = '0' and region_code = 'YSAQKTPQ01'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(firstRow)) { + endPointCode = firstRow.getString("point_code"); + } + } + if (ObjectUtil.isEmpty(emptyObj) || ObjectUtil.isEmpty(endPointCode)) { + // 找一个空位 + JSONObject endPointObj = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' " + + "and point_status = '1'", "block_num, row_num, in_empty_seq desc").uniqueResult(0); + endPointCode = endPointObj.getString("point_code"); + } + return endPointCode; + } + @Transactional(rollbackFor = Exception.class) public boolean isTask(String point_code) { /* diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_dpxwSendEmpVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_dpxwSendEmpVehicle_01.wql new file mode 100644 index 0000000..09aed4b --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_dpxwSendEmpVehicle_01.wql @@ -0,0 +1,60 @@ +[交易说明] + 交易名: 手持呼叫送空托盘请求 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_code TYPEAS s_string + 输入.material_id TYPEAS s_string + 输入.vehicle_type TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + p.point_id, + p.point_code, + p.point_name + FROM + SCH_BASE_Point p + WHERE + lock_type = '1' + AND is_used = '1' + AND is_delete = '0' + AND point_status = '1' + and (point_code = 'SSX01B1' or point_code = 'SSX02B1') + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java index a5f0cb1..f6ab1b1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java @@ -224,7 +224,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask { Integer col_num = json1.getInteger("col_num"); // 列 Integer row_num = json1.getInteger("row_num"); // 排 // 因为找到的是对应相同的物料点,所以是下一个位置 - JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "'and col_num = '" + (col_num - 1) +"' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0'").uniqueResult(0); + JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "'and col_num = '" + (col_num - 1) +"' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0' and region_code = 'YSQA01'").uniqueResult(0); if (ObjectUtil.isNotEmpty(firstRow)) { taskObj.put("point_code2", firstRow.getString("point_code")); taskObj.put("update_time", DateUtil.now()); @@ -264,7 +264,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask { Integer block_num = json2.getInteger("block_num"); Integer row_num = json2.getInteger("row_num"); Integer sum = json2.getInteger("sum"); - JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0'", "col_num desc").uniqueResult(0); // and col_num = '" + sum + "' + JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0' and region_code = 'YSQA01'", "col_num desc").uniqueResult(0); // and col_num = '" + sum + "' taskObj.put("point_code2", firstRow.getString("point_code")); //二楼普通任务 taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HtSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HtSendMaterialTask.java new file mode 100644 index 0000000..d439c42 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HtSendMaterialTask.java @@ -0,0 +1,259 @@ +package org.nl.wms.sch.tasks.sendMaterial; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.log.LokiLogType; +import org.nl.wms.sch.SchTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.AcsTaskDto; +import org.slf4j.MDC; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: lyd + * @Description: 货梯送料 + * @Date: 2023/6/1 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class HtSendMaterialTask extends AbstractAcsTask { + private final String THIS_CLASS = HtSendMaterialTask.class.getName(); + @Override + public List addTask() { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + /* + * 下发给ACS时需要特殊处理 + */ + JSONArray arr = taskTab.query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + + ArrayList acsTaskArr = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + + //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) + String point_code = json.getString("point_code2"); + String newPoint = point_code.substring(0, 4) + "1" + point_code.substring(4, 10); + + AcsTaskDto dto = AcsTaskDto.builder() + .task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(newPoint) + .vehicle_code(json.getString("vehicle_code")) + .vehicle_type(json.getString("vehicle_type")) + .priority(json.getString("priority")) + .remark(json.getString("remark")) + .build(); + acsTaskArr.add(dto); + } + return acsTaskArr; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject task, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + String task_id = task.getString("task_id"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + String point_code2 = taskObj.getString("point_code2"); + JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + //任务取消 + if (StrUtil.equals(status, "0")) { + // 取消删除任务 + if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { + throw new BadRequestException("已完成不能取消!"); + } + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("remark", "已取消"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + if (ObjectUtil.isEmpty(endPoint)) return; + endPoint.put("lock_type", "1"); + endPoint.put("update_time", DateUtil.now()); + pointTab.update(endPoint); + } + + if ("1".equals(status)) { + // 更新任务状态为执行中 + taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("car_no", taskObj.getString("car_no")); + taskTab.update(taskObj); + } + + if (StrUtil.equals(status, "2")) { + //完成后入库 + if (ObjectUtil.isNotEmpty(endPoint)) { + // 点位解锁 + endPoint.put("lock_type", "1"); + endPoint.put("point_status", "3"); + endPoint.put("material_id", taskObj.getString("material_id")); + endPoint.put("ivt_qty", taskObj.getString("material_qty")); + endPoint.put("instorage_time", DateUtil.now()); + endPoint.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); + endPoint.put("vehicle_code", taskObj.getString("vehicle_code")); + endPoint.put("vehicle_type", taskObj.getString("vehicle_type")); + endPoint.put("vehicle_qty", taskObj.getString("vehicle_qty")); + endPoint.put("update_time", DateUtil.now()); + pointTab.update(endPoint); + } + + // 更改任务状态为完成 + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", "任务执行完成"); + taskTab.update(taskObj); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String createTask(JSONObject form) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + String startPointCode = form.getString("point_code1"); + String taskId = form.getString("task_id"); + String vehicleCode = form.getString("vehicle_code"); + //判断当前点是否有未完成的任务 + JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + startPointCode + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + startPointCode + "存在未完成的任务"); + JSONObject task = taskTab.query("task_id = '" + taskId + "'").uniqueResult(0); + // 创建任务 + SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId()) + .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_type("") + .acs_task_type("1") + .task_name("货梯物料入库") + .task_status(TaskStatusEnum.SURE_START.getCode()) + .point_code1(startPointCode) + .priority("1") + .material_id(task.getLong("material_id")) + .vehicle_type(task.getString("vehicle_type")) + .vehicle_code(vehicleCode) + .vehicle_qty(1) + .material_qty(task.getString("material_qty")) + .handle_class(THIS_CLASS) + .create_time(DateUtil.now()) + .build(); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + taskTab.insert(json); + this.immediateNotifyAcs(); + return String.valueOf(dto.getTask_id()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void findNextPoint() { + // 养生B区寻找一个货位 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + //点位基础表【SCH_BASE_Point】 + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); + JSONArray taskArr = taskTab.query("task_status='" + TaskStatusEnum.SURE_START.getCode() + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0); + for (int i = 0; i < taskArr.size(); i++) { + JSONObject taskObj = taskArr.getJSONObject(i); + String material_id = taskObj.getString("material_id"); + String vehicle_type = taskObj.getString("vehicle_type"); + String reminder = ""; + //1、查找库区类是否有响应的载具类型和对应的物料 + // json1: 对应相同物料的点位 + JSONObject param1 = new JSONObject(); + param1.put("flag", "1"); + param1.put("material_id", material_id); + param1.put("region_code", "YSQB01"); + param1.put("vehicle_type", vehicle_type ); + JSONObject json1 = WQL.getWO("QSCH_gjxSendMaterial_01").addParamMap(param1).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(json1)) { // json1: 对应相同物料的点位 + Integer block_num = json1.getInteger("block_num"); + Integer col_num = json1.getInteger("col_num"); // 列 + Integer row_num = json1.getInteger("row_num"); // 排 + // 因为找到的是对应相同的物料点,所以是下一个位置 + JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "'and col_num = '" + (col_num - 1) +"' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0' and region_code = 'YSQB01'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(firstRow)) { + taskObj.put("point_code2", firstRow.getString("point_code")); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + //一楼普通任务 + taskTab.update(taskObj); + //锁住相关货位 + JSONObject point = new JSONObject(); + point.put("lock_type", "2"); + pointTab.update(point, "point_code = '" + firstRow.getString("point_code") + "'"); + continue; + } + MDC.put("log_file_type", LokiLogType.DEFAULT.getDesc()); + log.info("异常日志:" + "第" + block_num + "块" + row_num + "排" + (col_num - 1) + "列被锁,重新安排一排."); + // 下一列被锁住,给提示 + reminder = "第" + block_num + "块" + row_num + "排" + (col_num - 1) + "列被锁,重新安排一排."; + } + //找空位入: 物料点查找在第一列或者是没有找到物料点 + JSONObject param2 = new JSONObject(); + param2.put("flag", "2"); + param2.put("region_code", "YSQB01"); + param2.put("vehicle_type",vehicle_type); + //1、查找整列为空的货位 + JSONObject json2 = WQL.getWO("QSCH_gjxSendMaterial_01").addParamMap(param2).process().uniqueResult(0); + if (ObjectUtil.isEmpty(json2)) { + taskObj.put("remark", ObjectUtil.isNotEmpty(reminder) ? reminder : "养生A区无可用货位"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } else { + Integer block_num = json2.getInteger("block_num"); + Integer row_num = json2.getInteger("row_num"); + Integer sum = json2.getInteger("sum"); + JSONObject firstRow = pointTab.query("block_num = '" + block_num + "' and row_num = '" + row_num + "' and lock_type = '1' and point_status = '1' and is_used = '1' and is_delete = '0' and region_code = 'YSQB01'", "col_num desc").uniqueResult(0); // and col_num = '" + sum + "' + taskObj.put("point_code2", firstRow.getString("point_code")); + //一楼普通任务 + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("remark", ObjectUtil.isNotEmpty(reminder) ? reminder : ""); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + //锁住相关货位 + JSONObject point = new JSONObject(); + point.put("lock_type", "2"); + pointTab.update(point, "point_code = '" + firstRow.getString("point_code") + "'"); + } + } + } + + @Override + public void forceFinish(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status < " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) { + this.updateTaskStatus(taskObj, "2"); + } else { + throw new BadRequestException("任务已删除或者已完成!"); + } + + } + + + @Override + public void cancel(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) { + this.updateTaskStatus(taskObj, "0"); + } else { + throw new BadRequestException("任务已完成不能取消!"); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YqxSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YqxSendMaterialTask.java index 5b0b14a..55c34ac 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YqxSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YqxSendMaterialTask.java @@ -54,13 +54,7 @@ public class YqxSendMaterialTask extends AbstractAcsTask { if (StrUtil.equals(status, "0")) { //取消任务,释放相关点位的锁 -// String point_code1 = jsonTask.getString("point_code1"); String point_code2 = jsonTask.getString("point_code2"); -// JSONObject param = new JSONObject(); -// param.put("lock_type", "1"); -// param.put("task_id", ""); -// pointTab.update(param, "point_code = '" + point_code1 + "'"); -// pointTab.update(param, "point_code = '" + point_code2 + "'"); if (ObjectUtil.isNotEmpty(point_code2)) { // 锁定所有当前货梯 String allPre = point_code2.substring(0, 5); @@ -91,7 +85,6 @@ public class YqxSendMaterialTask extends AbstractAcsTask { taskTab.update(jsonTask); //取消任务,释放相关点位的锁 -// String point_code1 = jsonTask.getString("point_code1"); String point_code2 = jsonTask.getString("point_code2"); JSONObject param = new JSONObject(); param.put("lock_type", "1"); @@ -106,9 +99,6 @@ public class YqxSendMaterialTask extends AbstractAcsTask { "AND point_code <> '" + allPre + "' " + "AND point_code <> '" + point_code2 + "'"); } - -// pointTab.update(param, "point_code = '" + point_code1 + "'"); - param.put("point_status", "3"); pointTab.update(param, "point_code = '" + point_code2 + "'"); } @@ -143,7 +133,7 @@ public class YqxSendMaterialTask extends AbstractAcsTask { String allPre = pointCode.substring(0, 5); JSONObject param2 = new JSONObject(); param2.put("lock_type", "2"); - param2.put("task_id", task_id);; + param2.put("task_id", task_id); pointTab.update(param2, "point_code like '" + allPre + "%' AND point_code <> '" + allPre + "'"); //修改任务状态 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql index 5f814b8..d13a4e0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_gjxSendMaterial_01.wql @@ -52,7 +52,7 @@ p.row_num FROM SCH_BASE_Point p - where + WHERE p.is_used = '1' AND is_delete = '0' AND lock_type = '1' @@ -67,8 +67,33 @@ OPTION 输入.vehicle_type <> "" p.can_vehicle_type like "%" 输入.vehicle_type "%" ENDOPTION - AND '3' <> (SELECT p2.point_status FROM SCH_BASE_Point p2 WHERE p2.block_num = p.block_num AND p2.row_num = p.row_num - AND p2.col_num = (SELECT MIN(p3.col_num) FROM SCH_BASE_Point p3 WHERE p3.block_num = p2.block_num AND p3.row_num = p2.row_num AND p3.is_used = '1' AND p3.is_delete = '0' AND p3.lock_type = '1')) + AND '3' <> ( + SELECT + p2.point_status + FROM + SCH_BASE_Point p2 + WHERE + p2.block_num = p.block_num + AND p2.row_num = p.row_num + AND p2.col_num = ( + SELECT + MIN( p3.col_num ) + FROM + SCH_BASE_Point p3 + WHERE + p3.block_num = p2.block_num + AND p3.row_num = p2.row_num + AND p3.is_used = '1' + AND p3.is_delete = '0' + AND p3.lock_type = '1' + OPTION 输入.region_code <> "" + p3.region_code = 输入.region_code + ENDOPTION + ) + OPTION 输入.region_code <> "" + p2.region_code = 输入.region_code + ENDOPTION + ) ORDER BY block_num,row_num,col_num FOR UPDATE ENDSELECT @@ -76,39 +101,43 @@ ENDIF IF 输入.flag = "2" - QUERY - SELECT - p.block_num, - p.row_num, - COUNT(*) AS sum - FROM - SCH_BASE_Point p - WHERE - p.is_delete = '0' - AND p.is_used = '1' - AND p.region_code = 'YSQA01' - AND p.point_status = '1' - AND p.lock_type = '1' - OPTION 输入.vehicle_type <> "" + QUERY + SELECT + p.block_num, + p.row_num, + COUNT(*) AS sum + FROM + SCH_BASE_Point p + WHERE + p.is_delete = '0' + AND p.is_used = '1' + AND p.point_status = '1' + AND p.lock_type = '1' + OPTION 输入.vehicle_type <> "" p.can_vehicle_type like "%" 输入.vehicle_type "%" - ENDOPTION - GROUP BY p.block_num, p.row_num - HAVING sum = ( - SELECT - COUNT(*) AS s - FROM - sch_base_point p2 - WHERE - p2.region_code = 'YSQA01' - AND p.block_num = p2.block_num - AND p.row_num = p2.row_num - AND p2.is_used = '1' - AND p2.is_delete = '0' - ) - ORDER BY p.block_num, p.row_num - ENDSELECT - ENDQUERY - ENDIF + ENDOPTION + OPTION 输入.region_code <> "" + p.region_code = 输入.region_code + ENDOPTION + GROUP BY p.block_num, p.row_num + HAVING sum = ( + SELECT + COUNT(*) AS s + FROM + sch_base_point p2 + WHERE + p.block_num = p2.block_num + AND p.row_num = p2.row_num + AND p2.is_used = '1' + AND p2.is_delete = '0' + OPTION 输入.region_code <> "" + p2.region_code = 输入.region_code + ENDOPTION + ) + ORDER BY p.block_num, p.row_num + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_yqxSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_yqxSendMaterial_01.wql index b17adb6..81ddfa5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_yqxSendMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_yqxSendMaterial_01.wql @@ -65,7 +65,7 @@ FROM SCH_BASE_Point p WHERE - region_code = 'SSX01' + region_code IN ('SSX01', 'SSX02') and point_code <>'SSX01' and point_code <>'SSX02' ENDSELECT 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 1a150d3..a2eee59 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue @@ -70,7 +70,7 @@ - +