- fix-depleted-package-display → archive/2026-09-14-fix-depleted-package-display;
补记验证:`GetCurrentMainPackage`(package_usage_store.go:63-66)按 status IN (1,2) 读取主套餐,
资产信息 `fillPackageInfo`(service/asset/service.go:348-349)复用该读取,
已用完主套餐返回名称、使用记录、时间与流量指标,待生效/已过期/已失效仍不作为当前套餐;
实现提交 ff25586,4 项任务全部完成。
- fix-immediate-package-payment-resume → archive/2026-09-14-fix-immediate-package-payment-resume;
补记八月迭代同步验证:定点同步提交 b38b2b3 已是 Iteration/8-11 的 HEAD 祖先,
在途支付商户装配保留(98c145f);services.go:277 `orderService.SetResumeCallback(stopResumeService)`
在位,`go build ./cmd/api ./cmd/worker` 通过;2.1/2.2 据此勾选。
- 主 Spec 同步:personal-customer 新增「资产信息展示当前可用或已用完主套餐」;
package-lifecycle 修改为支付成功后已生效主套餐触发一次即时自动复机检查。
openspec validate --all 为 38 passed / 0 failed;doctor healthy。
4.3 KiB
personal-customer 当前行为
Purpose
描述个人客户身份与资产归属隔离的当前行为。
Requirements
Requirement: 个人客户身份
系统 SHALL 支持个人客户通过既有认证入口登录、退出并查询当前资料。有效登录材料对应的客户创建、资料同步或资产绑定 SHALL 不因审计事件构造、校验或持久化失败而失败;审计失败 SHALL 按运营审计要求记录。
Scenario: 个人客户身份
- GIVEN 个人客户提供有效登录材料
- WHEN 请求认证
- THEN 系统返回个人客户身份和访问凭证
Scenario: 登录审计失败
- GIVEN 个人客户提供有效登录材料且登录需要创建或绑定资产
- WHEN 对应审计事件写入失败
- THEN 系统仍完成客户和资产绑定并返回访问凭证
Requirement: 资产归属查询
系统 SHALL 只向个人客户返回当前绑定或可识别的卡与设备资产。
Scenario: 资产归属查询
- GIVEN 客户已认证
- WHEN 查询资产列表或详情
- THEN 返回该客户可见的资产而不包含其他客户资产
Requirement: 资产信息展示当前可用或已用完主套餐
系统 SHALL 在个人客户查询其已绑定资产的 GET /api/c/v1/asset/info 时,将当前世代中状态为生效中(status=1)或已用完(status=2)的主套餐作为当前套餐摘要返回。返回的套餐摘要 SHALL 包含套餐名称、套餐使用记录 ID、开始时间、到期时间、真流量与虚流量指标。待生效、已过期和已失效的主套餐不得作为当前套餐摘要返回。
Scenario: 已用完主套餐仍展示使用情况
- GIVEN 已认证个人客户拥有当前世代唯一的已用完主套餐,且该主套餐状态为
status=2 - WHEN 客户请求
GET /api/c/v1/asset/info - THEN 响应返回该主套餐的名称、使用记录 ID、开始时间、到期时间及流量指标
- AND 响应不得将该套餐摘要字段返回为无套餐零值
Scenario: 生效中主套餐保持既有展示
- GIVEN 已认证个人客户拥有当前世代唯一的生效中主套餐,且该主套餐状态为
status=1 - WHEN 客户请求
GET /api/c/v1/asset/info - THEN 响应返回该主套餐的既有套餐摘要和流量指标
Scenario: 不可展示状态不作为当前套餐
- GIVEN 已认证个人客户没有状态为
status=1或status=2的主套餐 - WHEN 客户请求
GET /api/c/v1/asset/info - THEN 响应的当前套餐摘要保持无套餐零值
可达操作索引
本节只用于入口导航,不是行为 Requirement;业务义务以上述 Requirements 为准。
个人客户 - 认证
POST /api/c/v1/auth/bind-phone(绑定手机号);POST /api/c/v1/auth/change-phone(更换手机号);POST /api/c/v1/auth/logout(退出登录);POST /api/c/v1/auth/miniapp-login(小程序登录);POST /api/c/v1/auth/send-code(发送验证码);POST /api/c/v1/auth/verify-asset(资产验证);POST /api/c/v1/auth/wechat-login(公众号登录)。仅在开发模式开启时,系统 SHALL 额外提供 POST /api/c/v1/auth/dev-login。
个人客户 - 账户
GET /api/c/v1/profile(获取个人资料);PUT /api/c/v1/profile(更新个人资料)。
个人客户 - 微信
GET /api/c/v1/wechat/appid(获取当前生效的公众号 AppID);GET /api/c/v1/wechat/jssdk-config(获取微信 JSSDK 签名配置)。
个人客户 - 资产
GET /api/c/v1/asset/info(资产信息);GET /api/c/v1/asset/package-history(资产套餐历史);GET /api/c/v1/asset/packages(资产可购套餐列表);POST /api/c/v1/asset/refresh(资产刷新)。
个人客户 - 设备
GET /api/c/v1/device/cards(获取设备卡列表);POST /api/c/v1/device/factory-reset(恢复出厂设置);POST /api/c/v1/device/reboot(设备重启);POST /api/c/v1/device/switch-card(设备切卡);POST /api/c/v1/device/wifi(设备WiFi配置)。
个人客户 - 实名
GET /api/c/v1/realname/link(获取实名认证链接)。
个人客户 - 换货
POST /api/c/v1/exchange/{id}/shipping-info(提交收货信息);GET /api/c/v1/exchange/pending(查询待处理换货单)。