package cn.iocoder.yudao.module.member.service.point; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordPageReqVO; import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordPageReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.point.MemberPointRecordMapper; import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import java.util.List; import java.util.Set; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_POINT_NOT_ENOUGH; /** * 积分记录 Service 实现类 * * @author QingX */ @Slf4j @Service @Validated public class MemberPointRecordServiceImpl implements MemberPointRecordService { @Resource private MemberPointRecordMapper memberPointRecordMapper; @Resource private MemberUserService memberUserService; @Override public PageResult getPointRecordPage(MemberPointRecordPageReqVO pageReqVO) { // 根据用户昵称查询出用户 ids Set userIds = null; if (StringUtils.isNotBlank(pageReqVO.getNickname())) { List users = memberUserService.getUserListByNickname(pageReqVO.getNickname()); // 如果查询用户结果为空直接返回无需继续查询 if (CollectionUtils.isEmpty(users)) { return PageResult.empty(); } userIds = convertSet(users, MemberUserDO::getId); } // 执行查询 return memberPointRecordMapper.selectPage(pageReqVO, userIds); } @Override public PageResult getPointRecordPage(Long userId, AppMemberPointRecordPageReqVO pageReqVO) { return memberPointRecordMapper.selectPage(userId, pageReqVO); } @Override @Transactional(rollbackFor = Exception.class) public void createPointRecord(Long userId, Integer point, MemberPointBizTypeEnum bizType, String bizId) { if (point == 0) { return; } // 1. 校验用户积分余额 MemberUserDO user = memberUserService.getUser(userId); Integer userPoint = ObjectUtil.defaultIfNull(user.getPoint(), 0); int totalPoint = userPoint + point; // 用户变动后的积分 if (totalPoint < 0) { log.error("[createPointRecord][userId({}) point({}) bizType({}) bizId({}) {}]", userId, point, bizType, bizId, USER_POINT_NOT_ENOUGH); return; } // 2. 更新用户积分 boolean success = memberUserService.updateUserPoint(userId, point); if (!success) { throw exception(USER_POINT_NOT_ENOUGH); } // 3. 增加积分记录 MemberPointRecordDO record = new MemberPointRecordDO() .setUserId(userId).setBizId(bizId).setBizType(bizType.getType()) .setTitle(bizType.getName()).setDescription(StrUtil.format(bizType.getDescription(), point)) .setPoint(point).setTotalPoint(totalPoint); memberPointRecordMapper.insert(record); } }