# Tasks - [x] Task 1: 修复 UserSignScrmController 自赋值 Bug 与 NPE 风险 - [x] SubTask 1.1: 修复 `getIntegral` 方法行 71 `param.setUserId(param.getUserId())` 自赋值 Bug,改为 `param.setUserId(Long.parseLong(getUserId()))` - [x] SubTask 1.2: 修复 `getUserSign` 方法 `user.getIntegral().intValue()` 的 NPE 风险,增加 null 校验(integral 为 null 时返回 0) - [x] Task 2: 修复 IntegralScrmController IDOR 越权漏洞与 NPE 风险 - [x] SubTask 2.1: 修复 `getIntegralOrderById` 方法,增加订单归属校验(校验订单 userId 是否等于当前登录 userId,不匹配返回错误) - [x] SubTask 2.2: 修复 `getUserSign` 方法 `user.getIntegral().intValue()` 的 NPE 风险(随 Task 3 删除重复方法一并消除) - [x] Task 3: 删除 IntegralScrmController 中与 UserSignScrmController 重复的方法 - [x] SubTask 3.1: 删除 `IntegralScrmController.getUserSign` 方法(行 107-118) - [x] SubTask 3.2: 删除 `IntegralScrmController.sign` 方法(行 119-126) - [x] SubTask 3.3: 清理因删除方法而不再使用的依赖注入(`IFsUserScrmService userService`、`IFsUserSignScrmService userSignService`、`ISysConfigService configService` 已删除,同时清理无用 import) - [x] Task 4: 为 StoreOrderScrmController 下单接口增加防重复提交 - [x] SubTask 4.1: 为 `create` 方法(行 376)增加 `@RepeatSubmit` 注解 - [x] SubTask 4.2: 为 `createMultiStore` 方法(行 390)增加 `@RepeatSubmit` 注解 - [x] Task 5: 为 PayScrmController 单门店支付回调增加分布式锁 - [x] SubTask 5.1: 为 `hfPayNotify` 方法(行 101-135)增加 Redisson 分布式锁,锁 key 基于订单号 - [x] SubTask 5.2: 为 `ybPayNotify` 方法(行 137-159)增加 Redisson 分布式锁,锁 key 基于订单号 - [x] SubTask 5.3: 为 `hfPayNotify`、`ybPayNotify`、`multiStoreHfPayNotify` 的 switch 语句补充 default 分支并记录 warn 日志 - [x] Task 6: 清理 HuifuPayScrmController 死代码 - [x] SubTask 6.1: 删除 `asyncMessage` 方法中被注释的 switch 语句(行 46-68) - [x] SubTask 6.2: 删除因 switch 被注释而未使用的依赖注入(7 个 Service 全部删除) - [x] SubTask 6.3: 修复 logger 声明(使用 `@Slf4j` 注解,删除非标准 logger 字段) - [x] Task 7: 抽取硬编码常量 - [x] SubTask 7.1: 在 `UserSignScrmController` 中将 `"store.sign"` 抽取为常量 `CONFIG_KEY_STORE_SIGN`(IntegralScrmController 因 configService 已删除无需处理) - [x] SubTask 7.2: 在 `PayScrmController` 中将支付来源魔法值 `1` 抽取为常量 `PAY_SOURCE_ONLINE`(已替换全部 4 处调用) - [x] Task 8: 统一 @Login 注解与参数校验 - [x] SubTask 8.1: `IntegralScrmController.getIntegralGoodsList`、`getIntegralGoodsById` 保持公开不加 `@Login`(商品查询为公开接口,符合业务惯例) - [x] SubTask 8.2: 为 `CourseScrmController.getIntegral` 和 `getIntegralByH5Video` 的 param 参数补充 `@Validated` 注解 # Task Dependencies - Task 3 依赖 Task 1、Task 2 完成(先修复保留的方法,再删除重复方法) - Task 7 可与 Task 1-6 并行(常量抽取互不影响) - Task 8 可与 Task 1-7 并行 - Task 5 的 SubTask 5.3 依赖 5.1、5.2(同一文件的 switch 修改建议顺序执行避免冲突)