电池用户、蓄电池可售范围专题
本文整理蓄电池服务站、可售分类品牌、可售 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 缓存刷新和过期。