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 fa982c7..0ba262b 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 @@ -121,19 +121,21 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @LokiLog(type = LokiLogType.ACS_TO_LMS) @Override public String againApply(String task_id) { + log.info("输入参数:"+task_id); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + String point_code = ""; try { Class clz = Class.forName(jsonTask.getString("handle_class")); Object obj = clz.newInstance(); - Method m = obj.getClass().getDeclaredMethod("againApply", JSONObject.class, String.class); - Object invoke = m.invoke(task_id); + Method m = obj.getClass().getDeclaredMethod("againApply",String.class); + point_code = (String) m.invoke(obj,task_id); } catch (Exception e) { } - - return null; + log.info("输出参数:"+point_code); + return point_code; } @LokiLog(type = LokiLogType.ACS_TO_LMS) @@ -295,28 +297,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { 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); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - if (StrUtil.equals(jsonTask.getString("task_status"), "4")) { - // 起点终点确定则下发 -// JSONObject jsonObject = taskBean.renotifyAcs(task_id); - JSONObject jsonObject=new JSONObject(); - if (StrUtil.equals(jsonObject.getString("status"), "200")) { - // 更新任务状态 - jsonTask.put("task_status", TaskStatusEnum.ISSUE.getCode()); - taskTab.update(jsonTask); - // 更新终点点位状态 - JSONObject jsonEndPoint = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); - jsonEndPoint.put("lock_type", "2"); - pointTab.update(jsonEndPoint); - } else { - throw new BadRequestException(jsonObject.getString("message")); - } - } - } else if (StrUtil.equals(type, "7")) { JSONObject param = new JSONObject(); param.put("point_code1", point_code); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index 1f64773..c295be7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -38,7 +38,7 @@ public abstract class AbstractAcsTask { /** * @param taskObj 代表一条任务对象 - * @param status 代表wcs任务完成状态: //1:执行中,2:完成 ,3:acs取消 + * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 * @return * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 * @author ldjun @@ -131,7 +131,7 @@ public abstract class AbstractAcsTask { * @param task_id: 任务标识 * @return 二次申请的点位 */ - String againApply(String task_id) { + public String againApply(String task_id) { return null; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java index 4b8810a..c76d653 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java @@ -1,8 +1,10 @@ package org.nl.wms.sch.tasks; +import lombok.Builder; import lombok.Data; @Data +@Builder public class AcsTaskDto { //任务标识 private String task_id; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/CallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/CallMaterialTask.java index 3f2d946..c1c5623 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/CallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/CallMaterialTask.java @@ -218,7 +218,7 @@ public class CallMaterialTask extends AbstractAcsTask { JSONArray tasks = taskTab.query("handle_class = '" + this.getClass().getName() + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); List arr = new ArrayList<>(); for (int i = 0, j = tasks.size(); i < j; i++) { - JSONObject json = tasks.getJSONObject(i); + /*JSONObject json = tasks.getJSONObject(i); AcsTaskDto taskDto = new AcsTaskDto(); taskDto.setTask_id(json.getString("task_id")); taskDto.setTask_code(json.getString("task_code")); @@ -227,7 +227,7 @@ public class CallMaterialTask extends AbstractAcsTask { taskDto.setStart_device_code(json.getString("point_code1")); taskDto.setNext_device_code(json.getString("point_code2")); taskDto.setVehicle_code(json.getString("vehicle_code")); - arr.add(taskDto); + arr.add(taskDto);*/ } return arr; } 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 59ca168..0762f9f 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; 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; @@ -12,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; 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; @@ -19,6 +21,7 @@ import org.nl.wms.sch.tasks.RegionTypeEnum; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; @Service @@ -27,8 +30,6 @@ import java.util.List; public class HtSendEmpVehicleTask extends AbstractAcsTask { private final String THIS_CLASS = HtSendEmpVehicleTask.class.getName(); - - @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { @@ -40,6 +41,21 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { if (StrUtil.equals(status, "0")) { // 取消删除任务 + if (StrUtil.equals(jsonTask.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { + throw new BadRequestException("已完成不能取消!"); + } + String point_code3 = jsonTask.getString("point_code3"); + String point_code2 = jsonTask.getString("point_code2"); + if (ObjectUtil.isNotEmpty(point_code3)) { + JSONObject jsonPoint3 = pointTab.query("point_code ='" + point_code3 + "'").uniqueResult(0); + jsonPoint3.put("point_status", "1"); + pointTab.update(jsonPoint3); + } + if (ObjectUtil.isNotEmpty(point_code2)) { + JSONObject jsonPoint2 = pointTab.query("point_code ='" + point_code2 + "'").uniqueResult(0); + jsonPoint2.put("point_status", "1"); + pointTab.update(jsonPoint2); + } taskTab.delete("task_id = '" + task_id + "'"); } @@ -62,6 +78,10 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { // 更新终点:判断point_code3是否为空,为空就更新point_code2 if (ObjectUtil.isNotEmpty(point_code3)) { point_code = point_code3; + // 更新point_code2:解锁 + JSONObject point2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + point2.put("lock_type", "1"); + pointTab.update(point2); } else { point_code = jsonTask.getString("point_code2"); } @@ -79,6 +99,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { pointTab.update(endPoint); } else {//非叠盘架 endPoint.put("lock_type", "1"); + endPoint.put("vehicle_code", jsonTask.getString("vehicle_code")); endPoint.put("vehicle_qty", jsonTask.getString("vehicle_qty")); endPoint.put("vehicle_type", jsonTask.getString("vehicle_type")); endPoint.put("point_status", "2"); @@ -91,132 +112,42 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { @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"); // 点位表 - WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_vehicle"); // 载具表 - String qty = form.getString("qty"); String point_code1 = form.getString("point_code1"); - String point_code2 = ""; - String task_id = ""; - - JSONObject jsonVehicle = vehicleTab.query("vehicle_code = '" + form.getString("vehicle_code") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonVehicle)) throw new BadRequestException("此载具号不存在"); - - // 1.判断货梯是否有任务,如果有生成起点确定的任务 - // 空托盘一楼到二楼固定点位:SSX01A1 , SSX02A1 - - //判断SSX01A1是否有任务没有则判断其他的三个点位 - boolean ssx_1 = this.isTask("SSX01A1"); - if (ssx_1) { - String like = "SSX01%"; - - JSONArray taskArrNum = new JSONArray(); - JSONArray pointArr = pointTab.query("region_id = '" + RegionTypeEnum.SSX.getId() + "' and is_used = '1' and is_delete = '0' and point_code like '" + like + "'").getResultJSONArray(0); - - for (int i = 0; i < pointArr.size(); i++) { - JSONObject json = pointArr.getJSONObject(i); - boolean is_empTask = this.isTask(json.getString("point_code")); - - if (!is_empTask) taskArrNum.add(json); - } - - if (taskArrNum.size() > 0) { - - } else { - point_code2 = "SSX01A1"; - } - } - - // 判断SSX02A1是否有任务没有则判断其他的三个点位 - if (ObjectUtil.isEmpty(point_code2)) { - boolean ssx_2 = this.isTask("SSX02A1"); - if (ssx_2) { - String like = "SSX02%"; - - JSONArray taskArrNum = new JSONArray(); - JSONArray pointArr = pointTab.query("region_id = '" + RegionTypeEnum.SSX.getId() + "' and is_used = '1' and is_delete = '0' and point_code like '" + like + "'").getResultJSONArray(0); - - for (int i = 0; i < pointArr.size(); i++) { - JSONObject json = pointArr.getJSONObject(i); - boolean is_empTask = this.isTask(json.getString("point_code")); - - if (!is_empTask) taskArrNum.add(json); - } - - if (taskArrNum.size() > 0) { - - } else { - point_code2 = "SSX02A1"; - } - } - } - - // 如果此时point_code2为空则生成起点确认的任务 - if (ObjectUtil.isEmpty(point_code2)) { - JSONObject param = new JSONObject(); - param.put("task_status", "2"); - param.put("point_code1", point_code1); - param.put("vehicle_type", jsonVehicle.getString("vehicle_type")); - param.put("vehicle_qty", qty); - param.put("vehicle_code", jsonVehicle.getString("vehicle_code")); - param.put("acs_task_type", "1"); - task_id = this.pubCreateTask(param); - } else { - // 说明货梯无任务:找终点 - JSONObject param = new JSONObject(); - param.put("vehicle_type", jsonVehicle.getString("vehicle_type")); - param.put("qty", qty); - String endPoint = this.endPoint(param); - - // 如果终点为空则创建起点确定的任务 - if (ObjectUtil.isEmpty(endPoint)) { - JSONObject param2 = new JSONObject(); - param2.put("task_status", "2"); - param2.put("point_code1", point_code1); - param2.put("vehicle_type", jsonVehicle.getString("vehicle_type")); - param2.put("vehicle_qty", qty); - param2.put("vehicle_code", jsonVehicle.getString("vehicle_code")); - param.put("acs_task_type", "1"); - task_id = this.pubCreateTask(param2); - } else { - // 不为空则创建到养生A区等待点的任务 - - // 处理终点编码:入在第一个 '-'前加1,出在第一个 '-'前加2 -// String sub_1 = endPoint.substring(0, endPoint.indexOf("-")); -// String sub_2 = endPoint.substring(endPoint.indexOf("-"), endPoint.length()); - JSONObject param2 = new JSONObject(); - param2.put("task_status", "4"); - param2.put("point_code1", point_code1); - param2.put("point_code2", endPoint); - param2.put("vehicle_type", jsonVehicle.getString("vehicle_type")); - param2.put("vehicle_qty", qty); - param2.put("vehicle_code", jsonVehicle.getString("vehicle_code")); - param.put("acs_task_type", "1"); - task_id = this.pubCreateTask(param2); - - // 锁定终点 - JSONObject jsonEnd = pointTab.query("point_code = '" + endPoint + "'").uniqueResult(0); - jsonEnd.put("lock_type", "2"); - pointTab.update(jsonEnd); - } - } - return task_id; + SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId()) + .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_type("") + .task_status(TaskStatusEnum.SURE_START.getCode()) + .point_code1(point_code1) + .vehicle_code(form.getString("vehicle_code")) + .vehicle_type(form.getString("vehicle_type")) + .vehicle_qty(form.getIntValue("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()); } - /** - * @return - * @discription 确定下一点位 - * @author ldjun - * @created 2020年6月12日 下午6:01:06 - */ @Override public void findNextPoint() { + /* + * 根据业务找对应的终点 + */ 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 = '2'").getResultJSONArray(0); + JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '2'").getResultJSONArray(0); for (int i = 0; i < taskArr.size(); i++) { JSONObject jsonTask = taskArr.getJSONObject(i); String point_code_ht = ""; @@ -298,6 +229,9 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { + /* + * 强制完成 + */ JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); } @@ -371,32 +305,11 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { return end_code; } - @Transactional(rollbackFor = Exception.class) - public String pubCreateTask(JSONObject param) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - - JSONObject jsonTask = new JSONObject(); - jsonTask.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); - jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - jsonTask.put("task_type", ""); - jsonTask.put("task_status", param.getString("task_status")); - jsonTask.put("point_code1", param.getString("point_code1")); - jsonTask.put("point_code2", param.getString("point_code2")); - jsonTask.put("vehicle_type", param.getString("vehicle_type")); - jsonTask.put("vehicle_qty", param.getString("vehicle_qty")); - jsonTask.put("vehicle_code", param.getString("vehicle_code")); - jsonTask.put("priority", "1"); - jsonTask.put("handle_class", THIS_CLASS); - jsonTask.put("sort_seq", "1"); - jsonTask.put("acs_task_type", param.getString("acs_task_type")); - jsonTask.put("create_time", DateUtil.now()); - taskTab.insert(jsonTask); - return jsonTask.getString("task_id"); - } - @Transactional(rollbackFor = Exception.class) public boolean isTask(String point_code) { - + /* + * 判断点位是否有任务存在 + */ WQLObject tab = WQLObject.getWQLObject("SCH_BASE_Task"); boolean result; @@ -416,7 +329,12 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { } @Transactional(rollbackFor = Exception.class) + @Override public String againApply(String task_id) { + /* + * 再次下发任务处理方法 + * 涉及业务:入空载具、出空载具、入物料、出物料 + */ WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位表 @@ -430,7 +348,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { JSONObject jsonOnePoint = pointTab.query("region_id = '" + jsonPoint2.getString("region_id") + "' and block_num = '" + jsonPoint2.getString("block_num") + "' and col_num = '" + jsonPoint2.getString("col_num") + - "' and point_code <> '"+jsonPoint2.getString("point_code")+ + "' and point_code <> '" + jsonPoint2.getString("point_code") + "' and point_status = '2' order by in_empty_seq ASC").uniqueResult(0); // 如果为空说明这一列其他货位为空 则入到最后一个货位 @@ -438,10 +356,14 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { JSONObject jsonEmpPoint = pointTab.query("region_id = '" + jsonPoint2.getString("region_id") + "' and block_num = '" + jsonPoint2.getString("block_num") + "' and col_num = '" + jsonPoint2.getString("col_num") + - "' and point_code <> '"+jsonPoint2.getString("point_code")+ + "' and point_code <> '" + jsonPoint2.getString("point_code") + "' and point_status = '1' order by in_empty_seq DESC").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonEmpPoint)) point_code = jsonEmpPoint.getString("point_code"); + if (ObjectUtil.isNotEmpty(jsonEmpPoint)) { + point_code = jsonEmpPoint.getString("point_code"); + jsonTask.put("point_code3", point_code); + taskTab.update(jsonTask); + } } else { // 找前一位的空位 double in_empty_seq = NumberUtil.sub(jsonOnePoint.getIntValue("in_empty_seq"), 1); @@ -449,17 +371,46 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { JSONObject jsonEmpPoint = pointTab.query("region_id = '" + jsonPoint2.getString("region_id") + "' and block_num = '" + jsonPoint2.getString("block_num") + "' and col_num = '" + jsonPoint2.getString("col_num") + - "' and point_code <> '"+jsonPoint2.getString("point_code")+ - "' and in_empty_seq = '"+ in_empty_seq + + "' and point_code <> '" + jsonPoint2.getString("point_code") + + "' and in_empty_seq = '" + in_empty_seq + "' and point_status = '1'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonEmpPoint)) point_code = jsonEmpPoint.getString("point_code"); + if (ObjectUtil.isNotEmpty(jsonEmpPoint)) { + point_code = jsonEmpPoint.getString("point_code"); + jsonTask.put("point_code3", point_code); + taskTab.update(jsonTask); + } } + JSONObject jsonEndPoint = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); + jsonEndPoint.put("lock_type", "2"); + pointTab.update(jsonEndPoint); return point_code; } + @Override public List addTask() { - return null; + /* + * 下发给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 resultList = 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("task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code3")) + .vehicle_code(json.getString("vehicle_code")) + .vehicle_type(json.getString("vehicle_type")) + .priority(json.getString("priority")) + .remark(json.getString("remark")) + .build(); + resultList.add(dto); + } + return resultList; } }