jinshihui пре 6 часа
родитељ
комит
307cbec026

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/point/domain/PointUserLog.java

@@ -110,7 +110,7 @@ public class PointUserLog extends BaseEntity {
     @TableField(exist = false)
     private String updateBy;
 
-    @TableField(exist = false)
+    @TableField("create_time")
     private Date createTime;
 
     @TableField(exist = false)

+ 9 - 0
nightFragrance-massage/src/main/java/com/ylx/point/mapper/PointUserLogMapper.java

@@ -34,4 +34,13 @@ public interface PointUserLogMapper extends BaseMapper<PointUserLog> {
             @Param("endOfThisMonth") String endOfThisMonth);
 
     Page<UserPointLogVO> getUserPointLogList(Page<PointUserLog> page, @Param("dto") UserPointPageDTO dto);
+
+    /**
+     * 获取用户可用积分余额
+     * 计算公式:未过期收入总和 - 支出总和(支出为负数,直接相加即可)
+     */
+    @Select("SELECT COALESCE(SUM(CASE WHEN op_type = 1 AND is_expired != 1 THEN points ELSE 0 END) + " +
+            "SUM(CASE WHEN op_type IN (2, 3) THEN points ELSE 0 END), 0) AS points " +
+            "FROM point_user_log WHERE open_id = #{openId}")
+    Integer selectAvailableBalance(@Param("openId") String openId);
 }

+ 6 - 23
nightFragrance-massage/src/main/java/com/ylx/point/service/impl/PointAccountServiceImpl.java

@@ -2,13 +2,13 @@ package com.ylx.point.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.point.domain.PointActivity;
 import com.ylx.point.domain.PointActivityExpirePolicy;
 import com.ylx.point.domain.PointUserLog;
 import com.ylx.point.enums.ActivityNameEnum;
 import com.ylx.point.enums.PointActivityExpirePolicyEnum;
+import com.ylx.point.mapper.PointUserLogMapper;
 import com.ylx.point.service.IPointAccountService;
 import com.ylx.point.service.IPointActivityExpirePolicyService;
 import com.ylx.point.service.IPointActivityService;
@@ -28,6 +28,8 @@ public class PointAccountServiceImpl implements IPointAccountService {
     @Resource
     private IPointUserLogService pointUserLogService;
     @Resource
+    private PointUserLogMapper pointUserLogMapper;
+    @Resource
     private IPointActivityService pointActivityService;
     @Resource
     private IPointActivityExpirePolicyService pointActivityExpirePolicyService;
@@ -202,33 +204,14 @@ public class PointAccountServiceImpl implements IPointAccountService {
 
     /**
      * 获取用户当前可用积分余额
-     * 逻辑:SUM(所有未过期的收入记录的points) - SUM(所有支出记录的points绝对值)
+     * 逻辑:未过期收入总和 + 支出总和(支出为负数,直接相加)
      *
      * @param openId 用户ID
      * @return Integer 用户当前可用积分余额
      */
     private Integer getBalance(String openId) {
-        // 1. 查询所有未过期的收入记录总和
-        QueryWrapper<PointUserLog> incomeWrapper = new QueryWrapper<>();
-        incomeWrapper.select("SUM(points)");
-        incomeWrapper.eq("open_id", openId);
-        incomeWrapper.eq("op_type", 1);  // 1-收入
-        incomeWrapper.ne("is_expired", 1);  // 排除已过期的记录
-
-        PointUserLog incomeLog = pointUserLogService.getOne(incomeWrapper);
-        int totalIncome = (incomeLog != null && incomeLog.getPoints() != null) ? incomeLog.getPoints() : 0;
-
-        // 2. 查询所有支出记录总和(支出记录的points为负数,需要取绝对值)
-        QueryWrapper<PointUserLog> expenseWrapper = new QueryWrapper<>();
-        expenseWrapper.select("COALESCE(SUM(ABS(points)),0)");
-        expenseWrapper.eq("open_id", openId);
-        expenseWrapper.in("op_type", 2, 3);  // 2-支出 3-过期
-
-        PointUserLog expenseLog = pointUserLogService.getOne(expenseWrapper);
-        int totalExpense = (expenseLog != null && expenseLog.getPoints() != null) ? expenseLog.getPoints() : 0;
-
-        // 3. 返回可用积分余额
-        return totalIncome - totalExpense;
+        Integer balance = pointUserLogMapper.selectAvailableBalance(openId);
+        return balance != null ? balance : 0;
     }