feat: 侧边栏新增二级「库存动销分析」页面 #48

Merged
youruo merged 1 commits from codex/stock-sales-analysis-0927 into main 2026-09-27 16:31:47 +08:00
Collaborator

目的与范围

  • 解决的问题:按《仓库库存动销分析.xlsx》在侧边栏一级「大货库存监控」下新增二级功能「库存动销分析」,
    页面名称、表头与表格结构按需求表实现,并在格式上做了可读性优化(仓库列跨行合并、汇总行高亮、占比百分化、口径提示)。
  • 修改的模块/文件:
    • 新增 backend/src/config/stockSalesAnalysis.js(等级/窗口/名称口径)、backend/src/services/stockSalesAnalysis.js(业务库取数)、backend/src/api/stockSalesAnalysis.js(GET /api/stock-sales-analysis)、backend/test/stockSalesAnalysis.test.js
    • 新增 frontend/src/pages/StockSalesAnalysis/(index.jsx + style.css)、frontend/src/api/stockSalesAnalysis.js、frontend/src/constants/stockSalesAnalysis.js
    • 接线:backend/src/index.js(挂载路由)、前后端 sidebarPages(pageKey=stock_sales_analysis)、sidebarNavigation / BasicLayout / router
  • 是否使用 AI 及负责开发者:由 AI(CodeBuddy)实现,仓库所有者 youruo 审核与授权合并。

表格口径(与需求表对应)

  • 表头:仓库 | 动销等级 | SKU数量 | SKU占比 | 库存数量 | 库存占比 | 销量
  • 等级:爆款:日销≥20 / 热卖款:10≤日销<20 / 平销款:3≤日销<10 / 滞销款-1:1≤日销<3 / 滞销款-2:0<日销<1 / 销售=0,另加每仓「汇总」行
  • 日销 = 统计窗口内已发货件数 ÷ 窗口天数;窗口 7/14/30 天可选,默认 30
  • 库存:rpt.jst_inventoryInfo 实时库存;销量:jst_Orders×jst_OrderItem 按 send_date(排除 Delete/Cancelled,与每日进销存发货口径一致)
  • 只统计「有库存或有销量」的 SKU,避免已下架 SKU 虚增「销售=0」分母

同步与兼容性

  • 起始基线 SHA:9e0612b7f3f7680f8970405ace73d557ffeb6052
  • 最近同步的 main SHA:9e0612b7f3f7680f8970405ace73d557ffeb6052(fetch 后 origin/main 未前进)
  • 待审核任务分支 SHA:f20bd3a487f9d87450962ea4c3f1a554a4805ebb
  • 并行 PR、共享接口、迁移/配置影响:无并行 PR;新增独立路由与页面,不改既有接口;无数据迁移;sidebarPages 为新增条目,不影响既有页面权限。
  • 冲突及处理理由(无冲突也应说明):无冲突,基于最新 main 单提交。
  • 如何确认保留了其他开发者的已有行为:改动均为新增文件 + 追加式注册(路由/侧边栏/权限各一行),前端 npm test 21/21 通过(含导航守卫用例)。

验证

  • 实际执行的命令及结果:
    • npm --prefix backend run syntax:178 文件通过
    • node --test test/stockSalesAnalysis.test.js:5/5 通过
    • npx eslint(全部新增/改动文件):0 问题
    • npm --prefix frontend run build:构建通过,planning 入口校验通过
    • npm --prefix frontend test:21/21 通过
    • 本地起后端实测 GET /api/stock-sales-analysis?days=30:27 仓(1 仓无数据:京仓-横林二仓京东自营仓主仓,业务库确无其库存),
      崔桥汇总 2080 SKU / 90822 件 / 54076 件销量,逐仓 SKU占比与库存占比合计 100%
    • 浏览器实测(Playwright + Edge):侧边栏「大货库存监控 → 库存动销分析」入口可见并可进入;
      表头与需求表逐列一致;197 行(27 仓×7 + 全仓合计 8)渲染无报错,已截图留档
  • 未运行或失败的检���及原因:后端全量测试此前基线存在 1 条与本改动无关的既有失败
    (secret backup survives outside the repository with owner-only permissions,Windows 无 POSIX 权限语义),本轮未新增失败。
  • 说明:需求表中的数值为导出时点的静态样例,页面为实时口径,数值会随取数时刻变化;结构、等级、表头一致。

风险与回退

  • 已知风险:低。接口一次扫描库存与订单明细两张大表(约 5~20 秒),已加 5 分钟结果缓存与 requestTimeout;首屏慢已在按钮提示中说明。
  • 回退方式和数据兼容性:revert 本提交即可整体下线(纯新增功能);无数据写入、无配置变更。
## 目的与范围 - 解决的问题:按《仓库库存动销分析.xlsx》在侧边栏一级「大货库存监控」下新增二级功能「库存动销分析」, 页面名称、表头与表格结构按需求表实现,并在格式上做了可读性优化(仓库列跨行合并、汇总行高亮、占比百分化、口径提示)。 - 修改的模块/文件: - 新增 `backend/src/config/stockSalesAnalysis.js`(等级/窗口/名称口径)、`backend/src/services/stockSalesAnalysis.js`(业务库取数)、`backend/src/api/stockSalesAnalysis.js`(GET /api/stock-sales-analysis)、`backend/test/stockSalesAnalysis.test.js` - 新增 `frontend/src/pages/StockSalesAnalysis/`(index.jsx + style.css)、`frontend/src/api/stockSalesAnalysis.js`、`frontend/src/constants/stockSalesAnalysis.js` - 接线:`backend/src/index.js`(挂载路由)、前后端 `sidebarPages`(pageKey=stock_sales_analysis)、`sidebarNavigation` / `BasicLayout` / `router` - 是否使用 AI 及负责开发者:由 AI(CodeBuddy)实现,仓库所有者 youruo 审核与授权合并。 ## 表格口径(与需求表对应) - 表头:仓库 | 动销等级 | SKU数量 | SKU占比 | 库存数量 | 库存占比 | 销量 - 等级:爆款:日销≥20 / 热卖款:10≤日销<20 / 平销款:3≤日销<10 / 滞销款-1:1≤日销<3 / 滞销款-2:0<日销<1 / 销售=0,另加每仓「汇总」行 - 日销 = 统计窗口内已发货件数 ÷ 窗口天数;窗口 7/14/30 天可选,默认 30 - 库存:rpt.jst_inventoryInfo 实时库存;销量:jst_Orders×jst_OrderItem 按 send_date(排除 Delete/Cancelled,与每日进销存发货口径一致) - 只统计「有库存或有销量」的 SKU,避免已下架 SKU 虚增「销售=0」分母 ## 同步与兼容性 - 起始基线 SHA:9e0612b7f3f7680f8970405ace73d557ffeb6052 - 最近同步的 main SHA:9e0612b7f3f7680f8970405ace73d557ffeb6052(fetch 后 origin/main 未前进) - 待审核任务分支 SHA:f20bd3a487f9d87450962ea4c3f1a554a4805ebb - 并行 PR、共享接口、迁移/配置影响:无并行 PR;新增独立路由与页面,不改既有接口;无数据迁移;`sidebarPages` 为新增条目,不影响既有页面权限。 - 冲突及处理理由(无冲突也应说明):无冲突,基于最新 main 单提交。 - 如何确认保留了其他开发者的已有行为:改动均为新增文件 + 追加式注册(路由/侧边栏/权限各一行),前端 npm test 21/21 通过(含导航守卫用例)。 ## 验证 - 实际执行的命令及结果: - `npm --prefix backend run syntax`:178 文件通过 - `node --test test/stockSalesAnalysis.test.js`:5/5 通过 - `npx eslint`(全部新增/改动文件):0 问题 - `npm --prefix frontend run build`:构建通过,planning 入口校验通过 - `npm --prefix frontend test`:21/21 通过 - 本地起后端实测 `GET /api/stock-sales-analysis?days=30`:27 仓(1 仓无数据:京仓-横林二仓京东自营仓主仓,业务库确无其库存), 崔桥汇总 2080 SKU / 90822 件 / 54076 件销量,逐仓 SKU占比与库存占比合计 100% - 浏览器实测(Playwright + Edge):侧边栏「大货库存监控 → 库存动销分析」入口可见并可进入; 表头与需求表逐列一致;197 行(27 仓×7 + 全仓合计 8)渲染无报错,已截图留档 - 未运行或失败的检���及原因:后端全量测试此前基线存在 1 条与本改动无关的既有失败 (`secret backup survives outside the repository with owner-only permissions`,Windows 无 POSIX 权限语义),本轮未新增失败。 - 说明:需求表中的数值为导出时点的静态样例,页面为实时口径,数值会随取数时刻变化;结构、等级、表头一致。 ## 风险与回退 - 已知风险:低。接口一次扫描库存与订单明细两张大表(约 5~20 秒),已加 5 分钟结果缓存与 requestTimeout;首屏慢已在按钮提示中说明。 - 回退方式和数据兼容性:revert 本提交即可整体下线(纯新增功能);无数据写入、无配置变更。
youruo added 1 commit 2026-09-27 16:31:02 +08:00
按《仓库库存动销分析.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 行渲染与截图均正常
Author
Collaborator

合并授权(仓库所有者/管理员)

  • 授权人:youruo(仓库所有者,通过会话明确指令授权)
  • 授权范围:将本 PR 合并到 main,并按《服务器部署规范》更新生产环境
  • 授权时最终提交 SHA:f20bd3a487f9d87450962ea4c3f1a554a4805ebb
  • 说明:已确认任务分支基于最新 main(9e0612b7f3f7680f8970405ace73d557ffeb6052)创建,无冲突;
    后端 syntax 通过、动销单测 5/5、前端 eslint/build/npm test 21/21 通过;
    本地接口与浏览器实测均通过(侧边栏入口、表头、197 行渲染)。
**合并授权(仓库所有者/管理员)** - 授权人:youruo(仓库所有者,通过会话明确指令授权) - 授权范围:将本 PR 合并到 `main`,并按《服务器部署规范》更新生产环境 - 授权时最终提交 SHA:`f20bd3a487f9d87450962ea4c3f1a554a4805ebb` - 说明:已确认任务分支基于最新 main(`9e0612b7f3f7680f8970405ace73d557ffeb6052`)创建,无冲突; 后端 syntax 通过、动销单测 5/5、前端 eslint/build/npm test 21/21 通过; 本地接口与浏览器实测均通过(侧边栏入口、表头、197 行渲染)。
youruo merged commit 151d420831 into main 2026-09-27 16:31:47 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: lunanting/cangku#48
No description provided.