按《仓库库存动销分析.xlsx》: - 一级菜单「大货库存监控」下新增二级「库存动销分析」(路由 /planning/operation/stock-sales-analysis) - 表头与表格结构按需求表:仓库 | 动销等级 | SKU数量 | SKU占比 | 库存数量 | 库存占比 | 销量, 每仓 6 个动销等级(爆款/热卖款/平销款/滞销款-1/滞销款-2/销售=0)+ 1 行汇总,仓库列跨行合并 - 分档口径:日销 = 统计窗口内已发货件数 ÷ 窗口天数(7/14/30 天可选,默认 30), 库存取 rpt.jst_inventoryInfo 实时库存,销量取 jst_Orders×jst_OrderItem 按 send_date (排除 Delete/Cancelled,与每日进销存发货口径一致),只统计有库存或有销量的 SKU - 后端 /api/stock-sales-analysis:单条 SQL 一次覆盖全部仓库×等级,5 分钟缓存 + refresh=1 强制重算; 返回逐仓 + 全仓合计、占比、无数据仓数量 - 前端页面:统计天数/仓库筛选、口径说明弹窗、合计行高亮、无数据仓计数提示 - 页面权限:前后端 sidebarPages 注册 pageKey=stock_sales_analysis,默认 planning 角色可见 验证:后端 syntax + 单测 5/5;前端 eslint、build、npm test 21/21; 本地接口 30 天窗口实测 27 仓(崔桥汇总 2080 SKU / 90822 件 / 54076 件销量), 占比逐仓闭合为 100%;浏览器实测侧边栏入口、表头、197 行渲染与截图均正常
48 lines
2.2 KiB
JavaScript
48 lines
2.2 KiB
JavaScript
/**
|
||
* 仓库库存动销分析 —— 口径配置(纯规则,不含业务数值)
|
||
*
|
||
* 一级菜单:大货库存监控
|
||
* 二级菜单:库存动销分析
|
||
*
|
||
* 表头(与需求表一致):仓库 | 动销等级 | SKU数量 | SKU占比 | 库存数量 | 库存占比 | 销量
|
||
*
|
||
* 口径:
|
||
* 日销(日均销量)= 统计窗口内已发货件数 / 窗口天数
|
||
* 动销等级按「单个 SKU 的日销」分档,落在哪一档就计入哪一档
|
||
* 仓库内汇总:SKU占比 = 该等级 SKU 数 / 该仓库 SKU 总数
|
||
* 库存占比 = 该等级库存件数 / 该仓库库存总件数
|
||
* 仓库清单与「每日进销存」保持同一份(DAILY_INVENTORY_BASELINE)
|
||
*/
|
||
|
||
const STOCK_SALES_LEVEL1 = '大货库存监控';
|
||
const STOCK_SALES_LEVEL2 = '库存动销分析';
|
||
|
||
/** 可选的统计窗口天数;默认 30 天 */
|
||
const STOCK_SALES_WINDOW_OPTIONS = [7, 14, 30];
|
||
const STOCK_SALES_DEFAULT_DAYS = 30;
|
||
|
||
/**
|
||
* 动销等级(顺序即表格行顺序,汇总行由 total 单独给出)。
|
||
* lower 为日销下界(含),upper 为日销上界(不含);null 表示不限制。
|
||
*/
|
||
const SALES_GRADE_RULES = [
|
||
{ key: 'hot', label: '爆款:日销≥20', lower: 20, upper: null, tip: '单个 SKU 日均销量 ≥ 20 件' },
|
||
{ key: 'best', label: '热卖款:10≤日销<20', lower: 10, upper: 20, tip: '单个 SKU 日均销量 10 ~ 20 件(含 10,不含 20)' },
|
||
{ key: 'normal', label: '平销款:3≤日销<10', lower: 3, upper: 10, tip: '单个 SKU 日均销量 3 ~ 10 件(含 3,不含 10)' },
|
||
{ key: 'slow1', label: '滞销款-1:1≤日销<3', lower: 1, upper: 3, tip: '单个 SKU 日均销量 1 ~ 3 件(含 1,不含 3)' },
|
||
{ key: 'slow2', label: '滞销款-2:0<日销<1', lower: 0, upper: 1, tip: '单个 SKU 日均销量大于 0 且小于 1 件' },
|
||
{ key: 'zero', label: '销售=0', lower: 0, upper: 0, tip: '统计窗口内无销量的 SKU(仍占用库存)' },
|
||
];
|
||
|
||
/** 汇总行的等级名(表内展示用) */
|
||
const SALES_TOTAL_LABEL = '汇总';
|
||
|
||
module.exports = {
|
||
STOCK_SALES_LEVEL1,
|
||
STOCK_SALES_LEVEL2,
|
||
STOCK_SALES_WINDOW_OPTIONS,
|
||
STOCK_SALES_DEFAULT_DAYS,
|
||
SALES_GRADE_RULES,
|
||
SALES_TOTAL_LABEL,
|
||
};
|