Commit e62df9ab LN

Merge remote-tracking branch 'origin/master'

2 个父辈 8b422179 5976bc29
......@@ -196,6 +196,7 @@ public class MenuInit {
Menu pMenuLog = Menu.CreatePMenu("日志管理", 8, "log","log",null);
addDefaultFunctionMenu(61, pMenuLog, "物料日志", "taskLog", "neolight/taskLog/index", "education",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(62, pMenuLog, "消息查询", "message", "neolight/message/index", "messagefind",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(63, pMenuLog, "日志监控", "logMonitor", "neolight/logMonitor/index", "messagefind");
//暂未找到页面
// addDefaultFunctionMenu(63, pMenuLog, "接口异常", "interfaceException", "neolight/interfaceException/index", "messagefind");
......
......@@ -763,6 +763,9 @@ public class StatusBean {
} else if (msg.startsWith("W=")) {
msgType = MessageType.WARNING.name();
msg = msg.substring(2);
} else if (msg.startsWith("C=")){
msgType = MessageType.CRITICAL.name();
msg = msg.substring(2);
}
if (msgArray.length == 1) {
......
......@@ -25,4 +25,9 @@ public enum MessageType {
* 4 显示数据,仅显示不保存
*/
SHOW,
/**
* 5 需要人员立即操作的
*/
CRITICAL
}
package com.neotel.smfcore.core.message.rest;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.BetweenData;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.language.util.MessageUtils;
......@@ -32,9 +36,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.*;
@Slf4j
@RestController
......@@ -89,6 +91,8 @@ public class MessageController {
return getMsgReportList(criteria, request.getLocale());
}
private List<MsgCountDto> getMsgReportList(MessageCriteria criteria,Locale locale) {
Criteria c = Criteria.where("type").is("ERROR");
if (ObjectUtil.isNotEmpty(criteria.getDeviceName())) {
......@@ -147,5 +151,43 @@ public class MessageController {
log.info("msgReportCount 导出完成");
}
@ApiOperation("根据type汇总总数量")
@GetMapping("/typeTotalByDate")
@AnonymousAccess
public ResultBean typeTotalByDate(MessageCriteria criteria) {
//默认取7天的,如果客户端传的有,就用客户端的
Date endDate = new Date();
Date startDate = DateUtil.offsetDay(endDate, -7);
BetweenData<Date> updateDate = criteria.getUpdateDate();
if (updateDate != null && !updateDate.isEmpty()) {
Date from = updateDate.getFrom();
Date to = updateDate.getTo();
if (from != null) {
startDate = from;
}
if (to != null) {
endDate = to;
}
}
//只需要返回type 去统计数据
String field = "type";
List<Message> messageList = messageManager.findByUpdateAndFileds(startDate, endDate, field);
Map<String, Integer> resultMap = Maps.newConcurrentMap();
if (messageList != null && !messageList.isEmpty()) {
for (Message message : messageList) {
String type = message.getType();
Integer count = resultMap.get(type);
if (count == null) {
count = 0;
}
resultMap.put(type, count + 1);
}
}
return ResultBean.newOkResult(resultMap);
}
}
......@@ -7,6 +7,7 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
@Data
public class MessageCriteria {
......@@ -18,7 +19,7 @@ public class MessageCriteria {
private BetweenData<Date> createDate;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private BetweenData<Date> updateDate;
@QueryCondition
......@@ -36,4 +37,8 @@ public class MessageCriteria {
@QueryCondition
@ApiModelProperty("类型")
private String type;
@QueryCondition(type = QueryCondition.Type.IN,propName = "type")
@ApiModelProperty("多个类型")
private List<String> typeList;
}
......@@ -7,6 +7,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Locale;
......@@ -18,4 +19,6 @@ public interface IMessageManager extends IBaseManager<Message> {
Message findOne(Query query);
List<MsgCountDto> getMsgCountList(Criteria criteria);
List<Message> findByUpdateAndFileds(Date startDate, Date endDate, String field);
}
......@@ -131,6 +131,15 @@ public class MessageManagerImpl implements IMessageManager {
return messageDao.getMsgCountList(criteria) ;
}
@Override
public List<Message> findByUpdateAndFileds(Date startDate, Date endDate, String field) {
Query q = new Query();
Criteria c = Criteria.where("updateDate").gte(startDate).lt(endDate);
q.addCriteria(c);
q.fields().include(field);
return messageDao.findByQuery(q);
}
@Data
private class MsgDeviceName {
private String deviceName;
......
package com.neotel.smfcore.core.storage.rest;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.*;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
import com.neotel.smfcore.core.storage.rest.dto.*;
import com.neotel.smfcore.core.storage.rest.mapstruct.InventoryItemMapper;
import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper;
......@@ -77,6 +82,9 @@ public class MaterialController {
@Autowired
private final IGroupManager groupManager;
@Autowired
private CodeResolve codeResolve;
@ApiOperation("导出库存列表")
@GetMapping(value = "/inventory/download")
@PreAuthorize("@el.check('tacticsOuput')")
......@@ -388,4 +396,37 @@ public class MaterialController {
}
}
@ApiOperation("扫描空盘直接出库")
@RequestMapping("/scanEmptyPallet")
public ResultBean scanEmptyPallet(@RequestBody Map<String, String> paramMap) {
String code = paramMap.get("code");
log.info("扫描空盘直接出库,信息为:" + code);
if (StringUtils.isEmpty(code)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"code"});
}
Barcode barcode = codeResolve.resolveOneValideBarcode("=1x1=" + code);
if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.noValidCode", "无效的条码");
}
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
String partNumber = barcode.getPartNumber();
Collection<String> excludePosIds = taskService.excludePosIds();
CHECKOUT_TYPE checkOutType = dataCache.getCheckOutType();
StoragePos pos = storagePosManager.findPartNumberInStorages(availableStorageIds, partNumber, excludePosIds, checkOutType);
if (pos == null) {
return ResultBean.newErrorResult(-1, "smfcore.label.noReel", "未找到可出库的物料");
}
log.info("扫描空盘出库,对应的partNumber为:" + barcode.getPartNumber() + ",对应的库位:" + pos.getPosName() + ",进行出库");
Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog task = new DataLog(storage,pos.getBarcode(),pos);
task.setType(OP.CHECKOUT);
task.setOperator(SecurityUtils.getCurrentUsername());
task.setSingleOut(true);
task.setSourceId(null);
task.setSourceName("PN");
taskService.addTaskToExecute(task);
return ResultBean.newOkResult("");
}
}
......@@ -420,4 +420,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7
\ No newline at end of file
......@@ -410,4 +410,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=Log-\u00DCberwachung
\ No newline at end of file
......@@ -411,4 +411,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=Log Monitoring
\ No newline at end of file
......@@ -410,4 +410,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=Surveillance des Journaux
\ No newline at end of file
......@@ -408,3 +408,4 @@ smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=\u30ED\u30B0\u76E3\u8996
\ No newline at end of file
......@@ -407,4 +407,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7
\ No newline at end of file
......@@ -407,4 +407,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=\u65E5\u8A8C\u76E3\u63A7
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!