From c224ad568e245af7a8d33803f72382cef697db17 Mon Sep 17 00:00:00 2001 From: Chopper Date: Wed, 1 Dec 2021 09:58:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=A7=84=E8=8C=83=E4=BD=99?= =?UTF-8?q?=E9=A2=9D=E7=9B=B8=E5=85=B3=E6=A8=A1=E5=9E=8B=E4=BC=A0=E9=80=92?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DistributionCashServiceImpl.java | 3 +- .../kit/plugin/wallet/WalletPlugin.java | 31 ++++++----- .../modules/wallet/entity/dos/WalletLog.java | 32 ++++++++--- .../entity/dto/MemberWalletUpdateDTO.java | 30 ++++++++++ .../wallet/service/MemberWalletService.java | 44 +++++---------- .../serviceimpl/MemberWalletServiceImpl.java | 55 ++++++++++--------- .../MemberWithdrawApplyServiceImpl.java | 7 ++- .../serviceimpl/RechargeServiceImpl.java | 3 +- 8 files changed, 122 insertions(+), 83 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWalletUpdateDTO.java diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionCashServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionCashServiceImpl.java index 76c48943..5cd142cc 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionCashServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionCashServiceImpl.java @@ -2,6 +2,7 @@ package cn.lili.modules.distribution.serviceimpl; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; +import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.MemberTagsEnum; @@ -130,7 +131,7 @@ public class DistributionCashServiceImpl extends ServiceImpl nativePay(HttpServletRequest request, PayParam payParam) { - if(payParam.getOrderType().equals(CashierEnum.RECHARGE.name())){ + if (payParam.getOrderType().equals(CashierEnum.RECHARGE.name())) { throw new ServiceException(ResultCode.CAN_NOT_RECHARGE_WALLET); } savePaymentLog(payParam); @@ -95,14 +96,14 @@ public class WalletPlugin implements Payment { public void cancel(RefundLog refundLog) { try { - memberWalletService.increase(refundLog.getTotalAmount(), + memberWalletService.increase(new MemberWalletUpdateDTO(refundLog.getTotalAmount(), refundLog.getMemberId(), "取消[" + refundLog.getOrderSn() + "]订单,退还金额[" + refundLog.getTotalAmount() + "]", - DepositServiceTypeEnum.WALLET_REFUND.name()); + DepositServiceTypeEnum.WALLET_REFUND.name())); refundLog.setIsRefund(true); refundLogService.save(refundLog); } catch (Exception e) { - log.error("订单取消错误",e); + log.error("订单取消错误", e); } } @@ -120,13 +121,14 @@ public class WalletPlugin implements Payment { @Override public void refund(RefundLog refundLog) { try { - memberWalletService.increase(refundLog.getTotalAmount(), + memberWalletService.increase(new MemberWalletUpdateDTO(refundLog.getTotalAmount(), refundLog.getMemberId(), - "售后[" + refundLog.getAfterSaleNo() + "]审批,退还金额[" + refundLog.getTotalAmount() + "]", DepositServiceTypeEnum.WALLET_REFUND.name()); + "售后[" + refundLog.getAfterSaleNo() + "]审批,退还金额[" + refundLog.getTotalAmount() + "]", + DepositServiceTypeEnum.WALLET_REFUND.name())); refundLog.setIsRefund(true); refundLogService.save(refundLog); } catch (Exception e) { - log.error("退款失败",e); + log.error("退款失败", e); } } @@ -143,11 +145,12 @@ public class WalletPlugin implements Payment { if (UserContext.getCurrentUser() == null) { throw new ServiceException(ResultCode.USER_NOT_LOGIN); } - boolean result = memberWalletService.reduce( - cashierParam.getPrice(), - UserContext.getCurrentUser().getId(), - "订单[" + cashierParam.getOrderSns() + "]支付金额[" + cashierParam.getPrice() + "]", - DepositServiceTypeEnum.WALLET_PAY.name() + boolean result = memberWalletService.reduce(new MemberWalletUpdateDTO( + cashierParam.getPrice(), + UserContext.getCurrentUser().getId(), + "订单[" + cashierParam.getOrderSns() + "]支付金额[" + cashierParam.getPrice() + "]", + DepositServiceTypeEnum.WALLET_PAY.name() + ) ); if (result) { try { @@ -162,11 +165,11 @@ public class WalletPlugin implements Payment { log.info("支付回调通知:余额支付:{}", payParam); } catch (ServiceException e) { //业务异常,则支付手动回滚 - memberWalletService.increase( + memberWalletService.increase(new MemberWalletUpdateDTO( cashierParam.getPrice(), UserContext.getCurrentUser().getId(), "订单[" + cashierParam.getOrderSns() + "]支付异常,余额返还[" + cashierParam.getPrice() + "]", - DepositServiceTypeEnum.WALLET_REFUND.name() + DepositServiceTypeEnum.WALLET_REFUND.name()) ); throw e; } diff --git a/framework/src/main/java/cn/lili/modules/wallet/entity/dos/WalletLog.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/WalletLog.java index 9f856ed0..60185153 100644 --- a/framework/src/main/java/cn/lili/modules/wallet/entity/dos/WalletLog.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/WalletLog.java @@ -1,5 +1,6 @@ package cn.lili.modules.wallet.entity.dos; +import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum; import cn.lili.mybatis.BaseIdEntity; import com.baomidou.mybatisplus.annotation.FieldFill; @@ -64,17 +65,30 @@ public class WalletLog extends BaseIdEntity { /** * 构建新的预存款日志对象 * - * @param memberId 会员id - * @param memberName 会员名称 - * @param money 金额 - * @param detail 备注 + * @param memberName 会员名称 + * @param memberWalletUpdateDTO 变动模型 */ - public WalletLog(String memberId, String memberName, Double money, String detail, String serviceType) { - this.setMemberId(memberId); + public WalletLog(String memberName, MemberWalletUpdateDTO memberWalletUpdateDTO) { + this.setMemberId(memberWalletUpdateDTO.getMemberId()); this.setMemberName(memberName); - this.setMoney(money); - this.setDetail(detail); - this.setServiceType(serviceType); + this.setMoney(memberWalletUpdateDTO.getMoney()); + this.setDetail(memberWalletUpdateDTO.getDetail()); + this.setServiceType(memberWalletUpdateDTO.getServiceType()); + } + + /** + * 构建新的预存款日志对象 + * + * @param memberName 会员名称 + * @param memberWalletUpdateDTO 变动模型 + * @param isReduce 是否是消费 + */ + public WalletLog(String memberName, MemberWalletUpdateDTO memberWalletUpdateDTO, boolean isReduce) { + this.setMemberId(memberWalletUpdateDTO.getMemberId()); + this.setMemberName(memberName); + this.setMoney(isReduce ? -memberWalletUpdateDTO.getMoney() : memberWalletUpdateDTO.getMoney()); + this.setDetail(memberWalletUpdateDTO.getDetail()); + this.setServiceType(memberWalletUpdateDTO.getServiceType()); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWalletUpdateDTO.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWalletUpdateDTO.java new file mode 100644 index 00000000..70d18c86 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWalletUpdateDTO.java @@ -0,0 +1,30 @@ +package cn.lili.modules.wallet.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 会员余额变动模型 + * + * @author Chopper + * @version v1.0 + * 2021-12-01 09:35 + */ +@Data +@AllArgsConstructor +public class MemberWalletUpdateDTO { + + @ApiModelProperty(value = "变动金额") + private Double money; + @ApiModelProperty(value = "变动会员id") + private String memberId; + @ApiModelProperty(value = "日志详情") + private String detail; + + /** + * @see cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum + */ + @ApiModelProperty(value = "变动业务原因") + private String serviceType; +} diff --git a/framework/src/main/java/cn/lili/modules/wallet/service/MemberWalletService.java b/framework/src/main/java/cn/lili/modules/wallet/service/MemberWalletService.java index a11cde3e..99334fd3 100644 --- a/framework/src/main/java/cn/lili/modules/wallet/service/MemberWalletService.java +++ b/framework/src/main/java/cn/lili/modules/wallet/service/MemberWalletService.java @@ -4,6 +4,7 @@ package cn.lili.modules.wallet.service; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.wallet.entity.dos.MemberWallet; import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; import cn.lili.modules.wallet.entity.vo.MemberWalletVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -26,57 +27,42 @@ public interface MemberWalletService extends IService { /** * 增加用户预存款余额 * - * @param money 金额 - * @param memberId 会员id - * @param serviceType 业务类型 @see DepositServiceTypeEnum - * @param detail 操作描述 - * @return 返回增加结果 true:增加成功 false:增加失败 + * @param memberWalletUpdateDTO 变动模型 + * @return 返回增加结果 true:成功 false:失败 */ - Boolean increase(Double money, String memberId, String detail, String serviceType); + Boolean increase(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 从冻结金额到余额 * - * @param money 金额 - * @param memberId 会员id - * @param serviceType 业务类型 @see DepositServiceTypeEnum - * @param detail 操作描述 - * @return 返回增加结果 true:增加成功 false:增加失败 + * @param memberWalletUpdateDTO 变动模型 + * @return 返回冻结结果 true:成功 false:失败 */ - Boolean increaseWithdrawal(Double money, String memberId, String detail, String serviceType); + Boolean increaseWithdrawal(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 扣减用户预存款余额 * - * @param money 金额 - * @param memberId 会员id - * @param detail 操作描述 - * @param serviceType 业务类型 @see DepositServiceTypeEnum - * @return 操作状态 + * @param memberWalletUpdateDTO 变动模型 + * @return 操作状态 true:成功 false:失败 */ - Boolean reduce(Double money, String memberId, String detail, String serviceType); + Boolean reduce(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 提现扣减余额到冻结金额 * - * @param money 金额 - * @param memberId 会员id - * @param detail 操作描述 - * @param serviceType 业务类型 @see DepositServiceTypeEnum - * @return 操作状态 + * @param memberWalletUpdateDTO 变动模型 + * @return 操作状态 true:成功 false:失败 */ - Boolean reduceWithdrawal(Double money, String memberId, String detail, String serviceType); + Boolean reduceWithdrawal(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 提现扣减冻结金额 * - * @param money 金额 - * @param memberId 会员id - * @param detail 操作描述 - * @param serviceType 类型 + * @param memberWalletUpdateDTO 变动模型 * @return 操作状态 */ - Boolean reduceFrozen(Double money, String memberId, String detail, String serviceType); + Boolean reduceFrozen(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 设置支付密码 diff --git a/framework/src/main/java/cn/lili/modules/wallet/serviceimpl/MemberWalletServiceImpl.java b/framework/src/main/java/cn/lili/modules/wallet/serviceimpl/MemberWalletServiceImpl.java index 8c9ef0dc..13bbc2fa 100644 --- a/framework/src/main/java/cn/lili/modules/wallet/serviceimpl/MemberWalletServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/wallet/serviceimpl/MemberWalletServiceImpl.java @@ -12,6 +12,7 @@ import cn.lili.common.utils.StringUtils; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.wallet.entity.dos.MemberWallet; import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage; import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum; import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; @@ -94,82 +95,82 @@ public class MemberWalletServiceImpl extends ServiceImpl CurrencyUtil.sub(memberWallet.getMemberWallet(), money)) { + if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())) { return false; } - memberWallet.setMemberWallet(CurrencyUtil.sub(memberWallet.getMemberWallet(), money)); + memberWallet.setMemberWallet(CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())); //保存记录 this.updateById(memberWallet); //新增预存款日志 - WalletLog walletLog = new WalletLog(memberWallet.getMemberId(), memberWallet.getMemberName(), -money, detail, serviceType); + WalletLog walletLog = new WalletLog(memberWallet.getMemberName(), memberWalletUpdateDTO, true); walletLogService.save(walletLog); return true; } @Override - public Boolean reduceWithdrawal(Double money, String memberId, String detail, String serviceType) { + public Boolean reduceWithdrawal(MemberWalletUpdateDTO memberWalletUpdateDTO) { //检测会员预存款讯息是否存在,如果不存在则新建 - MemberWallet memberWallet = this.checkMemberWallet(memberId); + MemberWallet memberWallet = this.checkMemberWallet(memberWalletUpdateDTO.getMemberId()); //减少预存款,需要校验 如果不够扣减预存款 - if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), money)) { + if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())) { throw new ServiceException(ResultCode.WALLET_WITHDRAWAL_INSUFFICIENT); } - memberWallet.setMemberWallet(CurrencyUtil.sub(memberWallet.getMemberWallet(), money)); - memberWallet.setMemberFrozenWallet(CurrencyUtil.add(memberWallet.getMemberFrozenWallet(), money)); + memberWallet.setMemberWallet(CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())); + memberWallet.setMemberFrozenWallet(CurrencyUtil.add(memberWallet.getMemberFrozenWallet(), memberWalletUpdateDTO.getMoney())); //修改余额 this.updateById(memberWallet); //新增预存款日志 - WalletLog walletLog = new WalletLog(memberWallet.getMemberId(), memberWallet.getMemberName(), -money, detail, serviceType); + WalletLog walletLog = new WalletLog(memberWallet.getMemberName(), memberWalletUpdateDTO, true); walletLogService.save(walletLog); return true; } @Override - public Boolean reduceFrozen(Double money, String memberId, String detail, String serviceType) { + public Boolean reduceFrozen(MemberWalletUpdateDTO memberWalletUpdateDTO) { //检测会员预存款讯息是否存在,如果不存在则新建 - MemberWallet memberWallet = this.checkMemberWallet(memberId); + MemberWallet memberWallet = this.checkMemberWallet(memberWalletUpdateDTO.getMemberId()); //校验此金额是否超过冻结金额 - if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), money)) { + if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())) { throw new ServiceException(ResultCode.WALLET_WITHDRAWAL_INSUFFICIENT); } - memberWallet.setMemberFrozenWallet(CurrencyUtil.sub(memberWallet.getMemberFrozenWallet(), money)); + memberWallet.setMemberFrozenWallet(CurrencyUtil.sub(memberWallet.getMemberFrozenWallet(), memberWalletUpdateDTO.getMoney())); this.updateById(memberWallet); //新增预存款日志 - WalletLog walletLog = new WalletLog(memberWallet.getMemberId(), memberWallet.getMemberName(), -money, "提现金额已冻结,审核通过提现成功", serviceType); + WalletLog walletLog = new WalletLog(memberWallet.getMemberName(), memberWalletUpdateDTO, true); walletLogService.save(walletLog); return true; } @@ -273,12 +274,12 @@ public class MemberWalletServiceImpl extends ServiceImpl i //执行保存操作 this.updateById(recharge); //增加预存款余额 - memberWalletService.increase(recharge.getRechargeMoney(), recharge.getMemberId(), "会员余额充值,充值单号为:" + recharge.getRechargeSn(), DepositServiceTypeEnum.WALLET_RECHARGE.name()); + memberWalletService.increase(new MemberWalletUpdateDTO(recharge.getRechargeMoney(), recharge.getMemberId(), "会员余额充值,充值单号为:" + recharge.getRechargeSn(), DepositServiceTypeEnum.WALLET_RECHARGE.name())); } }