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 6838201..51555f0 100644 Binary files a/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls and b/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls differ 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); + } + } }