diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_inspect_site2/ItemProtocol.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_inspect_site2/ItemProtocol.java new file mode 100644 index 0000000..b7ce8cc --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_inspect_site2/ItemProtocol.java @@ -0,0 +1,120 @@ +package org.nl.acs.device_driver.standard_inspect_site2; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class ItemProtocol { + + public static String item_heartbeat = "heartbeat"; + public static String item_mode = "mode"; + public static String item_move = "move"; + public static String item_ioaction = "ioaction"; + public static String item_error = "error"; + public static String item_task = "task"; + public static String item_start = "start"; + public static String item_end = "end"; + public static String item_to_command = "to_command"; + public static String item_to_target = "to_target"; + public static String item_to_task = "to_task"; + + + private StandardInspectSite2DeviceDriver driver; + + public ItemProtocol(StandardInspectSite2DeviceDriver driver) { + this.driver = driver; + } + + public int getHeartbeat() { + return this.getOpcIntegerValue(item_heartbeat); + } + + public int getMode() { + return this.getOpcIntegerValue(item_mode); + } + + public int getMove() { + return this.getOpcIntegerValue(item_move); + } + + public int getIoaction() { + return this.getOpcIntegerValue(item_ioaction); + } + + public int getError() { + return this.getOpcIntegerValue(item_error); + } + + public int getTask() { + return this.getOpcIntegerValue(item_task); + } + + public int getStart() { + return this.getOpcIntegerValue(item_start); + } + + + public int getEnd() { + return this.getOpcIntegerValue(item_end); + } + + + public int getToCommand() { + return this.getOpcIntegerValue(item_to_command); + } + + public int getToTarget() { + return this.getOpcIntegerValue(item_to_target); + } + + public int getToTask() { + return this.getOpcIntegerValue(item_to_task); + } + + //是否有货 + public int hasGoods(int move) { + return move; + } + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegerValue(protocol); + if (value == null) { + //log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); + list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); + list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); + list.add(new ItemDto(item_start, "光电开关信号", "DB600.B3")); + list.add(new ItemDto(item_end, "光电开关信号", "DB600.B3")); + list.add(new ItemDto(item_error, "报警信号", "DB600.B4")); + list.add(new ItemDto(item_task, "任务号", "DB600.D6")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); + list.add(new ItemDto(item_to_target, "目标站", "DB601.W4")); + list.add(new ItemDto(item_to_task, "任务号", "DB601.D8")); + return list; + } + +} + diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_inspect_site2/StandardInspectSite2Defination.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_inspect_site2/StandardInspectSite2Defination.java new file mode 100644 index 0000000..8fc2e0d --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_inspect_site2/StandardInspectSite2Defination.java @@ -0,0 +1,62 @@ +package org.nl.acs.device_driver.standard_inspect_site2; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 检测站点驱动定义 + * 说明:该站点为普通带光电检测站点 + */ +@Service +public class StandardInspectSite2Defination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "standard_inspect_site2"; + } + + @Override + public String getDriverName() { + return "标准版-检测站点2"; + } + + @Override + public String getDriverDescription() { + return "标准版-检测站点2"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new StandardInspectSite2DeviceDriver()).setDevice(device).setDriverDefination(this); + + } + + @Override + public Class getDeviceDriverType() { + return StandardInspectSite2DeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + @Override + public List getReadableItemDtos(){ + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } + +} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_inspect_site2/StandardInspectSite2DeviceDriver.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_inspect_site2/StandardInspectSite2DeviceDriver.java new file mode 100644 index 0000000..851ccf5 --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/standard_inspect_site2/StandardInspectSite2DeviceDriver.java @@ -0,0 +1,823 @@ +package org.nl.acs.device_driver.standard_inspect_site2; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONObject; +import org.nl.acs.device.device_driver.standard_inspect.ReadUtil; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device.service.dto.DeviceDto; +import org.nl.acs.device.service.impl.DeviceServiceImpl; +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.standard_emptypallet_site.StandardEmptyPalletSiteDeviceDriver; +import org.nl.acs.device_driver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; +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.route.service.RouteLineService; +import org.nl.acs.route.service.dto.RouteLineDto; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.utils.SpringContextHolder; +import org.nl.wql.core.bean.WQLObject; +import org.openscada.opc.lib.da.Server; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 检测站点驱动 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class StandardInspectSite2DeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver { + protected ItemProtocol itemProtocol = new ItemProtocol(this); + @Autowired + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + @Autowired + DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); + @Autowired + RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); + @Autowired + TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); + @Autowired + DeviceAppService deviceAppservice = SpringContextHolder.getBean(DeviceAppService.class); + + String container; + String container_type_desc; + String last_container_type_desc; + String last_container; + //放货准备锁 + String putReadyLock = null; + //有货标记 + protected boolean has_goods_tag = false; + + int mode = 0; + int error = 0; + int move = 0; + int task = 0; + int start = 0; + int end = 0; + int last_mode = 0; + int last_error = 0; + int last_move = 0; + int last_task = 0; + Boolean isonline = true; + int hasGoods = 0; + String message = null; + Boolean iserror = false; + + + boolean hasVehicle = false; + boolean isReady = false; + protected int instruction_num = 0; + protected int instruction_num_truth = 0; + boolean isFold = false; + private String assemble_check_tag; + + protected String current_stage_instruction_message; + protected String last_stage_instruction_message; + Integer heartbeat_tag; + private Date instruction_require_time = new Date(); + private Date instruction_finished_time = new Date(); + + private int instruction_require_time_out = 3000; + boolean requireSucess = false; + boolean inrequireSucess = false; + boolean emptyrequireSucess = false; + + private int instruction_finished_time_out; + + int branchProtocol = 0; + + Boolean islock = false; + //备注 + String remark = ""; + //数量 + String qty = ""; + //物料 + String material = ""; + //批次 + String batch; + //当前指令 + Instruction inst = null; + //上次指令 + Instruction last_inst = null; + + Object object = new Object(); + //触摸屏手动触发任务 + private Boolean is_has_task = false; + + //申请搬运任务 + private Boolean apply_handling = false; + //申请物料 + private Boolean apply_material = false; + + //暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域 + int flag; + + String devicecode; + + @Override + public Device getDevice() { + return this.device; + } + + + @Override + public void execute() throws Exception { + String message = null; + try { + String device_code = this.getDeviceCode(); + devicecode = this.getDeviceCode(); + mode = this.itemProtocol.getMode(); + error = this.itemProtocol.getError(); + task = this.itemProtocol.getTask(); + start = this.itemProtocol.getStart(); + end = this.itemProtocol.getEnd(); + + if (mode != last_mode) { + this.setEmptyrequireSucess(false); + this.setInrequireSucess(false); + this.execute_log.setResource(this.devicecode, this.device.getDevice_name()); + this.execute_log.log("设备:" + device_code + ",last_mode -> mode:" + last_mode + "->" + mode); + } + if (move != last_move) { + this.execute_log.setResource(this.devicecode, this.device.getDevice_name()); + this.execute_log.log("设备:" + device_code + ",last_move -> move:" + last_mode + "->" + move); + } + if (error != last_error) { + this.execute_log.setResource(this.devicecode, this.device.getDevice_name()); + this.execute_log.log("设备:" + device_code + ",last_error -> error:" + last_error + "->" + error); + } + + } catch (Exception var17) { + return; + } + + if (!this.itemProtocol.getIsonline()) { + this.setIsonline(false); + this.setIserror(true); + message = "信号量同步异常"; + //未联机 + } else if (mode == 0) { + this.setIsonline(false); + this.setIserror(true); + message = "未联机"; + //有报警 + } else if (error != 0) { + this.setIsonline(false); + this.setIserror(true); + message = "有报警"; + //无报警 + } else { + this.setIsonline(true); + this.setIserror(false); + message = ""; + Instruction instruction = null; + List toInstructions; + + switch (mode) { + case 1: + log.debug("设备运转模式:等待工作"); + return; + //申请 + case 3: + if (start == 0 || end == 0){ + message = "起点终点为空"; + break; + } + applyTask(); + break; + //取消 + case 4: + + this.cancle_require(); + break; + + } + + switch (flag) { + //取货完成 + case 1: + writing(2); + return; + //放货完成 + case 2: + writing(3); + return; + + } + + } + last_mode = mode; + last_error = error; + last_move = move; + last_task = task; + + } + + private void applyTask() { + if (new Date().getTime() - this.instruction_require_time.getTime() < (long) this.instruction_require_time_out) { + log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); + } else { + 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()); + + Device startDevice = deviceAppservice.findDeviceByAddress(String.valueOf(start)); + Device endDevice = deviceAppservice.findDeviceByAddress(String.valueOf(start)); + String taskcode = CodeUtil.getNewCode("TASK_NO"); + if (startDevice == null || endDevice == null){ + message = "起点终点为空"; + throw new BadRequestException("起点终点为空"); + } + dto.setStart_device_code(startDevice.getDevice_code()); + dto.setNext_device_code(endDevice.getDevice_code()); + 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.setStart_point_code(startDevice.getDevice_code()); + dto.setNext_point_code(endDevice.getDevice_code()); + dto.setUpdate_time(now); + dto.setCreate_time(now); + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONObject json = JSONObject.fromObject(dto); + wo.insert(json); + } + } + + + public boolean exe_error() { + if (this.error == 0) { + return true; + } else { + log.debug("设备报警"); + return false; + } + } + + protected void thingToNothing() { + log.debug("从有货到无货 清理数据"); + this.set_last_container(container, container_type_desc); + } + + public void set_last_container(String barcode, String type_desc) { + this.set_last_container(barcode); + this.set_last_container_type_desc(type_desc); + } + + public void set_last_container(String barcode) { + } + + public void set_last_container_type_desc(String type) { + } + + public boolean exe_business() { + return true; + } + + protected void executing(Instruction instruction) { + this.executing(1, instruction, ""); + } + + public void executing(int command, Instruction instruction, String appendMessage) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_target; + String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_task; + if (appendMessage == null) { + appendMessage = ""; + } + if (instruction != null) { + instruction_num = Integer.parseInt(instruction.getInstruction_code()); + } + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, 1); + itemMap.put(to_task, instruction_num); + ReadUtil.write(itemMap, server); + + } + + public void executing(Server server, Map itemMap) { + ReadUtil.write(itemMap, server); + } + + public void writing(int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, command); + ReadUtil.write(itemMap, server); + server.dispose(); + } + + public void writing(int type, int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_command; + String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_target; + String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + ItemProtocol.item_to_task; + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + if (type == 1) { + itemMap.put(to_command, command); + } else if (type == 2) { + itemMap.put(to_target, command); + + } else if (type == 3) { + itemMap.put(to_task, command); + } + ReadUtil.write(itemMap, server); + + } + + public boolean instruction_require(String container_code) { + return instruction_require(container_code, WcsConfig.task_container_type_default_desc); + } + + public synchronized boolean apply_empty_require(String container_code) { + return apply_empty_require(container_code, WcsConfig.task_container_type_default_desc); + } + + public synchronized boolean apply_in_require(String container_code) { + return apply_in_require(container_code, WcsConfig.task_container_type_default_desc); + } + + public synchronized boolean apply_in_require_endPoint(String container_code) { + return apply_in_require_endPoint(container_code, WcsConfig.task_container_type_default_desc); + } + + /** + * 请求取消指令 + */ + public synchronized boolean cancle_require() 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; + + Instruction inst = checkInst(); + + try { + taskserver.cancelByCode(inst.getTask_code()); + } catch (Exception e) { + e.printStackTrace(); + } + writing(4); + return true; + } + } + + public Instruction checkInst() { + if (ObjectUtil.isNotEmpty(this.inst)) { + if (this.task > 0) { + if (this.inst.getInstruction_code().equals(String.valueOf(this.task))) { + return this.inst; + } else { + inst = instructionService.findByCodeFromCache(String.valueOf(task)); + return inst; + } + } + } else { + inst = instructionService.findByCodeFromCache(String.valueOf(task)); + return inst; + } + return null; + } + + /** + * 终点请求取消指令 + */ + public synchronized boolean cancle_require_endpoint() 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; + List taskList = taskserver.queryTaskByNextDeviceCode(this.devicecode); + try { + if (taskList.size() != 0) { + for (TaskDto task : taskList) { + log.warn("当前取消任务code为{}",task.getTask_code()); + System.out.println("当前取消任务code为"+task.getTask_code()); + Instruction inst = instructionService.findByTaskCodeFromCache(task.getTask_code()); + if (ObjectUtil.isNotEmpty(inst)) { + log.warn("当前取消指令id为{}",inst.getInstruction_id()); + System.out.println("当前取消指令id为"+inst.getInstruction_id()); + instructionService.cancel(inst.getInstruction_id()); + } + taskserver.cancel(task.getTask_id()); + } + } + } catch (Exception e) { + log.error("取消指令异常{}",e,e.getMessage()); + System.out.println("取消指令异常"+e.getMessage()); + } + writing(6); + return true; + } + } + + + /** + * 请求指令 + * + * @param container_code + * @param container_type + */ + public synchronized boolean apply_in_require(String container_code, String container_type) { + WQLObject runpointwo = WQLObject.getWQLObject("acs_device_runpoint"); + Date date = new Date(); + Boolean flag = false; + 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; + //查询该设备所有路由 + List pathLinesByCode = routelineserver.getSuperiorShortPathLinesByCode(this.getDevice().getDevice_code(), "normal"); + StandardInspectSite2DeviceDriver standardInspectSiteDeviceDriver; + for (int i = 0; i < pathLinesByCode.size(); i++) { + RouteLineDto routeLineDto = pathLinesByCode.get(i); + //获取该路由的起点设备编码 + String start_device_code = routeLineDto.getDevice_code(); + //获取该路由的终点设备编码 + String next_device_code = routeLineDto.getNext_device_code(); + //获取该路由终点设备信息 + Device route_link_device = deviceAppservice.findDeviceByCode(next_device_code); + //判断终点设备驱动是否为检测站点驱动 + if (route_link_device.getDeviceDriver() instanceof StandardInspectSite2DeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSite2DeviceDriver) route_link_device.getDeviceDriver(); + //判断该终点设备是否有货,有货就结束循环 + if (standardInspectSiteDeviceDriver.getMove() != 0 || standardInspectSiteDeviceDriver.getMode() != 2) { + continue; + } + + //判断是否已经有该起点设备的任务,如果有就结束循环 + int num1 = taskserver.querySameOriginTask(start_device_code); + if (num1 != 0) { + continue; + } + //判断是否有相同终点的任务,有就结束本次循环 + int num = taskserver.querySameDestinationTask(next_device_code); + if (num != 0) { + continue; + } + /* //判断检测站点是否锁定,如果锁定就结束本次循环 + JSONObject jsonObject = runpointwo.query("device_code = '" + next_device_code + "' and islock = '1'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject)) { + this.execute_log.log("设备:" + devicecode+ "", "", "对应路由设备," + next_device_code + "已锁定"); + continue; + }*/ + //创建任务 + 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.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("1"); + dto.setMaterial(this.getDevice().getMaterial_type()); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setStart_device_code(start_device_code); + dto.setStart_point_code(start_device_code); + dto.setNext_device_code(next_device_code); + dto.setNext_point_code(next_device_code); + try { + //判断是否已经有该起点设备的任务,如果有就结束循环 + int num2 = taskserver.querySameOriginTask(start_device_code); + if (num2 != 0) { + continue; + } + //判断是否有相同终点的任务,有就结束本次循环 + int num3 = taskserver.querySameDestinationTask(next_device_code); + if (num3 != 0) { + continue; + } + taskserver.create(dto); +/* //任务创建成功 锁定终点设备 + JSONObject map = new JSONObject(); + map.put("islock", "true"); + map.put("update_by", "auto"); + map.put("update_time", DateUtil.now()); + runpointwo.update(map, "device_code = '" + next_device_code + "'");*/ + flag = true; + writing(3); + break; + } catch (Exception e) { + this.execute_log.log("设备:" + devicecode + "", "", "创建任务失败"); + } + } + } + + //生成任务成功 + if (flag) { + + inrequireSucess = true; + this.execute_log.log("设备:" + devicecode + "", "", "对应路由设备,生成任务成功已锁定"); + } + return true; + } + } + + /** + * 终点请求指令 + * + * @param container_code + * @param container_type + */ + public synchronized boolean apply_in_require_endPoint(String container_code, String container_type) { + WQLObject runpointwo = WQLObject.getWQLObject("acs_device_runpoint"); + Date date = new Date(); + Boolean flag = false; + 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; + //查询该设备所有路由 + List pathLinesByCode = routelineserver.getPathLinesByCode(this.getDevice().getDevice_code(), "normal"); + StandardOrdinarySiteDeviceDriver standardInspectSiteDeviceDriver; + for (int i = 0; i < pathLinesByCode.size(); i++) { + RouteLineDto routeLineDto = pathLinesByCode.get(i); + //获取该路由的起点设备编码 + String start_device_code = routeLineDto.getDevice_code(); + //获取该路由的终点设备编码 + String next_device_code = routeLineDto.getNext_device_code(); + //获取该路由终点设备信息 + Device route_link_device = deviceAppservice.findDeviceByCode(start_device_code); + //判断终点设备驱动是否为检测站点驱动 + if (route_link_device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) route_link_device.getDeviceDriver(); +// //判断该起点设备是否无货,无货就结束循环 + if (standardInspectSiteDeviceDriver.getHasGoods() == 0) { + continue; + } + + //判断是否已经有该起点设备的任务,如果有就结束循环 + int num1 = taskserver.querySameOriginTask(start_device_code); + if (num1 != 0) { + continue; + } + //判断是否有相同终点的任务,有就结束本次循环 + int num = taskserver.querySameDestinationTask(next_device_code); + if (num != 0) { + continue; + } + /* //判断检测站点是否锁定,如果锁定就结束本次循环 + JSONObject jsonObject = runpointwo.query("device_code = '" + next_device_code + "' and islock = '1'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject)) { + this.execute_log.log("设备:" + devicecode+ "", "", "对应路由设备," + next_device_code + "已锁定"); + continue; + }*/ + //创建任务 + 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.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("1"); + dto.setMaterial(this.getDevice().getMaterial_type()); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setStart_device_code(start_device_code); + dto.setStart_point_code(start_device_code); + dto.setNext_device_code(next_device_code); + dto.setNext_point_code(next_device_code); + try { + //判断是否已经有该起点设备的任务,如果有就结束循环 + int num2 = taskserver.querySameOriginTask(start_device_code); + if (num2 != 0) { + continue; + } + //判断是否有相同终点的任务,有就结束本次循环 + int num3 = taskserver.querySameDestinationTask(next_device_code); + if (num3 != 0) { + continue; + } + taskserver.create(dto); +/* //任务创建成功 锁定终点设备 + JSONObject map = new JSONObject(); + map.put("islock", "true"); + map.put("update_by", "auto"); + map.put("update_time", DateUtil.now()); + runpointwo.update(map, "device_code = '" + next_device_code + "'");*/ + flag = true; + writing(5); + break; + } catch (Exception e) { + this.execute_log.log("设备:" + devicecode + "", "", "创建任务失败"); + } + } + } + + //生成任务成功 + if (flag) { + + inrequireSucess = true; + this.execute_log.log("设备:" + devicecode + "", "", "对应路由设备,生成任务成功已锁定"); + } else { + message = "当前站点所有路由都为无货状态"; + writing(7); + } + return true; + } + } + + /** + * 请求指令 + * + * @param container_code + * @param container_type + */ + public synchronized boolean apply_empty_require(String container_code, String container_type) { + WQLObject runpointwo = WQLObject.getWQLObject("acs_device_runpoint"); + Date date = new Date(); + Boolean flag = false; + 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; + //查询所有到这台设备的路由,这台设备为路由的终点 + List pathLinesByCode = routelineserver.getPathLinesByCode(this.getDevice().getDevice_code(), "normal"); + StandardEmptyPalletSiteDeviceDriver standardEmptyPalletSiteDeviceDriver; + for (int i = 0; i < pathLinesByCode.size(); i++) { + //获取每个路由 + RouteLineDto routeLineDto = pathLinesByCode.get(i); + //获取路由的起点 + String start_device_code = routeLineDto.getDevice_code(); + //获取路由的终点 + String next_device_code = routeLineDto.getNext_device_code(); + //获取起点设备的信息 + Device route_link_device = deviceAppservice.findDeviceByCode(start_device_code); + //判断起点设备驱动是否为堆叠位驱动 + if (route_link_device.getDeviceDriver() instanceof StandardEmptyPalletSiteDeviceDriver) { + standardEmptyPalletSiteDeviceDriver = (StandardEmptyPalletSiteDeviceDriver) route_link_device.getDeviceDriver(); + // TODO 判断堆叠位是否有货,没货就结束本次循环 + //判断堆叠位的数量是否大于0,如果=0就结束本次循环 + if (standardEmptyPalletSiteDeviceDriver.getMove() != 1 || standardEmptyPalletSiteDeviceDriver.getNumber() == 0) { + continue; + } + //判断是否已经有该起点设备的任务,如果有就结束循环 + int num = taskserver.querySameOriginTask(start_device_code); + if (num != 0) { + continue; + } + //判断是否已经有到该起点设备的任务,如果有就结束循环 + int num1 = taskserver.querySameDestinationTask(next_device_code); + if (num1 != 0) { + continue; + } +/* //判断起点是否锁定,如果被锁定就结束循环 + JSONObject jsonObject = runpointwo.query("device_code = '" + next_device_code + "' and islock = 'true'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject)) { + this.execute_log.log("设备:" + devicecode+ "", "", "对应路由设备," + next_device_code + "已锁定"); + continue; + }*/ + //创建任务 + 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.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"); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setStart_device_code(start_device_code); + dto.setStart_point_code(start_device_code); + dto.setNext_device_code(next_device_code); + dto.setNext_point_code(next_device_code); + dto.setMaterial(route_link_device.getMaterial_type()); + try { + //判断是否已经有该起点设备的任务,如果有就结束循环 + int num2 = taskserver.querySameOriginTask(start_device_code); + if (num2 != 0) { + continue; + } + //判断是否有相同终点的任务,有就结束本次循环 + int num3 = taskserver.querySameDestinationTask(next_device_code); + if (num3 != 0) { + continue; + } + taskserver.create(dto); + //任务创建成功 锁定该终点设备 + JSONObject map = new JSONObject(); + map.put("islock", "true"); + map.put("update_by", "auto"); + map.put("update_time", DateUtil.now()); + runpointwo.update(map, "device_code = '" + start_device_code + "'"); + flag = true; + break; + } catch (Exception e) { + this.execute_log.log("设备:" + devicecode + "", "", "创建任务失败"); + } + } + } + + //生成任务成功 + if (flag) { + emptyrequireSucess = true; + this.execute_log.log("设备:" + devicecode + "", "", "对应路由设备,生成任务成功已锁定"); + } + return true; + } + } + + + /** + * 请求指令 + * + * @param container_code + * @param 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; + } + } + + +} diff --git a/acs/qd/src/views/acs/device/config.vue b/acs/qd/src/views/acs/device/config.vue index 601b0d9..0090ef5 100644 --- a/acs/qd/src/views/acs/device/config.vue +++ b/acs/qd/src/views/acs/device/config.vue @@ -74,6 +74,7 @@ import crud from '@/mixins/crud' import { get, selectDriverCodeList } from '@/api/acs/device/driverConfig' import { getDicts } from '@/api/system/dict' import standard_inspect_site from './driver/standard_inspect_site' +import standard_inspect_site from './driver/standard_inspect_site2' import standard_inspect_site_smart from './driver/standard_inspect_site_smart' import standard_ordinary_site from './driver/standard_ordinary_site' import weighing_site from './driver/weighing_site' @@ -117,7 +118,7 @@ import jmagv from '@/views/acs/device/driver/jmagv' export default { name: 'DeviceConfig', - components: { standard_ordinary_site, standard_inspect_site, standard_autodoor, + components: { standard_ordinary_site, standard_inspect_site, standard_inspect_site2, standard_autodoor, standard_emptypallet_site, standard_manipulator_inspect_site, standard_special_inspect_site, lamp_three_color, standard_storage, special_ordinary_site, standard_scanner, standard_conveyor_control_with_scanner, standard_conveyor_control_with_plcscanner, standard_conveyor_control, standard_conveyor_monitor, weighing_site, machines_site, non_line_manipulator_inspect_site, diff --git a/acs/qd/src/views/acs/device/driver/standard_inspect_site2.vue b/acs/qd/src/views/acs/device/driver/standard_inspect_site2.vue new file mode 100644 index 0000000..d38f7c4 --- /dev/null +++ b/acs/qd/src/views/acs/device/driver/standard_inspect_site2.vue @@ -0,0 +1,487 @@ + + + + +