From 50e68ef5c2a692234c54eb6eb996e51eef497b0c Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Mon, 29 May 2023 09:27:17 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E5=8F=A0=E7=9B=98=E6=9E=B6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=91=BC=E5=8F=AB=E7=A9=BA=E6=89=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/ext/acs/rest/AcsToWmsController.java | 28 +- .../wms/ext/acs/service/AcsToWmsService.java | 1 + .../acs/service/impl/AcsToWmsServiceImpl.java | 3 - .../tasks/autoTask/DPJCallVehicleTask.java | 307 ++++++++++++++++++ .../sch/tasks/autoTask/wql/DPJ_AUTOTASK.wql | 155 +++++++++ .../callEmpty/GjxCallEmpVehicleTask.java | 3 + .../tasks/sendEmpty/HtSendEmpVehicleTask.java | 2 +- .../sendEmpty/YqxSendEmpVehicleTask.java | 49 ++- 8 files changed, 524 insertions(+), 24 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/DPJCallVehicleTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/wql/DPJ_AUTOTASK.wql diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index e206dfd..4095c01 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -1,4 +1,3 @@ - package org.nl.wms.ext.acs.rest; @@ -7,9 +6,13 @@ import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.modules.logging.annotation.Log; import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; @@ -17,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.concurrent.TimeUnit; + /** * @author ludj * @date 2021-07-21 @@ -30,6 +35,9 @@ import org.springframework.web.bind.annotation.RestController; public class AcsToWmsController { private final AcsToWmsService acsToWmsService; + @Autowired + private RedissonClient redissonClient; + @PostMapping("/status") @Log("ACS给WMS反馈任务状态") @ApiOperation("ACS给WMS反馈任务状态") @@ -50,8 +58,24 @@ public class AcsToWmsController { @Log("申请任务") @ApiOperation("申请任务") @SaIgnore + @SneakyThrows public ResponseEntity apply(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(acsToWmsService.apply(whereJson), HttpStatus.OK); + String type = (String) whereJson.get("type"); + RLock lock = redissonClient.getLock("acs_to_wms:" + type); + boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS); + JSONObject result = null; + try { + if (tryLock) { + result = acsToWmsService.apply(whereJson); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + + + return new ResponseEntity<>(result, HttpStatus.OK); } @PostMapping("/againApply") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index 17e9538..c9c05a9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -51,4 +51,5 @@ public interface AcsToWmsService { */ JSONObject apply(JSONObject whereJson); + } 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 c5a82d4..09b1f7b 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 @@ -35,7 +35,6 @@ import java.util.Map; @RequiredArgsConstructor @Slf4j public class AcsToWmsServiceImpl implements AcsToWmsService { - private final Object lockObj = new Object(); /** * task_id:任务标识 @@ -169,7 +168,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override @Transactional(rollbackFor = Exception.class) public JSONObject apply(JSONObject whereJson) { - synchronized (lockObj) { String type = whereJson.getString("type"); String point_code = whereJson.getString("point_code"); String vehicle_type = whereJson.getString("vehicle_type"); @@ -299,6 +297,5 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } return null; - } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/DPJCallVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/DPJCallVehicleTask.java new file mode 100644 index 0000000..351903e --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/DPJCallVehicleTask.java @@ -0,0 +1,307 @@ +package org.nl.wms.sch.tasks.autoTask; + +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.config.MapOf; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.SecurityUtils; +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.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.RegionTypeEnum; +import org.nl.wms.sch.tasks.utils.PointUpdateUtil; +import org.nl.wms.util.IdUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author: lyd + * @Description: 叠盘架自动呼叫空盘 + * @Date: 2023/5/26 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class DPJCallVehicleTask extends AbstractAcsTask { + private final String THIS_CLASS = DPJCallVehicleTask.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); + //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) + String point_code = json.getString("point_code1"); + if (ObjectUtil.isEmpty(point_code)) { + // 证明是等待点 + point_code = json.getString("point_code3"); + } + String newPoint = point_code.substring(0, 4) + "2" + 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(newPoint) + .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 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); + // 物料点 + JSONObject empty_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").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", "已取消"); + taskTab.update(taskObj); + + if (ObjectUtil.isEmpty(empty_point)) return; + // 点位解锁 + empty_point.put("lock_type", "1"); + pointTab.update(empty_point); + } + + 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")) { + //完成后 + // 物料点位解锁 并设置空位 + empty_point.put("lock_type", "1"); + empty_point.put("point_status", "1"); + empty_point.put("material_id", ""); + empty_point.put("vehicle_type", ""); + empty_point.put("vehicle_qty", ""); + empty_point.put("vehicle_code", ""); + pointTab.update(empty_point); + + // 叠盘架缓存点位更新 + JSONObject dpj_point = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0); + dpj_point.put("point_status", "2"); + dpj_point.put("vehicle_type", taskObj.getString("vehicle_type")); + dpj_point.put("vehicle_qty", taskObj.getString("vehicle_qty")); + pointTab.update(dpj_point); + + // 更改任务状态为完成 + 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 void autoCreate() { + // 自动叫料 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + // 更新点位 更新所有叠盘架B ('DPJBA','DPJQB') + String regionCodes = "('" + RegionTypeEnum.DPJQB.getCode() + + "','" + RegionTypeEnum.DPJQA.getCode() + + "')"; + Map query = new HashMap<>(); + query.put("flag", "1"); + query.put("region_code", regionCodes); + //调用ACS刷新点位状态 + JSONArray array = WQL.getWO("DPJ_AUTOTASK") + .addParamMap(query) + .process() + .getResultJSONArray(0); + PointUpdateUtil.updatePoint(array); + + // 选择一个空位 + JSONObject endPoint = WQL.getWO("DPJ_AUTOTASK") + .addParamMap(MapOf.of("flag","2", "regionCodes", regionCodes)) + .process().uniqueResult(0); + if (ObjectUtil.isEmpty(endPoint)) return; + String point_code2 = endPoint.getString("point_code"); + // 判断任务 + JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code2 + "存在未完成的任务"); + // 创建任务 + SchTaskDto dto = SchTaskDto.builder() + .task_id(IdUtil.getLongId()) + .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_type("task_type") + .task_name("空盘任务") + .acs_task_type("2")//2楼AGV普通任务 + .priority("7") + .task_status(TaskStatusEnum.SURE_END.getCode()) + .point_code2(point_code2) + .vehicle_qty(1) + .vehicle_type(endPoint.getString("can_vehicle_type")) + .handle_class(THIS_CLASS) + .create_time(DateUtil.now()) + .remark("任务创建成功") + .build(); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + taskTab.insert(json); + } + + @Override + public String createTask(JSONObject form) { + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void findStartPoint() { + // 到养生A区找起点:根据物料、载具类型去查找,均在工单中 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 + JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); + for (int i = 0; i < taskArr.size(); i++) { + JSONObject taskObj = taskArr.getJSONObject(i); + String vehicle_type = taskObj.getString("vehicle_type"); + JSONObject queryParam = new JSONObject(); + queryParam.put("flag", "3"); + queryParam.put("region_code", RegionTypeEnum.YSAQKTPQ01.getCode()); + queryParam.put("vehicle_type", vehicle_type ); + // 查找养生A区,如果最后一个位置有货,直接搬走,如果没货,就作为等待点。先让agv到达等待点 + // 1、根据载具类型去养生a区查找 + JSONObject emptyPoint = WQL.getWO("DPJ_AUTOTASK").addParamMap(queryParam).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(emptyPoint)) { + // 2、判断是否在等待点,如果不是,先去等待点,是直接搬运 + // 2.1、获取当前快排列的等待点 row:排 + JSONObject waitPoint = WQL.getWO("DPJ_AUTOTASK") + .addParamMap(MapOf.of("flag", "4", "block_num", emptyPoint.getString("block_num"), + "row_num", emptyPoint.getString("row_num"))).process() + .uniqueResult(0); + if (ObjectUtil.isEmpty(waitPoint)) throw new BadRequestException("叠盘架呼叫空托判断等待点异常!"); + // 2.2、判断等待点 + if (!waitPoint.getString("waitcol").equals(emptyPoint.getString("col_num"))) { + // 获取等待点 + JSONObject waitPoints = pointTab.query("block_num = '" + emptyPoint.getString("block_num") + "' " + + "AND row_num = '" + emptyPoint.getString("row_num") + "' " + + "AND col_num = '" + waitPoint.getString("waitcol") + "' " + + "AND is_used = '1' " + + "AND is_delete = '0' " + + "AND lock_type = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(waitPoints)) { + taskObj.put("remark", "等待点已被占用"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + continue; + } + // 等待点上锁 +// waitPoints.put("lock_type", "2"); + pointTab.update(waitPoints); + + taskObj.put("point_code3", waitPoints.getString("point_code")); + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("acs_task_type", "3"); + taskObj.put("remark", "等待点"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + continue; + } + // 是等待点直接搬走 + // 空盘点位上锁 + emptyPoint.put("lock_type", "2"); + pointTab.update(emptyPoint); + + taskObj.put("point_code1", emptyPoint.getString("point_code")); + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("vehicle_qty", emptyPoint.getString("vehicle_qty")); + taskObj.put("acs_task_type", "2"); + taskObj.put("remark", "等待点搬运空盘"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } else { + taskObj.put("remark", "养生A区无所需空盘"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } + + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String againApply(String task_id) { + // 二次下发任务 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 + JSONObject hcTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(hcTask)) throw new BadRequestException("任务ID: " + task_id + "的任务不存在!"); + JSONObject waitPoint = pointTab.query("point_code = '" + hcTask.getString("point_code3") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(waitPoint)) throw new BadRequestException("叠盘架二次下发等待点编码错误!"); + JSONObject materialPoint = WQL.getWO("DPJ_AUTOTASK").addParamMap(MapOf.of( + "flag", "5", "region_code", RegionTypeEnum.YSAQKTPQ01.getCode(), + "vehicle_type", hcTask.getString("vehicle_type"), + "block_num", hcTask.getString("block_num"), "col_num", hcTask.getString("col_num") + )).process().uniqueResult(0); + if (ObjectUtil.isEmpty(materialPoint)) throw new BadRequestException("养生A空托盘区暂无所需托盘!"); + String pointCode = materialPoint.getString("point_code"); + // 修改任务 + hcTask.put("point_code1", pointCode); + hcTask.put("remark", "养生A区:" + pointCode); + taskTab.update(hcTask); + // 锁住点位 + materialPoint.put("lock_type", "2"); + pointTab.update(materialPoint); + // 点位处理 + //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1)2812 + String newPoint = pointCode.substring(0, 4) + "2" + pointCode.substring(4, 10); + return newPoint; + } + + @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.isEmpty(taskObj)) throw new BadRequestException("未找到该任务或者任务已完成!"); + this.updateTaskStatus(taskObj,"2"); + } + + @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.isEmpty(taskObj)) throw new BadRequestException("任务已完成不能取消!"); + this.updateTaskStatus(taskObj,"0"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/wql/DPJ_AUTOTASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/wql/DPJ_AUTOTASK.wql new file mode 100644 index 0000000..61e196a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/wql/DPJ_AUTOTASK.wql @@ -0,0 +1,155 @@ +[交易说明] + 交易名: 共挤线申请空盘 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.vehicle_type TYPEAS s_string + 输入.regionCodes TYPEAS f_string +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + point_code as device_code + FROM + SCH_BASE_Point + WHERE + 1=1 + OPTION 输入.regionCodes <> "" + region_code IN 输入.regionCodes + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + p.* + FROM + SCH_BASE_Point p + WHERE + p.region_code IN 输入.regionCodes + AND p.point_status = '1' + AND p.lock_type = '1' + AND p.is_used = '1' + AND p.is_delete = '0' + AND p.vehicle_qty = '0' + AND p.point_code NOT IN ( SELECT t.point_code2 FROM sch_base_task t WHERE t.point_code2 IN ( + SELECT point_code FROM sch_base_point p2 WHERE p2.region_code IN 输入.regionCodes + ) AND task_status <> '7') + ORDER BY p.point_code + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + p.point_id, + p.point_code, + p.point_name, + p.block_num, + p.col_num, + p.row_num + FROM + SCH_BASE_Point p + WHERE + p.is_used = '1' + AND is_delete = '0' + AND point_status = '2' + AND lock_type='1' + OPTION 输入.region_code <> "" + p.region_code = 输入.region_code + ENDOPTION + OPTION 输入.vehicle_type <> "" + p.can_vehicle_type = 输入.vehicle_type + ENDOPTION + ORDER BY block_num,col_num desc,row_num + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + MAX(p.col_num) waitCol + FROM + SCH_BASE_Point p + WHERE + 1 = 1 + OPTION 输入.block_num <> "" + p.block_num = 输入.block_num + ENDOPTION + OPTION 输入.row_num <> "" + p.row_num = 输入.row_num + ENDOPTION + AND p.is_used = '1' + AND p.is_delete = '0' + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + p.point_id, + p.point_code, + p.point_name, + p.block_num, + p.col_num, + p.row_num + FROM + SCH_BASE_Point p + WHERE + p.is_used = '1' + AND is_delete = '0' + AND lock_type='1' + OPTION 输入.region_code <> "" + p.region_code = 输入.region_code + ENDOPTION + OPTION 输入.vehicle_type <> "" + p.vehicle_type = 输入.vehicle_type + ENDOPTION + OPTION 输入.col_num <> "" + p.col_num = 输入.col_num + ENDOPTION + OPTION 输入.row_num <> "" + p.row_num = 输入.row_num + ENDOPTION + ORDER BY block_num,col_num desc,row_num + ENDSELECT + ENDQUERY + ENDIF + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java index 42c31fd..dcc9d82 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java @@ -197,6 +197,8 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { Map query = new HashMap<>(); query.put("flag", "2"); query.put("region_code", RegionTypeEnum.DPJQB.getCode()); + + //调用ACS刷新点位状态 JSONArray array = WQL.getWO("QSCH_GjxCallEmpVehicleTask") .addParamMap(query) .process() @@ -235,6 +237,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { // 判断叠盘架是否有任务 boolean is_point = this.isTask(jsonDpjStart2.getString("point_code")); + //有任务 if (!is_point) continue; // 找叠盘架暂存位是否有空托盘 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java index 20c258b..8a662a9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java @@ -405,7 +405,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { // 2、没有就直接找个位置 JSONObject inOrderSeqDesc = 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_order_seq desc").uniqueResult(0); + "and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'", "in_order_seq asc").uniqueResult(0); if (ObjectUtil.isNotEmpty(inOrderSeqDesc)) end_code = inOrderSeqDesc.getString("point_code"); } } 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 ddba35e..17afca2 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 @@ -270,15 +270,21 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask { end_code = jsonZcwEnd.getString("point_code"); } else { // 为空就去养生A区的等待位 - JSONObject jsonEmpWait = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and col_num = '1' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'").uniqueResult(0); - - if (ObjectUtil.isNotEmpty(jsonEmpWait)) { - // 判断是否有任务 - boolean is_point = this.isTask(jsonEmpWait.getString("point_code")); - if (is_point) { - JSONArray jsonEmpArr = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and row_num = '" + jsonEmpWait.getString("row_num") + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'").getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(jsonEmpArr)) end_code = jsonEmpWait.getString("point_code"); - } +// JSONObject jsonEmpWait = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and col_num = '1' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(jsonEmpWait)) { +// // 判断是否有任务 +// boolean is_point = this.isTask(jsonEmpWait.getString("point_code")); +// if (is_point) { +// JSONArray jsonEmpArr = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and row_num = '" + jsonEmpWait.getString("row_num") + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'").getResultJSONArray(0); +// if (ObjectUtil.isNotEmpty(jsonEmpArr)) end_code = jsonEmpWait.getString("point_code"); +// } +// } + // 为空就去养生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); + // 判断是否有任务 + boolean is_point = this.isTask(endPointObj.getString("point_code")); + if (is_point) { + end_code = endPointObj.getString("point_code"); } } } @@ -289,15 +295,22 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask { end_code = jsonZcwEnd.getString("point_code"); } else { // 为空就去养生A区的等待位 - JSONObject jsonEmpWait = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and col_num = '1' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'").uniqueResult(0); - - if (ObjectUtil.isNotEmpty(jsonEmpWait)) { - // 判断是否有任务 - boolean is_point = this.isTask(jsonEmpWait.getString("point_code")); - if (is_point) { - JSONArray jsonEmpArr = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and row_num = '" + jsonEmpWait.getString("row_num") + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'").getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(jsonEmpArr)) end_code = jsonEmpWait.getString("point_code"); - } +// JSONObject jsonEmpWait = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and col_num = '1' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'").uniqueResult(0); +// +// if (ObjectUtil.isNotEmpty(jsonEmpWait)) { +// // 判断是否有任务 +// boolean is_point = this.isTask(jsonEmpWait.getString("point_code")); +// if (is_point) { +// JSONArray jsonEmpArr = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and row_num = '" + jsonEmpWait.getString("row_num") + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0' and point_status = '1'").getResultJSONArray(0); +// if (ObjectUtil.isNotEmpty(jsonEmpArr)) end_code = jsonEmpWait.getString("point_code"); +// } +// } + // 为空就去养生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); + // 判断是否有任务 + boolean is_point = this.isTask(endPointObj.getString("point_code")); + if (is_point) { + end_code = endPointObj.getString("point_code"); } } }