电池用户、蓄电池可售范围专题

本文整理蓄电池服务站、可售分类品牌、可售 SKU 缓存和销售限制。该模块影响商品列表、销售出库、机器人查询和活动商品可售判断。

业务目标

  • 标记哪些服务站属于蓄电池服务站。
  • 控制蓄电池服务站可售分类、品牌和物料范围。
  • 用 Redis 缓存服务站可售 invId 列表,提升查询性能。
  • 在商品搜索、销售、活动和机器人链路中拦截不可售商品。

入口文件

  • 电池服务:application/Services/BatteryUser/BatteryUserService.php
  • 表常量:application/config/tables.php
  • Redis key:application/KzData/Enums/RedisKeys.php
  • 商品查询:application/Services/Materiels/*
  • 销售/活动商品校验:销售和活动相关 Service。

核心表和缓存

| 类型 | 名称 | 用途 | | --- | --- | --- | | 表 | t_bs_battery_category_brand | 蓄电池用户可售分类和品牌 | | 商品表 | t_bs_goods / t_bs_goods_ext | 商品基础和扩展 | | Redis | BATTERY_INVIDS_SID_LIST | 服务站可售 invId 缓存 |

核心方法

  • getInvIdsCacheBySid:按服务站读取可售 invId 缓存。
  • getInvIdsCacheBySid($useCache = false):绕过缓存重建。
  • getBatterySkuIds:获取蓄电池可售 SKU。
  • check异常物料 相关逻辑:提示不可售原因。

主流程

flowchart TD
  A["服务站访问商品"] --> B{"是否蓄电池服务站"}
  B -->|否| C["按普通商品规则"]
  B -->|是| D["读取可售分类品牌"]
  D --> E["生成或读取 invId 缓存"]
  E --> F["过滤商品列表/销售/活动"]

异常流程

  • 明明配置了还不可售:查缓存是否刷新,必要时 useCache=false 重建。
  • 可售范围过大:查分类品牌配置是否缺少品牌或分类限制。
  • 商品搜索和销售结果不一致:查商品搜索是否走 ES,销售是否读业务库过滤。
  • 活动商品无法加入:查活动校验是否复用蓄电池可售判断。

常用排查命令

rg -n "BatteryUserService|BATTERY_INVIDS_SID_LIST|t_bs_battery_category_brand" application
rg -n "getInvIdsCacheBySid|getBattery|check.*Battery|battery" application/Services application/controllers
rg -n "BatteryStrategy|battery" application/Services/MoveMall/RobotV2 application/Services/Materiels

改动风险和回归清单

  • 蓄电池服务站和普通服务站商品列表。
  • 商品搜索、销售开单、销售出库。
  • 活动商品、机器人商品推荐。
  • Redis 缓存刷新和过期。