| | |
| | | BigDecimal factoryNum = new BigDecimal(0); |
| | | BigDecimal processNum = new BigDecimal(0); |
| | | // 循环4次,分别统计近4个月的数据(当前月、前1个月、前2个月、前3个月) |
| | | for (int i = 0; i < 4; i++) { |
| | | for (int i = 3; i >= 0; i--) { |
| | | // 计算当前循环对应的月份(i=0:当前月,i=1:前1个月,以此类推) |
| | | LocalDate currentMonth = today.minusMonths(i); |
| | | // 当月的开始日期(每月1号) |
| | |
| | | .filter(inspect -> inspect.getInspectType().equals(1)) |
| | | .map(QualityInspect::getQuantity) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | factoryNum= factoryNum.add(reduce1); |
| | | processNum= processNum.add(reduce1); |
| | | BigDecimal reduce2 = monthInspects.stream() |
| | | .filter(inspect -> inspect.getInspectType().equals(2)) |
| | | .map(QualityInspect::getQuantity) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | processNum = processNum.add(reduce2); |
| | | factoryNum = factoryNum.add(reduce2); |
| | | |
| | | // 构建当月统计项 |
| | | QualityStatisticsItem item = new QualityStatisticsItem(); |
| | |
| | | List<QualityInspect> qualityInspects = qualityStatisticsMapper.selectList(null); |
| | | if(!CollectionUtils.isEmpty(qualityInspects)){ |
| | | // 原材料合格率 |
| | | long rawwMaterialCount = qualityInspects.stream().filter(qualityInspect -> qualityInspect.getInspectType() == 0).count(); |
| | | long count = qualityInspects.stream().filter(qualityInspect -> "合格".equals(qualityInspect.getCheckResult()) && qualityInspect.getInspectType() == 0).count(); |
| | | if(count > 0){ |
| | | qualityProductQualifiedRateDto.setRawMaterialQualifiedRate(new BigDecimal(rawwMaterialCount) |
| | | .divide(new BigDecimal( count), 4, RoundingMode.HALF_UP) |
| | | BigDecimal rawwMaterialCount = qualityInspects.stream().filter(qualityInspect -> qualityInspect.getInspectType() == 0) |
| | | .map(QualityInspect::getQuantity) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal count = qualityInspects.stream().filter(qualityInspect -> "合格".equals(qualityInspect.getCheckResult()) && qualityInspect.getInspectType() == 0) |
| | | .map(QualityInspect::getQuantity) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | if(count.compareTo(BigDecimal.ZERO) != 0){ |
| | | qualityProductQualifiedRateDto.setRawMaterialQualifiedRate(rawwMaterialCount |
| | | .divide(count, 4, RoundingMode.HALF_UP) |
| | | .multiply(BigDecimal.valueOf(100.0))); |
| | | } |
| | | // 过程合格率 |
| | | long processCount = qualityInspects.stream().filter(qualityInspect -> qualityInspect.getInspectType() == 1).count(); |
| | | long countOne = qualityInspects.stream().filter(qualityInspect -> "合格".equals(qualityInspect.getCheckResult()) && qualityInspect.getInspectType() == 1).count(); |
| | | if(countOne > 0){ |
| | | qualityProductQualifiedRateDto.setProcessQualifiedRate(new BigDecimal(processCount) |
| | | .divide(new BigDecimal( countOne), 4, RoundingMode.HALF_UP) |
| | | BigDecimal processCount = qualityInspects.stream().filter(qualityInspect -> qualityInspect.getInspectType() == 1) |
| | | .map(QualityInspect::getQuantity) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal countOne = qualityInspects.stream().filter(qualityInspect -> "合格".equals(qualityInspect.getCheckResult()) && qualityInspect.getInspectType() == 1) |
| | | .map(QualityInspect::getQuantity) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | if(countOne.compareTo(BigDecimal.ZERO) != 0){ |
| | | qualityProductQualifiedRateDto.setProcessQualifiedRate(processCount |
| | | .divide(countOne, 4, RoundingMode.HALF_UP) |
| | | .multiply(BigDecimal.valueOf(100.0))); |
| | | } |
| | | // 出厂合格率 |
| | | long factoryCount = qualityInspects.stream().filter(qualityInspect -> qualityInspect.getInspectType() == 2).count(); |
| | | long countTwo = qualityInspects.stream().filter(qualityInspect -> "合格".equals(qualityInspect.getCheckResult()) && qualityInspect.getInspectType() == 2).count(); |
| | | if(countTwo > 0){ |
| | | qualityProductQualifiedRateDto.setFactoryQualifiedRate(new BigDecimal(factoryCount) |
| | | .divide(new BigDecimal( countTwo), 4, RoundingMode.HALF_UP) |
| | | BigDecimal factoryCount = qualityInspects.stream().filter(qualityInspect -> qualityInspect.getInspectType() == 2) |
| | | .map(QualityInspect::getQuantity) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal countTwo = qualityInspects.stream().filter(qualityInspect -> "合格".equals(qualityInspect.getCheckResult()) && qualityInspect.getInspectType() == 2) |
| | | .map(QualityInspect::getQuantity) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | if(countTwo.compareTo(BigDecimal.ZERO) != 0){ |
| | | qualityProductQualifiedRateDto.setFactoryQualifiedRate(factoryCount |
| | | .divide(countTwo, 4, RoundingMode.HALF_UP) |
| | | .multiply(BigDecimal.valueOf(100.0))); |
| | | } |
| | | } |