diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java index 68dfce5ba..d3dd620a5 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java @@ -9,6 +9,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.agv.server.XianGongAgvService; +import org.nl.acs.agv.server.impl.XianGongAgvServiceImpl; import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.DeviceDriver; @@ -28,6 +29,8 @@ import org.nl.config.SpringContextHolder; import org.springframework.beans.factory.annotation.Autowired; import java.util.Date; +import java.util.LinkedHashMap; +import java.util.Map; /** @@ -56,7 +59,7 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device @Autowired NDCAgvService agvService = SpringContextHolder.getBean(NDCAgvService.class); @Autowired - private XianGongAgvService xianGongAgvService; + XianGongAgvService xianGongAgvService = SpringContextHolder.getBean(XianGongAgvService.class); Integer hasGoods = 0; int error = 0; @@ -127,27 +130,56 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device /** * 是否推送场景的状态 0=可推送 1=正在更新场景 2=正在执行运单 */ - private String upload_scene_status; + private String upload_scene_status = ""; /** * 机器人当前运单 */ - private String current_order; + private String current_order = ""; /** * 机器人连接状态 0表示断连 1表示连接上 */ - private String connection_status; + private String connection_status = ""; /** * 机器人可接单状态 true=可接单 false=不可接单 */ - private String dispatchable; + private boolean dispatchable = false; /** * core出错标识 */ - private boolean is_error; + private boolean is_error = false; /** * 是否正在执行用户下发的运单 */ - private boolean procBusiness; + private boolean procBusiness = false; + /** + * 机器人当前地图不在场景中 + */ + private boolean current_map_invalid = false; + /** + * 机器人是否断连 + */ + private boolean disconnect = false; + /** + * 1 = api 设置可接单,2 = api 设置不可接单(小车占用资源), 3 = api 设置不可接单(小车不占用资源) + */ + private int dispatchable_status = 0; + /** + * 低电量 + */ + private boolean low_battery = false; + /** + * 暂停运单 + */ + private boolean suspended = false; + /** + * 未确认定位 + */ + private boolean unconfirmed_reloc = false; + /** + * 0: 控制权在core手上 1; 控制权被其他人抢走; 2: 控制权没有被抢占 + */ + private int unlock = 0; + String device_code = null; String container; @@ -178,11 +210,15 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device @Override public JSONObject getDeviceStatusName() { - getAgvStatus(); - JSONObject jo = new JSONObject(); + Map map = new LinkedHashMap<>(); + try{ + getAgvStatus(); + }catch (Exception e){ + message = "获取机器人状态报错"; + } String isError; if (is_error) { - isError = "报错"; + isError = "出错,不执行任何运单"; } else { isError = "正常"; } @@ -193,12 +229,21 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device } else if (CommonFinalParam.DELETE.equals(upload_scene_status)) { upload_scene_status = "可推送"; } - jo.put("is_error", isError); - jo.put("upload_scene_status", upload_scene_status); - jo.put("procBusiness", procBusiness); - jo.put("current_order", current_order); - jo.put("connection_status", connection_status); - jo.put("dispatchable", dispatchable); + map.put("errors", isError); + map.put("upload_scene_status", upload_scene_status); + map.put("procBusiness", procBusiness ? "是": "否"); + map.put("current_order", current_order); + map.put("connection_status", "1".equals(connection_status) ? "连接上" : "断连"); + map.put("dispatchable", dispatchable ? "可接单" : "不可接单"); + map.put("dispatchable_status", dispatchable_status == 1?"设置可接单" : dispatchable_status == 2?"设置不可接单(小车占用资源)" : dispatchable_status == 3?"设置不可接单(小车不占用资源)" : "未知"); + map.put("current_map_invalid", !current_map_invalid ? "机器人不在地图场景中": "机器人在地图场景中"); + map.put("disconnect", !disconnect ? "机器人断连" : "机器人连接上"); + map.put("low_battery", !low_battery ? "低电量": "正常"); + map.put("suspended", !suspended ? "订单被暂停,需要人工手动恢复": "正常"); + map.put("message", message); + map.put("unconfirmed_reloc", !unconfirmed_reloc ? "未确认定位" : "正常"); + map.put("unlock", unlock == 0 ? "控制权在core手上" : unlock == 1 ? "控制权被其他人抢走" : unlock == 2 ?"控制权没有被抢占" : "未知"); + JSONObject jo = new JSONObject(map); return jo; } @@ -214,7 +259,7 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device */ private void getAgvStatus() { HttpResponse robotInfo = xianGongAgvService.getRobotInfo(this.getDevice().getDevice_name()); - if (robotInfo.getStatus() == 200) { + if (ObjectUtil.isNotEmpty(robotInfo) && robotInfo.getStatus() == 200) { JSONObject jsonObject = JSONObject.parseObject(robotInfo.body()); String report = jsonObject.getString("report"); //core出错标识 @@ -231,9 +276,26 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device //机器人连接状态 0表示断连 1表示连接上 connection_status = json.getString("connection_status"); //机器人可接单状态 true=可接单 false=不可接单 - dispatchable = json.getString("dispatchable"); + dispatchable = json.getBooleanValue("dispatchable"); + //机器人不可接单原因 + JSONObject undispatchableReason = json.getJSONObject("undispatchable_reason"); + //机器人当前地图不在场景中 + current_map_invalid = undispatchableReason.getBooleanValue("current_map_invalid"); + //网络断连 + disconnect = undispatchableReason.getBooleanValue("disconnect"); + //可接单状态: 0 = api 设置可接单, 1 = api 设置不可接单 + dispatchable_status = undispatchableReason.getIntValue("dispatchable_status"); + //低电量 + low_battery = undispatchableReason.getBooleanValue("low_battery"); + //当前车子的订单被暂停了,需要人为手动恢复 + suspended = undispatchableReason.getBooleanValue("suspended"); + //未确认定位 + unconfirmed_reloc = undispatchableReason.getBooleanValue("unconfirmed_reloc"); + //0: 控制权在core手上 , 1:控制权被其他人抢走 + unlock = undispatchableReason.getIntValue("unlock"); } } else { + message = "请求机器人状态失败"; log.info("请求{}机器人状态失败", this.getDevice().getDevice_name()); } } diff --git a/acs2/nladmin-ui/src/views/system/monitor/device/index.vue b/acs2/nladmin-ui/src/views/system/monitor/device/index.vue index 920ba2fd1..a2b0e65d9 100644 --- a/acs2/nladmin-ui/src/views/system/monitor/device/index.vue +++ b/acs2/nladmin-ui/src/views/system/monitor/device/index.vue @@ -760,6 +760,45 @@ export default { } else if (val === 'inst_message') { const obj = { name: '当前指令信息', value: data[val] } this.arr.push(obj) + } else if (val === 'errors') { + const obj = { name: 'Core出错标识位', value: data[val] } + this.arr.push(obj) + } else if (val === 'upload_scene_status') { + const obj = { name: '是否推送场景运单', value: data[val] } + this.arr.push(obj) + } else if (val === 'procBusiness') { + const obj = { name: '是否在执行用户下的运单', value: data[val] } + this.arr.push(obj) + } else if (val === 'current_order') { + const obj = { name: '机器人当前运单', value: data[val] } + this.arr.push(obj) + } else if (val === 'connection_status') { + const obj = { name: '机器人连接状态', value: data[val] } + this.arr.push(obj) + } else if (val === 'dispatchable') { + const obj = { name: '机器人可接单状态', value: data[val] } + this.arr.push(obj) + } else if (val === 'dispatchable_status') { + const obj = { name: '是否可接单', value: data[val] } + this.arr.push(obj) + } else if (val === 'current_map_invalid') { + const obj = { name: '机器人是否在场景', value: data[val] } + this.arr.push(obj) + } else if (val === 'disconnect') { + const obj = { name: '机器人是否断连', value: data[val] } + this.arr.push(obj) + } else if (val === 'low_battery') { + const obj = { name: '机器人电量状态', value: data[val] } + this.arr.push(obj) + } else if (val === 'suspended') { + const obj = { name: '暂停运单', value: data[val] } + this.arr.push(obj) + } else if (val === 'unconfirmed_reloc') { + const obj = { name: '定位确认', value: data[val] } + this.arr.push(obj) + } else if (val === 'unlock') { + const obj = { name: '控制权', value: data[val] } + this.arr.push(obj) } } }