From a973f11dd90bd3d6d26eba3fe8ba3cd853014a06 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 01 四月 2026 11:18:02 +0800
Subject: [PATCH] 销售看板完成

---
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java |  152 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 141 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
index dc8e2c4..b6cc70e 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -2523,8 +2523,8 @@
     @Override
     public Map<String, Long> total() {
         Map<String, Long> map = new HashMap<>();
-        //鎬婚攢鍞噾棰�
         List<SalesDelivery> salesDeliveries = salesDeliveryMapper.selectList(null);
+        //鎬婚攢鍞噾棰�
         BigDecimal sum = salesDeliveries.stream()
                 .map(item -> item.getPrice() != null ? new BigDecimal(item.getPrice().toString()) : BigDecimal.ZERO)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -2545,27 +2545,155 @@
     }
 
     @Override
-    public String salesAnalysis(SalesDeliveryDto salesDeliveryDto) {
+    public SalesTotalDto salesAnalysis(SalesDeliveryDto salesDeliveryDto) {
+        SalesTotalDto salesTotalDto = new SalesTotalDto();
         List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays());
-        return null;
+        List<Map<String, Long>> maps = new ArrayList<>();
+        List<SalesDelivery> salesDeliveries = salesDeliveryMapper.selectList(Wrappers.<SalesDelivery>lambdaQuery()
+                .eq(SalesDelivery::getProductName,salesDeliveryDto.getType()));
+        for (LocalDate date : dates) {
+            LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth());
+            LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth());
+            if (salesDeliveryDto.getDays().equals("骞�")){
+                lastDay = date.with(TemporalAdjusters.lastDayOfYear());
+            }
+            LocalDate finalLastDay = lastDay;
+            salesDeliveries = salesDeliveries
+                    .stream()
+                    .filter(delivery -> {
+                        LocalDate deliveryDate = delivery.getDeliveryDate();
+                        return !deliveryDate.isBefore(firstDay) && !deliveryDate.isAfter(finalLastDay);
+                    })
+                    .collect(Collectors.toList());
+            Map<String, Long> regionCountMap = Arrays.stream(AddressRegionEnum.values())
+                    .collect(Collectors.toMap(
+                            AddressRegionEnum::getRegionName, // 鍖哄煙鍚嶄綔涓簁ey
+                            enumItem -> 0L                    // 鍒濆鍊煎叏閮ㄤ负0
+                    ));
+            if (!CollectionUtils.isEmpty(salesDeliveries)) {
+                // 鎸夊尯鍩熷垎缁勶紝缁熻姣忎釜鍖哄煙鐨勯攢閲忔�诲拰
+                regionCountMap = salesDeliveries.stream()
+                        .filter(delivery -> delivery.getDeliveryPlace() != null)
+                        .collect(Collectors.groupingBy(
+                                delivery -> {
+                                    AddressRegionEnum regionEnum = AddressRegionEnum.matchRegion(delivery.getDeliveryPlace());
+                                    return regionEnum != null ? regionEnum.getRegionName() : null;
+                                },
+                                Collectors.summingLong(delivery -> delivery.getVolume() != null ? delivery.getVolume().longValue() : 0L)
+                        ));
+            }
+            regionCountMap.put("鍏ㄩ儴", salesDeliveries.stream()
+                    .mapToLong(item -> item.getVolume() != null ? item.getVolume().longValue() : 0L)
+                    .sum());
+            maps.add(regionCountMap);
+        }
+        salesTotalDto.setDates(dates);
+        salesTotalDto.setCustomerTrends(maps);
+        return salesTotalDto;
     }
 
     @Override
-    public String salesRanking(SalesDeliveryDto salesDeliveryDto) {
+    public List<SalesTotalDetailDto> salesRanking(SalesDeliveryDto salesDeliveryDto) {
+        List<SalesTotalDetailDto> salesTotalDetailDtos = new ArrayList<>();
         List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays());
-        return null;
+        List<SalesDelivery> salesDeliveries = salesDeliveryMapper.selectList(Wrappers.<SalesDelivery>lambdaQuery()
+                .eq(SalesDelivery::getProductName,salesDeliveryDto.getType()));
+        for (LocalDate date : dates) {
+            LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth());
+            LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth());
+            if (salesDeliveryDto.getDays().equals("骞�")){
+                lastDay = date.with(TemporalAdjusters.lastDayOfYear());
+            }
+            LocalDate finalLastDay = lastDay;
+            salesDeliveries = salesDeliveries
+                    .stream()
+                    .filter(delivery -> {
+                        LocalDate deliveryDate = delivery.getDeliveryDate();
+                        return !deliveryDate.isBefore(firstDay) && !deliveryDate.isAfter(finalLastDay);
+                    })
+                    .collect(Collectors.toList());
+            Map<String, Long> regionCountMap = Arrays.stream(AddressRegionEnum.values())
+                    .collect(Collectors.toMap(
+                            AddressRegionEnum::getRegionName, // 鍖哄煙鍚嶄綔涓簁ey
+                            enumItem -> 0L                    // 鍒濆鍊煎叏閮ㄤ负0
+                    ));
+            if (!CollectionUtils.isEmpty(salesDeliveries)) {
+                // 鎸夊尯鍩熷垎缁勶紝缁熻姣忎釜鍖哄煙鐨勯攢閲忔�诲拰
+                regionCountMap = salesDeliveries.stream()
+                        .filter(delivery -> delivery.getDeliveryPlace() != null)
+                        .collect(Collectors.groupingBy(
+                                delivery -> {
+                                    AddressRegionEnum regionEnum = AddressRegionEnum.matchRegion(delivery.getDeliveryPlace());
+                                    return regionEnum != null ? regionEnum.getRegionName() : null;
+                                },
+                                Collectors.summingLong(delivery -> delivery.getVolume() != null ? delivery.getVolume().longValue() : 0L)
+                        ));
+            }
+            regionCountMap.put("鍏ㄩ儴", salesDeliveries.stream()
+                    .mapToLong(item -> item.getVolume() != null ? item.getVolume().longValue() : 0L)
+                    .sum());
+            SalesTotalDetailDto salesTotalDetailDto = new SalesTotalDetailDto();
+            salesTotalDetailDto.setDate(date);
+            salesTotalDetailDto.setType(salesDeliveryDto.getType());
+            salesTotalDetailDtos.add(salesTotalDetailDto);
+        }
+        return salesTotalDetailDtos;
     }
 
     @Override
-    public String salesAmount(SalesDeliveryDto salesDeliveryDto) {
+    public SalesTotalDto salesAmount(SalesDeliveryDto salesDeliveryDto) {
+        SalesTotalDto salesTotalDto = new SalesTotalDto();
         List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays());
-        return null;
+        List<Map<String, Long>> maps = new ArrayList<>();
+        List<SalesDelivery> salesDeliveries = salesDeliveryMapper.selectList(Wrappers.<SalesDelivery>lambdaQuery()
+                .eq(SalesDelivery::getProductName,salesDeliveryDto.getType()));
+        for (LocalDate date : dates) {
+            LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth());
+            LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth());
+            if (salesDeliveryDto.getDays().equals("骞�")){
+                lastDay = date.with(TemporalAdjusters.lastDayOfYear());
+            }
+            LocalDate finalLastDay = lastDay;
+            salesDeliveries = salesDeliveries
+                    .stream()
+                    .filter(delivery -> {
+                        LocalDate deliveryDate = delivery.getDeliveryDate();
+                        return !deliveryDate.isBefore(firstDay) && !deliveryDate.isAfter(finalLastDay);
+                    })
+                    .collect(Collectors.toList());
+            Map<String, Long> regionCountMap = Arrays.stream(AddressRegionEnum.values())
+                    .collect(Collectors.toMap(
+                            AddressRegionEnum::getRegionName, // 鍖哄煙鍚嶄綔涓簁ey
+                            enumItem -> 0L                    // 鍒濆鍊煎叏閮ㄤ负0
+                    ));
+            if (!CollectionUtils.isEmpty(salesDeliveries)) {
+                // 鎸夊尯鍩熷垎缁勶紝缁熻姣忎釜鍖哄煙鐨勯攢閲忔�诲拰
+                regionCountMap = salesDeliveries.stream()
+                        .filter(delivery -> delivery.getDeliveryPlace() != null)
+                        .collect(Collectors.groupingBy(
+                                delivery -> {
+                                    AddressRegionEnum regionEnum = AddressRegionEnum.matchRegion(delivery.getDeliveryPlace());
+                                    return regionEnum != null ? regionEnum.getRegionName() : null;
+                                },
+                                Collectors.summingLong(delivery -> delivery.getPrice() != null ? delivery.getPrice().longValue() : 0L)
+                        ));
+            }
+            regionCountMap.put("鍏ㄩ儴", salesDeliveries.stream()
+                    .mapToLong(item -> item.getPrice() != null ? item.getPrice().longValue() : 0L)
+                    .sum());
+            maps.add(regionCountMap);
+        }
+        salesTotalDto.setDates(dates);
+        salesTotalDto.setCustomerTrends(maps);
+        return salesTotalDto;
     }
 
     @Override
-    public String salesDataRanking(SalesDeliveryDto salesDeliveryDto) {
+    public List<SalesTotalDetailDto> salesDataRanking(SalesDeliveryDto salesDeliveryDto) {
+        List<SalesTotalDetailDto> salesTotalDetailDtos = new ArrayList<>();
         List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays());
-        return null;
+
+        return salesTotalDetailDtos;
     }
 
     @Override
@@ -2576,12 +2704,14 @@
         for (LocalDate date : dates) {
             LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth());
             LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth());
+            if (salesDeliveryDto.getDays().equals("骞�")){
+                lastDay = date.with(TemporalAdjusters.lastDayOfYear());
+            }
             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, // 鍖哄煙鍚嶄綔涓簁ey
                             enumItem -> 0L                    // 鍒濆鍊煎叏閮ㄤ负0
@@ -2598,7 +2728,7 @@
                                 Collectors.counting()   // 璁℃暟
                         ));
             }
-            regionCountMap.put("ALLIN",customers.stream().count());
+            regionCountMap.put("鍏ㄩ儴",customers.stream().count());
             maps.add(regionCountMap);
         }
         salesTotalDto.setDates(dates);

--
Gitblit v1.9.3