[x] Task 1: 修复 UserSignScrmController 自赋值 Bug 与 NPE 风险
getIntegral 方法行 71 param.setUserId(param.getUserId()) 自赋值 Bug,改为 param.setUserId(Long.parseLong(getUserId()))getUserSign 方法 user.getIntegral().intValue() 的 NPE 风险,增加 null 校验(integral 为 null 时返回 0)[x] Task 2: 修复 IntegralScrmController IDOR 越权漏洞与 NPE 风险
getIntegralOrderById 方法,增加订单归属校验(校验订单 userId 是否等于当前登录 userId,不匹配返回错误)getUserSign 方法 user.getIntegral().intValue() 的 NPE 风险(随 Task 3 删除重复方法一并消除)[x] Task 3: 删除 IntegralScrmController 中与 UserSignScrmController 重复的方法
IntegralScrmController.getUserSign 方法(行 107-118)IntegralScrmController.sign 方法(行 119-126)IFsUserScrmService userService、IFsUserSignScrmService userSignService、ISysConfigService configService 已删除,同时清理无用 import)[x] Task 4: 为 StoreOrderScrmController 下单接口增加防重复提交
create 方法(行 376)增加 @RepeatSubmit 注解createMultiStore 方法(行 390)增加 @RepeatSubmit 注解[x] Task 5: 为 PayScrmController 单门店支付回调增加分布式锁
hfPayNotify 方法(行 101-135)增加 Redisson 分布式锁,锁 key 基于订单号ybPayNotify 方法(行 137-159)增加 Redisson 分布式锁,锁 key 基于订单号hfPayNotify、ybPayNotify、multiStoreHfPayNotify 的 switch 语句补充 default 分支并记录 warn 日志[x] Task 6: 清理 HuifuPayScrmController 死代码
asyncMessage 方法中被注释的 switch 语句(行 46-68)@Slf4j 注解,删除非标准 logger 字段)[x] Task 7: 抽取硬编码常量
UserSignScrmController 中将 "store.sign" 抽取为常量 CONFIG_KEY_STORE_SIGN(IntegralScrmController 因 configService 已删除无需处理)PayScrmController 中将支付来源魔法值 1 抽取为常量 PAY_SOURCE_ONLINE(已替换全部 4 处调用)[x] Task 8: 统一 @Login 注解与参数校验
IntegralScrmController.getIntegralGoodsList、getIntegralGoodsById 保持公开不加 @Login(商品查询为公开接口,符合业务惯例)CourseScrmController.getIntegral 和 getIntegralByH5Video 的 param 参数补充 @Validated 注解