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;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.utils.QueryHelp;
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.rest.dto.InventoryItemDto;
import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto;
......@@ -57,47 +62,53 @@ public class MicronInventoryReportsController {
@Autowired
private IDataLogManager dataLogManager;
@Autowired
private ISelfAuditItemManager selfAuditItemManager;
@Autowired
private SelfAuditItemMapper selfAuditItemMapper;
@ApiOperation("Inventory Chart(All) I2 :库存列表饼图报表")
@GetMapping(value = "/inventory")
@AnonymousAccess
public List<InventoryItemDto> inventory(InventoryQueryCriteria criteria, Pageable pageable) {
List<InventoryItemDto> results= getInventory(criteria, pageable);
List<InventoryItemDto> results = getInventory(criteria, pageable);
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<InventoryItemDto> dtoList = inventoryItemMapper.toDto(list);
List<InventoryItemDto> resultList = new ArrayList<>();
//过滤掉没有库存的
for (InventoryItemDto inventoryItemDto : dtoList) {
if(inventoryItemDto.getStockReel() > 0){
if (inventoryItemDto.getStockReel() > 0) {
resultList.add(inventoryItemDto);
}
}
Comparator<InventoryItemDto> comparator = Comparator.comparing(InventoryItemDto::getPartNumber);
Sort.Order lockReelOrder = pageable.getSort().getOrderFor("lockReel");
if(lockReelOrder != null){
comparator = Comparator.comparing(InventoryItemDto::getStockReel,Comparator.nullsFirst(Integer::compareTo));
if(lockReelOrder.isDescending()){
if (lockReelOrder != null) {
comparator = Comparator.comparing(InventoryItemDto::getStockReel, Comparator.nullsFirst(Integer::compareTo));
if (lockReelOrder.isDescending()) {
comparator = comparator.reversed();
}
}
Sort.Order stockCountOrder = pageable.getSort().getOrderFor("stockCount");
if(stockCountOrder != null){
comparator = Comparator.comparing(InventoryItemDto::getStockCount,Comparator.nullsFirst(Integer::compareTo));
if(stockCountOrder.isDescending()){
if (stockCountOrder != null) {
comparator = Comparator.comparing(InventoryItemDto::getStockCount, Comparator.nullsFirst(Integer::compareTo));
if (stockCountOrder.isDescending()) {
comparator = comparator.reversed();
}
}
Sort.Order partNumberOrder = pageable.getSort().getOrderFor("partNumber");
if(partNumberOrder != null){
comparator = Comparator.comparing(InventoryItemDto::getPartNumber,Comparator.nullsFirst(String::compareTo));
if(partNumberOrder.isDescending()){
if (partNumberOrder != null) {
comparator = Comparator.comparing(InventoryItemDto::getPartNumber, Comparator.nullsFirst(String::compareTo));
if (partNumberOrder.isDescending()) {
comparator = comparator.reversed();
}
}
......@@ -114,13 +125,14 @@ public class MicronInventoryReportsController {
@GetMapping("/detialReport")
@AnonymousAccess
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);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements());
}
private Query getPosFindCriteria(StoragePosFindCriteria criteria){
if (ObjectUtil.isNotEmpty(criteria.getStorageId()) && criteria.getStorageId().equals("0")) {
private Query getPosFindCriteria(StoragePosFindCriteria criteria) {
if (ObjectUtil.isNotEmpty(criteria.getStorageId()) && criteria.getStorageId().equals("0")) {
criteria.setStorageId(null);
}
Query query = QueryHelp.getQuery(criteria);
......@@ -143,22 +155,24 @@ public class MicronInventoryReportsController {
query.addCriteria(baseCriteria);
return query;
}
@ApiOperation("Empty Bin Report- Empty storage bins I5: 空库位展示")
@GetMapping("/emptyPosReport")
@AnonymousAccess
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);
query.addCriteria(baseCriteria);
PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements());
}
@ApiOperation("Inventory Summary Report- Fresh & Partial material inventory I4:新料,退料,过期料")
@GetMapping("/summaryReport")
@AnonymousAccess
public List<SpDailyLogDto> summaryReport( ) {
public List<SpDailyLogDto> summaryReport() {
//TODO 根据partNo排序,每种物料的 新料,退料,过期料数量
Criteria c = null;
......@@ -182,8 +196,8 @@ public class MicronInventoryReportsController {
if (dto.getTypeCounts() == null) {
dto.setTypeCounts(new HashMap<>());
}
if(ObjectUtil.isEmpty(type)){
type="all";
if (ObjectUtil.isEmpty(type)) {
type = "all";
}
dto.getTypeCounts().put(type, log.getValue());
dailyLogDtos.put(log.getPartNumber(), dto);
......@@ -196,13 +210,10 @@ public class MicronInventoryReportsController {
@GetMapping("/stabilizationReport")
@AnonymousAccess
public PageData<StoragePosDto> stabilizationReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
Query query=getPosFindCriteria(criteria);
if (criteria.getExpireDate() != null && criteria.getExpireDate().getFrom() != null && criteria.getExpireDate().getTo() != null) {
//根据过滤时间查询
} else {
//需要查询已经超过过期日期的物料
query.addCriteria(Criteria.where("barcode.expireDate").lte(new Date()));
}
Query query = getPosFindCriteria(criteria);
//StabilizationEndDate>=当前时间
query.addCriteria(Criteria.where("barcode.appendData.StabilizationEndDate").gte(new Date()));
PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements());
......@@ -212,7 +223,7 @@ public class MicronInventoryReportsController {
@GetMapping("/expiryReport")
@AnonymousAccess
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) {
//根据过滤时间查询
} else {
......@@ -224,13 +235,13 @@ public class MicronInventoryReportsController {
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")
public PageData<StoragePosDto> selfAuditReport(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
public PageData<SelfAuditItemDto> selfAuditReport(SelfAuditItemCriteria criteria, Pageable pageable, HttpServletRequest request) {
//TODO 自检报告:包含库位号,part number,RFID信息,以及以上信息是否匹配
Query query=getPosFindCriteria(criteria);
PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements());
Query query = QueryHelp.getQuery(criteria);
PageData<SelfAuditItem> pages = selfAuditItemManager.findByPage(query, pageable);
List<SelfAuditItemDto> itemDtos = selfAuditItemMapper.toDto(pages.getContent());
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;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
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.po.InList;
import com.neotel.smfcore.core.inList.service.po.InListItem;
......@@ -31,6 +32,9 @@ public class MicronSpTimerProcess {
private IInListManager inListManager;
@Autowired
private IInListItemManager inListItemManager;
@Autowired
private IBarcodeManager barcodeManager;
private ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
......@@ -70,14 +74,19 @@ public class MicronSpTimerProcess {
if (inList.getStartTime() > 0 && (inList.getStatus() != INLIST_STATUS.OK) && (inList.isSendEmail() == false)) {
if (System.currentTimeMillis() > (inList.getStartTime() + timeOutTime)) {
List<InListItem> newItemsList=new ArrayList<>();
for (InListItem item :
inList.getInListItems()) {
if (item.getInNum() <= 0) {
//发送邮件
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 + "] 成功");
item.setSendEmail(true);
inListItemManager.save(item);
}
newItemsList.add(item);
}
inList.setInListItems(newItemsList);
inList.setSendEmail(true);
inListManager.save(inList);
inListCache.addInListToMap(inList);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!