Commit bebb1b14 LN

NS200看板

1 个父辈 fefb6495
......@@ -2,7 +2,9 @@ package com.neotel.smfcore.core.dashboard.box;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto;
import com.neotel.smfcore.core.dashboard.bean.dto.first.ElecKanbanBoxStatusDto;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean;
......@@ -142,6 +144,10 @@ public class SmdBoxController {
dto.setMinTemperature(msdSettiings.getMinTemperature());
dto.setMaxTemperature(msdSettiings.getMaxTemperature());
dto.setUsageMap(storage.getUsageMap());
MesInfoDto mesInfoDto=DevicesStatusUtil.getLastAgvInfo(cid);
if(mesInfoDto!=null){
dto.getData().put("AGV", JsonUtil.toJsonStr(mesInfoDto));
}
resultList.add(dto);
}
return resultList;
......
......@@ -55,9 +55,20 @@ public class EquipStatusBean implements Serializable {
* key=tPCount,value=今天已打印数量
* key=tNGCount,value=今天NG数量
* key=MES,value=MES最后一次对接信息:格式参考NsMesInfo
*
* key=inShelfStatus ,value=入口料串状态:
* key=outShelfStatus ,value=出口料串状态:
*/
private Map<String, Object> data = new HashMap<>();
// 料串状态定义 IDLE=空闲;
// LOADING=入库中;
// UNLOADING=出库中;
// NEED_EMPTY=需要空料串出库;
// EMPTY_OUT=空料串需要取走
// FULL_OUT=满料串需要取走
/**
* 离线时间,用于判断是否已经处理过离线
*/
......
......@@ -2,9 +2,9 @@ package com.neotel.smfcore.core.equipment.handler.impl;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.core.agv.util.AgvCache;
import com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto;
import com.neotel.smfcore.core.equipment.bean.EquipMsg;
import com.neotel.smfcore.core.equipment.bean.EquipStatusBean;
import com.neotel.smfcore.core.equipment.bean.ns.NsMesInfo;
import com.neotel.smfcore.core.equipment.enums.EquipmentType;
import com.neotel.smfcore.core.equipment.handler.IEquipmentHandler;
import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
......@@ -77,7 +77,7 @@ public class BaseEquipHandler implements IEquipmentHandler {
if(statusBean.getData().containsKey("MES")) {
try {
NsMesInfo mesInfo = (NsMesInfo) statusBean.getData().get("MES");
MesInfoDto mesInfo = (MesInfoDto) statusBean.getData().get("MES");
if(mesInfo!=null){
EquipStatusUtil.updateNsMesInfo(statusBean.getCid(),mesInfo);
}
......
package com.neotel.smfcore.core.equipment.rest;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.equipment.util.EquipmentCache;
import com.neotel.smfcore.core.equipment.bean.EquipStatusBean;
......@@ -53,10 +54,19 @@ public class EquipCommunicationController {
return null;
}
} else {
if (StringUtils.isNotBlank(name)){
if (!name.equals(equipment.getName())){
if (StringUtils.isNotBlank(name)) {
if (!name.equals(equipment.getName())) {
log.info("自动修改设备 cid[" + equipment.getCid() + "] name[" + equipment.getName() + "] 的名字为=" + name);
equipment.setName(name);
equipment = equipmentCache.reloadEquipment(equipment,equipment.getCid());
equipment = equipmentCache.reloadEquipment(equipment, equipment.getCid());
}
}
String type = statusBean.getType();
if (ObjectUtil.isNotEmpty(type)) {
if (!type.equals(equipment.getType())) {
log.info("自动修改设备 cid[" + equipment.getCid() + "] type [" + equipment.getType() + "] 的类型为=" + type);
equipment.setType(type);
equipment = equipmentCache.reloadEquipment(equipment, equipment.getCid());
}
}
}
......
package com.neotel.smfcore.core.equipment.rest;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.equipment.bean.ns.NsMesInfo;
import com.neotel.smfcore.core.equipment.rest.dto.NsViewDto;
import com.neotel.smfcore.core.equipment.util.EquipmentCache;
import com.neotel.smfcore.core.equipment.bean.EquipMsg;
......@@ -86,12 +86,12 @@ public class EquipViewController {
return resultList;
}
@ApiOperation("获取看板数据")
@ApiOperation("获取NS看板数据")
@GetMapping("nsView")
@PreAuthorize("@el.check('equipmentView:info')")
public NsViewDto nsView(String cid, HttpServletRequest servletRequest){
Equipment equip = equipmentCache.getEquipment(cid);
if (equip == null) {
if (equip == null ||(!equip.isNEOSCAN())) {
throw new ValidateException("smfcore.equip.notExist","设备不存在");
}
NsViewDto dto=new NsViewDto();
......@@ -107,13 +107,26 @@ public class EquipViewController {
dto.setMsg(bean.getShowMsg(servletRequest.getLocale()));
dto.setData(bean.getData());
dto.setShowLogs(bean.getMsgList());
NsMesInfo mesInfo=EquipStatusUtil.getNsMesInfo(cid);
MesInfoDto mesInfo=EquipStatusUtil.getNsMesInfo(cid);
if(mesInfo!=null){
dto.setMesInfo(mesInfo);
}
}
}
if(dto.getShowLogs().size()<=0){
EquipMsg msg=new EquipMsg();
msg.setModule("module1");
msg.setMsg("msg1111111111111111111");
dto.getShowLogs().add(msg);
}
if(dto.getMesInfo()==null){
MesInfoDto mesInfoDto=EquipStatusUtil.getLastAgvInfo(cid);
if(mesInfoDto!=null){
dto.setAgvInfo(mesInfoDto);
}
}
return dto;
}
......
package com.neotel.smfcore.core.equipment.rest.dto;
import com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto;
import com.neotel.smfcore.core.equipment.bean.EquipMsg;
import com.neotel.smfcore.core.equipment.bean.ns.NsMesInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -29,7 +29,10 @@ public class NsViewDto implements Serializable {
@ApiModelProperty("Mes信息")
private NsMesInfo mesInfo = null;
private MesInfoDto mesInfo = null;
@ApiModelProperty("agv通信信息")
private MesInfoDto agvInfo = null;
@ApiModelProperty("仅显示的日志消息集合")
private List<EquipMsg> showLogs = new ArrayList<>();
......
......@@ -26,4 +26,8 @@ public class Equipment extends BasePo implements Serializable {
* 是否可用
*/
private boolean available = true;
public boolean isNEOSCAN() {
return EquipmentType.NEOSCAN.name().equals(type);
}
}
......@@ -266,7 +266,7 @@ public class SpBoxController {
return new ArrayList<>();
}
Storage storage = dataCache.getStorageById(storageId);
if (!storage.isSolderPaste()) {
if (storage==null|| !storage.isSolderPaste()) {
return new ArrayList<>();
}
Criteria c = Criteria.where("storageId").is(storageId)
......
package com.neotel.smfcore.core.system.util;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Maps;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto;
import com.neotel.smfcore.core.device.bean.MsgInfo;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.message.enums.MessageType;
......@@ -10,6 +12,7 @@ import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
......@@ -259,4 +262,26 @@ public class DevicesStatusUtil {
log.error("设备状态定时器执行出错:", ex);
}
}
private static Map<String, MesInfoDto> lastAgvMesMap =new HashMap<>();
public static void UpdateAgvInfo(String key, String request, String response, String status){
MesInfoDto mesInfo=new MesInfoDto(status, DateTime.now(),request,response );
if(ObjectUtil.isEmpty(key)){
key="";
}
lastAgvMesMap.put(key,mesInfo);
}
public static MesInfoDto getLastAgvInfo(String key) {
if (lastAgvMesMap.containsKey(key)) {
return lastAgvMesMap.get(key);
}
return lastAgvMesMap.get("");
}
}
package com.neotel.smfcore.core.system.util;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Maps;
import com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto;
import com.neotel.smfcore.core.equipment.bean.EquipStatusBean;
import com.neotel.smfcore.core.equipment.bean.ns.NsMesInfo;
import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.*;
@Slf4j
public class EquipStatusUtil {
......@@ -22,7 +20,7 @@ public class EquipStatusUtil {
/**
* NS设备最后一次MES通信信息(key 为 cid,value是最后一次MesInfo)
*/
private static Map<String, NsMesInfo> NsMesInfoMap = Maps.newConcurrentMap();
private static Map<String, MesInfoDto> NsMesInfoMap = Maps.newConcurrentMap();
/**
......@@ -41,7 +39,7 @@ public class EquipStatusUtil {
}
public static void updateNsMesInfo(String cid,NsMesInfo nsMesInfo) {
public static void updateNsMesInfo(String cid,MesInfoDto nsMesInfo) {
if(nsMesInfo==null){
return;
}
......@@ -51,8 +49,8 @@ public class EquipStatusUtil {
NsMesInfoMap.put(cid, nsMesInfo);
}
public static NsMesInfo getNsMesInfo(String cid){
NsMesInfo mesInfo= NsMesInfoMap.get(cid);
public static MesInfoDto getNsMesInfo(String cid){
MesInfoDto mesInfo= NsMesInfoMap.get(cid);
return mesInfo;
}
......@@ -84,4 +82,24 @@ public class EquipStatusUtil {
log.error("设备状态定时器执行出错:", ex);
}
}
private static Map<String, MesInfoDto> lastAgvMesMap =new HashMap<>();
public static void UpdateAgvInfo(String key, String request, String response, String status){
MesInfoDto mesInfo=new MesInfoDto(status, DateTime.now(),request,response );
if(ObjectUtil.isEmpty(key)){
key="";
}
lastAgvMesMap.put(key,mesInfo);
}
public static MesInfoDto getLastAgvInfo(String key) {
if (lastAgvMesMap.containsKey(key)) {
return lastAgvMesMap.get(key);
}
return lastAgvMesMap.get("");
}
}
package com.neotel.smfcore.custom.duo;
package com.neotel.smfcore.custom.deif20861;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
......@@ -8,9 +8,11 @@ import com.neotel.smfcore.common.utils.StorageConstants;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.bean.UsageItem;
import com.neotel.smfcore.core.equipment.service.po.Equipment;
import com.neotel.smfcore.core.equipment.util.EquipmentCache;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.EquipStatusUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -25,10 +27,12 @@ import java.util.*;
@Slf4j
@RestController
@RequestMapping("/rest/api")
public class DuoController {
public class DEIF20861Controller {
@Autowired
private DataCache dataCache;
@Autowired
private EquipmentCache equipmentCache;
@ApiOperation("S001 MES或AGV系统获取料仓状态信息")
@RequestMapping("/boxDoorInfo")
......@@ -39,6 +43,9 @@ public class DuoController {
storageList.addAll(dataCache.getAllStorage().values());
List<Map<String, Object>> results = Lists.newArrayList();
for (Storage storage : storageList) {
if(!storage.isSmdDuo()){
continue;
}
StatusBean statusBean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (statusBean == null) {
statusBean = new StatusBean();
......@@ -59,25 +66,20 @@ public class DuoController {
//离线
shelfS = "OFFLINE";
}
String msg = statusBean.getMsg();
String msgType = statusBean.getDeviceType();
Map<String, Object> itemMap = new HashMap<>();
itemMap.put("cid", storage.getCid());
// Map<String, UsageItem> usageMap = storage.getUsageMap();
// List<String> reelSize = new ArrayList<>();
// for (UsageItem usageItem : usageMap.values()) {
// String sizeStr = usageItem.getSizeStr();
// reelSize.add(sizeStr);
// }
String reelSize = shelfType.replace("smallReel", "7").replace("bigReel", "15");
String s = StringUtil.join(reelSize);
itemMap.put("reelSize", s);
itemMap.put("status", shelfS);
itemMap.put("hSerial", hserial);
results.add(itemMap);
}
return ResultBean.newOkResult(results);
ResultBean<Object> bean= ResultBean.newOkResult(results);
DevicesStatusUtil.UpdateAgvInfo("",JsonUtil.toJsonStr(paramMap), JsonUtil.toJsonStr(bean),"OK");
return bean;
}
......@@ -129,4 +131,49 @@ public class DuoController {
}
return ResultBean.newErrorResult(2,"smfcore.msg.op.fail","操作失败");
}
@ApiOperation("S003 NS200设备状态查询")
@RequestMapping("/nsShelfInfo")
@AnonymousAccess
public ResultBean nsShelfInfo( @RequestBody Map<String, Object> paramMap) {
Collection<Equipment> storageList = Lists.newArrayList();
storageList.addAll(equipmentCache.getAllEquipment().values());
List<Map<String, Object>> results = Lists.newArrayList();
for (Equipment equipment : storageList) {
if(!equipment.isNEOSCAN()){
continue;
}
StatusBean statusBean = DevicesStatusUtil.getStatusBean(equipment.getCid());
if (statusBean == null) {
statusBean = new StatusBean();
}
Map<String, BoxStatusBean> boxStatusMap = statusBean.getBoxStatus();
int status = -1;
String outShelfStatus = statusBean.getData().getOrDefault("outShelfStatus ", "OFFLINE");
String inShelfStatus = statusBean.getData().getOrDefault("inShelfStatus ", "OFFLINE");
if (boxStatusMap != null) {
BoxStatusBean boxStatusBean = boxStatusMap.get("1");
if (boxStatusBean != null) {
status = boxStatusBean.getStatus();
}
}
if (status == StorageConstants.STATUS.OFFLINE || statusBean.timeOut()) {
//离线
outShelfStatus = "OFFLINE";
inShelfStatus="OFFLINE";
}
Map<String, Object> itemMap = new HashMap<>();
itemMap.put("cid", equipment.getCid());
itemMap.put("reelSize", "7,15");
itemMap.put("inShelfStatus", inShelfStatus);
itemMap.put("outShelfStatus", outShelfStatus);
results.add(itemMap);
}
ResultBean<Object> bean= ResultBean.newOkResult(results);
EquipStatusUtil.UpdateAgvInfo("",JsonUtil.toJsonStr(paramMap), JsonUtil.toJsonStr(bean),"OK");
return bean;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!