WATER_INVENTORY.md 3.4 KB

库存管理看板(2026-09-11)

库存页 saiadmin-artd/src/views/water/inventory/index.vue 按用户参考图改为四项统计、分规格表格、七日趋势和库存构成。InventoryForm.vue 负责规格、入库及盘点交互,inventory.scss 限定在本页面。库存流水继续使用 WaterLedgerDrawer.vue。

数据口径

  • 顶部统计、库存构成、七日趋势始终取全量数据,不随搜索和翻页变化。搜索仅影响规格表和规格导出。
  • 可用满桶、锁定、在途直接累计 SKU 对应字段;总库存是三者之和,不含现场满桶、空桶、破损隔离满桶。
  • 空桶资产 = 仓库空桶 + 企业现场空桶 + 配送任务车载待交接空桶。车载空桶须履约返仓交接后才进入仓库。
  • 实物统计包含停用 SKU 的库存。库存预警只统计启用且 available <= safety_stock 的规格,数量为规格数;未添加没有业务依据的“偏低”阈值。
  • 七日范围为服务器业务时区今天及前六天,缺失日期补零。入库累计 inbound 与 delivery_return(仅完好退回);出库累计 depart。不包含库存冻结、签收、盘点、现场换桶、空桶交接等其他流水。
  • 破损隔离满桶和累计空桶损失在右侧摘要、规格详情和导出中保留。

接口与维护

  • GET /core/water/inventory/dashboard:keyword(最多120字)、page、limit(1–100);返回 summary、trend、list、updated_at。
  • POST /core/water/inventory/export:同关键词筛选,忽略分页,导出全部匹配规格 XLSX;最多50,000条,超出明确拒绝。临时文件自动清理,商品名公式前缀转义。
  • 两接口复用 water:inventory:read 权限。控制器仅做权限、参数接收和响应,读模型在 WaterInventory 服务,数据库通过 Eloquent 模型访问。
  • 写入仍走既有 POST /core/water/inventory 和 WaterBusiness 的事务、行锁与重复凭据校验,不增加独立库存写入路径。
  • 盘点数必须主动填写,切换规格、企业或调整类型时清空盘点值;允许盘点为0。保存中禁用表单和关闭入口,错误时保留输入与凭据。
  • 现场盘点只调整实物;现场换桶将满桶转为空桶,不再次扣减套餐权益。已使用规格的容量修改仍由后端拒绝。
  • 无需本次数据库迁移;依赖已完成的履约字段迁移(damaged_qty、empty_lost_qty、empty_in_vehicle)。

验证与限制

  • php -d extension=mbstring tests/water_inventory_test.php --http:50项,覆盖全量聚合、分页、阈值、七日边界、空桶归属、原库存操作、重复凭据、XLSX内容和权限,以及本地真实HTTP看板/导出。事务测试全部回滚;HTTP仅查询及导出。
  • php -d extension=mbstring tests/water_business_test.php:69项通过,测试记录全部回滚。
  • 新增/修改PHP语法、前端ESLint、vue-tsc与Vite构建验证。既有系统菜单静态/动态导入警告保留。
  • 浏览器工具启动仍报 failed to start Node runtime: 系统找不到指定的路径。 (os error 3),本次未完成视觉截图及浏览器交互验收;不可将构建或HTTP检查表述为视觉验收通过。4173预览服务可访问。

回退界面可将库存入口恢复为 <WaterWorkspace module="inventory" />,原操作服务未更换,新增读接口可继续保留。