diff --git a/acs/nladmin-system/pom.xml b/acs/nladmin-system/pom.xml index 0e88bab..22b1a87 100644 --- a/acs/nladmin-system/pom.xml +++ b/acs/nladmin-system/pom.xml @@ -108,7 +108,11 @@ org.springframework.boot spring-boot-starter-freemarker - + + org.bouncycastle + bcprov-jdk15on + 1.70 + commons-configuration diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java index 485b4ff..3042831 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java @@ -3,6 +3,7 @@ package org.nl.acs.agv.server; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import org.nl.acs.agv.server.dto.AgvDto; +import org.nl.acs.ext.UnifiedResponse; import org.nl.acs.instruction.service.dto.Instruction; import java.util.Map; @@ -13,38 +14,63 @@ import java.util.Map; * @Date: 2022-08-15 */ public interface XianGongAgvService { - Map findAllAgvFromCache(); /** - * 查询自动门状态 + * 下发叉车运单 * - * @param device + * @param dto * @return */ - public String queryDoorStatus(String device); + public UnifiedResponse sendOrderSequencesToForklift(Instruction dto); /** - * 先工agv 等待点请求 - *AGV->ACS - * @param + * 下发运单序列 + * + * @param inst * @return + * @throws Exception */ - public String waitPointRequest(String param); + public UnifiedResponse sendOrderSequencesToXZ(Instruction inst); /** - * acs->agv - * 关闭运单系列 - * @param code + * 追加运单 + * + * @param inst * @return + * @throws Exception */ - public HttpResponse markComplete(String code); + public UnifiedResponse addOrderSequences(Instruction inst); + + /** + * @param reqParam + * @param + * @return + * @throws Exception + */ + public UnifiedResponse markComplete(JSONObject reqParam); /** * 查询AGV状态 + * + * @return + */ + public UnifiedResponse queryXZAgvDeviceStatus(String vehicles, Class type); + + /** + * @param type + * @param + * @return + */ + public UnifiedResponse queryXZAgvInstStatus(Class type); + + /** + * 根据运单号查询运单状态 + * + * @param type + * @param * @return */ - public HttpResponse queryXZAgvDeviceStatus(); + public UnifiedResponse queryXZAgvInstStatusByCode(String instCode, Class type); - public HttpResponse queryXZAgvInstStatus(); /** * 删除先知任务 @@ -52,31 +78,93 @@ public interface XianGongAgvService { * @param instCode * @return */ - public HttpResponse deleteXZAgvInst(String instCode); + public UnifiedResponse deleteXZAgvInst(String instCode); /** - * 下发运单序列 + * 查询场景中指定机器人信息 + */ + public UnifiedResponse getRobotInfo(String robotCode, Class type); + + + /** + * 占用互斥组 * - * @param inst + * @param reqParam + * @param + * @return + */ + public UnifiedResponse getBlockGroup(JSONObject reqParam); + + /** + * 查询互斥组状态 + * + * @param reqParam + * @param + * @return + */ + public UnifiedResponse blockGroupStatus(JSONObject reqParam); + + + /** + * 释放互斥组 + * + * @param reqParam + * @param + * @return + */ + public UnifiedResponse releaseBlockGroup(JSONObject reqParam); + + + /** + * 查询所有AGV + * + * @return + */ + public Map findAllAgvFromCache(); + + /** + * 查询自动门状态 + * + * @param device + * @return + */ + public String queryDoorStatus(String device); + + /** + * 先工agv 等待点请求 + * AGV->ACS + * + * @param param * @return - * @throws Exception */ - public HttpResponse sendOrderSequencesToXZ(Instruction inst) throws Exception; + public String waitPointRequest(String param); - public HttpResponse addOrderSequences(Instruction inst) throws Exception; /** * 组织json数据 * - * @param + * @param inst * @return * @throws Exception */ - public String sendOrderSequencesParam(Instruction inst) throws Exception; + public String sendOrderSequencesParam(Instruction inst); + /** + * 创建 + * + * @param inst + * @param type + * @return + */ public JSONObject createOrederData(Instruction inst, String type); - JSONObject xgAGVWaitPointRequest(JSONObject requestParam); + /** + * 请求取货放货 + * + * @param requestParam + * @return + */ + public JSONObject xgAGVWaitPointRequest(JSONObject requestParam); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java index 383b27c..206cb60 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java @@ -14,7 +14,9 @@ import org.nl.acs.agv.server.AgvWaitUtil; import org.nl.acs.agv.server.XianGongAgvService; import org.nl.acs.agv.server.dto.AgvDto; import org.nl.acs.config.AcsConfig; +import org.nl.acs.ext.UnifiedResponse; import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.ext.xg.XgHttpUtil; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.dto.Instruction; import org.nl.acs.opc.Device; @@ -49,12 +51,103 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { private AgvWaitUtil agvWaitUtil; @Autowired private TaskService taskService; + @Autowired + private XgHttpUtil xgHttpUtil; private Map AGVDeviceStatus = new HashMap<>(); @Value("${server.port}") public int port; + @Override + public UnifiedResponse sendOrderSequencesToXZ(Instruction inst) { + JSONObject reqParam = new JSONObject(); + reqParam.put("id", inst.getInstruction_code()); + reqParam.put("complete", true); + reqParam.put("blocks", createBlocksData(inst)); + reqParam.put("priority", inst.getPriority()); + String path = "/setOrder"; + return xgHttpUtil.sendPostRequest(path, reqParam); + } + + @Override + public UnifiedResponse sendOrderSequencesToForklift(Instruction inst) { + JSONObject reqParam = new JSONObject(); + reqParam.put("id", inst.getInstruction_code()); + reqParam.put("complete", true); + reqParam.put("blocks", createBlocksForklift(inst)); + reqParam.put("priority", inst.getPriority()); + String path = "/setOrder"; + return xgHttpUtil.sendPostRequest(path, reqParam); + } + + @Override + public UnifiedResponse markComplete(JSONObject reqParam) { + String path = "/markComplete"; + return xgHttpUtil.sendPostRequest(path, reqParam); + } + + + @Override + public UnifiedResponse queryXZAgvDeviceStatus(String vehicles, Class type) { + String path = "/robotsStatus" + vehicles == null ? "" : "?vehicles = " + vehicles; + return xgHttpUtil.sendGetRequest(path, type); + } + + + @Override + public UnifiedResponse queryXZAgvInstStatus(Class type) { + String path = "/orders?page=1&size=80&orderBy=createTime&orderMethod=descending"; + return xgHttpUtil.sendGetRequest(path, type); + } + + @Override + public UnifiedResponse queryXZAgvInstStatusByCode(String instCode, Class type) { + String path = "/orderDetails/" + instCode; + return xgHttpUtil.sendGetRequest(path, type); + } + + + @Override + public UnifiedResponse deleteXZAgvInst(String instCode) { + //String path = "/api/route/transportOrders/" + instCode + "/withdrawal"; + String path = "/terminate"; + JSONObject reqParam = new JSONObject(); + reqParam.put("id", instCode); + return xgHttpUtil.sendPostRequest(path, reqParam); + } + + @Override + public UnifiedResponse addOrderSequences(Instruction inst) { + JSONObject addOrder = createOrederData(inst, "1"); + String path = "/api/route/transportOrders/" + inst.getInstruction_code(); + return xgHttpUtil.sendPostRequest(path, addOrder); + } + + @Override + public UnifiedResponse getRobotInfo(String robotCode, Class type) { + String path = "/robotsStatus?vehicles=" + robotCode; + return xgHttpUtil.sendGetRequest(path, type); + } + + @Override + public UnifiedResponse getBlockGroup(JSONObject reqParam) { + String path = "/getBlockGroup"; + return xgHttpUtil.sendPostRequest(path, reqParam); + } + + @Override + public UnifiedResponse releaseBlockGroup(JSONObject reqParam) { + String path = "/releaseBlockGroup"; + return xgHttpUtil.sendPostRequest(path, reqParam); + } + + @Override + public UnifiedResponse blockGroupStatus(JSONObject reqParam) { + String path = "/blockGroupStatus"; + return xgHttpUtil.sendPostRequest(path, reqParam); + } + @Override public String waitPointRequest(String param) { log.info("收到AGV请求参数:{}", param); @@ -99,186 +192,185 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } - @Override - public HttpResponse markComplete(String code) { - String api = "/api/route/orderSequences/" + code + "/markComplete"; - if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { - String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); - String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); - - agvurl = agvurl + ":" + agvport + "/api/route/orderSequences/" + code + "/markComplete"; - log.info("关闭agv运单序列请求:{}", agvurl); - - HttpResponse result = HttpRequest.post(agvurl) - //.body(String.valueOf(orderjo))//表单内容 - .timeout(20000)//超时,毫秒 - .execute(); - log.info("关闭agv运单序列请求反馈:{}", result); - - return result; - } else { - return null; - } - - - } +// @Override +// public HttpResponse markComplete(String code) { +// String api = "/api/route/orderSequences/" + code + "/markComplete"; +// if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { +// String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); +// String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); +// +// agvurl = agvurl + ":" + agvport + "/api/route/orderSequences/" + code + "/markComplete"; +// log.info("关闭agv运单序列请求:{}", agvurl); +// +// HttpResponse result = HttpRequest.post(agvurl) +// //.body(String.valueOf(orderjo))//表单内容 +// .timeout(20000)//超时,毫秒 +// .execute(); +// log.info("关闭agv运单序列请求反馈:{}", result); +// +// return result; +// } else { +// return null; +// } +// +// } + +// @Override +// public HttpResponse queryXZAgvDeviceStatus() { +// +// if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { +// String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); +// String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); +// +// String agvurl1 = agvurl + ":" + agvport + "/api/route/vehicles"; +// String agvurl2 = agvurl + ":" + agvport + "/api/route/vehicleDetails"; +// +// HttpResponse result = HttpRequest.get(agvurl1) +// .timeout(20000)//超时,毫秒 +// .execute(); +// +// +// HttpResponse result2 = HttpRequest.get(agvurl2) +// .timeout(20000)//超时,毫秒 +// .execute(); +// +// System.out.println("查询agv状态数据:" + result.body()); +// if (result.getStatus() == 200) { +// JSONArray ja = (JSONArray) JSONArray.parse(result.body()); +// +// for (int i = 0; i < ja.size(); i++) { +// JSONObject jo = (JSONObject) ja.get(i); +// String name = jo.getString("name"); +// String state = jo.getString("state"); +// String energyLevel = jo.getString("energyLevel"); +// String transportOrder = jo.getString("transportOrder"); +// JSONObject detailjo = (JSONObject) JSONObject.parse(result2.body()); +// JSONObject item = (JSONObject) detailjo.get(name); +// String x = item.getString("x"); +// String y = item.getString("y"); +// String angle = item.getString("angle"); +// AgvDto dto = new AgvDto(); +// dto.setName(name); +// dto.setEnergyLevel(energyLevel); +// dto.setState(state); +// dto.setTransportOrder(transportOrder); +// dto.setPositionAngle(angle); +// dto.setPositionX(x); +// dto.setPositionY(y); +// if (AGVDeviceStatus.containsKey(name)) { +// AGVDeviceStatus.remove(name); +// AGVDeviceStatus.put(name, dto); +// } else { +// AGVDeviceStatus.put(name, dto); +// } +// } +// } +// return result; +// } else { +// return null; +// } +// +// +// } + +// @Override +// public HttpResponse queryXZAgvInstStatus() { +// if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { +// String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); +// String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); +// +// agvurl = agvurl + ":" + agvport + "/orders?page=1&size=200"; +// +// HttpResponse result = HttpRequest.get(agvurl) +// .timeout(20000)//超时,毫秒 +// .execute(); +// log.info("queryXZAgvInstStatus----查询agv指令数据:{}" + result.body()); +// return result; +// } else { +// +// return null; +// } +// } + +// @Override +// public HttpResponse deleteXZAgvInst(String instCode) { +// if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { +// String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); +// String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); +// +// JSONObject param = new JSONObject(); +// param.put("id", instCode); +// param.put("disableVehicle", false); +// agvurl = agvurl + ":" + agvport + "/terminate"; +// log.info("删除agv指令请求agvurl:{}", agvurl); +// try { +// HttpResponse result = HttpRequest.post(agvurl) +// .body(param.toJSONString()) +// .timeout(20000)//超时,毫秒 +// .execute(); +// log.info("删除agv指令请求反馈:{}", result); +// return result; +// } catch (Exception e) { +// log.error("取消AGV指令信息错误:{}", e.getMessage()); +// throw new BadRequestException(e.getMessage()); +// } +// } else { +// return null; +// } +// } + +// @Override +// public HttpResponse sendOrderSequencesToXZ(Instruction inst) throws Exception { +// JSONObject jo = new JSONObject(); +// jo.put("id", inst.getInstruction_code()); +// jo.put("complete", true); +// jo.put("blocks", createBlocksData(inst)); +// jo.put("priority", inst.getPriority()); +// log.info("任务号:{},指令号{},下发agv订单序列参数:{}", inst.getTask_code(), inst.getInstruction_code(), jo.toString()); +// +// if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { +// String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); +// String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); +// agvurl = agvurl + ":" + agvport + "/setOrder"; +// +// HttpResponse result = HttpRequest.post(agvurl) +// .body(String.valueOf(jo))//表单内容 +// .timeout(20000)//超时,毫秒 +// .execute(); +// log.info(agvurl); +// log.info("任务号:{},指令号{},状态{},下发agv订单序列反馈:{}", inst.getTask_code(), inst.getInstruction_code(), result.getStatus(), result.body()); +// return result; +// } else { +// return null; +// } +// } + +// @Override +// public HttpResponse addOrderSequences(Instruction inst) throws Exception { +// JSONObject orderjo = createOrederData(inst, "1"); +// log.info("指令号:{},追加agv订单序列参数:{}", inst.getInstruction_code(), orderjo.toString()); +// +// if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { +// String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); +// String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); +// +// agvurl = agvurl + ":" + agvport + "/api/route/transportOrders/" + inst.getInstruction_code(); +// +// HttpResponse result = HttpRequest.post(agvurl) +// .body(String.valueOf(orderjo))//表单内容 +// .timeout(20000)//超时,毫秒 +// .execute(); +// log.info(agvurl); +// log.info("任务号:{},指令号{},状态{},追加agv订单序列参数:{}", inst.getTask_code(), inst.getInstruction_code(), result.getStatus(), result.body()); +// +// return result; +// } else { +// return null; +// } +// } @Override - public HttpResponse queryXZAgvDeviceStatus() { - - if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { - String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); - String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); - - String agvurl1 = agvurl + ":" + agvport + "/api/route/vehicles"; - String agvurl2 = agvurl + ":" + agvport + "/api/route/vehicleDetails"; - - HttpResponse result = HttpRequest.get(agvurl1) - .timeout(20000)//超时,毫秒 - .execute(); - - - HttpResponse result2 = HttpRequest.get(agvurl2) - .timeout(20000)//超时,毫秒 - .execute(); - - System.out.println("查询agv状态数据:" + result.body()); - if (result.getStatus() == 200) { - JSONArray ja = (JSONArray) JSONArray.parse(result.body()); - - for (int i = 0; i < ja.size(); i++) { - JSONObject jo = (JSONObject) ja.get(i); - String name = jo.getString("name"); - String state = jo.getString("state"); - String energyLevel = jo.getString("energyLevel"); - String transportOrder = jo.getString("transportOrder"); - JSONObject detailjo = (JSONObject) JSONObject.parse(result2.body()); - JSONObject item = (JSONObject) detailjo.get(name); - String x = item.getString("x"); - String y = item.getString("y"); - String angle = item.getString("angle"); - AgvDto dto = new AgvDto(); - dto.setName(name); - dto.setEnergyLevel(energyLevel); - dto.setState(state); - dto.setTransportOrder(transportOrder); - dto.setPositionAngle(angle); - dto.setPositionX(x); - dto.setPositionY(y); - if (AGVDeviceStatus.containsKey(name)) { - AGVDeviceStatus.remove(name); - AGVDeviceStatus.put(name, dto); - } else { - AGVDeviceStatus.put(name, dto); - } - } - } - return result; - } else { - return null; - } - - - } - - @Override - public HttpResponse queryXZAgvInstStatus() { - if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { - String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); - String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); - - agvurl = agvurl + ":" + agvport + "/orders?page=1&size=200"; - - HttpResponse result = HttpRequest.get(agvurl) - .timeout(20000)//超时,毫秒 - .execute(); - log.info("queryXZAgvInstStatus----查询agv指令数据:{}" + result.body()); - return result; - } else { - - return null; - } - } - - @Override - public HttpResponse deleteXZAgvInst(String instCode) { - if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { - String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); - String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); - - JSONObject param = new JSONObject(); - param.put("id", instCode); - param.put("disableVehicle", false); - agvurl = agvurl + ":" + agvport + "/terminate"; - log.info("删除agv指令请求agvurl:{}", agvurl); - try { - HttpResponse result = HttpRequest.post(agvurl) - .body(param.toJSONString()) - .timeout(20000)//超时,毫秒 - .execute(); - log.info("删除agv指令请求反馈:{}", result); - return result; - } catch (Exception e) { - log.error("取消AGV指令信息错误:{}", e.getMessage()); - throw new BadRequestException(e.getMessage()); - } - } else { - return null; - } - } - - @Override - public HttpResponse sendOrderSequencesToXZ(Instruction inst) throws Exception { - JSONObject jo = new JSONObject(); - jo.put("id", inst.getInstruction_code()); - jo.put("complete", true); - jo.put("blocks", createBlocksData(inst)); - jo.put("priority", inst.getPriority()); - log.info("任务号:{},指令号{},下发agv订单序列参数:{}", inst.getTask_code(), inst.getInstruction_code(), jo.toString()); - - if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { - String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); - String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); - agvurl = agvurl + ":" + agvport + "/setOrder"; - - HttpResponse result = HttpRequest.post(agvurl) - .body(String.valueOf(jo))//表单内容 - .timeout(20000)//超时,毫秒 - .execute(); - log.info(agvurl); - log.info("任务号:{},指令号{},状态{},下发agv订单序列反馈:{}", inst.getTask_code(), inst.getInstruction_code(), result.getStatus(), result.body()); - return result; - } else { - return null; - } - } - - @Override - public HttpResponse addOrderSequences(Instruction inst) throws Exception { - JSONObject orderjo = createOrederData(inst, "1"); - log.info("指令号:{},追加agv订单序列参数:{}", inst.getInstruction_code(), orderjo.toString()); - - if (StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { - String agvurl = paramService.findByCode(AcsConfig.AGV_URL).getValue(); - String agvport = paramService.findByCode(AcsConfig.AGV_PORT).getValue(); - - agvurl = agvurl + ":" + agvport + "/api/route/transportOrders/" + inst.getInstruction_code(); - - HttpResponse result = HttpRequest.post(agvurl) - .body(String.valueOf(orderjo))//表单内容 - .timeout(20000)//超时,毫秒 - .execute(); - log.info(agvurl); - log.info("任务号:{},指令号{},状态{},追加agv订单序列参数:{}", inst.getTask_code(), inst.getInstruction_code(), result.getStatus(), result.body()); - - return result; - } else { - return null; - } - } - - @Override - public String sendOrderSequencesParam(Instruction inst) throws Exception { + public String sendOrderSequencesParam(Instruction inst) { JSONObject jo = new JSONObject(); jo.put("intendedVehicle", ""); jo.put("category", "Park"); @@ -725,4 +817,137 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { throw new BadRequestException("请求失败,IN OUT 站点错误!"); } + + /** + * 叉车运单动作块 + * + * @param inst + * @return + */ + private JSONArray createBlocksForklift(Instruction inst) { + JSONArray ja = new JSONArray(); + //起点 + Device startDevice = deviceAppService.findDeviceByCode(inst.getStart_device_code()); + //忽略取货校验 + if ("true".equals(startDevice.getExtraValue().get("ignore_pickup_check"))) { + //取货前等待 + JSONObject jo = new JSONObject(); + //动作块id + jo.put("blockId", IdUtil.simpleUUID()); + //目的地名称 + jo.put("location", inst.getStart_point_code() + "INGET"); + //执行脚本 + jo.put("operation", "script"); + jo.put("id", inst.getStart_point_code() + "INGET"); + //通信脚本,动作前后与现场设备交互的场景 + jo.put("script_name", "userpy/interact.py"); + JSONObject script_args = new JSONObject(); + //更改为现场设备IP及PORT +// script_args.put("addr", addr); + JSONObject data = new JSONObject(); + JSONObject reach = new JSONObject(); + reach.put("task_code", inst.getInstruction_code()); + reach.put("address", inst.getStart_point_code() + "INGET"); + data.put("reach", reach); + script_args.put("data", data); + script_args.put("protocol", "HTTP"); + jo.put("script_args", script_args); + ja.add(jo); + } + //货叉加载货物,会将叉车状态变成载货中 + JSONObject jo1 = new JSONObject(); + jo1.put("blockId", IdUtil.simpleUUID()); + jo1.put("location", inst.getStart_point_code()); + jo1.put("operation", "ForkLoad"); + //行走高度 + jo1.put("start_height", "0.1"); + //取货高度 +// jo1.put("end_height", inst.getStart_height()); + //升起信号 + jo1.put("operationArgs", new JSONObject() {{ + put("recognize", true); + }}); + ja.add(jo1); + + //取货完成等待 + if ("true".equals(startDevice.getExtraValue().get("ignore_pickup_check"))) { + JSONObject jo2 = new JSONObject(); + jo2.put("blockId", IdUtil.simpleUUID()); + jo2.put("location", inst.getStart_point_code() + "OUTGET"); + jo2.put("operation", "script"); + jo2.put("id", inst.getStart_point_code() + "OUTGET"); + jo2.put("script_name", "userpy/interact.py"); + JSONObject script_args2 = new JSONObject(); +// script_args2.put("addr", addr); + JSONObject data2 = new JSONObject(); + JSONObject reach2 = new JSONObject(); + reach2.put("task_code", inst.getInstruction_code()); + reach2.put("address", inst.getStart_point_code() + "OUTGET"); + data2.put("reach", reach2); + script_args2.put("data", data2); + script_args2.put("protocol", "HTTP"); + jo2.put("script_args", script_args2); + ja.add(jo2); + } + + //起点 + Device nextDevice = deviceAppService.findDeviceByCode(inst.getNext_device_code()); + //忽略放货校验 + if ("true".equals(nextDevice.getExtraValue().get("ignore_release_check"))) { + //放货前等待 + JSONObject jo3 = new JSONObject(); + jo3.put("blockId", IdUtil.simpleUUID()); + jo3.put("location", inst.getNext_point_code() + "INPUT"); + jo3.put("operation", "script"); + jo3.put("id", inst.getNext_point_code() + "INPUT"); + jo3.put("script_name", "userpy/interact.py"); + JSONObject script_args3 = new JSONObject(); +// script_args3.put("addr", addr); + JSONObject data3 = new JSONObject(); + JSONObject reach3 = new JSONObject(); + reach3.put("task_code", inst.getInstruction_code()); + reach3.put("address", inst.getNext_point_code() + "INPUT"); + data3.put("reach", reach3); + script_args3.put("data", data3); + script_args3.put("protocol", "HTTP"); + jo3.put("script_args", script_args3); + ja.add(jo3); + } + + + //ForkUnload(货叉卸载货物,会将叉车的状态变成非载货中) + JSONObject jo2 = new JSONObject(); + jo2.put("blockId", IdUtil.simpleUUID()); + jo2.put("location", inst.getStart_point_code()); + jo2.put("operation", "ForkUnload"); + //行走高度 + jo2.put("start_height", "0.2"); + //放货高度 +// jo2.put("end_height", inst.getNext_height()); + ja.add(jo2); + + + //忽略放货校验 + if ("true".equals(nextDevice.getExtraValue().get("ignore_release_check"))) { + //放货完成等待 + JSONObject jo5 = new JSONObject(); + jo5.put("blockId", IdUtil.simpleUUID()); + jo5.put("location", inst.getNext_point_code() + "OUTPUT"); + jo5.put("operation", "script"); + jo5.put("id", inst.getNext_point_code() + "OUTPUT"); + jo5.put("script_name", "userpy/interact.py"); + JSONObject script_args5 = new JSONObject(); +// script_args5.put("addr", addr); + JSONObject data5 = new JSONObject(); + JSONObject reach5 = new JSONObject(); + reach5.put("task_code", inst.getInstruction_code()); + reach5.put("address", inst.getNext_point_code() + "OUTPUT"); + data5.put("reach", reach5); + script_args5.put("data", data5); + script_args5.put("protocol", "HTTP"); + jo5.put("script_args", script_args5); + ja.add(jo5); + } + return ja; + } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java b/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java index 24663ad..b827afc 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java @@ -11,7 +11,9 @@ import com.alibaba.fastjson.JSONObject; public enum DriverTypeEnum { ORDINARY_SITE(1, "standard_ordinary_site", "普通站点", "station"), STANDARD_STORAGE(2, "standard_storage", "标准版-货架", "storage"), - PHOTOELECTRIC_DETECTION_DEVICE_DRIVER(3, "photoelectric_detection_station", "光电检测站点", "station"); + PHOTOELECTRIC_DETECTION_DEVICE_DRIVER(3, "photoelectric_detection_station", "光电检测站点", "station"), + XIANGONG_AGV_DEVICE_DRIVER(4, "xg_agv", "仙工AGV", "agv"), + RGV_DEVICE_DRIVER(5, "rgv_station", "RGV", "rgv"); //驱动索引 private int index; //驱动编码 diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/xg_agv/XianGongAgvDefinition.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/xg_agv/XianGongAgvDefinition.java new file mode 100644 index 0000000..8ed8a83 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/xg_agv/XianGongAgvDefinition.java @@ -0,0 +1,49 @@ +package org.nl.acs.device_driver.basedriver.agv.xg_agv; + +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.DeviceDriverDefinition; +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; + +/** + * 仙工AGV驱动 + */ +@Service +public class XianGongAgvDefinition implements DeviceDriverDefinition { + @Override + public String getDriverCode() { + return "xg_agv"; + } + + @Override + public String getDriverName() { + return "标准版-仙工Agv"; + } + + @Override + public String getDriverDescription() { + return "标准版-仙工Agv"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new XianGongAgvDeviceDriver()).setDevice(device).setDriverDefinition(this); + + } + + @Override + public Class getDeviceDriverType() { + return XianGongAgvDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.agv); + return types; + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/xg_agv/XianGongAgvDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/xg_agv/XianGongAgvDeviceDriver.java new file mode 100644 index 0000000..adbe03d --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/xg_agv/XianGongAgvDeviceDriver.java @@ -0,0 +1,139 @@ +package org.nl.acs.device_driver.basedriver.agv.xg_agv; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.RequiredArgsConstructor; +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.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.Device; +import org.nl.modules.wql.util.SpringContextHolder; + +/** + * 仙工AGV + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class XianGongAgvDeviceDriver extends AbstractOpcDeviceDriver implements + DeviceDriver, + ExecutableDeviceDriver, + RouteableDeviceDriver, + DeviceStageMonitor { + + private final InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); + + /** + * 当前设备号 + */ + private String currentDeviceCode; + + /** + * 当前执行任务号 + */ + private String taskCode = "0"; + + /** + * 电量 + */ + private Double battery_level = 0.0d; + + /** + * 角度 + */ + private Double angle = 0.0d; + + /** + * 当前机器人X坐标 + */ + private Double x = 0.0d; + + /** + * 当前机器人Y坐标 + */ + private Double y = 0.0d; + + /** + * 当前开机时间 ms + */ + private Integer time = 0; + + /** + * 累计运行时间 ms + */ + private Integer total_time = 0; + + /** + * 今日累计行驶里程, 单位 m + */ + private Double today_odo = 0.0d; + + /** + * 累计行驶里程 + */ + private Integer odo = 0; + + /** + * AGV当前状态码 + */ + private Integer status = 0; + + /** + * AGV当前状态对应名称 + */ + private String statusName = this.status == 1 ? "工作中" : this.status == 2 ? "充电中" : this.status == 3 ? "故障" : this.status == 4 ? "休息中" : this.status == 5 ? "关机" : "未知状态"; + + /** + * 当天执行任务数量 + */ + private Integer todayTaskNum = 0; + + /** + * 近一个月执行任务数量 + */ + private Integer monthTaskNum = 0; + + @Override + public Device getDevice() { + return this.device; + } + + @Override + public void execute() throws Exception { + this.currentDeviceCode = this.getDeviceCode(); + this.todayTaskNum = instructionService.findTodayTaskNumByAgvCar(this.currentDeviceCode); + this.monthTaskNum = instructionService.findMonthTaskNumByAgvCar(this.currentDeviceCode); + Thread.sleep(5000); + } + + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + jo.put("device_code", this.currentDeviceCode); + jo.put("device_name", this.currentDeviceCode); + jo.put("task_code", this.taskCode); + jo.put("battery_level", (this.battery_level * 100) + "%"); + jo.put("angle", this.angle); + jo.put("time", this.time / 1000 / 1.0 / 3600); + jo.put("total_time", this.total_time / 1000 / 1.0 / 3600); + jo.put("today_odo", this.today_odo); + jo.put("odo", this.odo); + jo.put("x", this.x); + jo.put("y", this.y); + jo.put("status", this.statusName); + //jo.put("status_name", this.statusName); + jo.put("todayTaskNum", this.todayTaskNum); + jo.put("monthTaskNum", this.monthTaskNum); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/rgv/ItemProtocol.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/rgv/ItemProtocol.java new file mode 100644 index 0000000..0252221 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/rgv/ItemProtocol.java @@ -0,0 +1,133 @@ +package org.nl.acs.device_driver.rgv; + +import lombok.Getter; +import lombok.Setter; +import org.nl.acs.device_driver.shangdianke.PhotoelectricDetectionDeviceDriver; + + +@Getter +@Setter +public class ItemProtocol { + + + public static final String ITEM_HEARTBEAT = "heartbeat"; + public static final String ITEM_MODE = "mode"; + public static final String ITEM_STATUS = "status"; + public static final String ITEM_ERROR = "error"; + public static final String ITEM_ENERGY_LEVEL = "energyLevel"; + public static final String ITEM_TASK_CODE = "taskCode"; + public static final String ITEM_START_DEVICE_CODE = "startDeviceCode"; + public static final String ITEM_NEXT_DEVICE_CODE = "nextDeviceCode"; + public static final String ITEM_VEHICLE_CODE = "vehicleCode"; + public static final String ITEM_X = "x"; + public static final String ITEM_Y = "y"; + public static final String ITEM_ACTION = "action"; + public static final String ITEM_TODAY_TASK_NUM = "todayTaskNum"; + public static final String ITEM_ALL_TASK_NUM = "allTaskNum"; + + + boolean isOnline; + + + private final RGVDeviceDriver driver; + + + public ItemProtocol(RGVDeviceDriver driver) { + this.driver = driver; + } + + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + this.isOnline = false; + return 0; + } else { + this.isOnline = true; + return value; + } + } + + public Double getOpcDoubleValue(String protocol) { + Double value = this.driver.getDoubleValue(protocol); + if (value == null) { + this.isOnline = false; + return 0.0d; + } else { + this.isOnline = true; + return value; + } + } + + public String getOpcStringValue(String protocol) { + String value = this.driver.getStringValue(protocol); + if (value == null) { + this.isOnline = false; + return ""; + } else { + this.isOnline = true; + return value; + } + } + + + public int getHeartbeat() { + return this.getOpcIntegerValue(ItemProtocol.ITEM_HEARTBEAT); + } + + + public int getMode() { + return this.getOpcIntegerValue(ItemProtocol.ITEM_MODE); + } + + + public int getStatus() { + return this.getOpcIntegerValue(ItemProtocol.ITEM_STATUS); + } + + + public int getError() { + return this.getOpcIntegerValue(ItemProtocol.ITEM_ERROR); + } + + + public Double getEnergyLevel() { + return this.getOpcDoubleValue(ItemProtocol.ITEM_ENERGY_LEVEL); + } + + public int getTaskCode() { + return this.getOpcIntegerValue(ItemProtocol.ITEM_TASK_CODE); + } + + public String getStartDeviceCode() { + return this.getOpcStringValue(ItemProtocol.ITEM_START_DEVICE_CODE); + } + + public String getNextDeviceCode() { + return this.getOpcStringValue(ItemProtocol.ITEM_NEXT_DEVICE_CODE); + } + + public String getVehicleCode() { + return this.getOpcStringValue(ItemProtocol.ITEM_VEHICLE_CODE); + } + + public Double getX() { + return this.getOpcDoubleValue(ItemProtocol.ITEM_X); + } + + public Double getY() { + return this.getOpcDoubleValue(ItemProtocol.ITEM_Y); + } + + public int getAction() { + return this.getOpcIntegerValue(ItemProtocol.ITEM_ACTION); + } + + public int getTodayTaskNum() { + return this.getOpcIntegerValue(ItemProtocol.ITEM_TODAY_TASK_NUM); + } + + public int getAllTaskNum() { + return this.getOpcIntegerValue(ItemProtocol.ITEM_ALL_TASK_NUM); + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/rgv/RGVDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/rgv/RGVDeviceDriver.java new file mode 100644 index 0000000..083d2f3 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/rgv/RGVDeviceDriver.java @@ -0,0 +1,243 @@ +package org.nl.acs.device_driver.rgv; + +import com.alibaba.fastjson.JSONObject; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device_driver.*; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.modules.lucene.service.LuceneExecuteLogService; +import org.nl.modules.lucene.service.dto.LuceneLogDto; +import org.nl.modules.wql.util.SpringContextHolder; + +/** + * @author zhangjiangwei + */ +@Slf4j +@Getter +@Setter +@RequiredArgsConstructor +public class RGVDeviceDriver extends AbstractOpcDeviceDriver implements + DeviceDriver, + ExecutableDeviceDriver, + RouteableDeviceDriver, + DeviceStageMonitor, + StandardRequestMethod, + HeartbeatableDeviceDriver { + + private final ItemProtocol itemProtocol = new ItemProtocol(this); + + private final LuceneExecuteLogService logService = SpringContextHolder.getBean(LuceneExecuteLogService.class); + + /** + * 心跳 + */ + private int heartbeat = 0; + private int lastHeartbeat = 0; + + /** + * 工作模式 + */ + private int mode = 0; + private int lastMode = 0; + + /** + * 工作状态 + */ + private int status = 0; + private int lastStatus = 0; + + /** + * 报警信息 + */ + private int error = 0; + private int lastError = 0; + + /** + * 当前电量 + */ + private Double energyLevel = 0.0d; + private Double lastEnergyLevel = 0.0d; + + /** + * 任务号 + */ + private int taskCode = 0; + private int lastTaskCode = 0; + + /** + * 起点 + */ + private String startDeviceCode; + private String lastStartDeviceCode; + + /** + * 终点 + */ + private String nextDeviceCode; + private String lastNextDeviceCode; + + /** + * 载具号 + */ + private String vehicleCode; + private String lastVehicleCode; + + /** + * x坐标 + */ + private Double x; + private Double lastX; + + /** + * y坐标 + */ + private Double y; + private Double lastY; + + /** + * 当前动作 + */ + private int action = 0; + private int lastAction = 0; + + /** + * 当天执行任务数 + */ + private int todayTaskNum = 0; + private int lastTodayTaskNum = 0; + + /** + * 历史执行任务数 + */ + private int allTaskNum = 0; + private int lastAllTaskNum = 0; + + /** + * 当前设备号 + */ + private String currentDeviceCode; + + /** + * 消息 + */ + private String message = ""; + + /** + * 请求标记相关信息 + */ + private boolean requireSuccess = false; + private long requireTime = System.currentTimeMillis(); + private long requireTimeOut = 5000L; + + /** + * 设备异常标记 + */ + private boolean isError = false; + + + @Override + public void execute() throws Exception { + this.currentDeviceCode = this.getDevice().getDevice_code(); + this.heartbeat = this.itemProtocol.getHeartbeat(); + this.mode = this.itemProtocol.getMode(); + this.status = this.itemProtocol.getStatus(); + this.error = this.itemProtocol.getError(); + this.energyLevel = this.itemProtocol.getEnergyLevel(); + this.taskCode = this.itemProtocol.getTaskCode(); + this.startDeviceCode = this.itemProtocol.getStartDeviceCode(); + this.nextDeviceCode = this.itemProtocol.getNextDeviceCode(); + this.vehicleCode = this.itemProtocol.getVehicleCode(); + this.x = this.itemProtocol.getX(); + this.y = this.itemProtocol.getY(); + this.action = this.itemProtocol.getAction(); + this.todayTaskNum = this.itemProtocol.getTodayTaskNum(); + this.allTaskNum = this.itemProtocol.getAllTaskNum(); + + if (this.mode != this.lastMode) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号mode发生变化 " + this.lastMode + "->" + this.mode)); + } + if (this.status != this.lastStatus) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号status发生变化 " + this.lastStatus + "->" + this.status)); + } + if (this.error != this.lastError) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号error发生变化 " + this.lastError + "->" + this.error)); + } + if (!this.energyLevel.equals(this.lastEnergyLevel)) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号energyLevel发生变化 " + this.lastEnergyLevel + "->" + this.energyLevel)); + } + if (this.taskCode != this.lastTaskCode) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号taskCode发生变化 " + this.lastTaskCode + "->" + this.taskCode)); + } + if (!this.startDeviceCode.equals(this.lastStartDeviceCode)) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号startDeviceCode发生变化 " + this.lastStartDeviceCode + "->" + this.startDeviceCode)); + } + if (!this.nextDeviceCode.equals(this.lastNextDeviceCode)) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号nextDeviceCode发生变化 " + this.lastNextDeviceCode + "->" + this.nextDeviceCode)); + } + if (!this.vehicleCode.equals(this.lastVehicleCode)) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号vehicleCode发生变化 " + this.lastVehicleCode + "->" + this.vehicleCode)); + } + if (!this.x.equals(this.lastX)) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号x发生变化 " + this.lastX + "->" + this.x)); + } + if (!this.y.equals(this.lastY)) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号y发生变化 " + this.lastY + "->" + this.y)); + } + if (this.action != this.lastAction) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号action发生变化 " + this.lastAction + "->" + this.action)); + } + if (this.todayTaskNum != this.lastTodayTaskNum) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号todayTaskNum发生变化 " + this.lastTodayTaskNum + "->" + this.todayTaskNum)); + } + if (this.allTaskNum != this.lastAllTaskNum) { + logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "信号allTaskNum发生变化 " + this.lastAllTaskNum + "->" + this.allTaskNum)); + } + + this.lastMode = this.mode; + this.lastStatus = this.status; + this.lastError = this.error; + this.lastEnergyLevel = this.energyLevel; + this.lastTaskCode = this.taskCode; + this.lastStartDeviceCode = this.startDeviceCode; + this.lastNextDeviceCode = this.nextDeviceCode; + this.lastVehicleCode = this.vehicleCode; + this.lastX = this.x; + this.lastY = this.y; + this.lastAction = this.action; + this.lastTodayTaskNum = this.todayTaskNum; + this.lastAllTaskNum = this.allTaskNum; + } + + + @Override + public JSONObject getDeviceStatusName() throws Exception { + JSONObject jo = new JSONObject(); + jo.put("device_code", this.currentDeviceCode); + jo.put("device_name", this.currentDeviceCode); + jo.put("heartbeat", this.heartbeat); + jo.put("mode", this.mode == 1 ? "手动" : this.mode == 2 ? "自动" : "未知"); + jo.put("status", this.error > 0 ? "故障" : this.status == 0 ? "休息中" : this.status == 1 ? "工作中" : this.status == 2 ? "充电中" : "未知状态"); + jo.put("error", this.error); + jo.put("battery_level", (this.energyLevel * 100) + "%"); + jo.put("task_code", this.taskCode); + jo.put("startDeviceCode", this.startDeviceCode); + jo.put("nextDeviceCode", this.nextDeviceCode); + jo.put("vehicleCode", this.vehicleCode); + jo.put("x", this.x); + jo.put("y", this.y); + jo.put("action", this.action); + jo.put("todayTaskNum", this.todayTaskNum); + jo.put("allTaskNum", this.allTaskNum); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/rgv/RGVStationDefinition.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/rgv/RGVStationDefinition.java new file mode 100644 index 0000000..804ecd7 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/rgv/RGVStationDefinition.java @@ -0,0 +1,77 @@ +package org.nl.acs.device_driver.rgv; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDTO; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.definition.OpcDeviceDriverDefinition; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +/** + * @author zhangjiangwei + */ +@Service +public class RGVStationDefinition implements OpcDeviceDriverDefinition { + + @Override + public String getDriverCode() { + return "rgv_station"; + } + + @Override + public String getDriverName() { + return "RGV"; + } + + @Override + public String getDriverDescription() { + return "RGV"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return new RGVDeviceDriver().setDevice(device).setDriverDefinition(this); + } + + @Override + public Class getDeviceDriverType() { + return RGVDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList<>(); + types.add(DeviceType.rgv); + return types; + } + + @Override + public List getReadableItemDTOs() { + ArrayList itemDTOs = new ArrayList<>(); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_HEARTBEAT, "心跳", "DB1101.B1")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_MODE, "工作模式", "DB1101.B2")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_STATUS, "工作状态", "DB1101.B3")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_ERROR, "报警信息", "DB1101.B4")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_ENERGY_LEVEL, "当前电量", "DB1101.D5")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_TASK_CODE, "当前执行任务号", "DB1101.D6")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_START_DEVICE_CODE, "任务起点", "DB1101.S7")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_NEXT_DEVICE_CODE, "任务终点", "DB1101.S8")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_VEHICLE_CODE, "载具号", "DB1101.S9")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_X, "x坐标", "DB1101.D10")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_Y, "y坐标", "DB1101.D11")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_ACTION, "当前动作", "DB1101.B12")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_TODAY_TASK_NUM, "当天执行任务数", "DB1101.D13")); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_ALL_TASK_NUM, "历史执行任务数", "DB1101.D14")); + return itemDTOs; + } + + @Override + public List getWriteableItemDTOs() { + ArrayList itemDTOs = new ArrayList<>(); + return itemDTOs; + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/ItemProtocol.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/ItemProtocol.java index fd34a3c..0d4bfc4 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/ItemProtocol.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/ItemProtocol.java @@ -2,6 +2,10 @@ package org.nl.acs.device_driver.shangdianke; import lombok.Getter; import lombok.Setter; +import org.nl.acs.device.device_driver.standard_inspect.ItemDTO; + +import java.util.ArrayList; +import java.util.List; /** * @author zhangjiangwei @@ -10,17 +14,6 @@ import lombok.Setter; @Setter public class ItemProtocol { - - /** - * 心跳 - */ -// public static final String ITEM_HEARTBEAT = "heartbeat"; - - /** - * 工作模式 - */ -// public static final String ITEM_MODE = "mode"; - /** * 光电信号 */ @@ -29,17 +22,8 @@ public class ItemProtocol { /** * 动作信号 */ -// public static final String ITEM_ACTION = "action"; - - /** - * 报警信号 - */ -// public static final String ITEM_ERROR = "error"; + public static final String ITEM_ACTION = "action"; - /** - * 下发命令 - */ -// public static final String ITEM_TO_COMMAND = "to_command"; boolean isOnline; @@ -60,22 +44,23 @@ public class ItemProtocol { } } -// public int getHeartbeat() { -// return this.getOpcIntegerValue(ItemProtocol.ITEM_HEARTBEAT); -// } -// public int getMode() { -// return this.getOpcIntegerValue(ItemProtocol.ITEM_MODE); -// } public int getMove() { return this.getOpcIntegerValue(ItemProtocol.ITEM_MOVE); } -// public int getAction() { -// return this.getOpcIntegerValue(ItemProtocol.ITEM_ACTION); -// } -// public int getError() { -// return this.getOpcIntegerValue(ItemProtocol.ITEM_ERROR); -// } -// public int getToCommand() { -// return this.getOpcIntegerValue(ItemProtocol.ITEM_TO_COMMAND); -// } + + public int getAction() { + return this.getOpcIntegerValue(ItemProtocol.ITEM_ACTION); + } + + public List getReadableItemDTOs() { + ArrayList itemDTOs = new ArrayList<>(); + itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_MOVE, "光电信号", "")); + return itemDTOs; + } + + public List getWriteableItemDTOs() { + ArrayList itemDTOs = new ArrayList<>(); + return itemDTOs; + } + } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/PhotoelectricDetectionDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/PhotoelectricDetectionDeviceDriver.java index 8bb7cae..ac77b4d 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/PhotoelectricDetectionDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/PhotoelectricDetectionDeviceDriver.java @@ -35,17 +35,6 @@ import java.util.Map; @RequiredArgsConstructor public class PhotoelectricDetectionDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor, StandardRequestMethod, HeartbeatableDeviceDriver { - /** - * 心跳 - */ -// private int heartbeat = 0; -// private int lastHeartbeat = this.heartbeat; - - /** - * 工作模式 - */ -// private int mode = 0; -// private int lastMode = this.mode; /** * 光电信号 @@ -53,23 +42,6 @@ public class PhotoelectricDetectionDeviceDriver extends AbstractOpcDeviceDriver private int move = 0; private int lastMove = 0; - /** - * 动作信号 - */ -// private int action = 0; -// private int lastAction = this.action; - - /** - * 报警信号 - */ -// private int error = 0; -// private int lastError = this.error; - - /** - * 下发命令 - */ -// private int toCommand = 0; -// private int lastToCommand = this.toCommand; private static final int MODE = 3; @@ -97,20 +69,13 @@ public class PhotoelectricDetectionDeviceDriver extends AbstractOpcDeviceDriver try { this.currentDeviceCode = this.getDeviceCode(); -// this.heartbeat = this.itemProtocol.getHeartbeat(); -// this.mode = this.itemProtocol.getMode(); this.move = this.itemProtocol.getMove(); -// this.action = this.itemProtocol.getAction(); -// this.error = this.itemProtocol.getError(); -// this.toCommand = this.itemProtocol.getToCommand(); if (this.move != this.lastMove) { if (move == 0) { requireSuccess = false; } } - -// if (mode > 0 && !requireSuccess) { if (!requireSuccess) { Object methodName = this.device.getExtraValue().get(String.valueOf(MODE)); if (ObjectUtil.isNotEmpty(methodName)) { @@ -121,13 +86,10 @@ public class PhotoelectricDetectionDeviceDriver extends AbstractOpcDeviceDriver log.error(e.getMessage(), e); String message = "执行工作模式对应方法 " + methodName + " 错误!错误信息:" + e.getMessage(); this.message = message; - this.deviceExecuteLogService.deviceExecuteLog(this.currentDeviceCode, "", "", message); - this.isError = true; } } else { String message = "未知工作模式,驱动未配置对应方法。"; this.message = message; - this.deviceExecuteLogService.deviceExecuteLog(this.currentDeviceCode, "", "", message); } } @@ -136,12 +98,7 @@ public class PhotoelectricDetectionDeviceDriver extends AbstractOpcDeviceDriver log.error(e.getMessage(), e); return; } -// this.lastHeartbeat = this.heartbeat; -// this.lastMode = this.mode; this.lastMove = this.move; -// this.lastAction = this.action; -// this.lastError = this.error; -// this.lastToCommand = this.toCommand; } private void executionMethodByMode(String methodName) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/PhotoelectricDetectionStationDefinition.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/PhotoelectricDetectionStationDefinition.java index 5510cbb..9d1712a 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/PhotoelectricDetectionStationDefinition.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/shangdianke/PhotoelectricDetectionStationDefinition.java @@ -52,18 +52,13 @@ public class PhotoelectricDetectionStationDefinition implements OpcDeviceDriverD @Override public List getReadableItemDTOs() { ArrayList itemDTOs = new ArrayList<>(); -// itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_HEARTBEAT, "心跳", "")); -// itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_MODE, "工作模式", "")); itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_MOVE, "光电信号", "")); -// itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_ACTION, "动作信号", "")); -// itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_ERROR, "报警信号", "")); return itemDTOs; } @Override public List getWriteableItemDTOs() { ArrayList itemDTOs = new ArrayList<>(); -// itemDTOs.add(new ItemDTO(ItemProtocol.ITEM_TO_COMMAND, "下发命令", "")); return itemDTOs; } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/RequestAdapter.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/RequestAdapter.java new file mode 100644 index 0000000..a94136b --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/RequestAdapter.java @@ -0,0 +1,10 @@ +package org.nl.acs.ext; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/4/22 + */ +public interface RequestAdapter { + String getUrl(); +} \ No newline at end of file diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/ResponseAdapter.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/ResponseAdapter.java new file mode 100644 index 0000000..b28363f --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/ResponseAdapter.java @@ -0,0 +1,12 @@ +package org.nl.acs.ext; + + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/4/22 + */ +public interface ResponseAdapter { + public UnifiedResponse adapt(String responseBody, Class type); +} + diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/UnifiedResponse.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/UnifiedResponse.java new file mode 100644 index 0000000..d920da5 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/UnifiedResponse.java @@ -0,0 +1,37 @@ +package org.nl.acs.ext; + + +public class UnifiedResponse { + private boolean success; + private String message; + private T data; + + public UnifiedResponse(boolean success, String message, T data) { + this.success = success; + this.message = message; + this.data = data; + } + + + public UnifiedResponse(boolean success, String message) { + this.success = success; + this.message = message; + } + + public boolean isSuccess() { + return this.success; + } + + public String getMessage() { + return this.message; + } + + public T getData() { + return this.data; + } + + public void setData(T data) { + this.data = data; + } +} + diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/OtherToInterfaceLogAspect.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/OtherToInterfaceLogAspect.java new file mode 100644 index 0000000..5eb9d8e --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/OtherToInterfaceLogAspect.java @@ -0,0 +1,93 @@ +package org.nl.acs.ext.log; + +import com.alibaba.fastjson.JSON; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.nl.acs.ext.wms.IpUtil; +import org.nl.modules.lucene.service.LuceneExecuteLogService; +import org.nl.modules.lucene.service.dto.LuceneLogDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +import java.lang.reflect.Method; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/7/8 + */ +@Aspect +@Component +public class OtherToInterfaceLogAspect { + + @Autowired + private LuceneExecuteLogService logService; + + @Around("@annotation(org.nl.acs.ext.log.OthersToInterfaceLog)") + public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { + long startTime = System.currentTimeMillis(); + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + Class targetClass = joinPoint.getTarget().getClass(); + RequestMapping classRequestMapping = targetClass.getAnnotation(RequestMapping.class); + String classUrlValue = classRequestMapping != null ? String.join(",", classRequestMapping.value()) : "No Class Annotation"; + + String methodUrlValue = ""; + if (method.isAnnotationPresent(GetMapping.class)) { + GetMapping getMapping = method.getAnnotation(GetMapping.class); + methodUrlValue = String.join(",", getMapping.value()); + } else if (method.isAnnotationPresent(PostMapping.class)) { + PostMapping postMapping = method.getAnnotation(PostMapping.class); + methodUrlValue = String.join(",", postMapping.value()); + } else if (method.isAnnotationPresent(PutMapping.class)) { + PutMapping putMapping = method.getAnnotation(PutMapping.class); + methodUrlValue = String.join(",", putMapping.value()); + } else if (method.isAnnotationPresent(DeleteMapping.class)) { + DeleteMapping deleteMapping = method.getAnnotation(DeleteMapping.class); + methodUrlValue = String.join(",", deleteMapping.value()); + } else if (method.isAnnotationPresent(RequestMapping.class)) { + RequestMapping methodRequestMapping = method.getAnnotation(RequestMapping.class); + methodUrlValue = String.join(",", methodRequestMapping.value()); + } + String request_direction = ""; + if (method.isAnnotationPresent(OthersToInterfaceLog.class)) { + OthersToInterfaceLog interfaceLog = method.getAnnotation(OthersToInterfaceLog.class); + request_direction = interfaceLog.value(); + } + + String methodName = joinPoint.getSignature().getName(); + Object[] args = joinPoint.getArgs(); + + LuceneLogDto logDto = + LuceneLogDto.builder() + .logType("接口日志") + .request_url(IpUtil.localIP() + classUrlValue + methodUrlValue) + .request_direction(request_direction) + .request_param(JSON.toJSONString(args)) + .method(methodName) + .content("开始请求") + .build(); + logService.interfaceExecuteLog(logDto); + + Object result = joinPoint.proceed(); + + logDto = + LuceneLogDto.builder() + .logType("接口日志") + .request_url(IpUtil.localIP() + classUrlValue + methodUrlValue) + .request_direction(request_direction) + .request_param(JSON.toJSONString(args)) + .method(methodName) + .response_param(JSON.toJSONString(result)) + .executeTime(System.currentTimeMillis() - startTime) + .content("响应请求") + .build(); + logService.interfaceExecuteLog(logDto); + return result; + } +} \ No newline at end of file diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/OthersToInterfaceLog.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/OthersToInterfaceLog.java new file mode 100644 index 0000000..6c4afbb --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/OthersToInterfaceLog.java @@ -0,0 +1,12 @@ +package org.nl.acs.ext.log; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface OthersToInterfaceLog { + String value() default ""; +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/ToOtherInterfaceLogAspect.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/ToOtherInterfaceLogAspect.java new file mode 100644 index 0000000..4793750 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/ToOtherInterfaceLogAspect.java @@ -0,0 +1,123 @@ +package org.nl.acs.ext.log; + +import com.alibaba.fastjson.JSON; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.nl.modules.lucene.service.LuceneExecuteLogService; +import org.nl.modules.lucene.service.dto.LuceneLogDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.ReflectionUtils; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/7/8 + */ +@Aspect +@Component +public class ToOtherInterfaceLogAspect { + + private static final ConcurrentMap, Field> fieldCache = new ConcurrentHashMap<>(); + private static final ConcurrentMap, Method> methodCache = new ConcurrentHashMap<>(); + + @Autowired + private LuceneExecuteLogService logService; + + @Around("@annotation(org.nl.acs.ext.log.ToOthersInterfaceLog)") + public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { + long startTime = System.currentTimeMillis(); + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + + String request_direction = ""; + if (method.isAnnotationPresent(ToOthersInterfaceLog.class)) { + ToOthersInterfaceLog interfaceLog = method.getAnnotation(ToOthersInterfaceLog.class); + request_direction = interfaceLog.value(); + } + String methodName = joinPoint.getSignature().getName(); + Object[] args = joinPoint.getArgs(); + Object url = ""; + Object requesr_param = ""; + if (args.length > 1) { + url = args[0]; + requesr_param = args[1]; + } + + Class targetClass = joinPoint.getTarget().getClass(); + + Object ipPort = ""; + try { + Field requestAdapterField = fieldCache.computeIfAbsent(targetClass, clazz -> { + try { + Field field = clazz.getDeclaredField("REQUEST_ADAPTER"); + ReflectionUtils.makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); + } + }); + + Object requestAdapterObject = requestAdapterField.get(null); + + Method getUrlMethod = methodCache.computeIfAbsent(requestAdapterObject.getClass(), clazz -> { + try { + Method m = clazz.getDeclaredMethod("getUrl"); + ReflectionUtils.makeAccessible(m); + return m; + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + }); + + ipPort = getUrlMethod.invoke(requestAdapterObject); + } catch (Exception e) { + LuceneLogDto logDto = + LuceneLogDto.builder() + .logType("接口日志") + .request_url(ipPort + String.valueOf(url)) + .request_direction(request_direction) + .request_param(JSON.toJSONString(requesr_param)) + .method(methodName) + .content("开始请求,获取url失败," + e.getMessage()) + .build(); + logService.interfaceExecuteLog(logDto); + } + + LuceneLogDto logDto = + LuceneLogDto.builder() + .logType("接口日志") + .request_url(ipPort + String.valueOf(url)) + .request_direction(request_direction) + .request_param(JSON.toJSONString(requesr_param)) + .method(methodName) + .content("开始请求") + .build(); + logService.interfaceExecuteLog(logDto); + + Object result = joinPoint.proceed(); + + logDto = + LuceneLogDto.builder() + .logType("接口日志") + .request_url(ipPort + String.valueOf(url)) + .request_direction(request_direction) + .request_param(JSON.toJSONString(requesr_param)) + .method(methodName) + .response_param(JSON.toJSONString(result)) + .executeTime(System.currentTimeMillis() - startTime) + .content("响应请求") + .build(); + logService.interfaceExecuteLog(logDto); + return result; + } +} \ No newline at end of file diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/ToOthersInterfaceLog.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/ToOthersInterfaceLog.java new file mode 100644 index 0000000..76b74b3 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/log/ToOthersInterfaceLog.java @@ -0,0 +1,12 @@ +package org.nl.acs.ext.log; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface ToOthersInterfaceLog { + String value() default ""; +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/IpUtil.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/IpUtil.java new file mode 100644 index 0000000..6c969f0 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/IpUtil.java @@ -0,0 +1,35 @@ +package org.nl.acs.ext.wms; + +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.Enumeration; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/6/25 + */ +public class IpUtil { + + public static final String LOCAL_IP = localIP(); + + public static String localIP() { + try { + Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); + while (networkInterfaces.hasMoreElements()) { + NetworkInterface networkInterface = networkInterfaces.nextElement(); + Enumeration inetAddresses = networkInterface.getInetAddresses(); + while (inetAddresses.hasMoreElements()) { + InetAddress inetAddress = inetAddresses.nextElement(); + if (!inetAddress.isLoopbackAddress() && inetAddress instanceof java.net.Inet4Address) { + return inetAddress.getHostAddress(); + } + } + } + } catch (SocketException e) { + e.printStackTrace(); + } + return ""; + } +} \ No newline at end of file diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/LmsHttpUtil.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/LmsHttpUtil.java new file mode 100644 index 0000000..d40b2da --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/LmsHttpUtil.java @@ -0,0 +1,133 @@ +package org.nl.acs.ext.wms; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSON; +import org.nl.acs.config.AcsConfig; +import org.nl.acs.ext.RequestAdapter; +import org.nl.acs.ext.ResponseAdapter; +import org.nl.acs.ext.UnifiedResponse; +import org.nl.acs.ext.log.ToOthersInterfaceLog; +import org.nl.modules.system.service.ParamService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/4/22 + */ +@Component +public class LmsHttpUtil { + + private static final RequestAdapter REQUEST_ADAPTER = new LmsRequestAdapter(); + private static final ResponseAdapter RESPONSE_ADAPTER = new LmsResponseAdapter(); + + @Autowired + private ParamService paramService; + + @ToOthersInterfaceLog("ACS->LMS") + public UnifiedResponse sendPostRequest(String path, W requestParam, Class type) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.HAS_WMS).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .post(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(5000) + .body(JSON.toJSONString(requestParam)) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, type); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + @ToOthersInterfaceLog("ACS->LMS") + public UnifiedResponse sendPostRequest(String path, W requestParam) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.HAS_WMS).getValue(),"1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .post(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(5000) + .body(JSON.toJSONString(requestParam)) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, null); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + @ToOthersInterfaceLog("ACS->LMS") + public UnifiedResponse sendPostRequest(String path, Class type) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.HAS_WMS).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .post(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(5000) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, type); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + @ToOthersInterfaceLog("ACS->LMS") + public UnifiedResponse sendPostRequest(String path) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.HAS_WMS).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .post(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(5000) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, null); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + @ToOthersInterfaceLog("ACS->LMS") + public UnifiedResponse sendGetRequest(String path, Class type) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.HAS_WMS).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .get(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(5000) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, type); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + @ToOthersInterfaceLog("ACS->LMS") + public UnifiedResponse sendGetRequest(String path) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.HAS_WMS).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .get(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(5000) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, null); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/LmsRequestAdapter.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/LmsRequestAdapter.java new file mode 100644 index 0000000..eda2aa8 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/LmsRequestAdapter.java @@ -0,0 +1,20 @@ +package org.nl.acs.ext.wms; + + +import org.nl.acs.config.AcsConfig; +import org.nl.acs.ext.RequestAdapter; +import org.nl.modules.system.service.ParamService; +import org.nl.modules.wql.util.SpringContextHolder; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/4/22 + */ +public class LmsRequestAdapter implements RequestAdapter { + @Override + public String getUrl() { + ParamService paramService = SpringContextHolder.getBean(ParamService.class); + return paramService.findByCode(AcsConfig.WMS_URL).getValue(); + } +} \ No newline at end of file diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/LmsResponseAdapter.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/LmsResponseAdapter.java new file mode 100644 index 0000000..5ddb825 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/LmsResponseAdapter.java @@ -0,0 +1,31 @@ +package org.nl.acs.ext.wms; + +import com.alibaba.fastjson.JSONObject; +import org.nl.acs.ext.ResponseAdapter; +import org.nl.acs.ext.UnifiedResponse; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/4/22 + */ +public class LmsResponseAdapter implements ResponseAdapter { + + @Override + public UnifiedResponse adapt(String responseBody, Class type) { + JSONObject jsonResponse = JSONObject.parseObject(responseBody); + boolean isSuccess = jsonResponse.getInteger("code") == 200; + String message = jsonResponse.getString("message"); + if (type != null) { + if (type.isArray()) { + T data = JSONObject.toJavaObject(jsonResponse.getJSONArray("content"), type); + return new UnifiedResponse<>(isSuccess, message, data); + } else { + T data = JSONObject.toJavaObject(jsonResponse.getJSONObject("data"), type); + return new UnifiedResponse<>(isSuccess, message, data); + } + } + return new UnifiedResponse<>(isSuccess, message); + } + +} \ No newline at end of file diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java index 596780c..c5af279 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java @@ -8,8 +8,13 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.ext.log.OthersToInterfaceLog; import org.nl.acs.ext.wms.service.WmsToAcsService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; import org.nl.modules.logging.annotation.Log; +import org.nl.modules.wql.util.SpringContextHolder; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; @@ -31,16 +36,30 @@ public class WmsToAcsController { private final WmsToAcsService wmstoacsService; @PostMapping("/task") - @Log("接收WMS任务") - @ApiOperation("接收WMS任务") + @OthersToInterfaceLog("LMS->ACS") public ResponseEntity createFromWms(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(wmstoacsService.createFromWms(whereJson), HttpStatus.OK); } @PostMapping("/cancelTask") - @Log("WMS取消任务") - @ApiOperation("WMS取消任务") + @OthersToInterfaceLog("LMS->ACS") public ResponseEntity cancelFromWms(@RequestBody String whereJson) throws Exception { return new ResponseEntity<>(wmstoacsService.cancelFromWms(whereJson), HttpStatus.OK); } + + @PostMapping("/获取AGV和RGV数据") + @OthersToInterfaceLog("LMS->ACS") + public ResponseEntity getAGVAndRGVInfo() { + return new ResponseEntity<>(wmstoacsService.getAGVAndRGVInfo(), HttpStatus.OK); + } + + @PostMapping("/test") + public ResponseEntity test() throws Exception { + DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); + Device device = deviceAppService.findDeviceByCode("AMB-01"); + if (device.getDeviceDriver() instanceof DeviceStageMonitor) { + DeviceStageMonitor monitorService = (DeviceStageMonitor) device.getDeviceDriver(); + } + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java index 965066e..6ad94ad 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java @@ -1,5 +1,6 @@ package org.nl.acs.ext.wms.service; +import org.nl.acs.ext.UnifiedResponse; import org.nl.acs.ext.wms.data.BaseRequest; public interface AcsToWmsService { @@ -9,4 +10,8 @@ public interface AcsToWmsService { */ public String applyTask(BaseRequest request); + UnifiedResponse apply(BaseRequest requestParam); + + UnifiedResponse apply(BaseRequest requestParam, Class type); + } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java index cae6591..fb766cb 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java @@ -24,4 +24,5 @@ public interface WmsToAcsService { */ Map cancelFromWms(String jsonObject) throws Exception; + JSONObject getAGVAndRGVInfo(); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java index a28fa5c..b10945f 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java @@ -3,6 +3,9 @@ package org.nl.acs.ext.wms.service.impl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.address.service.AddressService; +import org.nl.acs.device.address.service.dto.AddressDto; +import org.nl.acs.ext.UnifiedResponse; +import org.nl.acs.ext.wms.LmsHttpUtil; import org.nl.acs.ext.wms.LmsUtil; import org.nl.acs.ext.wms.data.BaseRequest; import org.nl.acs.ext.wms.service.AcsToWmsService; @@ -18,10 +21,25 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Autowired private AddressService addressService; + @Autowired + private LmsHttpUtil lmsHttpUtil; + @Override public String applyTask(BaseRequest requestParam) { String api = addressService.findByCode("lnshApplyTaskToWms").getMethods_url(); String result = LmsUtil.notifyAcs(api, requestParam); return result; } + + @Override + public UnifiedResponse apply(BaseRequest requestParam) { + AddressDto addressDto = addressService.findByCode("lnshApplyTaskToWms"); + return lmsHttpUtil.sendPostRequest(addressDto.getMethods_url(), requestParam); + } + + @Override + public UnifiedResponse apply(BaseRequest requestParam, Class type) { + AddressDto addressDto = addressService.findByCode("lnshApplyTaskToWms"); + return lmsHttpUtil.sendPostRequest(addressDto.getMethods_url(), requestParam, type); + } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index 240d922..716ccdd 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -6,21 +6,28 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.acs.agv.AgvUtil; import org.nl.acs.config.AcsConfig; import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.ext.wms.data.wmsToAcsData.createTask.CreateTaskRequest; import org.nl.acs.ext.wms.data.wmsToAcsData.createTask.CreateTaskResponse; import org.nl.acs.ext.wms.service.WmsToAcsService; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.dto.Instruction; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.opc.DeviceType; 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.modules.lucene.service.LuceneExecuteLogService; import org.nl.modules.lucene.service.dto.LuceneLogDto; +import org.nl.modules.quartz.task.DeviceStatusMonitor; import org.nl.modules.system.service.ParamService; import org.nl.modules.system.service.impl.ParamServiceImpl; import org.nl.modules.wql.core.bean.WQLObject; @@ -30,6 +37,7 @@ import org.slf4j.MDC; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -42,6 +50,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { private final TaskService TaskService; private final DeviceService DeviceService; private final RouteLineService RouteLineService; + private final DeviceAppService deviceAppService; private String log_file_type = "log_file_type"; private String log_type = "WMS下发ACS"; @@ -241,13 +250,13 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { resp.setMessage("请求成功"); log.info("createFromWms - 返回参数 {}", JSON.toJSON(resp)); - LuceneLogDto logDto = LuceneLogDto.builder() - .requestparam(JSON.toJSON(resp).toString()) - .responseparam(JSON.toJSON(resp).toString()) - .status_code(String.valueOf(resp.getCode())) - .method(tasks.getRequest_medthod_code()) - .build(); - lucene.interfaceExecuteLog(logDto); +// LuceneLogDto logDto = LuceneLogDto.builder() +// .requestparam(JSON.toJSON(resp).toString()) +// .responseparam(JSON.toJSON(resp).toString()) +// .status_code(String.valueOf(resp.getCode())) +// .method(tasks.getRequest_medthod_code()) +// .build(); +// lucene.interfaceExecuteLog(logDto); return (JSONObject) JSON.toJSON(resp); } finally { MDC.remove(log_file_type); @@ -301,4 +310,29 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { MDC.remove(log_file_type); } } + + @SneakyThrows + @Override + public JSONObject getAGVAndRGVInfo() { + JSONObject resp = new JSONObject(); + List agvs = deviceAppService.findDevice(DeviceType.agv); + List agvInfos = new ArrayList<>(); + for (Device agv : agvs) { + if (agv != null && agv.getDeviceDriver() instanceof DeviceStatusMonitor) { + DeviceStageMonitor deviceStageMonitor = (DeviceStageMonitor) agv.getDeviceDriver(); + agvInfos.add(deviceStageMonitor.getDeviceStatusName()); + } + } + resp.put("agv", agvInfos); + List rgvs = deviceAppService.findDevice(DeviceType.rgv); + List rgvInfos = new ArrayList<>(); + for (Device rgv : rgvs) { + if (rgv != null && rgv.getDeviceDriver() instanceof DeviceStatusMonitor) { + DeviceStageMonitor deviceStageMonitor = (DeviceStageMonitor) rgv.getDeviceDriver(); + rgvInfos.add(deviceStageMonitor.getDeviceStatusName()); + } + } + resp.put("rgv", rgvInfos); + return resp; + } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/xg/XgHttpUtil.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/xg/XgHttpUtil.java new file mode 100644 index 0000000..9ecd29b --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/xg/XgHttpUtil.java @@ -0,0 +1,135 @@ +package org.nl.acs.ext.xg; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSON; +import org.nl.acs.config.AcsConfig; +import org.nl.acs.ext.RequestAdapter; +import org.nl.acs.ext.ResponseAdapter; +import org.nl.acs.ext.UnifiedResponse; +import org.nl.acs.ext.log.ToOthersInterfaceLog; +import org.nl.modules.system.service.ParamService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/4/22 + */ +@Component +public class XgHttpUtil { + + private static final RequestAdapter REQUEST_ADAPTER = new XgRequestAdapter(); + private static final ResponseAdapter RESPONSE_ADAPTER = new XgResponseAdapter(); + + @Autowired + private ParamService paramService; + + @ToOthersInterfaceLog("ACS->AGV") + public UnifiedResponse sendPostRequest(String path, W requestParam, Class type) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .post(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(10000) + .body(JSON.toJSONString(requestParam)) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, type); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + @ToOthersInterfaceLog("ACS->AGV") + public UnifiedResponse sendPostRequest(String path, W requestParam) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .post(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(10000) + .body(JSON.toJSONString(requestParam)) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, null); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + @ToOthersInterfaceLog("ACS->AGV") + public UnifiedResponse sendPostRequest(String path, Class type) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .post(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(10000) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, type); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + + @ToOthersInterfaceLog("ACS->AGV") + public UnifiedResponse sendPostRequest(String path) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .post(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(10000) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, null); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + + @ToOthersInterfaceLog("ACS->AGV") + public UnifiedResponse sendGetRequest(String path, Class type) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(),"1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .get(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(10000) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, type); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + + @ToOthersInterfaceLog("ACS->AGV") + public UnifiedResponse sendGetRequest(String path) { + if (!StrUtil.equals(paramService.findByCode(AcsConfig.FORK_AGV).getValue(), "1")) { + return new UnifiedResponse<>(false, "未开启连接该系统!"); + } + try { + String body = HttpRequest + .get(REQUEST_ADAPTER.getUrl() + path) + .setConnectionTimeout(10000) + .execute() + .body(); + return RESPONSE_ADAPTER.adapt(body, null); + } catch (Exception e) { + return new UnifiedResponse<>(false, e.getMessage()); + } + } + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/xg/XgRequestAdapter.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/xg/XgRequestAdapter.java new file mode 100644 index 0000000..09dc4b2 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/xg/XgRequestAdapter.java @@ -0,0 +1,21 @@ +package org.nl.acs.ext.xg; + +import org.nl.acs.config.AcsConfig; +import org.nl.acs.ext.RequestAdapter; +import org.nl.modules.system.service.ParamService; +import org.nl.modules.wql.util.SpringContextHolder; + + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/4/22 + */ +public class XgRequestAdapter implements RequestAdapter { + @Override + public String getUrl() { + ParamService paramService = SpringContextHolder.getBean(ParamService.class); + return paramService.findByCode(AcsConfig.AGV_URL).getValue(); + } + +} \ No newline at end of file diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/xg/XgResponseAdapter.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/xg/XgResponseAdapter.java new file mode 100644 index 0000000..f0aa34f --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/xg/XgResponseAdapter.java @@ -0,0 +1,44 @@ +package org.nl.acs.ext.xg; + + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.acs.ext.ResponseAdapter; +import org.nl.acs.ext.UnifiedResponse; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/4/22 + */ +public class XgResponseAdapter implements ResponseAdapter { + + @Override + public UnifiedResponse adapt(String responseBody, Class type) { + responseBody = responseBody.trim(); + if (responseBody.startsWith("{") && responseBody.endsWith("}")) { + JSONObject resp = JSON.parseObject(responseBody); + String message = resp.containsKey("msg") ? resp.getString("msg") : ""; + if (resp.containsKey("code") && resp.getInteger("code") != 0) { + return new UnifiedResponse<>(false, message); + } else { + if (type != null) { + T data = JSONObject.toJavaObject(resp, type); + return new UnifiedResponse<>(true, message, data); + } + return new UnifiedResponse<>(true, message, (T) resp); + } + } else if (responseBody.startsWith("[") && responseBody.endsWith("]")) { + JSONArray resp = JSON.parseArray(responseBody); + if (type != null) { + T data = JSONObject.toJavaObject(resp, type); + return new UnifiedResponse<>(true, "success", data); + } else { + return new UnifiedResponse<>(true, "success", (T) resp); + } + } else { + return new UnifiedResponse<>(false, "failed,响应数据为空!"); + } + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java b/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java index cc48d9a..1835a67 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java @@ -198,4 +198,7 @@ public interface InstructionService { void sendToAGV(String id); + Integer findTodayTaskNumByAgvCar(String currentDeviceCode); + + Integer findMonthTaskNumByAgvCar(String currentDeviceCode); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index c7b9672..dee2cea 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -19,6 +19,7 @@ import org.nl.acs.config.AcsConfig; import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.impl.DeviceServiceImpl; import org.nl.acs.device_driver.lamp_three_color.LampThreecolorDeviceDriver; +import org.nl.acs.ext.UnifiedResponse; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.dto.Instruction; import org.nl.acs.opc.Device; @@ -271,10 +272,6 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu dto.setNext_parent_code(task.getNext_parent_code()); - WQLObject wo = WQLObject.getWQLObject("acs_instruction"); - JSONObject json = (JSONObject) JSONObject.toJSON(dto); - wo.insert(json); - try { // != 0 为agv任务 if (!StrUtil.equals(type, "0")) { @@ -295,8 +292,8 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu if (StrUtil.equals(task.getRequest_again_success(), "1")) { XianGongAgvServiceImpl xianGongAgv = SpringContextHolder.getBean(XianGongAgvServiceImpl.class); //追加订单 - HttpResponse result = xianGongAgv.addOrderSequences(dto); - if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) { + UnifiedResponse response = xianGongAgv.addOrderSequences(dto); + if (!response.isSuccess()) { dto.setSend_status("2"); } else { dto.setSend_status("1"); @@ -304,8 +301,8 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu } else { XianGongAgvServiceImpl xianGongAgv = SpringContextHolder.getBean(XianGongAgvServiceImpl.class); //创建订单序列 - HttpResponse result = xianGongAgv.sendOrderSequencesToXZ(dto); - if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) { + UnifiedResponse response = xianGongAgv.sendOrderSequencesToXZ(dto); + if (!response.isSuccess()) { dto.setSend_status("2"); } else { dto.setSend_status("1"); @@ -317,7 +314,9 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu dto.setSend_status("2"); e.printStackTrace(); } - + WQLObject wo = WQLObject.getWQLObject("acs_instruction"); + JSONObject json = (JSONObject) JSONObject.toJSON(dto); + wo.insert(json); this.instructions.add(dto); } @@ -745,8 +744,8 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu if (StrUtil.equals(task.getRequest_again_success(), "1")) { XianGongAgvServiceImpl xianGongAgv = SpringContextHolder.getBean(XianGongAgvServiceImpl.class); //追加订单 - HttpResponse result = xianGongAgv.addOrderSequences(dto); - if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) { + UnifiedResponse response = xianGongAgv.addOrderSequences(dto); + if (!response.isSuccess()) { dto.setSend_status("2"); } else { dto.setSend_status("1"); @@ -754,8 +753,8 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu } else { XianGongAgvServiceImpl xianGongAgv = SpringContextHolder.getBean(XianGongAgvServiceImpl.class); //创建订单序列 - HttpResponse result = xianGongAgv.sendOrderSequencesToXZ(dto); - if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) { + UnifiedResponse response = xianGongAgv.sendOrderSequencesToXZ(dto); + if (!response.isSuccess()) { dto.setSend_status("2"); } else { dto.setSend_status("1"); @@ -770,5 +769,23 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu this.update(dto); } + @Override + public Integer findTodayTaskNumByAgvCar(String currentDeviceCode) { + Map map = new HashMap<>(); + map.put("flag", "3"); + map.put("carno", currentDeviceCode); + JSONObject jsonObject = WQL.getWO("QINST_QUERY").addParamMap(map).process().uniqueResult(0); + return jsonObject.getInteger("total_count"); + } + + @Override + public Integer findMonthTaskNumByAgvCar(String currentDeviceCode) { + Map map = new HashMap<>(); + map.put("flag", "4"); + map.put("carno", currentDeviceCode); + JSONObject jsonObject = WQL.getWO("QINST_QUERY").addParamMap(map).process().uniqueResult(0); + return jsonObject.getInteger("total_count"); + } + } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/wql/QINST_QUERY.wql b/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/wql/QINST_QUERY.wql index 170478f..aa133a8 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/wql/QINST_QUERY.wql +++ b/acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/wql/QINST_QUERY.wql @@ -17,10 +17,10 @@ 输入.code TYPEAS s_string 输入.vehicle_code TYPEAS s_string 输入.material_type TYPEAS s_string - 输入.status TYPEAS s_string - 输入.point_code TYPEAS s_string - 输入.point_code TYPEAS s_string - 输入.create_time TYPEAS time + 输入.status TYPEAS s_string + 输入.point_code TYPEAS s_string + 输入.carno TYPEAS s_string + 输入.create_time TYPEAS time 输入.end_time TYPEAS time @@ -124,3 +124,27 @@ ENDSELECT ENDPAGEQUERY ENDIF + + IF 输入.flag = "3" + QUERY + SELECT COUNT(*) AS total_count + FROM acs_instruction inst + WHERE is_delete = 0 AND DATE(inst.create_time) = CURDATE() + OPTION 输入.carno <> "" + inst.carno = 输入.carno + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT COUNT(*) AS total_count + FROM acs_instruction inst + WHERE is_delete = '0' AND inst.create_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) + OPTION 输入.carno <> "" + inst.carno = 输入.carno + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 6fc8308..34969a2 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -184,7 +184,7 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { int totalElements = (Integer) jsonObject.get("totalElements"); JSONArray arr = new JSONArray(); for (int i = 0; i < array.size(); i++) { - JSONObject object = arr.getJSONObject(i); + JSONObject object = array.getJSONObject(i); object.put("hasChildren", true); arr.add(object); } @@ -686,7 +686,7 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { request.setTask_status(dto.getTask_status()); request.setRequest_medthod_code(RequestMethodEnum.feedback_task_status.getCode()); request.setRequest_medthod_name(RequestMethodEnum.feedback_task_status.getName()); - acstowmsService.applyTask(request); + acstowmsService.apply(request); } } diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/config/LogMessageConstant.java b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/config/LogMessageConstant.java index 57ae26f..e0d8795 100644 --- a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/config/LogMessageConstant.java +++ b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/config/LogMessageConstant.java @@ -75,6 +75,6 @@ public class LogMessageConstant { /** * 索引路径 */ - public final static String INDEX_DIR = "E:\\lucene\\index"; + public final static String INDEX_DIR = "D:\\lucene\\index"; } diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/config/LuceneAppender.java b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/config/LuceneAppender.java index 943d13d..0aabe62 100644 --- a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/config/LuceneAppender.java +++ b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/config/LuceneAppender.java @@ -79,7 +79,7 @@ public class LuceneAppender extends AppenderBase { //向document对象中添加域。 Map mdcPropertyMap = event.getMDCPropertyMap(); String traceId = mdcPropertyMap.get("traceId"); - System.out.println("---追踪号---"+traceId); +// System.out.println("---追踪号---"+traceId); if (ObjectUtil.isNotEmpty(traceId)) { document.add(new StringField("trace_id", traceId, Field.Store.YES)); } @@ -95,11 +95,23 @@ public class LuceneAppender extends AppenderBase { if (ObjectUtil.isNotEmpty(luceneLogDto.getStatus_code())) { document.add(new StringField("status_code", luceneLogDto.getStatus_code(), Field.Store.YES)); } - if (ObjectUtil.isNotEmpty(luceneLogDto.getRequestparam())) { - document.add(new StringField("requestparam", luceneLogDto.getRequestparam(), Field.Store.YES)); + if (ObjectUtil.isNotEmpty(luceneLogDto.getRequest_param())) { + document.add(new StringField("request_param", luceneLogDto.getRequest_param(), Field.Store.YES)); } - if (ObjectUtil.isNotEmpty(luceneLogDto.getResponseparam())) { - document.add(new StringField("responseparam", luceneLogDto.getResponseparam(), Field.Store.YES)); + if (ObjectUtil.isNotEmpty(luceneLogDto.getResponse_param())) { + document.add(new StringField("response_param", luceneLogDto.getResponse_param(), Field.Store.YES)); + } + if (ObjectUtil.isNotEmpty(luceneLogDto.getRequest_url())) { + document.add(new StringField("request_url", luceneLogDto.getRequest_url(), Field.Store.YES)); + } + if (ObjectUtil.isNotEmpty(luceneLogDto.getDeviceLogType())) { + document.add(new StringField("deviceLogType", luceneLogDto.getDeviceLogType(), Field.Store.YES)); + } + if (ObjectUtil.isNotEmpty(luceneLogDto.getRequest_direction())) { + document.add(new StringField("request_direction", luceneLogDto.getRequest_direction(), Field.Store.YES)); + } + if (ObjectUtil.isNotEmpty(luceneLogDto.getExecuteTime())) { + document.add(new StringField("executeTime", luceneLogDto.getExecuteTime() + "", Field.Store.YES)); } document.add(new StringField("logType", luceneLogDto.getLogType(), Field.Store.YES)); document.add(new StringField("logTime", DateUtil.format(new DateTime(), "yyyy-MM-dd HH:mm:ss.SSS"), Field.Store.YES)); diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/enums/DeviceLogTypeEnum.java b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/enums/DeviceLogTypeEnum.java new file mode 100644 index 0000000..0a038a8 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/enums/DeviceLogTypeEnum.java @@ -0,0 +1,19 @@ +package org.nl.modules.lucene.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * @Description TODO + * @Author Gengby + * @Date 2024/4/10 + */ +@Getter +@RequiredArgsConstructor +public enum DeviceLogTypeEnum { + AUTO_THREAD("auto", "自动线程"), + MQTT("mqtt", "MQTT"); + + private final String code; + private final String name; +} diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/rest/LuceneController.java b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/rest/LuceneController.java index c32761d..75d6160 100644 --- a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/rest/LuceneController.java +++ b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/rest/LuceneController.java @@ -1,10 +1,10 @@ package org.nl.modules.lucene.rest; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; +import org.nl.modules.lucene.enums.DeviceLogTypeEnum; +import org.nl.modules.lucene.enums.LogTypeEnum; import org.nl.modules.lucene.service.LuceneService; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; @@ -14,12 +14,14 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.Arrays; import java.util.Map; +import java.util.stream.Collectors; @RestController @RequiredArgsConstructor -@Api(tags = "日志检索") + @RequestMapping("/api/lucene") @Slf4j public class LuceneController { @@ -27,12 +29,30 @@ public class LuceneController { private final LuceneService luceneService; - @GetMapping("/getAll") - @Log("日志检索") - @ApiOperation("日志检索") - //@PreAuthorize("@el.check('task:list')") public ResponseEntity get(@RequestParam Map whereJson, Pageable page) { return new ResponseEntity<>(luceneService.getAll(whereJson, page), HttpStatus.OK); } + + @GetMapping("/getDeviceLogType") + public ResponseEntity getDeviceLogType() { + return new ResponseEntity<>(Arrays.stream(DeviceLogTypeEnum.values()) + .map(type -> { + Map map = new java.util.HashMap<>(); + map.put("code", type.getCode()); + map.put("name", type.getName()); + return map; + }) + .collect(Collectors.toList()), HttpStatus.OK); + } + + @GetMapping("/getLogTypes") + public ResponseEntity get(@RequestParam Map whereJson) { + return new ResponseEntity<>(Arrays.stream(LogTypeEnum.values()).map(logType -> { + Map map = new java.util.HashMap<>(); + map.put("logType", logType.getDesc()); + return map; + }) + .collect(Collectors.toList()), HttpStatus.OK); + } } diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/LuceneExecuteLogService.java b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/LuceneExecuteLogService.java index e4b0db1..52ecbae 100644 --- a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/LuceneExecuteLogService.java +++ b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/LuceneExecuteLogService.java @@ -1,6 +1,5 @@ package org.nl.modules.lucene.service; - import org.nl.modules.lucene.service.dto.LuceneLogDto; public interface LuceneExecuteLogService { diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/dto/LuceneLogDto.java b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/dto/LuceneLogDto.java index d10fbe4..0e4315c 100644 --- a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/dto/LuceneLogDto.java +++ b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/dto/LuceneLogDto.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.nl.modules.lucene.enums.DeviceLogTypeEnum; @Data @Builder @@ -11,96 +12,80 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class LuceneLogDto { - /* 日志标识 */ - private String log_uuid; - /*日志类型*/ + /** + * 日志类型 + */ private String logType; - /*设备编号*/ - private String device_code; - /*内容详情*/ - private String content; - - /* 任务编码 */ - private String task_code; - - /* 指令编码 */ - private String instruct_code; - - /* 任务标识 */ - private String task_id; - /* 载具号 */ - private String vehicle_code; - - /* 备注 */ - private String remark; + /** + * 设备编号 + */ + private String device_code; - /* 日志类型 */ - private String log_type; + /** + * 内容详情 + */ + private String content; - /* 方法 */ + /** + * 方法 + */ private String method; - /* 请求参数 */ - private String requestparam; + /** + * 请求参数 + */ + private String request_param; - /* 响应参数 */ - private String responseparam; + /** + * 响应参数 + */ + private String response_param; - /* 请求地址 */ - private String requesturl; + /** + * 请求路径 + */ + private String request_url; - /* 状态码 */ - private String status_code; - /* 是否删除 1:是;0:否 */ - private String is_delete; - - /* 创建者 */ - private String create_by; - - /* 创建时间 YYYY-MM-DD hh:mm:ss */ - private String create_time; + /** + * 状态码 + */ + private String status_code; - /* 修改者 */ - private String update_by; + /** + * 设备日志类型 + */ + private String deviceLogType; - /* 修改时间 */ - private String update_time; + /** + * 请求方向 + */ + private String request_direction; + /** + * 执行时间 + */ + private long executeTime; - public LuceneLogDto(final String opc_server_code, final String opc_plc_code, - final String device_code, final String to_home, final String last_home, - final String home) { - super(); - this.device_code = device_code; - this.content = "信号 [" - + opc_server_code + "." - + opc_plc_code + "." - + device_code + "." - + to_home + "] 发生变更 " - + last_home + " -> " - + home; - } public LuceneLogDto(final String device_code, final String remark) { super(); this.device_code = device_code; + this.deviceLogType = DeviceLogTypeEnum.AUTO_THREAD.getCode(); this.content = "设备 [" + device_code + "] - " + remark; } - public LuceneLogDto(final LuceneLogDto dto) { + public LuceneLogDto(final String device_code, final String device_log_type, final String remark) { super(); this.device_code = device_code; - this.method = method; - + this.deviceLogType = device_log_type; this.content = "设备 [" + device_code + "] - " + remark; } - } diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/impl/LuceneServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/impl/LuceneServiceImpl.java index 6c10ee4..e33888e 100644 --- a/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/impl/LuceneServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/modules/lucene/service/impl/LuceneServiceImpl.java @@ -12,6 +12,9 @@ import org.apache.lucene.search.*; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.BytesRef; import org.nl.modules.lucene.service.LuceneService; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -26,14 +29,17 @@ import java.util.*; @Slf4j public class LuceneServiceImpl implements LuceneService { - //日志索引目录 - - @Override public Map getAll(Map whereJson, Pageable page) { //获取要查询的路径,也就是索引所在的位置 try { - FSDirectory directory = FSDirectory.open(Paths.get("C:\\acs\\lucene\\index")); + Resource resource = new ClassPathResource("config/application.yml"); + YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean(); + yamlPropertiesFactoryBean.setResources(resource); + Properties properties = yamlPropertiesFactoryBean.getObject(); + // 获取配置值 + String luceneDir = properties.getProperty("lucene.index.path"); + FSDirectory directory = FSDirectory.open(Paths.get(luceneDir)); DirectoryReader open = DirectoryReader.open(directory); IndexSearcher searcher = new IndexSearcher(open); // 实际上Lucene本身不支持分页。因此我们需要自己进行逻辑分页。我们要准备分页参数: @@ -45,48 +51,55 @@ public class LuceneServiceImpl implements LuceneService { String startDate = (String) whereJson.get("begin_time"); String endDate = (String) whereJson.get("end_time"); - if (startDate == null){ - Calendar calendar=Calendar.getInstance(); + if (startDate == null) { + Calendar calendar = Calendar.getInstance(); calendar.set(1970, 0, 1); - startDate = DateUtil.format(calendar.getTime(),"yyyy-MM-dd HH:mm:ss.SSS"); - }else{ + startDate = DateUtil.format(calendar.getTime(), "yyyy-MM-dd HH:mm:ss.SSS"); + } else { startDate = getDate(startDate); } - if (endDate == null){ - endDate = DateUtil.format(new DateTime(),"yyyy-MM-dd HH:mm:ss.SSS"); + if (endDate == null) { + endDate = DateUtil.format(new DateTime(), "yyyy-MM-dd HH:mm:ss.SSS"); } else { endDate = getDate(endDate); } TermRangeQuery termRangeQuery = new TermRangeQuery("logTime", new BytesRef(startDate), new BytesRef(endDate), true, true); - booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST); - if (whereJson.get("device_code") != null){ + booleanQueryBuilder.add(termRangeQuery, BooleanClause.Occur.MUST); + if (whereJson.get("logType") != null) { + Query termQuery = new TermQuery(new Term("logType", (String) whereJson.get("logType"))); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); + } + if (whereJson.get("device_code") != null) { Query termQuery = new TermQuery(new Term("device_code", (String) whereJson.get("device_code"))); - booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); + } + if (whereJson.get("deviceLogType") != null) { + Query termQuery = new TermQuery(new Term("deviceLogType", (String) whereJson.get("deviceLogType"))); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); } - if (whereJson.get("method") != null){ - Query termQuery = new TermQuery(new Term("method", (String) whereJson.get("method"))); - booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST); + if (whereJson.get("method") != null) { + WildcardQuery termQuery = new WildcardQuery(new Term("method", "*" + (String) whereJson.get("method") + "*")); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); } - if (whereJson.get("status_code") != null){ - Query termQuery = new TermQuery(new Term("status_code", (String) whereJson.get("status_code"))); - booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST); + if (whereJson.get("request_url") != null) { + WildcardQuery termQuery = new WildcardQuery(new Term("request_url", "*" + (String) whereJson.get("request_url") + "*")); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); } - if (whereJson.get("requestparam") != null){ - WildcardQuery query = new WildcardQuery(new Term("requestparam", "*"+(String) whereJson.get("requestparam")+"*")); - booleanQueryBuilder.add(query,BooleanClause.Occur.MUST); + if (whereJson.get("request_direction") != null) { + Query termQuery = new TermQuery(new Term("request_direction", (String) whereJson.get("request_direction"))); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); } - if (whereJson.get("responseparam") != null){ - WildcardQuery query = new WildcardQuery(new Term("responseparam", "*"+(String) whereJson.get("responseparam")+"*")); - booleanQueryBuilder.add(query,BooleanClause.Occur.MUST); + if (whereJson.get("request_param") != null) { + WildcardQuery termQuery = new WildcardQuery(new Term("request_param", "*" + (String) whereJson.get("request_param") + "*")); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); } if (whereJson.get("blurry") != null) { - WildcardQuery query = new WildcardQuery(new Term("fieldContent", "*"+(String) whereJson.get("blurry")+"*")); + WildcardQuery query = new WildcardQuery(new Term("fieldContent", "*" + (String) whereJson.get("blurry") + "*")); booleanQueryBuilder.add(query, BooleanClause.Occur.MUST); } - - TopFieldCollector collector = TopFieldCollector.create(new Sort(new SortField("logTime", SortField.Type.LONG,true)), 20000, 0); + TopFieldCollector collector = TopFieldCollector.create(new Sort(new SortField("logTime", SortField.Type.LONG, true)), 20000, 0); searcher.search(booleanQueryBuilder.build(), collector); - TopDocs topDocs = collector.topDocs(pageNum*pageSize, pageSize); + TopDocs topDocs = collector.topDocs(pageNum * pageSize, pageSize); int totalSize = collector.getTotalHits(); ScoreDoc[] scoreDocs = topDocs.scoreDocs; @@ -94,14 +107,18 @@ public class LuceneServiceImpl implements LuceneService { for (ScoreDoc scoreDoc : scoreDocs) { Document doc = open.document(scoreDoc.doc); JSONObject object = new JSONObject(); - object.put("content",doc.get("fieldContent")); - object.put("device_code",doc.get("device_code")); - object.put("logTime",doc.get("logTime")); - object.put("method",doc.get("method")); - object.put("status_code",doc.get("status_code")); - object.put("requestparam",doc.get("requestparam")); - object.put("responseparam",doc.get("responseparam")); - if(doc.get("fieldContent") != null) { + object.put("content", doc.get("fieldContent")); + object.put("device_code", doc.get("device_code")); + object.put("deviceLogType", doc.get("deviceLogType")); + object.put("logTime", doc.get("logTime")); + object.put("method", doc.get("method")); + object.put("request_url", doc.get("request_url")); + object.put("status_code", doc.get("status_code")); + object.put("request_param", doc.get("request_param")); + object.put("response_param", doc.get("response_param")); + object.put("request_direction", doc.get("request_direction")); + object.put("executeTime", doc.get("executeTime")); + if (doc.get("fieldContent") != null) { list.add(object); } } diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCleanLuceneLog.java b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCleanLuceneLog.java new file mode 100644 index 0000000..041d307 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCleanLuceneLog.java @@ -0,0 +1,64 @@ +package org.nl.modules.quartz.task; + +import cn.hutool.core.date.DateUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.lucene.document.Document; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.Term; +import org.apache.lucene.search.*; +import org.apache.lucene.store.FSDirectory; +import org.apache.lucene.util.BytesRef; +import org.nl.modules.lucene.config.LuceneAppender; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; + +import java.nio.file.Paths; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.Date; +import java.util.Properties; + + +/** + * @author onepiece + */ +@Slf4j +@Component +public class AutoCleanLuceneLog { + + private static final long MAX_FILE_AGE_DAYS = 10; + + public void run() { + try { + Resource resource = new ClassPathResource("config/application.yml"); + YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean(); + yamlPropertiesFactoryBean.setResources(resource); + Properties properties = yamlPropertiesFactoryBean.getObject(); + String logDirectory = properties.getProperty("lucene.index.path"); + + Instant now = Instant.now(); + Instant cutoffTime = now.minus(MAX_FILE_AGE_DAYS, ChronoUnit.DAYS); + String cutoffTimeStr = DateUtil.format(Date.from(cutoffTime), "yyyy-MM-dd HH:mm:ss.SSS"); + + FSDirectory dir = FSDirectory.open(Paths.get(logDirectory)); + IndexWriter writer = LuceneAppender.indexWriter; + + try (IndexReader reader = DirectoryReader.open(dir)) { + IndexSearcher searcher = new IndexSearcher(reader); + Query query = new TermRangeQuery("logTime", new BytesRef(""), new BytesRef(cutoffTimeStr), true, true); + TopDocs topDocs = searcher.search(query, Integer.MAX_VALUE); + for (ScoreDoc scoreDoc : topDocs.scoreDocs) { + Document doc = searcher.doc(scoreDoc.doc); + writer.deleteDocuments(new Term("logTime", doc.get("logTime"))); + } + } + writer.commit(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXGTaskStatus.java b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXGTaskStatus.java index 41fc084..0af1205 100644 --- a/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXGTaskStatus.java +++ b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXGTaskStatus.java @@ -1,5 +1,6 @@ package org.nl.modules.quartz.task; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpResponse; @@ -8,13 +9,21 @@ import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.agv.server.XianGongAgvService; +import org.nl.acs.ext.UnifiedResponse; import org.nl.acs.ext.wms.service.AcsToWmsService; 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.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.modules.system.service.ParamService; +import org.nl.modules.wql.util.SpringContextHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.stream.Collectors; + /** * 查询AGV任务状态 */ @@ -23,56 +32,106 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor public class QueryXGTaskStatus { - private final InstructionService instructionService; - - private final XianGongAgvService agvService; - - public void run() throws Exception { - - HttpResponse response = agvService.queryXZAgvInstStatus(); - JSONObject jo = JSONArray.parseObject(response.body()); - - JSONArray ja = JSONArray.parseArray(jo.getString("list")); - for (int i = 0; i < ja.size(); i++) { - JSONObject one = (JSONObject) ja.get(i); - String inst_code = one.getString("id"); - Instruction inst = instructionService.findByCodeFromCache(inst_code); - if (ObjectUtil.isEmpty(inst)) - continue; - - String state = one.getString("state"); - if (!StrUtil.isEmpty(one.getString("vehicle"))) { - String carno = one.getString("vehicle"); - inst.setCarno(carno); - } - -// 已创建=CREATED, -// 待分配=TOBEDISPATCHED, -// 正在执行=RUNNING, -// 完成=FINISHED, -// 失败=FAILED(主动失败), -// 终止=STOPPED(被人为终止), -// 无法执行=Error(参数错误), -// 等待=WAITING + @Autowired + private InstructionService instructionService; + @Autowired + private XianGongAgvService agvService; - //执行中 - if ("RUNNING".equals(state) || "CREATED".equals(state) || "TOBEDISPATCHED".equals(state) || "WAITING".equals(state)) { - if (inst != null) { - inst.setInstruction_status("1"); - instructionService.update(inst); - } - } else if ("FINISHED".equals(state)) { - if (inst != null) { - inst.setInstruction_status("2"); - instructionService.finish(inst); - } - } else if ("STOPPED".equals(state) || "FAILED".equals(state) || "Error".equals(state)) { - if (inst != null) { - inst.setInstruction_status("1"); - instructionService.update(inst); + public void run() { + try { + List allInstFromCache = instructionService.findAllInstFromCache(); + for (Instruction instruction : allInstFromCache) { + UnifiedResponse resp = agvService.queryXZAgvInstStatusByCode(instruction.getInstruction_code(), JSONObject.class); + if (resp.isSuccess()) { + // 已创建=CREATED, + // 待分配=TOBEDISPATCHED, + // 正在执行=RUNNING, + // 完成=FINISHED, + // 失败=FAILED(主动失败), + // 终止=STOPPED(被人为终止), + // 无法执行=Error(参数错误), + // 等待=WAITING + //执行中 + String state = resp.getData().getString("state"); + String carNo = resp.getData().getString("vehicle"); + String instructionCode = resp.getData().getString("id"); + if ("RUNNING".equals(state) || "CREATED".equals(state) || "TOBEDISPATCHED".equals(state) || "WAITING".equals(state)) { + if (!instruction.getInstruction_status().equals("1")) { + instruction.setInstruction_status("1"); + instruction.setCarno(carNo); + instructionService.update(instruction); + } + } else if ("FINISHED".equals(state)) { + instruction.setInstruction_status("2"); + try { + instructionService.finish(instruction); + } catch (Exception e) { + log.error("执行完成,但无法更新状态,可能由于参数错误导致的异常"); + e.printStackTrace(); + } + } else if ("STOPPED".equals(state) || "FAILED".equals(state) || "Error".equals(state)) { + if (!instruction.getInstruction_status().equals("1")) { + instruction.setInstruction_status("1"); + instructionService.update(instruction); + } + } } } - } +// UnifiedResponse resp = agvService.queryXZAgvInstStatus(JSONObject.class); +// if (resp.isSuccess()) { +// JSONObject data = resp.getData(); +// JSONArray list = data.getJSONArray("list"); +// if (list == null) return; +// for (int i = 0; i < list.size(); i++) { +// JSONObject one = list.getJSONObject(i); +// String inst_code = one.getString("id"); +// Instruction inst = instructionService.findByCodeFromCache(inst_code); +// +// if (ObjectUtil.isEmpty(inst)) continue; +// +// //子任务状态 待以后处理 +// JSONArray blocks = JSONArray.parseArray(one.getString("blocks")); +// for (int j = 0; j < blocks.size(); j++) { +// JSONObject blocksjo = (JSONObject) blocks.get(j); +// String blockId = blocksjo.getString("blockId"); +// String device_code = blocksjo.getString("location"); +// String state = blocksjo.getString("state"); +// } +// +// String state = one.getString("state"); +// if (!StrUtil.isEmpty(one.getString("vehicle"))) { +// String carno = one.getString("vehicle"); +// inst.setCarno(carno); +// } +//// 已创建=CREATED, +//// 待分配=TOBEDISPATCHED, +//// 正在执行=RUNNING, +//// 完成=FINISHED, +//// 失败=FAILED(主动失败), +//// 终止=STOPPED(被人为终止), +//// 无法执行=Error(参数错误), +//// 等待=WAITING +// //执行中 +// if ("RUNNING".equals(state) || "CREATED".equals(state) || "TOBEDISPATCHED".equals(state) || "WAITING".equals(state)) { +// if (inst != null) { +// inst.setInstruction_status("1"); +// instructionService.update(inst); +// } +// } else if ("FINISHED".equals(state)) { +// if (inst != null) { +// inst.setInstruction_status("2"); +// instructionService.finish(inst); +// } +// } else if ("STOPPED".equals(state) || "FAILED".equals(state) || "Error".equals(state)) { +// if (inst != null) { +// inst.setInstruction_status("1"); +// instructionService.update(inst); +// } +// } +// } +// } + } catch (Exception e) { + } } } diff --git a/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXZAgvDeviceStatus.java b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXZAgvDeviceStatus.java new file mode 100644 index 0000000..6471659 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/modules/quartz/task/QueryXZAgvDeviceStatus.java @@ -0,0 +1,122 @@ +package org.nl.modules.quartz.task; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.XianGongAgvService; +import org.nl.acs.device_driver.basedriver.agv.xg_agv.XianGongAgvDeviceDriver; +import org.nl.acs.ext.UnifiedResponse; +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.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.math.RoundingMode; +import java.text.DecimalFormat; + +/** + * 查询先工AGV设备状态 + */ +@Slf4j +@Component +public class QueryXZAgvDeviceStatus { + + @Autowired + private XianGongAgvService agvService; + @Autowired + private DeviceAppService deviceAppService; + @Autowired + private InstructionService instructionService; + + + public void run() { + try { + UnifiedResponse response = agvService.queryXZAgvDeviceStatus(null, JSONObject.class); + if (response.isSuccess()) { + JSONObject body = response.getData(); + JSONArray ja = body.getJSONArray("report"); + for (int i = 0; i < ja.size(); i++) { + JSONObject jo = ja.getJSONObject(i); + //机器人编码 + String agv_code = jo.getString("uuid"); + //机器人详细状态信息 + JSONObject rbk_report = jo.getJSONObject("rbk_report"); + //是否正在充电 + Boolean charging = rbk_report.getBoolean("charging"); + //角度 + Double angle = rbk_report.getDouble("angle"); + //电池电量(0-1) + Double battery_level = rbk_report.getDouble("battery_level"); + //当前开机时间 ms + Integer time = rbk_report.getInteger("time"); + //累计运行时间 ms + Integer total_time = rbk_report.getInteger("total_time"); + //今日累计行驶里程, 单位 m + Double today_odo = rbk_report.getDouble("today_odo"); + //累计行驶里程 + Integer odo = rbk_report.getInteger("odo"); + //是否正在执行任务 + Boolean procBusiness = jo.getBoolean("procBusiness"); + //agv是否故障 + Boolean is_error = jo.getBoolean("is_error"); + //执行运单信息 + JSONObject current_order = jo.getJSONObject("current_order"); + Integer connectionStatus = jo.getInteger("connection_status"); + String inst_code = current_order.getString("id"); + Instruction instruction = instructionService.findByCodeFromCache(inst_code); + String taskCode = "0"; + if (instruction != null) { + taskCode = instruction.getTask_code(); + } + DecimalFormat hisFormat = new DecimalFormat("########.###"); + hisFormat.setRoundingMode(RoundingMode.DOWN); + //x坐标 + Double x = rbk_report.getDouble("x"); + //y坐标 + Double y = rbk_report.getDouble("y"); + String status = "0"; + if (connectionStatus == 0) { + status = "5"; + } else { + if (procBusiness && !is_error) { + //工作中 + status = "1"; + } else { + if (charging) { + //充电中 + status = "2"; + } else { + if (is_error) { + //故障 + status = "3"; + } else { + //休息中 + status = "4"; + } + } + } + } + Device device = deviceAppService.findDeviceByCode(agv_code); + if (device != null && device.getDeviceDriver() instanceof XianGongAgvDeviceDriver) { + XianGongAgvDeviceDriver xgAGV = (XianGongAgvDeviceDriver) device.getDeviceDriver(); + xgAGV.setTaskCode(taskCode); + xgAGV.setBattery_level(battery_level); + xgAGV.setAngle(angle); + xgAGV.setTime(time); + xgAGV.setTotal_time(total_time); + xgAGV.setToday_odo(today_odo); + xgAGV.setOdo(odo); + xgAGV.setX(x); + xgAGV.setY(y); + xgAGV.setStatus(Integer.parseInt(status)); + } + } + } + } catch (Exception e) { + System.out.println("出现异常"); + e.printStackTrace(); + } + } +} diff --git a/acs/nladmin-ui/src/views/acs/device/config.vue b/acs/nladmin-ui/src/views/acs/device/config.vue index 036d725..6e6e0c4 100644 --- a/acs/nladmin-ui/src/views/acs/device/config.vue +++ b/acs/nladmin-ui/src/views/acs/device/config.vue @@ -101,6 +101,8 @@ import lnsh_crusher from '@/views/acs/device/driver/lnsh/lnsh_crusher' import lnsh_palletizing_manipulator_site from '@/views/acs/device/driver/lnsh/lnsh_palletizing_manipulator_site' import conveyor_ssx_barcode from '@/views/acs/device/driver/lnsh/conveyor_ssx_barcode' import conveyor_press_station from '@/views/acs/device/driver/lnsh/conveyor_press_station' +import xg_agv from '@/views/acs/device/driver/xg/xg_agv' +import rgv_station from '@/views/acs/device/driver/rgv_station' import agv_ndc_one from '@/views/acs/device/driver/agv/agv_ndc_one' import agv_ndc_two from '@/views/acs/device/driver/agv/agv_ndc_two' import package_site from './driver/lnsh/package_site.vue' @@ -109,12 +111,43 @@ import photoelectric_detection_station from '@/views/acs/device/driver/shangdian export default { name: 'DeviceConfig', - components: { standard_ordinary_site, standard_inspect_site, - lamp_three_color, standard_storage, standard_scanner, standard_conveyor_control_with_scanner, - standard_conveyor_control, standard_conveyor_monitor, lnsh_mixing_mill, lnsh_press, lnsh_palletizing_manipulator, lnsh_fold_disc_site, lnsh_kiln_lane, lnsh_kiln_truss, - lnsh_package_line, lnsh_out_kiln_truss, lnsh_package_pallet_manipulator, lnsh_pallet_storage, lnsh_labeling_machine, lnsh_split_manipulator, lnsh_rgv, - lnsh_station, lnsh_Laminating_machine, lnsh_package_site, lnsh_crusher, lnsh_palletizing_manipulator_site, conveyor_ssx_barcode, conveyor_press_station, - agv_ndc_one, agv_ndc_two, package_site, nl4_station, photoelectric_detection_station }, + components: { + standard_ordinary_site, + standard_inspect_site, + lamp_three_color, + standard_storage, + standard_scanner, + standard_conveyor_control_with_scanner, + standard_conveyor_control, + standard_conveyor_monitor, + lnsh_mixing_mill, + lnsh_press, + lnsh_palletizing_manipulator, + lnsh_fold_disc_site, + lnsh_kiln_lane, + lnsh_kiln_truss, + lnsh_package_line, + lnsh_out_kiln_truss, + lnsh_package_pallet_manipulator, + lnsh_pallet_storage, + lnsh_labeling_machine, + lnsh_split_manipulator, + lnsh_rgv, + lnsh_station, + lnsh_Laminating_machine, + lnsh_package_site, + lnsh_crusher, + lnsh_palletizing_manipulator_site, + conveyor_ssx_barcode, + conveyor_press_station, + agv_ndc_one, + agv_ndc_two, + package_site, + nl4_station, + photoelectric_detection_station, + xg_agv, + rgv_station + }, dicts: ['device_type'], mixins: [crud], data() { diff --git a/acs/nladmin-ui/src/views/acs/device/driver/rgv_station.vue b/acs/nladmin-ui/src/views/acs/device/driver/rgv_station.vue new file mode 100644 index 0000000..09f1948 --- /dev/null +++ b/acs/nladmin-ui/src/views/acs/device/driver/rgv_station.vue @@ -0,0 +1,551 @@ + + + + + diff --git a/acs/nladmin-ui/src/views/acs/device/driver/xg/xg_agv.vue b/acs/nladmin-ui/src/views/acs/device/driver/xg/xg_agv.vue new file mode 100644 index 0000000..4635535 --- /dev/null +++ b/acs/nladmin-ui/src/views/acs/device/driver/xg/xg_agv.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/acs/nladmin-ui/src/views/monitor/interface/api/lucene.js b/acs/nladmin-ui/src/views/monitor/interface/api/lucene.js new file mode 100644 index 0000000..6739a25 --- /dev/null +++ b/acs/nladmin-ui/src/views/monitor/interface/api/lucene.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' + +export function getLogData(param) { + return request({ + url: 'api/lucene/getAll', + method: 'get', + data: param + }) +} + +export function labelsValues() { + return request({ + url: 'api/loki/labels/values', + method: 'get' + }) +} + +export function getDeviceLogType() { + return request({ + url: 'api/lucene/getDeviceLogType', + method: 'get' + }) +} + +export function getLogTypes() { + return request({ + url: 'api/lucene/getLogTypes', + method: 'get' + }) +} + +export default { getLogData, labelsValues, getDeviceLogType, getLogTypes } diff --git a/acs/nladmin-ui/src/views/monitor/interface/index.vue b/acs/nladmin-ui/src/views/monitor/interface/index.vue new file mode 100644 index 0000000..2644cd6 --- /dev/null +++ b/acs/nladmin-ui/src/views/monitor/interface/index.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/acs/nladmin-ui/src/views/monitor/interface/search.vue b/acs/nladmin-ui/src/views/monitor/interface/search.vue new file mode 100644 index 0000000..764261d --- /dev/null +++ b/acs/nladmin-ui/src/views/monitor/interface/search.vue @@ -0,0 +1,134 @@ + + + diff --git a/acs/nladmin-ui/src/views/monitor/interface/time.vue b/acs/nladmin-ui/src/views/monitor/interface/time.vue new file mode 100644 index 0000000..36d504a --- /dev/null +++ b/acs/nladmin-ui/src/views/monitor/interface/time.vue @@ -0,0 +1,64 @@ + + + diff --git a/acs/nladmin-ui/src/views/monitor/lucene/api/lucene.js b/acs/nladmin-ui/src/views/monitor/lucene/api/lucene.js index 674bb2c..6739a25 100644 --- a/acs/nladmin-ui/src/views/monitor/lucene/api/lucene.js +++ b/acs/nladmin-ui/src/views/monitor/lucene/api/lucene.js @@ -15,4 +15,18 @@ export function labelsValues() { }) } -export default { getLogData, labelsValues } +export function getDeviceLogType() { + return request({ + url: 'api/lucene/getDeviceLogType', + method: 'get' + }) +} + +export function getLogTypes() { + return request({ + url: 'api/lucene/getLogTypes', + method: 'get' + }) +} + +export default { getLogData, labelsValues, getDeviceLogType, getLogTypes } diff --git a/acs/nladmin-ui/src/views/monitor/lucene/index.vue b/acs/nladmin-ui/src/views/monitor/lucene/index.vue index 36be01e..881c11e 100644 --- a/acs/nladmin-ui/src/views/monitor/lucene/index.vue +++ b/acs/nladmin-ui/src/views/monitor/lucene/index.vue @@ -1,7 +1,12 @@