|
|
|
|
@ -474,15 +474,11 @@ public class PlanServiceImpl implements PlanService {
|
|
|
|
|
|
|
|
|
|
LocalDateTime startTime = startDate.atStartOfDay();
|
|
|
|
|
LocalDateTime endTime = endDate.plusDays(1).atStartOfDay();
|
|
|
|
|
List<PlanDO> planList = planMapper.selectList(new LambdaQueryWrapper<PlanDO>()
|
|
|
|
|
.ge(PlanDO::getCreateTime, startTime)
|
|
|
|
|
.lt(PlanDO::getCreateTime, endTime));
|
|
|
|
|
|
|
|
|
|
PlanQualityOverviewRespVO respVO = new PlanQualityOverviewRespVO();
|
|
|
|
|
long totalWangongNumber = 0L;
|
|
|
|
|
long totalPassNumber = 0L;
|
|
|
|
|
long totalNoPassNumber = 0L;
|
|
|
|
|
Map<Long, PlanQualityOverviewRespVO.ProductPassRateItem> productMap = new HashMap<>();
|
|
|
|
|
PlanQualityOverviewRespVO respVO = Optional.ofNullable(planMapper.selectQualityOverviewSummary(startTime, endTime))
|
|
|
|
|
.orElseGet(PlanQualityOverviewRespVO::new);
|
|
|
|
|
long totalWangongNumber = Optional.ofNullable(respVO.getTotalWangongNumber()).orElse(0L);
|
|
|
|
|
long totalPassNumber = Optional.ofNullable(respVO.getTotalPassNumber()).orElse(0L);
|
|
|
|
|
long totalNoPassNumber = Optional.ofNullable(respVO.getTotalNoPassNumber()).orElse(0L);
|
|
|
|
|
Map<LocalDate, PlanQualityOverviewRespVO.TrendItem> trendMap = new LinkedHashMap<>();
|
|
|
|
|
|
|
|
|
|
for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
|
|
|
|
|
@ -493,46 +489,33 @@ public class PlanServiceImpl implements PlanService {
|
|
|
|
|
trendMap.put(date, trendItem);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (PlanDO plan : planList) {
|
|
|
|
|
long wangongNumber = Optional.ofNullable(plan.getWangongNumber()).orElse(0L);
|
|
|
|
|
long passNumber = Optional.ofNullable(plan.getPassNumber()).orElse(0L);
|
|
|
|
|
long noPassNumber = Optional.ofNullable(plan.getNoPassNumber()).orElse(0L);
|
|
|
|
|
|
|
|
|
|
totalWangongNumber += wangongNumber;
|
|
|
|
|
totalPassNumber += passNumber;
|
|
|
|
|
totalNoPassNumber += noPassNumber;
|
|
|
|
|
|
|
|
|
|
if (plan.getProductId() != null) {
|
|
|
|
|
PlanQualityOverviewRespVO.ProductPassRateItem item = productMap.computeIfAbsent(plan.getProductId(), key -> {
|
|
|
|
|
PlanQualityOverviewRespVO.ProductPassRateItem value = new PlanQualityOverviewRespVO.ProductPassRateItem();
|
|
|
|
|
value.setProductId(key);
|
|
|
|
|
value.setWangongNumber(0L);
|
|
|
|
|
value.setPassNumber(0L);
|
|
|
|
|
value.setNoPassNumber(0L);
|
|
|
|
|
value.setPassRate(BigDecimal.ZERO);
|
|
|
|
|
return value;
|
|
|
|
|
});
|
|
|
|
|
item.setWangongNumber(item.getWangongNumber() + wangongNumber);
|
|
|
|
|
item.setPassNumber(item.getPassNumber() + passNumber);
|
|
|
|
|
item.setNoPassNumber(item.getNoPassNumber() + noPassNumber);
|
|
|
|
|
List<PlanQualityOverviewRespVO.TrendItem> dbTrendList = planMapper.selectQualityOverviewTrendStats(startTime, endTime);
|
|
|
|
|
for (PlanQualityOverviewRespVO.TrendItem item : dbTrendList) {
|
|
|
|
|
if (item == null || item.getDay() == null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LocalDate trendDate = Optional.ofNullable(plan.getCreateTime())
|
|
|
|
|
.map(LocalDateTime::toLocalDate)
|
|
|
|
|
.orElse(null);
|
|
|
|
|
if (trendDate != null && trendMap.containsKey(trendDate)) {
|
|
|
|
|
PlanQualityOverviewRespVO.TrendItem trendItem = trendMap.get(trendDate);
|
|
|
|
|
trendItem.setPassNumber(trendItem.getPassNumber() + passNumber);
|
|
|
|
|
trendItem.setNoPassNumber(trendItem.getNoPassNumber() + noPassNumber);
|
|
|
|
|
LocalDate trendDate = LocalDate.parse(item.getDay());
|
|
|
|
|
PlanQualityOverviewRespVO.TrendItem trendItem = trendMap.get(trendDate);
|
|
|
|
|
if (trendItem == null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
trendItem.setPassNumber(Optional.ofNullable(item.getPassNumber()).orElse(0L));
|
|
|
|
|
trendItem.setNoPassNumber(Optional.ofNullable(item.getNoPassNumber()).orElse(0L));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<Long, ErpProductRespVO> productRespMap = erpProductService.getProductVOMap(productMap.keySet());
|
|
|
|
|
List<PlanQualityOverviewRespVO.ProductPassRateItem> productPassRateList = new ArrayList<>(productMap.values());
|
|
|
|
|
List<PlanQualityOverviewRespVO.ProductPassRateItem> productPassRateList = planMapper.selectQualityOverviewProductStats(startTime, endTime);
|
|
|
|
|
Map<Long, ErpProductRespVO> productRespMap = erpProductService.getProductVOMap(productPassRateList.stream()
|
|
|
|
|
.map(PlanQualityOverviewRespVO.ProductPassRateItem::getProductId)
|
|
|
|
|
.filter(Objects::nonNull)
|
|
|
|
|
.collect(Collectors.toSet()));
|
|
|
|
|
productPassRateList.forEach(item -> {
|
|
|
|
|
ErpProductRespVO product = productRespMap.get(item.getProductId());
|
|
|
|
|
if (product != null) {
|
|
|
|
|
item.setProductName(product.getName());
|
|
|
|
|
item.setProductName(StringUtils.isNotBlank(product.getBarCode())
|
|
|
|
|
? "【" + product.getBarCode() + "】" + product.getName()
|
|
|
|
|
: product.getName());
|
|
|
|
|
} else if (item.getProductId() != null) {
|
|
|
|
|
item.setProductName("产品[" + item.getProductId() + "]");
|
|
|
|
|
}
|
|
|
|
|
item.setPassRate(calculatePassRate(item.getPassNumber(), item.getWangongNumber()));
|
|
|
|
|
});
|
|
|
|
|
|