Browse Source

增加用户端积分接口

master
glx 1 month ago
parent
commit
4e7683739d
  1. 7
      src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java
  2. 28
      src/main/java/com/youlai/boot/common/event/UserRegisterEvent.java
  3. 50
      src/main/java/com/youlai/boot/mini/controller/PointController.java
  4. 77
      src/main/java/com/youlai/boot/mini/listener/UserRegisterPointListener.java
  5. 14
      src/main/java/com/youlai/boot/mini/mapper/MiniPointRecordMapper.java
  6. 25
      src/main/java/com/youlai/boot/mini/model/query/MyPointRecordQuery.java
  7. 31
      src/main/java/com/youlai/boot/mini/model/vo/MyPointRecordVO.java
  8. 31
      src/main/java/com/youlai/boot/mini/model/vo/MyPointVO.java
  9. 3
      src/main/java/com/youlai/boot/mini/service/MiniPointAccountService.java
  10. 10
      src/main/java/com/youlai/boot/mini/service/MiniPointRecordService.java
  11. 20
      src/main/java/com/youlai/boot/mini/service/impl/MiniPointAccountServiceImpl.java
  12. 10
      src/main/java/com/youlai/boot/mini/service/impl/MiniPointRecordServiceImpl.java
  13. 36
      src/main/resources/mapper/mini/MiniPointRecordMapper.xml

7
src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java

@ -20,6 +20,7 @@ import com.youlai.boot.system.service.UserService;
import com.youlai.boot.system.service.UserRoleService; import com.youlai.boot.system.service.UserRoleService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@ -27,6 +28,7 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.youlai.boot.common.event.UserRegisterEvent;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collections; import java.util.Collections;
@ -49,6 +51,7 @@ public class WxMaAuthServiceImpl implements WxMaAuthService {
private final UserSocialService userSocialService; private final UserSocialService userSocialService;
private final UserRoleService userRoleService; private final UserRoleService userRoleService;
private final RedisTemplate<String, Object> redisTemplate; private final RedisTemplate<String, Object> redisTemplate;
private final ApplicationEventPublisher eventPublisher;
/** /**
* 静默登录 * 静默登录
@ -192,6 +195,10 @@ public class WxMaAuthServiceImpl implements WxMaAuthService {
// 分配 GUEST 角色(角色ID=3) // 分配 GUEST 角色(角色ID=3)
userRoleService.saveUserRoles(user.getId(), Collections.singletonList(3L)); userRoleService.saveUserRoles(user.getId(), Collections.singletonList(3L));
// 发布用户注册成功事件,后续所有注册附加逻辑(送积分、优惠券等)都监听这个事件即可
eventPublisher.publishEvent(new UserRegisterEvent(user.getId(), "MINI_PROGRAM"));
log.info("新用户{}注册成功,事件已发布", user.getId());
return user; return user;
} }

28
src/main/java/com/youlai/boot/common/event/UserRegisterEvent.java

@ -0,0 +1,28 @@
package com.youlai.boot.common.event;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
/**
* 用户注册成功事件
* 所有注册成功后需要执行的附加逻辑送积分送优惠券发通知等都监听这个事件即可
*/
@Getter
public class UserRegisterEvent extends ApplicationEvent {
/**
* 新注册用户的ID
*/
private final Long userId;
/**
* 注册来源MINI_PROGRAM小程序 / H5 / ADMIN后台等
*/
private final String registerSource;
public UserRegisterEvent(Long userId, String registerSource) {
super(userId);
this.userId = userId;
this.registerSource = registerSource;
}
}

50
src/main/java/com/youlai/boot/mini/controller/PointController.java

@ -1,12 +1,14 @@
package com.youlai.boot.mini.controller; package com.youlai.boot.mini.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.PageResult; import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.framework.security.util.SecurityUtils;
import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.mini.model.query.MyPointRecordQuery;
import com.youlai.boot.mini.model.query.PointAccountQuery; import com.youlai.boot.mini.model.query.PointAccountQuery;
import com.youlai.boot.mini.model.vo.PointAccountVO; import com.youlai.boot.mini.model.vo.MyPointRecordVO;
import com.youlai.boot.mini.model.vo.MyPointVO;
import com.youlai.boot.mini.service.MiniPointAccountService; import com.youlai.boot.mini.service.MiniPointAccountService;
import com.youlai.boot.mini.service.MiniPointRecordService; import com.youlai.boot.mini.service.MiniPointRecordService;
import com.youlai.boot.mini.service.MiniPointRuleService; import com.youlai.boot.mini.service.MiniPointRuleService;
@ -14,7 +16,6 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springdoc.core.annotations.ParameterObject; import org.springdoc.core.annotations.ParameterObject;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@Tag(name = "用户端积分服务相关接口") @Tag(name = "用户端积分服务相关接口")
@ -27,23 +28,28 @@ public class PointController {
private final MiniPointRuleService pointRuleService; private final MiniPointRuleService pointRuleService;
private final MiniPointRecordService recordService; private final MiniPointRecordService recordService;
// @Operation(summary = "查询用户积分") @Operation(summary = "查询当前用户的积分账户信息")
// @GetMapping(value = "/getListPage") @GetMapping("/my")
// @PreAuthorize("@ss.hasPerm('mini:point:account:list')") public Result<MyPointVO> getMyPoint() {
// @Log(module = LogModuleEnum.POINT_ACCOUNT, value = ActionTypeEnum.LIST) Long userId = SecurityUtils.getUserId();
// public PageResult<PointAccountVO> page(@ParameterObject PointAccountQuery queryParams) { MyPointVO myPoint = pointAccountService.getUserPoint(userId);
// IPage<PointAccountVO> result = pointAccountService.page(queryParams); return Result.success(myPoint);
// return PageResult.success(result); }
// }
@Operation(summary = "分页查询当前用户的积分流水列表")
//查询用户积分 @GetMapping("/records")
//查询积分明细 public PageResult<MyPointRecordVO> getMyPointRecords(@ParameterObject MyPointRecordQuery query) {
//查询积分统计 Long userId = SecurityUtils.getUserId();
return PageResult.success(recordService.pageMyPointRecord(userId, query));
//用户注册赠送积分 }
//每日签到
//分享奖励 //事件监听 实现 用户注册赠送积分
//每日签到,加签到表,
//分享奖励,分享链接带上分享人ID,其他用户点击链接进入小程序后才给分享人发奖励
//AI生成图片扣费 //AI生成图片扣费
//AI生成视频扣费
//AI生成视频扣费
} }

77
src/main/java/com/youlai/boot/mini/listener/UserRegisterPointListener.java

@ -0,0 +1,77 @@
package com.youlai.boot.mini.listener;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.youlai.boot.common.event.UserRegisterEvent;
import com.youlai.boot.mini.model.entity.MiniPointRecord;
import com.youlai.boot.mini.model.entity.MiniPointRule;
import com.youlai.boot.mini.model.form.AdjustUserPointForm;
import com.youlai.boot.mini.service.MiniPointRecordService;
import com.youlai.boot.mini.service.MiniPointRuleService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* 用户注册成功监听器赠送新用户注册积分
* 完全独立和登录逻辑解耦后续加其他注册福利只需要加新的监听器即可
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class UserRegisterPointListener {
private final MiniPointRecordService pointRecordService;
private final MiniPointRuleService pointRuleService;
/**
* 异步监听用户注册成功事件赠送积分
* 异步执行不影响主线登录流程就算赠送积分失败也不会影响用户正常登录
*/
@Async
@Transactional(rollbackFor = Exception.class)
@EventListener(UserRegisterEvent.class)
public void handleUserRegisterGivePoint(UserRegisterEvent event) {
Long userId = event.getUserId();
String source = event.getRegisterSource();
log.info("监听到新用户注册成功,userId={}, 注册来源={}, 开始处理注册赠送积分逻辑", userId, source);
try {
// ================= 1. 幂等校验:避免重复赠送积分 =================
long count = pointRecordService.count(new LambdaQueryWrapper<MiniPointRecord>()
.eq(MiniPointRecord::getUserId, userId)
.eq(MiniPointRecord::getBizType, "REGISTER_GIFT")
.eq(MiniPointRecord::getDeleted, false));
if (count > 0) {
log.info("用户{}已经领取过注册积分,无需重复赠送", userId);
return;
}
// ================= 2. 查询注册积分规则,可配置无需改代码 =================
MiniPointRule registerRule = pointRuleService.getOne(new LambdaQueryWrapper<MiniPointRule>()
.eq(MiniPointRule::getRuleCode, "REGISTER_GIFT")
.eq(MiniPointRule::getStatus, false) // 0=启用状态
.last("LIMIT 1"));
if (registerRule == null || registerRule.getPoints() <= 0) {
log.info("注册赠送积分规则未配置/已关闭/赠送积分为0,不执行赠送");
return;
}
Integer giftPoint = registerRule.getPoints();
// ================= 3. 调用现有积分调整接口赠送积分 =================
AdjustUserPointForm adjustForm = new AdjustUserPointForm();
adjustForm.setUserId(userId);
adjustForm.setBizType("REGISTER_GIFT");
adjustForm.setChangeAmount(giftPoint);
// 调用之前写的调整积分接口,自动创建积分账户、生成流水
pointRecordService.adjustPoint(adjustForm);
log.info("新用户{}注册赠送{}积分成功", userId, giftPoint);
} catch (Exception e) {
log.error("新用户{}注册赠送积分失败,请手动排查补发", userId, e);
// 这里可以加告警通知,比如钉钉/企业微信推送,不影响用户登录
}
}
}

14
src/main/java/com/youlai/boot/mini/mapper/MiniPointRecordMapper.java

@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.mini.model.entity.MiniPointRecord; import com.youlai.boot.mini.model.entity.MiniPointRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.mini.model.query.MyPointRecordQuery;
import com.youlai.boot.mini.model.query.PointRecordQuery; import com.youlai.boot.mini.model.query.PointRecordQuery;
import com.youlai.boot.mini.model.vo.MyPointRecordVO;
import com.youlai.boot.mini.model.vo.PointRecordVO; import com.youlai.boot.mini.model.vo.PointRecordVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -17,11 +19,21 @@ import org.apache.ibatis.annotations.Param;
public interface MiniPointRecordMapper extends BaseMapper<MiniPointRecord> { public interface MiniPointRecordMapper extends BaseMapper<MiniPointRecord> {
/** /**
* 分页查询所有积分记录关联用户信息 * 分页查询所有积分记录关联用户信息管理端用
* @param page 分页参数 * @param page 分页参数
* @param query 查询条件 * @param query 查询条件
* @return 分页结果 * @return 分页结果
*/ */
IPage<PointRecordVO> pageAllRecord(Page<MiniPointRecord> page, @Param("query") PointRecordQuery query); IPage<PointRecordVO> pageAllRecord(Page<MiniPointRecord> page, @Param("query") PointRecordQuery query);
/**
* 分页查询指定用户的积分流水用户端专属
* @param page 分页参数
* @param userId 用户ID内部传参避免越权
* @param query 用户端查询条件
* @return 用户端积分流水分页
*/
IPage<MyPointRecordVO> pageMyPointRecord(Page<MiniPointRecord> page, @Param("userId") Long userId,
@Param("query") MyPointRecordQuery query);
} }

25
src/main/java/com/youlai/boot/mini/model/query/MyPointRecordQuery.java

@ -0,0 +1,25 @@
package com.youlai.boot.mini.model.query;
import com.youlai.boot.common.base.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 用户端专属积分流水查询参数完全独立不和管理端复用
*/
@Data
@Schema(description = "用户端积分流水查询参数")
public class MyPointRecordQuery extends BaseQuery {
@Schema(description = "业务类型筛选,比如SIGN_IN/AI_GENERATE等,不传查全部")
private String bizType;
@Schema(description = "查询开始时间,yyyy-MM-dd HH:mm:ss")
private Date startTime;
@Schema(description = "查询结束时间,yyyy-MM-dd HH:mm:ss")
private Date endTime;
}

31
src/main/java/com/youlai/boot/mini/model/vo/MyPointRecordVO.java

@ -0,0 +1,31 @@
package com.youlai.boot.mini.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* 用户端专属积分流水VO完全独立不和管理端复用无数据库自增主键
*/
@Data
@Schema(description = "用户端积分流水信息VO")
public class MyPointRecordVO {
@Schema(description = "流水唯一标识uuid,前端用这个作为唯一key,不用自增id")
private String uuid;
@Schema(description = "积分变化值,正数为获得积分,负数为扣减积分")
private Integer changeAmount;
@Schema(description = "本次变动后的积分余额")
private Integer balanceAfter;
@Schema(description = "业务类型,比如SIGN_IN=签到、AI_GENERATE=AI生成消耗、SYSTEM_ADJUST=系统调整")
private String bizType;
@Schema(description = "交易发生时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}

31
src/main/java/com/youlai/boot/mini/model/vo/MyPointVO.java

@ -0,0 +1,31 @@
package com.youlai.boot.mini.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.Date;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Schema(description = "用户端我的积分信息VO")
public class MyPointVO {
@Schema(description = "当前积分余额")
private Integer points;
// @Schema(description = "今日已获得积分,可扩展业务")
// private Integer todayEarned;
@Schema(description = "积分最后更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@Schema(description = "积分账户唯一标识uuid")
private String uuid;
}

3
src/main/java/com/youlai/boot/mini/service/MiniPointAccountService.java

@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.mini.model.entity.MiniPointAccount; import com.youlai.boot.mini.model.entity.MiniPointAccount;
import com.youlai.boot.mini.model.query.PointAccountQuery; import com.youlai.boot.mini.model.query.PointAccountQuery;
import com.youlai.boot.mini.model.vo.MyPointVO;
import com.youlai.boot.mini.model.vo.PointAccountVO; import com.youlai.boot.mini.model.vo.PointAccountVO;
public interface MiniPointAccountService extends IService<MiniPointAccount> { public interface MiniPointAccountService extends IService<MiniPointAccount> {
IPage<PointAccountVO> pageAccount(PointAccountQuery queryParams); IPage<PointAccountVO> pageAccount(PointAccountQuery queryParams);
MyPointVO getUserPoint(Long userId);
} }

10
src/main/java/com/youlai/boot/mini/service/MiniPointRecordService.java

@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.boot.mini.model.entity.MiniPointRecord; import com.youlai.boot.mini.model.entity.MiniPointRecord;
import com.youlai.boot.mini.model.form.AdjustUserPointForm; import com.youlai.boot.mini.model.form.AdjustUserPointForm;
import com.youlai.boot.mini.model.query.MyPointRecordQuery;
import com.youlai.boot.mini.model.query.PointRecordQuery; import com.youlai.boot.mini.model.query.PointRecordQuery;
import com.youlai.boot.mini.model.vo.MyPointRecordVO;
import com.youlai.boot.mini.model.vo.PointRecordVO; import com.youlai.boot.mini.model.vo.PointRecordVO;
public interface MiniPointRecordService extends IService<MiniPointRecord> { public interface MiniPointRecordService extends IService<MiniPointRecord> {
@ -22,4 +24,12 @@ public interface MiniPointRecordService extends IService<MiniPointRecord> {
*/ */
IPage<PointRecordVO> pageAllRecord(PointRecordQuery query); IPage<PointRecordVO> pageAllRecord(PointRecordQuery query);
/**
* 分页查询当前用户的积分流水用户端专属
* @param userId 当前登录用户ID内部传参避免越权
* @param query 用户端查询条件
* @return 用户端积分流水分页
*/
IPage<MyPointRecordVO> pageMyPointRecord(Long userId, MyPointRecordQuery query);
} }

20
src/main/java/com/youlai/boot/mini/service/impl/MiniPointAccountServiceImpl.java

@ -4,11 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.framework.security.util.SecurityUtils; import com.youlai.boot.common.exception.MsgException;
import com.youlai.boot.mini.converter.MiniPointAccountConverter; import com.youlai.boot.mini.converter.MiniPointAccountConverter;
import com.youlai.boot.mini.mapper.*; import com.youlai.boot.mini.mapper.*;
import com.youlai.boot.mini.model.entity.MiniPointAccount; import com.youlai.boot.mini.model.entity.MiniPointAccount;
import com.youlai.boot.mini.model.query.PointAccountQuery; import com.youlai.boot.mini.model.query.PointAccountQuery;
import com.youlai.boot.mini.model.vo.MyPointVO;
import com.youlai.boot.mini.model.vo.PointAccountVO; import com.youlai.boot.mini.model.vo.PointAccountVO;
import com.youlai.boot.mini.service.MiniPointAccountService; import com.youlai.boot.mini.service.MiniPointAccountService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -30,4 +31,21 @@ public class MiniPointAccountServiceImpl extends ServiceImpl<MiniPointAccountMap
return miniPointAccountMapper.pageAccount(page, queryParams); return miniPointAccountMapper.pageAccount(page, queryParams);
} }
@Override
public MyPointVO getUserPoint(Long userId) {
MiniPointAccount account = this.getOne(new LambdaQueryWrapper<MiniPointAccount>()
.eq(MiniPointAccount::getUserId, userId)
.eq(MiniPointAccount::getDeleted, false)
.last("LIMIT 1"));
if (account == null) {
throw new MsgException("用户积分账户不存在,请先完成注册激活");
}
MyPointVO myPoint = new MyPointVO();
myPoint.setPoints(account.getPoints());
myPoint.setUuid(account.getUuid());
myPoint.setUpdateTime(account.getUpdateTime());
return myPoint;
}
} }

10
src/main/java/com/youlai/boot/mini/service/impl/MiniPointRecordServiceImpl.java

@ -10,7 +10,9 @@ import com.youlai.boot.mini.mapper.MiniPointRecordMapper;
import com.youlai.boot.mini.model.entity.MiniPointAccount; import com.youlai.boot.mini.model.entity.MiniPointAccount;
import com.youlai.boot.mini.model.entity.MiniPointRecord; import com.youlai.boot.mini.model.entity.MiniPointRecord;
import com.youlai.boot.mini.model.form.AdjustUserPointForm; import com.youlai.boot.mini.model.form.AdjustUserPointForm;
import com.youlai.boot.mini.model.query.MyPointRecordQuery;
import com.youlai.boot.mini.model.query.PointRecordQuery; import com.youlai.boot.mini.model.query.PointRecordQuery;
import com.youlai.boot.mini.model.vo.MyPointRecordVO;
import com.youlai.boot.mini.model.vo.PointRecordVO; import com.youlai.boot.mini.model.vo.PointRecordVO;
import com.youlai.boot.mini.service.MiniPointAccountService; import com.youlai.boot.mini.service.MiniPointAccountService;
import com.youlai.boot.mini.service.MiniPointRecordService; import com.youlai.boot.mini.service.MiniPointRecordService;
@ -78,7 +80,13 @@ public class MiniPointRecordServiceImpl extends ServiceImpl<MiniPointRecordMappe
@Override @Override
public IPage<PointRecordVO> pageAllRecord(PointRecordQuery query) { public IPage<PointRecordVO> pageAllRecord(PointRecordQuery query) {
Page<MiniPointRecord> page = new Page<>(query.getPageNum(), query.getPageSize()); Page<MiniPointRecord> page = new Page<>(query.getPageNum(), query.getPageSize());
// 调用mapper关联查询,直接返回VO分页结果
return baseMapper.pageAllRecord(page, query); return baseMapper.pageAllRecord(page, query);
} }
@Override
public IPage<MyPointRecordVO> pageMyPointRecord(Long userId, MyPointRecordQuery query) {
Page<MiniPointRecord> page = new Page<>(query.getPageNum(), query.getPageSize());
return baseMapper.pageMyPointRecord(page, userId, query);
}
} }

36
src/main/resources/mapper/mini/MiniPointRecordMapper.xml

@ -5,7 +5,7 @@
<mapper namespace="com.youlai.boot.mini.mapper.MiniPointRecordMapper"> <mapper namespace="com.youlai.boot.mini.mapper.MiniPointRecordMapper">
<!-- 积分记录VO映射 --> <!-- 积分记录VO映射(管理端用) -->
<resultMap id="PointRecordVOMap" type="com.youlai.boot.mini.model.vo.PointRecordVO"> <resultMap id="PointRecordVOMap" type="com.youlai.boot.mini.model.vo.PointRecordVO">
<id property="id" column="id"/> <id property="id" column="id"/>
<result property="uuid" column="uuid"/> <result property="uuid" column="uuid"/>
@ -15,6 +15,7 @@
<result property="changeAmount" column="change_amount"/> <result property="changeAmount" column="change_amount"/>
<result property="balanceAfter" column="balance_after"/> <result property="balanceAfter" column="balance_after"/>
<result property="bizType" column="biz_type"/> <result property="bizType" column="biz_type"/>
<result property="remark" column="remark"/>
<result property="createBy" column="create_by"/> <result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/> <result property="createTime" column="create_time"/>
</resultMap> </resultMap>
@ -57,4 +58,37 @@
r.create_time DESC r.create_time DESC
</select> </select>
<resultMap id="MyPointRecordVOMap" type="com.youlai.boot.mini.model.vo.MyPointRecordVO">
<result property="uuid" column="uuid"/>
<result property="changeAmount" column="change_amount"/>
<result property="balanceAfter" column="balance_after"/>
<result property="bizType" column="biz_type"/>
<result property="createTime" column="create_time"/>
</resultMap>
<select id="pageMyPointRecord" resultMap="MyPointRecordVOMap">
SELECT
uuid,
change_amount,
balance_after,
biz_type,
create_time
FROM
mini_point_record
WHERE
is_deleted = 0
AND user_id = #{userId}
<if test="query.bizType != null and query.bizType != ''">
AND biz_type = #{query.bizType}
</if>
<if test="query.startTime != null">
AND create_time &gt;= #{query.startTime}
</if>
<if test="query.endTime != null">
AND create_time &lt;= #{query.endTime}
</if>
ORDER BY
create_time DESC
</select>
</mapper> </mapper>

Loading…
Cancel
Save