From 8e3176795de8d5fcd036a7a62b8a10becf84500c Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Fri, 29 Aug 2025 17:41:54 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E6=96=B0=E5=A2=9Erfid=E8=AF=BB?= =?UTF-8?q?=E5=86=99=E5=99=A8=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E8=BE=93=E9=80=81=E7=BA=BF=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/ndctwo/AgvNdcTwoDeviceDriver.java | 111 +++- .../BeltConveyorDeviceDriver.java | 220 ++++---- .../conveyor/belt_conveyor/ItemProtocol.java | 47 +- .../StandardStorageDefination.java | 46 ++ .../StandardStorageDeviceDriver.java | 29 + .../acs/ext/wms/service/AcsToWmsService.java | 2 +- .../wms/service/impl/AcsToWmsServiceImpl.java | 16 +- .../service/InstructionService.java | 2 + .../service/impl/InstructionServiceImpl.java | 100 +--- .../controller/BmVehicleRfidController.java | 110 ++++ .../service/IbmVehicleRfidService.java | 60 ++ .../service/dao/BmVehicleRfid.java | 122 ++++ .../dao/mapper/BmVehicleRfidMapper.java | 7 + .../dao/mapper/BmVehicleRfidMapper.xml | 6 + .../service/dto/BmVehicleRfidDto.java | 70 +++ .../service/dto/BmVehicleRfidParam.java | 68 +++ .../rfid_manage/service/dto/EpcRecord.java | 11 + .../impl/BmVehicleRfidServiceImpl.java | 521 ++++++++++++++++++ .../rest/StorageCellController.java | 19 +- .../service/StorageCellService.java | 10 + .../service/impl/StorageCellServiceImpl.java | 75 +++ .../java/org/nl/acs/utils/StructUtil.java | 66 +++ .../org/nl/common/domain/query/BaseQuery.java | 4 +- .../service/quartz/task/AutoCreateInst.java | 66 +-- .../main/resources/config/application-dev.yml | 2 +- .../src/api/acs/device/storageCell.js | 10 +- .../src/views/acs/device/config.vue | 4 +- .../acs/device/driver/standard_storage.vue | 315 +++++++++++ .../acs/device/storageCell/UploadDialog.vue | 116 ++++ .../views/acs/device/storageCell/index.vue | 21 +- .../src/views/vehicle_rfid/index.vue | 235 ++++++++ .../src/views/vehicle_rfid/vehicle_rfid.js | 49 ++ 32 files changed, 2263 insertions(+), 277 deletions(-) create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/standard_storage/StandardStorageDefination.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/standard_storage/StandardStorageDeviceDriver.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/controller/BmVehicleRfidController.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/IbmVehicleRfidService.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/BmVehicleRfid.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.xml create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/BmVehicleRfidDto.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/BmVehicleRfidParam.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/EpcRecord.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/utils/StructUtil.java create mode 100644 acs2/nladmin-ui/src/views/acs/device/driver/standard_storage.vue create mode 100644 acs2/nladmin-ui/src/views/acs/device/storageCell/UploadDialog.vue create mode 100644 acs2/nladmin-ui/src/views/vehicle_rfid/index.vue create mode 100644 acs2/nladmin-ui/src/views/vehicle_rfid/vehicle_rfid.js 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 494b51b..a6cf94a 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 @@ -16,6 +16,7 @@ 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.belt_conveyor.BeltConveyorDeviceDriver; 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.driver.AbstractDeviceDriver; @@ -43,9 +44,7 @@ import org.nl.system.service.param.ISysParamService; import org.nl.config.SpringContextHolder; import java.time.LocalTime; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; +import java.util.*; import java.util.concurrent.ThreadPoolExecutor; @@ -165,8 +164,8 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //普通站点 StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver; - //标准-光电检测 - StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; + //标准-输送线 + BeltConveyorDeviceDriver beltConveyorDeviceDriver; if (phase == 0x02) { @@ -233,6 +232,18 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic logDto.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto); standardOrdinarySiteDeviceDriver.setOption(0); + } else if (device.getDeviceDriver() instanceof BeltConveyorDeviceDriver) { + beltConveyorDeviceDriver = (BeltConveyorDeviceDriver) device.getDeviceDriver(); + if (beltConveyorDeviceDriver.getAction() == 1 && beltConveyorDeviceDriver.getMode() == 2 && beltConveyorDeviceDriver.getError() == 0&& beltConveyorDeviceDriver.getMove() == 1) { + data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); + } else { + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(beltConveyorDeviceDriver.getDevice_code()) + .content("未给agv进入信号原因是:" + beltConveyorDeviceDriver.getDevice_code() + "动作信号不为1或者工作模式不为2或者有报警,当前的指令号为:" + inst.getInstruction_code()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + } } else { data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); LuceneLogDto logDto = LuceneLogDto.builder() @@ -306,6 +317,24 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic standardOrdinarySiteDeviceDriver.setAgvphase(phase); standardOrdinarySiteDeviceDriver.setIndex(index); standardOrdinarySiteDeviceDriver.setInst(inst); + } else if (device.getDeviceDriver() instanceof BeltConveyorDeviceDriver) { + beltConveyorDeviceDriver = (BeltConveyorDeviceDriver) device.getDeviceDriver(); + if (beltConveyorDeviceDriver.getAction() == 2 && beltConveyorDeviceDriver.getMode() == 2 && beltConveyorDeviceDriver.getError() == 0) { + List list1 = new ArrayList(); + Map map = new HashMap(); + map.put("code", "to_command"); + map.put("value", "1"); + list1.add(map); + beltConveyorDeviceDriver.writing(list1); + data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); + } else { + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(beltConveyorDeviceDriver.getDevice_code()) + .content("未给agv离开信号原因是:" + beltConveyorDeviceDriver.getDevice_code() + "动作信号不为2或者工作模式不为2或者有报警,当前的指令号为:" + inst.getInstruction_code()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + } } else { data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); LuceneLogDto logDto = LuceneLogDto.builder() @@ -367,6 +396,19 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic luceneExecuteLogService.deviceExecuteLog(logDto); standardOrdinarySiteDeviceDriver.setOption(0); + } else if (device.getDeviceDriver() instanceof BeltConveyorDeviceDriver) { + + beltConveyorDeviceDriver = (BeltConveyorDeviceDriver) device.getDeviceDriver(); + if (beltConveyorDeviceDriver.getAction() == 1 && beltConveyorDeviceDriver.getMode() == 2 && beltConveyorDeviceDriver.getError() == 0&&beltConveyorDeviceDriver.getMove()==0) { + data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); + } else { + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(beltConveyorDeviceDriver.getDevice_code()) + .content("未给agv进入信号原因是:" + beltConveyorDeviceDriver.getDevice_code() + "动作信号不为1或者工作模式不为2或者有报警,当前的指令号为:" + inst.getInstruction_code()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + } } else { data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); LuceneLogDto logDto = LuceneLogDto.builder() @@ -430,6 +472,35 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic standardOrdinarySiteDeviceDriver.setAgvphase(phase); standardOrdinarySiteDeviceDriver.setIndex(index); standardOrdinarySiteDeviceDriver.setInst(inst); + } else if (device.getDeviceDriver() instanceof BeltConveyorDeviceDriver) { + beltConveyorDeviceDriver = (BeltConveyorDeviceDriver) device.getDeviceDriver(); + if (beltConveyorDeviceDriver.getMode() == 2 && beltConveyorDeviceDriver.getError() == 0) { + List list = new ArrayList(); + Map map1 = new HashMap(); + map1.put("code", "to_command"); + map1.put("value", "2"); + Map map2 = new HashMap(); + map2.put("code", "to_target");//目标楼层从wms下发的参数字段取 + map2.put("value", "3"); + list.add(map2); + Map map3 = new HashMap(); + map3.put("code", "to_task"); + map3.put("value", inst.getInstruction_code()); + list.add(map3); + Map map4 = new HashMap(); + map4.put("code", "to_barcode"); + map4.put("value", inst.getVehicle_code()); + list.add(map4); + beltConveyorDeviceDriver.writing(list); + data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); + } else { + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(beltConveyorDeviceDriver.getDevice_code()) + .content("未给agv离开信号原因是:" + beltConveyorDeviceDriver.getDevice_code() + "动作信号不为2或者工作模式不为2或者有报警,当前的指令号为:" + inst.getInstruction_code()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + } } else { data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); LuceneLogDto logDto = LuceneLogDto.builder() @@ -483,11 +554,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //当前上报的车号 String now_car = String.valueOf(this.agvaddr); //如果配置的车号是诺宝车号 - if(now_car.equals(is_atuo_car)){ + if (now_car.equals(is_atuo_car)) { //是否开启自动充电 String is_atuo_electric = ISysParamService.findByCode(AcsConfig.IS_ATUO_ELECTRIC).getValue(); log.info("接收agv上报信息,is_atuo_electric:" + is_atuo_electric); - if("1".equals(is_atuo_electric)){ + if ("1".equals(is_atuo_electric)) { String electric_begin = ISysParamService.findByCode(AcsConfig.ELECTRIC_BEGIN).getValue(); String[] begins = electric_begin.split(":"); String electric_end = ISysParamService.findByCode(AcsConfig.ELECTRIC_END).getValue(); @@ -499,27 +570,27 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic LocalTime now = LocalTime.now(); // 判断当前时间是否在时间段内 boolean isInRange = !now.isBefore(startTime) && !now.isAfter(endTime); - int electric = 0 ; + int electric = 0; //早上8-22点 - if(isInRange){ + if (isInRange) { electric = Integer.parseInt(ISysParamService.findByCode(AcsConfig.ELECTRIC).getValue()); - }else{ + } else { electric = Integer.parseInt(ISysParamService.findByCode(AcsConfig.ELECTRIC2).getValue()); } - if (electric_qty>0 && electric_qty < electric) { - log.info("当前车辆{}电量为{}低于{},开始判断是否需要充电!", this.agvaddr, electric_qty,electric); + if (electric_qty > 0 && electric_qty < electric) { + log.info("当前车辆{}电量为{}低于{},开始判断是否需要充电!", this.agvaddr, electric_qty, electric); //判断是否已下发充电任务 - Dict dict1 = dictService.getDictByName3("station",String.valueOf(this.agvaddr),null); - if(ObjectUtil.isNotEmpty(dict1)){ - log.info("当前车辆{}已分配充电桩{},退出后续判断",this.agvaddr,dict1.getPara1()); - }else{ + Dict dict1 = dictService.getDictByName3("station", String.valueOf(this.agvaddr), null); + if (ObjectUtil.isNotEmpty(dict1)) { + log.info("当前车辆{}已分配充电桩{},退出后续判断", this.agvaddr, dict1.getPara1()); + } else { //未下发,判断是否有空闲充电桩 Dict dict = dictService.getDictByName2("station"); - if(ObjectUtil.isNotEmpty(dict)){ + if (ObjectUtil.isNotEmpty(dict)) { ndcAgvService.charge(String.valueOf(this.agvaddr)); - isCharge =true; - }else{ - log.info("当前车辆{}电量为{}低于{},但无空闲充电桩!", this.agvaddr, electric_qty,electric); + isCharge = true; + } else { + log.info("当前车辆{}电量为{}低于{},但无空闲充电桩!", this.agvaddr, electric_qty, electric); } } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java index 75db7af..1506965 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.conveyor.belt_conveyor; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpResponse; @@ -28,6 +29,8 @@ import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; +import org.nl.acs.rfid_manage.service.IbmVehicleRfidService; +import org.nl.acs.rfid_manage.service.dao.BmVehicleRfid; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.task.service.TaskService; import org.nl.acs.utils.DeviceErrorUtil; @@ -69,6 +72,8 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements AgvService agvService = SpringContextHolder.getBean(AgvService.class); @Autowired DeviceErrorLogService errorLogServer = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); + @Autowired + IbmVehicleRfidService ibmVehicleRfidService = SpringContextHolder.getBean(IbmVehicleRfidService.class); LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean("luceneExecuteLogServiceImpl"); @@ -105,8 +110,8 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements /** * 托盘方向 */ - int container_direction = 0; - int last_container_direction = 0; + int actionRequest = 0; + int last_actionRequest = 0; /** * 报警 */ @@ -123,15 +128,15 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements int task = 0; int last_task = 0; /** - * 托盘类型 + * 出入库信号 */ - int container_type = 0; - int last_container_type = 0; + int type = 0; + int last_type = 0; /** * 纯数字托盘号 */ - int container_no = 0; - int last_container_no = 0; + String barcode = null; + String last_barcode = null; int inventory_qty = 0; int out_finish = 0; @@ -153,16 +158,14 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements /** * 下发接纯数字托盘号 */ - int to_container_no = 0; - int last_to_container_no = 0; + String to_barcode = null; + String last_to_barcode = null; /** * 下发托盘类型 */ - int to_container_type = 0; - int last_to_container_type = 0; + String to_taskNum = null; + String last_to_taskNum = null; - int to_height_level = 0; - int last_to_height_level = 0; //子卷条码 @@ -228,21 +231,20 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements mode = this.itemProtocol.getMode(); move = this.itemProtocol.getMove(); action = this.itemProtocol.getAction(); - container_direction = this.itemProtocol.getContainer_direction(); - container_type = this.itemProtocol.getContainer_type(); + type = this.itemProtocol.getType(); + actionRequest = this.itemProtocol.getActionRequest(); + barcode = this.itemProtocol.getBarcode(); error = this.itemProtocol.getError(); task = this.itemProtocol.getTask(); to_command = this.itemProtocol.getTo_command(); to_target = this.itemProtocol.getTotarget(); to_task = this.itemProtocol.getTo_task(); - to_container_no = this.itemProtocol.getContainer_direction(); + to_barcode = this.itemProtocol.getTo_barcode(); + to_taskNum = this.itemProtocol.getTo_taskNum(); - if (move != last_move && last_move == 1 && mode > 0) { - requireSucess = false; - } - if (mode != last_mode) { + if (actionRequest != last_actionRequest) { requireSucess = false; } @@ -269,7 +271,7 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements } - if (mode == 0) { + if (mode == 1) { this.setIsonline(false); message = "脱机"; } else if (error != 0) { @@ -283,17 +285,19 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements Instruction instruction = null; List toInstructions; - switch (mode) { - case 1: + switch (actionRequest) { + case 0: log.debug("弃用(留作兼容)"); break; - case 2: + case 5: //申请任务 if (move == 1 && !requireSucess) { - instruction_require(); + boolean b = instruction_require(); + if (b) { + requireSucess = false; + } } else { String remark = ""; - ; if (mode != 2) { remark = "universal_remark2"; } @@ -313,7 +317,8 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements //} } break; - case 3: + case 6: + //更新出库任务数 log.info(this.device_code + ",运行中"); break; default: @@ -353,95 +358,96 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements last_mode = mode; last_move = move; last_error = error; - last_container_direction = container_direction; - last_container_no = container_no; - last_container_type = container_type; + last_type = type; + last_barcode = barcode; + last_actionRequest = actionRequest; last_action = action; last_task = task; last_to_command = to_command; last_to_target = to_target; last_to_task = to_task; - last_to_container_no = to_container_no; - last_to_container_type = to_container_type; + last_to_barcode = to_barcode; + last_to_taskNum = to_taskNum; } - public void writing(int command) { - String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() - + "." + org.nl.acs.device_driver.conveyor.belt_conveyor.ItemProtocol.item_to_command; - Map itemMap = new HashMap(); - itemMap.put(to_command, command); - this.control(itemMap); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(device_code) - .content("下发多个电气信号" + itemMap) - .build(); - logDto.setLog_level(3); - luceneExecuteLogService.deviceExecuteLog(logDto); - } - - private void applyEmptyTask(String type, int mode) { - Date date = new Date(); - if (date.getTime() - this.require_apply_strangulation_time.getTime() - < (long) this.require_apply_strangulation_time_out) { - log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); - return; - } else { - this.require_apply_strangulation_time = date; - try { - JSONObject param = new JSONObject(); - param.put("device_code", device_code); - param.put("container_type", container_type); - param.put("type", type); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(device_code) - .content("申请空托盘出入库,参数:" + param) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - HttpResponse httpResponse = acsToWmsService.applyTwo(param); - JSONObject jsonObject = null; - if(ObjectUtil.isNotEmpty(httpResponse)){ - String body = httpResponse.body(); - jsonObject = JSONObject.parseObject(body); - } - message = "申请空托盘出入库,返回参数:" + jsonObject; - if (ObjectUtil.isNotNull(jsonObject) && jsonObject.getInteger("status") == 200) { - LuceneLogDto logDto2 = LuceneLogDto.builder() - .device_code(device_code) - .content("申请空托盘出入库,参数,接口返回:" + jsonObject) - .build(); - logDto2.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto2); - List list1 = new ArrayList(); - Map map = new HashMap(); - map.put("code", "to_command"); - map.put("value", mode); - list1.add(map); - this.writing(list1); - this.requireSucess = true; - } else { - this.iserror = true; - message = "申请空托盘出入库出错,返回参数:" + jsonObject; - LuceneLogDto logDto2 = LuceneLogDto.builder() - .device_code(device_code) - .content("申请空托盘出入库,返回参数:" + jsonObject) - .build(); - logDto2.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto2); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } +// public void writing(int command) { +// String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() +// + "." + org.nl.acs.device_driver.conveyor.belt_conveyor.ItemProtocol.item_to_command; +// Map itemMap = new HashMap(); +// itemMap.put(to_command, command); +// this.control(itemMap); +// LuceneLogDto logDto = LuceneLogDto.builder() +// .device_code(device_code) +// .content("下发多个电气信号" + itemMap) +// .build(); +// logDto.setLog_level(3); +// luceneExecuteLogService.deviceExecuteLog(logDto); +// } /** * 申请任务 */ - public synchronized Boolean + public synchronized boolean instruction_require() { + Date date = new Date(); + if (date.getTime() - this.instruction_require_time.getTime() < (long) this.instruction_require_time_out) { + log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); + return false; + } else { + this.instruction_require_time = date; + Device device = deviceAppService.findDeviceByCode(device_code); + List list = device.getDeviceDriver().getExtraDeviceCodes("link_device_code"); + if (CollUtil.isNotEmpty(getDeviceCodeList)) { + //关联的RFID设备 + String linkDeviceCode = list.get(0); + BmVehicleRfid bmVehicleRfid = ibmVehicleRfidService.findByDeviceCode(linkDeviceCode); + String rfid = bmVehicleRfid.getRfid(); + if (!StrUtil.isEmpty(rfid)) { + JSONObject param = new JSONObject(); + param.put("device_code", device_code); + param.put("vehicle_code", rfid); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("申请入库任务,接口请求参数:" + param) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + HttpResponse httpResponse = acsToWmsService.applyIn(param); + JSONObject jsonObject = null; + if(ObjectUtil.isNotEmpty(httpResponse)){ + String body = httpResponse.body(); + jsonObject = JSONObject.parseObject(body); + } + message = "申请入库任务,接口返回参数:" + jsonObject; + if (ObjectUtil.isNotNull(jsonObject) && jsonObject.getInteger("status") == 200) { + LuceneLogDto logDto2 = LuceneLogDto.builder() + .device_code(device_code) + .content("申请入库任务成功,接口返回参数:" + jsonObject) + .build(); + logDto2.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto2); + List list1 = new ArrayList(); + Map map = new HashMap(); + map.put("code", "to_command"); + map.put("value", 5); + list1.add(map); + this.writing(list1); + this.requireSucess = true; + } else { + this.iserror = true; + message = "申请入库任务出错,接口返回参数:" + jsonObject; + LuceneLogDto logDto2 = LuceneLogDto.builder() + .device_code(device_code) + .content("申请入库任务出错,接口返回参数:" + jsonObject) + .build(); + logDto2.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto2); + } + } + } + } return true; } @@ -533,11 +539,11 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements jo.put("hasGoods", true); } String container_type = ""; - if (this.container_type == 1) { - container_type = LangProcess.msg("universal_small_pallets"); - } else if (this.container_type == 2) { - container_type = LangProcess.msg("universal_large_pallets"); - } +// if (this.container_type == 1) { +// container_type = LangProcess.msg("universal_small_pallets"); +// } else if (this.container_type == 2) { +// container_type = LangProcess.msg("universal_large_pallets"); +// } jo.put("move", move); jo.put("task", task); jo.put("type", container_type); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/ItemProtocol.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/ItemProtocol.java index 3dac73a..a6c0286 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/ItemProtocol.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/ItemProtocol.java @@ -34,13 +34,17 @@ public class ItemProtocol { */ public static String item_error = "error"; /** - * 托盘方向 + * 出入库信号 */ - public static String item_container_direction = "container_direction"; + public static String item_type = "type"; /** + * 动作请求 + */ + public static String item_actionRequest = "actionRequest"; + /** * 托盘类型 */ - public static String item_container_type = "container_type"; + public static String item_barcode = "barcode"; /** * 任务号 */ @@ -51,9 +55,9 @@ public class ItemProtocol { */ public static String item_to_command = "to_command"; /** - * 下发托盘类型 + * 下发托盘号 */ - public static String item_to_container_type = "to_container_type"; + public static String item_to_barcode = "to_barcode"; /** * 下发任务号 */ @@ -62,6 +66,10 @@ public class ItemProtocol { * 下发目标站 */ public static String item_to_target = "to_target"; + /** + * 下发出库任务数 + */ + public static String item_to_taskNum = "to_taskNum"; @@ -89,18 +97,22 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_move); } - public int getContainer_direction() { - return this.getOpcIntegerValue(item_container_direction); + public int getActionRequest() { + return this.getOpcIntegerValue(item_actionRequest); } - public int getContainer_type() { - return this.getOpcIntegerValue(item_container_type); + public String getBarcode() { + return this.getOpcStringValue(item_barcode); } public int getAction() { return this.getOpcIntegerValue(item_action); } + public int getType() { + return this.getOpcIntegerValue(item_type); + } + public int getError() { return this.getOpcIntegerValue(item_error); @@ -125,8 +137,12 @@ public class ItemProtocol { return this.getOpcStringValue(item_to_command); } - public int getTo_container_type() { - return this.getOpcIntegerValue(item_to_container_type); + public String getTo_barcode() { + return this.getOpcStringValue(item_to_barcode); + } + + public String getTo_taskNum() { + return this.getOpcStringValue(item_to_taskNum); } Boolean isonline; @@ -170,10 +186,11 @@ public class ItemProtocol { list.add(new ItemDto(item_heartbeat, "心跳", "DB101.B0")); list.add(new ItemDto(item_mode, "工作模式", "DB101.B2")); list.add(new ItemDto(item_move, "光电信号", "DB101.B3")); - list.add(new ItemDto(item_container_direction, "托盘方向", "DB101.B4")); - list.add(new ItemDto(item_container_type, "托盘类型", "DB101.B5")); + list.add(new ItemDto(item_type, "出入库信号", "DB101.B4")); + list.add(new ItemDto(item_actionRequest, "动作请求", "DB101.B5")); list.add(new ItemDto(item_action, "动作类型", "DB101.B6")); list.add(new ItemDto(item_error, "报警", "DB101.B58")); + list.add(new ItemDto(item_barcode, "载具号", "DB101.B60")); list.add(new ItemDto(item_task, "任务号", "DB101.D68")); return list; } @@ -183,8 +200,8 @@ public class ItemProtocol { list.add(new ItemDto(item_to_target, "下发仓位号", "DB102.W2")); list.add(new ItemDto(item_to_command, "下发命令", "DB102.W4")); list.add(new ItemDto(item_to_task, "下发任务号", "DB102.D1")); - list.add(new ItemDto(item_to_container_type, "下发托盘类型", "DB102.B5")); - + list.add(new ItemDto(item_to_barcode, "下发托盘号", "DB102.B5")); + list.add(new ItemDto(item_to_taskNum, "下发出库任务数", "DB102.B6")); return list; } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/standard_storage/StandardStorageDefination.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/standard_storage/StandardStorageDefination.java new file mode 100644 index 0000000..c8301eb --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/standard_storage/StandardStorageDefination.java @@ -0,0 +1,46 @@ +package org.nl.acs.device_driver.standard_storage; + +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.enums.DeviceType; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.DeviceDriverDefination; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +@Service +public class StandardStorageDefination implements DeviceDriverDefination { + @Override + public String getDriverCode() { + return "standard_storage"; + } + + @Override + public String getDriverName() { + return "标准版-货架"; + } + + @Override + public String getDriverDescription() { + return "标准版-货架"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new StandardStorageDeviceDriver()).setDevice(device).setDriverDefination(this); + } + + @Override + public Class getDeviceDriverType() { + return StandardStorageDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.storage); + return types; + } + +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/standard_storage/StandardStorageDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/standard_storage/StandardStorageDeviceDriver.java new file mode 100644 index 0000000..1aa758d --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/standard_storage/StandardStorageDeviceDriver.java @@ -0,0 +1,29 @@ +package org.nl.acs.device_driver.standard_storage; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.StorageDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractDeviceDriver; +import org.nl.acs.monitor.DeviceStageMonitor; +/** + * 标准版货架 + */ +@Slf4j +@Data +public class StandardStorageDeviceDriver extends AbstractDeviceDriver implements RouteableDeviceDriver, StorageDeviceDriver, DeviceDriver, DeviceStageMonitor { + @Override + public JSONObject getDeviceStatusName() throws Exception { + JSONObject jo = new JSONObject(); + jo.put("mode", 2); + jo.put("isOnline", true); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java index b7b4c41..b20c02e 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java @@ -89,7 +89,7 @@ public interface AcsToWmsService { * @param param * @return */ - HttpResponse applyTwo(JSONObject param); + HttpResponse applyIn(JSONObject param); /** * 二期发货申请任务 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java index 4a7af9e..0c3535e 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java @@ -163,13 +163,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } @Override - public HttpResponse applyTwo(JSONObject param) { + public HttpResponse applyIn(JSONObject param) { HttpResponse result2 = null; try { MDC.put(log_file_type, log_type); - log.info("applyTwo-----输入参数{}", param); + log.info("申请入库-----请求参数{}", param); String wmsurl = paramService.findByCode(AcsConfig.WMSURL).getValue(); - AddressDto addressDto = addressService.findByCode("applyTwo"); + AddressDto addressDto = addressService.findByCode("applyIn"); String url = wmsurl + addressDto.getMethods_url(); try { result2 = HttpRequest.post(url) @@ -180,14 +180,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { .execute(); } catch (Exception e) { String msg = e.getMessage(); - log.info("applyTaskToWmsError-----请求异常输出参数{}", msg); + log.info("申请入库-----请求异常输出参数{}", msg); //网络不通 } - log.info("applyTwo-----输出参数{}", result2.body()); - LuceneLogDto luceneLogDto = new LuceneLogDto(4, "applyTwo", String.valueOf(result2.getStatus()), - JSON.toJSONString(param), String.valueOf(result2.body()), "ACS向LMS申请" - + ("1".equals(param.getString("type")) ? "子卷装箱入库任务" : "2".equals(param.getString("type")) ? "空盘入库" : "3".equals(param.getString("type")) ? "空盘出库" : "5".equals(param.getString("type")) ? "木箱入库" : - "6".equals(param.getString("type")) ? "退货入库" : "异常处理位")); + log.info("申请入库-----输出参数{}", result2.body()); + LuceneLogDto luceneLogDto = new LuceneLogDto(4, "applyIn", String.valueOf(result2.getStatus()), + JSON.toJSONString(param), String.valueOf(result2.body()), "ACS向WMS申请入库任务"); luceneLogService.interfaceExecuteLog(luceneLogDto); return result2; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java index 75a9c70..b78aaa0 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java @@ -504,4 +504,6 @@ public interface InstructionService extends CommonService { List findReadyIns2(); Instruction findByStarCodeAndExcute(String deviceCode); + + int queryInstructionCount(String deviceCode); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index e3a5d79..ae86ceb 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -463,32 +463,6 @@ public class InstructionServiceImpl extends CommonServiceImpl 0 && StrUtil.equals(shortPathsList.get(0).getType(), CommonFinalParam.ONE)) { - Device deviceByCode = deviceAppService.findDeviceByCode(dto.getStart_device_code()); - if (dto.getAgv_system_type().equals(AgvSystemTypeEnum.XG_System_Type.getIndex())) { - String interactionJson = task.getInteraction_json(); - if (StrUtil.isEmpty(interactionJson)) { - throw new BadRequestException("agv叉车调整长宽参数为空"); - } - InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); - //仙工叉车 - HttpResponse response = xiangGongAgvService.sendOrderSequencesToForklift(dto, interactionJsonDTO); - if (ObjectUtils.isEmpty(response) || response.getStatus() != 200) { - dto.setSend_status("2"); - } else { - dto.setSend_status("1"); - } - } else if (dto.getAgv_system_type().equals(AgvSystemTypeEnum.One_NDC_System_Type.getIndex())) { - //一楼agv任务创建运单序列 - HttpResponse response = xiangGongAgvService.sendOrderSequencesToXZ(dto); - if (ObjectUtils.isEmpty(response) || response.getStatus() != 200) { - dto.setSend_status("2"); - } else { - dto.setSend_status("1"); - } - } else if (dto.getAgv_system_type().equals(AgvSystemTypeEnum.Two_NDC_System_Type.getIndex())) { - NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class); - log.warn("下发AGV指令数据," + "指令号:" + dto.getInstruction_code() + ",AGV系统类型:" + dto.getAgv_system_type()); - try { - ndcAgvService.sendAgvInstToNDC(task.getAgv_system_type(), dto); - dto.setSend_status("1"); - } catch (Exception e) { - dto.setSend_status("2"); - dto.setRemark(e.getMessage()); - e.printStackTrace(); - log.warn("下发AGV指令异常:" + e); - LuceneLogDto logDto1 = LuceneLogDto.builder() - .device_code(start_device_code) - .content("下发AGV指令异常") - .build(); - logDto1.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto1); - } - } - } + if (dto.getAgv_system_type().equals(AgvSystemTypeEnum.Two_NDC_System_Type.getIndex())) { + NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class); + log.warn("下发AGV指令数据," + "指令号:" + dto.getInstruction_code() + ",AGV系统类型:" + dto.getAgv_system_type()); + try { + ndcAgvService.sendAgvInstToNDC(task.getAgv_system_type(), dto); + dto.setSend_status("1"); + } catch (Exception e) { + dto.setSend_status("2"); + dto.setRemark(e.getMessage()); + e.printStackTrace(); + log.warn("下发AGV指令异常:" + e); + LuceneLogDto logDto1 = LuceneLogDto.builder() + .device_code(start_device_code) + .content("下发AGV指令异常") + .build(); + logDto1.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto1); + } + } } catch (Exception e) { dto.setSend_status("2"); log.error(e.getMessage()); @@ -1976,13 +1925,22 @@ public class InstructionServiceImpl extends CommonServiceImpl instructionsList = instructions.stream() + .filter(item -> StrUtil.equals(item.getNext_device_code(), deviceCode) + && StrUtil.equals(item.getInstruction_status(), TaskStatusEnum.READY.getIndex()) + && StrUtil.equals(item.getInstruction_status(), TaskStatusEnum.BUSY.getIndex())).collect(Collectors.toList()); + return instructionsList.size(); + } + public List findReadyInstructions() { //根据时间升序取第一个 List instructionsList = instructions.stream() .filter(item -> StrUtil.equals(item.getInstruction_type(), TaskTypeEnum.Truss_Task.getIndex()) - && StrUtil.equals(item.getInstruction_status(), TaskStatusEnum.READY.getIndex())).collect(Collectors.toList()); + && !StrUtil.equals(item.getInstruction_status(), TaskStatusEnum.READY.getIndex())).collect(Collectors.toList()); return instructionsList; } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/controller/BmVehicleRfidController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/controller/BmVehicleRfidController.java new file mode 100644 index 0000000..4d155b2 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/controller/BmVehicleRfidController.java @@ -0,0 +1,110 @@ +package org.nl.acs.rfid_manage.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.rfid_manage.service.IbmVehicleRfidService; +import org.nl.acs.rfid_manage.service.dto.BmVehicleRfidParam; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; +import java.util.Set; + + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/rfid") +@Slf4j +@SaIgnore +public class BmVehicleRfidController { + + @Resource + private IbmVehicleRfidService bmVehicleRfidService; + + + /** + * 分页查询 + * + * @param whereJson 查询条件 + * @param page 分页参数 + */ + @GetMapping + //@SaCheckPermission("@el.check(BmVehicleRfid:list") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + //写入标签 + //bmVehicleRfidService.writeEpc("1"); + return new ResponseEntity<>(TableDataInfo.build(bmVehicleRfidService.query(whereJson, page)), HttpStatus.OK); + } + + + + + /** + * 条件查询 + * + * @param params 查询条件 + */ + @PostMapping("/selectList") + //@SaCheckPermission("@el.check(BmVehicleRfid:list") + public ResponseEntity selectList(@RequestBody BmVehicleRfidParam params) { + return new ResponseEntity<>(bmVehicleRfidService.selectList(params), HttpStatus.OK); + } + + + /** + * 新增数据 + * + * @param params 实体对象 + * @return 新增结果 + */ + @PostMapping + //@SaCheckPermission("@el.check(BmVehicleRfid:add") + public ResponseEntity create(@RequestBody BmVehicleRfidParam params) { + bmVehicleRfidService.create(params); + return new ResponseEntity<>(HttpStatus.OK); + } + + /** + * 连接测试 + * @return 结果 + */ + @PostMapping("/open") + //@SaCheckPermission("@el.check(BmVehicleRfid:add") + public ResponseEntity connectRfid(@RequestBody BmVehicleRfidParam params) { + bmVehicleRfidService.connectRfid(params); + return new ResponseEntity<>(HttpStatus.OK); + } + + + /** + * 修改数据 + * + * @param params 实体对象 + * @return 修改结果 + */ + @PutMapping + //@SaCheckPermission("@el.check(BmVehicleRfid:edit')") + public ResponseEntity update(@RequestBody BmVehicleRfidParam params) { + bmVehicleRfidService.update(params); + return new ResponseEntity<>(HttpStatus.OK); + } + + + /** + * 删除数据 + * + * @param ids 多个主键Id + * @return 删除结果 + */ + //@SaCheckPermission("@el.check(BmVehicleRfid:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + bmVehicleRfidService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/IbmVehicleRfidService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/IbmVehicleRfidService.java new file mode 100644 index 0000000..08acc56 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/IbmVehicleRfidService.java @@ -0,0 +1,60 @@ +package org.nl.acs.rfid_manage.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.acs.rfid_manage.service.dao.BmVehicleRfid; +import org.nl.acs.rfid_manage.service.dto.BmVehicleRfidParam; +import org.nl.common.domain.query.PageQuery; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public interface IbmVehicleRfidService extends IService { + + /** + * 分页查询 + * + * @param whereJson 查询条件 + * @return IPage + */ + IPage query(Map whereJson, PageQuery page); + + /** + * 条件查询 + * + * @param params 查询条件 + * @return List + */ + List selectList(BmVehicleRfidParam params); + + + /** + * 创建 + * + * @param params 对象实体 + */ + void create(BmVehicleRfidParam params); + + + /** + * 编辑 + * + * @param params 对象实体 + */ + void update(BmVehicleRfidParam params); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Set ids); + + + void connectRfid(BmVehicleRfidParam params); + + void writeEpc(String id); + + BmVehicleRfid findByDeviceCode(String linkDeviceCode); +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/BmVehicleRfid.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/BmVehicleRfid.java new file mode 100644 index 0000000..4b1aca4 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/BmVehicleRfid.java @@ -0,0 +1,122 @@ +package org.nl.acs.rfid_manage.service.dao; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("bm_vehicle_rfid") +public class BmVehicleRfid extends Model { + private static final long serialVersionUID = -7739291296662381393L; + //@TableId(type = IdType.ASSIGN_ID) + + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.NONE) + private String id; + + + /** + * ip + */ + private String ip; + + + /** + * 端口 + */ + private String port; + + + /** + * 设备编号 + */ + private String device_code; + + + /** + * rfid号码 + */ + private String rfid; + + + /** + * 开始连接时间 + */ + private String start_time; + + + /** + * 创建人 + */ + private String create_id; + + + /** + * 创建人姓名 + */ + private String create_name; + + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private String create_time; + + + /** + * 修改人 + */ + private String update_id; + + + /** + * 修改人姓名 + */ + private String update_name; + + + /** + * 在线时间 + */ + @TableField(exist = false) + private String online_time; + /** + * 日志 + */ + private String log; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String update_time; + + + /** + * 是否启用 + */ + private Integer is_used; + /** + * 状态 + */ + private Integer status; + + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.java new file mode 100644 index 0000000..a79d98f --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.java @@ -0,0 +1,7 @@ +package org.nl.acs.rfid_manage.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.acs.rfid_manage.service.dao.BmVehicleRfid; + +public interface BmVehicleRfidMapper extends BaseMapper { +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.xml b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.xml new file mode 100644 index 0000000..274fd5c --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/BmVehicleRfidDto.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/BmVehicleRfidDto.java new file mode 100644 index 0000000..ddc5284 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/BmVehicleRfidDto.java @@ -0,0 +1,70 @@ +package org.nl.acs.rfid_manage.service.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BmVehicleRfidDto implements Serializable { + private static final long serialVersionUID = -7739291296662381396L; + + + /** + * 设备id + */ + private String id; + /** + * ip + */ + private String ip; + /** + * 端口 + */ + private String port; + /** + * 设备编号 + */ + private String device_code; + /** + * rfid号码 + */ + private String rfid; + /** + * 开始连接时间 + */ + private String start_time; + /** + * 创建人 + */ + private String create_id; + /** + * 创建人姓名 + */ + private String create_name; + /** + * 创建时间 + */ + private String create_time; + /** + * 修改人 + */ + private String update_id; + /** + * 修改人姓名 + */ + private String update_name; + /** + * 修改时间 + */ + private String update_time; + /** + * 是否启用 + */ + private Integer is_used; +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/BmVehicleRfidParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/BmVehicleRfidParam.java new file mode 100644 index 0000000..62f05cf --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/BmVehicleRfidParam.java @@ -0,0 +1,68 @@ +package org.nl.acs.rfid_manage.service.dto; + +import lombok.*; +import org.nl.acs.rfid_manage.service.dao.BmVehicleRfid; +import org.nl.common.domain.query.BaseQuery; + +@Data +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class BmVehicleRfidParam extends BaseQuery { + /** + * 设备id + */ + private String id; + /** + * ip + */ + private String ip; + /** + * 端口 + */ + private String port; + /** + * 设备编号 + */ + private String device_code; + /** + * rfid号码 + */ + private String rfid; + /** + * 开始连接时间 + */ + private String start_time; + /** + * 创建人 + */ + private String create_id; + /** + * 创建人姓名 + */ + private String create_name; + /** + * 创建时间 + */ + private String create_time; + /** + * 修改人 + */ + private String update_id; + /** + * 修改人姓名 + */ + private String update_name; + /** + * 修改时间 + */ + private String update_time; + + /** + * 开启或关闭 + */ + private String isOpen; + +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/EpcRecord.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/EpcRecord.java new file mode 100644 index 0000000..5f92c32 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/EpcRecord.java @@ -0,0 +1,11 @@ +package org.nl.acs.rfid_manage.service.dto; + +public class EpcRecord { + public String epc; + public long timestamp; + + public EpcRecord(String epc, long timestamp) { + this.epc = epc; + this.timestamp = timestamp; + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java new file mode 100644 index 0000000..bda1148 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java @@ -0,0 +1,521 @@ +package org.nl.acs.rfid_manage.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gg.reader.api.dal.GClient; +import com.gg.reader.api.dal.HandlerTagEpcLog; +import com.gg.reader.api.dal.HandlerTcpDisconnected; +import com.gg.reader.api.protocol.gx.*; +import org.apache.commons.lang3.StringUtils; +import org.nl.acs.rfid_manage.service.IbmVehicleRfidService; +import org.nl.acs.rfid_manage.service.dao.BmVehicleRfid; +import org.nl.acs.rfid_manage.service.dao.mapper.BmVehicleRfidMapper; +import org.nl.acs.rfid_manage.service.dto.BmVehicleRfidParam; +import org.nl.acs.rfid_manage.service.dto.EpcRecord; +import org.nl.acs.utils.StructUtil; +import org.nl.common.domain.query.PageQuery; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +@Service("bmVehicleRfidService") +public class BmVehicleRfidServiceImpl extends ServiceImpl implements IbmVehicleRfidService { + + @Resource + private BmVehicleRfidMapper bmVehicleRfidMapper; + // EPC 缓存:设备ID -> 天线号 -> EPC记录对象(包含EPC值 + 时间戳) + + private static final ConcurrentHashMap> epcCache = new ConcurrentHashMap<>(); + + //rfid读写器列表 + private static final ConcurrentHashMap clientMap = new ConcurrentHashMap<>(); + + // 缓存过期时间,单位:毫秒(例如5分钟) + private static final long EXPIRE_MILLIS = 5 * 60 * 1000; + + @Override + public void connectRfid(BmVehicleRfidParam params) { + //reconnectAllDisconnectedClients(); + List clientList = this.list(new QueryWrapper().eq("is_used", '1')); + for (BmVehicleRfid r : clientList) { + String deviceId = r.getId(); + GClient client = clientMap.get(deviceId); + String port = StringUtils.isNotBlank(params.getPort()) ? params.getPort() : r.getPort(); + String ip = r.getIp() + ":" + port; + // 打开连接命令 "1" 为开启所有设备连接,"0" 为关闭所有设备连接 + if ("1".equals(params.getIsOpen())) { + // 如果客户端连接对象不存在或未打开,创建新连接 + if (client == null) { + client = new GClient(); + if (client.openTcp(ip, 2000)) { + addClient(deviceId, client); + client.setSendHeartBeat(true); + stopEpc(deviceId); + // 发送扫码启动命令 + MsgBaseInventoryEpc msgBaseInventoryEpc = new MsgBaseInventoryEpc(); + msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1); // 默认1号天线 + msgBaseInventoryEpc.setInventoryMode(EnumG.InventoryMode_Inventory); + client.sendSynMsg(msgBaseInventoryEpc); + if (msgBaseInventoryEpc.getRtCode() == 0x00) { + System.out.println("设备[" + ip + "] 开始扫码任务成功"); + } else { + System.err.println("设备[" + ip + "] 扫码配置失败: " + msgBaseInventoryEpc.getRtMsg()); + } + //写入数据 +// MsgBaseWriteEpc msg = new MsgBaseWriteEpc(); +// msg.setAntennaEnable(EnumG.AntennaNo_1); +// //字起始地址 第0个为CRC,不可写 +// msg.setStart(1);//word +// //写EPC,数据默认为 hex 432 +// msg.setArea(EnumG.WriteArea_Epc); +// String sWriteHexData = "888"; // 写入数据 (16进制) +// System.out.println("Write hex " + sWriteHexData); +// int iWordLen = StructUtil.getValueLen(sWriteHexData); +// // PC值为EPC区域的长度标识(前5个bit标记长度),参考文档说明 +// sWriteHexData = StructUtil.getPc(iWordLen) + StructUtil.padLeft(sWriteHexData.toUpperCase(), 4 * iWordLen, '0'); // PC值+数据内容 +// msg.setHexWriteData(sWriteHexData); +// // 若需要写入带特殊编码数据,请自行进行编码并使用 "BwriteData" 属性。 +// // msg.setBwriteData(HexUtils.hexString2Bytes(sWriteHexData)); +// client.sendSynMsg(msg); +// if (0 == msg.getRtCode()) { +// System.out.println("写入:" + sWriteHexData + "成功!"); +// } else { +// System.out.println("写入:" + sWriteHexData + "失败!"); +// } + + // 订阅标签事件 + subscribeHandler(client, deviceId); + MsgAppGetBaseVersion msgAppGetBaseVersion = new MsgAppGetBaseVersion(); + //获取版本号 + client.sendSynMsg(msgAppGetBaseVersion); + if (0x00 == msgAppGetBaseVersion.getRtCode()) { + System.out.println("msgAppGetBaseVersion[OK]."); + } else { + System.out.println(msgAppGetBaseVersion.getRtMsg()); + } + //获取设备信息 + MsgAppGetReaderInfo msgAppGetReaderInfo = new MsgAppGetReaderInfo(); + client.sendSynMsg(msgAppGetReaderInfo); + if (0x00 == msgAppGetReaderInfo.getRtCode()) { + System.out.println("msgAppGetReaderInfo[OK]."); + } else { + System.out.println(msgAppGetReaderInfo.getRtMsg()); + } + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setStart_time(DateUtil.now()); + updated.setStatus(1); + updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "连接服务器成功!"); + this.updateById(updated); + } else { + System.err.println("设备[" + ip + "] TCP连接失败"); + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setRfid(null); + updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "连接服务器失败!"); + updated.setStatus(0); + this.updateById(updated); + continue; + } + } + // 检查连接有效性(通过版本获取判断) + if (!checkConnection(client)) { + System.err.println("设备[" + ip + "] 连接无效,关闭重试"); + removeClient(deviceId); + } + } else if ("0".equals(params.getIsOpen())) { + // 关闭连接 + if (client != null) { + // MsgBaseStop stopMsg = new MsgBaseStop(); + // client.sendSynMsg(stopMsg); + // if (stopMsg.getRtCode() == 0x00) { + // System.out.println("设备[" + ip + "] 停止扫码任务成功"); + // } else { + // System.err.println("设备[" + ip + "] 停止扫码失败: " + stopMsg.getRtMsg()); + // } + // client.close(); + // removeClient(deviceId); + disconnectAllClients(); + System.out.println("设备[" + ip + "] 已断开连接"); + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setRfid(null); + updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "已与服务器断开连接!"); + updated.setStart_time(null); + updated.setStatus(0); + this.updateById(updated); + } else { + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "未连接,无需断开"); + updated.setStart_time(null); + updated.setStatus(0); + this.updateById(updated); + System.out.println("设备[" + ip + "] 未连接,无需断开"); + } + } + } + } + + @Override + public void writeEpc(String id) { + GClient client = getClient("1"); + if (client != null) { + MsgBaseWriteEpc msg = new MsgBaseWriteEpc(); + stopEpc(id); + msg.setAntennaEnable(EnumG.AntennaNo_1); + //字起始地址 第0个为CRC,不可写 + msg.setStart(1);//word + //写EPC,数据默认为 hex 432 + msg.setArea(EnumG.WriteArea_Epc); + String sWriteHexData = "666"; // 写入数据 (16进制) + System.out.println("Write hex " + sWriteHexData); + int iWordLen = StructUtil.getValueLen(sWriteHexData); + // PC值为EPC区域的长度标识(前5个bit标记长度),参考文档说明 + sWriteHexData = StructUtil.getPc(iWordLen) + StructUtil.padLeft(sWriteHexData.toUpperCase(), 4 * iWordLen, '0'); // PC值+数据内容 + msg.setHexWriteData(sWriteHexData); + // 若需要写入带特殊编码数据,请自行进行编码并使用 "BwriteData" 属性。 + // msg.setBwriteData(HexUtils.hexString2Bytes(sWriteHexData)); + client.sendSynMsg(msg); + if (0 == msg.getRtCode()) { + System.out.println("写入:" + sWriteHexData + "成功!"); + } else { + System.out.println("写入:" + sWriteHexData + "失败!"); + } + } + } + + @Override + public BmVehicleRfid findByDeviceCode(String linkDeviceCode) { + List bmVehicleRfids = bmVehicleRfidMapper.selectList(new LambdaQueryWrapper().eq(BmVehicleRfid::getDevice_code, linkDeviceCode)); + if (bmVehicleRfids.size() > 0) { + return bmVehicleRfids.get(0); + } + return null; + } + + public void stopEpc(String id) { + GClient client = getClient("1"); + if (client != null) { + MsgBaseStop msgBaseStop = new MsgBaseStop(); + client.sendSynMsg(msgBaseStop); + if (0 == msgBaseStop.getRtCode()) { + System.out.println("停止成功!"); + } else { + System.out.println("停止失败!"); + } + } + } + + /** + * 判断设备是否已连接(通过获取版本信息判断) + */ + private boolean checkConnection(GClient client) { + try { + MsgAppGetBaseVersion versionMsg = new MsgAppGetBaseVersion(); + client.sendSynMsg(versionMsg); + return versionMsg.getRtCode() == 0x00; + } catch (Exception e) { + return false; + } + } + + /** + * 定时器执行断线重连 + */ + public void reconnectAllDisconnectedClients() { + List clientList = this.list(new QueryWrapper().eq("is_used", '1')); + for (BmVehicleRfid r : clientList) { + String ip = r.getIp() + ":" + r.getPort(); + System.out.println("设备[" + ip + "] 连接异常,开始重连..."); + if (tryReconnect(r.getId(), ip)) { + System.out.println("设备[" + ip + "] 重连成功"); + } else { + System.err.println("设备[" + ip + "] 重连失败"); + } + } + } + + public boolean tryReconnect(String deviceId, String ip) { + final int MAX_RETRY = 3; + final int WAIT_MS = 500; + for (int i = 1; i <= MAX_RETRY; i++) { + System.out.println("设备[" + ip + "] 第" + i + "次重连尝试..."); + GClient oldClient = clientMap.remove(deviceId); + if (oldClient != null) { + try { + oldClient.close(); + } catch (Exception ignored) { + } + } + GClient newClient = new GClient(); + if (newClient.openTcp(ip, 2000)) { + addClient(deviceId, newClient); + subscribeHandler(newClient, deviceId); + newClient.setSendHeartBeat(true); + if (checkConnection(newClient)) { + System.out.println("设备[" + ip + "] 重连成功"); + return true; + } else { + try { + newClient.close(); + } catch (Exception ignored) { + } + } + } + try { + Thread.sleep(WAIT_MS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return false; + } + } + return false; + } + + + public static GClient getClient(String deviceId) { + return clientMap.get(deviceId); + } + + public static void disconnectAllClients() { + for (String deviceId : clientMap.keySet()) { + removeClient(deviceId); + } + } + + + public static void addClient(String deviceId, GClient client) { + clientMap.put(deviceId, client); + } + + + public static void removeClient(String deviceId) { + GClient client = clientMap.remove(deviceId); + if (client != null) { + client.close(); + // try { + // MsgBaseStop stopMsg = new MsgBaseStop(); + // client.sendSynMsg(stopMsg); + // if (stopMsg.getRtCode() == 0x00) { + // System.out.println("停止扫码任务成功: " + deviceId); + // } else { + // System.err.println("停止扫码失败: " + stopMsg.getRtMsg()); + // } + // } catch (Exception e) { + // System.err.println("停止扫码任务异常: " + e.getMessage()); + // } finally { + // client.close(); + // System.out.println("已断开设备连接: " + deviceId); + // } + } + } + + + /** + * 上报RFID信息 + */ + private void subscribeHandler(GClient client, String id) { + //上报标签信息 + client.onTagEpcLog = new HandlerTagEpcLog() { + @Override + public void log(String s, LogBaseEpcInfo logBaseEpcInfo) { + if (logBaseEpcInfo != null && logBaseEpcInfo.getResult() == 0) { + String epc = logBaseEpcInfo.getEpc(); + handleEpc(epc, id, "1"); + } + } + }; + //断开连接通知 + client.onDisconnected = new HandlerTcpDisconnected() { + @Override + public void log(String s) { + System.out.println("command log output5:onDisconnected:" + "connect" + s + "close.........."); + client.close();//释放当前连接资源 + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(id); + updated.setRfid(null); + // updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "已与服务器断开连接!"); + updated.setStart_time(null); + updated.setStatus(0); + //todo 更新断开状态 + // this.updateById(updated); + } + }; + + } + + /** + * 主处理方法:如果 EPC 不同或过期,则更新数据库 + */ + private void handleEpc(String epc, String deviceId, String antenna) { + if (epc == null) { + return; + } + ConcurrentHashMap antennaMap = epcCache.get(deviceId); + EpcRecord record = antennaMap != null ? antennaMap.get(antenna) : null; + boolean isSame = record != null && epc.equals(record.epc) + && System.currentTimeMillis() - record.timestamp < EXPIRE_MILLIS; + + if (isSame) { + System.out.println(epc + "与上次标签值相同,不上报,跳过...."); + return; // EPC 相同且未过期,跳过 + } + epcCache.computeIfAbsent(deviceId, k -> new ConcurrentHashMap<>()) + .put(antenna, new EpcRecord(epc, System.currentTimeMillis())); + BmVehicleRfid currentDevice = this.getById(deviceId); + if (currentDevice != null && !epc.equals(currentDevice.getRfid())) { + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setRfid(epc); + updated.setLog(DateUtil.now() + ":设备:" + currentDevice.getDevice_code() + "读取RFID值:" + epc + "成功!"); + this.updateById(updated); + System.out.println("读取RFID值:" + epc + "成功!"); + } + } + + + /** + * 定期清理过期 EPC 缓存(建议由定时任务调用) + */ + private void clearExpiredCache() { + long now = System.currentTimeMillis(); + for (Map.Entry> deviceEntry : epcCache.entrySet()) { + ConcurrentHashMap antennaMap = deviceEntry.getValue(); + for (Map.Entry antennaEntry : antennaMap.entrySet()) { + if (now - antennaEntry.getValue().timestamp >= EXPIRE_MILLIS) { + antennaMap.remove(antennaEntry.getKey()); + } + } + if (antennaMap.isEmpty()) { + epcCache.remove(deviceEntry.getKey()); + } + } + } + + + /** + * 查询数据分页 + * + * @param whereJson 查询条件 + * @param page 分页参数 + */ + @Override + public IPage query(Map whereJson, PageQuery page) { + IPage resultPage = new Page<>(page.getPage(), page.getSize()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + IPage list = bmVehicleRfidMapper.selectPage(resultPage, queryWrapper); + list.getRecords().forEach(r -> { + if (r.getStart_time() != null) { + LocalDateTime createTime = LocalDateTime.parse(r.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + LocalDateTime updateTime = DateTime.now().toLocalDateTime(); + // 计算时间间隔 + Duration duration = Duration.between(createTime, updateTime); + if (duration.toMinutes() > 0) { + r.setOnline_time(duration.toMinutes() + "分钟"); + } else { + r.setOnline_time(duration.getSeconds() + "秒钟"); + } + } + }); + return list; + } + + + /** + * 根据条件查询 + * + * @param params 查询条件 + */ + @Override + public List selectList(BmVehicleRfidParam params) { + return bmVehicleRfidMapper.selectList(new QueryWrapper() + .lambda() + //.eq(ObjectUtil.isNotEmpty(params), BmVehicleRfid::getId, params.getFuzzy()) + //.or() + //.eq(ObjectUtil.isNotEmpty(params), BmVehicleRfid::getDjid, params.getFuzzy()) + ); + } + + + /** + * 创建 + * + * @param params 对象实体 + */ + @Override + public void create(BmVehicleRfidParam params) { + bmVehicleRfidMapper.insert(getBasicInfo(params, true)); + } + + + /** + * 编辑 + * + * @param params 对象实体 + */ + @Override + public void update(BmVehicleRfidParam params) { + // BmVehicleRfid dto = bmVehicleRfidMapper.selectById(params.getId()); + // if (dto == null) { + // throw new BadRequestException("不存在该数据!"); + // } + bmVehicleRfidMapper.updateById(getBasicInfo(params, false)); + } + + + /** + * 多选删除 + * + * @param ids 多个Id主键 + */ + @Override + public void deleteAll(Set ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("is_delete", "1") + //.set("update_optid", SecurityUtils.getCurrentUserId()) + //.set("update_optname", SecurityUtils.getCurrentNickName()) + //.set("update_time", DateUtil.now()) + .in("id", ids); + bmVehicleRfidMapper.update(null, updateWrapper); + //bmVehicleRfidMapper.deleteBatchIds(ids); + } + + + /** + * 获取实体基础信息 + * + * @param params 对象实体 + * @param isCreate 是否创建 + */ + private BmVehicleRfid getBasicInfo(BmVehicleRfidParam params, boolean isCreate) { + // if (isCreate) { + // params.setId(IdUtil.getStringId()); + // params.setCreate_id(Long.valueOf(SecurityUtils.getCurrentUserId())); + // params.setCreate_name(SecurityUtils.getCurrentNickName()); + // params.setCreate_time(DateUtil.now()); + // params.setIs_delete(IOSEnum.IS_NOTANDYES.code("否")); + // } + // params.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + // params.setUpdate_optname(SecurityUtils.getCurrentNickName()); + // params.setUpdate_time(DateUtil.now()); + BmVehicleRfid bmVehicleRfid = new BmVehicleRfid(); + BeanUtils.copyProperties(params, bmVehicleRfid); + return bmVehicleRfid; + } + +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/rest/StorageCellController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/rest/StorageCellController.java index 07b0de5..e246790 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/rest/StorageCellController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/rest/StorageCellController.java @@ -11,8 +11,10 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Map; @@ -32,7 +34,7 @@ public class StorageCellController { @GetMapping @Log("查询库位管理") - + //@PreAuthorize("@el.check('storageCell:list')") public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { return new ResponseEntity<>(storageCellService.queryAll(whereJson, page), HttpStatus.OK); @@ -40,7 +42,7 @@ public class StorageCellController { @PostMapping @Log("新增库位管理") - + //@PreAuthorize("@el.check('storageCell:add')") public ResponseEntity create(@Validated @RequestBody StorageCellDto dto) { storageCellService.create(dto); @@ -49,7 +51,7 @@ public class StorageCellController { @PutMapping @Log("修改库位管理") - + //@PreAuthorize("@el.check('storageCell:edit')") public ResponseEntity update(@Validated @RequestBody StorageCellDto dto) { storageCellService.update(dto); @@ -57,7 +59,7 @@ public class StorageCellController { } @Log("删除库位管理") - + //@PreAuthorize("@el.check('storageCell:del')") @DeleteMapping public ResponseEntity delete(@RequestBody String[] ids) { @@ -66,10 +68,17 @@ public class StorageCellController { } @Log("导出库位管理") - + @GetMapping(value = "/download") //@PreAuthorize("@el.check('storageCell:list')") public void download(HttpServletResponse response, @RequestParam Map whereJson) throws IOException { storageCellService.download(storageCellService.queryAll(whereJson), response); } + + @PostMapping("/excelImport") + @Log("excel导入") + public ResponseEntity excelImport(@RequestParam("file") MultipartFile file, HttpServletRequest request) { + storageCellService.excelImport(file, request); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/service/StorageCellService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/service/StorageCellService.java index f0dfe63..3db5ca3 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/service/StorageCellService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/service/StorageCellService.java @@ -6,7 +6,9 @@ import org.nl.acs.storage_cell.domain.StorageCell; import org.nl.acs.storage_cell.service.dto.StorageCellDto; import org.nl.acs.storage_cell.service.dto.StorageCellQueryParam; import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @@ -155,4 +157,12 @@ public interface StorageCellService extends CommonService { * @throws IOException / */ void download(List dtos, HttpServletResponse response) throws IOException; + + /** + * excel导入 + * + * @param file + * @param request + */ + void excelImport(MultipartFile file, HttpServletRequest request); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/service/impl/StorageCellServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/service/impl/StorageCellServiceImpl.java index d691f79..68e4329 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/service/impl/StorageCellServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/storage_cell/service/impl/StorageCellServiceImpl.java @@ -4,9 +4,13 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; import com.alibaba.fastjson.JSON; 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.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; @@ -14,7 +18,9 @@ import lombok.AllArgsConstructor; 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.service.DeviceService; +import org.nl.acs.device.service.dto.DeviceDto; import org.nl.common.exception.BadRequestException; import org.nl.acs.utils.ConvertUtil; import org.nl.common.utils.FileUtil; @@ -35,9 +41,12 @@ import org.springframework.transaction.annotation.Transactional; //import org.springframework.cache.annotation.CacheEvict; //import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.InputStream; import java.util.*; /** @@ -178,6 +187,16 @@ public class StorageCellServiceImpl extends CommonServiceImpl().eq("storage_code", storage_code)); + if (ObjectUtil.isNotEmpty(storageCell)) { + final StorageCellDto obj = ConvertUtil.convert(storageCell, StorageCellDto.class); + return obj; + } + return null; + } + // @Override // public StorageCellDto findByCode(String code) { // WQLObject wo = WQLObject.getWQLObject("acs_storage_cell"); @@ -260,4 +279,60 @@ public class StorageCellServiceImpl extends CommonServiceImpl> read = excelReader.read(1, excelReader.getRowCount()); + // 循环获取的数据 + for (int i = 0; i < read.size(); i++) { + List list = read.get(i); + JSONObject param = new JSONObject(); + String storage_code = list.get(0).toString(); + String parent_storage_code = list.get(1).toString(); + + + if (StrUtil.isEmpty(storage_code)) { + throw new BadRequestException(LangProcess.msg("error_checkNull", "storage_code")); + } + + if (StrUtil.isEmpty(parent_storage_code)) { + throw new BadRequestException(LangProcess.msg("error_checkNull", "parent_storage_code")); + } + + StorageCellDto dto = this.findByCode(storage_code); + if (ObjectUtil.isNotEmpty(dto)) { + continue; + } + //按照列获取 + param.put("device_id", IdUtil.getSnowflake(1, 1).nextId()); + param.put("storage_code", storage_code); + param.put("parent_storage_code", parent_storage_code); + param.put("create_by", nickName); + param.put("create_time", now); + param.put("update_by", nickName); + param.put("update_time", now); + + StorageCell entity = ConvertUtil.convert(param, StorageCell.class); + storageCellMapper.insert(entity); + } + } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/utils/StructUtil.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/utils/StructUtil.java new file mode 100644 index 0000000..6aa2d45 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/utils/StructUtil.java @@ -0,0 +1,66 @@ +package org.nl.acs.utils; + +import com.gg.reader.api.utils.BitBuffer; +import com.gg.reader.api.utils.HexUtils; + +public class StructUtil { + + public static String getZdPoint(int row,String source_code) { + if (row == 2 || row == 3) { + return source_code; + } + int blockRow = row == 1 ? 2 : 3; + String replace = source_code.replaceFirst("L0" + row, "L0%s"); + return String.format(replace, blockRow); + } + + public static String getDeepPoint(int row,String source_code) { + if (row == 1 || row == 4) { + return source_code; + } + int blockRow = row == 2 ? 1 : 4; + String replace = source_code.replaceFirst("L0" + row, "L0%s"); + return String.format(replace, blockRow); + } + + public static String getPc(int pcLen) { + int iPc = pcLen << 11; + BitBuffer buffer = BitBuffer.allocateDynamic(); + buffer.put(iPc); + buffer.position(16); + byte[] bTmp = new byte[2]; + buffer.get(bTmp); + return HexUtils.bytes2HexString(bTmp); + } + + public static String getGbPc(int pcLen) { + int iPc = pcLen << 8; + BitBuffer buffer = BitBuffer.allocateDynamic(); + buffer.put(iPc); + buffer.position(16); + byte[] bTmp = new byte[2]; + buffer.get(bTmp); + return HexUtils.bytes2HexString(bTmp); + } + + //写入数据不足4位后面补'0' AA00 + public static String padLeft(String src, int len, char ch) { + int diff = len - src.length(); + if (diff <= 0) { + return src; + } + + char[] chars = new char[len]; + System.arraycopy(src.toCharArray(), 0, chars, 0, src.length()); + for (int i = src.length(); i < len; i++) { + chars[i] = ch; + } + return new String(chars); + } + + public static int getValueLen(String data) { + data = data.trim(); + return data.length() % 4 == 0 ? data.length() / 4 + : (data.length() / 4) + 1; + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/query/BaseQuery.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/query/BaseQuery.java index 143bcd0..9776163 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/query/BaseQuery.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/query/BaseQuery.java @@ -31,8 +31,8 @@ public class BaseQuery { /** * 创建时间范围查询 */ - private Date start_time; - private Date end_time; + private String start_time; + private String end_time; /** 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 bc5b062..645ca28 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 @@ -10,6 +10,7 @@ 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.device_driver.conveyor.belt_conveyor.BeltConveyorDeviceDriver; import org.nl.acs.instruction.domain.InstructionMybatis; import org.nl.acs.instruction.enums.InstructionStatusEnum; import org.nl.acs.instruction.service.InstructionService; @@ -48,7 +49,7 @@ public class AutoCreateInst { * 创建指令前需要判断是否条件具备:起始位置是否有货、目标位置是否有货 */ public void run() throws Exception { - log.info("自动生成指令"+DateUtil.now()); + log.info("自动生成指令" + DateUtil.now()); TaskService taskserver = SpringContextHolder.getBean(TaskService.class); InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); @@ -57,12 +58,6 @@ public class AutoCreateInst { List list = taskserver.queryAllByStatus("0"); for (int i = 0; i < list.size(); i++) { TaskDto acsTask = list.get(i); - if (StrUtil.equals(acsTask.getTask_type(), TaskTypeEnum.AGV_Task.getIndex()) && !StrUtil.startWith(acsTask.getTask_code(), "-")) { - continue; - } - if (StrUtil.equals(acsTask.getTask_type(), TaskTypeEnum.Truss_Task.getIndex()) && !StrUtil.startWith(acsTask.getTask_code(), "-")) { - continue; - } String taskid = acsTask.getTask_id(); String taskcode = acsTask.getTask_code(); String task_type = acsTask.getTask_type(); @@ -121,7 +116,7 @@ public class AutoCreateInst { boolean flag = false; for (int m = 0; m < pathlist.size(); m++) { if (pathlist.get(m).equals(start_device_code)) { - if("1".equals(acsTask.getTask_type()) && !pathlist.get(m+1).equals(next_device_code)){ + if ("1".equals(acsTask.getTask_type()) && !pathlist.get(m + 1).equals(next_device_code)) { flag = true; break; } @@ -137,17 +132,31 @@ public class AutoCreateInst { } next_device_code = pathlist.get(index); + Device nextdevice = appService.findDeviceByCode(next_device_code); if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) { next_point_code = next_device_code + "-" + acsTask.getTo_y() + "-" + acsTask.getTo_z(); } else { next_point_code = next_device_code; } + BeltConveyorDeviceDriver beltConveyorDeviceDriver; + if (nextdevice.getDeviceDriver() instanceof BeltConveyorDeviceDriver) { + beltConveyorDeviceDriver = (BeltConveyorDeviceDriver) nextdevice.getDeviceDriver(); + if (beltConveyorDeviceDriver.getType() != 2) { + beltConveyorDeviceDriver.writing("to_command","7"); + log.info("当前输送线出入库信号不为出库"); + continue; + } + //满足出库,查询当前出库任务 +// int count = instructionService.queryInstructionCount(next_device_code); +// count = count + 1; +// beltConveyorDeviceDriver.writing("to_taskNum",count+""); + } Instruction instdto = new Instruction(); instdto.setInstruction_type(task_type); instdto.setInstruction_id(IdUtil.simpleUUID()); - if (acsTask.getAgv_system_type().equals(AgvSystemTypeEnum.One_NDC_System_Type.getIndex())){ + if (acsTask.getAgv_system_type().equals(AgvSystemTypeEnum.One_NDC_System_Type.getIndex())) { instdto.setInstruction_code(CodeUtil.getNewCode("INSTRUCT_NO")); } instdto.setRoute_plan_code(route_plan_code); @@ -182,36 +191,9 @@ public class AutoCreateInst { instdto.setStart_height(start_height); instdto.setNext_height(next_height); instdto.setAgv_action_type(agvActionType); - //判断agv系统 - //1、1楼叉车系统 - //2、2楼1区域AGV系统 - //3、2楼2区域AGV系统 -已废弃 - if (StrUtil.equals(agv_system_type, CommonFinalParam.TWO)) { - // task_type - //1、生箔; Itype=1:取空,取满,放空,放满; - //2、分切 Itype=3取满、取空、放满、放空; - //3、普通任务 Itype=2:取货、放货; - //4、叉车任务 - //5、输送任务 - //6、行架 - //7、立库 - if (StrUtil.equals(task_type, CommonFinalParam.ONE)) { - instdto.setAgv_inst_type(CommonFinalParam.ONE); - } else if (StrUtil.equals(task_type, "3")) { - instdto.setAgv_inst_type("2"); - } else if (StrUtil.equals(task_type, "2")) { - instdto.setAgv_inst_type("3"); - } else if (StrUtil.equals(task_type, "8")) { - instdto.setAgv_inst_type("2"); - } else { - log.info("未找到对应的AGV指令类型,任务号:" + acsTask.getTask_code() + ",task_type:" + acsTask.getTask_type()); - continue; - } - } else { - instdto.setAgv_inst_type("4"); - } + try { - instructionService.create(instdto); + instructionService.create(instdto); } catch (Exception e) { acsTask.setRemark(e.getMessage()); taskserver.updateByCodeFromCache(acsTask); @@ -224,10 +206,10 @@ public class AutoCreateInst { continue; } //创建指令后修改任务状态 - acsTask.setTask_status(TaskStatusEnum.BUSY.getIndex()); - acsTask.setUpdate_time(DateUtil.now()); - acsTask.setRemark(" "); - taskserver.update(acsTask); + acsTask.setTask_status(TaskStatusEnum.BUSY.getIndex()); + acsTask.setUpdate_time(DateUtil.now()); + acsTask.setRemark(" "); + taskserver.update(acsTask); } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index 62ad5a0..661c255 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.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:lzhl_acs_97}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:ynfj_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true username: ${DB_USER:root} # password: ${DB_PWD:Root.123456} diff --git a/acs2/nladmin-ui/src/api/acs/device/storageCell.js b/acs2/nladmin-ui/src/api/acs/device/storageCell.js index 99d0c46..4deb16c 100644 --- a/acs2/nladmin-ui/src/api/acs/device/storageCell.js +++ b/acs2/nladmin-ui/src/api/acs/device/storageCell.js @@ -24,4 +24,12 @@ export function edit(data) { }) } -export default { add, edit, del } +export function excelImport(data) { + return request({ + url: 'api/storageCell/excelImport', + method: 'post', + data + }) +} + +export default { add, edit, del, excelImport } diff --git a/acs2/nladmin-ui/src/views/acs/device/config.vue b/acs2/nladmin-ui/src/views/acs/device/config.vue index 5f73b43..f957687 100644 --- a/acs2/nladmin-ui/src/views/acs/device/config.vue +++ b/acs2/nladmin-ui/src/views/acs/device/config.vue @@ -82,6 +82,7 @@ import agv_ndc_two from '@/views/acs/device/driver/agv/agv_ndc_two' import xg_agv from '@/views/acs/device/driver/agv/xg_agv' import xg_agv_car from '@/views/acs/device/driver/agv/xg_agv_car.vue' import standard_manipulator from '@/views/acs/device/driver/one_manipulator/standard_manipulator.vue' +import standard_storage from '@/views/acs/device/driver/standard_storage' export default { name: 'DeviceConfig', components: { @@ -93,7 +94,8 @@ export default { xg_agv, belt_conveyor, standard_manipulator, - xg_agv_car + xg_agv_car, + standard_storage }, dicts: ['device_type'], mixins: [crud], diff --git a/acs2/nladmin-ui/src/views/acs/device/driver/standard_storage.vue b/acs2/nladmin-ui/src/views/acs/device/driver/standard_storage.vue new file mode 100644 index 0000000..2b096b4 --- /dev/null +++ b/acs2/nladmin-ui/src/views/acs/device/driver/standard_storage.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/acs2/nladmin-ui/src/views/acs/device/storageCell/UploadDialog.vue b/acs2/nladmin-ui/src/views/acs/device/storageCell/UploadDialog.vue new file mode 100644 index 0000000..87ba837 --- /dev/null +++ b/acs2/nladmin-ui/src/views/acs/device/storageCell/UploadDialog.vue @@ -0,0 +1,116 @@ + + + + diff --git a/acs2/nladmin-ui/src/views/acs/device/storageCell/index.vue b/acs2/nladmin-ui/src/views/acs/device/storageCell/index.vue index 7fbd809..9277d94 100644 --- a/acs2/nladmin-ui/src/views/acs/device/storageCell/index.vue +++ b/acs2/nladmin-ui/src/views/acs/device/storageCell/index.vue @@ -40,7 +40,18 @@ class="filter-item" /> - + + + {{ $t('auto.common.import') }} + + @@ -101,6 +112,7 @@ + @@ -112,11 +124,12 @@ import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' import rrOperation from '@crud/RR.operation' import i18n from '@/i18n' +import UploadDialog from '@/views/acs/device/storageCell/UploadDialog' const defaultForm = { storage_id: null, storage_code: null, x: null, y: null, z: null, address: null, remark: null, is_active: null, is_delete: null, create_by: null, create_time: null, update_by: null, update_time: null, parent_storage_code: null } export default { name: 'StorageCell', - components: { pagination, crudOperation, udOperation, rrOperation }, + components: { pagination, crudOperation, udOperation, rrOperation, UploadDialog }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ title: i18n.t('storageCell.title'), url: 'api/storageCell', idField: 'storage_id', sort: 'storage_id,desc', crudMethod: { ...crudStorageCell }}) @@ -128,6 +141,7 @@ export default { edit: ['admin', 'storageCell:edit'], del: ['admin', 'storageCell:del'] }, + uploadShow: false, rules: { storage_id: [ { required: true, message: '货位标识不能为空', trigger: 'blur' } @@ -166,6 +180,9 @@ export default { // 钩子:在获取表格数据之前执行,false 则代表不获取数据 [CRUD.HOOK.beforeRefresh]() { return true + }, + tableChanged3() { + this.crud.toQuery() } } } diff --git a/acs2/nladmin-ui/src/views/vehicle_rfid/index.vue b/acs2/nladmin-ui/src/views/vehicle_rfid/index.vue new file mode 100644 index 0000000..33fc64a --- /dev/null +++ b/acs2/nladmin-ui/src/views/vehicle_rfid/index.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/acs2/nladmin-ui/src/views/vehicle_rfid/vehicle_rfid.js b/acs2/nladmin-ui/src/views/vehicle_rfid/vehicle_rfid.js new file mode 100644 index 0000000..00f5bef --- /dev/null +++ b/acs2/nladmin-ui/src/views/vehicle_rfid/vehicle_rfid.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + +export function open(data) { + return request({ + url: 'api/rfid/open', + method: 'post', + data + }) +} + +export function add(data) { + return request({ + url: 'api/rfid/add', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/rfid/delete', + method: 'post', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/rfid/update', + method: 'post', + data + }) +} + +export function getUnit(params) { + return request({ + url: 'api/rfid', + method: 'get', + params + }) +} +export function getSelect() { + return request({ + url: 'api/rfid/select', + method: 'get' + }) +} + +export default { add, edit, del, getUnit, getSelect, open }