|
@@ -2,13 +2,13 @@ package com.ylx.point.service.impl;
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
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.common.exception.ServiceException;
|
|
|
import com.ylx.point.domain.PointActivity;
|
|
import com.ylx.point.domain.PointActivity;
|
|
|
import com.ylx.point.domain.PointActivityExpirePolicy;
|
|
import com.ylx.point.domain.PointActivityExpirePolicy;
|
|
|
import com.ylx.point.domain.PointUserLog;
|
|
import com.ylx.point.domain.PointUserLog;
|
|
|
import com.ylx.point.enums.ActivityNameEnum;
|
|
import com.ylx.point.enums.ActivityNameEnum;
|
|
|
import com.ylx.point.enums.PointActivityExpirePolicyEnum;
|
|
import com.ylx.point.enums.PointActivityExpirePolicyEnum;
|
|
|
|
|
+import com.ylx.point.mapper.PointUserLogMapper;
|
|
|
import com.ylx.point.service.IPointAccountService;
|
|
import com.ylx.point.service.IPointAccountService;
|
|
|
import com.ylx.point.service.IPointActivityExpirePolicyService;
|
|
import com.ylx.point.service.IPointActivityExpirePolicyService;
|
|
|
import com.ylx.point.service.IPointActivityService;
|
|
import com.ylx.point.service.IPointActivityService;
|
|
@@ -28,6 +28,8 @@ public class PointAccountServiceImpl implements IPointAccountService {
|
|
|
@Resource
|
|
@Resource
|
|
|
private IPointUserLogService pointUserLogService;
|
|
private IPointUserLogService pointUserLogService;
|
|
|
@Resource
|
|
@Resource
|
|
|
|
|
+ private PointUserLogMapper pointUserLogMapper;
|
|
|
|
|
+ @Resource
|
|
|
private IPointActivityService pointActivityService;
|
|
private IPointActivityService pointActivityService;
|
|
|
@Resource
|
|
@Resource
|
|
|
private IPointActivityExpirePolicyService pointActivityExpirePolicyService;
|
|
private IPointActivityExpirePolicyService pointActivityExpirePolicyService;
|
|
@@ -202,33 +204,14 @@ public class PointAccountServiceImpl implements IPointAccountService {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 获取用户当前可用积分余额
|
|
* 获取用户当前可用积分余额
|
|
|
- * 逻辑:SUM(所有未过期的收入记录的points) - SUM(所有支出记录的points绝对值)
|
|
|
|
|
|
|
+ * 逻辑:未过期收入总和 + 支出总和(支出为负数,直接相加)
|
|
|
*
|
|
*
|
|
|
* @param openId 用户ID
|
|
* @param openId 用户ID
|
|
|
* @return Integer 用户当前可用积分余额
|
|
* @return Integer 用户当前可用积分余额
|
|
|
*/
|
|
*/
|
|
|
private Integer getBalance(String openId) {
|
|
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;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|