diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device/service/DeviceService.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device/service/DeviceService.java index c11c01c..b98d876 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device/service/DeviceService.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device/service/DeviceService.java @@ -282,4 +282,11 @@ public interface DeviceService { List findCacheDevice(); void updateBarcode(JSONObject json) throws Exception; + + /** + * 查询下拉框关联设备号 + * + * @return + */ + List queryLinkDeviceByCode(String device_code); } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java index 0d76560..a665105 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java @@ -1493,4 +1493,23 @@ public class DeviceServiceImpl implements DeviceService, ApplicationAutoInitial } return agvQty; } + + @Override + public List queryLinkDeviceByCode(String device_code) { + List list = new ArrayList<>(); + + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + Device device = appService.findDeviceByCode(device_code); + if (ObjectUtil.isNotEmpty(device.getExtraValue().get("link_device_code"))) { + Object[] arr = (Object[]) device.getExtraValue().get("link_device_code"); + String[] str_arr = new String[arr.length]; + for (int i = 0; i < arr.length; i++) { + str_arr[i] = (String) arr[i]; + } + for (int j = 0; j < str_arr.length; j++) { + list.add(str_arr[j]); + } + } + return list; + } } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control/ItemProtocol.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control/ItemProtocol.java index be3638d..bbcf031 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control/ItemProtocol.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control/ItemProtocol.java @@ -42,6 +42,10 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_mode); } + public int getHeight() { + return this.getOpcIntegerValue(item_height); + } + public int getMove() { return this.getOpcIntegerValue(item_move); } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control/StandardCoveyorControlDeviceDriver.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control/StandardCoveyorControlDeviceDriver.java index 7d96098..345f38d 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control/StandardCoveyorControlDeviceDriver.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control/StandardCoveyorControlDeviceDriver.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.sf.json.JSONObject; +import org.apache.commons.lang3.ObjectUtils; import org.nl.acs.config.AcsConfig; import org.nl.acs.config.server.AcsConfigService; import org.nl.acs.device.device_driver.standard_inspect.ReadUtil; @@ -16,14 +17,13 @@ import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.RouteableDeviceDriver; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.device_driver.jmagv.JMAgvDeviceDriver; +import org.nl.acs.device_driver.standard_conveyor_control_with_scanner.StandardCoveyorControlWithScannerDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.dto.Instruction; -import org.nl.acs.opc.Device; -import org.nl.acs.opc.DeviceAppService; -import org.nl.acs.opc.DeviceAppServiceImpl; -import org.nl.acs.opc.WcsConfig; +import org.nl.acs.opc.*; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; import org.nl.acs.task.service.TaskService; @@ -61,7 +61,7 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); @Autowired AcsConfigService acsConfigService = SpringContextHolder.getBean(AcsConfigService.class); - String container; + String container = ""; String container_type_desc; String last_container_type_desc; String last_container; @@ -76,10 +76,12 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver int task = 0; //出入库模式 int operation_type = 0; + int height = 0; int last_mode = 0; int last_error = 0; int last_move = 0; int last_task = 0; + int last_height = 0; Boolean isonline = true; int hasGoods = 0; @@ -132,6 +134,9 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 int flag = 0; + //指令创建锁 + Boolean createLock = false; + String device_code; @Override @@ -151,6 +156,7 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver task = this.itemProtocol.getTask(); hasGoods = this.itemProtocol.getMove(); operation_type = this.itemProtocol.getOperation_type(); + height = this.itemProtocol.getHeight(); if (mode != last_mode) { this.execute_log.setResource(this.device_code, this.device_code); this.execute_log.log("设备:" + device_code + ",last_mode -> mode:" + last_mode + "->" + mode); @@ -168,6 +174,10 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver this.execute_log.setResource(this.device_code, this.device_code); this.execute_log.log("设备:" + device_code + ",last_error -> error:" + last_error + "->" + error); } + if (height != last_height) { + this.execute_log.setResource(this.device_code, this.device_code); + this.execute_log.log("设备:" + device_code + ",last_height -> height:" + last_height + "->" + height); + } if (move != 0 && task > 0) { //inst_message @@ -216,14 +226,21 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver log.debug("设备运转模式:等待工作"); break; case 2: +// //申请任务 +// if (!StrUtil.isEmpty(material) && !StrUtil.isEmpty(qty) && material.length() > 0 && qty.length() > 0 && !requireSucess) { +// this.execute_log.log("设备:" + device_code + ",material:" + material + ",qty:" + qty); +// this.instruction_require(container); +// } +// //申请指令 +// if (hasGoods > 0 && operation_type == 2 && !applySucess) { +// instruction_apply(); +// } //申请任务 - if (!StrUtil.isEmpty(material) && !StrUtil.isEmpty(qty) && material.length() > 0 && qty.length() > 0 && !requireSucess) { - this.execute_log.log("设备:" + device_code + ",material:" + material + ",qty:" + qty); - this.instruction_require(container); + if (hasGoods > 0 && error == 0 && !StrUtil.isEmpty(container) && height > 0 && !requireSucess) { + instruction_require(container); } - //申请指令 - if (hasGoods > 0 && operation_type == 2 && !applySucess) { - instruction_apply(); + if (hasGoods > 0 && error == 0 && !StrUtil.isEmpty(container) && height > 0 && !applySucess) { + instruction_apply(container); } break; case 3: @@ -240,10 +257,10 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver } break; case 6: - //申请入库 - if (move != 0 && !applySucess) { - instruction_apply(); - } +// //申请入库 +// if (move != 0 && !applySucess) { +// instruction_apply(); +// } if (move != 0 && !requireSucess) { apply_InEmpty(); } @@ -268,6 +285,7 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver last_error = error; last_move = move; last_task = task; + last_height = height; } public boolean exe_error() { @@ -389,26 +407,122 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver } - public boolean instruction_apply() throws Exception { - Date date = new Date(); - if (date.getTime() - this.instruction_apply_time.getTime() < (long) this.instruction_require_time_out) { - log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); - return false; - } else { - this.instruction_apply_time = date; - //container_code - List taskList = taskserver.queryTaskByDeviceCode(this.device_code); - // - if (!ObjectUtil.isEmpty(taskList)) { - TaskDto task = taskList.get(0); - String taskid = task.getTask_id(); - String taskcode = task.getTask_code(); - String vehiclecode = task.getVehicle_code(); - String priority = task.getPriority(); - String start_point_code = task.getStart_point_code(); - String start_device_code = task.getStart_device_code(); - String route_plan_code = task.getRoute_plan_code(); +// public boolean instruction_apply() throws Exception { +// Date date = new Date(); +// if (date.getTime() - this.instruction_apply_time.getTime() < (long) this.instruction_require_time_out) { +// log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); +// return false; +// } else { +// this.instruction_apply_time = date; +// //container_code +// List taskList = taskserver.queryTaskByDeviceCode(this.device_code); +// // +// if (!ObjectUtil.isEmpty(taskList)) { +// TaskDto task = taskList.get(0); +// String taskid = task.getTask_id(); +// String taskcode = task.getTask_code(); +// String vehiclecode = task.getVehicle_code(); +// String priority = task.getPriority(); +// String start_point_code = task.getStart_point_code(); +// String start_device_code = task.getStart_device_code(); +// String route_plan_code = task.getRoute_plan_code(); +// +// List shortPathsList = routeLineService.getShortPathLines(start_device_code, task.getNext_device_code(), route_plan_code); +// RouteLineDto routeLineDto = shortPathsList.get(0); +// +// String path = routeLineDto.getPath(); +// String type = routeLineDto.getType(); +// String[] str = path.split("->"); +// if (!StrUtil.equals(type, "0")) { +// return false; +// } +// List pathlist = Arrays.asList(str); +// int index = 0; +// for (int m = 0; m < pathlist.size(); m++) { +// if (pathlist.get(m).equals(start_device_code)) { +// index = m + 1; +// break; +// } +// } +// String next_device_code = pathlist.get(index); +// Device startdevice = deviceAppservice.findDeviceByCode(start_device_code); +// Device nextdevice = deviceAppservice.findDeviceByCode(next_device_code); +// String next_point_code; +// if (StrUtil.equals(deviceAppservice.findDeviceTypeByCode(next_device_code), "storage")) { +// next_point_code = task.getTo_x() + "-" + task.getTo_y() + "-" + task.getTo_z(); +// } else { +// next_point_code = next_device_code; +// } +// Instruction instdto = new Instruction(); +// instdto.setInstruction_id(IdUtil.simpleUUID()); +// instdto.setRoute_plan_code(route_plan_code); +// instdto.setRemark(task.getRemark()); +// instdto.setMaterial(task.getMaterial()); +// instdto.setQuantity(task.getQuantity()); +// instdto.setTask_id(taskid); +// instdto.setTask_code(taskcode); +// instdto.setVehicle_code(vehiclecode); +// String now = DateUtil.now(); +// instdto.setCreate_time(now); +// instdto.setCreate_by("auto"); +// instdto.setStart_device_code(start_device_code); +// instdto.setNext_device_code(next_device_code); +// instdto.setStart_point_code(start_point_code); +// instdto.setNext_point_code(next_point_code); +// instdto.setPriority(priority); +// instdto.setInstruction_status("0"); +// instdto.setExecute_device_code(start_point_code); +// try { +// instructionService.create(instdto); +// } catch (Exception e) { +// task.setRemark("指令创建失败:" + e); +// taskserver.updateByCodeFromCache(task); +// throw new RuntimeException("指令创建失败:" + e); +// } +// //创建指令后修改任务状态 +// WQLObject taskwo = WQLObject.getWQLObject("acs_task"); +// task.setTask_status("1"); +// JSONObject json = JSONObject.fromObject(task); +// taskwo.update(json); +// applySucess = true; +// } else { +// +// } +// } +// return true; +// } +public synchronized boolean instruction_apply(String container_code) throws Exception { + Date date = new Date(); + if (date.getTime() - this.instruction_apply_time.getTime() < (long) this.instruction_require_time_out) { + log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); + return false; + } else { + this.instruction_apply_time = date; + //container_code + TaskDto task = taskserver.findByContainer(container_code); + Instruction inst = instructionService.findByDeviceCodeFromCache(container_code); + if(!ObjectUtil.isEmpty(inst) && StrUtil.equals(inst.getInstruction_status(),"0")){ + this.setInst(inst); + writing(); + applySucess = true; + this.setContainer(""); + return true; + } + if (!ObjectUtil.isEmpty(task)) { + String taskid = task.getTask_id(); + String taskcode = task.getTask_code(); + String vehiclecode = task.getVehicle_code(); + String priority = task.getPriority(); + String start_point_code = task.getStart_point_code(); + String start_device_code = task.getStart_device_code(); + String route_plan_code = task.getRoute_plan_code(); + String next_device_code = ""; + /** + * 开始平均分配 + */ + String this_device_code = taskserver.queryAssignedByDevice(device_code, task.getNext_device_code()); + if (StrUtil.isEmpty(this_device_code)) { List shortPathsList = routeLineService.getShortPathLines(start_device_code, task.getNext_device_code(), route_plan_code); RouteLineDto routeLineDto = shortPathsList.get(0); @@ -426,15 +540,145 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver break; } } - String next_device_code = pathlist.get(index); - Device startdevice = deviceAppservice.findDeviceByCode(start_device_code); - Device nextdevice = deviceAppservice.findDeviceByCode(next_device_code); - String next_point_code; - if (StrUtil.equals(deviceAppservice.findDeviceTypeByCode(next_device_code), "storage")) { - next_point_code = task.getTo_x() + "-" + task.getTo_y() + "-" + task.getTo_z(); - } else { - next_point_code = next_device_code; + next_device_code = pathlist.get(index); + } else { + next_device_code = this_device_code; + } + //校验路由关系 + List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); + if (ObjectUtils.isEmpty(shortPathsList)) { + throw new RuntimeException("路由不通!"); + } + + Device startdevice = deviceAppservice.findDeviceByCode(start_device_code); + Device nextdevice = deviceAppservice.findDeviceByCode(next_device_code); + String next_point_code; + if (StrUtil.equals(deviceAppservice.findDeviceTypeByCode(next_device_code), "storage")) { + next_point_code = task.getTo_x() + "-" + task.getTo_y() + "-" + task.getTo_z(); + } else { + next_point_code = next_device_code; + } + + Device deviceByCode = deviceAppservice.findDeviceByCode(task.getStart_device_code()); + StandardCoveyorControlWithScannerDeviceDriver standardCoveyorControlWithScannerDeviceDriver; + if (deviceByCode.getDeviceDriver() instanceof StandardCoveyorControlWithScannerDeviceDriver) { + standardCoveyorControlWithScannerDeviceDriver = (StandardCoveyorControlWithScannerDeviceDriver) deviceByCode.getDeviceDriver(); + createLock = standardCoveyorControlWithScannerDeviceDriver.getCreateLock(); + } + if (!createLock) { + //几台入库模式的agv 就能生成几个agv_type =3 的指令 + //指令类型为3的指令数 + List insts = instructionService.queryAgvInstByThree(); + Integer agvQty = deviceservice.queryAgvQty(); + List deviceByType = deviceAppservice.findDevice(DeviceType.agv); + if (insts.size() < agvQty) { + String carno = ""; + Boolean flag = false; + for (int j = 0; j < deviceByType.size(); j++) { + Device device = deviceByType.get(j); + JMAgvDeviceDriver jmAgvDeviceDriver; + if (device.getDeviceDriver() instanceof JMAgvDeviceDriver) { + jmAgvDeviceDriver = (JMAgvDeviceDriver) device.getDeviceDriver(); + String agvTaskType = jmAgvDeviceDriver.getAgvTaskType(); + List instructions = instructionService.findAllInstFromCache(); + if (instructions.size() == 0) { + if (agvTaskType.equals("0") || agvTaskType.equals("1")) { + carno = device.getDevice_code(); + flag = true; + break; + } + } + for (int z = 0; z < instructions.size(); z++) { + Instruction instruction = instructions.get(z); + if (ObjectUtil.isNotEmpty(instruction.getCarno()) + && instruction.getCarno().equals(device.getDevice_code())) { + break; + } else if (z == instructions.size() - 1 && (agvTaskType.equals("0") || agvTaskType.equals("1"))) { + carno = device.getDevice_code(); + flag = true; + break; + } + } + if (flag) { + break; + } + } + } + if (flag) { + Instruction instdto = new Instruction(); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(task.getRemark()); + instdto.setMaterial(task.getMaterial()); + instdto.setQuantity(task.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instructionService.create(instdto); + + Instruction instdto2 = new Instruction(); + instdto2.setInstruction_id(IdUtil.simpleUUID()); + instdto2.setRoute_plan_code(route_plan_code); + instdto2.setRemark(task.getRemark()); + instdto2.setMaterial(task.getMaterial()); + instdto2.setQuantity(task.getQuantity()); + instdto2.setTask_id(taskid); + instdto2.setTask_code(taskcode); + instdto2.setVehicle_code(vehiclecode); + instdto2.setCreate_time(now); + instdto2.setCreate_by("auto"); + instdto2.setStart_device_code(next_device_code); + instdto2.setNext_device_code(task.getNext_device_code()); + instdto2.setStart_point_code(next_point_code); + instdto2.setNext_point_code(task.getNext_point_code()); + instdto2.setPriority(priority); + instdto2.setInstruction_status("0"); + instdto2.setExecute_device_code(start_point_code); + instdto2.setCarno(carno); + instructionService.createSecond(instdto2); + } else { + Instruction instdto = new Instruction(); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(task.getRemark()); + instdto.setMaterial(task.getMaterial()); + instdto.setQuantity(task.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instructionService.create(instdto); + + //创建指令后修改任务状态 + WQLObject taskwo = WQLObject.getWQLObject("acs_task"); + task.setTask_status("1"); + JSONObject json = JSONObject.fromObject(task); + taskwo.update(json); + applySucess = true; + this.setContainer(""); + return true; + } } + } else { Instruction instdto = new Instruction(); instdto.setInstruction_id(IdUtil.simpleUUID()); instdto.setRoute_plan_code(route_plan_code); @@ -454,27 +698,55 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver instdto.setPriority(priority); instdto.setInstruction_status("0"); instdto.setExecute_device_code(start_point_code); - try { - instructionService.create(instdto); - } catch (Exception e) { - task.setRemark("指令创建失败:" + e); - taskserver.updateByCodeFromCache(task); - throw new RuntimeException("指令创建失败:" + e); - } + instructionService.create(instdto); + //创建指令后修改任务状态 WQLObject taskwo = WQLObject.getWQLObject("acs_task"); task.setTask_status("1"); JSONObject json = JSONObject.fromObject(task); taskwo.update(json); applySucess = true; - } else { - + this.setContainer(""); + return true; } + + //创建指令后修改任务状态 + WQLObject taskwo = WQLObject.getWQLObject("acs_task"); + task.setTask_status("1"); + JSONObject json = JSONObject.fromObject(task); + taskwo.update(json); + applySucess = true; + this.setContainer(""); + } else { + log.info("未找到载具号{}对应任务", container); } - return true; + } + return true; +} + + public void writing() { + + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + org.nl.acs.device_driver.standard_conveyor_control_with_scanner.ItemProtocol.item_to_command; + String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + org.nl.acs.device_driver.standard_conveyor_control_with_scanner.ItemProtocol.item_to_target; + String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + org.nl.acs.device_driver.standard_conveyor_control_with_scanner.ItemProtocol.item_to_task; + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, 1); + itemMap.put(to_target, deviceAppservice.findDeviceByCode(inst.getNext_device_code()).getAddress()); + itemMap.put(to_task, inst.getInstruction_code()); + this.execute_log.setResource(this.device_code, device_code); + this.execute_log.log("设备:" + device_code + ",下发PLC信号" + to_command + ",value:" + 1); + this.execute_log.log("设备:" + device_code + ",下发PLC信号" + to_target + ",value:" + deviceAppservice.findDeviceByCode(inst.getNext_device_code()).getAddress()); + this.execute_log.log("设备:" + device_code + ",下发PLC信号" + to_task + ",value:" + inst.getInstruction_code()); + + ReadUtil.write(itemMap, server); } - public boolean instruction_require(String container_code) { + public boolean instruction_require(String container_code) throws Exception { return instruction_require(container_code, WcsConfig.task_container_type_default_desc); } @@ -484,39 +756,291 @@ public class StandardCoveyorControlDeviceDriver extends AbstractOpcDeviceDriver * @param container_code * @param container_type */ - public synchronized boolean instruction_require(String container_code, String container_type) { +// public synchronized boolean instruction_require(String container_code, String container_type) { +// 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; +// TaskDto dto = new TaskDto(); +// String now = DateUtil.now(); +// dto.setTask_id(IdUtil.simpleUUID()); +// dto.setCreate_by(this.getDevice().getDevice_code()); +// dto.setUpdate_by(this.getDevice().getDevice_code()); +// dto.setStart_point_code(this.getDevice().getDevice_code()); +// dto.setVehicle_code(container_code); +// dto.setVehicle_type(container_type); +// +// String taskcode = CodeUtil.getNewCode("TASK_NO"); +// dto.setTask_code("-" + taskcode); +// dto.setTask_status("0"); +// dto.setPriority("101"); +// RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); +// String next_device_codecode = jo.getNext_device_code(); +// if (StrUtil.isEmpty(next_device_codecode)) { +// throw new RuntimeException("该设备未找到对应路由"); +// } +// dto.setNext_point_code(next_device_codecode); +// dto.setUpdate_time(now); +// dto.setCreate_time(now); +// +// WQLObject wo = WQLObject.getWQLObject("acs_task"); +// JSONObject json = JSONObject.fromObject(dto); +// wo.insert(json); +// requireSucess = false; +// return true; +// } +// } + + /** + * 请求指令 + * + * @param container_code + * @param container_type + */ + public synchronized boolean instruction_require(String container_code, String container_type) throws Exception { 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; - TaskDto dto = new TaskDto(); - String now = DateUtil.now(); - dto.setTask_id(IdUtil.simpleUUID()); - dto.setCreate_by(this.getDevice().getDevice_code()); - dto.setUpdate_by(this.getDevice().getDevice_code()); - dto.setStart_point_code(this.getDevice().getDevice_code()); - dto.setVehicle_code(container_code); - dto.setVehicle_type(container_type); - - String taskcode = CodeUtil.getNewCode("TASK_NO"); - dto.setTask_code("-" + taskcode); - dto.setTask_status("0"); - dto.setPriority("101"); - RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); - String next_device_codecode = jo.getNext_device_code(); - if (StrUtil.isEmpty(next_device_codecode)) { - throw new RuntimeException("该设备未找到对应路由"); + //container_code + TaskDto task = taskserver.findByContainer(container_code); + Instruction inst = instructionService.findByDeviceCodeByContainerCode(container_code); + if (!ObjectUtil.isEmpty(inst) && StrUtil.equals(inst.getInstruction_status(), "0")) { + this.setInst(inst); + writing(); + requireSucess = true; + applySucess = true; + this.setContainer(""); + return true; } - dto.setNext_point_code(next_device_codecode); - dto.setUpdate_time(now); - dto.setCreate_time(now); + if (!ObjectUtil.isEmpty(task) && ObjectUtil.isEmpty(inst)) { - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONObject json = JSONObject.fromObject(dto); - wo.insert(json); - requireSucess = false; + String taskid = task.getTask_id(); + String taskcode = task.getTask_code(); + String vehiclecode = task.getVehicle_code(); + String priority = task.getPriority(); + String start_point_code = this.device_code; + String start_device_code = this.device_code; + String route_plan_code = task.getRoute_plan_code(); + String next_device_code = ""; + + /** + * 开始平均分配 + */ + String this_device_code = taskserver.queryAssignedByDevice(device_code, task.getNext_device_code()); + if (StrUtil.isEmpty(this_device_code)) { + List shortPathsList = routeLineService.getShortPathLines(start_device_code, task.getNext_device_code(), route_plan_code); + RouteLineDto routeLineDto = shortPathsList.get(0); + + String path = routeLineDto.getPath(); + String type = routeLineDto.getType(); + String[] str = path.split("->"); + if (!StrUtil.equals(type, "0")) { + return false; + } + List pathlist = Arrays.asList(str); + int index = 0; + for (int m = 0; m < pathlist.size(); m++) { + if (pathlist.get(m).equals(start_device_code)) { + index = m + 1; + break; + } + } + next_device_code = pathlist.get(index); + } else { + next_device_code = this_device_code; + } + //校验路由关系 + List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); + if (ObjectUtils.isEmpty(shortPathsList)) { + throw new RuntimeException("路由不通!"); + } + + Device startdevice = deviceAppservice.findDeviceByCode(start_device_code); + Device nextdevice = deviceAppservice.findDeviceByCode(next_device_code); + String next_point_code; + if (StrUtil.equals(deviceAppservice.findDeviceTypeByCode(next_device_code), "storage")) { + next_point_code = task.getTo_x() + "-" + task.getTo_y() + "-" + task.getTo_z(); + } else { + next_point_code = next_device_code; + } + + //如果未锁定,就正常创建(如果锁定,就只创建输送指令) + if (!createLock) { + List insts = instructionService.queryAgvInstByThree(); + Integer agvQty = deviceservice.queryAgvQty(); + List deviceByType = deviceAppservice.findDevice(DeviceType.agv); + if (insts.size() < agvQty) { + String carno = ""; + Boolean flag = false; + for (int j = 0; j < deviceByType.size(); j++) { + Device device = deviceByType.get(j); + JMAgvDeviceDriver jmAgvDeviceDriver; + if (device.getDeviceDriver() instanceof JMAgvDeviceDriver) { + jmAgvDeviceDriver = (JMAgvDeviceDriver) device.getDeviceDriver(); + String agvTaskType = jmAgvDeviceDriver.getAgvTaskType(); + List instructions = instructionService.findAllInstFromCache(); + if (instructions.size() == 0) { + if (agvTaskType.equals("0") || agvTaskType.equals("1")) { + carno = device.getDevice_code(); + flag = true; + break; + } + } + for (int z = 0; z < instructions.size(); z++) { + Instruction instruction = instructions.get(z); + if (ObjectUtil.isNotEmpty(instruction.getCarno()) + && instruction.getCarno().equals(device.getDevice_code())) { + break; + } else if (z == instructions.size() - 1 && (agvTaskType.equals("0") || agvTaskType.equals("1"))) { + carno = device.getDevice_code(); + flag = true; + break; + } + } + if (flag) { + break; + } + } + } + if (flag) { + Instruction instdto = new Instruction(); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(task.getRemark()); + instdto.setMaterial(task.getMaterial()); + instdto.setQuantity(task.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instructionService.create(instdto); + + Instruction instdto2 = new Instruction(); + instdto2.setInstruction_id(IdUtil.simpleUUID()); + instdto2.setRoute_plan_code(route_plan_code); + instdto2.setRemark(task.getRemark()); + instdto2.setMaterial(task.getMaterial()); + instdto2.setQuantity(task.getQuantity()); + instdto2.setTask_id(taskid); + instdto2.setTask_code(taskcode); + instdto2.setVehicle_code(vehiclecode); + instdto2.setCreate_time(now); + instdto2.setCreate_by("auto"); + instdto2.setStart_device_code(next_device_code); + instdto2.setNext_device_code(task.getNext_device_code()); + instdto2.setStart_point_code(next_point_code); + instdto2.setNext_point_code(task.getNext_point_code()); + instdto2.setPriority(priority); + instdto2.setInstruction_status("0"); + instdto2.setExecute_device_code(start_point_code); + instdto2.setCarno(carno); + instructionService.createSecond(instdto2); + } else { + Instruction instdto = new Instruction(); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(task.getRemark()); + instdto.setMaterial(task.getMaterial()); + instdto.setQuantity(task.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instructionService.create(instdto); + + //创建指令后修改任务状态 + WQLObject taskwo = WQLObject.getWQLObject("acs_task"); + task.setTask_status("1"); + JSONObject json = JSONObject.fromObject(task); + taskwo.update(json); + requireSucess = true; + applySucess = true; + this.setContainer(""); + return true; + } + } + } else { + Instruction instdto = new Instruction(); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(task.getRemark()); + instdto.setMaterial(task.getMaterial()); + instdto.setQuantity(task.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instructionService.create(instdto); + + //创建指令后修改任务状态 + WQLObject taskwo = WQLObject.getWQLObject("acs_task"); + task.setTask_status("1"); + JSONObject json = JSONObject.fromObject(task); + taskwo.update(json); + requireSucess = true; + applySucess = true; + this.setContainer(""); + return true; + } + + //创建指令后修改任务状态 + WQLObject taskwo = WQLObject.getWQLObject("acs_task"); + task.setTask_status("1"); + JSONObject json = JSONObject.fromObject(task); + taskwo.update(json); + requireSucess = true; + applySucess = true; + this.setContainer(""); + } else { + if (StrUtil.equals(acsConfigService.findConfigFromCache().get(AcsConfig.HASWMS).toString(), "1")) { + message = "申请任务中..."; + String str = acsToWmsService.applyTaskToWms(this.getDeviceCode(), container_code, height, 0); + JSONObject jo = JSONObject.fromObject(str); + if (ObjectUtil.isEmpty(jo)) { + message = "接口不通"; + } else { + if (jo.getInt("status") == 200) { + requireSucess = true; + } else { + requireSucess = false; + message = jo.get("message").toString(); + } + } + + } + } return true; } } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control_with_scanner/StandardCoveyorControlWithScannerDeviceDriver.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control_with_scanner/StandardCoveyorControlWithScannerDeviceDriver.java index ec344fa..625cced 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control_with_scanner/StandardCoveyorControlWithScannerDeviceDriver.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_conveyor_control_with_scanner/StandardCoveyorControlWithScannerDeviceDriver.java @@ -70,8 +70,12 @@ public class StandardCoveyorControlWithScannerDeviceDriver extends AbstractOpcDe String container_type_desc; String last_container_type_desc; String last_container; + //指令创建锁 Boolean createLock = false; + //输送锁 + Boolean conveyLock = false; + //有货标记 protected boolean has_goods_tag = false; @@ -257,6 +261,15 @@ public class StandardCoveyorControlWithScannerDeviceDriver extends AbstractOpcDe createLock = false; } + //如果输送线无指令,则输送线解锁(输送线锁定状态时,1005与1008生成指令比例为1:1,反之则为1:3) + if (instructionService.queryConveyorInstByThree().size() == 0) { + conveyLock = false; + } + //如果输送线指令数量大于4,则输送线锁定 + if (instructionService.queryConveyorInstByThree().size() >= 4) { + conveyLock = true; + } + if (getBarcode() != null) { } @@ -536,152 +549,26 @@ public class StandardCoveyorControlWithScannerDeviceDriver extends AbstractOpcDe next_point_code = next_device_code; } - if (!createLock) { - //几台入库模式的agv 就能生成几个agv_type =3 的指令 - //指令类型为3的指令数 - List insts = instructionService.queryAgvInstByThree(); - Integer agvQty = deviceservice.queryAgvQty(); - List deviceByType = deviceAppservice.findDevice(DeviceType.agv); - if (insts.size() < agvQty) { - String carno = ""; - Boolean flag = false; - for (int j = 0; j < deviceByType.size(); j++) { - Device device = deviceByType.get(j); - JMAgvDeviceDriver jmAgvDeviceDriver; - if (device.getDeviceDriver() instanceof JMAgvDeviceDriver) { - jmAgvDeviceDriver = (JMAgvDeviceDriver) device.getDeviceDriver(); - String agvTaskType = jmAgvDeviceDriver.getAgvTaskType(); - List instructions = instructionService.findAllInstFromCache(); - if (instructions.size() == 0) { - if (agvTaskType.equals("0") || agvTaskType.equals("1")) { - carno = device.getDevice_code(); - flag = true; - break; - } - } - for (int z = 0; z < instructions.size(); z++) { - Instruction instruction = instructions.get(z); - if (ObjectUtil.isNotEmpty(instruction.getCarno()) - && instruction.getCarno().equals(device.getDevice_code())) { - break; - } else if (z == instructions.size() - 1 && (agvTaskType.equals("0") || agvTaskType.equals("1"))) { - carno = device.getDevice_code(); - flag = true; - break; - } - } - if (flag) { - break; - } - } - } - if (flag) { - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(task.getRemark()); - instdto.setMaterial(task.getMaterial()); - instdto.setQuantity(task.getQuantity()); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setVehicle_code(vehiclecode); - String now = DateUtil.now(); - instdto.setCreate_time(now); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(start_point_code); - instructionService.create(instdto); - - Instruction instdto2 = new Instruction(); - instdto2.setInstruction_id(IdUtil.simpleUUID()); - instdto2.setRoute_plan_code(route_plan_code); - instdto2.setRemark(task.getRemark()); - instdto2.setMaterial(task.getMaterial()); - instdto2.setQuantity(task.getQuantity()); - instdto2.setTask_id(taskid); - instdto2.setTask_code(taskcode); - instdto2.setVehicle_code(vehiclecode); - instdto2.setCreate_time(now); - instdto2.setCreate_by("auto"); - instdto2.setStart_device_code(next_device_code); - instdto2.setNext_device_code(task.getNext_device_code()); - instdto2.setStart_point_code(next_point_code); - instdto2.setNext_point_code(task.getNext_point_code()); - instdto2.setPriority(priority); - instdto2.setInstruction_status("0"); - instdto2.setExecute_device_code(start_point_code); - instdto2.setCarno(carno); - instructionService.createSecond(instdto2); - } else { - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(task.getRemark()); - instdto.setMaterial(task.getMaterial()); - instdto.setQuantity(task.getQuantity()); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setVehicle_code(vehiclecode); - String now = DateUtil.now(); - instdto.setCreate_time(now); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(start_point_code); - instructionService.create(instdto); - - //创建指令后修改任务状态 - WQLObject taskwo = WQLObject.getWQLObject("acs_task"); - task.setTask_status("1"); - JSONObject json = JSONObject.fromObject(task); - taskwo.update(json); - applySucess = true; - clearBarcode(); - - return true; - } - } - } else { - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(task.getRemark()); - instdto.setMaterial(task.getMaterial()); - instdto.setQuantity(task.getQuantity()); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setVehicle_code(vehiclecode); - String now = DateUtil.now(); - instdto.setCreate_time(now); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(start_point_code); - instructionService.create(instdto); - - //创建指令后修改任务状态 - WQLObject taskwo = WQLObject.getWQLObject("acs_task"); - task.setTask_status("1"); - JSONObject json = JSONObject.fromObject(task); - taskwo.update(json); - applySucess = true; - clearBarcode(); - - return true; - } + Instruction instdto = new Instruction(); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(task.getRemark()); + instdto.setMaterial(task.getMaterial()); + instdto.setQuantity(task.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instructionService.create(instdto); //创建指令后修改任务状态 WQLObject taskwo = WQLObject.getWQLObject("acs_task"); @@ -735,8 +622,8 @@ public class StandardCoveyorControlWithScannerDeviceDriver extends AbstractOpcDe /** * 开始平均分配 */ - String this_coevice_code = taskserver.queryAssignedByDevice(device_code, task.getNext_device_code()); - if (StrUtil.isEmpty(this_coevice_code)) { + String this_device_code = taskserver.queryAssignedByDevice(device_code, task.getNext_device_code()); + if (StrUtil.isEmpty(this_device_code)) { List shortPathsList = routeLineService.getShortPathLines(start_device_code, task.getNext_device_code(), route_plan_code); RouteLineDto routeLineDto = shortPathsList.get(0); @@ -756,7 +643,7 @@ public class StandardCoveyorControlWithScannerDeviceDriver extends AbstractOpcDe } next_device_code = pathlist.get(index); } else { - next_device_code = this_coevice_code; + next_device_code = this_device_code; } //校验路由关系 List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); @@ -773,153 +660,26 @@ public class StandardCoveyorControlWithScannerDeviceDriver extends AbstractOpcDe next_point_code = next_device_code; } - //如果未锁定,就正常创建(如果锁定,就只创建输送指令) - if (!createLock) { - List insts = instructionService.queryAgvInstByThree(); - Integer agvQty = deviceservice.queryAgvQty(); - List deviceByType = deviceAppservice.findDevice(DeviceType.agv); - if (insts.size() < agvQty) { - String carno = ""; - Boolean flag = false; - for (int j = 0; j < deviceByType.size(); j++) { - Device device = deviceByType.get(j); - JMAgvDeviceDriver jmAgvDeviceDriver; - if (device.getDeviceDriver() instanceof JMAgvDeviceDriver) { - jmAgvDeviceDriver = (JMAgvDeviceDriver) device.getDeviceDriver(); - String agvTaskType = jmAgvDeviceDriver.getAgvTaskType(); - List instructions = instructionService.findAllInstFromCache(); - if (instructions.size() == 0) { - if (agvTaskType.equals("0") || agvTaskType.equals("1")) { - carno = device.getDevice_code(); - flag = true; - break; - } - } - for (int z = 0; z < instructions.size(); z++) { - Instruction instruction = instructions.get(z); - if (ObjectUtil.isNotEmpty(instruction.getCarno()) - && instruction.getCarno().equals(device.getDevice_code())) { - break; - } else if (z == instructions.size() - 1 && (agvTaskType.equals("0") || agvTaskType.equals("1"))) { - carno = device.getDevice_code(); - flag = true; - break; - } - } - if (flag) { - break; - } - } - } - if (flag) { - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(task.getRemark()); - instdto.setMaterial(task.getMaterial()); - instdto.setQuantity(task.getQuantity()); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setVehicle_code(vehiclecode); - String now = DateUtil.now(); - instdto.setCreate_time(now); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(start_point_code); - instructionService.create(instdto); - - Instruction instdto2 = new Instruction(); - instdto2.setInstruction_id(IdUtil.simpleUUID()); - instdto2.setRoute_plan_code(route_plan_code); - instdto2.setRemark(task.getRemark()); - instdto2.setMaterial(task.getMaterial()); - instdto2.setQuantity(task.getQuantity()); - instdto2.setTask_id(taskid); - instdto2.setTask_code(taskcode); - instdto2.setVehicle_code(vehiclecode); - instdto2.setCreate_time(now); - instdto2.setCreate_by("auto"); - instdto2.setStart_device_code(next_device_code); - instdto2.setNext_device_code(task.getNext_device_code()); - instdto2.setStart_point_code(next_point_code); - instdto2.setNext_point_code(task.getNext_point_code()); - instdto2.setPriority(priority); - instdto2.setInstruction_status("0"); - instdto2.setExecute_device_code(start_point_code); - instdto2.setCarno(carno); - instructionService.createSecond(instdto2); - } else { - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(task.getRemark()); - instdto.setMaterial(task.getMaterial()); - instdto.setQuantity(task.getQuantity()); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setVehicle_code(vehiclecode); - String now = DateUtil.now(); - instdto.setCreate_time(now); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(start_point_code); - instructionService.create(instdto); - - //创建指令后修改任务状态 - WQLObject taskwo = WQLObject.getWQLObject("acs_task"); - task.setTask_status("1"); - JSONObject json = JSONObject.fromObject(task); - taskwo.update(json); - requireSucess = true; - applySucess = true; - clearBarcode(); - - return true; - } - } - } else { - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(task.getRemark()); - instdto.setMaterial(task.getMaterial()); - instdto.setQuantity(task.getQuantity()); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setVehicle_code(vehiclecode); - String now = DateUtil.now(); - instdto.setCreate_time(now); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(start_point_code); - instructionService.create(instdto); - - //创建指令后修改任务状态 - WQLObject taskwo = WQLObject.getWQLObject("acs_task"); - task.setTask_status("1"); - JSONObject json = JSONObject.fromObject(task); - taskwo.update(json); - requireSucess = true; - applySucess = true; - clearBarcode(); - - return true; - } + Instruction instdto = new Instruction(); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(task.getRemark()); + instdto.setMaterial(task.getMaterial()); + instdto.setQuantity(task.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instructionService.create(instdto); //创建指令后修改任务状态 WQLObject taskwo = WQLObject.getWQLObject("acs_task"); diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 56ef99c..c227ee0 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -226,7 +226,7 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu @Override public List queryConveyorInstByThree() { WQLObject wo = WQLObject.getWQLObject("acs_instruction"); - JSONArray arr = wo.query("agv_type = 3 and is_delete = 0 and instruction_status <2").getResultJSONArray(0); + JSONArray arr = wo.query("is_delete = 0 and instruction_status <2").getResultJSONArray(0); List list = JSONArray.toList(arr, Instruction.class); List list1 = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { @@ -920,10 +920,24 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu JSONObject taskjson = taskwo.query("task_id ='" + insttaskid + "'").uniqueResult(0); TaskDto obj = (TaskDto) JSONObject.toBean(taskjson, TaskDto.class); + String vehicle_code = entity.getVehicle_code(); + //如果下一条指令已存在,则不需要再次创建 if (ObjectUtils.isNotEmpty(this.findByStartCodeNextCodeJM(instnextdevice,obj.getNext_point_code()))) { obj.setRequest_again("1"); } + + StandardCoveyorControlWithScannerDeviceDriver scannerDeviceDriver; + Device deviceByCode = deviceAppService.findDeviceByCode(entity.getStart_device_code()); + if (deviceByCode.getDeviceDriver() instanceof StandardCoveyorControlWithScannerDeviceDriver) { + scannerDeviceDriver = (StandardCoveyorControlWithScannerDeviceDriver) deviceByCode.getDeviceDriver(); + String apply_task = scannerDeviceDriver.getDevice().getExtraValue().get("apply_task").toString(); + //如果此站点为1002,并且指令创建锁是打开的话,则不需要再次创建 + if (ObjectUtil.isNotEmpty(apply_task) && apply_task.equals("true") + && !scannerDeviceDriver.getCreateLock()) { + obj.setRequest_again("1"); + } + } //如果为输送指令 int car_num = 0; // JMAgvDeviceDriver jmAgvDeviceDriver; @@ -973,6 +987,17 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu entity.setInstruction_status("2"); JSONObject json = JSONObject.fromObject(entity); wo.update(json); + + //将指令条码写入终点设备中去 + if (ObjectUtil.isNotEmpty(vehicle_code)) { + StandardCoveyorControlDeviceDriver standardCoveyorControlDeviceDriver; + Device nextDevice = deviceAppService.findDeviceByCode(entity.getNext_device_code()); + if (nextDevice.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) nextDevice.getDeviceDriver(); + standardCoveyorControlDeviceDriver.setContainer(vehicle_code); + } + } + LampThreecolorDeviceDriver lampThreecolorDeviceDriver; //变更三色灯状态 if (!ObjectUtils.isEmpty(device.getExtraValue().get("link_three_lamp"))) { @@ -1049,6 +1074,19 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu if (ObjectUtils.isNotEmpty(this.findByStartCodeNextCodeJM(instnextdevice,obj.getNext_point_code()))) { obj.setRequest_again("1"); } + + StandardCoveyorControlWithScannerDeviceDriver scannerDeviceDriver; + Device deviceByCode = deviceAppService.findDeviceByCode(entity.getStart_device_code()); + if (deviceByCode.getDeviceDriver() instanceof StandardCoveyorControlWithScannerDeviceDriver) { + scannerDeviceDriver = (StandardCoveyorControlWithScannerDeviceDriver) deviceByCode.getDeviceDriver(); + String apply_task = scannerDeviceDriver.getDevice().getExtraValue().get("apply_task").toString(); + //如果此站点为1002,并且指令创建锁是打开的话,则不需要再次创建 + if (ObjectUtil.isNotEmpty(apply_task) && apply_task.equals("true") + && !scannerDeviceDriver.getCreateLock()) { + obj.setRequest_again("1"); + } + } + // =0 则不用再次请求 if (StrUtil.equals(obj.getRequest_again(), "0")) { if (StrUtil.equals(obj.getNext_device_code(), instnextdevice)) { @@ -1062,6 +1100,16 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu } entity.setInstruction_status("2"); wo.update(json); + + //将指令条码写入终点设备中去 + if (ObjectUtil.isNotEmpty(entity.getVehicle_code())) { + StandardCoveyorControlDeviceDriver standardCoveyorControlDeviceDriver; + Device nextDevice = deviceAppService.findDeviceByCode(entity.getNext_device_code()); + if (nextDevice.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) nextDevice.getDeviceDriver(); + standardCoveyorControlDeviceDriver.setContainer(entity.getVehicle_code()); + } + } LampThreecolorDeviceDriver lampThreecolorDeviceDriver; //变更三色灯状态 if (!ObjectUtils.isEmpty(device.getExtraValue().get("link_three_lamp"))) { @@ -1091,6 +1139,19 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu obj.setRequest_again("1"); } + StandardCoveyorControlWithScannerDeviceDriver scannerDeviceDriver; + Device deviceByCode = deviceAppService.findDeviceByCode(dto.getStart_device_code()); + if (deviceByCode.getDeviceDriver() instanceof StandardCoveyorControlWithScannerDeviceDriver) { + scannerDeviceDriver = (StandardCoveyorControlWithScannerDeviceDriver) deviceByCode.getDeviceDriver(); + String apply_task = scannerDeviceDriver.getDevice().getExtraValue().get("apply_task").toString(); + //如果此站点为1002,并且指令创建锁是打开的话,则不需要再次创建 + if (ObjectUtil.isNotEmpty(apply_task) && apply_task.equals("true") + && !scannerDeviceDriver.getCreateLock()) { + obj.setRequest_again("1"); + } + } + + WQLObject wo = WQLObject.getWQLObject("acs_instruction"); // =0 则不用再次请求 if (StrUtil.equals(obj.getRequest_again(), "0")) { @@ -1108,6 +1169,16 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu JSONObject json = JSONObject.fromObject(dto); wo.update(json); + //将指令条码写入终点设备中去 + if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { + StandardCoveyorControlDeviceDriver standardCoveyorControlDeviceDriver; + Device nextDevice = deviceAppService.findDeviceByCode(dto.getNext_device_code()); + if (nextDevice.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) nextDevice.getDeviceDriver(); + standardCoveyorControlDeviceDriver.setContainer(dto.getVehicle_code()); + } + } + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); Device device = appService.findDeviceByCode(instnextdevice); diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index a992073..8ce21e9 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -25,6 +25,8 @@ import org.nl.acs.device.service.impl.DeviceServiceImpl; import org.nl.acs.device_driver.driver.OpcDeviceDriver; import org.nl.acs.device_driver.ndxy_special.NdxySpecialDeviceDriver; import org.nl.acs.device_driver.special_ordinary_site.SpecialOrdinarySiteDeviceDriver; +import org.nl.acs.device_driver.standard_conveyor_control.StandardCoveyorControlDeviceDriver; +import org.nl.acs.device_driver.standard_conveyor_control_with_scanner.StandardCoveyorControlWithScannerDeviceDriver; import org.nl.acs.device_driver.standard_inspect_site.StandardInspectSiteDeviceDriver; import org.nl.acs.device_driver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; @@ -94,6 +96,8 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { DeviceAssignedService deviceAssignedService; @Autowired InstructionService instructionService; + @Autowired + DeviceService deviceService; @Override public void autoInitial() throws Exception { @@ -1213,6 +1217,33 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { if (num >= Integer.parseInt(limit)) { continue; } + + Boolean conveyLock = false; + Device deviceByCode = deviceAppService.findDeviceByCode(device_code); + StandardCoveyorControlWithScannerDeviceDriver scannerDeviceDriver; + if (deviceByCode.getDeviceDriver() instanceof StandardCoveyorControlWithScannerDeviceDriver) { + scannerDeviceDriver = (StandardCoveyorControlWithScannerDeviceDriver) deviceByCode.getDeviceDriver(); + conveyLock = scannerDeviceDriver.getConveyLock(); + } + + if (!conveyLock) { + //查询所有的关联设备 + List list1 = deviceService.queryLinkDeviceByCode(this_device_code); + int count = 0; + for (int z = 0; z < list1.size(); z++) { + String code = list1.get(i); + Device device = deviceAppService.findDeviceByCode(code); + StandardCoveyorControlDeviceDriver standardCoveyorControlDeviceDriver; + if (device.getDeviceDriver() instanceof StandardCoveyorControlDeviceDriver) { + standardCoveyorControlDeviceDriver = (StandardCoveyorControlDeviceDriver) device.getDeviceDriver(); + if (standardCoveyorControlDeviceDriver.getMove() != 0) count += 1; + } + } + if (count != 0) { + break; + } + } + if (j == 0) { flag1 = num; } diff --git a/acs/qd/src/views/acs/monitor/device/index.vue b/acs/qd/src/views/acs/monitor/device/index.vue index 62d2378..659bcf1 100644 --- a/acs/qd/src/views/acs/monitor/device/index.vue +++ b/acs/qd/src/views/acs/monitor/device/index.vue @@ -194,6 +194,7 @@ 全部执行 入库 出库 + 禁用