From e64259eb9f7b25bee4bf6a8803b730a64f718ba9 Mon Sep 17 00:00:00 2001 From: 18188916393 <2562295436@qq.com> Date: Thu, 4 Aug 2022 15:58:04 +0800 Subject: [PATCH] =?UTF-8?q?acs=E6=B5=8B=E8=AF=95=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/wms/common/KilnUtil.java | 54 ++++++++++ .../src/main/java/org/nl/wms/ext/1 | 0 .../wms/ext/acs/rest/AcsToWmsController.java | 13 +++ .../wms/ext/acs/service/AcsToWmsService.java | 16 +++ .../acs/service/impl/AcsToWmsServiceImpl.java | 98 ++++++++++++++++-- .../nl/wms/sch/manage/AbstractAcsTask.java | 4 +- .../java/org/nl/wms/sch/task/AcsTaskDto.java | 2 +- .../org/nl/wms/sch/task/AutoCreateTask.java | 4 +- .../src/main/java/org/nl/wms/wms.xls | Bin 379904 -> 380416 bytes .../src/test/java/org/nl/Test3.java | 13 ++- 10 files changed, 190 insertions(+), 14 deletions(-) create mode 100644 wms/hd/nladmin-system/src/main/java/org/nl/wms/common/KilnUtil.java delete mode 100644 wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/1 diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/KilnUtil.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/KilnUtil.java new file mode 100644 index 0000000..dd4f85b --- /dev/null +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/common/KilnUtil.java @@ -0,0 +1,54 @@ +package org.nl.wms.common; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import org.nl.exception.BadRequestException; +import org.nl.wql.core.bean.WQLObject; + +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; + +public class KilnUtil { + static Queue KilnQueue = new ArrayBlockingQueue<>(10); + //入窑扫码 + public static void inKiln(String vehicle_code) { + KilnQueue.offer(vehicle_code); + //插入窑设备记录表 + WQLObject recordTable = WQLObject.getWQLObject("pdm_bi_kilnrecord"); + WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup"); + JSONObject groupObj = groupTable.query("vehicle_code ='" + vehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(groupObj)) { + throw new BadRequestException("未找到组盘信息,不能入窑!"); + } + JSONObject jo = new JSONObject(); + jo.put("record_id", IdUtil.getSnowflake(1, 1).nextId()); + jo.put("vehicle_code", vehicle_code); + jo.put("material_id", groupObj.getString("material_id")); + jo.put("material_code", groupObj.getString("material_code")); + jo.put("material_name", groupObj.getString("material_name")); + jo.put("material_spec", groupObj.getString("material_spec")); + jo.put("qty", groupObj.getString("qty")); + jo.put("in_time", DateUtil.now()); + jo.put("out_time", ""); + jo.put("is_success", "0"); + jo.put("is_delete", "0"); + recordTable.insert(jo); + } + + //出窑扫码 + public static void outKiln(String vehicle_code) { + KilnQueue.offer(vehicle_code); + //更新窑设备记录表 + WQLObject recordTable = WQLObject.getWQLObject("pdm_bi_kilnrecord"); + JSONObject vehicleObj = recordTable.query("vehicle_code='" + vehicle_code + " and out_time ='''").uniqueResult(0); + if (ObjectUtil.isEmpty(vehicleObj)) { + throw new BadRequestException("未找到信息"); + } + vehicleObj.put("out_time", DateUtil.now()); + recordTable.update(vehicleObj); + } + + +} diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/1 b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/1 deleted file mode 100644 index e69de29..0000000 diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 1c5b8ff..566feb8 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -51,6 +51,13 @@ public class AcsToWmsController { acsToWmsService.group(whereJson); return new ResponseEntity<>(HttpStatus.OK); } + @PostMapping("/inKiln") + @Log("入窑扫码器") + @ApiOperation("入窑扫码器") + public ResponseEntity inKiln(@RequestBody Map whereJson) { + acsToWmsService.inKiln(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } @PostMapping("/ispackage") @Log("ACS给WMS请求是否自动码垛") @@ -96,4 +103,10 @@ public class AcsToWmsController { return new ResponseEntity<>(HttpStatus.OK); } + @PostMapping("/status") + @Log("ACS给WMS反馈任务状态") + @ApiOperation("ACS给WMS反馈任务状态") + public ResponseEntity receiveTaskStatusAcs(@RequestBody String string) { + return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK); + } } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index 1bb2a21..f5de362 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -31,7 +31,14 @@ public interface AcsToWmsService { */ void group(Map jsonObject); + /** + * 入窑扫码器 + * + * @param jsonObject 条件 + * @return Map + */ + Map inKiln(Map jsonObject); /** * ACS给WMS请求是否优先包装 @@ -75,5 +82,14 @@ public interface AcsToWmsService { void sureProduceTask(Map jsonObject); void updateVehicleType(Map jsonObject); + /** + * ACS客户端--->WMS服务端 + * ACS向WMS反馈任务状态 + * + * @param jsonObject 条件 + * @return Map + */ + + Map receiveTaskStatusAcs(String string); } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 6ec272b..dd95ae1 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -9,21 +9,29 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.units.qual.K; import org.nl.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; import org.nl.utils.SecurityUtils; import org.nl.wms.WorkProcedureEnum; +import org.nl.wms.common.KilnUtil; import org.nl.wms.common.PointUpdateUtil; import org.nl.wms.common.StructFindUtil; import org.nl.wms.database.service.dto.VehicleDto; import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.sch.manage.AreaEnum; +import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.manage.buss.*; +import org.nl.wms.sch.service.TaskService; +import org.nl.wms.sch.service.dto.TaskDto; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Map; @Service @@ -37,6 +45,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private final RgvTask rgvTask; private final WmsToAcsServiceImpl wmsToAcsServiceImpl; private final ToConveyorTask toConveyorTask; + private final TaskService taskService; + @Override @Transactional(rollbackFor = Exception.class) @@ -160,7 +170,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (ObjectUtil.isEmpty(produceInfoByCode)) { throw new BadRequestException("未找到点位为'" + device_code + "'对应机械手的生产工单!"); } - jsonObject.put("vehicle_type",produceInfoByCode.getString("vehicle_type")); + jsonObject.put("vehicle_type", produceInfoByCode.getString("vehicle_type")); callEmptyVehicleTask.createTask((JSONObject) JSON.toJSON(jsonObject)); break; @@ -340,6 +350,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } } + @Override + public Map inKiln(Map jsonObject) { + String vehicle_code = String.valueOf(jsonObject.get("vehicle_code")); + KilnUtil.inKiln(vehicle_code); + return new JSONObject(); + } + @Override @Transactional(rollbackFor = Exception.class) public Map ispackage(Map jsonObject) { @@ -355,7 +372,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject groupObj = groupTable.query("vehicle_code ='" + vehicle_code + "'").uniqueResult(0); groupTable.query("vehicle_code ='" + vehicle_code + "'").uniqueResult(0); JSONObject returnjo = new JSONObject(); - returnjo.put("is_autopackage", groupObj.getString("is_autopackage")); + returnjo.put("code", groupObj.getString("is_autopackage")); + //更新窑的信息 + KilnUtil.outKiln(vehicle_code); return returnjo; } @@ -424,8 +443,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { String producetask_code = (String) jsonObject.get("producetask_code"); String device_code = (String) jsonObject.get("device_code"); String material_code = (String) jsonObject.get("material_code"); - String qty = (String) jsonObject.get("qty"); - String weight = (String) jsonObject.get("weight"); + String qty = String.valueOf(jsonObject.get("qty")); String type = (String) jsonObject.get("type"); if (StrUtil.isEmpty(type)) { throw new BadRequestException("类型不能为空!"); @@ -459,14 +477,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (!StrUtil.equals(materiObj.getString("material_id"), taskObj.getString("material_id"))) { throw new BadRequestException("物料标识不一样!"); } - taskObj.put("producetask_status", "03"); + taskObj.put("producetask_status", "04"); } if (StrUtil.equals("2", type)) { - taskObj.put("producetask_status", "04"); - } - if (StrUtil.equals("3", type)) { taskObj.put("producetask_status", "05"); + taskObj.put("real_qty",qty); } taskTable.update(taskObj); } @@ -494,6 +510,72 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } + @Override + public Map receiveTaskStatusAcs(String string) { + { + JSONArray array = JSONArray.parseArray(string); + //返回处理失败的任务 + JSONArray errArr = new JSONArray(); + for (int i = 0; i < array.size(); i++) { + JSONObject row = array.getJSONObject(i); + String task_id = row.getString("ext_task_uuid"); + row.put("task_id",task_id); + TaskDto taskDto = taskService.findById(task_id); + String processing_class = taskDto.getHandle_class(); + //1:执行中,2:完成 ,3:acs取消 + String acs_task_status = row.getString("task_status"); + String message = ""; + String status = ""; + if ("1".equals(acs_task_status)) { + status = TaskStatusEnum.EXECUTING.getCode(); + } + if ("2".equals(acs_task_status)) { + status = TaskStatusEnum.FINISHED.getCode(); + } + // 任务处理类 + try { + Class clz = Class.forName(processing_class); + Object obj = clz.newInstance(); + // 调用每个任务类的forceFinishInst()强制结束方法 + Method m = obj.getClass().getDeclaredMethod("updateTaskStatus", JSONObject.class, String.class); + m.invoke(obj, row, status); + } catch (InvocationTargetException e) { + e.printStackTrace(); + //空指针 + if (ObjectUtil.isNull(e.getTargetException().getMessage())) { + message = e.getTargetException().toString(); + } else { + message = e.getTargetException().getMessage(); + } + log.info("任务状态更新失败:{}", message); + + JSONObject json = new JSONObject(); + json.put("task_id", task_id); + json.put("message", message); + errArr.add(json); + + } catch (Exception e) { + e.printStackTrace(); + message = e.getMessage(); + log.info("任务状态更新失败:{}", message); + + JSONObject json = new JSONObject(); + json.put("task_id", task_id); + json.put("message", message); + errArr.add(json); + + } + } + + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + result.put("errArr", errArr); + return result; + } + } + private JSONObject getProduceInfoByCode(String code) { //根据 设备点位去找生产任务信息 //1 根据点位去找设备,去找对应的设备信息 diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index 2a1d833..e74c5c8 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -48,7 +48,7 @@ public abstract class AbstractAcsTask { for (int i = 0, j = tasks.size(); i < j; i++) { JSONObject json = tasks.getJSONObject(i); AcsTaskDto taskDto = new AcsTaskDto(); - taskDto.setTask_id(json.getString("task_id")); + taskDto.setExt_task_uuid(json.getString("task_id")); taskDto.setTask_code(json.getString("task_code")); taskDto.setTask_type("1"); taskDto.setRoute_plan_code("normal"); @@ -114,7 +114,7 @@ public abstract class AbstractAcsTask { for (int i = 0, j = arr.size(); i < j; i++) { JSONObject json = arr.getJSONObject(i); AcsTaskDto taskDto = new AcsTaskDto(); - taskDto.setTask_id(json.getString("task_id")); + taskDto.setExt_task_uuid(json.getString("task_id")); taskDto.setTask_code(json.getString("task_code")); taskDto.setTask_type("1"); taskDto.setRoute_plan_code("normal"); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDto.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDto.java index 1bafed8..4154d34 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDto.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDto.java @@ -5,7 +5,7 @@ import lombok.Data; @Data public class AcsTaskDto { //任务标识 - private String task_id; + private String ext_task_uuid; //任务编码 private String task_code; //任务类型 diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoCreateTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoCreateTask.java index 06d59b6..4ac8589 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoCreateTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AutoCreateTask.java @@ -90,7 +90,7 @@ public class AutoCreateTask { if ("200".equals(status)) { taskList.forEach(item -> { JSONObject taskObj = new JSONObject(); - taskObj.put("task_id", item.getTask_id()); + taskObj.put("task_id", item.getExt_task_uuid()); taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); taskObj.put("remark", "下发成功"); taskObj.put("update_time", DateUtil.now()); @@ -99,7 +99,7 @@ public class AutoCreateTask { } else {//下发失败 taskList.forEach(item -> { JSONObject taskObj = new JSONObject(); - taskObj.put("task_id", item.getTask_id()); + taskObj.put("task_id", item.getExt_task_uuid()); taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); taskObj.put("remark", "下发失败:" + message); taskObj.put("update_time", DateUtil.now()); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls b/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls index 6838201c6edca9cf1db2f9d69743dde37bbb36f0..51555f0bed9f135041c4c6b9621f1574badec589 100644 GIT binary patch delta 22517 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 KQcvg(Is7lCE1$ps diff --git a/wms/hd/nladmin-system/src/test/java/org/nl/Test3.java b/wms/hd/nladmin-system/src/test/java/org/nl/Test3.java index d239cd8..947f5cb 100644 --- a/wms/hd/nladmin-system/src/test/java/org/nl/Test3.java +++ b/wms/hd/nladmin-system/src/test/java/org/nl/Test3.java @@ -13,6 +13,8 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; public class Test3 extends BaseTest { @org.junit.Test @@ -424,6 +426,15 @@ public class Test3 extends BaseTest { ruleTable.insert(joObj); } } - + public static void main(String[] args) { + Queue ma = new ArrayBlockingQueue<>(10); + for (int i = 0; i <9 ; i++) { + ma.offer("pla00"+i); + } + ma.poll(); + for (String str:ma){ + System.out.println(str); + } + } }