diff --git a/server/like-common/src/main/java/com/mdd/common/entity/LogMoney.java b/server/like-common/src/main/java/com/mdd/common/entity/LogMoney.java new file mode 100644 index 00000000..549e5847 --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/entity/LogMoney.java @@ -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; + +} diff --git a/server/like-common/src/main/java/com/mdd/common/enums/LogMoneyEnum.java b/server/like-common/src/main/java/com/mdd/common/enums/LogMoneyEnum.java new file mode 100644 index 00000000..aa1b2f10 --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/enums/LogMoneyEnum.java @@ -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; + } + +} diff --git a/server/like-common/src/main/java/com/mdd/common/mapper/LogMoneyMapper.java b/server/like-common/src/main/java/com/mdd/common/mapper/LogMoneyMapper.java new file mode 100644 index 00000000..1e7ab080 --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/mapper/LogMoneyMapper.java @@ -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 { + + /** + * 增加 + * + * @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() + .select("id") + .eq("sn", sn) + .last("limit 1")); + if (snModel == null) { + break; + } + } + return sn; + } + +} diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/PayServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/PayServiceImpl.java index 8c997744..a63c27ab 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/PayServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/PayServiceImpl.java @@ -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().eq("id", rechargeOrder.getUserId())); + + logMoneyMapper.add(user.getId(), + LogMoneyEnum.UM_INC_ADMIN.getCode(), + rechargeOrder.getOrderAmount(), + rechargeOrder.getId(), + rechargeOrder.getOrderSn(), + "用户充值余额", null); } } diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/RechargeServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/RechargeServiceImpl.java index c5bde077..fc3f9896 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/RechargeServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/RechargeServiceImpl.java @@ -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 + */ @Override public PageResult record(Integer userId, PageValidate pageValidate) { Integer pageNo = pageValidate.getPageNo();