Commit 37f6729e LN

1053:1.Status页面SDBH分开显示。2.增加查询库位是否有料或物料是否在库位中接口。3.报表:料盘日志,Utilization ,ERROR log

1 个父辈 c7abff62
...@@ -585,4 +585,43 @@ public class DeviceController { ...@@ -585,4 +585,43 @@ public class DeviceController {
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
@ApiOperation("查询库位是否有料或物料是否在库位中")
@RequestMapping(value = "/service/store/posQuery")
@ResponseBody
@AnonymousAccess
public ResultBean queryPos(HttpServletRequest request) {
String posName = request.getParameter("posName");
String barcode = request.getParameter("barcode");
//参数:发送posName 或 barcode
//返回code=0,有料或在库位中,data中返回 posName,barcode,plateW,plateH
//返回code=101: 未找到库位号
//返回code=102:条码未找到库位
//返回code=100:库位中无料
StoragePos pos = null;
if (ObjectUtil.isNotEmpty(posName)) {
//查询库位中是否有料
pos = storagePosManager.getByPosName(posName);
if (pos == null) {
return ResultBean.newErrorResult(101, "smfcore.queryPos.cannotFind", "cannot find posName ["+posName+"]", new String[]{posName});
} else if (pos.getBarcode() == null) {
return ResultBean.newErrorResult(100, "smfcore.queryPos.posIsEmpty", "["+posName+"] is empty", new String[]{posName});
}
} else if (ObjectUtil.isNotEmpty(barcode)) {
pos = storagePosManager.getByBarcode(barcode);
if (pos == null) {
return ResultBean.newErrorResult(102, "smfcore.queryPos.cannotFindBarcode", "cannot find barcode ["+barcode+"] In storage", new String[]{barcode});
}
}else{
return ResultBean.newErrorResult(101, "smfcore.queryPos.cannotFind", "cannot find posName ["+posName+"]", new String[]{posName});
}
Map<String, String> data = new HashMap<>();
data.put("posName", pos.getPosName());
data.put("barcode", pos.getBarcode().getBarcode());
data.put("plateW", pos.getBarcode().getPlateSize() + "");
data.put("plateH", pos.getBarcode().getHeight() + "");
return ResultBean.newOkResult(data);
}
} }
package com.neotel.smfcore.core.materialLog.rest;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.materialLog.rest.dto.MaterialLogDto;
import com.neotel.smfcore.core.materialLog.rest.mapstruct.MaterialLogMapper;
import com.neotel.smfcore.core.materialLog.rest.query.MaterialLogCriteria;
import com.neotel.smfcore.core.materialLog.service.manager.IMaterialLogManager;
import com.neotel.smfcore.core.materialLog.service.po.MaterialLog;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Slf4j
@Api(tags = "1053:料盘日志")
@RestController
@RequestMapping("/api/materialLog")
@RequiredArgsConstructor
public class MaterialLogController {
@Autowired
private IMaterialLogManager materialLogManager;
@Autowired
private MaterialLogMapper materialLogMapper;
@ApiOperation("查询料盘日志")
@GetMapping
public PageData<MaterialLogDto> query(MaterialLogCriteria criteria, Pageable pageable) {
Query query = QueryHelp.getQuery(criteria);
PageData<MaterialLog> pages = materialLogManager.findByPage(query, pageable);
List<MaterialLogDto> logDtos = materialLogMapper.toDto(pages.getContent());
return new PageData(logDtos, pages.getTotalElements());
}
}
package com.neotel.smfcore.core.materialLog.rest.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MaterialLogDto implements Serializable {
@ApiModelProperty("条码编号")
private String barcode;
@ApiModelProperty("库位号")
private String posName;
@ApiModelProperty("类型:入库OP.PUT_IN,出库OP.CHECKOUT")
private int type;
@ApiModelProperty("状态:OP_STATUS")
private String status;
@ApiModelProperty("位置信息,如料架编号,托盘编号,移栽编号,皮带线编号,机器人编号等")
private String locInfo = "";
}
package com.neotel.smfcore.core.materialLog.rest.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.materialLog.rest.dto.MaterialLogDto;
import com.neotel.smfcore.core.materialLog.service.po.MaterialLog;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MaterialLogMapper extends BaseMapper<MaterialLogDto, MaterialLog> {
}
package com.neotel.smfcore.core.materialLog.rest.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class MaterialLogCriteria {
@QueryCondition(blurry = "barcode,posName,locInfo")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> createDate;
@QueryCondition(blurry = "barcode")
private String barcode;
@QueryCondition(blurry = "posName")
private String posName;
@ApiModelProperty("status")
@QueryCondition(blurry = "status")
private String status;
}
...@@ -5,10 +5,12 @@ import com.neotel.smfcore.common.bean.PageData; ...@@ -5,10 +5,12 @@ import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.message.rest.bean.dto.MessageDto; import com.neotel.smfcore.core.message.rest.bean.dto.MessageDto;
import com.neotel.smfcore.core.message.rest.bean.dto.MsgCountDto;
import com.neotel.smfcore.core.message.rest.bean.mapstruct.MessageMapper; import com.neotel.smfcore.core.message.rest.bean.mapstruct.MessageMapper;
import com.neotel.smfcore.core.message.rest.bean.query.MessageCriteria; import com.neotel.smfcore.core.message.rest.bean.query.MessageCriteria;
import com.neotel.smfcore.core.message.service.manager.IMessageManager; import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.message.service.po.Message; import com.neotel.smfcore.core.message.service.po.Message;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -70,4 +72,33 @@ public class MessageController { ...@@ -70,4 +72,33 @@ public class MessageController {
List<String> typeList=messageManager.findDeviceNameList(); List<String> typeList=messageManager.findDeviceNameList();
return typeList; return typeList;
} }
@ApiOperation("消息统计,根据模块名统计")
@GetMapping(value = "/msgCount")
@AnonymousAccess
public List<MsgCountDto> msgCount(MessageCriteria criteria, HttpServletRequest request) {
// Query query = QueryHelp.getQuery(criteria);
Criteria c = Criteria.where("type").is("ERROR");
if (ObjectUtil.isNotEmpty(criteria.getDeviceName())) {
c.and("deviceName").is(criteria.getDeviceName());
}
if (criteria.getCreateDate() != null && criteria.getCreateDate().getFrom() != null) {
c.and("createDate").gte(criteria.getCreateDate().getFrom());
}
if (criteria.getCreateDate() != null && criteria.getCreateDate().getTo() != null) {
c.and("createDate").lte(criteria.getCreateDate().getTo());
}
List<MsgCountDto> list = messageManager.getMsgCountList(c);
// List<MessageDto> dtos=messageMapper.toDto(list);
for (int i = 0; i < list.size(); i++) {
if (ObjectUtil.isNotEmpty(list.get(i).getMsgCode())) {
list.get(i).setMsg(MessageUtils.getText(list.get(i).getMsgCode(), list.get(i).getMsgParams(), request.getLocale(), list.get(i).getId()));
} else {
list.get(i).setMsg(list.get(i).getId());
}
}
return list;
}
} }
package com.neotel.smfcore.core.message.rest.bean.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MsgCountDto implements Serializable {
@ApiModelProperty(value = "ID")
private String id;
@ApiModelProperty(value = "消息字符串Code")
private String msgCode;
@ApiModelProperty(value = "消息内容")
private String msg;
@ApiModelProperty(value = "参数")
private String[] msgParams;
private Integer count;
}
package com.neotel.smfcore.core.message.service.dao; package com.neotel.smfcore.core.message.service.dao;
import com.neotel.smfcore.common.base.IBaseDao; import com.neotel.smfcore.common.base.IBaseDao;
import com.neotel.smfcore.core.message.rest.bean.dto.MsgCountDto;
import org.springframework.data.mongodb.core.query.Criteria;
import java.util.List;
public interface IMessageDao extends IBaseDao { public interface IMessageDao extends IBaseDao {
List<MsgCountDto> getMsgCountList(Criteria criteria);
} }
package com.neotel.smfcore.core.message.service.dao.impl; package com.neotel.smfcore.core.message.service.dao.impl;
import com.neotel.smfcore.common.base.AbstractBaseDao; import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.core.message.rest.bean.dto.MsgCountDto;
import com.neotel.smfcore.core.message.service.dao.IMessageDao; import com.neotel.smfcore.core.message.service.dao.IMessageDao;
import com.neotel.smfcore.core.message.service.po.Message; import com.neotel.smfcore.core.message.service.po.Message;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
@Service @Service
public class MessageDaoImpl extends AbstractBaseDao implements IMessageDao { public class MessageDaoImpl extends AbstractBaseDao implements IMessageDao {
@Override @Override
public Class getEntityClass() { public Class getEntityClass() {
return Message.class; return Message.class;
} }
@Override
public List<MsgCountDto> getMsgCountList(Criteria criteria) {
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(criteria),
Aggregation.group("msg").count().as("count")
.first("msgCode").as("msgCode").first("msgParams").as("msgParams")
// Aggregation.project("count").and("msg").previousOperation()
);
AggregationResults<MsgCountDto> results = getMongoTemplate().aggregate(agg, getEntityClass(), MsgCountDto.class);
return results.getMappedResults();
}
} }
package com.neotel.smfcore.core.message.service.manager; package com.neotel.smfcore.core.message.service.manager;
import com.neotel.smfcore.common.base.IBaseManager; import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.core.message.rest.bean.dto.MsgCountDto;
import com.neotel.smfcore.core.message.service.po.Message; import com.neotel.smfcore.core.message.service.po.Message;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -14,4 +16,6 @@ public interface IMessageManager extends IBaseManager<Message> { ...@@ -14,4 +16,6 @@ public interface IMessageManager extends IBaseManager<Message> {
List<String> findDeviceNameList(); List<String> findDeviceNameList();
Message findOne(Query query); Message findOne(Query query);
List<MsgCountDto> getMsgCountList(Criteria criteria);
} }
...@@ -9,6 +9,7 @@ import com.neotel.smfcore.core.language.service.nanager.impl.LanguageMsgManagerI ...@@ -9,6 +9,7 @@ import com.neotel.smfcore.core.language.service.nanager.impl.LanguageMsgManagerI
import com.neotel.smfcore.core.language.service.po.LanguageMsg; import com.neotel.smfcore.core.language.service.po.LanguageMsg;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.message.enums.MessageType; import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.message.rest.bean.dto.MsgCountDto;
import com.neotel.smfcore.core.message.service.dao.IMessageDao; import com.neotel.smfcore.core.message.service.dao.IMessageDao;
import com.neotel.smfcore.core.message.service.manager.IMessageManager; import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.message.service.po.Message; import com.neotel.smfcore.core.message.service.po.Message;
...@@ -125,6 +126,11 @@ public class MessageManagerImpl implements IMessageManager { ...@@ -125,6 +126,11 @@ public class MessageManagerImpl implements IMessageManager {
return messageDao.findOne(query); return messageDao.findOne(query);
} }
@Override
public List<MsgCountDto> getMsgCountList(Criteria criteria) {
return messageDao.getMsgCountList(criteria) ;
}
@Data @Data
private class MsgDeviceName { private class MsgDeviceName {
private String deviceName; private String deviceName;
......
package com.neotel.smfcore.core.message.util; package com.neotel.smfcore.core.message.util;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.device.util.EquipmentCache; import com.neotel.smfcore.core.device.util.EquipmentCache;
import com.neotel.smfcore.core.equipment.service.po.Equipment; import com.neotel.smfcore.core.equipment.service.po.Equipment;
...@@ -11,13 +12,19 @@ import com.neotel.smfcore.core.message.service.po.Message; ...@@ -11,13 +12,19 @@ import com.neotel.smfcore.core.message.service.po.Message;
import com.neotel.smfcore.core.message.util.bean.DeviceInfo; import com.neotel.smfcore.core.message.util.bean.DeviceInfo;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.aggregation.ComparisonOperators; import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Map;
@Slf4j @Slf4j
@Component @Component
public class DeviceMessageUtil { public class DeviceMessageUtil {
...@@ -144,4 +151,41 @@ public class DeviceMessageUtil { ...@@ -144,4 +151,41 @@ public class DeviceMessageUtil {
} }
} }
/**
* 服务器重启后,自动更新设备为离线
*/
@PostConstruct
public static void processDeviceStatus() {
try {
//获取所有料仓状态
Map<String, Storage> allStorages = dataCache.getAllStorage();
String[] msgCodes = new String[]{"smfcore.messages.online", "smfcore.messages.offline"};
for (Storage storage :
allStorages.values()) {
Criteria criteria = Criteria.where("deviceId").is(storage.getId());
criteria.and("msgCode").in(msgCodes);
Sort sort = Sort.by(Sort.Direction.DESC, "createDate");
Query query = new Query(criteria);
query.with(sort);
Message message = messageManager.findOne(query);
if (message != null) {
if (message.getMsgCode().equals("smfcore.messages.online")) {
//其实早已经离线
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (bean == null) {
DeviceMessageUtil.addOfflineMessage(storage.getCid(), "");
log.info("processDeviceStatus 添加设备[" + storage.getCid() + "][" + storage.getName() + "]离线消息");
continue;
}
}
}
}
} catch (Exception ex) {
log.error("processDeviceStatus 出错:" + ex.getMessage());
}
}
} }
...@@ -91,7 +91,25 @@ public class MicronReportController { ...@@ -91,7 +91,25 @@ public class MicronReportController {
@AnonymousAccess @AnonymousAccess
public PageData<MessageDto> errorLog(MessageCriteria criteria, Pageable pageable, HttpServletRequest request){ public PageData<MessageDto> errorLog(MessageCriteria criteria, Pageable pageable, HttpServletRequest request){
criteria.setType("error"); criteria.setType("ERROR");
Query query = QueryHelp.getQuery(criteria);
PageData<Message> messagePageData=messageManager.findByPage(query,pageable);
List<MessageDto> dtos=messageMapper.toDto(messagePageData.getContent());
for (int i=0;i<dtos.size();i++) {
if(ObjectUtil.isNotEmpty(dtos.get(i).getMsgCode())){
dtos.get(i).setMsg(MessageUtils.getText(dtos.get(i).getMsgCode(),dtos.get(i).getMsgParams(),request.getLocale(),dtos.get(i).getMsg()));
}
}
return new PageData(dtos,messagePageData.getTotalElements());
}
@ApiOperation("eventLog:事件列表")
@GetMapping("/eventLog")
@AnonymousAccess
public PageData<MessageDto> eventLog(MessageCriteria criteria, Pageable pageable, HttpServletRequest request){
criteria.setType("INFO");
Query query = QueryHelp.getQuery(criteria); Query query = QueryHelp.getQuery(criteria);
PageData<Message> messagePageData=messageManager.findByPage(query,pageable); PageData<Message> messagePageData=messageManager.findByPage(query,pageable);
List<MessageDto> dtos=messageMapper.toDto(messagePageData.getContent()); List<MessageDto> dtos=messageMapper.toDto(messagePageData.getContent());
......
...@@ -97,9 +97,12 @@ public class MicronStatusController { ...@@ -97,9 +97,12 @@ public class MicronStatusController {
boxList.add("M" + i); boxList.add("M" + i);
} }
// SBDH1, SBDH2, SBDH3, SBSH1, SBSH2 // SBDH1, SBDH2, SBDH3, SBSH1, SBSH2
boxList.add("SBDH1"); boxList.add("SBDH1-1");
boxList.add("SBDH2"); boxList.add("SBDH1-2");
boxList.add("SBDH3"); boxList.add("SBDH2-1");
boxList.add("SBDH2-2");
boxList.add("SBDH3-1");
boxList.add("SBDH3-2");
boxList.add("SBSH1"); boxList.add("SBSH1");
boxList.add("SBSH2"); boxList.add("SBSH2");
// for (MicronEquipName name : MicronEquipName.sbBoxList()){ // for (MicronEquipName name : MicronEquipName.sbBoxList()){
...@@ -110,7 +113,7 @@ public class MicronStatusController { ...@@ -110,7 +113,7 @@ public class MicronStatusController {
boxList) { boxList) {
//查找料仓 //查找料仓
MicronEquipStatus s = getBoxEquip(boxName, servletRequest.getLocale()); MicronEquipStatus s = getBoxEquip(boxName, servletRequest.getLocale());
dto.getStatusMap().put(s.getEquipName(), s.getStatus()); dto.getStatusMap().put(s.getEquipName().replace("-",""), s.getStatus());
if (s.getMsgList() != null && s.getMsgList().size() > 0) { if (s.getMsgList() != null && s.getMsgList().size() > 0) {
allMsgList.addAll(s.getMsgList()); allMsgList.addAll(s.getMsgList());
} }
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!