yuan
12 小时以前 3fffef8da8b40bea43ec6d0f58b6b614875def68
feat: 指标统计增加销售数量
已修改4个文件
17 ■■■■ 文件已修改
src/main/java/com/ruoyi/RuoYiApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/RuoYiApplication.java
@@ -11,7 +11,7 @@
 * @author ruoyi
 */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@EnableScheduling
//@EnableScheduling
public class RuoYiApplication
{
    public static void main(String[] args)
src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java
@@ -14,6 +14,7 @@
    private String month; // 月份(如2024-12)
    private Integer orderCount; // 订单数
    private BigDecimal salesAmount; // 销售额
    private BigDecimal productQuantity; // 产品销售数量
    private BigDecimal shipRate;
}
src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
@@ -66,6 +66,7 @@
            "DATE_FORMAT(sl.entry_date, '%Y-%m') AS month, " +
            "COUNT(DISTINCT sl.id) AS order_count, " +  // 总订单数
            "SUM(slp.tax_inclusive_total_price) AS sales_amount, " +  // 销售额
            "SUM(IFNULL(slp.quantity, 0)) AS product_quantity, " +  // 产品销售数量
            // 发货率 = 发货订单数 * 100 / 总订单数(保留2位小数,避免除0报错)
            "ROUND(IF(COUNT(DISTINCT sl.id) = 0, 0, " +
            "SUM(CASE WHEN slp.approve_status = 2 THEN 1 ELSE 0 END) / COUNT(DISTINCT sl.id) * 100), 2) AS ship_rate " +
src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
@@ -51,9 +51,16 @@
        map.put("total", new BigDecimal(totalOrders));
        map.put("shipRate", "0.00%");
        //  发货率
        //  产品销售数量
        List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
                .eq(SalesLedgerProduct::getType, 1));
        BigDecimal productQuantityTotal = CollectionUtils.isEmpty(products) ? BigDecimal.ZERO :
                products.stream()
                        .map(SalesLedgerProduct::getQuantity)
                        .filter(Objects::nonNull)
                        .reduce(BigDecimal.ZERO, BigDecimal::add);
        map.put("productQuantityTotal", productQuantityTotal);
        if (CollectionUtils.isEmpty(products)) {
            return AjaxResult.success(map);
        }
@@ -116,6 +123,7 @@
        List<String> dateList = new ArrayList<>();
        List<BigDecimal> orderCountList = new ArrayList<>();
        List<BigDecimal> salesAmountList = new ArrayList<>();
        List<BigDecimal> productQuantityList = new ArrayList<>();
        List<BigDecimal> shippingRateList = new ArrayList<>();
        Calendar tempCalendar = Calendar.getInstance();
@@ -136,10 +144,12 @@
            if (dto != null) {
                orderCountList.add(new BigDecimal(dto.getOrderCount()));
                salesAmountList.add(dto.getSalesAmount() != null ? dto.getSalesAmount() : BigDecimal.ZERO);
                productQuantityList.add(dto.getProductQuantity() != null ? dto.getProductQuantity() : BigDecimal.ZERO);
                shippingRateList.add(new BigDecimal(String.valueOf(dto.getShipRate())));
            } else {
                orderCountList.add(BigDecimal.ZERO);
                salesAmountList.add(BigDecimal.ZERO);
                productQuantityList.add(BigDecimal.ZERO);
                shippingRateList.add(BigDecimal.ZERO);
            }
@@ -150,6 +160,7 @@
        map.put("dateList", dateList);
        map.put("orderCountList", orderCountList);
        map.put("salesAmountList", salesAmountList);
        map.put("productQuantityList", productQuantityList);
        map.put("shippingRateList", shippingRateList);
        return AjaxResult.success(map);
    }