From 817cc74a4085e3df23d97d095d26528b93b5dd20 Mon Sep 17 00:00:00 2001 From: youruo <15018737611@163.com> Date: Wed, 7 Oct 2026 17:41:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8B=A3=E9=80=89=E5=BA=93=E4=BD=8D?= =?UTF-8?q?=E5=8A=A8=E9=94=80=E5=88=86=E6=9E=90=E9=BB=98=E8=AE=A4=E6=8C=89?= =?UTF-8?q?=E8=BF=91=2030=20=E5=A4=A9=E9=94=80=E9=87=8F=E5=88=92=E5=88=86?= =?UTF-8?q?=E7=AD=89=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 默认统计窗口 15 天 -> 30 天(后端 PICKING_BIN_DEFAULT_DAYS 与前端常量同步) - 可切换窗口补充近 60 天(7 / 15 / 30 / 60) - 等级阈值不变:爆款≥20 / 热卖 10-20 / 平销 3-10 / 滞销-1 1-3 / 滞销-2 (0,1) / 销售=0 - 单测断言同步更新;实测 30 天窗口:7091 个拣选库位,日销=销量÷30 --- backend/src/config/pickingBinSalesAnalysis.js | 6 +++--- backend/test/pickingBinSalesAnalysis.test.js | 6 ++++-- frontend/src/constants/pickingBinSalesAnalysis.js | 5 +++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/backend/src/config/pickingBinSalesAnalysis.js b/backend/src/config/pickingBinSalesAnalysis.js index b574d5f..5aa8942 100644 --- a/backend/src/config/pickingBinSalesAnalysis.js +++ b/backend/src/config/pickingBinSalesAnalysis.js @@ -25,9 +25,9 @@ const PICKING_BIN_LEVEL1 = '大货库存监控'; const PICKING_BIN_LEVEL2 = '拣选库位动销分析'; -/** 可选的统计窗口天数;默认 15 天(需求指定按近 15 天销量划分动销等级) */ -const PICKING_BIN_WINDOW_OPTIONS = [7, 15, 30]; -const PICKING_BIN_DEFAULT_DAYS = 15; +/** 可选的统计窗口天数;默认 30 天(需求指定按近 30 天销量划分动销等级) */ +const PICKING_BIN_WINDOW_OPTIONS = [7, 15, 30, 60]; +const PICKING_BIN_DEFAULT_DAYS = 30; /** 仓位类型:业务库 bin_group 为空视为拣选位 */ const BIN_TYPE_PICKING = '拣选'; diff --git a/backend/test/pickingBinSalesAnalysis.test.js b/backend/test/pickingBinSalesAnalysis.test.js index 151ccb4..3def928 100644 --- a/backend/test/pickingBinSalesAnalysis.test.js +++ b/backend/test/pickingBinSalesAnalysis.test.js @@ -11,6 +11,7 @@ const { const { PICKING_BIN_GRADE_RULES, PICKING_BIN_DEFAULT_DAYS, + PICKING_BIN_WINDOW_OPTIONS, PICKING_BIN_DEFAULT_TYPES, BIN_TYPES, } = require('../src/config/pickingBinSalesAnalysis'); @@ -30,8 +31,9 @@ test('buildGradeCase 覆盖全部正向等级,并以销售=0 兜底', () => { assert.ok(expr.includes("ELSE 'zero'")); }); -test('默认窗口为 15 天,默认只看拣选位', () => { - assert.equal(PICKING_BIN_DEFAULT_DAYS, 15); +test('默认窗口为 30 天,默认只看拣选位', () => { + assert.equal(PICKING_BIN_DEFAULT_DAYS, 30); + assert.ok(PICKING_BIN_WINDOW_OPTIONS.includes(30)); assert.deepEqual(PICKING_BIN_DEFAULT_TYPES, ['拣选']); assert.deepEqual(BIN_TYPES, ['拣选', '存货']); }); diff --git a/frontend/src/constants/pickingBinSalesAnalysis.js b/frontend/src/constants/pickingBinSalesAnalysis.js index 5f5d9d9..dd64d09 100644 --- a/frontend/src/constants/pickingBinSalesAnalysis.js +++ b/frontend/src/constants/pickingBinSalesAnalysis.js @@ -47,9 +47,10 @@ export const PICKING_BIN_WINDOW_OPTIONS = [ { label: '近 7 天', value: 7 }, { label: '近 15 天', value: 15 }, { label: '近 30 天', value: 30 }, + { label: '近 60 天', value: 60 }, ]; -export const PICKING_BIN_DEFAULT_DAYS = 15; +export const PICKING_BIN_DEFAULT_DAYS = 30; export const PICKING_BIN_TYPE_OPTIONS = [ { label: '拣选位', value: '拣选' }, @@ -72,7 +73,7 @@ export const PICKING_BIN_DESCRIPTION = [ '动销等级口径:按「单个仓位的日均销量(日销)」分档,日销 = 该仓位近 N 天销量 ÷ N。', ' 爆款:日销 ≥ 20;热卖款:10 ≤ 日销 < 20;平销款:3 ≤ 日销 < 10;', ' 滞销款-1:1 ≤ 日销 < 3;滞销款-2:0 < 日销 < 1;销售=0:窗口内该仓位所有 SKU 均无销量。', - '默认统计窗口为近 15 天,可切换 7 / 15 / 30 天。', + '默认统计窗口为近 30 天,可切换 7 / 15 / 30 / 60 天。', '', '【销量为什么要分摊】', ' 同一 SKU 常同时占用多个同类型仓位(崔桥工厂仓实测 3290 个拣选 SKU 中 1431 个跨多个拣选位,最多 24 个)。',