# Tasks - [x] Task 1: 积分发放取整方式从 ROUND_CEILING 改为 ROUND_HALF_UP - [x] SubTask 1.1: 修改 `FsUserIntegralLogsServiceImpl.java` grantPoints 方法中 `setScale(0, BigDecimal.ROUND_CEILING)` → `setScale(0, RoundingMode.HALF_UP)` - [x] Task 2: preAllocatedIntegral 类型从 Double 改为 Integer - [x] SubTask 2.1: 修改 `FsStoreOrderComputedParam.java` 中 `preAllocatedIntegral` 字段类型 `Double` → `Integer` - [x] SubTask 2.2: 修改 `FsStoreOrderScrmServiceImpl.java` computedOrders 中 `Double[] preAllocatedIntegrals` → `Integer[]`,及赋值处去掉 `(double)` 强转 - [x] SubTask 2.3: 修改 `FsStoreOrderScrmServiceImpl.java` computedOrderMultiStore 中 `usedIntegral = param.getPreAllocatedIntegral()` 赋值处,确保 Integer → double 的正确转换 - [x] Task 3: 多店铺积分分摊计算改用 BigDecimal 算术 - [x] SubTask 3.1: 将 `totalIntegral` 从 `int` 改为 `long`,`user.getIntegral().intValue()` 改为 `longValue()` - [x] SubTask 3.2: `totalDeduction` 计算改用 `BigDecimal.divide(BigDecimal.valueOf(payRate), 2, RoundingMode.HALF_UP)` 替代 `NumberUtil.div` - [x] SubTask 3.3: 子订单积分分配 `Math.round(totalIntegral * ratio.doubleValue())` 改用 `BigDecimal` 计算:`BigDecimal.valueOf(totalIntegral).multiply(ratio).setScale(0, RoundingMode.HALF_UP).intValue()` - [x] SubTask 3.4: cap 超限时积分重算 `Math.round(subDeduction.doubleValue() * payRate)` 改用 `BigDecimal` 计算:`subDeduction.multiply(BigDecimal.valueOf(payRate)).setScale(0, RoundingMode.HALF_UP).intValue()` - [x] Task 4: 修复多店铺分摊 cap 后未更新累计值的 bug - [x] SubTask 4.1: 将 `allocatedDeductionSum` 和 `allocatedIntegralSum` 的累加操作移到 cap 判断之后,使用 cap 后的值进行累加 # Task Dependencies - Task 2 和 Task 3 可并行 - Task 4 依赖 Task 3(在 BigDecimal 改造基础上修复) - Task 1 无依赖