From 00dc8a08f387c67f11628b102ee065fef9abe2f6 Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Thu, 27 Feb 2025 10:37:53 +0800 Subject: [PATCH] =?UTF-8?q?rev:=E7=8E=B0=E5=9C=BA=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/acs/agv/QueryAGVStatus.java | 7 +- .../agv/server/impl/NDCAgvServiceImpl.java | 63 +++-- .../run/TwoNDCSocketConnectionAutoRun.java | 89 ++++--- .../agv/ndctwo/AgvNdcTwoDeviceDriver.java | 246 +++++------------- .../StandardOrdinarySiteDeviceDriver.java | 11 - .../service/impl/RegionServiceImpl.java | 19 +- .../java/org/nl/acs/task/domain/Task.java | 24 +- .../org/nl/acs/task/service/dto/TaskDto.java | 2 +- .../task/service/impl/TaskServiceImpl.java | 41 +-- .../nl/hand/service/impl/PdaServiceImpl.java | 70 ++--- .../service/quartz/task/AutoCreateInst.java | 11 +- .../resources/config/application-prod.yml | 2 +- .../src/main/resources/config/application.yml | 2 +- .../monitor/universal/universal.properties | 6 +- .../universal/universal_zh_CN.properties | 6 +- .../resources/log/AgvNdcTwoDeviceDriver.xml | 30 +++ .../src/main/resources/logback-spring.xml | 25 +- .../src/test/java/org/nl/ApplicationTest.java | 55 ++-- acs2/nladmin-ui/src/assets/images/1.png | Bin 0 -> 26401 bytes .../src/layout/components/Sidebar/Logo.vue | 8 +- .../acs/device/driver/standard_autodoor.vue | 3 +- .../views/acs/history/taskRecord/index.vue | 104 ++++---- acs2/nladmin-ui/src/views/acs/task/index.vue | 62 ++--- acs2/nladmin-ui/src/views/lucene/time.vue | 1 + 24 files changed, 417 insertions(+), 470 deletions(-) create mode 100644 acs2/nladmin-system/nlsso-server/src/main/resources/log/AgvNdcTwoDeviceDriver.xml create mode 100644 acs2/nladmin-ui/src/assets/images/1.png 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 269e7a9..6e835d8 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 @@ -4,11 +4,7 @@ import cn.hutool.core.collection.CollUtil; 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; @@ -16,7 +12,6 @@ import org.nl.acs.device_driver.agv.xg_agv_car.XgAgvCarDeviceDriver; 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; @@ -80,7 +75,7 @@ public class QueryAGVStatus { instruction.setCarno(carNo); TaskDto task = new TaskDto(); instructionService.update(instruction); - task.setCarno(carNo); + task.setCar_no(carNo); task.setTask_id(instruction.getTask_id()); instructionService.update(instruction); taskService.update(task); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java index 273657c..dadd644 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java @@ -1,12 +1,12 @@ package org.nl.acs.agv.server.impl; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.AcsConfig; import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.agv.server.dto.AgvDto; -import org.nl.acs.auto.run.OneNDCSocketConnectionAutoRun; import org.nl.acs.auto.run.TwoNDCSocketConnectionAutoRun; import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.device.service.DeviceService; @@ -15,10 +15,9 @@ import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.opc.DeviceAppService; -import org.nl.acs.opc.DeviceAppServiceImpl; -import org.nl.system.service.param.ISysParamService; import org.nl.common.utils.CodeUtil; import org.nl.config.SpringContextHolder; +import org.nl.system.service.param.ISysParamService; import org.springframework.stereotype.Service; import java.util.HashMap; @@ -98,6 +97,13 @@ public class NDCAgvServiceImpl implements NDCAgvService { String str = "十进制下发:"; String str1 = "十六进制下发:"; + if (ObjectUtil.isNotEmpty(inst.getCarno())) { + int carNo = Integer.parseInt(inst.getCarno()); + byte agvnohigh = (byte) IntToHexHigh(carNo); + byte agvnolow = (byte) IntToHexLow(carNo); + str += "agv车号 /carNo:" + (carNo); + str1 += "agv车号 /carNo:" + hexToString(agvnolow & 0xFF); + } str += "任务号 ikey:" + (Integer.parseInt(instcode)); str1 += "任务号 ikey:" + hexToString(ikeyhigh & 0xFF) + hexToString(ikeylow & 0xFF); @@ -111,20 +117,41 @@ public class NDCAgvServiceImpl implements NDCAgvService { byte[] b = new byte[]{}; - b = new byte[]{(byte) 0X87, (byte) 0XCD, - (byte) 0X00, (byte) 0X08, - (byte) 0X00, (byte) 0X12, - (byte) 0X00, (byte) 0X01, - (byte) 0X00, (byte) 0X71, - (byte) 0X00, (byte) 0X0E, - (byte) 0X01, (byte) 0X80, - (byte) 0X00, (byte) 0X01, - (byte) ikeyhigh, (byte) ikeylow, - (byte) ikeyhigh, (byte) ikeylow, - (byte) typehigh, (byte) typelow, - (byte) qhdhigh, (byte) qhdlow, - (byte) fhdhigh, (byte) fhdlow, - }; + if (ObjectUtil.isNotEmpty(inst.getCarno())) { + int carNo = Integer.parseInt(inst.getCarno()); + byte agvnohigh = (byte) IntToHexHigh(carNo); + byte agvnolow = (byte) IntToHexLow(carNo); + b = new byte[]{(byte) 0X87, (byte) 0XCD, + (byte) 0X00, (byte) 0X08, + (byte) 0X00, (byte) 0X14, + (byte) 0X00, (byte) 0X01, + (byte) 0X00, (byte) 0X71, + (byte) 0X00, (byte) 0X10, + (byte) 0X01, (byte) 0X80, + (byte) 0X00, (byte) 0X01, + (byte) ikeyhigh, (byte) ikeylow, + (byte) ikeyhigh, (byte) ikeylow, + (byte) typehigh, (byte) typelow, + (byte) qhdhigh, (byte) qhdlow, + (byte) fhdhigh, (byte) fhdlow, + (byte) agvnohigh, (byte) agvnolow + }; + } else { + b = new byte[]{(byte) 0X87, (byte) 0XCD, + (byte) 0X00, (byte) 0X08, + (byte) 0X00, (byte) 0X12, + (byte) 0X00, (byte) 0X01, + (byte) 0X00, (byte) 0X71, + (byte) 0X00, (byte) 0X0E, + (byte) 0X01, (byte) 0X80, + (byte) 0X00, (byte) 0X01, + (byte) ikeyhigh, (byte) ikeylow, + (byte) ikeyhigh, (byte) ikeylow, + (byte) typehigh, (byte) typelow, + (byte) qhdhigh, (byte) qhdlow, + (byte) fhdhigh, (byte) fhdlow, + }; + } log.info("下发AGV作业指令 --{}", str1); log.info("下发AGV作业指令--{}", str); log.info("下发agv指令数据--{}", Bytes2HexString(b)); @@ -255,7 +282,7 @@ public class NDCAgvServiceImpl implements NDCAgvService { (byte) 0X00, (byte) 0X6D, (byte) 0X00, (byte) 0X06, (byte) indexhigh, (byte) indexlow, - (byte) 0X01, (byte) 0X10, + (byte) 0X01, (byte) 0X12, (byte) phasehigh, (byte) phaselow }; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java index c58e6d7..ff5f680 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java @@ -1,18 +1,16 @@ package org.nl.acs.auto.run; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.nl.acs.AcsConfig; import org.nl.acs.agv.server.NDCAgvService; +import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.device.domain.Device; import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.agv.ndcone.AgvNdcOneDeviceDriver; import org.nl.acs.device_driver.agv.ndctwo.AgvNdcTwoDeviceDriver; import org.nl.acs.device_driver.autodoor.standard_autodoor.StandardAutodoorDeviceDriver; -import org.nl.acs.device_driver.conveyor.standard_inspect_site.StandardInspectSiteDeviceDriver; -import org.nl.acs.device_driver.two_conveyor.oven_manipulator.OvenGantryManipulatorDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.domain.Instruction; @@ -20,8 +18,11 @@ import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.impl.InstructionServiceImpl; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.region.domain.Region; +import org.nl.acs.region.service.RegionService; import org.nl.config.SpringContextHolder; import org.nl.config.lucene.service.LuceneExecuteLogService; +import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.impl.SysParamServiceImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -30,13 +31,9 @@ import org.springframework.stereotype.Component; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; -import java.lang.reflect.Field; import java.net.InetSocketAddress; import java.net.Socket; import java.util.Date; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString; @@ -93,6 +90,7 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class); + RegionService regionService = SpringContextHolder.getBean(RegionService.class); DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); @@ -244,18 +242,35 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (ObjectUtil.isNotEmpty(device)) { if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); - try { - standardAutodoorDeviceDriver.writing("to_open", "1"); - standardAutodoorDeviceDriver.writing("to_close", "0"); - } catch (Exception e) { - log.info("下发电气信号失败:" + e.getMessage()); - e.printStackTrace(); - } - if (standardAutodoorDeviceDriver.getOpen() == 1 && standardAutodoorDeviceDriver.getToOpen() == 1) { - log.info("下发开门信号值为:{},读取开门信号值为:{}", standardAutodoorDeviceDriver.getToOpen(), standardAutodoorDeviceDriver.getOpen()); - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + String region_code = (String) device.getExtraValue().get("region"); + if (StrUtil.isNotEmpty(region_code)) { + Region region = regionService.findByCode(region_code); + if (StrUtil.equals(region.getIs_charge(), CommonFinalParam.ZERO)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + region.setIs_charge("1"); + region.setHas_agv("1"); + regionService.updateById(region); + } } else { - log.info("未下发NDC信号原因: 下发开门信号值为:{},读取开门信号值为:{}", standardAutodoorDeviceDriver.getToOpen(), standardAutodoorDeviceDriver.getToClose()); + try { + standardAutodoorDeviceDriver.writing("to_open", "1"); + standardAutodoorDeviceDriver.writing("to_close", "0"); + } catch (Exception e) { + log.info("下发电气信号失败:" + e.getMessage()); + e.printStackTrace(); + } + if (standardAutodoorDeviceDriver.getOpen() == 1 && standardAutodoorDeviceDriver.getToOpen() == 1) { + log.info("下发开门信号值为:{},读取开门信号值为:{}", standardAutodoorDeviceDriver.getToOpen(), standardAutodoorDeviceDriver.getOpen()); + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + log.info("未下发NDC信号原因: 下发开门信号值为:{},读取开门信号值为:{}", standardAutodoorDeviceDriver.getToOpen(), standardAutodoorDeviceDriver.getToClose()); + } } } } else { @@ -270,18 +285,34 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (ObjectUtil.isNotEmpty(device)) { if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); - try { - standardAutodoorDeviceDriver.writing("to_close", "1"); - standardAutodoorDeviceDriver.writing("to_open", "0"); - } catch (Exception e) { - log.info("下发电气信号失败:" + e.getMessage()); - e.printStackTrace(); - } - if (standardAutodoorDeviceDriver.getClose() == 1) { - log.info("读取关门信号值为:{}", standardAutodoorDeviceDriver.getClose()); - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + String region_code = (String) device.getExtraValue().get("region"); + if (StrUtil.isNotEmpty(region_code)) { + Region region = regionService.findByCode(region_code); + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + region.setIs_charge("0"); + region.setHas_agv("0"); + regionService.updateById(region); } else { - log.info("未下发NDC信号原因: 读取关门信号值为:{}", standardAutodoorDeviceDriver.getClose()); + try { + standardAutodoorDeviceDriver.writing("to_close", "1"); + standardAutodoorDeviceDriver.writing("to_open", "0"); + } catch (Exception e) { + log.info("下发电气信号失败:" + e.getMessage()); + e.printStackTrace(); + } + if (standardAutodoorDeviceDriver.getClose() == 1) { + log.info("读取关门信号值为:{}", standardAutodoorDeviceDriver.getClose()); + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + standardAutodoorDeviceDriver.writing("to_close", "0"); + } else { + log.info("未下发NDC信号原因: 读取关门信号值为:{}", standardAutodoorDeviceDriver.getClose()); + } } } } else { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java index 49666c2..3b1b242 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java @@ -15,15 +15,8 @@ import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.FeedLmsRealFailed; import org.nl.acs.device_driver.agv.utils.TwoAgvPhase; -import org.nl.acs.device_driver.conveyor.standard_inspect_site.StandardInspectSiteDeviceDriver; import org.nl.acs.device_driver.conveyor.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; -import org.nl.acs.device_driver.paper_tube_pick_site.PaperTubePickSiteDeviceDriver; -import org.nl.acs.device_driver.storage.standard_storage.StandardStorageDeviceDriver; import org.nl.acs.device_driver.driver.AbstractDeviceDriver; -import org.nl.acs.device_driver.two_conveyor.hongxiang_conveyor.HongXiangStationDeviceDriver; -import org.nl.acs.device_driver.two_conveyor.manipulator_agv_station.ManipulatorAgvStationDeviceDriver; -import org.nl.acs.device_driver.two_conveyor.ranging_stations.RangingStationsDeviceDriver; -import org.nl.acs.device_driver.two_conveyor.waste_foil_weighing_station.WasteFoilWeighingStationDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.history.ErrorUtil; @@ -36,21 +29,16 @@ import org.nl.acs.instruction.service.impl.InstructionServiceImpl; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.DeviceAppService; -import org.nl.acs.region.domain.Region; import org.nl.acs.region.service.RegionService; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.acs.task.service.impl.TaskServiceImpl; +import org.nl.config.SpringContextHolder; import org.nl.config.lucene.service.LuceneExecuteLogService; import org.nl.config.lucene.service.dto.LuceneLogDto; -import org.nl.config.thread.ThreadPoolExecutorUtil; import org.nl.system.service.param.ISysParamService; -import org.nl.config.SpringContextHolder; -import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.Map; -import java.util.concurrent.ThreadPoolExecutor; /** @@ -226,26 +214,16 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); - //放货确认 - if (standardOrdinarySiteDeviceDriver.getOption() == 1) { - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(this.getDeviceCode()) - .content("agvphase:" + phase + "反馈:" + data) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - standardOrdinarySiteDeviceDriver.setOption(0); - } else { - log.info("等待一体机进行放货确认,设备号{},option值{}", standardOrdinarySiteDeviceDriver.getDevice_code(), standardOrdinarySiteDeviceDriver.getOption()); - logServer.deviceExecuteLog(this.device_code, "", "", "等待一体机进行放货确认,设备号" + device.getDevice_code() + ",指令号" + ikey); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(standardOrdinarySiteDeviceDriver.getDevice_code()) - .content("等待一体机进行放货确认,设备号" + standardOrdinarySiteDeviceDriver.getDevice_code() + ",option当前值" + standardOrdinarySiteDeviceDriver.getOption()) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - } + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(this.getDeviceCode()) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + standardOrdinarySiteDeviceDriver.setAgvphase(phase); + standardOrdinarySiteDeviceDriver.setIndex(index); + standardOrdinarySiteDeviceDriver.setInst(inst); } else { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); LuceneLogDto logDto = LuceneLogDto.builder() @@ -302,103 +280,45 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic log.info("未找到指令号{}对应的指令", ikey); return; } - if (ObjectUtil.isEmpty(inst.getCarno())) { - inst.setCarno(String.valueOf(carno)); - instructionService.update(inst); - } if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(this.getDeviceCode()) - .content("agvphase:" + phase + "反馈:" + data) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - standardOrdinarySiteDeviceDriver.setAgvphase(phase); - standardOrdinarySiteDeviceDriver.setIndex(index); - standardOrdinarySiteDeviceDriver.setInst(inst); - } - } - - // 到达放货点 - //(Itype=1/2/3,需要WCS反馈) - else if (phase == 0x07) { - if (agvaddr == 0) { - agvaddr = agvaddr_copy; - } - if (agvaddr < 1) { - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(device_code) - .content("agv地址参数有误,phase:" + phase) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - return; - } - if (agvaddr != 0) { - CommonFinalParam commonFinalParam = new CommonFinalParam(); - old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr); - if (StrUtil.contains(old_device_code, commonFinalParam.getBARRE())) { - String[] point = old_device_code.split(commonFinalParam.getBARRE()); - device_code = point[0]; - } else if (StrUtil.contains(old_device_code, commonFinalParam.getPOINT())) { - String[] point = old_device_code.split("\\."); - device_code = point[0]; - emptyNum = point[1]; - } else { - device_code = old_device_code; - } - } - - device = deviceAppService.findDeviceByCode(device_code); - if (ObjectUtil.isEmpty(device_code)) { - log.info(agvaddr + "对应设备号为空!"); - return; - } - if (ObjectUtil.isEmpty(inst)) { - log.info("未找到指令号{}对应的指令", ikey); - return; - } - if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { - standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); - //卸货确认 - if (standardOrdinarySiteDeviceDriver.getOption() == 2) { + //放货确认 + if (standardOrdinarySiteDeviceDriver.getOption() == 1) { + log.info("等待一体机进行放货确认,指令号{},设备号{},option值{}", inst, standardOrdinarySiteDeviceDriver.getDevice_code(), standardOrdinarySiteDeviceDriver.getOption()); data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(this.getDeviceCode()) - .content("agvphase:" + phase + "反馈:" + data) + .instruct_code(inst.getInstruction_code()) + .device_code(standardOrdinarySiteDeviceDriver.getDevice_code()) + .content("等待一体机进行放货确认,指令号:" + inst.getInstruction_code() + ",设备号:" + standardOrdinarySiteDeviceDriver.getDevice_code() + ",option当前值:" + standardOrdinarySiteDeviceDriver.getOption()) .build(); logDto.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto); standardOrdinarySiteDeviceDriver.setOption(0); + LuceneLogDto logDto1 = LuceneLogDto.builder() + .instruct_code(inst.getInstruction_code()) + .device_code(standardOrdinarySiteDeviceDriver.getDevice_code()) + .content("等待一体机进行放货确认,指令号:" + inst.getInstruction_code() + ",设备号:" + standardOrdinarySiteDeviceDriver.getDevice_code() + ",option当前值:" + standardOrdinarySiteDeviceDriver.getOption()) + .build(); + logDto1.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto1); } else { - log.info("等待一体机进行卸货确认,设备号{},option值{}", standardOrdinarySiteDeviceDriver.getDevice_code(), standardOrdinarySiteDeviceDriver.getOption()); - logServer.deviceExecuteLog(this.device_code, "", "", "等待一体机进行卸货确认,设备号" + device.getDevice_code() + ",指令号" + ikey); + log.info("等待一体机进行放货确认,指令号{},设备号{},option值{}", inst.getInstruction_code(), standardOrdinarySiteDeviceDriver.getDevice_code(), standardOrdinarySiteDeviceDriver.getOption()); + logServer.deviceExecuteLog(this.device_code, "", "", "等待一体机进行放货确认,设备号" + device.getDevice_code() + ",指令号" + ikey); LuceneLogDto logDto = LuceneLogDto.builder() + .instruct_code(inst.getInstruction_code()) .device_code(standardOrdinarySiteDeviceDriver.getDevice_code()) - .content("等待一体机进行卸货确认,设备号" + standardOrdinarySiteDeviceDriver.getDevice_code() + ",option当前值" + standardOrdinarySiteDeviceDriver.getOption()) + .content("等待一体机进行放货确认,指令号:" + inst.getInstruction_code() + ",设备号:" + standardOrdinarySiteDeviceDriver.getDevice_code() + ",option当前值:" + standardOrdinarySiteDeviceDriver.getOption()) .build(); logDto.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto); } - - } else { - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(this.getDeviceCode()) - .content("agvphase:" + phase + "反馈:" + data) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); } } - - //放货完成 - //(Itype=1/2/3,需要WCS反馈) - else if (phase == 0x09) { + // 到达放货点 + //(Itype=1/2/3,需要WCS反馈) + else if (phase == 0x07) { if (agvaddr == 0) { agvaddr = agvaddr_copy; } @@ -447,11 +367,22 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic standardOrdinarySiteDeviceDriver.setAgvphase(phase); standardOrdinarySiteDeviceDriver.setIndex(index); standardOrdinarySiteDeviceDriver.setInst(inst); + + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(this.getDeviceCode()) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); } } - //todo 待完善 - else if (phase == 0x4D) { + + //放货完成 + //(Itype=1/2/3,需要WCS反馈) + else if (phase == 0x09) { if (agvaddr == 0) { agvaddr = agvaddr_copy; } @@ -488,80 +419,41 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic log.info("未找到指令号{}对应的指令", ikey); return; } - if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { - //通道1 - Region region = regionService.findByCode("1"); - if (StrUtil.equals(region.getIs_charge(), CommonFinalParam.ZERO)) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + //卸货确认 + if (standardOrdinarySiteDeviceDriver.getOption() == 2) { + log.info("等待一体机进行卸货确认,指令号{},设备号{},option值{}", inst.getInstruction_code(), standardOrdinarySiteDeviceDriver.getDevice_code(), standardOrdinarySiteDeviceDriver.getOption()); data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(this.getDeviceCode()) - .content("agvphase:" + phase + "反馈:" + data) + .instruct_code(inst.getInstruction_code()) + .device_code(standardOrdinarySiteDeviceDriver.getDevice_code()) + .content("等待一体机进行卸货确认,指令号:" + inst.getInstruction_code() + ",设备号:" + standardOrdinarySiteDeviceDriver.getDevice_code() + ",option当前值:" + standardOrdinarySiteDeviceDriver.getOption()) .build(); logDto.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto); - region.setIs_charge("1"); - region.setHas_agv("1"); - regionService.updateById(region); - } - } - } + standardOrdinarySiteDeviceDriver.setOption(0); + LuceneLogDto logDto1 = LuceneLogDto.builder() + .instruct_code(inst.getInstruction_code()) + .device_code(standardOrdinarySiteDeviceDriver.getDevice_code()) + .content("等待一体机进行卸货确认,指令号:" + inst.getInstruction_code() + ",设备号:" + standardOrdinarySiteDeviceDriver.getDevice_code() + ",option当前值:" + standardOrdinarySiteDeviceDriver.getOption()) + .build(); + logDto1.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto1); - //todo 待完善 - else if (phase == 0x4E) { - if (agvaddr == 0) { - agvaddr = agvaddr_copy; - } - if (agvaddr < 1) { - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(device_code) - .content("agv地址参数有误,phase:" + phase) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - return; - } - if (agvaddr != 0) { - CommonFinalParam commonFinalParam = new CommonFinalParam(); - old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr); - if (StrUtil.contains(old_device_code, commonFinalParam.getBARRE())) { - String[] point = old_device_code.split(commonFinalParam.getBARRE()); - device_code = point[0]; - } else if (StrUtil.contains(old_device_code, commonFinalParam.getPOINT())) { - String[] point = old_device_code.split("\\."); - device_code = point[0]; - emptyNum = point[1]; } else { - device_code = old_device_code; + log.info("等待一体机进行卸货确认,指令号{},设备号{},option值{}", inst.getInstruction_code(), standardOrdinarySiteDeviceDriver.getDevice_code(), standardOrdinarySiteDeviceDriver.getOption()); + logServer.deviceExecuteLog(this.device_code, "", "", "等待一体机进行卸货确认,设备号" + device.getDevice_code() + ",指令号" + ikey); + LuceneLogDto logDto = LuceneLogDto.builder() + .instruct_code(inst.getInstruction_code()) + .device_code(standardOrdinarySiteDeviceDriver.getDevice_code()) + .content("等待一体机进行卸货确认,指令号:" + inst.getInstruction_code() + ",设备号:" + standardOrdinarySiteDeviceDriver.getDevice_code() + ",option当前值" + standardOrdinarySiteDeviceDriver.getOption()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); } } - - device = deviceAppService.findDeviceByCode(device_code); - if (ObjectUtil.isEmpty(device_code)) { - log.info(agvaddr + "对应设备号为空!"); - return; - } - if (ObjectUtil.isEmpty(inst)) { - log.info("未找到指令号{}对应的指令", ikey); - return; - } - - if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { - Region region = regionService.findByCode("1"); - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0, 0, 0); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(this.getDeviceCode()) - .content("agvphase:" + phase + "反馈:" + data) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - region.setIs_charge("0"); - region.setHas_agv("0"); - regionService.updateById(region); - } - } - - else if (phase == 0x70) { + } else if (phase == 0x70) { //x坐标 x = ikey; LuceneLogDto logDto = LuceneLogDto.builder() diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java index 749cbbf..1597ce7 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java @@ -8,16 +8,13 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.common.base.CommonFinalParam; -import org.nl.acs.device.domain.Device; import org.nl.acs.device.service.DeviceService; -import org.nl.acs.device.service.dto.DeviceDto; import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.RouteableDeviceDriver; import org.nl.acs.device_driver.driver.AbstractDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; -import org.nl.acs.history.ErrorUtil; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.log.service.DeviceExecuteLogService; @@ -267,15 +264,7 @@ public class StandardOrdinarySiteDeviceDriver extends AbstractDeviceDriver imple move = LangProcess.msg("universal_two_yes"); jo.put("hasGoods", true); } - DeviceDto dto = deviceservice.findByCode(this.getDevice().getDevice_code()); - jo.put("zh_device_name", dto.getZh_device_name()); - jo.put("en_device_name", dto.getEn_device_name()); - jo.put("mode", mode); - jo.put("move", move); - jo.put("action", action); jo.put("isOnline", true); - jo.put("error", ErrorUtil.getDictDetail("error_type", String.valueOf(this.getError()))); - jo.put("isError", this.getIserror()); jo.put("option", option); jo.put("is_click", true); return jo; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/region/service/impl/RegionServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/region/service/impl/RegionServiceImpl.java index b1e3e82..f6c3b93 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/region/service/impl/RegionServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/region/service/impl/RegionServiceImpl.java @@ -2,41 +2,35 @@ package org.nl.acs.region.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.AllArgsConstructor; -import org.nl.acs.auto.initial.ApplicationAutoInitial; import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.common.base.PageInfo; import org.nl.acs.common.base.impl.CommonServiceImpl; -import org.nl.acs.custompolicy.domain.CustomPolicy; -import org.nl.acs.custompolicy.server.dto.CustomPolicyDTO; -import org.nl.acs.device.domain.Device; import org.nl.acs.region.domain.Region; import org.nl.acs.region.service.RegionService; import org.nl.acs.region.service.dto.RegionDto; import org.nl.acs.region.service.mapper.RegionMapper; -import org.nl.acs.task.domain.Task; import org.nl.acs.utils.ConvertUtil; import org.nl.acs.utils.PageUtil; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.config.language.LangProcess; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.Arrays; +import java.util.List; +import java.util.Map; @Service @AllArgsConstructor @@ -121,9 +115,10 @@ public class RegionServiceImpl extends CommonServiceImpl im @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(String[] ids) { - Set idsSet = new HashSet<>(1); - idsSet.addAll(Arrays.asList(ids)); - regionMapper.upBatchIds(idsSet); + List list = regionMapper.selectBatchIds(Arrays.asList(ids)); + for (Region region : list) { + regionMapper.deleteById(region.getId()); + } } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/domain/Task.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/domain/Task.java index 6e77c6c..3e691ce 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/domain/Task.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/domain/Task.java @@ -1,24 +1,16 @@ package org.nl.acs.task.domain; -import org.nl.acs.common.base.CommonModel; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.IdType; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; +import com.baomidou.mybatisplus.annotation.*; +import lombok.*; +import lombok.experimental.Accessors; +import org.nl.acs.common.base.CommonModel; -import javax.validation.constraints.*; -import java.math.BigDecimal; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.math.BigDecimal; /** * @author jiaolm @@ -196,6 +188,8 @@ public class Task extends CommonModel implements Serializable { private String empty_site; + private String car_no; + @NotBlank private String is_active; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/dto/TaskDto.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/dto/TaskDto.java index 9a4639c..bd6585b 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/dto/TaskDto.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/dto/TaskDto.java @@ -57,7 +57,7 @@ public class TaskDto implements Serializable { /** * 车号 */ - private String carno; + private String car_no; /** * 复合任务 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 e1b4e9d..d4e1b03 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 @@ -21,6 +21,9 @@ import org.nl.acs.AcsConfig; import org.nl.acs.agv.server.XianGongAgvService; import org.nl.acs.auto.initial.ApplicationAutoInitial; import org.nl.acs.common.base.CommonFinalParam; +import org.nl.acs.common.base.PageInfo; +import org.nl.acs.common.base.QueryHelpMybatisPlus; +import org.nl.acs.common.base.impl.CommonServiceImpl; import org.nl.acs.device.domain.Device; import org.nl.acs.device.enums.DeviceType; import org.nl.acs.device.service.DeviceAssignedService; @@ -28,7 +31,6 @@ import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.dto.DeviceAssignedDto; import org.nl.acs.device.service.impl.DeviceServiceImpl; import org.nl.acs.device_driver.DeviceDriverDefination; -import org.nl.acs.device_driver.conveyor.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.device_driver.storage.standard_storage.StandardStorageDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.domain.Instruction; @@ -42,35 +44,30 @@ import org.nl.acs.route.domain.RoutePlan; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; import org.nl.acs.route.service.mapper.RoutePlanMapper; +import org.nl.acs.task.domain.Task; import org.nl.acs.task.enums.AgvSystemTypeEnum; import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.enums.TaskTypeEnum; import org.nl.acs.task.service.TaskFeedbackService; -import org.nl.acs.common.base.PageInfo; -import org.nl.acs.common.base.QueryHelpMybatisPlus; -import org.nl.acs.common.base.impl.CommonServiceImpl; -import org.nl.acs.task.service.dto.TaskIdAndStatusDTO; -import org.nl.common.exception.BadRequestException; -import org.nl.acs.utils.ConvertUtil; -import org.nl.common.utils.FileUtil; -import org.nl.acs.utils.PageUtil; -import org.nl.acs.task.domain.Task; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.dto.TaskIdAndStatusDTO; import org.nl.acs.task.service.dto.TaskQueryParam; import org.nl.acs.task.service.mapper.TaskMapper; +import org.nl.acs.utils.ConvertUtil; +import org.nl.acs.utils.PageUtil; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.FileUtil; import org.nl.common.utils.SecurityUtils; +import org.nl.config.SpringContextHolder; import org.nl.config.language.LangProcess; import org.nl.system.service.param.ISysParamService; -import org.nl.common.utils.CodeUtil; - -import org.nl.config.SpringContextHolder; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import org.springframework.data.domain.Pageable; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -551,6 +548,14 @@ public class TaskServiceImpl extends CommonServiceImpl impleme dto.setTask_id(IdUtil.simpleUUID()); } String task_code = dto.getTask_code(); + if (StrUtil.isEmpty(dto.getCar_no())) { + if ((dto.getStart_device_code().equals("A3") && dto.getNext_device_code().equals("A2")) || (dto.getStart_device_code().equals("A3") && dto.getNext_device_code().equals("A1"))) { + dto.setCar_no("2"); + } + if (dto.getStart_device_code().equals("A3") && dto.getNext_device_code().equals("A4")) { + dto.setCar_no("1"); + } + } if (StrUtil.isEmpty(task_code)) { task_code = CodeUtil.getNewCode("TASK_NO"); task_code = CommonFinalParam.HYPHEN_ + task_code; @@ -1068,7 +1073,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme map.put("路由方案编码", acsTask.getRoute_plan_code()); map.put("是否需要反馈上位系统", acsTask.getIs_needfeedback()); map.put("备注", acsTask.getRemark()); - map.put("agv车号", acsTask.getCarno()); + map.put("agv车号", acsTask.getCar_no()); map.put("是否启用", acsTask.getIs_active()); map.put("是否删除", acsTask.getIs_delete()); map.put("创建者", acsTask.getCreate_by()); @@ -1682,8 +1687,8 @@ public class TaskServiceImpl extends CommonServiceImpl impleme if (ObjectUtil.isNotEmpty(entity.getWeight())) { feed_jo.put("weight", entity.getWeight()); } - if (ObjectUtil.isNotEmpty(entity.getCarno())) { - feed_jo.put("car_no", entity.getCarno()); + if (ObjectUtil.isNotEmpty(entity.getCar_no())) { + feed_jo.put("car_no", entity.getCar_no()); } JSONArray ja = new JSONArray(); ja.add(feed_jo); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java index 24c4e59..9baa885 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java @@ -9,52 +9,36 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.AcsConfig; import org.nl.acs.address.service.AddressService; import org.nl.acs.address.service.dto.AddressDto; -import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.device.domain.Device; import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.agv.ndctwo.AgvNdcTwoDeviceDriver; -import org.nl.acs.device_driver.conveyor.box_palletizing_manipulator.BoxPalletizingManipulatorDeviceDriver; import org.nl.acs.device_driver.conveyor.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; -import org.nl.acs.device_driver.one_conveyor.fold_disc_site.FoldDiscSiteDeviceDriver; -import org.nl.acs.device_driver.one_manipulator.box_package_manipulator.BoxPackageManipulatorDeviceDriver; -import org.nl.acs.device_driver.paper_tube_device2.PaperTubeConveyor2DeviceDriver; -import org.nl.acs.device_driver.two_conveyor.blank_manipulator.BlankManipulatorDeviceDriver; -import org.nl.acs.device_driver.two_conveyor.hongxiang_device.HongXiangConveyorDeviceDriver; -import org.nl.acs.device_driver.two_conveyor.inflatable_shaft_library.InflatableShaftLibraryDeviceDriver; -import org.nl.acs.device_driver.two_conveyor.oven_manipulator.OvenGantryManipulatorDeviceDriver; -import org.nl.acs.device_driver.two_conveyor.subvolume_weighing_station.SubvolumeWeighingStationDriver; -import org.nl.acs.device_driver.two_conveyor.waste_foil_weighing_station.WasteFoilWeighingStationDriver; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.region.domain.Region; import org.nl.acs.region.service.RegionService; -import org.nl.acs.storage_cell.domain.StorageCell; -import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.acs.task.service.dto.TaskIdAndStatusDTO; import org.nl.common.exception.BadRequestException; import org.nl.config.language.LangProcess; +import org.nl.config.lucene.service.LuceneExecuteLogService; +import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.hand.dto.HeadDto; -import org.nl.hand.dto.HeadTaskDto; -import org.nl.hand.service.HandService; import org.nl.hand.service.PdaService; import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.mapper.SysDictMapper; import org.nl.system.service.param.ISysParamService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; -import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -62,6 +46,9 @@ import java.util.Map; @RequiredArgsConstructor @Slf4j public class PdaServiceImpl implements PdaService { + + @Autowired + LuceneExecuteLogService luceneExecuteLogService; @Autowired private DeviceService deviceService; @@ -91,6 +78,7 @@ public class PdaServiceImpl implements PdaService { JSONArray data = new JSONArray(); //查询所有设备 List list = deviceService.lambdaQuery() + .eq(Device::getDriver_code, "standard_ordinary_site") .list(); if (CollectionUtil.isEmpty(list)) { throw new BadRequestException(LangProcess.msg("error_no_regional")); @@ -154,6 +142,12 @@ public class PdaServiceImpl implements PdaService { jo.put("task_type", "1"); jo.put("agv_system_type", "2"); jo.put("priority", "1"); + if ((start_device_code.equals("A3") && next_device_code.equals("A2"))|| (start_device_code.equals("A3") && next_device_code.equals("A1"))) { + jo.put("car_no", "2"); + } + if (start_device_code.equals("A3") && next_device_code.equals("A4")){ + jo.put("car_no", "1"); + } TaskDto task_dto = jo.toJavaObject(TaskDto.class); try { @@ -209,21 +203,27 @@ public class PdaServiceImpl implements PdaService { throw new BadRequestException("当前任务不存在!"); } JSONObject resultJson = new JSONObject(); - Instruction instruction = instructionService.findByTaskid(dto.getTask_id(), "instruction_status <2 "); - if (instruction != null) { - resultJson.put("message", "有指令未完成!"); + if (Integer.parseInt(dto.getTask_status()) == 0) { + TaskIdAndStatusDTO taskIdAndStatusDTO = new TaskIdAndStatusDTO(); + taskIdAndStatusDTO.setTask_id(dto.getTask_id()); + taskIdAndStatusDTO.setTask_status(dto.getTask_status()); + try { + taskserver.finish(taskIdAndStatusDTO); + } catch (Exception e) { + resultJson.put("message", e.getMessage()); + return resultJson; + } + resultJson.put("message", "强制完成成功"); return resultJson; } - TaskIdAndStatusDTO taskIdAndStatusDTO = new TaskIdAndStatusDTO(); - taskIdAndStatusDTO.setTask_id(dto.getTask_id()); - taskIdAndStatusDTO.setTask_status(TaskStatusEnum.FINISHED.getIndex()); try { - taskserver.finish(taskIdAndStatusDTO); + Instruction instruction = instructionService.findByTaskid(dto.getTask_id(), "1"); + instructionService.finish(instruction); } catch (Exception e) { resultJson.put("message", e.getMessage()); return resultJson; } - resultJson.put("message", "操作成功"); + resultJson.put("message", "强制完成成功"); return resultJson; } @@ -288,6 +288,12 @@ public class PdaServiceImpl implements PdaService { if (device_k.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device_k.getDeviceDriver(); standardOrdinarySiteDeviceDriver.setOption(Integer.parseInt(option)); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("设备号:" + device_code + ",option当前值:" + standardOrdinarySiteDeviceDriver.getOption()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); } JSONObject resultJson = new JSONObject(); if (ObjectUtil.isEmpty(errArr)) { @@ -327,7 +333,7 @@ public class PdaServiceImpl implements PdaService { @Override public Map queryDevice(String jsonObject) throws Exception { - JSONArray backja = new JSONArray(); + JSONObject resultJson = new JSONObject(); JSONArray datas = JSONArray.parseArray(jsonObject); //agv AgvNdcTwoDeviceDriver agvNdcTwoDeviceDriver; @@ -347,18 +353,18 @@ public class PdaServiceImpl implements PdaService { } if (device.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) { agvNdcTwoDeviceDriver = (AgvNdcTwoDeviceDriver) device.getDeviceDriver(); - jo.put("device_code", agvNdcTwoDeviceDriver.getDevice().getDevice_code()); jo.put("x", agvNdcTwoDeviceDriver.getX()); jo.put("y", agvNdcTwoDeviceDriver.getY()); jo.put("angle", agvNdcTwoDeviceDriver.getAngle()); - ja.put(agvNdcTwoDeviceDriver.getDevice().getDevice_code(), jo); + if (device_code.equals("1")) { + resultJson.put("one", jo); + } else { + resultJson.put("two", jo); + } } - backja.add(ja); } - JSONObject resultJson = new JSONObject(); resultJson.put("status", HttpStatus.OK.value()); resultJson.put("message", "操作成功"); - resultJson.put("data", backja); return resultJson; } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/AutoCreateInst.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/AutoCreateInst.java index 45c0d30..d95efff 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/AutoCreateInst.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/AutoCreateInst.java @@ -1,21 +1,14 @@ package org.nl.system.service.quartz.task; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.nl.acs.common.base.CommonFinalParam; -import org.nl.acs.device.domain.Device; -import org.nl.acs.instruction.domain.InstructionMybatis; +import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.enums.InstructionStatusEnum; import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.instruction.domain.Instruction; -import org.nl.acs.limit_regional.server.LimitRegionalService; -import org.nl.acs.limit_regional.server.dto.LimitRegionalDto; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; @@ -86,6 +79,7 @@ public class AutoCreateInst { String route_plan_code = acsTask.getRoute_plan_code(); String vehicleType = acsTask.getVehicle_type(); String agv_system_type = acsTask.getAgv_system_type(); + String car_no = acsTask.getCar_no(); String start_height = acsTask.getStart_height(); String next_height = acsTask.getNext_height(); @@ -163,6 +157,7 @@ public class AutoCreateInst { instdto.setStart_height(start_height); instdto.setNext_height(next_height); instdto.setAgv_action_type(agvActionType); + instdto.setCarno(car_no); //判断agv系统 //1、1楼叉车系统 //2、2楼1区域AGV系统 diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml index 3a9def5..a87d08e 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml @@ -10,7 +10,7 @@ spring: driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy # url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:stand_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true # url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:lzhl_two_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:xlm_acs}?serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:jinbao}?serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} password: ${DB_PWD:123456} # password: ${DB_PWD:p@ssw0rd} diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application.yml index 6eb5a1c..709369d 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application.yml +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application.yml @@ -6,7 +6,7 @@ spring: freemarker: check-template-location: false profiles: - active: dev + active: prod jackson: time-zone: GMT+8 data: diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal.properties b/acs2/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal.properties index 28f6d19..795b59a 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal.properties +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal.properties @@ -62,9 +62,9 @@ universal_notCreateInstMessage9=\u63D2\u62D4\u8F74\u5DE5\u4F4Dmode!=2\uFF0C\u65E universal_notCreateInstMessage10=\u63D2\u62D4\u8F74\u5DE5\u4F4Dmove!=0\uFF0C\u65E0\u6CD5\u751F\u6210\u6307\u4EE4! universal_notCreateInstMessage11=\u63D2\u62D4\u8F74\u5DE5\u4F4Daction!=2\uFF0C\u65E0\u6CD5\u751F\u6210\u6307\u4EE4! universal_notCreateInstMessage12=\u63D2\u62D4\u8F74\u5DE5\u4F4Daction!=1\uFF0C\u65E0\u6CD5\u751F\u6210\u6307\u4EE4! -universal_actionMessage1=\u4E0D\u5141\u8BB8\u53D6\u653E -universal_actionMessage2=\u5141\u8BB8\u53D6\u653E -universal_actionMessage3=\u5141\u8BB8\u79BB\u5F00 +universal_actionMessage1=\u5F85\u673A +universal_actionMessage2=\u653E\u8D27\u786E\u8BA4 +universal_actionMessage3=\u5378\u8D27\u786E\u8BA4 universal_actionMessage4=\u8BF7\u6C42\u52A8\u4F5C\u5DF2\u590D\u4F4D universal_actionMessage5=\u8BF7\u6C42\u52A8\u4F5C\u672A\u590D\u4F4D universal_actionMessage6=\u5141\u8BB8\u53D6 diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_zh_CN.properties b/acs2/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_zh_CN.properties index e14f2c3..a72cb1a 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_zh_CN.properties +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_zh_CN.properties @@ -43,9 +43,9 @@ universal_feedMessage3=\u5149\u7535\u4FE1\u53F7(move)\u4E0D\u4E3A\u65E0\u8D27\u7 universal_feedMessage4=\u5F53\u524D\u4E0A\u62A5\u4EFB\u52A1\u53F7(task)\u4E0D\u5E94\u8BE5\u4E3A0 universal_feedMessage5=\u884C\u67B6\u673A\u68B0\u624B universal_feedMessage6=\u4EFB\u52A1\u5B8C\u6210 -universal_actionMessage1=\u4E0D\u5141\u8BB8\u53D6\u653E -universal_actionMessage2=\u5141\u8BB8\u53D6\u653E -universal_actionMessage3=\u5141\u8BB8\u79BB\u5F00 +universal_actionMessage1=\u5F85\u673A +universal_actionMessage2=\u653E\u8D27\u786E\u8BA4 +universal_actionMessage3=\u5378\u8D27\u786E\u8BA4 universal_actionMessage4=\u8BF7\u6C42\u52A8\u4F5C\u5DF2\u590D\u4F4D universal_actionMessage5=\u8BF7\u6C42\u52A8\u4F5C\u672A\u590D\u4F4D universal_actionMessage6=\u5141\u8BB8\u53D6 diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/log/AgvNdcTwoDeviceDriver.xml b/acs2/nladmin-system/nlsso-server/src/main/resources/log/AgvNdcTwoDeviceDriver.xml new file mode 100644 index 0000000..a603cb5 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/log/AgvNdcTwoDeviceDriver.xml @@ -0,0 +1,30 @@ + + + + + + + + + ${LOG_HOME}/ndc-agv请求/%d{yyyy-MM-dd}.%i.log + + 15 + + 50MB + + 2GB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + ${log.charset} + + + + + + + + + + diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml b/acs2/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml index 229eeef..c644794 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml @@ -73,30 +73,6 @@ https://juejin.cn/post/6844903775631572999 - @@ -115,6 +91,7 @@ https://juejin.cn/post/6844903775631572999 + diff --git a/acs2/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java b/acs2/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java index a2797c3..82555da 100644 --- a/acs2/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java +++ b/acs2/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java @@ -8,8 +8,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.scheduling.annotation.Scheduled; -import java.util.Scanner; -import java.util.concurrent.*; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; /** * @Author: lyd @@ -25,23 +30,39 @@ public class ApplicationTest { @Test void contextLoads() { - Scanner scanner = new Scanner(System.in); - System.out.println("请输入第一个数:"); - int a = scanner.nextInt(); - System.out.println("请输入第一个数:"); - int b = scanner.nextInt(); - System.out.println("请输入第一个数:"); - int c = scanner.nextInt(); - //求最小值 - int min = (((a < b) ? a : b) < c) ? ((a < b) ? a : b) : c; - //求最大值 - int max = (((a > b) ? a : b) > c) ? ((a > b) ? a : b) : c; - //求中间值 - int mid = a + b + c - max - min; - //排序 - System.out.println("最小值为:" + min + "中间值为:" + mid + "最大值为:" + max); + List list = Arrays.asList("a", "b", "c"); + long a = list.stream().filter(s -> s.contains("a")).count(); + System.out.println(a); + list.stream().filter(s -> s.contains("a")).forEach(System.out::println); + List list1 = list.stream().collect(Collectors.toList()); + list1.forEach(System.out::println); + } + @Test + void test() { + Boolean b = true; + if (!b) + System.out.println(b); + } + @Test + void test1() { + int a = 1; + int b = 10; + b++; + int c = countSum(a,b); + System.out.println(c); + } + @Test + void test2() { + int sum = 0; + for (int i = 0; i < 50; i++) { + sum += i; + System.out.println(sum); + } + } + private int countSum(int a, int b) { + return a + b; } @Test diff --git a/acs2/nladmin-ui/src/assets/images/1.png b/acs2/nladmin-ui/src/assets/images/1.png new file mode 100644 index 0000000000000000000000000000000000000000..266155f6c4c6843f4435e992129602cf7ae7050e GIT binary patch literal 26401 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 literal 0 HcmV?d00001 diff --git a/acs2/nladmin-ui/src/layout/components/Sidebar/Logo.vue b/acs2/nladmin-ui/src/layout/components/Sidebar/Logo.vue index ef5074c..9a1a8ec 100644 --- a/acs2/nladmin-ui/src/layout/components/Sidebar/Logo.vue +++ b/acs2/nladmin-ui/src/layout/components/Sidebar/Logo.vue @@ -14,7 +14,7 @@