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/dto/SalesTotalDetailDto.java | 27 ++++++
src/main/java/com/ruoyi/productionPlan/task/SalesDeliveryTask.java | 2
src/main/java/com/ruoyi/home/controller/HomeController.java | 12 ---
src/main/java/com/ruoyi/home/dto/SalesTotalDto.java | 2
src/main/java/com/ruoyi/home/service/HomeService.java | 8 +-
src/main/java/com/ruoyi/productionPlan/service/impl/SalesDeliveryServiceImpl.java | 37 ++++++--
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 152 +++++++++++++++++++++++++++++++++++--
7 files changed, 200 insertions(+), 40 deletions(-)
diff --git a/src/main/java/com/ruoyi/home/controller/HomeController.java b/src/main/java/com/ruoyi/home/controller/HomeController.java
index 287194b..e1bee4a 100644
--- a/src/main/java/com/ruoyi/home/controller/HomeController.java
+++ b/src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -342,22 +342,10 @@
return AjaxResult.success(homeService.salesAnalysis(salesDeliveryDto));
}
- @GetMapping("/salesRanking")
- @ApiOperation("閿�鍞粺璁$湅鏉�---閿�閲忔暟鎹�-鎺掑悕鍒嗘瀽")
- public AjaxResult salesRanking(SalesDeliveryDto salesDeliveryDto) {
- return AjaxResult.success(homeService.salesRanking(salesDeliveryDto));
- }
-
@GetMapping("/salesAmount")
@ApiOperation("閿�鍞粺璁$湅鏉�---閿�鍞噾棰濆垎鏋�")
public AjaxResult salesAmount(SalesDeliveryDto salesDeliveryDto) {
return AjaxResult.success(homeService.salesAmount(salesDeliveryDto));
- }
-
- @GetMapping("/salesDataRanking")
- @ApiOperation("閿�鍞粺璁$湅鏉�---閿�鍞鏁版嵁-鎺掑悕鍒嗘瀽")
- public AjaxResult salesDataRanking(SalesDeliveryDto salesDeliveryDto) {
- return AjaxResult.success(homeService.salesDataRanking(salesDeliveryDto));
}
@GetMapping("/customerTrends")
diff --git a/src/main/java/com/ruoyi/home/dto/SalesTotalDetailDto.java b/src/main/java/com/ruoyi/home/dto/SalesTotalDetailDto.java
new file mode 100644
index 0000000..6025fc1
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/SalesTotalDetailDto.java
@@ -0,0 +1,27 @@
+package com.ruoyi.home.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Map;
+
+//閿�鍞尯鏁版嵁鏄庣粏
+@Data
+public class SalesTotalDetailDto {
+
+ //鏃ユ湡
+ private LocalDate date;
+
+ //浜у搧绫诲瀷(鐮屽潡/鏉挎潗)
+ private String type;
+
+ //閿�鍞尯
+ private String area;
+
+ //閿�閲�(绔嬫柟绫�)/閿�鍞(鍏�)
+ private Long salesTotal;
+
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/SalesTotalDto.java b/src/main/java/com/ruoyi/home/dto/SalesTotalDto.java
index f6937e9..c166f7c 100644
--- a/src/main/java/com/ruoyi/home/dto/SalesTotalDto.java
+++ b/src/main/java/com/ruoyi/home/dto/SalesTotalDto.java
@@ -14,7 +14,7 @@
//鏃堕棿鍧愭爣
private List<LocalDate> dates;
- //瀹㈡埛鍖哄煙鍒嗘瀽
+ //鏁版嵁
private List<Map<String,Long>> customerTrends;
diff --git a/src/main/java/com/ruoyi/home/service/HomeService.java b/src/main/java/com/ruoyi/home/service/HomeService.java
index 82dc5a6..a7038e5 100644
--- a/src/main/java/com/ruoyi/home/service/HomeService.java
+++ b/src/main/java/com/ruoyi/home/service/HomeService.java
@@ -98,13 +98,13 @@
Map<String,Long> total();
- String salesAnalysis(SalesDeliveryDto salesDeliveryDto);
+ SalesTotalDto salesAnalysis(SalesDeliveryDto salesDeliveryDto);
- String salesRanking(SalesDeliveryDto salesDeliveryDto);
+ List<SalesTotalDetailDto> salesRanking(SalesDeliveryDto salesDeliveryDto);
- String salesAmount(SalesDeliveryDto salesDeliveryDto);
+ SalesTotalDto salesAmount(SalesDeliveryDto salesDeliveryDto);
- String salesDataRanking(SalesDeliveryDto salesDeliveryDto);
+ List<SalesTotalDetailDto> salesDataRanking(SalesDeliveryDto salesDeliveryDto);
SalesTotalDto customerTrends(SalesDeliveryDto salesDeliveryDto);
}
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);
diff --git a/src/main/java/com/ruoyi/productionPlan/service/impl/SalesDeliveryServiceImpl.java b/src/main/java/com/ruoyi/productionPlan/service/impl/SalesDeliveryServiceImpl.java
index 084b249..d9872ed 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/SalesDeliveryServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/SalesDeliveryServiceImpl.java
@@ -7,7 +7,10 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.config.AliDingConfig;
import com.ruoyi.framework.util.AliDingUtils;
+import com.ruoyi.production.pojo.ProductMaterial;
import com.ruoyi.production.pojo.ProductMaterialSku;
+import com.ruoyi.production.service.ProductMaterialService;
+import com.ruoyi.production.service.ProductMaterialSkuService;
import com.ruoyi.productionPlan.enums.DataSourceTypeEnum;
import com.ruoyi.productionPlan.pojo.ProductionPlan;
import com.ruoyi.productionPlan.pojo.SalesDelivery;
@@ -41,6 +44,12 @@
@Autowired
private SalesDeliveryMapper salesDeliveryMapper;
+
+ @Autowired
+ private ProductMaterialSkuService productMaterialSkuService;
+
+ @Autowired
+ private ProductMaterialService productMaterialService;
@Autowired
private AliDingConfig aliDingConfig;
@@ -125,18 +134,24 @@
salesDelivery.setSalesman(formData.getString("textField_ladnkyu1"));//涓氬姟鍛�
salesDelivery.setDeliveryMethod(formData.getString("radioField_ldoc0027"));//鍙戣揣鏂瑰紡
String materialCode = row.getString("textField_l92dg1tc");
- // 鏍规嵁鐗╂枡缂栫爜鏌ヨ鐗╂枡淇℃伅琛紝鍏宠仈鐗╂枡ID
-// if (StringUtils.isNotEmpty(materialCode)) {
-// LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
-// skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, materialCode);
-// ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
-// if (sku != null) {
-// salesDelivery.setProductMaterialSkuId(sku.getId());
-// }
-// }
+ String productName = row.getString("textField_l96srw8x");
+ String model = row.getString("textField_l9tljfl8");
+ // 濡傛灉鍚嶅瓧涓虹┖缂栫爜涓嶄负绌�
+ if (StringUtils.isNotEmpty(materialCode) && StringUtils.isEmpty(productName)) {
+ LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
+ skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, materialCode);
+ ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
+ if (sku != null) {
+ ProductMaterial material = productMaterialService.getById(sku.getProductId());
+ productName=material.getProductName();
+ model=sku.getModel();
+ }
+ }else if (StringUtils.isEmpty(productName) && StringUtils.isEmpty(materialCode)){
+ continue;
+ }
salesDelivery.setMaterialCode(materialCode);//鐗╂枡缂栫爜
- salesDelivery.setProductName(row.getString("textField_l96srw8x"));//浜у搧鍚嶇О
- salesDelivery.setModel(row.getString("textField_l9tljfl8"));//浜у搧瑙勬牸
+ salesDelivery.setProductName(productName);//浜у搧鍚嶇О
+ salesDelivery.setModel(model);//浜у搧瑙勬牸
salesDelivery.setVolume(row.getBigDecimal("numberField_kt8b0qsg_value"));//鏂归噺
salesDelivery.setUnitPrice(row.getBigDecimal("numberField_la0tb2x9_value"));//鍗曚环
salesDelivery.setPrice(row.getBigDecimal("numberField_l9w2piwf"));//浠锋牸
diff --git a/src/main/java/com/ruoyi/productionPlan/task/SalesDeliveryTask.java b/src/main/java/com/ruoyi/productionPlan/task/SalesDeliveryTask.java
index 39ae998..1858c35 100644
--- a/src/main/java/com/ruoyi/productionPlan/task/SalesDeliveryTask.java
+++ b/src/main/java/com/ruoyi/productionPlan/task/SalesDeliveryTask.java
@@ -16,7 +16,7 @@
@Autowired
private SalesDeliveryService salesDeliveryService;
- @Scheduled(cron = "0 0 0 * * ?")
+ @Scheduled(cron = "0 22 10 * * ?")
public void syncSalesDeliveryJob() {
salesDeliveryService.syncSalesDeliveryJob();
}
--
Gitblit v1.9.3