From e5f60b7b30cabbe27d2cbf03629cba55ad1ccf25 Mon Sep 17 00:00:00 2001 From: wells <123456@qq.com> Date: Wed, 5 Aug 2026 18:23:02 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=B7=BB=E5=8A=A0=E7=A7=AF=E5=88=86?= =?UTF-8?q?=EF=BC=8C=E6=89=A3=E9=99=A4=E7=A7=AF=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tailbet/mapper/UserMapper.java | 14 +++++++++++++ .../service/impl/PointsServiceImpl.java | 20 +++++++++++++------ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/tailbet/mapper/UserMapper.java b/src/main/java/com/tailbet/mapper/UserMapper.java index 4470730..8af97e4 100644 --- a/src/main/java/com/tailbet/mapper/UserMapper.java +++ b/src/main/java/com/tailbet/mapper/UserMapper.java @@ -3,10 +3,24 @@ package com.tailbet.mapper; import com.tailbet.model.entity.User; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; /** * 用户Mapper */ @Mapper public interface UserMapper extends BaseMapper { + + /** + * 原子增加积分 + */ + @Update("UPDATE user SET points = points + #{amount} WHERE id = #{id}") + int addPoints(@Param("id") Long id, @Param("amount") Long amount); + + /** + * 原子扣除积分(积分不足时返回0) + */ + @Update("UPDATE user SET points = points - #{amount} WHERE id = #{id} AND points >= #{amount}") + int subPoints(@Param("id") Long id, @Param("amount") Long amount); } diff --git a/src/main/java/com/tailbet/service/impl/PointsServiceImpl.java b/src/main/java/com/tailbet/service/impl/PointsServiceImpl.java index e94d517..a7d1bb9 100644 --- a/src/main/java/com/tailbet/service/impl/PointsServiceImpl.java +++ b/src/main/java/com/tailbet/service/impl/PointsServiceImpl.java @@ -35,10 +35,14 @@ public class PointsServiceImpl implements IPointsService { } Long before = user.getPoints(); - Long after = before + amount; - user.setPoints(after); - userMapper.updateById(user); + // 原子增加积分 + int rows = userMapper.addPoints(userId, amount); + if (rows == 0) { + throw new RuntimeException("积分增加失败"); + } + + Long after = before + amount; // 记录流水 PointsFlow flow = new PointsFlow(); @@ -68,10 +72,14 @@ public class PointsServiceImpl implements IPointsService { } Long before = user.getPoints(); - Long after = before - amount; - user.setPoints(after); - userMapper.updateById(user); + // 原子扣除积分(SQL层保证余额充足才扣) + int rows = userMapper.subPoints(userId, amount); + if (rows == 0) { + return false; + } + + Long after = before - amount; // 记录流水 PointsFlow flow = new PointsFlow();