gongchunyi
13 小时以前 98af2bbf6d7c1c821919fc2221c4181479cdc562
Merge remote-tracking branch 'origin/dev_宁夏_中盛建材' into dev_宁夏_中盛建材
已添加1个文件
已修改6个文件
240 ■■■■ 文件已修改
src/main/java/com/ruoyi/home/controller/HomeController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/dto/SalesTotalDetailDto.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/dto/SalesTotalDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/service/HomeService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/productionPlan/service/impl/SalesDeliveryServiceImpl.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/productionPlan/task/SalesDeliveryTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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")
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;
}
src/main/java/com/ruoyi/home/dto/SalesTotalDto.java
@@ -14,7 +14,7 @@
    //时间坐标
    private List<LocalDate> dates;
    //客户区域分析
    //数据
    private List<Map<String,Long>> customerTrends;
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);
}
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, // åŒºåŸŸåä½œä¸ºkey
                            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, // åŒºåŸŸåä½œä¸ºkey
                            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, // åŒºåŸŸåä½œä¸ºkey
                            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, // åŒºåŸŸåä½œä¸ºkey
                            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);
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"));//ä»·æ ¼
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();
    }