订单看板
This commit is contained in:
0
.vscode/settings.json
vendored
0
.vscode/settings.json
vendored
@@ -3,6 +3,7 @@ package com.klp.controller;
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import com.klp.domain.vo.DashboardOverviewVO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
@@ -97,4 +98,9 @@ public class WmsProductController extends BaseController {
|
||||
@PathVariable Long[] productIds) {
|
||||
return toAjax(iWmsProductService.deleteWithValidByIds(Arrays.asList(productIds), true));
|
||||
}
|
||||
|
||||
@GetMapping("/dashboard/overview")
|
||||
public DashboardOverviewVO getDashboardOverview() {
|
||||
return iWmsProductService.getDashboardOverview();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.klp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
@Data
|
||||
public class CustomerRegionVO {
|
||||
private String region;
|
||||
private int customerCount;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.klp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DashboardOverviewVO {
|
||||
private OrderSummaryVO orderSummary;
|
||||
private List<SalesManagerPieVO> salesManagerPie;
|
||||
private List<ProductRankVO> productRank;
|
||||
private List<OrderMaterialVO> orderMaterial;
|
||||
private List<CustomerRegionVO> customerRegion;
|
||||
}
|
||||
10
klp-wms/src/main/java/com/klp/domain/vo/OrderMaterialVO.java
Normal file
10
klp-wms/src/main/java/com/klp/domain/vo/OrderMaterialVO.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package com.klp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
@Data
|
||||
public class OrderMaterialVO {
|
||||
private String materialName;
|
||||
private double usedCount;
|
||||
private double stockCount;
|
||||
private double purchaseCycle;
|
||||
}
|
||||
19
klp-wms/src/main/java/com/klp/domain/vo/OrderSummaryVO.java
Normal file
19
klp-wms/src/main/java/com/klp/domain/vo/OrderSummaryVO.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package com.klp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
@Data
|
||||
public class OrderSummaryVO {
|
||||
private int totalOrderCount;
|
||||
private int finishedOrderCount;
|
||||
private double finishedRate;
|
||||
private int monthFinishedOrderCount;
|
||||
private double monthFinishedRate;
|
||||
private int lastMonthTotalOrderCount;
|
||||
private int lastMonthFinishedOrderCount;
|
||||
private double lastMonthFinishedRate;
|
||||
private double totalOrderCountGrowthRate;
|
||||
private double finishedOrderCountGrowthRate;
|
||||
private double finishedRateGrowthRate;
|
||||
private double monthFinishedOrderCountGrowthRate;
|
||||
private double monthFinishedRateGrowthRate;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.klp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
@Data
|
||||
public class ProductRankVO {
|
||||
private String productName;
|
||||
private double totalSales;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.klp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
@Data
|
||||
public class SalesManagerPieVO {
|
||||
private String salesManager;
|
||||
private double totalSales;
|
||||
}
|
||||
8
klp-wms/src/main/java/com/klp/domain/vo/SkuSalesVO.java
Normal file
8
klp-wms/src/main/java/com/klp/domain/vo/SkuSalesVO.java
Normal file
@@ -0,0 +1,8 @@
|
||||
package com.klp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
@Data
|
||||
public class SkuSalesVO {
|
||||
private String skuName;
|
||||
private double totalSales;
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
package com.klp.mapper;
|
||||
|
||||
import com.klp.domain.WmsProduct;
|
||||
import com.klp.domain.vo.WmsProductVo;
|
||||
import com.klp.domain.vo.*;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 产品Mapper接口
|
||||
@@ -11,5 +14,41 @@ import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
* @date 2025-07-18
|
||||
*/
|
||||
public interface WmsProductMapper extends BaseMapperPlus<WmsProductMapper, WmsProduct, WmsProductVo> {
|
||||
// 订单汇总
|
||||
@Select("SELECT " +
|
||||
"COUNT(*) AS totalOrderCount, " +
|
||||
"SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END) AS finishedOrderCount, " +
|
||||
"ROUND(SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END)/COUNT(*), 4) AS finishedRate, " +
|
||||
"SUM(CASE WHEN order_status=2 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(NOW(), '%Y-%m') THEN 1 ELSE 0 END) AS monthFinishedOrderCount, " +
|
||||
"ROUND(SUM(CASE WHEN order_status=2 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(NOW(), '%Y-%m') THEN 1 ELSE 0 END)/COUNT(*), 4) AS monthFinishedRate, " +
|
||||
"(SELECT COUNT(*) FROM wms_order WHERE del_flag=0 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y-%m')) AS lastMonthTotalOrderCount, " +
|
||||
"(SELECT SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END) FROM wms_order WHERE del_flag=0 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y-%m')) AS lastMonthFinishedOrderCount, " +
|
||||
"(SELECT ROUND(SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END)/COUNT(*), 4) FROM wms_order WHERE del_flag=0 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y-%m')) AS lastMonthFinishedRate " +
|
||||
"FROM wms_order WHERE del_flag=0")
|
||||
OrderSummaryVO selectOrderSummary();
|
||||
|
||||
// 销售经理饼图
|
||||
@Select("SELECT sales_manager, SUM(od.quantity) AS totalSales " +
|
||||
"FROM wms_order o JOIN wms_order_detail od ON o.order_id = od.order_id " +
|
||||
"WHERE o.order_status = 2 AND o.del_flag=0 GROUP BY o.sales_manager")
|
||||
List<SalesManagerPieVO> selectSalesManagerPie();
|
||||
|
||||
// 产品销量排行
|
||||
@Select("SELECT p.product_name, SUM(od.quantity) AS totalSales " +
|
||||
"FROM wms_order_detail od JOIN wms_product p ON od.product_id = p.product_id " +
|
||||
"GROUP BY p.product_name ORDER BY totalSales DESC LIMIT 10")
|
||||
List<ProductRankVO> selectProductRank();
|
||||
|
||||
// 订单物料分析(只分析库存量和销售销量)
|
||||
@Select("SELECT p.product_name AS materialName, SUM(od.quantity) AS usedCount, " +
|
||||
"(SELECT IFNULL(SUM(stock_quantity),0) FROM wms_stock s WHERE s.product_id = p.product_id) AS stockCount, " +
|
||||
"0 AS purchaseCycle " +
|
||||
"FROM wms_order_detail od JOIN wms_product p ON od.product_id = p.product_id " +
|
||||
"GROUP BY p.product_name")
|
||||
List<OrderMaterialVO> selectOrderMaterial();
|
||||
|
||||
// 客户分布热力图
|
||||
@Select("SELECT o.customer_name AS region, COUNT(*) AS customerCount " +
|
||||
"FROM wms_order o WHERE o.del_flag=0 GROUP BY o.customer_name")
|
||||
List<CustomerRegionVO> selectCustomerRegion();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.klp.service;
|
||||
|
||||
import com.klp.domain.WmsProduct;
|
||||
import com.klp.domain.vo.DashboardOverviewVO;
|
||||
import com.klp.domain.vo.WmsProductVo;
|
||||
import com.klp.domain.bo.WmsProductBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
@@ -46,4 +47,6 @@ public interface IWmsProductService {
|
||||
* 校验并批量删除产品信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
DashboardOverviewVO getDashboardOverview();
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.domain.vo.DashboardOverviewVO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.klp.domain.bo.WmsProductBo;
|
||||
@@ -14,6 +15,7 @@ import com.klp.domain.vo.WmsProductVo;
|
||||
import com.klp.domain.WmsProduct;
|
||||
import com.klp.mapper.WmsProductMapper;
|
||||
import com.klp.service.IWmsProductService;
|
||||
import com.klp.domain.vo.OrderSummaryVO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -116,4 +118,37 @@ public class WmsProductServiceImpl implements IWmsProductService {
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DashboardOverviewVO getDashboardOverview() {
|
||||
DashboardOverviewVO vo = new DashboardOverviewVO();
|
||||
OrderSummaryVO summary = baseMapper.selectOrderSummary();
|
||||
// 计算增长率
|
||||
summary.setTotalOrderCountGrowthRate(
|
||||
summary.getLastMonthTotalOrderCount() == 0 ? 0 :
|
||||
(double)(summary.getTotalOrderCount() - summary.getLastMonthTotalOrderCount()) / summary.getLastMonthTotalOrderCount()
|
||||
);
|
||||
summary.setFinishedOrderCountGrowthRate(
|
||||
summary.getLastMonthFinishedOrderCount() == 0 ? 0 :
|
||||
(double)(summary.getFinishedOrderCount() - summary.getLastMonthFinishedOrderCount()) / summary.getLastMonthFinishedOrderCount()
|
||||
);
|
||||
summary.setFinishedRateGrowthRate(
|
||||
summary.getLastMonthFinishedRate() == 0 ? 0 :
|
||||
(summary.getFinishedRate() - summary.getLastMonthFinishedRate()) / summary.getLastMonthFinishedRate()
|
||||
);
|
||||
summary.setMonthFinishedOrderCountGrowthRate(
|
||||
summary.getLastMonthFinishedOrderCount() == 0 ? 0 :
|
||||
(double)(summary.getMonthFinishedOrderCount() - summary.getLastMonthFinishedOrderCount()) / summary.getLastMonthFinishedOrderCount()
|
||||
);
|
||||
summary.setMonthFinishedRateGrowthRate(
|
||||
summary.getLastMonthFinishedRate() == 0 ? 0 :
|
||||
(summary.getMonthFinishedRate() - summary.getLastMonthFinishedRate()) / summary.getLastMonthFinishedRate()
|
||||
);
|
||||
vo.setOrderSummary(summary);
|
||||
vo.setSalesManagerPie(baseMapper.selectSalesManagerPie());
|
||||
vo.setProductRank(baseMapper.selectProductRank());
|
||||
vo.setOrderMaterial(baseMapper.selectOrderMaterial());
|
||||
vo.setCustomerRegion(baseMapper.selectCustomerRegion());
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user