diff --git a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderPayServiceImpl.java b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderPayServiceImpl.java index c35f584..09a51e1 100644 --- a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderPayServiceImpl.java +++ b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderPayServiceImpl.java @@ -691,7 +691,10 @@ public class OrderPayServiceImpl implements OrderPayService { userService.updateNowMoney(user, storeOrder.getPayPrice(), "sub"); // 扣除积分 if (storeOrder.getUseIntegral() > 0) { - userService.updateIntegral(user, storeOrder.getUseIntegral(), "sub"); + Boolean integralUpdated = userService.updateIntegral(user, storeOrder.getUseIntegral(), "sub"); + if (!integralUpdated) { + throw new CrmebException("用户积分不足"); + } } // 添加支付成功redis队列 redisUtil.lPush(TaskConstants.ORDER_TASK_PAY_SUCCESS_AFTER, storeOrder.getOrderId()); diff --git a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserServiceImpl.java b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserServiceImpl.java index f8d3eb1..f9b94f1 100644 --- a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserServiceImpl.java +++ b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserServiceImpl.java @@ -392,6 +392,27 @@ public class UserServiceImpl extends ServiceImpl implements UserS return update(lambdaUpdateWrapper); } + /** + * 更新用户积分 + * + * 使用数据库原子加减,避免根据调用方传入的旧 User 对象计算后覆盖最新积分。 + * + * @param user 用户 + * @param integral 积分 + * @param type 增加add、扣减sub + * @return Boolean + */ + @Override + public Boolean updateIntegral(User user, Integer integral, String type) { + if (ObjectUtil.isNull(user)) { + throw new CrmebException("用户不存在"); + } + if (ObjectUtil.isNull(integral) || integral <= 0) { + throw new CrmebException("积分必须大于0"); + } + return operationIntegral(user.getUid(), BigDecimal.valueOf(integral), user.getIntegral(), type); + } + /** * 会员分组 *