From fa267dcef8a1cea5db03b05ea0327b75fd252f87 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Sat, 11 Oct 2025 09:40:33 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A=E4=B8=80=E6=A5=BC=E6=A1=81?= =?UTF-8?q?=E6=9E=B6=E4=BA=A4=E4=BA=92=E3=80=81AGV=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/acs/agv/AgvWaitUtil.java | 185 ++++++++++++++---- .../java/org/nl/acs/agv/QueryAGVStatus.java | 136 +++++-------- .../nl/acs/agv/server/XianGongAgvService.java | 2 + .../server/impl/XianGongAgvServiceImpl.java | 170 ++++++++++------ .../BoxPackageManipulatorDeviceDriver.java | 38 ++-- ...TwoManipulatorManipulatorDeviceDriver.java | 54 ++++- .../task/service/impl/TaskServiceImpl.java | 1 - 7 files changed, 377 insertions(+), 209 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/AgvWaitUtil.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/AgvWaitUtil.java index 59b75e1cb..625af55da 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/AgvWaitUtil.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/AgvWaitUtil.java @@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Optional; /** * @author zhangjiangwei @@ -65,6 +66,22 @@ public class AgvWaitUtil { if (manipulatorAgvStationDeviceDriver.getTo_command() != 2) { manipulatorAgvStationDeviceDriver.writing(2); } + int i = 0; + while (true){ + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) startDevice.getDeviceDriver(); + if (manipulatorAgvStationDeviceDriver.getAction() == 1){ + break; + } + if (i >= 4){ + break; + } + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + i++; + } if (manipulatorAgvStationDeviceDriver.getAction() == 1) { LuceneLogDto logDto1 = LuceneLogDto.builder() .device_code(inst.getCarno()) @@ -76,14 +93,18 @@ public class AgvWaitUtil { map.put("status", 200); map.put("message", "允许取货!"); log.info("允许仙工AGV取货,设备号 - {}", startDeviceCode); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: {查看开始请求}, 响应结果: " + JSON.toJSONString(map)) + .log_level(4) + .build()); return map; } else { - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(manipulatorAgvStationDeviceDriver.getDevice_code()) - .content("未给agv进入信号原因是:" + manipulatorAgvStationDeviceDriver.getDevice_code() + "动作信号不为1") - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: {查看开始请求}, 响应结果: 桁架不允许取货! ") + .log_level(4) + .build()); throw new BadRequestException("行架不允许取货"); } @@ -93,31 +114,34 @@ public class AgvWaitUtil { if (startDevice.getDeviceDriver() instanceof BoxSubvolumesConveyorDeviceDriver) { boxSubvolumesConveyorDeviceDriver = (BoxSubvolumesConveyorDeviceDriver) startDevice.getDeviceDriver(); if (boxSubvolumesConveyorDeviceDriver.getMode() == 2) { - LuceneLogDto logDto1 = LuceneLogDto.builder() - .device_code(inst.getCarno()) - .content("叉车允许取货") - .build(); - logDto1.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto1); JSONObject map = new JSONObject(); map.put("status", 200); map.put("message", "允许取货!"); log.info("允许仙工AGV取货,设备号 - {}", startDeviceCode); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: {查看开始请求}, 响应结果: " + JSON.toJSONString(map)) + .log_level(4) + .build()); return map; } else { - LuceneLogDto logDto1 = LuceneLogDto.builder() - .device_code(inst.getCarno()) - .content("agv叉车对接位输送线不允许取货:" + inst.getCarno() + "点位号" + boxSubvolumesConveyorDeviceDriver.getDevice_code()) - .build(); - logDto1.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto1); - throw new BadRequestException("上位系统不允许取货"); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: { 请查看开始请求 }, 响应结果: 设备不满足信号, 不允许取货! ") + .log_level(4) + .build()); + throw new BadRequestException("设备不满足信号, 不允许取货"); } } JSONObject map = new JSONObject(); map.put("status", 200); map.put("message", "允许取货!"); log.info("允许仙工AGV取货,设备号 - {}", startDeviceCode); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: {查看开始请求}, 响应结果: " + JSON.toJSONString(map)) + .log_level(4) + .build()); return map; } @@ -145,21 +169,41 @@ public class AgvWaitUtil { if (manipulatorAgvStationDeviceDriver.getTo_command() != 3) { manipulatorAgvStationDeviceDriver.writing(3); } + int i = 0; + while (true){ + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) startDevice.getDeviceDriver(); + if (manipulatorAgvStationDeviceDriver.getAction() == 0 && manipulatorAgvStationDeviceDriver.getMode() == 2){ + break; + } + if (i >= 4){ + break; + } + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + i++; + } + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) startDevice.getDeviceDriver(); if (manipulatorAgvStationDeviceDriver.getAction() == 0 && manipulatorAgvStationDeviceDriver.getMode() == 2) { - if (StrUtil.equals(paramService.findByCode(AcsConfig.isSendLms).getValue(), CommonFinalParam.ONE)){ + if (StrUtil.equals(paramService.findByCode(AcsConfig.isSendLms).getValue(), CommonFinalParam.ONE)) { if (!AgvActionTypeEnum.ORDINARY.getCode().equals(inst.getAgv_action_type())) { applyLmsGetOut(inst); + } else { + boolean ignore_pickup_check = Optional.ofNullable(startDevice.getExtraValue().get("ignore_pickup_check")).map(Object::toString).map(Boolean::parseBoolean).orElse(false); + if (ignore_pickup_check) { + applyLmsGetOut(inst); + } } } } else { - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(manipulatorAgvStationDeviceDriver.getDevice_code()) - .content("未给agv离开信号原因是:" + manipulatorAgvStationDeviceDriver.getDevice_code() + "动作信号不为0") - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - log.info("不允许仙工AGV取货,对接位有报警,设备号 - {}", startDeviceCode); - throw new BadRequestException("上位系统不允许agv离开"); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: { 请查看开始请求 }, 响应结果: 桁架信号不满足条件, 不允许AGV取货完成离开! ") + .log_level(4) + .build()); + throw new BadRequestException("桁架信号不满足条件,不允许AGV取货完成离开"); } } @@ -169,6 +213,11 @@ public class AgvWaitUtil { map.put("message", "允许离开!"); log.info("允许仙工AGV取货完成后请求离开,返回参数 - {}", map); log.info("允许仙工AGV取货完成后请求离开,设备号 - {}", startDeviceCode); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: {查看开始请求}, 响应结果: " + JSON.toJSONString(map)) + .log_level(4) + .build()); return map; } @@ -191,6 +240,11 @@ public class AgvWaitUtil { .build(); logDto2.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto2); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: {查看开始请求}, 响应结果: 请求LMS追加动诺宝作块, LMS返回成功") + .log_level(4) + .build()); } else { LuceneLogDto logDto2 = LuceneLogDto.builder() .device_code(inst.getCarno()) @@ -198,6 +252,11 @@ public class AgvWaitUtil { .build(); logDto2.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto2); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: {查看开始请求}, 响应结果: 请求LMS追加动诺宝作块, LMS返回失败") + .log_level(4) + .build()); throw new BadRequestException("追加动诺宝作块返回失败"); } } @@ -212,15 +271,31 @@ public class AgvWaitUtil { if (manipulatorAgvStationDeviceDriver.getTo_command() != 4) { manipulatorAgvStationDeviceDriver.writing(4); } + int i = 0; + while (true){ + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) endDevice.getDeviceDriver(); + if (manipulatorAgvStationDeviceDriver.getAction() == 1){ + break; + } + if (i >= 4){ + break; + } + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + i++; + } + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) endDevice.getDeviceDriver(); if (manipulatorAgvStationDeviceDriver.getAction() != 1) { - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(manipulatorAgvStationDeviceDriver.getDevice_code()) - .content("未给agv进入信号原因是:" + manipulatorAgvStationDeviceDriver.getDevice_code() + "动作信号不为1") - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: { 请查看开始请求 }, 响应结果: 桁架信号不满足条件, 不允许AGV放货! ") + .log_level(4) + .build()); log.info("不允许仙工AGV取货,对接位有报警,设备号 - {}", endDevice); - throw new BadRequestException("上位系统不允许取货"); + throw new BadRequestException("桁架信号不满足条件, 不允许AGV放货"); } } @@ -234,6 +309,11 @@ public class AgvWaitUtil { map.put("status", 200); map.put("message", "允许放货!"); log.info("允许仙工AGV放货,设备号 - {}", endDeviceCode); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: {查看开始请求}, 响应结果: " + JSON.toJSONString(map)) + .log_level(4) + .build()); return map; } @@ -248,15 +328,31 @@ public class AgvWaitUtil { if (manipulatorAgvStationDeviceDriver.getTo_command() != 5) { manipulatorAgvStationDeviceDriver.writing(5); } + int i = 0; + while (true){ + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) nextDevice.getDeviceDriver(); + if (manipulatorAgvStationDeviceDriver.getAction() == 0){ + break; + } + if (i >= 4){ + break; + } + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + i++; + } + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) nextDevice.getDeviceDriver(); if (manipulatorAgvStationDeviceDriver.getAction() != 0) { - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(manipulatorAgvStationDeviceDriver.getDevice_code()) - .content("未给agv离开信号原因是:" + manipulatorAgvStationDeviceDriver.getDevice_code() + "动作信号不为0") - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: { 请查看开始请求 }, 响应结果: 桁架信号不满足条件, 不允许AGV放货完成离开! ") + .log_level(4) + .build()); log.info("不允许仙工AGV取货,对接位有报警,设备号 - {}", endDeviceCode); - throw new BadRequestException("上位系统不允许agv离开"); + throw new BadRequestException("桁架信号不满足条件, 不允许AGV放货完成离开!"); } } @@ -268,6 +364,11 @@ public class AgvWaitUtil { map.put("status", 200); map.put("message", "允许离开!"); log.info("允许仙工AGV放货完成后请求离开,设备号 - {}", endDeviceCode); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("AGV开始响应.....,请求参数: {查看开始请求}, 响应结果: " + JSON.toJSONString(map)) + .log_level(4) + .build()); return map; } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/QueryAGVStatus.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/QueryAGVStatus.java index bab2717b2..67792f6f1 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/QueryAGVStatus.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/QueryAGVStatus.java @@ -1,33 +1,17 @@ package org.nl.acs.agv; -import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; -import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.nl.acs.AcsConfig; -import org.nl.acs.device.domain.Device; -import org.nl.acs.device_driver.agv.xg_agv_car.XgAgvCarDeviceDriver; +import org.nl.acs.agv.server.XianGongAgvService; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.opc.DeviceAppService; -import org.nl.acs.task.domain.Task; -import org.nl.acs.task.enums.AgvActionTypeEnum; -import org.nl.acs.task.enums.AgvSystemTypeEnum; -import org.nl.acs.task.service.TaskService; -import org.nl.acs.task.service.dto.TaskDto; -import org.nl.config.SpringContextHolder; -import org.nl.system.service.param.ISysParamService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.stream.Collectors; /** * 定时查询AGV状态 @@ -38,79 +22,53 @@ public class QueryAGVStatus { @Autowired - private DeviceAppService deviceAppService; + private XianGongAgvService agvService; + @Autowired + private InstructionService instructionService; - public void run() { - InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); - TaskService taskService = SpringContextHolder.getBean(TaskService.class); - ISysParamService paramService = SpringContextHolder.getBean(ISysParamService.class); - List allInstFromCache = instructionService.findAllInstFromCache(); - List agvInstruction = allInstFromCache.stream().filter(item -> AgvSystemTypeEnum.One_NDC_System_Type.getIndex().equals(item.getAgv_system_type()) || AgvSystemTypeEnum.XG_System_Type.getIndex().equals(item.getAgv_system_type())).collect(Collectors.toList()); - if (CollUtil.isEmpty(agvInstruction) || agvInstruction.size() < 1) { - return; - } - for (Instruction instruction : agvInstruction) { - String agvurl = paramService.findByCode(AcsConfig.AGVURL).getValue(); - String agvport = paramService.findByCode(AcsConfig.AGVPORT).getValue(); - JSONObject param = new JSONObject(); - agvurl = agvurl + ":" + agvport + "/orderDetails/" + instruction.getInstruction_code(); - log.info("根据运单号查询运单状态的请求:{}", agvurl); - HttpResponse result = HttpRequest.get(agvurl) - .timeout(20000)//超时,毫秒 - .execute(); - log.info("根据运单号查询运单状态的请求反馈:{}", result); - String body = result.body(); - JSONObject json = JSONObject.parseObject(body); - if (result.getStatus() == 200 && json.getString("id").equals(instruction.getInstruction_code())) { - // 已创建=CREATED, - // 待分配=TOBEDISPATCHED, - // 正在执行=RUNNING, - // 完成=FINISHED, - // 失败=FAILED(主动失败), - // 终止=STOPPED(被人为终止), - // 无法执行=Error(参数错误), - // 等待=WAITING - //执行中 - String state = json.getString("state"); - String carNo = json.getString("vehicle"); - String instructionCode = json.getString("id"); - if ("RUNNING".equals(state) || "TOBEDISPATCHED".equals(state) || "WAITING".equals(state)) { - TaskDto task = taskService.findById(instruction.getTask_id()); - if ("0".equals(instruction.getInstruction_status())&&"1".equals(task.getTask_status())) { - instruction.setCarno(carNo); - instruction.setInstruction_status("1"); - instructionService.update(instruction); - task.setCarno(carNo); - task.setTask_id(instruction.getTask_id()); - instructionService.update(instruction); - taskService.update(task); - if (StrUtil.isNotEmpty(instructionCode)) { - Device carCode = deviceAppService.findDeviceByCode(instructionCode); - XgAgvCarDeviceDriver xgAgvCarDeviceDriver; - if (null != carCode) { - if (carCode.getDeviceDriver() instanceof XgAgvCarDeviceDriver) { - xgAgvCarDeviceDriver = (XgAgvCarDeviceDriver) carCode.getDeviceDriver(); - xgAgvCarDeviceDriver.setTaskType(AgvActionTypeEnum.getStatus(instruction.getAgv_action_type())); - } - } - } - } + public void run() throws Exception { - } else if ("FINISHED".equals(state)) { - if (!"2".equals(instruction.getInstruction_status())) { - instruction.setInstruction_status("2"); - try { - instructionService.finish(instruction); - } catch (Exception e) { - log.error("执行完成,但无法更新状态,可能由于参数错误导致的异常"); - e.printStackTrace(); - } - } - } else if ("STOPPED".equals(state) || "FAILED".equals(state) || "Error".equals(state)) { - if (!"1".equals(instruction.getInstruction_status())) { - instruction.setInstruction_status("1"); - instructionService.update(instruction); - } + HttpResponse response = agvService.queryXZAgvInstStatus(); + JSONObject jo = JSONArray.parseObject(response.body()); + + JSONArray ja = JSONArray.parseArray(jo.getString("list")); + for (int i = 0; i < ja.size(); i++) { + JSONObject one = (JSONObject) ja.get(i); + String inst_code = one.getString("id"); + Instruction inst = instructionService.findByCodeFromCache(inst_code); + if (ObjectUtil.isEmpty(inst)) + continue; + + String state = one.getString("state"); + if (!StrUtil.isEmpty(one.getString("vehicle"))) { + String carno = one.getString("vehicle"); + inst.setCarno(carno); + } + +// 已创建=CREATED, +// 待分配=TOBEDISPATCHED, +// 正在执行=RUNNING, +// 完成=FINISHED, +// 失败=FAILED(主动失败), +// 终止=STOPPED(被人为终止), +// 无法执行=Error(参数错误), +// 等待=WAITING + + //执行中 + if ("RUNNING".equals(state) || "CREATED".equals(state) || "TOBEDISPATCHED".equals(state) || "WAITING".equals(state)) { + if (inst != null && "0".equals(inst.getInstruction_status())) { + inst.setInstruction_status("1"); + instructionService.update(inst); + } + } else if ("FINISHED".equals(state)) { + if (inst != null) { + inst.setInstruction_status("2"); + instructionService.finish(inst); + } + } else if ("STOPPED".equals(state) || "FAILED".equals(state) || "Error".equals(state)) { + if (inst != null) { + //inst.setInstruction_status("1"); + //instructionService.update(inst); } } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java index fcd194c23..f08a75b5c 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java @@ -60,6 +60,8 @@ public interface XianGongAgvService { */ public HttpResponse queryXZAgvInstStatus(String instCode); + public HttpResponse queryXZAgvInstStatus(); + /** * 删除先知任务 * diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java index 82d7610eb..ff1cbfd82 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java @@ -238,6 +238,25 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } } + @Override + public HttpResponse queryXZAgvInstStatus() { + if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { + String agvurl = paramService.findByCode(AcsConfig.AGVURL).getValue(); + String agvport = paramService.findByCode(AcsConfig.AGVPORT).getValue(); + + agvurl = agvurl + ":" + agvport + "/orders?page=1&size=50&orderBy=createTime&orderMethod=descending"; + + HttpResponse result = HttpRequest.get(agvurl) + .timeout(20000)//超时,毫秒 + .execute(); + log.info("queryXZAgvInstStatus----查询agv指令数据:{}" + result.body()); + return result; + } else { + + return null; + } + } + @Override public HttpResponse deleteXZAgvInst(String instCode) { @@ -741,25 +760,29 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { @Override public JSONObject xgAGVWaitPointRequest(JSONObject requestParam) { + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始请求.....,请求参数:" + JSON.toJSONString(requestParam)) + .log_level(4) + .build()); log.info("仙工AGV请求取放货,请求参数 - {}", requestParam); String inst_code = requestParam.getString("task_code"); Instruction instructionDto = instructionService.findByCodeFromCache(inst_code); if (ObjectUtil.isEmpty(instructionDto)) { - LuceneLogDto logDto = LuceneLogDto.builder() - .content("请求失败,未找到指令!" + inst_code) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果: 指令号不存在!") + .log_level(4) + .build()); throw new BadRequestException("请求失败,未找到指令!"); } String address = requestParam.getString("address"); if (StrUtil.isBlank(address)) { - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(instructionDto.getCarno()) - .content("请求失败,地址为空!" ) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果: 请求地址为空!") + .log_level(4) + .build()); throw new BadRequestException("请求失败,地址为空!"); } if (address.contains("IN") || address.contains("WAIT")) { @@ -771,17 +794,15 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { deviceCodeNow = address.substring(0, address.length() - 5); } if (ObjectUtil.isEmpty(deviceAppService.findDeviceByCode(deviceCodeNow))) { - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(instructionDto.getCarno()) - .content("设备号 " + deviceCodeNow + " 不存在!") - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果: 设备号: " + deviceCodeNow + "不存在! ") + .log_level(4) + .build()); throw new BadRequestException("设备号 " + deviceCodeNow + " 不存在!"); } //一楼诺宝agv if (instructionDto.getAgv_system_type().equals(AgvSystemTypeEnum.One_NDC_System_Type.getIndex())) { - if (address.contains("GET")) { return agvWaitUtil.waitInGet(deviceCodeNow, instructionDto); } else if (address.contains("PUT")) { @@ -795,6 +816,11 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { JSONObject map = new JSONObject(); map.put("status", 200); map.put("message", "取货二次分配追加诺宝成功!"); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果: " + JSON.toJSONString(map)) + .log_level(4) + .build()); return map; } //如果是放货二次分配,取放货二次分配需要重新追加动作块 @@ -806,6 +832,11 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { JSONObject map = new JSONObject(); map.put("status", 200); map.put("message", "放货二次分配追加诺宝成功!"); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果: " + JSON.toJSONString(map)) + .log_level(4) + .build()); return map; } } @@ -823,12 +854,11 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { map.put("status", 200); map.put("message", "允许叉车放货!" + "点位" + newPointCode); log.info("允许仙工AGV放货,设备号 - {}", newPointCode); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(instructionDto.getCarno()) - .content("叉车允许放货" + "新点位:" + newPointCode + map ) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果: " + JSON.toJSONString(map)) + .log_level(4) + .build()); return map; } //放货前等待 @@ -841,6 +871,11 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { if (address.contains("OUT")) { String deviceCodeNow = address.substring(0, address.length() - 6); if (ObjectUtil.isEmpty(deviceAppService.findDeviceByCode(deviceCodeNow))) { + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果:设备号 " + deviceCodeNow + "不存在! ") + .log_level(4) + .build()); throw new BadRequestException("设备号 " + deviceCodeNow + " 不存在!"); } @@ -849,6 +884,11 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { JSONObject jsonObject = agvWaitUtil.waitOutGet(deviceCodeNow, instructionDto); if (StringUtil.equals("200", jsonObject.getString("status"))) { log.info("仙工AGV取货完成后离开,设备号 - {}", deviceCodeNow); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果: " + JSON.toJSONString(jsonObject)) + .log_level(4) + .build()); return jsonObject; } } else if (address.contains("PUT")) { @@ -856,48 +896,62 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { JSONObject jsonObject = agvWaitUtil.waitOutPut(deviceCodeNow, instructionDto); if (StringUtil.equals("200", jsonObject.getString("status"))) { log.info("仙工AGV放货完成后离开,设备号 - {}", deviceCodeNow); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果: " + JSON.toJSONString(jsonObject)) + .log_level(4) + .build()); return jsonObject; } } } - + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(requestParam.getString("task_code")) + .content("AGV开始响应.....,请求参数:" + JSON.toJSONString(requestParam) + ", 响应结果: IN OUT 站点错误!") + .log_level(4) + .build()); throw new BadRequestException("请求失败,IN OUT 站点错误!"); } private String applyCCAgvTask(String task_code, Instruction instructionDto) { - JSONObject param = new JSONObject(); - param.put("task_code", task_code); - LuceneLogDto logDto = LuceneLogDto.builder() + JSONObject param = new JSONObject(); + param.put("task_code", task_code); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(instructionDto.getCarno()) + .content("叉车二次分配请求lms,参数:" + task_code) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + String response = acsToWmsService.applySendOutTwo(param); + JSONObject jo = JSON.parseObject(response); + if (jo.getInteger("status") == 200) { + LuceneLogDto logDto2 = LuceneLogDto.builder() .device_code(instructionDto.getCarno()) - .content("叉车二次分配请求lms,参数:" + task_code) + .content("叉车二次分配请求lms,参数,接口返回:" + jo) .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - String response = acsToWmsService.applySendOutTwo(param); - JSONObject jo = JSON.parseObject(response); - if (jo.getInteger("status") == 200) { - LuceneLogDto logDto2 = LuceneLogDto.builder() - .device_code(instructionDto.getCarno()) - .content("叉车二次分配请求lms,参数,接口返回:" + jo) - .build(); - logDto2.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto2); - //二次分配更新点位 - updataTask(instructionDto, jo.getString("data")); - //请求成功调用叉车追加动作块 - sendAddSequencesToCCAgv(instructionDto.getInstruction_code(), jo.getString("data"), instructionDto); - return jo.getString("data"); + logDto2.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto2); + //二次分配更新点位 + updataTask(instructionDto, jo.getString("data")); + //请求成功调用叉车追加动作块 + sendAddSequencesToCCAgv(instructionDto.getInstruction_code(), jo.getString("data"), instructionDto); + return jo.getString("data"); - } else { - LuceneLogDto logDto2 = LuceneLogDto.builder() - .device_code(instructionDto.getCarno()) - .content("叉车二次分配请求lms失败,返回参数:" + jo.getString("message")) - .build(); - logDto2.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto2); - throw new BadRequestException("叉车二次分配请求lms返回失败"); - } + } else { + LuceneLogDto logDto2 = LuceneLogDto.builder() + .device_code(instructionDto.getCarno()) + .content("叉车二次分配请求lms失败,返回参数:" + jo.getString("message")) + .build(); + logDto2.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto2); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(instructionDto.getInstruction_code()) + .content("AGV开始响应.....,请求参数: { 请查看请求参数 }, 响应结果: 二次分配请求LMS, LMS返回失败 ") + .log_level(4) + .build()); + throw new BadRequestException("叉车二次分配请求lms返回失败"); + } } private void sendAddSequencesToCCAgv(String instructionCode, String nextPoint, Instruction instructionDto) { @@ -1009,6 +1063,11 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { .build(); logDto2.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto2); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(instructionDto.getInstruction_code()) + .content("AGV开始响应.....,请求参数: { 请查看请求参数 }, 响应结果: 二次分配请求LMS, LMS返回失败 ") + .log_level(4) + .build()); throw new BadRequestException("二次分配请求lms返回失败"); } @@ -1085,7 +1144,6 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } - /** * 追加动作块 * @@ -1437,7 +1495,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { jo10.put("binTask", "OutForkHeight"); ja.add(jo10); - } else if (AgvActionTypeEnum.IN_STOCK.getCode().equals(inst.getAgv_action_type())) { + } else if (AgvActionTypeEnum.IN_STOCK.getCode().equals(inst.getAgv_action_type())) { } else if (AgvActionTypeEnum.OUT_STOCK.getCode().equals(inst.getAgv_action_type())) { // to do diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_package_manipulator/BoxPackageManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_package_manipulator/BoxPackageManipulatorDeviceDriver.java index b9a2b5253..32e3dbc6d 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_package_manipulator/BoxPackageManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_package_manipulator/BoxPackageManipulatorDeviceDriver.java @@ -273,27 +273,36 @@ public class BoxPackageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i } private void updateInstrction() { + //更改指令状态 + if (task > 0) { + Instruction inst = checkInst(); + if (inst != null) { + if (StrUtil.equals(inst.getInstruction_status(), "0")) { + inst.setInstruction_status(CommonFinalParam.ONE); + inst.setExecute_device_code(this.device_code); + instructionService.update(inst); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("装箱桁架: 桁架任务更新为执行中") + .log_level(4) + .build()); + } + } + } Date date = new Date(); if (date.getTime() - this.instruction_update_time.getTime() < (long) this.instruction_update_time_out) { log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_update_time_out); } else { this.instruction_update_time = date; - //更改指令状态 - if (task > 0) { - Instruction inst = checkInst(); - if (inst != null) { - if (StrUtil.equals(inst.getInstruction_status(), "0")) { - inst.setInstruction_status(CommonFinalParam.ONE); - inst.setExecute_device_code(this.device_code); - instructionService.update(inst); - } - } - } - //放货完成 if ( action == 4 && move == 0) { if (inst != null) { + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("装箱桁架: 桁架任务放货完成") + .log_level(4) + .build()); try { logServer.deviceExecuteLog(this.device_code,"","","放货完成"); finish_instruction(inst); @@ -541,6 +550,11 @@ public class BoxPackageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i } } this.writing(list); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(task) + .content("装箱桁架: 下发桁架任务") + .log_level(4) + .build()); } private void packageData(Instruction instdto, String route_plan_code, String taskid, String taskcode, String start_device_code, String next_device_code, String start_point_code, String next_point_code) { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorManipulatorDeviceDriver.java index 7bf4a2809..19670bd55 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorManipulatorDeviceDriver.java @@ -59,7 +59,8 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi protected ItemProtocol itemProtocol = new ItemProtocol(this); - AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class);; + AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); + ; DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl"); @@ -195,18 +196,28 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi // 更新指令状态 if (mode == 3 && task > 0) { updateInstructionStatus(); - if (null!=inst) { + if (null != inst) { inst_message = "指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code(); } } //四个点行架任务,满轴放货完成后调lms生成rgv任务 - if (action == 6 && task > 0 && !actionRequireSucess ){ + if (action == 6 && task > 0 && !actionRequireSucess) { + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(String.valueOf(this.task)) + .content("子卷下线桁架: 桁架任务满轴放货完成") + .log_level(4) + .build()); Integer actionType = ActionTypeEnum.RELEASE_FINISHING.getCode(); - creatAGV(actionType,action); + creatAGV(actionType, action); } //空载具取货完成 - if (action == 7 && task > 0 && !actionRequireSucess ){ + if (action == 7 && task > 0 && !actionRequireSucess) { + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(String.valueOf(this.task)) + .content("子卷下线桁架: 桁架任务空载具取货完成") + .log_level(4) + .build()); Integer actionType = ActionTypeEnum.IN_FINISHING.getCode(); creatAGV(actionType, action); } @@ -291,22 +302,27 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi private void creatAGV(Integer actionType, int toCommand) { Instruction instruction = checkInst(); - if(ObjectUtil.isEmpty(instruction)){ + if (ObjectUtil.isEmpty(instruction)) { log.info("指令不存在"); return; } JSONObject param = new JSONObject(); param.put("taskCode", instruction.getTask_code()); - param.put("actionType",actionType ); + param.put("actionType", actionType); LuceneLogDto logDto = LuceneLogDto.builder() .device_code(device_code) - .content("行架取放货完成请求lms,参数:" + task + "--" +ActionTypeEnum.getStatus(actionType)) + .content("行架取放货完成请求lms,参数:" + task + "--" + ActionTypeEnum.getStatus(actionType)) .build(); logDto.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto); String response = acsToWmsService.secondaryAllocationPoint(param); JSONObject jo = JSON.parseObject(response); if (jo.getInteger("status") == 200) { + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(instruction.getInstruction_code()) + .content("子卷下线桁架: 桁架任务" + ActionTypeEnum.getStatus(actionType) + "完成请求LMS, LMS反馈成功") + .log_level(4) + .build()); LuceneLogDto logDto2 = LuceneLogDto.builder() .device_code(device_code) .content("行架取放货完成请求lms,参数,接口返回:" + jo) @@ -327,6 +343,11 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi .build(); logDto2.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto2); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(instruction.getInstruction_code()) + .content("子卷下线桁架: 桁架任务" + ActionTypeEnum.getStatus(actionType) + "完成请求LMS, LMS反馈失败") + .log_level(4) + .build()); throw new BadRequestException("行架取放货完成请求lms返回失败"); } @@ -342,6 +363,11 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi inst.setExecute_device_code(this.device_code); instructionService.update(inst); logServer.deviceExecuteLog(this.device_code, "", "", "修改指令状态为执行中"); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("子卷下线桁架: 桁架任务更新为执行中") + .log_level(4) + .build()); } } } @@ -353,6 +379,11 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi //放货完成 if (action == 4 && move == 0) { if (inst != null) { + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(inst.getInstruction_code()) + .content("子卷下线桁架: 桁架任务放货完成") + .log_level(4) + .build()); try { logServer.deviceExecuteLog(this.device_code, "", "", "放货完成"); finish_instruction(inst); @@ -603,6 +634,11 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi list.add(map7); this.writing(list); + luceneExecuteLogService.deviceExecuteLog(LuceneLogDto.builder() + .device_code(task) + .content("子卷下线桁架: 下发桁架任务") + .log_level(4) + .build()); } /** @@ -706,7 +742,7 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi jo.put("isError", this.getIserror()); jo.put("message", LangProcess.msg(message)); jo.put("notCreateTaskMessage", notCreateTaskMessage); - jo.put("notCreateInstMessage", LangProcess.msg(notCreateInstMessage)); + jo.put("notCreateInstMessage", LangProcess.msg(notCreateInstMessage)); jo.put("feedMessage", LangProcess.msg(feedMessage)); jo.put("driver_type", "siemens_conveyor"); jo.put("is_click", true); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index e5e9a74fb..eefc43750 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -853,7 +853,6 @@ public class TaskServiceImpl extends CommonServiceImpl impleme } @Override - @Transactional(rollbackFor = Exception.class) public void update(TaskDto dto) { TaskDto entity = this.findById(dto.getTask_id()); if (entity == null) {