增加钱包日志记录

This commit is contained in:
TinyAnts 2023-03-22 17:43:48 +08:00
parent 2f854d5a94
commit b0bb903643
5 changed files with 248 additions and 7 deletions

View File

@ -0,0 +1,55 @@
package com.mdd.common.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel("账户变动实体")
public class LogMoney {
@ApiModelProperty("主键")
private Integer id;
@ApiModelProperty("流水号")
private String sn;
@ApiModelProperty("用户ID")
private Integer userId;
@ApiModelProperty("关联ID")
private Integer sourceId;
@ApiModelProperty("关联单号")
private String sourceSn;
@ApiModelProperty("变动类型")
private Integer changeType;
@ApiModelProperty("变动数量")
private BigDecimal changeAmount;
@ApiModelProperty("变动后数量")
private BigDecimal leftAmount;
@ApiModelProperty("变动类型: [1=增加, 2=减少]")
private Integer action;
@ApiModelProperty("备注信息")
private String remark;
@ApiModelProperty("预留字段")
private String extra;
@ApiModelProperty("创建时间")
private Long createTime;
@ApiModelProperty("更新时间")
private Long updateTime;
@ApiModelProperty("删除时间")
private Long deleteTime;
}

View File

@ -0,0 +1,43 @@
package com.mdd.common.enums;
public enum LogMoneyEnum {
/**
* 用户余额类型
*/
UM_INC_ADMIN(1001, "平台增加余额"),
UM_DEC_ADMIN(1002, "平台减少余额"),
UM_INC_RECHARGE(1003, "充值余额增加"),
UM_DEC_RECHARGE(1004, "充值余额退回");
/**
* 构造方法
*/
private final int code;
private final String msg;
LogMoneyEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
/**
* 获取状态码
*
* @author fzr
* @return Long
*/
public int getCode() {
return this.code;
}
/**
* 获取提示
*
* @author fzr
* @return String
*/
public String getMsg() {
return this.msg;
}
}

View File

@ -0,0 +1,125 @@
package com.mdd.common.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mdd.common.core.basics.IBaseMapper;
import com.mdd.common.entity.LogMoney;
import com.mdd.common.entity.user.User;
import com.mdd.common.mapper.user.UserMapper;
import com.mdd.common.util.SpringUtils;
import com.mdd.common.util.StringUtils;
import com.mdd.common.util.TimeUtils;
import com.mdd.common.util.ToolUtils;
import org.apache.ibatis.annotations.Mapper;
import java.math.BigDecimal;
/**
* 账户变动Mapper
*/
@Mapper
public interface LogMoneyMapper extends IBaseMapper<LogMoney> {
/**
* 增加
*
* @param userId 用户ID
* @param changeType 变动类型
* @param changeAmount 变动金额
* @param sourceId 来源ID
* @param sourceSn 来源订单
* @param remark 备注信息
* @param extra 预留字段
*/
default void add(Integer userId, Integer changeType, BigDecimal changeAmount,
Integer sourceId, String sourceSn, String remark, String extra) {
for (int i=0; i<=0; i++) {
UserMapper userMapper = SpringUtils.getBean(UserMapper.class);
User user = userMapper.selectById(userId);
if (StringUtils.isNull(user)) {
break;
}
BigDecimal leftAmount = user.getMoney().add(changeAmount);
LogMoney logMoney = new LogMoney();
logMoney.setSn(this.randMakeOrderSn());
logMoney.setUserId(userId);
logMoney.setSourceId(sourceId);
logMoney.setSourceSn(sourceSn);
logMoney.setChangeType(changeType);
logMoney.setChangeAmount(changeAmount);
logMoney.setLeftAmount(leftAmount);
logMoney.setAction(1);
logMoney.setRemark(remark);
logMoney.setExtra(extra);
logMoney.setCreateTime(System.currentTimeMillis() / 1000);
logMoney.setUpdateTime(System.currentTimeMillis() / 1000);
this.insert(logMoney);
}
}
/**
* 减少
*
* @param userId 用户ID
* @param changeType 变动类型
* @param changeAmount 变动金额
* @param sourceId 来源ID
* @param sourceSn 来源订单
* @param remark 备注信息
* @param extra 预留字段
*/
default void dec(Integer userId, Integer changeType, BigDecimal changeAmount,
Integer sourceId, String sourceSn, String remark, String extra) {
for (int i=0; i<=0; i++) {
UserMapper userMapper = SpringUtils.getBean(UserMapper.class);
User user = userMapper.selectById(userId);
if (StringUtils.isNull(user)) {
break;
}
BigDecimal leftAmount = user.getMoney().subtract(changeAmount);
LogMoney logMoney = new LogMoney();
logMoney.setSn(this.randMakeOrderSn());
logMoney.setUserId(userId);
logMoney.setSourceId(sourceId);
logMoney.setSourceSn(sourceSn);
logMoney.setChangeType(changeType);
logMoney.setChangeAmount(changeAmount);
logMoney.setLeftAmount(leftAmount);
logMoney.setAction(2);
logMoney.setRemark(remark);
logMoney.setExtra(extra);
logMoney.setCreateTime(System.currentTimeMillis() / 1000);
logMoney.setUpdateTime(System.currentTimeMillis() / 1000);
this.insert(logMoney);
}
}
/**
* 生成唯一流水号
*
* @author fzr
* @return String
*/
default String randMakeOrderSn() {
String date = TimeUtils.timestampToDate(System.currentTimeMillis()/1000, "yyyyMMddHHmmss");
String sn;
while (true) {
sn = date + ToolUtils.randomInt(12);
LogMoney snModel = this.selectOne(
new QueryWrapper<LogMoney>()
.select("id")
.eq("sn", sn)
.last("limit 1"));
if (snModel == null) {
break;
}
}
return sn;
}
}

View File

@ -11,7 +11,9 @@ import com.mdd.common.entity.setting.DevPayWay;
import com.mdd.common.entity.user.User;
import com.mdd.common.entity.user.UserAuth;
import com.mdd.common.enums.ClientEnum;
import com.mdd.common.enums.LogMoneyEnum;
import com.mdd.common.enums.PaymentEnum;
import com.mdd.common.mapper.LogMoneyMapper;
import com.mdd.common.mapper.RechargeOrderMapper;
import com.mdd.common.mapper.setting.DevPayConfigMapper;
import com.mdd.common.mapper.setting.DevPayWayMapper;
@ -24,6 +26,7 @@ import com.mdd.front.validate.PaymentValidate;
import com.mdd.front.vo.PayWayListedVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
@ -41,15 +44,18 @@ public class PayServiceImpl implements IPayService {
@Resource
UserAuthMapper userAuthMapper;
@Resource
RechargeOrderMapper rechargeOrderMapper;
@Resource
DevPayWayMapper devPayWayMapper;
@Resource
DevPayConfigMapper devPayConfigMapper;
@Resource
RechargeOrderMapper rechargeOrderMapper;
@Resource
LogMoneyMapper logMoneyMapper;
/**
* 支付方式
*
@ -163,6 +169,7 @@ public class PayServiceImpl implements IPayService {
* @param transactionId 流水号
*/
@Override
@Transactional
public void handlePaidNotify(String attach, String outTradeNo, String transactionId) {
switch (attach) {
case "order":
@ -207,6 +214,13 @@ public class PayServiceImpl implements IPayService {
user.setMoney(rechargeOrder.getOrderAmount());
user.setUpdateTime(System.currentTimeMillis() / 1000);
userMapper.update(user, new QueryWrapper<User>().eq("id", rechargeOrder.getUserId()));
logMoneyMapper.add(user.getId(),
LogMoneyEnum.UM_INC_ADMIN.getCode(),
rechargeOrder.getOrderAmount(),
rechargeOrder.getId(),
rechargeOrder.getOrderSn(),
"用户充值余额", null);
}
}

View File

@ -5,18 +5,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.RechargeOrder;
import com.mdd.common.entity.article.Article;
import com.mdd.common.enums.PaymentEnum;
import com.mdd.common.mapper.RechargeOrderMapper;
import com.mdd.common.util.TimeUtils;
import com.mdd.common.util.ToolUtils;
import com.mdd.common.util.UrlUtils;
import com.mdd.front.service.IRechargeService;
import com.mdd.front.validate.RechargeValidate;
import com.mdd.front.validate.common.PageValidate;
import com.mdd.front.vo.RechargeRecordVo;
import com.mdd.front.vo.article.ArticleListedVo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -34,6 +30,14 @@ public class RechargeServiceImpl implements IRechargeService {
@Resource
RechargeOrderMapper rechargeOrderMapper;
/**
* 充值记录
*
* @author fzr
* @param userId 用户ID
* @param pageValidate 分页参数
* @return PageResult<RechargeRecordVo>
*/
@Override
public PageResult<RechargeRecordVo> record(Integer userId, PageValidate pageValidate) {
Integer pageNo = pageValidate.getPageNo();