|
|
@@ -1,11 +1,15 @@
|
|
|
package com.ylx.point.service.impl;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.ylx.common.exception.ServiceException;
|
|
|
+import com.ylx.massage.domain.TWxUser;
|
|
|
+import com.ylx.massage.service.TWxUserService;
|
|
|
import com.ylx.point.domain.PointActivity;
|
|
|
import com.ylx.point.domain.PointActivityExpirePolicy;
|
|
|
import com.ylx.point.domain.PointUserLog;
|
|
|
+import com.ylx.point.domain.dto.ApiAddPointsDTO;
|
|
|
import com.ylx.point.enums.TaskNameEnum;
|
|
|
import com.ylx.point.enums.PointActivityExpirePolicyEnum;
|
|
|
import com.ylx.point.mapper.PointUserLogMapper;
|
|
|
@@ -13,6 +17,7 @@ import com.ylx.point.service.IPointAccountService;
|
|
|
import com.ylx.point.service.IPointActivityExpirePolicyService;
|
|
|
import com.ylx.point.service.IPointActivityService;
|
|
|
import com.ylx.point.service.IPointUserLogService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
@@ -22,6 +27,7 @@ import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Optional;
|
|
|
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class PointAccountServiceImpl implements IPointAccountService {
|
|
|
|
|
|
@@ -33,6 +39,8 @@ public class PointAccountServiceImpl implements IPointAccountService {
|
|
|
private IPointActivityService pointActivityService;
|
|
|
@Resource
|
|
|
private IPointActivityExpirePolicyService pointActivityExpirePolicyService;
|
|
|
+ @Resource
|
|
|
+ private TWxUserService wxUserService;
|
|
|
|
|
|
/**
|
|
|
* 增加用户积分(无账户表版本)
|
|
|
@@ -207,6 +215,42 @@ public class PointAccountServiceImpl implements IPointAccountService {
|
|
|
return newBalance;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void apiAddPoints(ApiAddPointsDTO dto) {
|
|
|
+
|
|
|
+ // 根据userId查询用户信息
|
|
|
+ TWxUser user = this.wxUserService.getById(dto.getUserId());
|
|
|
+ if (ObjUtil.isEmpty(user)) {
|
|
|
+ log.error("用户信息不存在, userId: {}", dto.getUserId());
|
|
|
+ throw new ServiceException("用户信息不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ String openId = user.getcOpenid();
|
|
|
+
|
|
|
+ // 1. 获取当前余额 (变动前)
|
|
|
+ Integer currentBalance = getBalance(openId);
|
|
|
+
|
|
|
+ // 2. 写入积分流水表 (point_user_log)
|
|
|
+ PointUserLog log = new PointUserLog();
|
|
|
+ log.setOpenId(openId);
|
|
|
+ log.setTaskType(3);
|
|
|
+ log.setPoints(dto.getPoints());
|
|
|
+ log.setOpType(1); // 1-收入
|
|
|
+ log.setIsExpired(0);
|
|
|
+ log.setActivityName(TaskNameEnum.LOCAL_LIVE_LOTTERY.getInfo());
|
|
|
+ log.setMonth(DateUtil.format(new Date(), "yyyyMM"));
|
|
|
+
|
|
|
+ // 计算变动后余额 (快照)
|
|
|
+ Integer newBalance = currentBalance + dto.getPoints();
|
|
|
+ log.setBalanceAfter(newBalance);
|
|
|
+
|
|
|
+ boolean saveSuccess = pointUserLogService.save(log);
|
|
|
+ if (!saveSuccess) {
|
|
|
+ throw new ServiceException("积分流水记录失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取用户当前可用积分余额
|
|
|
* 逻辑:未过期收入总和 + 支出总和(支出为负数,直接相加)
|