From f447ee69643348428739c5470faedeb7b7aac656 Mon Sep 17 00:00:00 2001 From: lyd <1419499670@qq.com> Date: Tue, 29 Nov 2022 18:20:23 +0800 Subject: [PATCH] =?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 --- .../loki/service/impl/LokiServiceImpl.java | 15 +- .../basedata/service/dto/MaterialbaseDto.java | 5 + .../wms/ext/acs/rest/AcsToWmsController.java | 18 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 109 ++--- .../org/nl/wms/sch/manage/WorkOrderEnum.java | 5 +- .../org/nl/wms/sch/tasks/PointUpdateUtil.java | 30 +- .../autoCallMaterial/RykCallMaterialTask.java | 31 +- .../wql/QSCH_rykCallMaterial_01.wql | 7 +- .../callEmpty/FjCallEmptyVehicleTask.java | 133 ++++-- .../callEmpty/HnCallEmptyVehicleTask.java | 15 +- .../callEmpty/YzjCallEmptyVehicleTask.java | 18 +- .../wql/QSCH_fjCallEmptyVehicle_01.wql | 10 +- .../wql/QSCH_yzjCallEmptyVehicle_01.wql | 10 +- .../callMaterial/FjCallMaterialTask.java | 26 +- .../callMaterial/YzjCallMaterialTask.java | 32 +- .../tasks/sendEmpty/DpSendEmpVehicleTask.java | 81 ++-- .../tasks/sendEmpty/FjSendEmpVehicleTask.java | 65 ++- .../tasks/sendEmpty/HtSendEmpVehicleTask.java | 449 ------------------ .../sendEmpty/YqxSendEmpVehicleTask.java | 403 ---------------- .../sendEmpty/YzjSendEmpVehicleTask.java | 12 +- .../wql/QSCH_yzjSendEmptyVehicle_01.wql | 1 - .../sendMaterial/FjSendMaterialTask.java | 101 ++-- .../sendMaterial/HnSendMaterialTask.java | 19 +- .../sendMaterial/SzSendMaterialTask.java | 26 +- .../sendMaterial/YzjSendMaterialTask.java | 21 +- .../wql/QSCH_fjSendMaterial_01.wql | 1 - .../wql/QSCH_hnSendMaterial_01.wql | 4 + .../src/main/java/org/nl/wms/wms.xls | Bin 291328 -> 291840 bytes .../src/views/wms/pdm/workerorder/index.vue | 49 +- .../src/views/wms/sch/task/index.vue | 4 +- 30 files changed, 507 insertions(+), 1193 deletions(-) delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java index f6eeb49..eab56ac 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.modules.loki.service.impl; import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -33,13 +34,13 @@ public class LokiServiceImpl implements LokiService { String text = ""; String limit = "100"; String direction = "backward"; - if (json.get("logLabel") != null) logLabel = json.getString("logLabel"); - if (json.get("logLabelValue") != null) logLabelValue = json.getString("logLabelValue"); - if (json.get("text") != null) text = json.getString("text"); - if (json.get("start") != null) start = json.getLong("start"); - if (json.get("end") != null) end = json.getLong("end"); - if (json.get("limits") != null) limit = json.getString("limits"); - if (json.get("direction") != null) direction = json.getString("direction"); + if (ObjectUtil.isNotEmpty(json.get("logLabel"))) logLabel = json.getString("logLabel"); + if (ObjectUtil.isNotEmpty(json.get("logLabelValue"))) logLabelValue = json.getString("logLabelValue"); + if (ObjectUtil.isNotEmpty(json.get("text"))) text = json.getString("text"); + if (ObjectUtil.isNotEmpty(json.get("start"))) start = json.getLong("start"); + if (ObjectUtil.isNotEmpty(json.get("end"))) end = json.getLong("end"); + if (ObjectUtil.isNotEmpty(json.get("limits"))) limit = json.getString("limits"); + if (ObjectUtil.isNotEmpty(json.get("direction"))) direction = json.getString("direction"); /** * 组织参数 * 纳秒数 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java index 4e2cd84..ebea3eb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java @@ -26,6 +26,11 @@ public class MaterialbaseDto implements Serializable { */ private String material_code; + /** + * 产品编码 + */ + private String product_code; + /** * 物料名称 */ 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 118620e..a77ad60 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 @@ -3,6 +3,7 @@ package org.nl.wms.ext.acs.rest; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -10,6 +11,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.modules.logging.annotation.Log; import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.log.LokiLog; +import org.nl.wms.log.LokiLogType; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; @@ -28,12 +31,14 @@ import java.util.Map; @Api(tags = "acs接收lms") @RequestMapping("/api/wms/task") @Slf4j +@SaIgnore public class AcsToWmsController { private final AcsToWmsService acsToWmsService; @PostMapping("/status") @Log("ACS给WMS反馈任务状态") @ApiOperation("ACS给WMS反馈任务状态") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity receiveTaskStatusAcs(@RequestBody String string) { return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK); } @@ -41,6 +46,7 @@ public class AcsToWmsController { @PostMapping("/orderFinish") @Log("ACS给WMS下发工单完成状态") @ApiOperation("ACS给WMS下发工单完成状态") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity orderFinish(@RequestBody String string) { return new ResponseEntity<>(acsToWmsService.orderFinish(string), HttpStatus.OK); } @@ -48,7 +54,9 @@ public class AcsToWmsController { @PostMapping("/apply") @Log("申请任务") @ApiOperation("申请任务") - @SaCheckPermission("menu:list") + @LokiLog(type = LokiLogType.ACS_TO_LMS) +// @SaCheckPermission("menu:list") +// @SaIgnore public ResponseEntity apply(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(acsToWmsService.apply(whereJson), HttpStatus.OK); } @@ -56,6 +64,7 @@ public class AcsToWmsController { @PostMapping("/manipulatorApply") @Log("ACS机械手给WMS发送任务") @ApiOperation("ACS机械手给WMS发送任务") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity manipulatorApply(@RequestBody JSONObject whereJson) { acsToWmsService.manipulatorApply(whereJson); JSONObject result = new JSONObject(); @@ -67,6 +76,7 @@ public class AcsToWmsController { @PostMapping("/reverseGroup") @Log("入窑口反向组盘") @ApiOperation("入窑口反向组盘") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity reverseGroup(@RequestBody JSONObject whereJson) { acsToWmsService.reverseGroup(whereJson); JSONObject result = new JSONObject(); @@ -79,6 +89,7 @@ public class AcsToWmsController { @PostMapping("/ispackage") @Log("ACS给WMS请求是否优先包装") @ApiOperation("ACS给WMS请求是否优先包装") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity ispackage(@RequestBody Map whereJson) { return new ResponseEntity<>(acsToWmsService.ispackage(whereJson), HttpStatus.OK); } @@ -86,6 +97,7 @@ public class AcsToWmsController { @PostMapping("/getEmptyVehicle_code") @Log("获取空木托盘号") @ApiOperation("获取空木托盘号") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity getEmptyVehicle_code(@RequestBody Map whereJson) { return new ResponseEntity<>(acsToWmsService.getEmptyVehicle_code(whereJson), HttpStatus.OK); } @@ -93,6 +105,7 @@ public class AcsToWmsController { @PostMapping("/sureProduceTask") @Log("排产单确认") @ApiOperation("排产单确认") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity sureProduceTask(@RequestBody Map whereJson) { return new ResponseEntity<>(acsToWmsService.sureWorkOrder(whereJson), HttpStatus.OK); } @@ -100,6 +113,7 @@ public class AcsToWmsController { @PostMapping("/getDevicecodeByVehicletype") @Log("根据木托盘类型获取对应所在的点位") @ApiOperation("根据木托盘类型获取对应的点位") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity getDevicecodeByVehicle_ype(@RequestBody Map whereJson) { return new ResponseEntity<>(acsToWmsService.getDeviceCodeByVehicleType(whereJson), HttpStatus.OK); } @@ -107,6 +121,7 @@ public class AcsToWmsController { @PostMapping("/getVehicleInfoBycode") @Log("根据设备编码编码获取托盘信息") @ApiOperation("根据设备编码编码获取托盘信息") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity getVehicleInfoByDevice_code(@RequestBody Map whereJson) { return new ResponseEntity<>(acsToWmsService.getVehicleInfoByDeviceCode(whereJson), HttpStatus.OK); } @@ -115,6 +130,7 @@ public class AcsToWmsController { @Log("二次申请任务") @ApiOperation("二次申请任务") @SaCheckPermission("menu:list") + @LokiLog(type = LokiLogType.ACS_TO_LMS) public ResponseEntity againApply(@RequestBody String task_id) { return new ResponseEntity<>(acsToWmsService.againApply(task_id), HttpStatus.OK); } 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 0d47eeb..2b9c5dc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -18,9 +18,7 @@ import org.nl.wms.basedata.service.dto.VehicleDto; import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.log.LokiLog; import org.nl.wms.log.LokiLogType; -import org.nl.wms.sch.manage.RegionEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.manage.WorkOrderEnum; +import org.nl.wms.sch.manage.*; import org.nl.wms.sch.service.TaskService; import org.nl.wms.sch.tasks.PointUpdateUtil; import org.nl.wms.sch.tasks.callEmpty.FjCallEmptyVehicleTask; @@ -62,7 +60,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONArray errArr = new JSONArray(); for (int i = 0; i < array.size(); i++) { JSONObject row = array.getJSONObject(i); - String task_id = row.getString("task_id"); + String task_id = row.getString("ext_task_uuid"); + if (ObjectUtil.isEmpty(task_id)) throw new BadRequestException("任务号不能为空"); + row.put("task_id", task_id); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); // 任务处理类 String processing_class = taskObj.getString("handle_class"); @@ -71,13 +71,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { String message = ""; String status = ""; if ("1".equals(acs_task_status)) { - status = TaskStatusEnum.EXECUTING.getCode(); + status = UpdateTaskStatusEnum.EXECUTION.getCode(); } if ("2".equals(acs_task_status)) { - status = TaskStatusEnum.FINISHED.getCode(); + status = UpdateTaskStatusEnum.FORCEFINISH.getCode(); } if ("3".equals(acs_task_status)) { - status = "0"; + status = UpdateTaskStatusEnum.CANCEL.getCode(); } // 任务处理类 try { @@ -310,7 +310,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { SpringContextHolder.getBean(YzjCallEmptyVehicleTask.class).createTask(param); break; case ZDCDX: - // 12.分拣呼叫木托盘 -- xxx + // 12.分拣呼叫木托盘 param.put("point_code2", point_code); // 起点 SpringContextHolder.getBean(FjCallEmptyVehicleTask.class).createTask(param); break; @@ -336,9 +336,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); //组盘 JSONObject produceInfoByCode = new JSONObject(); - String device_code = (String) jsonObject.get("device_code"); // 对接位 + String device_code = jsonObject.getString("device_code"); // 对接位 // vehicle_code:不一定有,分拣码垛会提供木托盘载具号、压制码垛是不提供载具号 - String vehicle_code = (String) jsonObject.get("vehicle_code"); + String vehicle_code = jsonObject.getString("vehicle_code"); String qty = String.valueOf(jsonObject.get("qty")); produceInfoByCode = this.getProduceInfoByCode(device_code); // 获取设备的 String material_id = (String) produceInfoByCode.get("material_id"); @@ -355,13 +355,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (ObjectUtil.isNotEmpty(pointObj.getString("group_id"))) { // 存在组盘id,表示是半托 // 半托只需要修改参数即可 groupObj = groupTab.query("group_id = '" + pointObj.getString("group_id") + "'").uniqueResult(0); - jsonObject.put("group_id", ObjectUtil.isNotEmpty(pointObj.getString("group_id"))); // 组盘标识 + jsonObject.put("group_id", pointObj.getString("group_id")); // 组盘标识 } else { long nextId = IdUtil.getSnowflake(1, 1).nextId(); groupObj.put("group_id", nextId); jsonObject.put("group_id", nextId); // 组盘标识 } - groupObj.put("vehicle_code", vehicle_code); + if (device_code.startsWith("FJ")) + groupObj.put("vehicle_code", String.format("%04d", Integer.parseInt(vehicle_code))); groupObj.put("material_uuid", material_id); groupObj.put("material_code", materialObj.getString("material_code")); groupObj.put("material_name", materialObj.getString("material_name")); @@ -422,8 +423,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { groupObj.put("one_qty", jsonObject.get("one_qty")); groupObj.put("two_qty", jsonObject.get("two_qty")); groupObj.put("tool_coordinate", jsonObject.get("tool_coordinate")); - groupObj.put("create_id", SecurityUtils.getCurrentUserId()); - groupObj.put("create_name", SecurityUtils.getCurrentNickName()); + groupObj.put("create_id", "22"); + groupObj.put("create_name", "ACS系统"); groupObj.put("create_time", DateUtil.now()); if (ObjectUtil.isNotEmpty(pointObj.getString("group_id"))) { groupTab.update(groupObj); @@ -433,12 +434,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } else { groupTab.insert(groupObj); } - // 物料更新 - materialObj.put("AlongSide", jsonObject.get("AlongSide")); - materialObj.put("BshortSide", jsonObject.get("BshortSide")); - materialObj.put("Htrapezoidal", jsonObject.get("Htrapezoidal")); - materialObj.put("Wthickness", jsonObject.get("Wthickness")); - WQLObject.getWQLObject("MD_ME_MaterialBase").insert(materialObj); // 入库 jsonObject.put("type", "1"); this.apply(jsonObject); @@ -480,15 +475,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override @Transactional(rollbackFor = Exception.class) public Map getEmptyVehicle_code(Map jsonObject) { - //获取一个空的托盘号 - String code = "VEHICCLE_CODE_MTP"; - String vehicle_type = "03"; // todo WQLObject vehicle_table = WQLObject.getWQLObject("MD_PB_Vehicle"); + //获取一个空的托盘号 + String code = "VEHICLE_CODE_MTP"; + String vehicle_type = "4"; // todo VehicleDto dto = new VehicleDto(); dto.setVehicle_id(IdUtil.getSnowflake(1, 1).nextId()); String vehicle_code = CodeUtil.getNewCode(code); - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); + Long currentUserId = 22L; + String nickName = "ACS系统"; String now = DateUtil.now(); dto.setVehicle_code(vehicle_code); dto.setCreate_id(currentUserId); @@ -504,19 +499,19 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject returnjo = new JSONObject(); returnjo.put("vehicle_code", vehicle_code); returnjo.put("status", HttpStatus.OK.value()); - //将起点终点确定不下发的任务查出来,将木托盘点位解锁,起点改为扫描点,is_auto_issue 改为1, - String device_code = (String) jsonObject.get("device_code"); - WQLObject task_Table = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject taskObj = task_Table.query("task_status='" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_auto_issue='0'", "create_time desc").uniqueResult(0); - String start_point_code = taskObj.getString("point_code1"); - WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); - JSONObject startObj = pointTable.query("point_code ='" + start_point_code + "'").uniqueResult(0); - startObj.put("lock_type", "1"); - pointTable.update(startObj); - taskObj.put("point_code1", device_code); - taskObj.put("is_auto_issue", "1"); - taskObj.put("vehicle_code", vehicle_code); - task_Table.update(taskObj); +// // 将起点终点确定不下发的任务查出来,将木托盘点位解锁,起点改为扫描点,is_auto_issue 改为1, +// String device_code = (String) jsonObject.get("device_code"); +// WQLObject task_Table = WQLObject.getWQLObject("SCH_BASE_Task"); +// JSONObject taskObj = task_Table.query("task_status='" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_auto_issue='0'", "create_time desc").uniqueResult(0); +// String start_point_code = taskObj.getString("point_code1"); +// WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); +// JSONObject startObj = pointTable.query("point_code ='" + start_point_code + "'").uniqueResult(0); +// startObj.put("lock_type", "1"); +// pointTable.update(startObj); +// taskObj.put("point_code1", device_code); +// taskObj.put("is_auto_issue", "1"); +// taskObj.put("vehicle_code", vehicle_code); +// task_Table.update(taskObj); return returnjo; } @@ -596,7 +591,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); JSONObject pointObj = point_table.query("vehicle_type='" + vehicle_type + "' and region_code = 'RGCPQ'").uniqueResult(0); if (ObjectUtil.isEmpty(pointObj)) { - throw new BadRequestException("为找到类型为'" + vehicle_type + "' 的设备点位"); + throw new BadRequestException("未找到类型为'" + vehicle_type + "' 的设备点位"); } JSONObject returnjo = new JSONObject(); returnjo.put("device_code", pointObj.getString("point_code")); @@ -613,16 +608,21 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { public void reverseGroup(JSONObject whereJson) { WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); String vehicle_code = whereJson.getString("vehicle_code"); + String task_id = whereJson.getString("task_id"); + // 通过任务号获取任务中的 + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + String group_id = taskObj.getString("group_id"); + + JSONObject rywPoint = pointTab.query("point_code = 'RYW'").uniqueResult(0); - String group_id = rywPoint.getString("group_id"); - if (ObjectUtil.isEmpty(group_id)) return; JSONObject group = groupTab.query("group_id = '" + group_id + "'").uniqueResult(0); group.put("vehicle_code", vehicle_code); group.put("create_time", DateUtil.now()); groupTab.update(group); // 清理点位 - rywPoint.put("group_id", null); + rywPoint.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode()); pointTab.update(rywPoint); } @@ -634,26 +634,29 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { */ @Override public Map getVehicleInfoByDeviceCode(Map jsonObject) { + JSONObject vehicleObj = new JSONObject(); WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); WQLObject materialTab = WQLObject.getWQLObject("MD_ME_MaterialBase"); + WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); String point_code = (String) jsonObject.get("device_code"); JSONObject point = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); if (ObjectUtil.isEmpty(point)) throw new BadRequestException("未找到点位编码为'"+ point_code +"'的点位信息"); String group_id = point.getString("group_id"); - JSONObject vehicleObj = groupTab.query("group_id = '" + group_id + "' AND is_delete='0'").uniqueResult(0); - if (ObjectUtil.isEmpty(vehicleObj)){ - throw new BadRequestException("未找到组盘信息"); - } + JSONObject vehicleObj2 = groupTab.query("group_id = '" + group_id + "' AND is_delete='0'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(vehicleObj2)) vehicleObj = vehicleObj2; + // 获取工单 + String device_code = point.getString("device_code"); + JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); + if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除"); // 还需要返回砖型 - String material_id = point.getString("material_id"); + String material_id = workOrderObj.getString("material_id"); JSONObject materialObj = materialTab.query("material_id = '" + material_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(materialObj)) { - vehicleObj.put("AlongSide", materialObj.get("AlongSide")); - vehicleObj.put("BshortSide", materialObj.get("BshortSide")); - vehicleObj.put("Htrapezoidal", materialObj.get("Htrapezoidal")); - vehicleObj.put("Wthickness", materialObj.get("Wthickness")); - } + if (ObjectUtil.isEmpty(materialObj)) throw new BadRequestException("物料不能为空"); + vehicleObj.put("AlongSide", materialObj.get("alongside")); + vehicleObj.put("BshortSide", materialObj.get("bshortside")); + vehicleObj.put("Htrapezoidal", materialObj.get("htrapezoidal")); + vehicleObj.put("Wthickness", materialObj.get("wthickness")); JSONObject result = new JSONObject(); result.put("status", HttpStatus.OK.value()); result.put("message", "反馈成功!"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java index cf7a7bb..f5297a0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java @@ -13,8 +13,9 @@ public enum WorkOrderEnum { ORDER_STATUS_STOP("4", "停止"), ORDER_STATUS_FINISH("5", "完成"), - IS_NEW_MATERIAL("1", "新物料"), - IS_OLD_MATERIAL("2", "旧物料") + IS_NEW_MATERIAL("1", "新料"), + IS_MIXIN_MATERIAL("2", "混料"), + IS_OLD_MATERIAL("3", "旧料") ; private final String code; private final String name; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java index 61bc4d0..5086027 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java @@ -1,13 +1,10 @@ package org.nl.wms.sch.tasks; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl; import org.nl.wms.sch.manage.PointEnum; @@ -25,20 +22,20 @@ public class PointUpdateUtil { JSONObject pointObj = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); pointObj.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode()); pointObj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointObj.put("vehicle_type", null); - pointObj.put("vehicle_code", null); + pointObj.put("vehicle_type", ""); + pointObj.put("vehicle_code", ""); pointObj.put("vehicle_qty", "0"); - pointObj.put("material_id", null); - pointObj.put("pcsn", null); + pointObj.put("material_id", ""); + pointObj.put("pcsn", ""); pointObj.put("ivt_qty", "0"); - pointObj.put("qty_unit_id", null); + pointObj.put("qty_unit_id", ""); pointObj.put("ivt_weight", "0"); - pointObj.put("weight_unit_id", null); - pointObj.put("instorage_time", null); + pointObj.put("weight_unit_id", ""); + pointObj.put("instorage_time", ""); pointObj.put("is_full", "0"); pointObj.put("standing_time", "0"); pointObj.put("warn_time", "0"); - pointObj.put("group_id", null); + pointObj.put("group_id", ""); pointTab.update(pointObj); } @@ -76,13 +73,18 @@ public class PointUpdateUtil { JSONArray deviceDatas = pointStatus.getJSONArray("data"); for (int j = 0; j < deviceDatas.size(); j++) { JSONObject pointObj = deviceDatas.getJSONObject(j); + String point_code = pointObj.getString("device_code"); String mode = pointObj.getString("mode"); // 工作状态:0脱机,其他正常 String error = pointObj.getString("error"); // 0是正常 - if (mode.equals("0") || !error.equals("0")) continue; // 点位异常 String point_status = pointObj.getString("move"); // 点位状态:0无货,1有货(具体是空载具还是物料不知道) - String point_code = pointObj.getString("device_code"); //将托盘类型456.... String vehicle_type = pointObj.getString("container_type"); + if (mode.equals("0") || !error.equals("0")) { + // 点位异常 + vehicle_type = ""; + point_status = "0"; + if (point_code.startsWith("BZX")) point_status = "1"; + } JSONObject pointObj2 = pointTable.query("point_code = '" + point_code + "'").uniqueResult(0); pointObj2.put("point_status", Integer.parseInt(point_status) + 1); // 1空位, 2空载具 pointObj2.put("vehicle_type", vehicle_type); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/RykCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/RykCallMaterialTask.java index 8b3d3c3..a812af2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/RykCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/RykCallMaterialTask.java @@ -129,18 +129,18 @@ public class RykCallMaterialTask extends AbstractAcsTask { regionIoObj.put("end_point_code", point_code2); regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_id", "22"); + regionIoObj.put("create_name", "ACS系统"); regionIoObj.put("create_time", DateUtil.now()); regionIoTab.insert(regionIoObj); /** * 完成后将组盘id和任务id赋值到入窑口 */ - JSONObject uniqueResult = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - uniqueResult.put("group_id", material_point.getString("group_id")); - uniqueResult.put("task_id", material_point.getString("task_id")); - pointTab.update(uniqueResult); +// JSONObject uniqueResult = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); +// uniqueResult.put("group_id", material_point.getString("group_id")); +// uniqueResult.put("task_id", material_point.getString("task_id")); +// pointTab.update(uniqueResult); // 物料点位解锁 并设置空位 PointUpdateUtil.clearPoint(material_point.getString("point_code")); } @@ -160,9 +160,19 @@ public class RykCallMaterialTask extends AbstractAcsTask { //判断当前点是否有未完成的任务 JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(taskObj)) return; - JSONObject object = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(object.getString("group_id"))) return; - // todo 判断是否有货 +// JSONObject object = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(object.getString("group_id"))) return; + // 判断是否有货 + // 获取RYW + JSONArray pointCodes = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("device_code", "RYW"); + pointCodes.add(jsonObject); + // 更新点位 + PointUpdateUtil.updatePoint(pointCodes); + JSONObject object1 = pointTab.query("point_code = 'RYW'").uniqueResult(0); + if (object1.getString("point_status").equals("2")) return; // 代表有货就不需要继续执行 + SchTaskDto dto = SchTaskDto.builder() .task_id(IdUtil.getLongId()) .task_code(CodeUtil.getNewCode("TASK_CODE")) @@ -243,7 +253,7 @@ public class RykCallMaterialTask extends AbstractAcsTask { queryParam.put("flag", "1"); queryParam.put("material_id", material_id); queryParam.put("region_code", "RYZCQ"); - // 到入窑暂存区找,优先找满拖的 + // 到入窑暂存区找,找满拖的 JSONObject json1 = WQL.getWO("QSCH_rykCallMaterial_01").addParamMap(queryParam).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(json1)) { // 拿到点位 @@ -257,6 +267,7 @@ public class RykCallMaterialTask extends AbstractAcsTask { taskObj.put("material_id", material_point.getString("material_id")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskObj.put("task_id", taskObj.getString("task_id")); + taskObj.put("group_id", json1.getString("group_id")); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); } else { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/wql/QSCH_rykCallMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/wql/QSCH_rykCallMaterial_01.wql index fa0caf3..f94a735 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/wql/QSCH_rykCallMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/wql/QSCH_rykCallMaterial_01.wql @@ -43,12 +43,7 @@ IF 输入.flag = "1" 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 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/FjCallEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/FjCallEmptyVehicleTask.java index b7dad73..fbedcbd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/FjCallEmptyVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/FjCallEmptyVehicleTask.java @@ -13,16 +13,16 @@ 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.ext.acs.service.WmsToAcsService; import org.nl.wms.sch.SchTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.RegionIOEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.manage.UpdateTaskStatusEnum; +import org.nl.wms.sch.manage.*; import org.nl.wms.sch.tasks.AcsTaskDto; import org.nl.wms.sch.tasks.PointUpdateUtil; import org.nl.wms.util.IdUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -35,6 +35,9 @@ import java.util.List; @Slf4j public class FjCallEmptyVehicleTask extends AbstractAcsTask { private final String THIS_CLASS = FjCallEmptyVehicleTask.class.getName(); + + @Autowired + private WmsToAcsService wmsToAcsService; /** * 添加任务进行下发 * @@ -42,7 +45,28 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask { */ @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 acsTaskArr = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { // 任务 + JSONObject json = arr.getJSONObject(i); + AcsTaskDto dto = AcsTaskDto.builder() + .task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code")) + .vehicle_type(json.getString("vehicle_type")) + .priority(json.getString("priority")) + .remark(json.getString("remark")) + .build(); + acsTaskArr.add(dto); + } + return acsTaskArr; } /** @@ -58,12 +82,14 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); + WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); - JSONObject requestObj = task.getJSONObject("request_param"); String task_id = task.getString("task_id"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + JSONObject requestObj = taskObj.getJSONObject("request_param"); - String point_code1 = task.getString("point_code1"); + String point_code1 = taskObj.getString("point_code1"); + JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { /* @@ -72,16 +98,13 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask { if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { throw new BadRequestException("已完成不能取消!"); } - if (ObjectUtil.isNotEmpty(point_code1)) { - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - - JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - startPoint.put("lock_type", "1"); - pointTab.update(startPoint); - } + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", "已取消"); + taskTab.update(taskObj); + if (ObjectUtil.isEmpty(startPoint)) return; + startPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); + pointTab.update(startPoint); } if (StrUtil.equals(status, UpdateTaskStatusEnum.EXECUTION.getCode())) { @@ -97,14 +120,12 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask { * 更改任务状态为完成 */ taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); - taskObj.put("update_optname", SecurityUtils.getCurrentUsername()); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); - JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - if (startPoint.getString("point_type").equals("1")) { // 包装缓存位 - // 插入出库单 + if (ObjectUtil.isEmpty(startPoint)) return; + if (startPoint.getString("point_code").startsWith("BT")) { // 包装缓存位 + JSONObject groupObj = groupTab.query("group_id = '" + taskObj.getString("group_id") + "'").uniqueResult(0); JSONObject regionIoObj = new JSONObject(); regionIoObj.put("iostorinv_id", IdUtil.getLongId()); regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); @@ -115,20 +136,21 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask { regionIoObj.put("region_name", startPoint.getString("region_name")); regionIoObj.put("material_id", taskObj.getString("material_id")); regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); + regionIoObj.put("qty", groupObj.getString("qty")); + regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); regionIoObj.put("end_point_code", taskObj.getString("point_code2")); regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_id", "22"); + regionIoObj.put("create_name", "ACS系统"); regionIoObj.put("create_time", DateUtil.now()); regionIoTab.insert(regionIoObj); // 点位更新,起点:空位,解锁; PointUpdateUtil.clearPoint(startPoint.getString("point_code")); } else { // 钢托盘每次就一个 - startPoint.put("lock_type", "1"); + startPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); // 出口点 } pointTab.update(startPoint); } @@ -162,11 +184,10 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask { .task_name("分拣呼叫木托盘") .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) - .acs_task_type("2") - .vehicle_code(form.getString("vehicle_code")) + .acs_task_type("3") .vehicle_type(workOrderObj.getString("vehicle_type")) - .vehicle_qty(form.getIntValue("qty")) - .task_group_id(org.nl.wms.util.IdUtil.getLongId()) + .vehicle_qty(1) +// .task_group_id(org.nl.wms.util.IdUtil.getLongId()) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) .request_param(form.toJSONString()) @@ -205,31 +226,46 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask { taskObj.put("point_code1", noFullPoint.getString("point_code")); taskObj.put("group_id", noFullPoint.getString("group_id")); // 组盘信息挪到任务中 taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("remark", ""); taskTab.update(taskObj); //锁住起点 noFullPoint.put("task_id", taskObj.getString("task_id")); - noFullPoint.put("lock_type", "2"); + noFullPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); pointTab.update(noFullPoint); } else { // 没有就呼叫空的木托盘 - // todo - JSONObject param = new JSONObject(); - param.put("flag", "2"); - param.put("region_code", "BZZCQ"); - param.put("vehicle_type", vehicle_type); - JSONObject kmtPoint = WQL.getWO("QSCH_fjCallEmptyVehicle_01").addParamMap(param).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(kmtPoint)) { + // 获取所有的托盘堆叠位 + JSONArray pointCodes = WQL.getWO("QSCH_fjSendMaterial_01").addParam("flag", "2").process().getResultJSONArray(0); + // 更新点位 + PointUpdateUtil.updatePoint(pointCodes); + // 找到载具类型符合的覆膜机位置:真正的位置在device_code + JSONObject emptyTray = pointTab.query("region_code = 'RGCPQ' AND vehicle_type = '" + + taskObj.getString("vehicle_type") + "' AND point_status = '2' " + + "AND is_used = '1' AND is_delete = '0' AND point_type = '2'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(emptyTray)) { + // 判断出口是否锁住 + JSONObject exitPoint = pointTab.query("point_code = '" + + emptyTray.getString("device_code") + "'" + + " AND lock_type = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(exitPoint)) return; // 出口点锁住就不能呼叫空盘 + // 向ACS申请传送一个空木托盘 + JSONArray jsonArray = new JSONArray(); + JSONObject data = new JSONObject(); + data.put("device_code", exitPoint.getString("point_code")); + jsonArray.add(data); + wmsToAcsService.getTray(jsonArray); + // 去搬运 + taskObj.put("point_code1", exitPoint.getString("point_code")); taskObj.put("update_time", DateUtil.now()); - taskObj.put("point_code1", kmtPoint.getString("point_code")); + taskObj.put("remark", ""); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); - - //锁住起点 - kmtPoint.put("task_id", taskObj.getString("task_id")); - kmtPoint.put("lock_type", "2"); - pointTab.update(kmtPoint); + // 锁住出口点 + exitPoint.put("task_id", taskObj.getString("task_id")); + exitPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); + pointTab.update(exitPoint); } else { - taskObj.put("remark", "未找到可用的载具!"); + taskObj.put("remark", "暂无空托盘"); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); } @@ -261,10 +297,7 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask { public void cancel(String task_id) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"0"); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } + if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!"); + this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.CANCEL.getCode()); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java index f613220..2aa5bd8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java @@ -21,6 +21,7 @@ import org.nl.wms.sch.manage.UpdateTaskStatusEnum; import org.nl.wms.sch.tasks.AcsTaskDto; import org.nl.wms.sch.tasks.PointUpdateUtil; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @@ -43,6 +44,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { * @return */ @Override + @Transactional(rollbackFor = Exception.class) public List addTask() { /* * 下发给ACS时需要特殊处理 @@ -77,6 +79,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { * @created 2019年4月17日 下午8:51:50 */ @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"); @@ -136,6 +139,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { * @return 返回任务标识 */ @Override + @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { /* * 1.先生成确定终点的任务 @@ -163,7 +167,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { .task_name("混碾机叫空盅") .task_status(TaskStatusEnum.SURE_END.getCode()) .point_code2(point_code2) - .acs_task_type("2") + .acs_task_type("3") .workorder_id(workOrderObj.getLong("workorder_id")) .vehicle_code(form.getString("vehicle_code")) .vehicle_type(workOrderObj.getString("is_new"))//载具类型统一用载具表维护 @@ -187,6 +191,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { * @created 2020年6月12日 下午6:01:30 */ @Override + @Transactional(rollbackFor = Exception.class) public void findStartPoint() { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 @@ -212,6 +217,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { taskTab.update(taskObj); } else { taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code1", startPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); @@ -248,10 +254,7 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask { public void cancel(String task_id) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.CANCEL.getCode()); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } + if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!"); + this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.CANCEL.getCode()); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java index 1ff8364..44ba9b4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java @@ -80,12 +80,11 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); - JSONObject requestObj = task.getJSONObject("request_param"); String task_id = task.getString("task_id"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - String point_code1 = task.getString("point_code1"); - String point_code2 = task.getString("point_code2"); + String point_code1 = taskObj.getString("point_code1"); + String point_code2 = taskObj.getString("point_code2"); if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { /* @@ -136,15 +135,14 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { regionIoObj.put("region_name", startPoint.getString("region_name")); regionIoObj.put("material_id", taskObj.getString("material_id")); regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); regionIoObj.put("end_point_code", taskObj.getString("point_code2")); regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_id", "22"); + regionIoObj.put("create_name", "ACS系统"); regionIoObj.put("create_time", DateUtil.now()); regionIoTab.insert(regionIoObj); // 点位更新,起点:空位,解锁; @@ -155,8 +153,9 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { pointTab.update(endPoint); } // 起点解锁 - startPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(startPoint); + JSONObject object = pointTab.query("point_code = '" + startPoint.getString("point_code") + "'").uniqueResult(0); + object.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); + pointTab.update(object); } } @@ -224,7 +223,6 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { for (int i = 0; i < taskArr.size(); i++) { // 创建任务 JSONObject taskObj = taskArr.getJSONObject(i); - String vehicle_type = taskObj.getString("vehicle_type"); // 寻找入窑暂存区是否有半托 JSONObject noFull = new JSONObject(); noFull.put("flag", "1"); @@ -233,6 +231,7 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { JSONObject noFullPoint = WQL.getWO("QSCH_yzjCallEmptyVehicle_01").addParamMap(noFull).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(noFullPoint)) { // 找到半满托盘,叫料出库 taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("group_id", noFullPoint.getString("group_id")); // 组盘信息挪到任务中 taskObj.put("point_code1", noFullPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); @@ -257,6 +256,7 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask { JSONObject kgtPoint = WQL.getWO("QSCH_yzjCallEmptyVehicle_01").addParamMap(param).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(kgtPoint)) { taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code1", kgtPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_fjCallEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_fjCallEmptyVehicle_01.wql index 47bc055..a0339da 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_fjCallEmptyVehicle_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_fjCallEmptyVehicle_01.wql @@ -43,9 +43,7 @@ IF 输入.flag = "1" QUERY SELECT - p.point_id, - p.point_code, - p.point_name + * FROM SCH_BASE_Point p WHERE @@ -54,11 +52,13 @@ AND is_delete = '0' AND is_full = '0' AND point_status = '3' - AND point_type = '1' OPTION 输入.region_code <> "" p.region_code = 输入.region_code ENDOPTION - ORDER BY instorage_time desc + OPTION 输入.material_id <> "" + p.material_id = 输入.material_id + ENDOPTION + ORDER BY instorage_time ENDSELECT ENDQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql index c240eac..8e620f6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql @@ -43,9 +43,7 @@ IF 输入.flag = "1" QUERY SELECT - p.point_id, - p.point_code, - p.point_name + * FROM SCH_BASE_Point p WHERE @@ -63,17 +61,13 @@ IF 输入.flag = "2" QUERY SELECT - p.point_id, - p.point_code, - p.point_name + * FROM SCH_BASE_Point p WHERE lock_type = '1' AND is_used = '1' AND is_delete = '0' - AND point_status = '2' - AND vehicle_qty > '0' OPTION 输入.region_code <> "" p.region_code = 输入.region_code ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java index 6c5b21e..307c910 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java @@ -19,6 +19,7 @@ import org.nl.wms.sch.tasks.AcsTaskDto; import org.nl.wms.sch.tasks.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.List; @@ -39,6 +40,7 @@ public class FjCallMaterialTask extends AbstractAcsTask { * @return */ @Override + @Transactional(rollbackFor = Exception.class) public List addTask() { /* * 下发给ACS时需要特殊处理 @@ -73,6 +75,7 @@ public class FjCallMaterialTask extends AbstractAcsTask { * @created 2019年4月17日 下午8:51:50 */ @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"); @@ -112,7 +115,7 @@ public class FjCallMaterialTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); - JSONObject requestObj = task.getJSONObject("request_param"); + if (ObjectUtil.isEmpty(material_point)) return; //区域出入表【st_ivt_regionIO】 WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); @@ -124,19 +127,18 @@ public class FjCallMaterialTask extends AbstractAcsTask { regionIoObj.put("region_id", material_point.getString("region_id")); regionIoObj.put("region_code", material_point.getString("region_code")); regionIoObj.put("region_name", material_point.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); + regionIoObj.put("material_id", material_point.getString("material_id")); + regionIoObj.put("vehicle_code", material_point.getString("vehicle_code")); + regionIoObj.put("qty", material_point.getString("ivt_qty")); regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); regionIoObj.put("end_point_code", taskObj.getString("point_code2")); regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_id", "22"); + regionIoObj.put("create_name", "ACS系统"); regionIoObj.put("create_time", DateUtil.now()); - regionIoObj.put("task_id", taskObj.getString("task_id")); regionIoTab.insert(regionIoObj); //完成后 @@ -150,6 +152,7 @@ public class FjCallMaterialTask extends AbstractAcsTask { * @return 返回任务标识 */ @Override + @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { String point_code2 = form.getString("point_code2"); String qty = form.getString("qty"); @@ -197,6 +200,7 @@ public class FjCallMaterialTask extends AbstractAcsTask { * @created 2020年6月12日 下午6:01:30 */ @Override + @Transactional(rollbackFor = Exception.class) public void findStartPoint() { // 到出窑缓存区找一托物料 WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 @@ -227,6 +231,7 @@ public class FjCallMaterialTask extends AbstractAcsTask { taskObj.put("vehicle_code", object.getString("vehicle_code")); taskObj.put("point_code1", material_point.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("remark", ""); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); } else { @@ -262,10 +267,7 @@ public class FjCallMaterialTask extends AbstractAcsTask { public void cancel(String task_id) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.CANCEL.getCode()); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } + if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!"); + this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.CANCEL.getCode()); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java index 8d461a9..96eb7f7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java @@ -40,6 +40,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask { * @return */ @Override + @Transactional(rollbackFor = Exception.class) public List addTask() { /* * 下发给ACS时需要特殊处理 @@ -74,6 +75,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask { * @created 2019年4月17日 下午8:51:50 */ @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"); @@ -112,7 +114,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); if (ObjectUtil.isEmpty(material_point)) return; - JSONObject requestObj = task.getJSONObject("request_param"); + JSONObject requestObj = taskObj.getJSONObject("request_param"); // 区域出入表【st_ivt_regionIO】 WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); JSONObject regionIoObj = new JSONObject(); @@ -124,17 +126,15 @@ public class YzjCallMaterialTask extends AbstractAcsTask { regionIoObj.put("region_code", material_point.getString("region_code")); regionIoObj.put("region_name", material_point.getString("region_name")); regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("ivt_weight", requestObj.getString("weight")); + regionIoObj.put("ivt_weight", requestObj.getString("qty")); regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_T.getCode()); regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); regionIoObj.put("end_point_code", taskObj.getString("point_code2")); regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_id", "22"); + regionIoObj.put("create_name", "ACS系统"); regionIoObj.put("create_time", DateUtil.now()); regionIoTab.insert(regionIoObj); //完成后 @@ -148,6 +148,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask { * @return 返回任务标识 */ @Override + @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { String point_code2 = form.getString("point_code2"); String vehicle_type = form.getString("vehicle_type"); @@ -167,6 +168,11 @@ public class YzjCallMaterialTask extends AbstractAcsTask { JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除"); + if (workOrderObj.getString("is_new").equals(WorkOrderEnum.IS_NEW_MATERIAL.getCode()) && point_code2.endsWith("02")) { + // 不需要下发任务,也不能创建任务 + return null; + } + SchTaskDto dto = SchTaskDto.builder() .task_id(IdUtil.getLongId()) .task_code(CodeUtil.getNewCode("TASK_CODE")) @@ -224,13 +230,15 @@ public class YzjCallMaterialTask extends AbstractAcsTask { // 获取工单 JSONObject workOrderObj = workOrderTab.query("workorder_id = '" + taskObj.getString("workorder_id") + "'").uniqueResult(0); JSONObject deviceObj = deviceTab.query("device_code = '" + device_code + "'").uniqueResult(0); + String is_new = "1"; if (deviceObj.getString("device_model").equals("3")) { // 普通压制机:区分新旧物料 // 新物料終点不用修改 - if (workOrderObj.getString("is_new").equals(WorkOrderEnum.IS_OLD_MATERIAL.getCode())) { // 旧物料 + if (workOrderObj.getString("is_new").equals(WorkOrderEnum.IS_MIXIN_MATERIAL.getCode()) && point_code2.endsWith("02")) { // 混料 // 查找该设备对应的旧盅位 JSONObject endPoint = pointTab.query("region_code = 'KLHJ' AND point_type = '4' AND device_code LIKE '%" + point_code2 + "%' AND point_status = '1' AND is_used = '1' AND is_delete = '0' AND lock_type = '1'").uniqueResult(0); point_code2 = endPoint.getString("point_code"); // 未锁的旧盅货架位 + is_new = "2"; } } @@ -239,7 +247,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask { queryParam.put("flag", "1"); queryParam.put("material_id", material_id); queryParam.put("region_code", "KLHJ"); - queryParam.put("is_new", workOrderObj.getString("is_new")); + queryParam.put("is_new", is_new); JSONObject json1 = WQL.getWO("QSCH_yzjCallMaterial_01").addParamMap(queryParam).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(json1)) { // 拿到点位 @@ -251,6 +259,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask { pointTab.update(material_point); taskObj.put("point_code2", point_code2); + taskObj.put("remark", ""); taskObj.put("point_code1", material_point.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskObj.put("update_time", DateUtil.now()); @@ -286,10 +295,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask { public void cancel(String task_id) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"0"); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } + if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!"); + this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.CANCEL.getCode()); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java index a1e1202..6539ad8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java @@ -23,6 +23,7 @@ import org.nl.wms.sch.tasks.PointUpdateUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; /** @@ -42,7 +43,28 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { */ @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 acsTaskArr = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { // 任务 + JSONObject json = arr.getJSONObject(i); + AcsTaskDto dto = AcsTaskDto.builder() + .task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code")) + .vehicle_type(json.getString("vehicle_type")) + .priority(json.getString("priority")) + .remark(json.getString("remark")) + .build(); + acsTaskArr.add(dto); + } + return acsTaskArr; } /** @@ -60,9 +82,9 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); String task_id = taskObj.getString("task_id"); - String point_code1 = taskObj.getString("point_code1"); - String point_code2 = taskObj.getString("point_code2"); JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + String point_code1 = jsonTask.getString("point_code1"); + String point_code2 = jsonTask.getString("point_code2"); if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { // 取消删除任务 @@ -72,7 +94,7 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { // 解锁终点位置 if (ObjectUtil.isNotEmpty(point_code2)) { // 未找到终点的取消只需要完成任务就行 JSONObject point2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - point2.put("lock_type", "1"); + point2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); pointTab.update(point2); } // 任务设置为完成 @@ -92,28 +114,27 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { // 更改任务状态为完成 jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); - jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonTask.put("update_optid", "22"); + jsonTask.put("update_optname", "ACS系统"); jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); // 释放点位 - if (ObjectUtil.isNotEmpty(point_code2)) { // 防止只有确定起点的任务完成 - JSONObject point_2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - point_2.put("lock_type", "1"); - point_2.put("vehicle_code", jsonTask.getString("vehicle_code")); - point_2.put("vehicle_qty", NumberUtil.add(point_2.getString("vehicle_qty"), jsonTask.getString("vehicle_qty"))); - point_2.put("instorage_time", DateUtil.now()); - point_2.put("is_full", "1"); - point_2.put("ivt_qty", "0"); - point_2.put("pcsn", ""); - point_2.put("material_id", ""); - point_2.put("standing_time", "0"); - pointTab.update(point_2); - // 起点设置为空位 - JSONObject point_1 = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - point_1.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode()); - pointTab.update(point_1); - } + if (ObjectUtil.isEmpty(point_code2)) return;// 防止只有确定起点的任务完成 + JSONObject point_2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + point_2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); + point_2.put("vehicle_code", jsonTask.getString("vehicle_code")); + point_2.put("vehicle_qty", NumberUtil.add(point_2.getString("vehicle_qty"), jsonTask.getString("vehicle_qty"))); + point_2.put("instorage_time", DateUtil.now()); + point_2.put("is_full", "1"); + point_2.put("ivt_qty", "0"); + point_2.put("pcsn", ""); + point_2.put("material_id", ""); + point_2.put("standing_time", "0"); + pointTab.update(point_2); + // 起点设置为空位 + JSONObject point_1 = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); + point_1.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode()); + pointTab.update(point_1); } } @@ -171,15 +192,15 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { params.add(param); PointUpdateUtil.updatePoint(params); // 直接找 - JSONObject endPoint = pointTab.query("point_code = 'KGTDDW01' AND lock_type = '1' AND is_used = '1' AND is_delete = '0'").uniqueResult(0); + JSONObject endPoint = pointTab.query("point_code = 'KGTDDW01' AND lock_type = '1' AND is_used = '1' AND is_delete = '0' AND point_status = '1'").uniqueResult(0); if (ObjectUtil.isEmpty(endPoint)) { taskObj.put("remark", "钢托盘堆叠位不可用!"); - taskObj.put("task_status", TaskStatusEnum.SURE_START.getCode()); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); } else { taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code2", endPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); @@ -201,7 +222,10 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { */ @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); } /** @@ -211,6 +235,9 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask { */ @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, UpdateTaskStatusEnum.CANCEL.getCode()); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/FjSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/FjSendEmpVehicleTask.java index 505d64c..e712887 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/FjSendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/FjSendEmpVehicleTask.java @@ -22,6 +22,7 @@ import org.nl.wms.sch.manage.UpdateTaskStatusEnum; import org.nl.wms.sch.tasks.AcsTaskDto; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -41,11 +42,32 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask { */ @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 acsTaskArr = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { // 任务 + JSONObject json = arr.getJSONObject(i); + AcsTaskDto dto = AcsTaskDto.builder() + .task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code")) + .vehicle_type(json.getString("vehicle_type")) + .priority(json.getString("priority")) + .remark(json.getString("remark")) + .build(); + acsTaskArr.add(dto); + } + return acsTaskArr; } /** - * @param taskObj 代表一条任务对象 + * @param task 代表一条任务对象 * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 * @return * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 @@ -53,17 +75,17 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask { * @created 2019年4月17日 下午8:51:50 */ @Override - public void updateTaskStatus(JSONObject taskObj, String status) { + public void updateTaskStatus(JSONObject task, String status) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - String task_id = taskObj.getString("task_id"); + String task_id = task.getString("task_id"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); String point_code2 = taskObj.getString("point_code2"); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { // 取消删除任务 - if (StrUtil.equals(jsonTask.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { + if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { throw new BadRequestException("已完成不能取消!"); } // 解锁终点位置 @@ -73,31 +95,29 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask { pointTab.update(point2); } // 任务设置为完成 - jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("remark", "已取消"); - taskTab.update(jsonTask); + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("remark", "已取消"); + taskTab.update(taskObj); } if (UpdateTaskStatusEnum.EXECUTION.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); + 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, UpdateTaskStatusEnum.FORCEFINISH.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); + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); // 释放点位 if (ObjectUtil.isNotEmpty(point_code2)) { // 防止只有确定起点的任务完成 JSONObject point_2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); point_2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - point_2.put("vehicle_qty", NumberUtil.add(point_2.getString("vehicle_qty"), jsonTask.getString("vehicle_qty"))); + point_2.put("vehicle_qty", NumberUtil.add(point_2.getString("vehicle_qty"), taskObj.getString("vehicle_qty"))); pointTab.update(point_2); } } @@ -122,9 +142,9 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask { .task_type("") .task_name("分拣送空钢托盘") .task_status(TaskStatusEnum.SURE_START.getCode()) + .acs_task_type("4") .point_code1(point_code1) - .vehicle_code(form.getString("vehicle_code")) - .vehicle_type(form.getString("vehicle_type")) + .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) .vehicle_qty(1) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) @@ -158,7 +178,8 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask { taskTab.update(taskObj); } else { taskObj.put("update_time", DateUtil.now()); - taskObj.put("point_code2", endPoint.getString("point_code")); + taskObj.put("remark", ""); + taskObj.put("point_code2", "KGTDTW01"); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); 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 deleted file mode 100644 index 06c6e02..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java +++ /dev/null @@ -1,449 +0,0 @@ -package org.nl.wms.sch.tasks.sendEmpty; - -import cn.hutool.core.date.DateUtil; -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; -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; -import org.nl.wms.sch.manage.RegionTypeEnum; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * 一楼往二楼送空托盘业务 - */ -@Service -@RequiredArgsConstructor -@Slf4j -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) { - 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")) { - // 取消删除任务 - 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 + "'"); - } - - 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_time", DateUtil.now()); - taskTab.update(jsonTask); - - 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(endPoint.getString("region_id"), RegionTypeEnum.DPJQA.getId())) { - Integer vehicle_qty = endPoint.getInteger("vehicle_qty"); - vehicle_qty += jsonTask.getInteger("vehicle_qty"); - endPoint.put("lock_type", "1"); - endPoint.put("vehicle_qty", vehicle_qty); - endPoint.put("point_status", "2"); - endPoint.put("vehicle_type", jsonTask.getString("vehicle_type")); - 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"); - pointTab.update(endPoint); - } - } - } - - - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - /* - * 1.先生成确定起点的任务 - * 2.通过findNextPoint()找终点 - * 3.下发给ACS - */ - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - - String point_code1 = form.getString("point_code1"); - - SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("") - .task_name("电梯送空载具") - .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()); - } - - @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); - for (int i = 0; i < taskArr.size(); i++) { - JSONObject jsonTask = taskArr.getJSONObject(i); - String point_code_ht = ""; - - //判断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 j = 0; j < pointArr.size(); j++) { - JSONObject json = pointArr.getJSONObject(j); - boolean is_empTask = this.isTask(json.getString("point_code")); - - if (!is_empTask) taskArrNum.add(json); - } - - if (taskArrNum.size() > 0) { - - } else { - point_code_ht = "SSX01A1"; - } - } - - // 判断SSX02A1是否有任务没有则判断其他的三个点位 - if (ObjectUtil.isEmpty(point_code_ht)) { - 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 k = 0; k < pointArr.size(); k++) { - JSONObject json = pointArr.getJSONObject(k); - boolean is_empTask = this.isTask(json.getString("point_code")); - - if (!is_empTask) taskArrNum.add(json); - } - - if (taskArrNum.size() > 0) { - - } else { - point_code_ht = "SSX02A1"; - } - } - } - - // 如果此时point_code_ht为空则循环下一个任务 - if (ObjectUtil.isEmpty(point_code_ht)) { - continue; - } - - // 说明货梯无任务:找终点 - JSONObject param = new JSONObject(); - param.put("vehicle_type", jsonTask.getString("vehicle_type")); - param.put("qty", jsonTask.getString("vehicle_qty")); - String endPoint = this.endPoint(param); - - // 如果此时endPoint为空则循环下一个任务 - if (ObjectUtil.isEmpty(endPoint)) { - continue; - } - - // 更新任务表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) { - /* - * 强制完成 - */ - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"2"); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } - } - - @Override - public void cancel(String task_id) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"0"); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } - } - - @Transactional(rollbackFor = Exception.class) - public String endPoint(JSONObject param) { - /* - * 1.叠盘架有A对应货位 规则:如果暂存位能放下则放暂存位如果放不下则走2或3 - * 2.叠盘架A没有货位 则去叠盘架暂存位 - * 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.DPJQA.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.KTPHCQA.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 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"); - } - } - } - } - } else { - // 2.叠盘架没有空位去找叠盘暂存位 - JSONObject jsonZcwEnd = pointTab.query("region_id = '" + RegionTypeEnum.KTPHCQA.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 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"); - } - } - } - } - - 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 row_num = '" + jsonPoint2.getString("row_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 row_num = '" + jsonPoint2.getString("row_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 row_num = '" + jsonPoint2.getString("row_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); - } - //判断点位是否属于养生A区 - if (point_code.startsWith("2")) { - //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) - point_code = point_code.substring(0, 4) + "1" + point_code.substring(4, 9); - } - 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); - - String point_code3=json.getString("point_code3"); - //判断终点是否属于养生A区 - if (point_code3.startsWith("2")) { - //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) - point_code3 = point_code3.substring(0, 4) + "1" + point_code3.substring(4, 9); - } - - - AcsTaskDto dto = AcsTaskDto.builder() - .task_id(json.getString("task_id")) - .task_code(json.getString("task_code")) - .task_type(json.getString("acs_task_type")) - .start_device_code(json.getString("point_code1")) - .next_device_code(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; - } -} 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 deleted file mode 100644 index 8ba40e4..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YqxSendEmpVehicleTask.java +++ /dev/null @@ -1,403 +0,0 @@ -package org.nl.wms.sch.tasks.sendEmpty; - -import cn.hutool.core.date.DateUtil; -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; -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; -import org.nl.wms.sch.manage.RegionTypeEnum; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -@Service -@RequiredArgsConstructor -@Slf4j -public class YqxSendEmpVehicleTask extends AbstractAcsTask { - private final String THIS_CLASS = YqxSendEmpVehicleTask.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")) { - // 取消删除任务 - 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 + "'"); - } - - 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_time", DateUtil.now()); - taskTab.update(jsonTask); - - 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(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"); - endPoint.put("vehicle_qty", vehicle_qty); - endPoint.put("point_status", "2"); - endPoint.put("vehicle_type", jsonTask.getString("vehicle_type")); - 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"); - pointTab.update(endPoint); - } - } - } - - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - /* - * 1.先生成确定起点的任务 - * 2.通过findNextPoint()找终点 - * 3.下发给ACS - */ - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - - String point_code1 = form.getString("point_code1"); - - SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("") - .task_name("油漆线空盘入库") - .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); - for (int i = 0; i < taskArr.size(); i++) { - JSONObject jsonTask = taskArr.getJSONObject(i); - - // 找终点 - JSONObject param = new JSONObject(); - param.put("vehicle_type", jsonTask.getString("vehicle_type")); - param.put("qty", jsonTask.getString("vehicle_qty")); - String endPoint = this.endPoint(param); - - // 如果此时endPoint为空则循环下一个任务 - if (ObjectUtil.isEmpty(endPoint)) { - continue; - } - - // 更新任务表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) { - /* - * 强制完成 - */ - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"2"); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } - } - - - @Override - public void cancel(String task_id) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,"0"); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } - } - - @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 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"); - } - } - } - } - } 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 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"); - } - } - } - } - - 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 row_num = '" + jsonPoint2.getString("row_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 row_num = '" + jsonPoint2.getString("row_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 row_num = '" + jsonPoint2.getString("row_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); - } - //判断点位是否属于养生A区 - if (point_code.startsWith("2")) { - //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) - point_code = point_code.substring(0, 4) + "1" + point_code.substring(4, 9); - } - 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); - String point_code3 = json.getString("point_code3"); - //判断终点是否属于养生A区 - if (point_code3.startsWith("2")) { - //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) - point_code3 = point_code3.substring(0, 4) + "1" + point_code3.substring(4, 9); - } - - - 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(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; - } - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java index 6e61fe7..7ae1196 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java @@ -112,8 +112,8 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { // 更改任务状态为完成 jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); - jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonTask.put("update_optid", "22"); + jsonTask.put("update_optname", "ACS系统"); jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); // 释放点位 @@ -189,6 +189,7 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { taskTab.update(taskObj); } else { taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code2", endPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); @@ -225,10 +226,7 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask { public void cancel(String task_id) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) - this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.CANCEL.getCode()); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } + if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!"); + this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.CANCEL.getCode()); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql index 61a4c22..b2a0812 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql @@ -65,7 +65,6 @@ OPTION 输入.vehicle_type <> "" p.can_vehicle_type like 输入.vehicle_type ENDOPTION - ORDER BY col_num desc,row_num,layer_num ENDSELECT ENDQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java index 305a1cd..8e7f961 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java @@ -13,13 +13,17 @@ 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.ext.acs.service.WmsToAcsService; +import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl; import org.nl.wms.sch.SchTaskDto; import org.nl.wms.sch.manage.*; import org.nl.wms.sch.tasks.AcsTaskDto; import org.nl.wms.sch.tasks.PointUpdateUtil; +import org.nl.wms.sch.tasks.callEmpty.FjCallEmptyVehicleTask; import org.nl.wms.sch.tasks.sendEmpty.FjSendEmpVehicleTask; import org.nl.wms.util.IdUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -35,9 +39,8 @@ import java.util.List; @RequiredArgsConstructor @Slf4j public class FjSendMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = FjSendEmpVehicleTask.class.getName(); + private final String THIS_CLASS = FjSendMaterialTask.class.getName(); - private final WmsToAcsService wmsToAcsService; /** * 添加任务进行下发 * @@ -252,6 +255,7 @@ public class FjSendMaterialTask extends AbstractAcsTask { .material_qty(qty) .task_status(TaskStatusEnum.SURE_START.getCode()) .point_code1(point_code1) + .acs_task_type("1") .vehicle_code(vehicle_code) .vehicle_type(workOrderObj.getString("vehicle_type")) .workorder_id(workOrderObj.getLong("workorder_id")) @@ -286,30 +290,55 @@ public class FjSendMaterialTask extends AbstractAcsTask { for (int i = 0; i < taskArr.size(); i++) { JSONObject taskObj = taskArr.getJSONObject(i); JSONObject requestObj = taskObj.getJSONObject("request_param"); - if (requestObj.getString("is_full").equals("1")) { - JSONObject endPoint = pointTab.query("point_code = 'BZX01' AND lock_type = '1'").uniqueResult(0); + if (requestObj.getString("is_full").equals("1")) { // 满拖去包装线,并且叫空木托盘 + // 更新包装线点位 + JSONArray jsonArray = new JSONArray(); + JSONObject data = new JSONObject(); + data.put("device_code", "BZX01"); + jsonArray.add(data); + // 更新点位 + PointUpdateUtil.updatePoint(jsonArray); + // 找点位 + JSONObject endPoint = pointTab.query("point_code = 'BZX01' AND" + + " point_status = '1' AND lock_type = '1'").uniqueResult(0); // 空位 + //判断当前点是否有未完成的任务 + JSONObject taskObj2 = taskTab.query("task_group_id = '" + taskObj.getString("task_group_id") + "' and sort_seq = '1'").uniqueResult(0); +// JSONObject param = new JSONObject(); +// if (ObjectUtil.isNotEmpty(taskObj2)){ +// param.put("point_code2", taskObj.getString("point_code1")); // 起点 +// SpringContextHolder.getBean(FjCallEmptyVehicleTask.class).createTask(param); +// } // 满拖先生成叫半托,没有在呼叫空托盘的任务,在执行去到包装线 - SchTaskDto dto = SchTaskDto.builder() - .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("task_type") - .task_name("分拣呼叫空托盘") - .vehicle_type(taskObj.getString("vehicle_type")) // 与满拖的类型一致,因为工单未结束 - .material_qty(taskObj.getString("material_qty")) - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(taskObj.getString("point_code2")) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .sort_seq(1) - .task_group_id(taskObj.getLong("task_group_id")) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); + SchTaskDto dto = null; + if (ObjectUtil.isEmpty(taskObj2)) { + dto = SchTaskDto.builder() + .task_id(IdUtil.getLongId()) + .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_type("task_type") + .task_name("分拣呼叫空托盘") + .vehicle_type(taskObj.getString("vehicle_type")) // 与满拖的类型一致,因为工单未结束 + .material_qty(taskObj.getString("material_qty")) + .task_status(TaskStatusEnum.SURE_END.getCode()) + .point_code2(taskObj.getString("point_code1")) + .handle_class(THIS_CLASS) + .create_time(DateUtil.now()) + .sort_seq(1) + .task_group_id(taskObj.getLong("task_group_id")) + .build(); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + taskTab.insert(json); + } // 先呼叫半托 JSONObject halfTray = pointTab.query("region_code = 'BZZCQ' AND lock_type = '1' " + "AND point_status = '2' AND is_used = '1' AND is_delete = '0'").uniqueResult(0); // 获取任务 - JSONObject taskEnt = taskTab.query("task_id = '" + dto.getTask_id() + "'").uniqueResult(0); + String id = null; + if (ObjectUtil.isNotEmpty(dto)) { + id = String.valueOf(dto.getTask_id()); + } else { + id = taskObj2.getString("task_id"); + } + JSONObject taskEnt = taskTab.query("task_id = '" + id + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(halfTray)) { // 半托 // 去搬运 taskEnt.put("point_code1", halfTray.getString("point_code")); @@ -330,24 +359,30 @@ public class FjSendMaterialTask extends AbstractAcsTask { // 找到载具类型符合的覆膜机位置:真正的位置在device_code JSONObject emptyTray = pointTab.query("region_code = 'RGCPQ' AND vehicle_type = '" + taskObj.getString("vehicle_type") + "' AND point_status = '2' " + - "AND is_used = '1' AND is_delete = '0' AND lock_type = '1'").uniqueResult(0); - + "AND is_used = '1' AND is_delete = '0'").uniqueResult(0); if (ObjectUtil.isNotEmpty(emptyTray)) { + // 判断出口是否锁住 + JSONObject exitPoint = pointTab.query("point_code = '" + + emptyTray.getString("device_code") + "'" + + " AND lock_type = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(exitPoint)) return; // 出口点锁住就不能呼叫空盘 // 向ACS申请传送一个空木托盘 - JSONArray jsonArray = new JSONArray(); - JSONObject data = new JSONObject(); - data.put("device_code", emptyTray.getString("point_code")); - jsonArray.add(data); - wmsToAcsService.getTray(jsonArray); + JSONArray jsons = new JSONArray(); + JSONObject datas = new JSONObject(); + datas.put("device_code", emptyTray.getString("point_code")); + jsons.add(datas); + WmsToAcsServiceImpl wmsToAcsService = SpringContextHolder.getBean(WmsToAcsServiceImpl.class); + wmsToAcsService.getTray(jsons); // 去搬运 - taskEnt.put("point_code1", emptyTray.getString("device_code")); + taskEnt.put("point_code1", exitPoint.getString("point_code")); taskEnt.put("update_time", DateUtil.now()); + taskEnt.put("remark", ""); taskEnt.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskEnt); // 更新空托盘点位状态 - emptyTray.put("task_id", taskObj.getString("task_id")); - emptyTray.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(emptyTray); + exitPoint.put("task_id", taskObj.getString("task_id")); + exitPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); + pointTab.update(exitPoint); } else { taskEnt.put("remark", "暂无空托盘"); taskEnt.put("update_time", DateUtil.now()); @@ -360,7 +395,9 @@ public class FjSendMaterialTask extends AbstractAcsTask { } } // 更新送料任务信息 + if (ObjectUtil.isEmpty(endPoint)) return; taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code2", endPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java index fb6c891..9473daa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java @@ -18,6 +18,7 @@ import org.nl.wms.sch.manage.*; import org.nl.wms.sch.tasks.AcsTaskDto; import org.nl.wms.util.IdUtil; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @@ -114,8 +115,8 @@ public class HnSendMaterialTask extends AbstractAcsTask { if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { // 更改任务状态为完成 taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); - taskObj.put("update_optname", SecurityUtils.getCurrentUsername()); + taskObj.put("update_optid", "22"); + taskObj.put("update_optname", "ACS系统"); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); @@ -124,7 +125,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { if (ObjectUtil.isEmpty(point_code2)) return; // 防止未找到终点而完成任务空指针 JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject requestObj = task.getJSONObject("request_param"); + JSONObject requestObj = taskObj.getJSONObject("request_param"); // 工单标识 String workorder_id = taskObj.getString("workorder_id"); JSONObject workorderObj = workOrderTab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); @@ -144,16 +145,15 @@ public class HnSendMaterialTask extends AbstractAcsTask { regionIoObj.put("region_name", point2Obj.getString("region_name")); regionIoObj.put("material_id", taskObj.getString("material_id")); regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("ivt_weight", requestObj.getString("weight")); + regionIoObj.put("ivt_weight", requestObj.getString("qty")); regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_T.getCode()); regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); regionIoObj.put("end_point_code", taskObj.getString("point_code2")); regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_id", "22"); + regionIoObj.put("create_name", "ACS系统"); regionIoObj.put("create_time", DateUtil.now()); regionIoTab.insert(regionIoObj); @@ -183,6 +183,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { * 混碾机送料到困料货架 */ @Override + @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { String point_code1 = form.getString("point_code1"); String vehicle_code = form.getString("vehicle_code"); @@ -251,7 +252,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { paramObj.put("flag", "1"); paramObj.put("material_id", taskObj.getString("material_id")); JSONArray workerOrders = WQL.getWO("QSCH_hnSendMaterial_01").addParamMap(paramObj).process().getResultJSONArray(0); - for (int j = 0; j < workerOrders.size(); j++) { + for (int j = 0; j < workerOrders.size(); j++) { // 根据符合的工单查找 JSONObject workerOrder = workerOrders.getJSONObject(j); // 判断仓库是否有该物料 JSONObject param2 = new JSONObject(); @@ -272,6 +273,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { // 找到位置就可以直接搬 taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code2", endPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); @@ -294,6 +296,7 @@ public class HnSendMaterialTask extends AbstractAcsTask { taskTab.update(taskObj); } else { taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code2", endPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java index 0f13ee1..1529ac7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java @@ -111,16 +111,16 @@ public class SzSendMaterialTask extends AbstractAcsTask { String vehicle_code = taskObj.getString("vehicle_code"); // 更改任务状态为完成 taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); - taskObj.put("update_optname", SecurityUtils.getCurrentUsername()); + taskObj.put("update_optid", "22"); + taskObj.put("update_optname", "ACS系统"); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); String point_code2 = taskObj.getString("point_code2"); if (ObjectUtil.isEmpty(point_code2)) return; JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject requestObj = task.getJSONObject("request_param"); JSONObject groupObj = groupTab.query("group_id = '" + taskObj.getString("group_id") + "'").uniqueResult(0); + //区域出入表【st_ivt_regionIO】 WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); JSONObject regionIoObj = new JSONObject(); @@ -131,27 +131,27 @@ public class SzSendMaterialTask extends AbstractAcsTask { regionIoObj.put("region_id", point2Obj.getString("region_id")); regionIoObj.put("region_code", point2Obj.getString("region_code")); regionIoObj.put("region_name", point2Obj.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); + regionIoObj.put("material_id", groupObj.getString("material_uuid")); regionIoObj.put("vehicle_code", vehicle_code); - regionIoObj.put("qty", requestObj.getString("qty")); + regionIoObj.put("qty", groupObj.getString("qty")); regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code3")); + regionIoObj.put("end_point_code", taskObj.getString("point_code2")); regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_id", "22"); + regionIoObj.put("create_name", "ACS系统"); regionIoObj.put("create_time", DateUtil.now()); regionIoTab.insert(regionIoObj); //完成后入库 point2Obj.put("instorage_time", DateUtil.now()); point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - point2Obj.put("ivt_qty", requestObj.getString("qty")); - point2Obj.put("material_id", taskObj.getString("material_id")); - point2Obj.put("vehicle_type", taskObj.getString("vehicle_type")); - point2Obj.put("vehicle_code", taskObj.getString("vehicle_code")); + point2Obj.put("ivt_qty", groupObj.getString("qty")); + point2Obj.put("material_id", groupObj.getString("material_uuid")); + point2Obj.put("vehicle_type", groupObj.getString("vehicle_type")); + point2Obj.put("vehicle_code", groupObj.getString("vehicle_code")); point2Obj.put("vehicle_qty", "1"); // 入库为1个载具 point2Obj.put("is_full", groupObj.getString("is_full")); point2Obj.put("group_id", groupObj.getString("group_id")); @@ -187,6 +187,7 @@ public class SzSendMaterialTask extends AbstractAcsTask { .task_code(CodeUtil.getNewCode("TASK_CODE")) .task_type("task_type") .task_name("烧制入库") + .acs_task_type("1") .material_id(groupObj.getLong("material_uuid")) .group_id(groupObj.getLong("group_id")) .material_qty(qty) @@ -230,6 +231,7 @@ public class SzSendMaterialTask extends AbstractAcsTask { taskTab.update(taskObj); } else { taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code2", endPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java index 5ed29a0..02159c3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java @@ -18,6 +18,7 @@ import org.nl.wms.sch.manage.*; import org.nl.wms.sch.tasks.AcsTaskDto; import org.nl.wms.util.IdUtil; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @@ -75,6 +76,8 @@ public class YzjSendMaterialTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject task, String status) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + //生产工单表【PDM_BD_WorkOrder】 + WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); String task_id = task.getString("task_id"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); @@ -107,20 +110,18 @@ public class YzjSendMaterialTask extends AbstractAcsTask { if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { // 更改任务状态为完成 taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); - taskObj.put("update_optname", SecurityUtils.getCurrentUsername()); + taskObj.put("update_optid", "22"); + taskObj.put("update_optname", "ACS系统"); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); String point_code2 = taskObj.getString("point_code2"); JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); if (ObjectUtil.isEmpty(point2Obj)) return; - JSONObject requestObj = task.getJSONObject("request_param"); + JSONObject requestObj = taskObj.getJSONObject("request_param"); //工单标识 - String workorder_id = requestObj.getString("workorder_id"); - //生产工单表【PDM_BD_WorkOrder】 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0); + String workorder_id = taskObj.getString("workorder_id"); + JSONObject workorderObj = workOrderTab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); //区域出入表【st_ivt_regionIO】 WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); @@ -142,8 +143,8 @@ public class YzjSendMaterialTask extends AbstractAcsTask { regionIoObj.put("end_point_code", taskObj.getString("point_code3")); regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_id", "22"); + regionIoObj.put("create_name", "ACS系统"); regionIoObj.put("create_time", DateUtil.now()); regionIoTab.insert(regionIoObj); @@ -173,6 +174,7 @@ public class YzjSendMaterialTask extends AbstractAcsTask { * 压制机送料入窑缓存货架 */ @Override + @Transactional(rollbackFor = Exception.class) public String createTask(JSONObject form) { String point_code1 = form.getString("point_code1"); String vehicle_code = form.getString("vehicle_code"); @@ -247,6 +249,7 @@ public class YzjSendMaterialTask extends AbstractAcsTask { taskTab.update(taskObj); } else { taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code2", endPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjSendMaterial_01.wql index e1422aa..b00f35b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjSendMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjSendMaterial_01.wql @@ -53,7 +53,6 @@ AND is_used = '1' AND is_delete = '0' AND point_status = '1' - AND point_type = '1' OPTION 输入.region_code <> "" p.region_code = 输入.region_code ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql index 813b6ec..6eaab6f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql @@ -53,7 +53,11 @@ WHERE workorder.order_status = '3' AND + workorder.is_delete = '0' + AND device.device_model = '4' + AND + workorder.is_delete = '0' OPTION 输入.material_id <> "" workorder.material_id = 输入.material_id ENDOPTION 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 95fdefc86242f280f0a6b26d4b48248d15f6f9b1..5742fc627d2595af313d27bde36890fab6ab56ae 100644 GIT binary patch delta 20302 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 delta 19897 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 diff --git a/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue b/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue index 8ec0811..ccec58a 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue @@ -124,14 +124,14 @@ - - + + + + - - + - - + @focus="deviceShow=true" + @clear="form.device_id='', form.device_code=''" + /> + + + + + - + - +