From 45315570f773ed64462a7c55bc1fc90db32c0cfd Mon Sep 17 00:00:00 2001 From: ldj_willow Date: Mon, 24 Oct 2022 14:17:11 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/nl/wms/wms.xls | Bin 248320 -> 248320 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index 76f68ae9d83b14aa9662401f7de03440ec0f4fdf..f61ccf4ae429a168e7d309250f1220e17d74eaf6 100644 GIT binary patch delta 3227 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 >!c=o5IqW8~Mf*wvvqk-;=_MoKq${ zKYj%7=2|KncF)mP{|8*K9vFO#v;1@_t9SmIz>AOw>-pTDFqyl(ED3+ZS9sZaA2J(M zfgOG*S5<)nK0&j*$|(Q3mn9AWZX-3pTusc3<i;8wab>TU3{?9jNg!%6r(Rb8Z0TMG_8lE{*I%w3e?1xO@TQB_A8XK|c1 zMsU@U#s!62=+jcAT?ba!r*Ip6N>vW)D8&g}66JEhi})+K$!Wypq{{#QNra~cC}uI3 zBIf)`VWXa69s`FWswY$D(5b}h$<&Y(ucwr!;m@>6n5`#MCT^o>%&n~_Q>Uoz&eon* zTPp@%Xbu!g(FPK=>SJ+tk3pUay^&1p#C#QcW7I^W4E-t(`dCVmnQ`O7 zjQ9JPzq>%uG)WqI&&oY&iqbSm8hR@$+}yh+*^7BXnk27zLYk3cxndA=`2?3 zg0yZHN>md;YQlJr1!WWFum__}1Q#_Clug9ZYC#_)`dL0q^ltI@UFhF0>C5;`2J3gP zR^S5?Ea$;YmV#IL=1dmu9>$-lacrfh7WS$d$5wLWloQ`dj$HU2^)HTJD>+I~xD5`V z8EY#!T7trnkZ&bN!}xO*Yb%dD%#xS4i5%%#BV%l%7>Dr}O1w>q|BMH-SQEa+4`;E0 z-dT8;ss&w$o-%e_SqMeL3dyicYoTaZp+#YZ7KIfOVJ&z|31XK4u)%KC#cq&3KU z{A{~>twKL9(a-X?{j6_b4Ca-wc7mtj17)n8j2W+{b}}{%<`HfuVgD4It&OiB~{wdE}Co-^>FG7%;dR`!uH5hfGQ$<)GR;`{J#;NKfX zk5_Dz*uXG}9#YR8Fb+5Q+$iRCR?1E3khA@%BJLn!#O1_M1(!~?v65qOqw&Stx@mOuXv=EheL3DH9ZmD3w?#Y*-i z`%F56vHXQ!hxF;suzy!M9n-caY1=lf<(cQS zG=1fH?J{DB|Lq4_0lT+{dtcJN!$QDMy`-H&&ItJnEU%Sua1 vidL7F6qVPN)>agXYrX#AMeUoYM<%s7=7iAobn$-zZE(LeN00nOi`f1P@_(Ie From 352bc7049965842e8f2b554bac52674390e9361b Mon Sep 17 00:00:00 2001 From: ldj_willow Date: Mon, 24 Oct 2022 14:20:16 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E8=A1=A8=E7=BB=93=E6=9E=84=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/wms/sch/SchTaskDto.java | 2 ++ .../src/main/java/org/nl/wms/wms.xls | Bin 248320 -> 285184 bytes 2 files changed, 2 insertions(+) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/SchTaskDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/SchTaskDto.java index a59f5eb..38de98a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/SchTaskDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/SchTaskDto.java @@ -102,6 +102,8 @@ public class SchTaskDto implements Serializable { * 任务顺序号 */ private Integer sort_seq; + //物料数量 + private Integer material_qty; /** * 任务完成类型 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index f61ccf4ae429a168e7d309250f1220e17d74eaf6..02b9b58258dfcd14dbff6eb5054e72a66f1af417 100644 GIT binary patch delta 47519 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 delta 16994 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 From c88cedf4f80f31053fd9badba7500a7aa24076a9 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 24 Oct 2022 14:30:21 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acs/service/impl/AcsToWmsServiceImpl.java | 5 +- .../tasks/sendEmpty/HtSendEmpVehicleTask.java | 18 +- .../tasks/sendEmpty/SendEmpVehicleTask.java | 279 --------------- .../sendEmpty/YqxSendEmpVehicleTask.java | 338 ++++++++++++++---- 4 files changed, 280 insertions(+), 360 deletions(-) delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/SendEmpVehicleTask.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 cfb62b7..936786d 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 @@ -259,12 +259,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } else if (StrUtil.equals(type, "5")) { // 5.油漆线空盘入库: 调用空托盘入库处理类创建任务 - if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("点位不能为空"); + if (ObjectUtil.isEmpty(qty)) throw new BadRequestException("数量不能为空"); if (ObjectUtil.isEmpty(vehicle_type)) throw new BadRequestException("载具类型不能为空"); JSONObject param = new JSONObject(); param.put("point_code1", point_code); - param.put("vehicle_num", vehicle_num); + param.put("qty", qty); param.put("vehicle_type", vehicle_type); // 创建任务 YqxSendEmpVehicleTask taskBean = SpringContextHolder.getBean(YqxSendEmpVehicleTask.class); 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 d10d99b..bd6770a 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 @@ -83,6 +83,9 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { // 更新point_code2:解锁 JSONObject point2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); point2.put("lock_type", "1"); + point2.put("vehicle_type", ""); + point2.put("vehicle_code", ""); + point2.put("vehicle_qty", 0); pointTab.update(point2); } else { point_code = jsonTask.getString("point_code2"); @@ -351,7 +354,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { "' and block_num = '" + jsonPoint2.getString("block_num") + "' and col_num = '" + jsonPoint2.getString("col_num") + "' and point_code <> '" + jsonPoint2.getString("point_code") + - "' and point_status = '2' order by in_empty_seq ASC").uniqueResult(0); + "' and point_status = '2' and lock_type = '1' order by in_empty_seq ASC").uniqueResult(0); // 如果为空说明这一列其他货位为空 则入到最后一个货位 if (ObjectUtil.isEmpty(jsonOnePoint)) { @@ -359,7 +362,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { "' and block_num = '" + jsonPoint2.getString("block_num") + "' and col_num = '" + jsonPoint2.getString("col_num") + "' and point_code <> '" + jsonPoint2.getString("point_code") + - "' and point_status = '1' order by in_empty_seq DESC").uniqueResult(0); + "' and point_status = '1' and lock_type = '1' order by in_empty_seq DESC").uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonEmpPoint)) { point_code = jsonEmpPoint.getString("point_code"); @@ -375,7 +378,7 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { "' and col_num = '" + jsonPoint2.getString("col_num") + "' and point_code <> '" + jsonPoint2.getString("point_code") + "' and in_empty_seq = '" + in_empty_seq + - "' and point_status = '1'").uniqueResult(0); + "' and point_status = '1' and lock_type = '1'").uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonEmpPoint)) { point_code = jsonEmpPoint.getString("point_code"); @@ -383,9 +386,12 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { taskTab.update(jsonTask); } } - JSONObject jsonEndPoint = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); - jsonEndPoint.put("lock_type", "2"); - pointTab.update(jsonEndPoint); + + if (ObjectUtil.isNotEmpty(point_code)) { + JSONObject jsonEndPoint = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); + jsonEndPoint.put("lock_type", "2"); + pointTab.update(jsonEndPoint); + } return point_code; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/SendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/SendEmpVehicleTask.java deleted file mode 100644 index b375615..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/SendEmpVehicleTask.java +++ /dev/null @@ -1,279 +0,0 @@ -package org.nl.wms.sch.tasks.sendEmpty; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -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.modules.wql.util.SpringContextHolder; -import org.nl.wms.basedata.service.VehicleService; -import org.nl.wms.basedata.service.dto.VehicleDto; -import org.nl.wms.pdm.service.DeviceService; -import org.nl.wms.pdm.service.dto.DeviceDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.service.PointService; -import org.nl.wms.sch.service.dto.PointDto; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.RegionTypeEnum; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.HashMap; -import java.util.List; - -@Service -@RequiredArgsConstructor -@Slf4j -public class SendEmpVehicleTask extends AbstractAcsTask { - private final String THIS_CLASS = SendEmpVehicleTask.class.getName(); - - - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - - String task_id = taskObj.getString("task_id"); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - if (StrUtil.equals(status,"0")) { - // 取消删除任务 - taskTab.delete("task_id = '"+task_id+"'"); - } - - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - // 更新任务状态为执行中 - 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, TaskStatusEnum.FINISHED.getCode())) { - // 更改任务状态为完成 - jsonTask.put("task_status",TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); - jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); - jsonTask.put("update_time", DateUtil.now()); - taskTab.update(jsonTask); - - String point_code1 = jsonTask.getString("point_code1"); - - PointService point = SpringContextHolder.getBean(PointService.class); - // 校验起点是否存在 - PointDto startDto = point.findByCode(point_code1); - if (ObjectUtil.isEmpty(startDto)) throw new BadRequestException("未找到可用点位:" + startDto); - // 校验终点是否存在 - PointDto nextDto = point.findByCode(jsonTask.getString("point_code2")); - if (ObjectUtil.isEmpty(nextDto)) throw new BadRequestException("未找到可用点位:" + nextDto); - - } - } - - - - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - - String point_code1 = form.getString("point_code1"); - String point_code2 = form.getString("point_code2"); - String vehicle_code = form.getString("vehicle_code"); - String qty = form.getString("qty"); - String record_uuid = form.getString("record_uuid"); - - String vehicle_type = ""; - // 入库起点不能为空 - if (ObjectUtil.isEmpty(point_code1)) { - throw new BadRequestException("起点不能为空"); - } else { - // 判断起点是否有正在执行的任务 - JSONObject beforTaskObj = taskTab.query("is_delete='0' and point_code1='" + point_code1 + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(beforTaskObj)) throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); - } - // 载具数量不能为空 - if (ObjectUtil.isEmpty(qty)) throw new BadRequestException("载具数量不能为空"); - - /* - * 1. 点对点: 起点和终点都确定,直接创建任务 - * 2. 起点确定: 需要找到对应终点,在创建任务 具体找终点货位的规则在findEndPoint()中 - */ - // 起点确定:找终点 - if (ObjectUtil.isEmpty(point_code2)) { - JSONObject param = new JSONObject(); - param.put("point_code1",point_code1); - param.put("vehicle_qty",qty); - param.put("vehicle_code",vehicle_code); - JSONObject json = this.findEndPoint(param); - point_code2 = json.getString("EndPoint_code"); - vehicle_type = json.getString("vehicle_type"); - } else { - // 判断终点是否是空位 - JSONObject jsonPoint = pointTab.query("point_code = '" + point_code2 + "' and lock_type = '00' and point_status <> '02' and is_delete = '0' and is_used = '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPoint)) throw new BadRequestException("终点点位不不可用或不存在"); - } - // 创建任务 - JSONObject jsonTask = new JSONObject(); - String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - - jsonTask.put("task_id", task_id); - - jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - jsonTask.put("task_type", "03"); - jsonTask.put("task_status", "01"); - jsonTask.put("point_code1", point_code1); - jsonTask.put("point_code2", point_code2); - jsonTask.put("vehicle_type", vehicle_type); - jsonTask.put("vehicle_code", vehicle_code); - jsonTask.put("handle_class", THIS_CLASS); - jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); - jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); - jsonTask.put("create_time", DateUtil.now()); - jsonTask.put("acs_task_type", "1"); - taskTab.insert(jsonTask); - - // 锁定终点点位 - JSONObject jsonPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - jsonPoint.put("lock_type", "02"); - pointTab.update(jsonPoint); - - - return task_id; - } - - @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()); - } - - - - @Override - public void cancel(String task_id) { - - } - - @Transactional(rollbackFor = Exception.class) - public JSONObject findEndPoint(JSONObject json) { - String point_code1 = json.getString("point_code1"); - String vehicle_qty = json.getString("vehicle_qty"); - String vehicle_code = json.getString("vehicle_code"); - - if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("起点不能为空"); - if (ObjectUtil.isEmpty(vehicle_qty)) throw new BadRequestException("载具数量不能为空"); - - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 - WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); // 区域表 - WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); //空载具记录表 - WQLObject velicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); // 载具表 - // 根据起点区域判断优先的终点区域 - JSONObject jsonPointStart = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPointStart)) throw new BadRequestException("起点点位不存在"); - JSONObject jsonRegionStart = regionTab.query("region_id ='" + jsonPointStart.getString("region_id") + "'").uniqueResult(0); - - // 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型 - String device_code = ""; - if (ObjectUtil.isEmpty(vehicle_code)) { - device_code = point_code1.substring(0, point_code1.indexOf("_")); - } - - String vehicle_type = ""; - - DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); - DeviceDto deviceDto = deviceBean.findByCode(device_code); - if (ObjectUtil.isEmpty(deviceDto)) { - // 如果说明是货梯业务:则判断载具号是否为空 - if (ObjectUtil.isEmpty(vehicle_code)) throw new BadRequestException("起点点位错误"); - // 根据载具号找对应的载具类型 - VehicleDto vehicleDto = SpringContextHolder.getBean(VehicleService.class).findByCode(vehicle_code); - if (ObjectUtil.isEmpty(vehicleDto)) throw new BadRequestException("载具不存在"); - vehicle_type = vehicleDto.getVehicle_type(); - } else { - // 不为空说明不是货梯业务:则根据工单找到对应类型 - JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); - vehicle_type = jsonOrder.getString("vehicle_type"); - } - - /* - * 空托盘入库业务: - * 1.油漆线 --> 叠盘架A区、养生区A区 (优先级:1叠盘架A区 2.养生A区) - * 2.货梯 --> 叠盘架B区、养生区A区 (优先级:1叠盘架B区 2.养生A区) - */ - String EndPoint_code = ""; - HashMap map = new HashMap<>(); - if (StrUtil.equals(jsonRegionStart.getString("region_code"), RegionTypeEnum.YQQY.getCode())) { - // 油漆线入库:查找叠盘架A区是否有满足的空位 - map.put("flag", "1"); - map.put("vehicle_qty",vehicle_qty); - map.put("vehicle_type",vehicle_type); - map.put("region_code",RegionTypeEnum.DPJQA.getCode()); - JSONObject jsonEndPointDPA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonEndPointDPA)) { - EndPoint_code = jsonEndPointDPA.getString("point_code"); - } else { - // 为空说明没有相同的载具类型 - map.put("flag", "2"); - map.put("vehicle_type",""); - JSONObject jsonEndPointDPA2 = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonEndPointDPA2)) { - EndPoint_code = jsonEndPointDPA2.getString("point_code"); - } else { - // 为空说明叠盘架A区上货位不足,则需要入库到养生A区 - map.put("flag", "3"); - map.put("region_code",RegionTypeEnum.YSQA.getCode() ); - JSONObject jsonEndPointYSA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(jsonEndPointYSA)) throw new BadRequestException("没有满足需求的空位"); - EndPoint_code = jsonEndPointYSA.getString("point_code"); - } - } - } else { - // 货梯入库:查找叠盘架B区是否有满足的空位 - map.put("flag", "1"); - map.put("vehicle_qty",vehicle_qty); - map.put("vehicle_type",vehicle_type); - map.put("region_code",RegionTypeEnum.DPJQB.getCode()); - JSONObject jsonEndPointDPB = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonEndPointDPB)) { - EndPoint_code = jsonEndPointDPB.getString("point_code"); - } else { - // 为空说明没有相同的载具类型 - map.put("flag", "2"); - map.put("vehicle_type",""); - JSONObject jsonEndPointDPB2 = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonEndPointDPB2)) { - EndPoint_code = jsonEndPointDPB2.getString("point_code"); - } else { - // 为空说明叠盘架B区上货位不足,则需要入库到养生A区 - map.put("flag", "3"); - map.put("region_code", RegionTypeEnum.YSQA.getCode()); - JSONObject jsonEndPointYSA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(jsonEndPointYSA)) throw new BadRequestException("没有满足需求的空位"); - EndPoint_code = jsonEndPointYSA.getString("point_code"); - } - } - } - JSONObject resuft = new JSONObject(); - resuft.put("EndPoint_code",EndPoint_code); - resuft.put("vehicle_type",vehicle_type); - return resuft; - } - @Override - public List addTask() { - return null; - } -} 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 90c5456..2fc7fb8 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 @@ -2,8 +2,10 @@ package org.nl.wms.sch.tasks.sendEmpty; import cn.hutool.core.date.DateUtil; 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; @@ -13,12 +15,15 @@ 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.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; @Service @@ -39,6 +44,21 @@ public class YqxSendEmpVehicleTask 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 + "'"); } @@ -53,15 +73,29 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask { if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { // 更改任务状态为完成 jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); - jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); - String point_code2 = jsonTask.getString("point_code2"); - JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + String point_code3 = jsonTask.getString("point_code3"); + String point_code = ""; + // 更新终点:判断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"); + point2.put("vehicle_type", ""); + point2.put("vehicle_code", ""); + point2.put("vehicle_qty", 0); + pointTab.update(point2); + } else { + point_code = jsonTask.getString("point_code2"); + } + + JSONObject endPoint = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); + //终点是叠盘架 - if (StrUtil.equals("DPJQB01", endPoint.getString("region_code"))) { + if (StrUtil.equals(endPoint.getString("region_id"), RegionTypeEnum.DPJQB.getId())) { Integer vehicle_qty = endPoint.getInteger("vehicle_qty"); vehicle_qty += jsonTask.getInteger("vehicle_qty"); endPoint.put("lock_type", "1"); @@ -71,55 +105,43 @@ public class YqxSendEmpVehicleTask 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", "1"); + endPoint.put("point_status", "2"); pointTab.update(endPoint); } - } } - @Override @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + /* + * 1.先生成确定起点的任务 + * 2.通过findNextPoint()找终点 + * 3.下发给ACS + */ + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 String point_code1 = form.getString("point_code1"); - String point_code2 = form.getString("point_code2"); - String vehicle_code = form.getString("vehicle_code"); - String vehicle_type = form.getString("vehicle_type"); - String vehicle_num = form.getString("vehicle_num"); - // 入库起点不能为空 - if (ObjectUtil.isEmpty(point_code1)) { - throw new BadRequestException("起点不能为空"); - } - // 判断起点是否有正在执行的任务 - JSONObject beforTaskObj = taskTab.query("is_delete='0' and point_code1='" + point_code1 + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(beforTaskObj)) throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); - - // 创建任务 - JSONObject jsonTask = new JSONObject(); - String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - jsonTask.put("task_id", task_id); - jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - jsonTask.put("task_type", "kzj"); - jsonTask.put("task_status", TaskStatusEnum.SURE_START.getCode()); - jsonTask.put("point_code1", point_code1); - jsonTask.put("point_code2", point_code2); - jsonTask.put("vehicle_type", vehicle_type); - jsonTask.put("vehicle_code", vehicle_code); - jsonTask.put("vehicle_num", vehicle_num); - jsonTask.put("handle_class", THIS_CLASS); - jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); - jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); - jsonTask.put("create_time", DateUtil.now()); - taskTab.insert(jsonTask); - - this.findNextPoint(); - 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()); } /** @@ -130,49 +152,46 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask { */ @Override public void findNextPoint() { + /* + * 根据业务找对应的终点 + */ WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - JSONArray taskArr = taskTab.query("is_delete = '0' and handle_class = '" + this.THIS_CLASS + "' and task_status = '" + TaskStatusEnum.SURE_START.getCode() + "'").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 vehicle_type = jsonTask.getString("vehicle_type"); - Integer vehicle_qty = jsonTask.getInteger("vehicle_qty"); - //TODO 判断叠盘位是否有另外任务,则不生成任务,后续可以考虑托盘数量大于某个数直接去缓存区或者养生A区 - JSONObject taskObj = taskTab.query("is_delete='0' and handle_class='" + this.THIS_CLASS + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "' and task_id <> " + jsonTask.getLong("task_id")).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) continue; - JSONObject dpjPoint = pointTab.query("is_used ='1' and lock_type='00' and is_delete='0' and region_code='DPJQB01' and can_vehicle_type like '%" + vehicle_type + "%'").uniqueResult(0); + // 找终点 + JSONObject param = new JSONObject(); + param.put("vehicle_type", jsonTask.getString("vehicle_type")); + param.put("qty", jsonTask.getString("vehicle_qty")); + String endPoint = this.endPoint(param); - int sum_qty=(dpjPoint.getInteger("vehicle_qty")==null?0:dpjPoint.getInteger("vehicle_qty"))+vehicle_qty; - //超过叠盘架允许的最大托盘数,去托盘缓存区或者去养生A区,后续可以考虑任务的载具数量和叠盘架的载具数量谁比较大,大的先去缓存位或者去养生A区 - if ( sum_qty > dpjPoint.getInteger("vehicle_max_qty")) { - JSONObject endPoint = WQL.getWO("ST_VEHICLE_IN_01").addParam("flag", "1").addParam("vehicle_type", "'%" + vehicle_type + "'").process().uniqueResult(0); - jsonTask.put("point_code2", endPoint.getString("point_code")); - jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT); - jsonTask.put("update_time", DateUtil.now()); - taskTab.update(jsonTask); - - - } else {//去叠盘架 - jsonTask.put("point_code2", dpjPoint.getString("point_code")); - jsonTask.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - jsonTask.put("update_time", DateUtil.now()); - taskTab.update(jsonTask); + // 如果此时endPoint为空则循环下一个任务 + if (ObjectUtil.isEmpty(endPoint)) { + continue; } - //锁住终点 - JSONObject pointObj = new JSONObject(); - pointObj.put("lock_type", "2"); - pointObj.put("update_time", DateUtil.now()); - pointTab.update(pointObj, "point_code ='" + jsonTask.getString("point_code2") + "'"); + + // 更新任务表point_code2 + jsonTask.put("point_code2", endPoint); + jsonTask.put("task_status", "4"); + taskTab.update(jsonTask); + + // 锁定终点 + JSONObject jsonEnd = pointTab.query("point_code = '" + endPoint + "'").uniqueResult(0); + jsonEnd.put("lock_type", "2"); + pointTab.update(jsonEnd); } } - ; - @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()); } @@ -183,9 +202,182 @@ public class YqxSendEmpVehicleTask extends AbstractAcsTask { public void cancel(String task_id) { } - @Override - public List addTask() { - return null; + + @Transactional(rollbackFor = Exception.class) + public String endPoint(JSONObject param) { + /* + * 1.叠盘架有B对应货位 规则:如果暂存位能放下则放暂存位如果放不下则走2或3 + * 2.叠盘架B没有货位 则去叠盘架暂存位 + * 3.叠盘架暂存位没有货位则去养生A区 + */ + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位表 + + String end_code = ""; + + String vehicle_type = param.getString("vehicle_type"); + + // 1.找到对应类型的叠盘架 + JSONObject jsonDpjEnd = pointTab.query("region_id = '" + RegionTypeEnum.DPJQB.getId() + "' and can_vehicle_type = '" + vehicle_type + "' and lock_type = '1' and is_used = '1' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonDpjEnd)) { + // 判断数量 + 叠盘架的数量是否超过此叠盘架的最大数量 + double add_num = NumberUtil.add(param.getIntValue("qty"), jsonDpjEnd.getIntValue("vehicle_qty")); + + if (jsonDpjEnd.getDoubleValue("vehicle_max_qty") >= add_num) { + end_code = jsonDpjEnd.getString("point_code"); + } else { + // 如果数量大于此叠盘架最大数量则查找叠盘架缓存位是否有对应空位 + JSONObject jsonZcwEnd = pointTab.query("region_id = '" + RegionTypeEnum.KTPHCQB.getId() + "' 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(jsonZcwEnd)) { + end_code = jsonZcwEnd.getString("point_code"); + } else { + // 为空就去养生A区的等待位 + JSONObject jsonEmpWait = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and row_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 col_num = '" + jsonEmpWait.getString("col_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"); + } + } + } + } + } else { + // 2.叠盘架没有空位去找叠盘暂存位 + JSONObject jsonZcwEnd = pointTab.query("region_id = '" + RegionTypeEnum.KTPHCQB.getId() + "' 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(jsonZcwEnd)) { + end_code = jsonZcwEnd.getString("point_code"); + } else { + // 为空就去养生A区的等待位 + JSONObject jsonEmpWait = pointTab.query("region_id = '" + RegionTypeEnum.YSAQKTPQ01.getId() + "' and row_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 col_num = '" + jsonEmpWait.getString("col_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"); + } + } + } + } + + return end_code; } + @Transactional(rollbackFor = Exception.class) + public boolean isTask(String point_code) { + /* + * 判断点位是否有任务存在 + */ + WQLObject tab = WQLObject.getWQLObject("SCH_BASE_Task"); + + boolean result; + + JSONObject jsonPointCode1 = tab.query("point_code1 = '" + point_code + "' and task_status <> '7' and is_delete = '0'").uniqueResult(0); + JSONObject jsonPointCode2 = tab.query("point_code2 = '" + point_code + "' and task_status <> '7' and is_delete = '0'").uniqueResult(0); + JSONObject jsonPointCode3 = tab.query("point_code3 = '" + point_code + "' and task_status <> '7' and is_delete = '0'").uniqueResult(0); + JSONObject jsonPointCode4 = tab.query("point_code4 = '" + point_code + "' and task_status <> '7' and is_delete = '0'").uniqueResult(0); + + if (ObjectUtil.isEmpty(jsonPointCode1) && ObjectUtil.isEmpty(jsonPointCode2) && ObjectUtil.isEmpty(jsonPointCode3) && ObjectUtil.isEmpty(jsonPointCode4)) { + result = true; + } else { + result = false; + } + + return result; + } + + @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"); // 点位表 + + String point_code = ""; + + JSONObject jsonTask = taskTab.query("task_id ='" + task_id + "'").uniqueResult(0); + JSONObject jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + + // 根据 区域、块、列找到第一个有物料的货位 + 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_status = '2' and lock_type = '1' order by in_empty_seq ASC").uniqueResult(0); + + // 如果为空说明这一列其他货位为空 则入到最后一个货位 + if (ObjectUtil.isEmpty(jsonOnePoint)) { + 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_status = '1' and lock_type = '1' order by in_empty_seq DESC").uniqueResult(0); + + 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); + + 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_status = '1' and lock_type = '1'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonEmpPoint)) { + point_code = jsonEmpPoint.getString("point_code"); + jsonTask.put("point_code3", point_code); + taskTab.update(jsonTask); + } + } + + if (ObjectUtil.isNotEmpty(point_code)) { + 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() { + /* + * 下发给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; + } + + } From 9d5456337ee43011ab5b0baf01c3bbea6fc84d11 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 24 Oct 2022 14:51:16 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acs/service/impl/AcsToWmsServiceImpl.java | 3 +- .../tasks/callEmpty/CallEmpVehicleTask.java | 301 ------------------ .../callEmpty/GjxCallEmpVehicleTask.java | 2 +- .../wql/QSCH_GjxCallEmpVehicleTask.wql} | 2 +- 4 files changed, 3 insertions(+), 305 deletions(-) delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/CallEmpVehicleTask.java rename lms/nladmin-system/src/main/java/org/nl/wms/sch/{wql/ST_VEHICLE_OUT_01.wql => tasks/callEmpty/wql/QSCH_GjxCallEmpVehicleTask.wql} (98%) 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 936786d..24aef04 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 @@ -23,7 +23,6 @@ import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.TaskService; import org.nl.wms.sch.service.dto.TaskDto; import org.nl.wms.sch.tasks.PointToPointTask; -import org.nl.wms.sch.tasks.callEmpty.CallEmpVehicleTask; import org.nl.wms.sch.tasks.callEmpty.GjxCallEmpVehicleTask; import org.nl.wms.sch.tasks.callMaterial.CallMaterialTask; import org.nl.wms.sch.tasks.sendEmpty.HtSendEmpVehicleTask; @@ -230,7 +229,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { param.put("point_code2", point_code); param.put("qty", vehicle_num); // 创建任务 - CallEmpVehicleTask taskBean = SpringContextHolder.getBean(CallEmpVehicleTask.class); + GjxCallEmpVehicleTask taskBean = SpringContextHolder.getBean(GjxCallEmpVehicleTask.class); String task_id = taskBean.createTask(param); } else if (StrUtil.equals(type, "4")) { // 4.油漆线申请物料: 调用物料出库库处理类创建任务 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/CallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/CallEmpVehicleTask.java deleted file mode 100644 index 012f8db..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/CallEmpVehicleTask.java +++ /dev/null @@ -1,301 +0,0 @@ -package org.nl.wms.sch.tasks.callEmpty; - -import cn.hutool.core.date.DateUtil; -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.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -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.modules.wql.util.SpringContextHolder; -import org.nl.wms.pdm.service.DeviceService; -import org.nl.wms.pdm.service.dto.DeviceDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.service.PointService; -import org.nl.wms.sch.service.dto.PointDto; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.RegionTypeEnum; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.math.BigDecimal; -import java.util.List; - -@Service -@RequiredArgsConstructor -@Slf4j -public class CallEmpVehicleTask extends AbstractAcsTask { - private final String THIS_CLASS = CallEmpVehicleTask.class.getName(); - - - - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - - String task_id = taskObj.getString("task_id"); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - if (StrUtil.equals(status, "0")) { - // 取消删除任务 - taskTab.delete("task_id = '" + task_id + "'"); - } - - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - // 更新任务状态为执行中 - 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, TaskStatusEnum.FINISHED.getCode())) { - // 更改任务状态为完成 - jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); - jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); - jsonTask.put("update_time", DateUtil.now()); - taskTab.update(jsonTask); - - PointService point = SpringContextHolder.getBean(PointService.class); - // 校验起点是否存在 - PointDto point_code1 = point.findByCode(jsonTask.getString("point_code1")); - if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("未找到可用点位:" + point_code1); - // 校验终点是否存在 - PointDto point_code2 = point.findByCode(jsonTask.getString("point_code2")); - if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("未找到可用点位:" + point_code2); - - // 1.更新点位数量 2.解锁点位 - int vehicle_qty = JSONObject.parseObject(JSON.toJSONString(point_code1)).getIntValue("vehicle_qty"); - BigDecimal vehicle_qty_point = NumberUtil.sub(String.valueOf(vehicle_qty), String.valueOf(1)); - - point_code1.setVehicle_qty(vehicle_qty_point); - if (StrUtil.equals(vehicle_qty_point.toString(), "0")) { - point_code1.setPoint_status("00"); - point_code1.setVehicle_type(""); - } - point_code1.setLock_type("00"); - pointTab.update(JSONObject.parseObject(JSON.toJSONString(point_code1))); - } - } - - - - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - - String point_code1 = form.getString("point_code1"); - String point_code2 = form.getString("point_code2"); - String qty = form.getString("qty"); - String vehicle_type = form.getString("vehicle_type"); - - // 出库终点不能为空 - if (ObjectUtil.isEmpty(point_code2)) { - throw new BadRequestException("终点不能为空"); - } else { - // 判断终点是否有正在执行的任务 - JSONObject beforTaskObj = taskTab.query("is_delete='0' and point_code2='" + point_code2 + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(beforTaskObj)) - throw new BadRequestException("存在任务号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); - } - // 载具数量不能为空 - if (ObjectUtil.isEmpty(qty)) throw new BadRequestException("载具数量不能为空"); - - /* - * 1. 点对点: 起点和终点都确定,直接创建任务 - * 2. 终点确定: 需要找到对应起点,在创建任务 具体找起点货位的规则在findBeginPoint()中 - */ - //起点不确定 - if (ObjectUtil.isEmpty(point_code1)) { - - JSONObject param = new JSONObject(); - param.put("point_code2",point_code2); - param.put("vehicle_qty",qty); - - - JSONObject json = this.findBeginPoint(param); - point_code1 = json.getString("start_point_code"); - vehicle_type = json.getString("vehicle_type"); - } else { - // 判断终点是否是空位 - JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "' and lock_type = '00' and point_status <> '02' and is_delete = '0' and is_used = '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPoint)) throw new BadRequestException("起点点位不可用或不存在"); - } - - - - // 创建任务 - JSONObject jsonTask = new JSONObject(); - String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - - jsonTask.put("task_id", task_id); - - jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); - jsonTask.put("task_type", "04"); - jsonTask.put("task_status", "01"); - jsonTask.put("point_code1", point_code1); - jsonTask.put("point_code2", point_code2); - jsonTask.put("handle_class", THIS_CLASS); - jsonTask.put("vehicle_type", vehicle_type); - jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); - jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); - jsonTask.put("create_time", DateUtil.now()); - jsonTask.put("acs_task_type", "1"); - taskTab.insert(jsonTask); - - // 锁定起点点位 - JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - jsonPoint.put("lock_type", "02"); - pointTab.update(jsonPoint); - - return task_id; - } - - @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()); - } - - - - @Override - public void cancel(String task_id) { - - } - - @Transactional(rollbackFor = Exception.class) - public JSONObject findBeginPoint(JSONObject json) { - String point_code2 = json.getString("point_code2"); - String vehicle_qty = json.getString("vehicle_qty"); - if (ObjectUtil.isEmpty(point_code2)) throw new BadRequestException("终点不能为空"); - if (ObjectUtil.isEmpty(vehicle_qty)) throw new BadRequestException("载具数量不能为空"); - - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); - WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - // 根据终点区域判断优先的起点区域 - JSONObject jsonPointEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPointEnd)) throw new BadRequestException("终点点位不存在"); - JSONObject jsonRegionEnd = regionTab.query("region_id ='" + jsonPointEnd.getString("region_id") + "'").uniqueResult(0); - - // 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型 - String device_code = point_code2.substring(0, point_code2.indexOf("_")); - - DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); - DeviceDto deviceDto = deviceBean.findByCode(device_code); - if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); - JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); - - //当前设备所需要的载具类型 - String vehicle_type = jsonOrder.getString("vehicle_type"); - /* - * 空托盘出库任务: - * 1.叠盘架B区、养生A区 --> 共挤线 (优先级:1叠盘架B区 2养生A区) - * 2.叠盘架A区、养生A区 --> 油漆线 (优先级:1叠盘架A区 2养生A区) - */ - String point_code1 = ""; - JSONObject map = new JSONObject(); - if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.GJQY.getCode())) { - //1、判断是否有拆托盘任务。 - taskTab.query("task_type= 'gjxsqkp' "); - - //2、判断是否有到该叠盘位的堆叠任务。 - - - - //1、判断叠盘架B是否有对应类型的空载具 - JSONObject jsonDpjB = pointTab.query("point_status ='2' and lock_type='00' and can_vehicle_type = '" + vehicle_type + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonDpjB)) {//没有则去空托盘缓存区B和养生A区找 - - } - - - // 共挤线呼叫空托盘业务:查找叠盘架B区是否有满足条件的点位 - map.put("flag", "1"); - map.put("vehicle_qty", vehicle_qty); - map.put("vehicle_type", jsonOrder.getString("vehicle_type")); - map.put("region_code", RegionTypeEnum.DPJQB.getCode()); - JSONObject jsonStartPointDPB = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonStartPointDPB)) { - point_code1 = jsonStartPointDPB.getString("point_code"); - } else { - // 为空说明叠盘架B区没有,则去养生A区找 : 只能找数量为1的空托盘 - map.put("flag", "3"); - map.put("region_code", RegionTypeEnum.YSQA.getCode()); - JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - - if (ObjectUtil.isNotEmpty(jsonStartPointYSA)) { - point_code1 = jsonStartPointYSA.getString("point_code"); - } else { - throw new BadRequestException("没有满足需求数量的点位"); - /* // 如果没有则需要从养生区A区里找到 > 1的货位 出库到叠盘架B中 - map.put("flag", "1"); - map.put("region_code", RegionTypeEnum.YSQA.getCode()); - // 起点 - JSONObject jsonStart = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(jsonStart)) throw new BadRequestException("没有满足需求数量的点位"); - // 终点 - JSONObject jsonEnd = pointTab.query("region_id = '" + RegionTypeEnum.DPJQB.getId() + "' and point_status = '00' and lock_type = '00' and is_used = '1' and is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonEnd)) throw new BadRequestException("叠盘架B货位不足"); - - JSONObject parem = new JSONObject(); - parem.put("point_code1",jsonStart.getString("point_code")); - parem.put("point_code2",jsonEnd.getString("point_code")); - parem.put("qty",jsonStart.getString("vehicle_qty")); - parem.put("vehicle_type",jsonStart.getString("vehicle_qty")); - String task_id = this.createTask(parem); - - // 生成 叠盘架 -> 共挤线的任务 返回叠盘架B的点位code - point_code1 = jsonEnd.getString("point_code");*/ - } - - } - - } else if (StrUtil.equals(jsonRegionEnd.getString("region_code"), RegionTypeEnum.YQQY.getCode())) { - // 油漆线呼叫空托盘业务:查找叠盘架A区是否有满足条件的点位 - map.put("flag", "1"); - map.put("vehicle_qty", vehicle_qty); - map.put("vehicle_type", jsonOrder.getString("vehicle_type")); - map.put("region_code", RegionTypeEnum.DPJQA.getCode()); - JSONObject jsonStartPointDPA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonStartPointDPA)) { - point_code1 = jsonStartPointDPA.getString("point_code"); - } else { - // 为空说明叠盘架A区没有,则去养生A区找 - map.put("flag", "3"); - map.put("region_code", RegionTypeEnum.YSQA.getCode()); - JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(jsonStartPointYSA)) throw new BadRequestException("没有满足需求数量的点位"); - point_code1 = jsonStartPointYSA.getString("point_code"); - } - } - JSONObject resuft = new JSONObject(); - resuft.put("point_code1", point_code1); - resuft.put("vehicle_type", jsonOrder.getString("vehicle_type")); - return resuft; - } - - @Override - public List addTask() { - return null; - } - -} 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 38cfed1..217556a 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 @@ -138,7 +138,7 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { JSONObject whereParam = new JSONObject(); whereParam.put("flag", "1"); whereParam.put("vehicle_type", '%' + jsonTask.getString("vehicle_type") + "%"); - JSONObject outJsonObj = WQL.getWO("ST_VEHICLE_OUT_01").addParamMap(whereParam).process().uniqueResult(0); + JSONObject outJsonObj = WQL.getWO("QSCH_GjxCallEmpVehicleTask").addParamMap(whereParam).process().uniqueResult(0); // 空托盘缓存货架或者养生A区------>叠盘架B区 JSONObject param = new JSONObject(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_GjxCallEmpVehicleTask.wql similarity index 98% rename from lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql rename to lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_GjxCallEmpVehicleTask.wql index f820a05..d8774b0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/ST_VEHICLE_OUT_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_GjxCallEmpVehicleTask.wql @@ -1,5 +1,5 @@ [交易说明] - 交易名: 空载具出库业务 + 交易名: 共挤线申请空盘 所属模块: 功能简述: 版权所有: From a512629fda9fd25637d290952536cd11b7cd6bdd Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 24 Oct 2022 14:53:06 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/ext/acs/service/impl/AcsToWmsServiceImpl.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) 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 24aef04..5e0a6b5 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 @@ -173,10 +173,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { public JSONObject apply(JSONObject whereJson) { String type = whereJson.getString("type"); String point_code = whereJson.getString("point_code"); - String vehicle_num = whereJson.getString("vehicle_num"); String vehicle_type = whereJson.getString("vehicle_type"); String vehicle_code = whereJson.getString("vehicle_code"); - String qty = whereJson.getString("qty"); + String qty = whereJson.getString("vehicle_num"); if (ObjectUtil.isEmpty(type)) throw new BadRequestException("类型不能为空"); if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("点位不能为空"); @@ -200,12 +199,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { */ if (StrUtil.equals(type, "1")) { // 1.共挤线申请空盘: 调用空托盘出库处理类创建任务 - if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + if (ObjectUtil.isEmpty(qty)) throw new BadRequestException("数量不能为空"); JSONObject param = new JSONObject(); param.put("point_code2", point_code); param.put("vehicle_type", vehicle_type); - param.put("qty", vehicle_num); + param.put("qty", qty); // 创建任务 GjxCallEmpVehicleTask taskBean = SpringContextHolder.getBean(GjxCallEmpVehicleTask.class); taskBean.createTask(param); @@ -223,11 +222,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { String task_id = taskBean.createTask(param); // 创建任务 } else if (StrUtil.equals(type, "3")) { // 3.油漆线申请空盘: 调用空托盘出库处理类创建任务 - if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + if (ObjectUtil.isEmpty(qty)) throw new BadRequestException("数量不能为空"); JSONObject param = new JSONObject(); param.put("point_code2", point_code); - param.put("qty", vehicle_num); + param.put("qty", qty); // 创建任务 GjxCallEmpVehicleTask taskBean = SpringContextHolder.getBean(GjxCallEmpVehicleTask.class); String task_id = taskBean.createTask(param);