Commit 4389a1a8 LN

20031:库存报表:增加I2,I3,I5接口

1 个父辈 c50d1c20
...@@ -16,4 +16,6 @@ public interface IDataLogDao extends IBaseDao { ...@@ -16,4 +16,6 @@ public interface IDataLogDao extends IBaseDao {
List<DataLog> findHistory(String bid, int num); List<DataLog> findHistory(String bid, int num);
List<SpDailyLog> getSpDailyLogs(Date start,Date end, String inoutType); List<SpDailyLog> getSpDailyLogs(Date start,Date end, String inoutType);
List<SpDailyLog> getSpPnSummaryLists(String inoutType);
} }
...@@ -85,5 +85,20 @@ public class DataLogDaoImpl extends AbstractBaseDao implements IDataLogDao { ...@@ -85,5 +85,20 @@ public class DataLogDaoImpl extends AbstractBaseDao implements IDataLogDao {
return results.getMappedResults(); return results.getMappedResults();
} }
@Override
public List<SpDailyLog> getSpPnSummaryLists(String inoutType) {
Criteria criteria=Criteria.where("partNumber").exists(true);
if (ObjectUtil.isNotEmpty(inoutType)) {
criteria = criteria.and("inOutType").is(inoutType);
}//过去一月
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(criteria),
Aggregation.group("partNumber").count().as("value"),
Aggregation.project("value").and("partNumber").previousOperation()
);
AggregationResults<SpDailyLog> results = getMongoTemplate().aggregate(agg, getEntityClass(), SpDailyLog.class);
return results.getMappedResults();
}
} }
...@@ -15,4 +15,6 @@ public interface IDataLogManager extends IBaseManager<DataLog> { ...@@ -15,4 +15,6 @@ public interface IDataLogManager extends IBaseManager<DataLog> {
List<DataLog> findUnFinishedTasks(); List<DataLog> findUnFinishedTasks();
List<SpDailyLog> getSpDailyLogs(Date start, Date end, String inoutType); List<SpDailyLog> getSpDailyLogs(Date start, Date end, String inoutType);
List<SpDailyLog> getSpPnSummaryLists(String inoutType);
} }
...@@ -76,4 +76,10 @@ public class DataLogManagerImpl implements IDataLogManager { ...@@ -76,4 +76,10 @@ public class DataLogManagerImpl implements IDataLogManager {
return dataLogDao.getSpDailyLogs(start,end,inoutType); return dataLogDao.getSpDailyLogs(start,end,inoutType);
} }
@Override
public List<SpDailyLog> getSpPnSummaryLists(String inoutType) {
return dataLogDao.getSpPnSummaryLists( inoutType );
}
} }
package com.neotel.smfcore.custom.micron20031;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings;
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.storage.bean.InventoryItem;
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.mapstruct.InventoryItemMapper;
import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper;
import com.neotel.smfcore.core.storage.rest.query.InventoryQueryCriteria;
import com.neotel.smfcore.core.storage.rest.query.StoragePosFindCriteria;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.custom.micron20031.bean.MInOutType;
import com.neotel.smfcore.custom.micron20031.bean.SpDailyLog;
import com.neotel.smfcore.custom.micron20031.bean.dto.SpDailyLogDto;
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.domain.Sort;
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.*;
import java.util.stream.Collectors;
@Slf4j
@Api(tags = "20031:Inventory reports 库存报表")
@RestController
@RequestMapping("/rest/micron/sp/IReport")
@RequiredArgsConstructor
public class MicronInventoryReportsController {
@Autowired
private DataCache dataCache;
@Autowired
private InventoryItemMapper inventoryItemMapper;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private StoragePosMapper storagePosMapper;
@Autowired
private IDataLogManager dataLogManager;
@ApiOperation("Inventory Chart(All) I2 :库存列表饼图报表")
@GetMapping(value = "/inventory")
@AnonymousAccess
public List<InventoryItemDto> inventory(InventoryQueryCriteria criteria, Pageable 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());
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){
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()){
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()){
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()){
comparator = comparator.reversed();
}
}
resultList = resultList.stream().sorted(comparator).collect(Collectors.toList());
// System.out.println("================");
// for (InventoryItemDto dto : resultList) {
// System.out.println(dto.getPartNumber() + "---" + dto.getStockCount() + " --- " + dto.getStockReel());
// }
return resultList;
}
@ApiOperation("Inventory Detial Report- Detailed full inventory history I3:库存表格")
@GetMapping("/detialReport")
@AnonymousAccess
public PageData<StoragePosDto> storagePosFind(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
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")) {
criteria.setStorageId(null);
}
Query query = QueryHelp.getQuery(criteria);
Criteria baseCriteria = Criteria.where("used").is(true);
int componentType = criteria.getComponentType();
if (componentType != -1) {
baseCriteria.and("barcode.type").is(componentType);
}
String expire = criteria.getExpire();
if (!Strings.isNullOrEmpty(expire)) {
if ("solder".equalsIgnoreCase(expire)) {
baseCriteria.and("barcode.expTime").lte(new Date());
} else if ("pcb".equalsIgnoreCase(expire)) {
baseCriteria.and("barcode.expireDate").lte(new Date());
}
}
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) {
//TODO 空库位展示
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> materialList( ) {
//TODO 根据partNo排序,每种物料的 新料,退料,过期料数量
Criteria c = null;
List<SpDailyLog> results = dataLogManager.getSpPnSummaryLists("");
HashMap<String, SpDailyLogDto> dailyLogDtos = new HashMap<String, SpDailyLogDto>();
List<String> types = new ArrayList<>();
types.add(MInOutType.OFFLINE);
types.add(MInOutType.DESPOSIT);
types.add(MInOutType.REMOVED);
types.add(MInOutType.RETURNED);
types.add(MInOutType.WITHDRAWN);
types.add("");
for (String type : types) {
List<SpDailyLog> logs = dataLogManager.getSpPnSummaryLists(type);
for (SpDailyLog log :
logs) {
SpDailyLogDto dto = dailyLogDtos.getOrDefault(log.getPartNumber(), new SpDailyLogDto());
dto.setPartNumber(log.getPartNumber());
if (dto.getTypeCounts() == null) {
dto.setTypeCounts(new HashMap<>());
}
if(ObjectUtil.isEmpty(type)){
type="all";
}
dto.getTypeCounts().put(type, log.getValue());
dailyLogDtos.put(log.getPartNumber(), dto);
}
}
return new ArrayList<>(dailyLogDtos.values());
}
@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) {
//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());
}
}
...@@ -32,7 +32,7 @@ import java.text.SimpleDateFormat; ...@@ -32,7 +32,7 @@ import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@Slf4j @Slf4j
@Api(tags = "20031:Report 报表") @Api(tags = "20031:Material movement report 报表")
@RestController @RestController
@RequestMapping("/rest/micron/sp") @RequestMapping("/rest/micron/sp")
@RequiredArgsConstructor @RequiredArgsConstructor
...@@ -102,7 +102,7 @@ public class MicronReportController { ...@@ -102,7 +102,7 @@ public class MicronReportController {
start = time.getTime(); start = time.getTime();
c = Criteria.where("createDate").gte(time.getTime()).lte(new Date()); c = Criteria.where("createDate").gte(time.getTime()).lte(new Date());
} }
List<SpDailyLog> results = dataLogManager.getSpDailyLogs(start, end, ""); // List<SpDailyLog> results = dataLogManager.getSpDailyLogs(start, end, "");
HashMap<String, SpDailyLogDto> dailyLogDtos = new HashMap<String, SpDailyLogDto>(); HashMap<String, SpDailyLogDto> dailyLogDtos = new HashMap<String, SpDailyLogDto>();
List<String> types = new ArrayList<>(); List<String> types = new ArrayList<>();
types.add(MInOutType.OFFLINE); types.add(MInOutType.OFFLINE);
......
...@@ -21,5 +21,6 @@ public class SpDailyLog implements Serializable { ...@@ -21,5 +21,6 @@ public class SpDailyLog implements Serializable {
private int value; private int value;
private String partNumber;
} }
...@@ -14,6 +14,8 @@ public class SpDailyLogDto implements Serializable { ...@@ -14,6 +14,8 @@ public class SpDailyLogDto implements Serializable {
private String dayOfYear; private String dayOfYear;
private String partNumber;
private HashMap<String,Integer> typeCounts; private HashMap<String,Integer> typeCounts;
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!