Commit e62df9ab LN

Merge remote-tracking branch 'origin/master'

2 个父辈 8b422179 5976bc29
...@@ -196,6 +196,7 @@ public class MenuInit { ...@@ -196,6 +196,7 @@ public class MenuInit {
Menu pMenuLog = Menu.CreatePMenu("日志管理", 8, "log","log",null); Menu pMenuLog = Menu.CreatePMenu("日志管理", 8, "log","log",null);
addDefaultFunctionMenu(61, pMenuLog, "物料日志", "taskLog", "neolight/taskLog/index", "education",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(61, pMenuLog, "物料日志", "taskLog", "neolight/taskLog/index", "education",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(62, pMenuLog, "消息查询", "message", "neolight/message/index", "messagefind",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"); // addDefaultFunctionMenu(63, pMenuLog, "接口异常", "interfaceException", "neolight/interfaceException/index", "messagefind");
......
...@@ -763,6 +763,9 @@ public class StatusBean { ...@@ -763,6 +763,9 @@ public class StatusBean {
} else if (msg.startsWith("W=")) { } else if (msg.startsWith("W=")) {
msgType = MessageType.WARNING.name(); msgType = MessageType.WARNING.name();
msg = msg.substring(2); msg = msg.substring(2);
} else if (msg.startsWith("C=")){
msgType = MessageType.CRITICAL.name();
msg = msg.substring(2);
} }
if (msgArray.length == 1) { if (msgArray.length == 1) {
......
...@@ -25,4 +25,9 @@ public enum MessageType { ...@@ -25,4 +25,9 @@ public enum MessageType {
* 4 显示数据,仅显示不保存 * 4 显示数据,仅显示不保存
*/ */
SHOW, SHOW,
/**
* 5 需要人员立即操作的
*/
CRITICAL
} }
package com.neotel.smfcore.core.message.rest; package com.neotel.smfcore.core.message.rest;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.neotel.smfcore.common.base.IExcelDownLoad; 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.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
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;
...@@ -32,9 +36,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -32,9 +36,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Locale;
@Slf4j @Slf4j
@RestController @RestController
...@@ -89,6 +91,8 @@ public class MessageController { ...@@ -89,6 +91,8 @@ public class MessageController {
return getMsgReportList(criteria, request.getLocale()); return getMsgReportList(criteria, request.getLocale());
} }
private List<MsgCountDto> getMsgReportList(MessageCriteria criteria,Locale locale) { private List<MsgCountDto> getMsgReportList(MessageCriteria criteria,Locale locale) {
Criteria c = Criteria.where("type").is("ERROR"); Criteria c = Criteria.where("type").is("ERROR");
if (ObjectUtil.isNotEmpty(criteria.getDeviceName())) { if (ObjectUtil.isNotEmpty(criteria.getDeviceName())) {
...@@ -147,5 +151,43 @@ public class MessageController { ...@@ -147,5 +151,43 @@ public class MessageController {
log.info("msgReportCount 导出完成"); 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; ...@@ -7,6 +7,7 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
@Data @Data
public class MessageCriteria { public class MessageCriteria {
...@@ -18,7 +19,7 @@ public class MessageCriteria { ...@@ -18,7 +19,7 @@ public class MessageCriteria {
private BetweenData<Date> createDate; private BetweenData<Date> createDate;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate") @QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private BetweenData<Date> updateDate; private BetweenData<Date> updateDate;
@QueryCondition @QueryCondition
...@@ -36,4 +37,8 @@ public class MessageCriteria { ...@@ -36,4 +37,8 @@ public class MessageCriteria {
@QueryCondition @QueryCondition
@ApiModelProperty("类型") @ApiModelProperty("类型")
private String type; 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; ...@@ -7,6 +7,7 @@ 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;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
...@@ -18,4 +19,6 @@ public interface IMessageManager extends IBaseManager<Message> { ...@@ -18,4 +19,6 @@ public interface IMessageManager extends IBaseManager<Message> {
Message findOne(Query query); Message findOne(Query query);
List<MsgCountDto> getMsgCountList(Criteria criteria); List<MsgCountDto> getMsgCountList(Criteria criteria);
List<Message> findByUpdateAndFileds(Date startDate, Date endDate, String field);
} }
...@@ -131,6 +131,15 @@ public class MessageManagerImpl implements IMessageManager { ...@@ -131,6 +131,15 @@ public class MessageManagerImpl implements IMessageManager {
return messageDao.getMsgCountList(criteria) ; 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 @Data
private class MsgDeviceName { private class MsgDeviceName {
private String deviceName; private String deviceName;
......
package com.neotel.smfcore.core.storage.rest; package com.neotel.smfcore.core.storage.rest;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean; 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.exception.ValidateException;
import com.neotel.smfcore.common.utils.*; import com.neotel.smfcore.common.utils.*;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE; 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.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; 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.device.util.DataCache;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.storage.bean.InventoryItem; 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.dto.*;
import com.neotel.smfcore.core.storage.rest.mapstruct.InventoryItemMapper; import com.neotel.smfcore.core.storage.rest.mapstruct.InventoryItemMapper;
import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper; import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper;
...@@ -77,6 +82,9 @@ public class MaterialController { ...@@ -77,6 +82,9 @@ public class MaterialController {
@Autowired @Autowired
private final IGroupManager groupManager; private final IGroupManager groupManager;
@Autowired
private CodeResolve codeResolve;
@ApiOperation("导出库存列表") @ApiOperation("导出库存列表")
@GetMapping(value = "/inventory/download") @GetMapping(value = "/inventory/download")
@PreAuthorize("@el.check('tacticsOuput')") @PreAuthorize("@el.check('tacticsOuput')")
...@@ -388,4 +396,37 @@ public class MaterialController { ...@@ -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 ...@@ -420,4 +420,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file \ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7
\ No newline at end of file \ No newline at end of file
...@@ -410,4 +410,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53 ...@@ -410,4 +410,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file \ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=Log-\u00DCberwachung
\ No newline at end of file \ No newline at end of file
...@@ -411,4 +411,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53 ...@@ -411,4 +411,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file \ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=Log Monitoring
\ No newline at end of file \ No newline at end of file
...@@ -410,4 +410,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53 ...@@ -410,4 +410,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file \ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=Surveillance des Journaux
\ No newline at end of file \ No newline at end of file
...@@ -408,3 +408,4 @@ smfcore.language.displayLanName.en-US=EN ...@@ -408,3 +408,4 @@ smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=\u30ED\u30B0\u76E3\u8996
\ No newline at end of file \ No newline at end of file
...@@ -407,4 +407,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53 ...@@ -407,4 +407,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file \ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7
\ No newline at end of file \ No newline at end of file
...@@ -407,4 +407,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53 ...@@ -407,4 +407,5 @@ smfcore.language.displayLanName.zh-TW=\u7E41\u4F53
smfcore.language.displayLanName.en-US=EN smfcore.language.displayLanName.en-US=EN
smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E smfcore.language.displayLanName.ja-JP=\u65E5\u672C\u8A9E
smfcore.language.displayLanName.fr-FR=Fran\u00E7ais smfcore.language.displayLanName.fr-FR=Fran\u00E7ais
smfcore.language.displayLanName.de-DE=Deutsch
\ No newline at end of file \ No newline at end of file
smfcore.language.displayLanName.de-DE=Deutsch
smfcore.logMonitor=\u65E5\u8A8C\u76E3\u63A7
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!