zss
7 小时以前 fddb7b7951238b5c70cee251459f6effb3b42c26
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -2535,4 +2535,90 @@
        map.put("customer",count);
        return map;
    }
    @Override
    public String salesAnalysis(SalesDeliveryDto salesDeliveryDto) {
        List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays());
        return null;
    }
    @Override
    public String salesRanking(SalesDeliveryDto salesDeliveryDto) {
        List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays());
        return null;
    }
    @Override
    public String salesAmount(SalesDeliveryDto salesDeliveryDto) {
        List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays());
        return null;
    }
    @Override
    public String salesDataRanking(SalesDeliveryDto salesDeliveryDto) {
        List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays());
        return null;
    }
    @Override
    public SalesTotalDto customerTrends(SalesDeliveryDto salesDeliveryDto) {
        SalesTotalDto salesTotalDto = new SalesTotalDto();
        List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays());
        List<Map<String, Long>> maps = new ArrayList<>();
        for (LocalDate date : dates) {
            LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth());
            LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth());
            Date startDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant());
            Date endDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());
            List<Customer> customers = customerMapper.selectList(Wrappers.<Customer>lambdaQuery()
                    .between(Customer::getMaintenanceTime, startDate, endDate));
            Map<String, Long> regionCountMap = Arrays.stream(AddressRegionEnum.values())
                    .filter(addressRegionEnum -> addressRegionEnum.getRegionName().equals("SELF_PICKUP"))
                    .collect(Collectors.toMap(
                            AddressRegionEnum::getRegionName, // 区域名作为key
                            enumItem -> 0L                    // 初始值全部为0
                    ));
            if (!CollectionUtils.isEmpty(customers)) {
                regionCountMap = customers.stream()
                        // 调用方法将原始地址转换为目标区域
                        .map(customer -> AddressRegionEnum.matchRegion(customer.getCompanyAddress()).getRegionName())
                        // 过滤掉转换失败/空的区域(可选,根据业务需求)
                        .filter(region -> region != null && !region.isEmpty())
                        // 按区域分组,统计每个区域的数量
                        .collect(Collectors.groupingBy(
                                region -> region,       // 分组依据:转换后的区域
                                Collectors.counting()   // 计数
                        ));
            }
            regionCountMap.put("ALLIN",customers.stream().count());
            maps.add(regionCountMap);
        }
        salesTotalDto.setDates(dates);
        salesTotalDto.setCustomerTrends(maps);
        return salesTotalDto;
    }
    /**
     * 根据前端传参 年/月 转换为对应LocalDate列表
     * @param days 前端参数:"年" / "月"
     * @return List<LocalDate>
     */
    public static List<LocalDate> convertDateList(String days) {
        List<LocalDate> resultList = new ArrayList<>();
        LocalDate now = LocalDate.now();
        int currentYear = now.getYear();
        if ("年".equals(days)) {
            // 需求:近5年 → 每年的 1月1日
            for (int i = 0; i < 5; i++) {
                resultList.add(LocalDate.of(currentYear - i, 1, 1));
            }
        } else if ("月".equals(days)) {
            // 需求:当年12个月 → 每月1日
            for (int month = 1; month <= 12; month++) {
                resultList.add(LocalDate.of(currentYear, month, 1));
            }
        }
        return resultList;
    }
}