From aa056390e38523e73c3e91ee15669f0d1838a1eb Mon Sep 17 00:00:00 2001 From: zss <zss@example.com> Date: 星期五, 28 三月 2025 15:41:01 +0800 Subject: [PATCH] 精简 --- inspect-server/src/main/java/com/yuanchu/mom/service/impl/ReportServiceImpl.java | 153 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 98 insertions(+), 55 deletions(-) diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ReportServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ReportServiceImpl.java index 907fc32..00943f6 100644 --- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ReportServiceImpl.java +++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ReportServiceImpl.java @@ -6,16 +6,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yuanchu.mom.common.GetLook; -import com.yuanchu.mom.dto.AuxiliaryOutputWorkingHoursDto; import com.yuanchu.mom.dto.CostStatisticsDto; +import com.yuanchu.mom.dto.InsOrderUserDto; import com.yuanchu.mom.mapper.*; import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.service.ReportService; import lombok.AllArgsConstructor; -import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -36,16 +36,18 @@ private RoleMapper roleMapper; private InsSampleUserMapper insSampleUserMapper; private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper; + private InsOrderStateMapper insOrderStateMapper; + private InsOrderUserMapper insOrderUserMapper; //姣忔棩涓氬姟缁熻 @Override - public Map<String, Object> businessStatisticsByDay(String startTime,String endTime,String type) { + public Map<String, Object> businessStatisticsByDay(String startTime, String endTime, String type) { DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDateTime start = LocalDate.parse(startTime, format).atStartOfDay(); LocalDateTime end = LocalDate.parse(endTime, format).atTime(23, 59, 59); - LocalDateTime oldStart=start ; - LocalDateTime oldEnd=end ; - switch (type){ + LocalDateTime oldStart = start; + LocalDateTime oldEnd = end; + switch (type) { case "鍛�": oldStart = start.minusDays(7); oldEnd = end.minusDays(7); @@ -101,23 +103,23 @@ /*妫�娴嬭垂鐢�*/ //浠婃棩妫�娴嬭垂鐢� QueryWrapper<CostStatisticsDto> costStatisticsDtoQueryWrappers = new QueryWrapper<>(); - costStatisticsDtoQueryWrappers.between("create_time", start,end); + costStatisticsDtoQueryWrappers.between("create_time", start, end); IPage<CostStatisticsDto> page = new Page<>(); page.setSize(-1); page.setCurrent(-1); IPage<CostStatisticsDto> iPage = insOrderMapper.selectCostStatistics(page, costStatisticsDtoQueryWrappers); BigDecimal price = BigDecimal.ZERO; for (CostStatisticsDto record : iPage.getRecords()) { - price.add(record.getPrice()); + price = price.add(ObjectUtils.isNotEmpty(record.getPrice()) ? record.getPrice() : BigDecimal.ZERO); } map.put("PRICE", price); //鏄ㄦ棩妫�娴嬭垂鐢� QueryWrapper<CostStatisticsDto> costWrappers = new QueryWrapper<>(); - costWrappers.between("create_time", oldStart,oldEnd); + costWrappers.between("create_time", oldStart, oldEnd); IPage<CostStatisticsDto> dtoIPage = insOrderMapper.selectCostStatistics(page, costWrappers); BigDecimal priced = BigDecimal.ZERO; for (CostStatisticsDto record : dtoIPage.getRecords()) { - priced.add(record.getPrice()); + priced = priced.add(ObjectUtils.isNotEmpty(record.getPrice()) ? record.getPrice() : BigDecimal.ZERO); } //姣斾緥=(浠婃棩-鏄ㄦ棩)/鏄ㄦ棩 BigDecimal priceRatio = (price.subtract(priced)).divide(priced.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ONE : priced, 2, BigDecimal.ROUND_HALF_UP); @@ -127,13 +129,13 @@ //浠婃棩妫�娴嬪伐鏃� Double cost = 0.0; for (CostStatisticsDto record : iPage.getRecords()) { - cost += record.getCost(); + cost += ObjectUtils.isNotEmpty(record.getCost()) ? record.getCost() : 0.0; } map.put("COST", cost); //鏄ㄦ棩妫�娴嬪伐鏃� Double costed = 0.0; for (CostStatisticsDto record : dtoIPage.getRecords()) { - costed += record.getCost(); + costed += ObjectUtils.isNotEmpty(record.getCost()) ? record.getCost() : 0.0; } //姣斾緥=(浠婃棩-鏄ㄦ棩)/鏄ㄦ棩 BigDecimal costRatio = new BigDecimal(cost - costed).divide(new BigDecimal(costed == 0 ? 1 : costed), 2, BigDecimal.ROUND_HALF_UP); @@ -158,18 +160,26 @@ //鑾峰彇杩戝崄鏃ョ殑妯潗鏍� LocalDate startDate = LocalDate.parse(startTime, format); LocalDate endDate = LocalDate.parse(endTime, format); - List<LocalDate> lastTenDays = new ArrayList<>(); + List<String> lastTenDays = new ArrayList<>(); List<Long> receTenDays = new ArrayList<>(); List<Long> finTenDays = new ArrayList<>(); while (!startDate.isAfter(endDate)) { - lastTenDays.add(startDate); + if (type.equals("骞�")) { + lastTenDays.add(startDate.format(format).substring(0, 7)); + } else { + lastTenDays.add(startDate.format(format)); + } receTenDays.add(insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery() .eq(InsOrder::getState, 1) - .between(InsOrder::getCreateTime,startDate.atStartOfDay(),startDate.atTime(23,59,59)))); + .between(InsOrder::getCreateTime, startDate.atStartOfDay(), startDate.plusMonths(1).minusDays(1).atTime(23, 59, 59)))); finTenDays.add(insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery() .eq(InsOrder::getState, 4) - .between(InsOrder::getCreateTime,startDate.atStartOfDay(),startDate.atTime(23,59,59)))); - startDate = startDate.plusDays(1); + .between(InsOrder::getCreateTime, startDate.atStartOfDay(), startDate.plusMonths(1).minusDays(1).atTime(23, 59, 59)))); + if (type.equals("骞�")) { + startDate = startDate.plusMonths(1); + } else { + startDate = startDate.plusDays(1); + } } map.put("DAYS", lastTenDays); map.put("RECETENDAYS", receTenDays); @@ -179,13 +189,27 @@ //妫�娴嬮」鐩粺璁� @Override - public Map<String, Object> testProductByDay(String startTime,String endTime,String type) { + public Map<String, Object> testProductByDay(String startTime, String endTime, String type) { DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDateTime start = LocalDate.parse(startTime, format).atStartOfDay(); LocalDateTime end = LocalDate.parse(endTime, format).atTime(23, 59, 59); - LocalDateTime oldStart=start ; - LocalDateTime oldEnd=end ; + LocalDateTime oldStart = start; + LocalDateTime oldEnd = end; Map<String, Object> map = new HashMap<>(); + switch (type) { + case "鍛�": + oldStart = start.minusDays(7); + oldEnd = end.minusDays(7); + break; + case "鏈�": + oldStart = start.minusMonths(1); + oldEnd = end.minusMonths(1); + break; + case "骞�": + oldStart = start.minusYears(1); + oldEnd = end.minusYears(1); + break; + } /*椤圭洰鎺ユ敹*/ //浠婃棩椤圭洰鎺ユ敹閲� Long receive = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery() @@ -230,7 +254,8 @@ //浠婃棩瀹屾垚閲忎腑鐨勫悎鏍奸噺/浠婃棩瀹屾垚閲� Long accept = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery() .eq(InsProduct::getState, 1) - .eq(InsProduct::getInsResult, 1) + .isNotNull(InsProduct::getInsResult) + .ne(InsProduct::getInsResult, 0) .between(InsProduct::getCreateTime, start, end)); map.put("ACCEPT", accept); BigDecimal acceptRate = new BigDecimal(accept).divide(new BigDecimal(finishe == 0 ? 1 : finishe), 2, BigDecimal.ROUND_HALF_UP); @@ -250,19 +275,27 @@ //鑾峰彇杩戝崄鏃ョ殑妯潗鏍� LocalDate startDate = LocalDate.parse(startTime, format); LocalDate endDate = LocalDate.parse(endTime, format); - List<LocalDate> lastTenDays = new ArrayList<>(); + List<String> lastTenDays = new ArrayList<>(); List<Long> receTenDays = new ArrayList<>(); List<Long> finTenDays = new ArrayList<>(); - while (!startDate.isAfter(endDate)) { - lastTenDays.add(startDate); + while (!startDate.isAfter(endDate)) { + if (type.equals("骞�")) { + lastTenDays.add(startDate.format(format).substring(0, 7)); + } else { + lastTenDays.add(startDate.format(format)); + } receTenDays.add(insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery() .eq(InsProduct::getState, 1) - .between(InsProduct::getCreateTime,startDate.atStartOfDay(),startDate.atTime(23,59,59)))); + .between(InsProduct::getCreateTime, startDate.atStartOfDay(), startDate.plusMonths(1).minusDays(1).atTime(23, 59, 59)))); finTenDays.add(insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery() .eq(InsProduct::getState, 1) .isNotNull(InsProduct::getInsResult) - .between(InsProduct::getCreateTime,startDate.atStartOfDay(),startDate.atTime(23,59,59)))); - startDate = startDate.plusDays(1); + .between(InsProduct::getCreateTime, startDate.atStartOfDay(), startDate.plusMonths(1).minusDays(1).atTime(23, 59, 59)))); + if (type.equals("骞�")) { + startDate = startDate.plusMonths(1); + } else { + startDate = startDate.plusDays(1); + } } map.put("DAYS", lastTenDays); map.put("RECETENDAYS", receTenDays); @@ -350,31 +383,24 @@ //棣栭〉-->鍚勭珯鐐圭殑宸ユ椂 @Override - public Map<String, Double> manHourByStation(String startTime, String endTime) { + public String manHourByStation(String startTime, String endTime, String sonLaboratory) { DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDateTime start = LocalDate.parse(startTime, format).atStartOfDay(); LocalDateTime end = LocalDate.parse(endTime, format).atTime(23, 59, 59); //鏌ヨ杩欎釜鏃堕棿鍐呮墍鏈夌殑宸ユ椂 List<AuxiliaryOutputWorkingHours> auxiliaryOutputWorkingHours = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery() .between(AuxiliaryOutputWorkingHours::getCreateTime, start, end)); - //鏍规嵁妫�楠岄」鏌ュ嚭鏉ョ殑绔欑偣杩涜鍒嗙被 - List<AuxiliaryOutputWorkingHoursDto> outputWorkingHoursDtos = auxiliaryOutputWorkingHours.stream().map(auxiliaryOutputWorkingHours1 -> { - AuxiliaryOutputWorkingHoursDto auxiliaryOutputWorkingHoursDto = new AuxiliaryOutputWorkingHoursDto(); - BeanUtils.copyProperties(auxiliaryOutputWorkingHours1, auxiliaryOutputWorkingHoursDto); - InsProduct insProduct = insProductMapper.selectById(auxiliaryOutputWorkingHours1.getInsProductId()); - auxiliaryOutputWorkingHoursDto.setSonLaboratory(insProduct.getSonLaboratory()); - return auxiliaryOutputWorkingHoursDto; - }).collect(Collectors.toList()); - Map<String, Double> map = outputWorkingHoursDtos.stream() - .collect(Collectors.groupingBy( - AuxiliaryOutputWorkingHoursDto::getSonLaboratory, - Collectors.summingDouble(AuxiliaryOutputWorkingHours::getOutputWorkTime))); - return map; + double sum = auxiliaryOutputWorkingHours.stream() + .filter(auxiliaryOutputWorkingHours1 -> + insProductMapper.selectById(auxiliaryOutputWorkingHours1.getInsProductId()).getSonLaboratory().equals(sonLaboratory) + ).mapToDouble(AuxiliaryOutputWorkingHours::getOutputWorkTime).sum(); + String num = String.format("%.2f", sum); + return num; } //棣栭〉-->鍚勭珯鐐瑰伐鏃舵瘡涓汉鎵�鍗犵櫨鍒嗘瘮 @Override - public Map<String, Map<String, Double>> manHourByPerson(String startTime, String endTime) { + public Map<Object, Double> manHourByPerson(String startTime, String endTime, String sonLaboratory) { DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDateTime start = LocalDate.parse(startTime, format).atStartOfDay(); LocalDateTime end = LocalDate.parse(endTime, format).atTime(23, 59, 59); @@ -382,20 +408,37 @@ List<AuxiliaryOutputWorkingHours> auxiliaryOutputWorkingHours = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery() .between(AuxiliaryOutputWorkingHours::getCreateTime, start, end)); //鏍规嵁妫�楠岄」鏌ュ嚭鏉ョ殑绔欑偣杩涜鍒嗙被 - List<AuxiliaryOutputWorkingHoursDto> outputWorkingHoursDtos = auxiliaryOutputWorkingHours.stream().map(auxiliaryOutputWorkingHours1 -> { - AuxiliaryOutputWorkingHoursDto auxiliaryOutputWorkingHoursDto = new AuxiliaryOutputWorkingHoursDto(); - BeanUtils.copyProperties(auxiliaryOutputWorkingHours1, auxiliaryOutputWorkingHoursDto); - InsProduct insProduct = insProductMapper.selectById(auxiliaryOutputWorkingHours1.getInsProductId()); - auxiliaryOutputWorkingHoursDto.setSonLaboratory(insProduct.getSonLaboratory()); - return auxiliaryOutputWorkingHoursDto; - }).collect(Collectors.toList()); - Map<String, Map<String, Double>> mapMap = outputWorkingHoursDtos.stream() + List<AuxiliaryOutputWorkingHours> outputWorkingHours = auxiliaryOutputWorkingHours.stream() + .filter(auxiliaryOutputWorkingHours1 -> + insProductMapper.selectById(auxiliaryOutputWorkingHours1.getInsProductId()).getSonLaboratory().equals(sonLaboratory) + ).collect(Collectors.toList()); + Map<Object, Double> mapMap = outputWorkingHours.stream() .collect(Collectors.groupingBy( - AuxiliaryOutputWorkingHoursDto::getSonLaboratory, - Collectors.groupingBy( - t -> userMapper.selectById(t.getCheck()).getName(), - Collectors.summingDouble(AuxiliaryOutputWorkingHours::getOutputWorkTime)))); - + t -> userMapper.selectById(t.getCheck()).getName(), + Collectors.summingDouble(AuxiliaryOutputWorkingHours::getOutputWorkTime))); return mapMap; } + + @Override + public Map<String, IPage<InsOrderUserDto>> timeByStation(String startTime, String endTime, Page page, String sonLaboratory) { + DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDateTime start = LocalDate.parse(startTime, format).atStartOfDay(); + LocalDateTime end = LocalDate.parse(endTime, format).atTime(23, 59, 59); + Map<String, IPage<InsOrderUserDto>> map = new HashMap<>(); + //鏌ヨ杩欎釜鏃堕棿鍐呮墍鏈夋楠屼换鍔� + if (ObjectUtils.isNotEmpty(sonLaboratory)) { + IPage<InsOrderUserDto> insOrderUserDtoIPage = insOrderUserMapper.selectInsOrderUserDto(start, end, sonLaboratory, page); + map.put(sonLaboratory, insOrderUserDtoIPage); + }else { + List<InsOrderState> insOrderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery() + .between(InsOrderState::getCreateTime, start, end)); + Map<String, List<InsOrderState>> listMap = insOrderStates.stream().collect(Collectors.groupingBy(InsOrderState::getLaboratory)); + for (Map.Entry<String, List<InsOrderState>> entry : listMap.entrySet()) { + List<Integer> ids = entry.getValue().stream().map(InsOrderState::getId).collect(Collectors.toList()); + IPage<InsOrderUserDto> insOrderUserDtoIPage = insOrderUserMapper.selectInsOrderUserDto2(ids, new Page(1,9)); + map.put(entry.getKey(), insOrderUserDtoIPage); + } + } + return map; + } } -- Gitblit v1.9.3