Commit ef055ec7 LN

增加onlineData表:设备上线离线数据存储

1 个父辈 17dc7f48
package com.neotel.smfcore.core.inList.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class InListItemQueryCriteria {
@QueryCondition(blurry = "name,PN,ri")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "createDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> createDate;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> updateDate;
@QueryCondition(blurry = "name")
private String name;
@QueryCondition(blurry = "ri")
private String ri;
}
package com.neotel.smfcore.core.selfAudit.rest.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class SelfAuditItemCriteria {
@QueryCondition(blurry = "batchNo,posName,barcode")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "createDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> createDate;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> updateDate;
@QueryCondition(blurry = "batchNo")
private String batchNo;
}
package com.neotel.smfcore.custom.micron20031;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.inList.rest.bean.dto.InListItemDto;
import com.neotel.smfcore.core.inList.rest.bean.mapstruct.InListItemMapper;
import com.neotel.smfcore.core.inList.rest.bean.query.InListItemQueryCriteria;
import com.neotel.smfcore.core.inList.service.manager.IInListItemManager;
import com.neotel.smfcore.core.inList.service.po.InListItem;
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.mapstruct.MessageMapper;
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.po.Message;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
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 javax.servlet.http.HttpServletRequest;
import java.util.List;
@Slf4j
@Api(tags = "20031:Abnormality report 异常报告")
@RestController
@RequestMapping("/rest/micron/sp/AReport")
@RequiredArgsConstructor
public class MicronAbnormalityReportsController {
@Autowired
private IMessageManager messageManager;
@Autowired
private MessageMapper messageMapper;
@Autowired
private IInListItemManager inListItemManager;
@Autowired
private InListItemMapper inListItemMapper;
@ApiOperation(" Detailed full error history ErrorLog:错误数据列表")
@GetMapping("/errorLog")
@AnonymousAccess
public PageData<MessageDto> errorLog(MessageCriteria criteria, Pageable pageable, HttpServletRequest request){
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("- Incomplete material transfer 查入库单是否发邮件字段;页面:Matreq Order, MA. ID")
@GetMapping("/incompleteInlist")
@AnonymousAccess
public PageData<InListItemDto> incompleteInlist(InListItemQueryCriteria criteria, Pageable pageable, HttpServletRequest request) {
Query query = QueryHelp.getQuery(criteria);
PageData<InListItem> pages = inListItemManager.findByPage(query, pageable);
List<InListItemDto> itemDtos = inListItemMapper.toDto(pages.getContent());
return new PageData(itemDtos, pages.getTotalElements());
}
}
...@@ -6,6 +6,11 @@ import com.google.common.collect.Lists; ...@@ -6,6 +6,11 @@ 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.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.selfAudit.rest.dto.SelfAuditItemDto;
import com.neotel.smfcore.core.selfAudit.rest.mapstruct.SelfAuditItemMapper;
import com.neotel.smfcore.core.selfAudit.rest.query.SelfAuditItemCriteria;
import com.neotel.smfcore.core.selfAudit.service.manager.ISelfAuditItemManager;
import com.neotel.smfcore.core.selfAudit.service.po.SelfAuditItem;
import com.neotel.smfcore.core.storage.bean.InventoryItem; import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.rest.dto.InventoryItemDto; import com.neotel.smfcore.core.storage.rest.dto.InventoryItemDto;
import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto; import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto;
...@@ -57,47 +62,53 @@ public class MicronInventoryReportsController { ...@@ -57,47 +62,53 @@ public class MicronInventoryReportsController {
@Autowired @Autowired
private IDataLogManager dataLogManager; private IDataLogManager dataLogManager;
@Autowired
private ISelfAuditItemManager selfAuditItemManager;
@Autowired
private SelfAuditItemMapper selfAuditItemMapper;
@ApiOperation("Inventory Chart(All) I2 :库存列表饼图报表") @ApiOperation("Inventory Chart(All) I2 :库存列表饼图报表")
@GetMapping(value = "/inventory") @GetMapping(value = "/inventory")
@AnonymousAccess @AnonymousAccess
public List<InventoryItemDto> inventory(InventoryQueryCriteria criteria, Pageable pageable) { public List<InventoryItemDto> inventory(InventoryQueryCriteria criteria, Pageable pageable) {
List<InventoryItemDto> results= getInventory(criteria, pageable); List<InventoryItemDto> results = getInventory(criteria, pageable);
return results; return results;
} }
private List<InventoryItemDto> getInventory(InventoryQueryCriteria criteria, Pageable pageable){
Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(criteria.getStorageIdList(),criteria.getBlurry()); private List<InventoryItemDto> getInventory(InventoryQueryCriteria criteria, Pageable pageable) {
Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(criteria.getStorageIdList(), criteria.getBlurry());
List<InventoryItem> list = Lists.newArrayList(inventoryItemMap.values()); List<InventoryItem> list = Lists.newArrayList(inventoryItemMap.values());
List<InventoryItemDto> dtoList = inventoryItemMapper.toDto(list); List<InventoryItemDto> dtoList = inventoryItemMapper.toDto(list);
List<InventoryItemDto> resultList = new ArrayList<>(); List<InventoryItemDto> resultList = new ArrayList<>();
//过滤掉没有库存的 //过滤掉没有库存的
for (InventoryItemDto inventoryItemDto : dtoList) { for (InventoryItemDto inventoryItemDto : dtoList) {
if(inventoryItemDto.getStockReel() > 0){ if (inventoryItemDto.getStockReel() > 0) {
resultList.add(inventoryItemDto); resultList.add(inventoryItemDto);
} }
} }
Comparator<InventoryItemDto> comparator = Comparator.comparing(InventoryItemDto::getPartNumber); Comparator<InventoryItemDto> comparator = Comparator.comparing(InventoryItemDto::getPartNumber);
Sort.Order lockReelOrder = pageable.getSort().getOrderFor("lockReel"); Sort.Order lockReelOrder = pageable.getSort().getOrderFor("lockReel");
if(lockReelOrder != null){ if (lockReelOrder != null) {
comparator = Comparator.comparing(InventoryItemDto::getStockReel,Comparator.nullsFirst(Integer::compareTo)); comparator = Comparator.comparing(InventoryItemDto::getStockReel, Comparator.nullsFirst(Integer::compareTo));
if(lockReelOrder.isDescending()){ if (lockReelOrder.isDescending()) {
comparator = comparator.reversed(); comparator = comparator.reversed();
} }
} }
Sort.Order stockCountOrder = pageable.getSort().getOrderFor("stockCount"); Sort.Order stockCountOrder = pageable.getSort().getOrderFor("stockCount");
if(stockCountOrder != null){ if (stockCountOrder != null) {
comparator = Comparator.comparing(InventoryItemDto::getStockCount,Comparator.nullsFirst(Integer::compareTo)); comparator = Comparator.comparing(InventoryItemDto::getStockCount, Comparator.nullsFirst(Integer::compareTo));
if(stockCountOrder.isDescending()){ if (stockCountOrder.isDescending()) {
comparator = comparator.reversed(); comparator = comparator.reversed();
} }
} }
Sort.Order partNumberOrder = pageable.getSort().getOrderFor("partNumber"); Sort.Order partNumberOrder = pageable.getSort().getOrderFor("partNumber");
if(partNumberOrder != null){ if (partNumberOrder != null) {
comparator = Comparator.comparing(InventoryItemDto::getPartNumber,Comparator.nullsFirst(String::compareTo)); comparator = Comparator.comparing(InventoryItemDto::getPartNumber, Comparator.nullsFirst(String::compareTo));
if(partNumberOrder.isDescending()){ if (partNumberOrder.isDescending()) {
comparator = comparator.reversed(); comparator = comparator.reversed();
} }
} }
...@@ -114,12 +125,13 @@ public class MicronInventoryReportsController { ...@@ -114,12 +125,13 @@ public class MicronInventoryReportsController {
@GetMapping("/detialReport") @GetMapping("/detialReport")
@AnonymousAccess @AnonymousAccess
public PageData<StoragePosDto> detialReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) { public PageData<StoragePosDto> detialReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
Query query=getPosFindCriteria(criteria); Query query = getPosFindCriteria(criteria);
PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable); PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent()); List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements()); return new PageData(StoragePosDtos, pages.getTotalElements());
} }
private Query getPosFindCriteria(StoragePosFindCriteria criteria){
private Query getPosFindCriteria(StoragePosFindCriteria criteria) {
if (ObjectUtil.isNotEmpty(criteria.getStorageId()) && criteria.getStorageId().equals("0")) { if (ObjectUtil.isNotEmpty(criteria.getStorageId()) && criteria.getStorageId().equals("0")) {
criteria.setStorageId(null); criteria.setStorageId(null);
} }
...@@ -143,22 +155,24 @@ public class MicronInventoryReportsController { ...@@ -143,22 +155,24 @@ public class MicronInventoryReportsController {
query.addCriteria(baseCriteria); query.addCriteria(baseCriteria);
return query; return query;
} }
@ApiOperation("Empty Bin Report- Empty storage bins I5: 空库位展示") @ApiOperation("Empty Bin Report- Empty storage bins I5: 空库位展示")
@GetMapping("/emptyPosReport") @GetMapping("/emptyPosReport")
@AnonymousAccess @AnonymousAccess
public PageData<StoragePosDto> emptyPosReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) { public PageData<StoragePosDto> emptyPosReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
// 空库位展示 // 空库位展示
Query query=QueryHelp.getQuery(criteria); Query query = QueryHelp.getQuery(criteria);
Criteria baseCriteria = Criteria.where("used").is(false); Criteria baseCriteria = Criteria.where("used").is(false);
query.addCriteria(baseCriteria); query.addCriteria(baseCriteria);
PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable); PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent()); List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements()); return new PageData(StoragePosDtos, pages.getTotalElements());
} }
@ApiOperation("Inventory Summary Report- Fresh & Partial material inventory I4:新料,退料,过期料") @ApiOperation("Inventory Summary Report- Fresh & Partial material inventory I4:新料,退料,过期料")
@GetMapping("/summaryReport") @GetMapping("/summaryReport")
@AnonymousAccess @AnonymousAccess
public List<SpDailyLogDto> summaryReport( ) { public List<SpDailyLogDto> summaryReport() {
//TODO 根据partNo排序,每种物料的 新料,退料,过期料数量 //TODO 根据partNo排序,每种物料的 新料,退料,过期料数量
Criteria c = null; Criteria c = null;
...@@ -182,8 +196,8 @@ public class MicronInventoryReportsController { ...@@ -182,8 +196,8 @@ public class MicronInventoryReportsController {
if (dto.getTypeCounts() == null) { if (dto.getTypeCounts() == null) {
dto.setTypeCounts(new HashMap<>()); dto.setTypeCounts(new HashMap<>());
} }
if(ObjectUtil.isEmpty(type)){ if (ObjectUtil.isEmpty(type)) {
type="all"; type = "all";
} }
dto.getTypeCounts().put(type, log.getValue()); dto.getTypeCounts().put(type, log.getValue());
dailyLogDtos.put(log.getPartNumber(), dto); dailyLogDtos.put(log.getPartNumber(), dto);
...@@ -196,13 +210,10 @@ public class MicronInventoryReportsController { ...@@ -196,13 +210,10 @@ public class MicronInventoryReportsController {
@GetMapping("/stabilizationReport") @GetMapping("/stabilizationReport")
@AnonymousAccess @AnonymousAccess
public PageData<StoragePosDto> stabilizationReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) { public PageData<StoragePosDto> stabilizationReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
Query query=getPosFindCriteria(criteria); Query query = getPosFindCriteria(criteria);
if (criteria.getExpireDate() != null && criteria.getExpireDate().getFrom() != null && criteria.getExpireDate().getTo() != null) {
//根据过滤时间查询 //StabilizationEndDate>=当前时间
} else { query.addCriteria(Criteria.where("barcode.appendData.StabilizationEndDate").gte(new Date()));
//需要查询已经超过过期日期的物料
query.addCriteria(Criteria.where("barcode.expireDate").lte(new Date()));
}
PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable); PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent()); List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements()); return new PageData(StoragePosDtos, pages.getTotalElements());
...@@ -212,7 +223,7 @@ public class MicronInventoryReportsController { ...@@ -212,7 +223,7 @@ public class MicronInventoryReportsController {
@GetMapping("/expiryReport") @GetMapping("/expiryReport")
@AnonymousAccess @AnonymousAccess
public PageData<StoragePosDto> expiryReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) { public PageData<StoragePosDto> expiryReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
Query query=getPosFindCriteria(criteria); Query query = getPosFindCriteria(criteria);
if (criteria.getExpireDate() != null && criteria.getExpireDate().getFrom() != null && criteria.getExpireDate().getTo() != null) { if (criteria.getExpireDate() != null && criteria.getExpireDate().getFrom() != null && criteria.getExpireDate().getTo() != null) {
//根据过滤时间查询 //根据过滤时间查询
} else { } else {
...@@ -224,13 +235,13 @@ public class MicronInventoryReportsController { ...@@ -224,13 +235,13 @@ public class MicronInventoryReportsController {
return new PageData(StoragePosDtos, pages.getTotalElements()); return new PageData(StoragePosDtos, pages.getTotalElements());
} }
@ApiOperation("Self-Audit Report - Audit report(monthly-finance , when door is opened,etc) I7") @ApiOperation("Self-Audit Report 自检报告- Audit report(monthly-finance , when door is opened,etc) I7")
@GetMapping("/selfAuditReport") @GetMapping("/selfAuditReport")
public PageData<StoragePosDto> selfAuditReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) { public PageData<SelfAuditItemDto> selfAuditReport(SelfAuditItemCriteria criteria, Pageable pageable, HttpServletRequest request) {
//TODO 自检报告:包含库位号,part number,RFID信息,以及以上信息是否匹配 //TODO 自检报告:包含库位号,part number,RFID信息,以及以上信息是否匹配
Query query=getPosFindCriteria(criteria); Query query = QueryHelp.getQuery(criteria);
PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable); PageData<SelfAuditItem> pages = selfAuditItemManager.findByPage(query, pageable);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent()); List<SelfAuditItemDto> itemDtos = selfAuditItemMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements()); return new PageData(itemDtos, pages.getTotalElements());
} }
} }
package com.neotel.smfcore.custom.micron20031;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.inout.service.manager.IInOutDataManager;
import com.neotel.smfcore.core.inout.service.po.InOutData;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.message.rest.bean.dto.MsgCountDto;
import com.neotel.smfcore.core.message.rest.bean.query.MessageCriteria;
import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.onlineData.service.manager.IOnlineDataManager;
import com.neotel.smfcore.core.onlineData.service.po.OnlineData;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.custom.micron20031.bean.dto.OperatingTimeDto;
import com.neotel.smfcore.custom.micron20031.bean.query.SpOperateTimeCriteria;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
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.mongodb.core.query.Criteria;
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 javax.servlet.http.HttpServletRequest;
import java.util.*;
@Slf4j
@Api(tags = "20031:Performance report 性能报告")
@RestController
@RequestMapping("/rest/micron/sp/PReport")
@RequiredArgsConstructor
public class MicronPerformanceReportsController {
@Autowired
IMessageManager messageManager;
@Autowired
IInOutDataManager inOutDataManager;
@Autowired
IOnlineDataManager onlineDataManager;
@Autowired
DataCache dataCache;
@ApiOperation(" -P1: Error count by Error type 所有的错误根据错误类型统计数量(可以根据时间查询)")
@GetMapping(value = "/errorMsgCount")
@AnonymousAccess
public List<MsgCountDto> errorMsgCount(MessageCriteria criteria, HttpServletRequest request) {
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())) {
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(), locale, list.get(i).getId()));
} else {
list.get(i).setMsg(list.get(i).getId());
}
}
return list;
}
@ApiOperation(" -P2: Operator operating time 查询设备每天的(设备宕机时间,忙碌时间,空闲时间)")
@GetMapping(value = "/operatingTimeDto")
@AnonymousAccess
public List<OperatingTimeDto> operatingTime(SpOperateTimeCriteria criteria, HttpServletRequest request) {
Query query = QueryHelp.getQuery(criteria);
Date startTime;
Date endTime = new Date();
if (criteria.getCreateDate() != null && criteria.getCreateDate().getFrom() != null && criteria.getCreateDate().getTo() != null) {
//根据过滤时间查询
startTime = criteria.getCreateDate().getFrom();
endTime = criteria.getCreateDate().getTo();
} else {
//查询最近7天
Criteria baseCriteria = Criteria.where("createDate").lte(new Date());
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE, -7);
Date tenDaysAgo = calendar.getTime();
baseCriteria.and("createDate").gte(tenDaysAgo);
startTime = tenDaysAgo;
endTime = new Date();
query.addCriteria(baseCriteria);
}
List<InOutData> allData = inOutDataManager.findByQuery(query);
Criteria c = new Criteria().andOperator(
Criteria.where("onlineTime").lte(endTime),
Criteria.where("onlineTime").gte(startTime)
);
c.orOperator(new Criteria().andOperator(
Criteria.where("offLineTime").lte(endTime),
Criteria.where("offLineTime").gte(startTime)
));
Query query1 = new Query(c);
//查询设备在线时间
List<OnlineData> onlineData = onlineDataManager.findByQuery(query1);
Map<String, OperatingTimeDto> dtoMap = new HashMap<>();
if (allData != null) {
for (InOutData inoutData :
allData) {
String key = DateUtil.toDateString(inoutData.getCreateDate(), "yyyy-MM-dd");
OperatingTimeDto dto = dtoMap.getOrDefault(key, new OperatingTimeDto(inoutData.getStorageId(), inoutData.getCid(), key));
dto.setExecuteTime(dto.getExecuteTime() + inoutData.getExecuteTime());
dtoMap.put(key, dto);
}
}
if (onlineData != null) {
for (OnlineData data : onlineData) {
Map<String, Long> onlineMap = data.getOnlineMap();
for (String key :
onlineMap.keySet()) {
long v = onlineMap.getOrDefault(key, 0L);
OperatingTimeDto dto = dtoMap.getOrDefault(key, new OperatingTimeDto(data.getStorageId(), data.getCid(), key));
dto.setOnlineTime(dto.getOnlineTime() + v);
dtoMap.put(key, dto);
}
}
}
List<OperatingTimeDto> result = new ArrayList<>();
for (String key :
dtoMap.keySet()) {
Date time = DateUtil.toDate(key, "yyyy-MM-dd");
if (time.after(startTime) && time.before(endTime)) {
OperatingTimeDto dto = dtoMap.get(key);
Storage storage = dataCache.getStorageById(dto.getStorageId());
dto.setCid(dto.getCid());
dto.setStorageName(dto.getStorageName());
result.add(dto);
}
}
return result;
}
}
package com.neotel.smfcore.custom.micron20031.bean.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OperatingTimeDto {
public OperatingTimeDto(String storageId,String cid,String time){
this.cid=cid;
this.storageId=storageId;
this.time=time;
}
@ApiModelProperty("设备cid")
private String cid;
@ApiModelProperty("设备id")
private String storageId;
@ApiModelProperty("时间、日期")
private String time;
@ApiModelProperty("忙碌时间")
private long executeTime = 0;
@ApiModelProperty("在线时间。空闲时间=在线时间-忙碌时间。宕机时间=一天总时间-在线时间")
private long onlineTime=0;
@ApiModelProperty("设备名称")
private String storageName;
}
package com.neotel.smfcore.custom.micron20031.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
@ApiModel("设备操作时间查询条件")
public class SpOperateTimeCriteria {
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "createDate")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private BetweenData<Date> createDate;
@QueryCondition
@ApiModelProperty("料仓ID")
private String storageId;
}
...@@ -3,6 +3,7 @@ package com.neotel.smfcore.custom.micron20031.manager; ...@@ -3,6 +3,7 @@ package com.neotel.smfcore.custom.micron20031.manager;
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.inList.enums.INLIST_STATUS; import com.neotel.smfcore.core.inList.enums.INLIST_STATUS;
import com.neotel.smfcore.core.inList.service.manager.IInListItemManager;
import com.neotel.smfcore.core.inList.service.manager.IInListManager; import com.neotel.smfcore.core.inList.service.manager.IInListManager;
import com.neotel.smfcore.core.inList.service.po.InList; import com.neotel.smfcore.core.inList.service.po.InList;
import com.neotel.smfcore.core.inList.service.po.InListItem; import com.neotel.smfcore.core.inList.service.po.InListItem;
...@@ -31,6 +32,9 @@ public class MicronSpTimerProcess { ...@@ -31,6 +32,9 @@ public class MicronSpTimerProcess {
private IInListManager inListManager; private IInListManager inListManager;
@Autowired @Autowired
private IInListItemManager inListItemManager;
@Autowired
private IBarcodeManager barcodeManager; private IBarcodeManager barcodeManager;
private ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1); private ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
...@@ -70,14 +74,19 @@ public class MicronSpTimerProcess { ...@@ -70,14 +74,19 @@ public class MicronSpTimerProcess {
if (inList.getStartTime() > 0 && (inList.getStatus() != INLIST_STATUS.OK) && (inList.isSendEmail() == false)) { if (inList.getStartTime() > 0 && (inList.getStatus() != INLIST_STATUS.OK) && (inList.isSendEmail() == false)) {
if (System.currentTimeMillis() > (inList.getStartTime() + timeOutTime)) { if (System.currentTimeMillis() > (inList.getStartTime() + timeOutTime)) {
List<InListItem> newItemsList=new ArrayList<>();
for (InListItem item : for (InListItem item :
inList.getInListItems()) { inList.getInListItems()) {
if (item.getInNum() <= 0) { if (item.getInNum() <= 0) {
//发送邮件 //发送邮件
Micron20031Api.sendEmail(Micron20031Api.Email_TO, Micron20031Api.Email_CC, inList.getName(), item.getRi()); Micron20031Api.sendEmail(Micron20031Api.Email_TO, Micron20031Api.Email_CC, inList.getName(), item.getRi());
log.info("sendEmail [" + inList.getName() + "] [" + item.getRi() + "] 给[" + Micron20031Api.Email_TO + "][" + Micron20031Api.Email_CC + "] 成功"); log.info("sendEmail [" + inList.getName() + "] [" + item.getRi() + "] 给[" + Micron20031Api.Email_TO + "][" + Micron20031Api.Email_CC + "] 成功");
item.setSendEmail(true);
inListItemManager.save(item);
} }
newItemsList.add(item);
} }
inList.setInListItems(newItemsList);
inList.setSendEmail(true); inList.setSendEmail(true);
inListManager.save(inList); inListManager.save(inList);
inListCache.addInListToMap(inList); inListCache.addInListToMap(inList);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!