[x] Task 1: 积分发放取整方式从 ROUND_CEILING 改为 ROUND_HALF_UP
FsUserIntegralLogsServiceImpl.java grantPoints 方法中 setScale(0, BigDecimal.ROUND_CEILING) → setScale(0, RoundingMode.HALF_UP)[x] Task 2: preAllocatedIntegral 类型从 Double 改为 Integer
FsStoreOrderComputedParam.java 中 preAllocatedIntegral 字段类型 Double → IntegerFsStoreOrderScrmServiceImpl.java computedOrders 中 Double[] preAllocatedIntegrals → Integer[],及赋值处去掉 (double) 强转FsStoreOrderScrmServiceImpl.java computedOrderMultiStore 中 usedIntegral = param.getPreAllocatedIntegral() 赋值处,确保 Integer → double 的正确转换[x] Task 3: 多店铺积分分摊计算改用 BigDecimal 算术
totalIntegral 从 int 改为 long,user.getIntegral().intValue() 改为 longValue()totalDeduction 计算改用 BigDecimal.divide(BigDecimal.valueOf(payRate), 2, RoundingMode.HALF_UP) 替代 NumberUtil.divMath.round(totalIntegral * ratio.doubleValue()) 改用 BigDecimal 计算:BigDecimal.valueOf(totalIntegral).multiply(ratio).setScale(0, RoundingMode.HALF_UP).intValue()Math.round(subDeduction.doubleValue() * payRate) 改用 BigDecimal 计算:subDeduction.multiply(BigDecimal.valueOf(payRate)).setScale(0, RoundingMode.HALF_UP).intValue()[x] Task 4: 修复多店铺分摊 cap 后未更新累计值的 bug
allocatedDeductionSum 和 allocatedIntegralSum 的累加操作移到 cap 判断之后,使用 cap 后的值进行累加