feat(cf): F-3a 消费返佣四条途径接入 earnByRule(F02/F04/F05/F06)
统一发放入口:CfBalanceService.earnByRule(memberId, ruleCode, refId, ctx)
新增分派服务:CfEarnDispatchService(userId -> family_members.id 解析 + ctx/refId 组装)
F02 消费返 CF(cf_consume_order)
- CfEarnDispatchService.java:95 earnConsumeCf,ctx amt=实付分;refId=orderId*100+订单类型命名空间(跨业务表隔离)
- CfCommissionService.java:86-92 settle 7参重载(实付与分润基数分离);:121 earnBuyerCf 替换旧 order_consume 直写
- CfCommissionService.java:112 settleReferrerOnly 同样返当前人 F02(N6)
- ProductOrderService.java:1053-1058 商品订单传 moneyAmount(实付),分润基数仍传 totalAmount
- GutHealthProjectService.java:271-277 调研订单 processPaymentCallback 返 F02
- AssessmentOrderService/PaymentService/MembershipService/MemberSubscriptionService 走 settle/settleReferrerOnly 自动覆盖
F04 商品赠品 CF(product_order_gift)
- CfEarnDispatchService.java:120 earnGiftCf,ctx amount=赠品 CF 数,refId=giftId
- ProductOrderService.java:1166-1173 赠品发放改投 earnByRule(单赠品 try/catch 隔离)
F05 活动签到 CF(activity_checkin)
- CfEarnDispatchService.java:132 earnActivityCheckinCf,ctx amount=活动 platform_points,refId=签到记录 ID
- ActivityService.java:416-424 签到发放改投 earnByRule
F06 菌群健康调研打卡返还(gut_health_refund)
- CfEarnDispatchService.java:144 earnGutHealthRefundCf,ctx amt=返还金额分,refId=projectId
- GutHealthProjectService.java:446-471 refundCf 仅 earned=true 才置 cfRefunded=1(闸门拦下不误标记)
- GutHealthProjectService.java:828-847 getProjectPrice 去 DEFAULT_PRICE 常量,改读 sys_config + CfConfigKeys 兜底
旧 platformPointsService / familyPlatformPointsService / system_points 直写已从上述四条途径移除;
referral_dist 分润保留旧路径(属 F-4 批次)。
测试:CfEarnDispatchServiceTest(8) + CfCommissionServiceSettleTest(4) + CfBalanceServiceTest(20)
+ CfFormulaEvaluatorTest(8) = 40 用例全绿;mvn clean compile BUILD SUCCESS。
构建修复:755a5eba9 迁移419 ensureColumn membership_levels.max_daily_analyze(同步 schema.sql)。
注:本次代码实体由仓库自动 bump 脚本先行提交,对应 hash:
777f7da6d CfEarnDispatchService / CfCommissionService / ProductOrderService
08be1b957 ActivityService / GutHealthProjectService
b47039370 CfEarnDispatchServiceTest / CfCommissionServiceSettleTest
fa718679f MembershipLevel.maxDailyAnalyze 字段补回