From 74941f7243b783cdf9dcad6b6a9ad75df0e8e5c9 Mon Sep 17 00:00:00 2001 From: Chopper711 Date: Sat, 6 May 2023 16:32:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=BC=E5=AE=B9=E6=8F=90=E7=8E=B0?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E5=9C=BA=E6=99=AF=EF=BC=8C=E5=AF=B9=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=B6=88=E6=81=AF=E6=8C=81=E4=B9=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB/version4.2.5toMASTER.sql | 1 + .../lili/event/impl/MemberWalletExecute.java | 10 +++++--- .../modules/payment/kit/CashierSupport.java | 3 ++- .../cn/lili/modules/payment/kit/Payment.java | 3 ++- .../kit/plugin/alipay/AliPayPlugin.java | 15 +++++++----- .../kit/plugin/wechat/WechatPlugin.java | 22 ++++++++++------- .../entity/dos/MemberWithdrawApply.java | 6 +++++ .../wallet/entity/dto/TransferResultDTO.java | 24 +++++++++++++++++++ .../wallet/service/MemberWalletService.java | 4 +--- .../serviceimpl/MemberWalletServiceImpl.java | 16 ++++++------- 10 files changed, 72 insertions(+), 32 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/wallet/entity/dto/TransferResultDTO.java diff --git a/DB/version4.2.5toMASTER.sql b/DB/version4.2.5toMASTER.sql index 2225ac59f..8170a2c5b 100644 --- a/DB/version4.2.5toMASTER.sql +++ b/DB/version4.2.5toMASTER.sql @@ -88,3 +88,4 @@ ALTER TABLE li_foot_print ADD `store_id` varchar(255) DEFAULT NULL COMMENT '店 */ ALTER TABLE li_member_withdraw_apply ADD `real_name` varchar(255) DEFAULT NULL; ALTER TABLE li_member_withdraw_apply ADD `connect_number` varchar(255) DEFAULT NULL; +ALTER TABLE li_member_withdraw_apply ADD `error_message` text DEFAULT NULL; diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java index b2fbf5b80..b836b5914 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java @@ -31,15 +31,19 @@ public class MemberWalletExecute implements MemberWithdrawalEvent { case SUCCESS: //提现成功扣减冻结金额 memberWalletService.reduceFrozen( - new MemberWalletUpdateDTO(memberWithdrawalMessage.getPrice(), memberWithdrawalMessage.getMemberId(), "提现成功,余额提现", DepositServiceTypeEnum.WALLET_WITHDRAWAL.name())); + new MemberWalletUpdateDTO(memberWithdrawalMessage.getPrice(), memberWithdrawalMessage.getMemberId(), "提现成功,余额提现", + DepositServiceTypeEnum.WALLET_WITHDRAWAL.name())); break; case ERROR: //需要从冻结金额扣减到余额 - memberWalletService.increaseWithdrawal(new MemberWalletUpdateDTO(memberWithdrawalMessage.getPrice(), memberWithdrawalMessage.getMemberId(), "提现失败,提现金额解冻到余额", DepositServiceTypeEnum.WALLET_WITHDRAWAL.name())); + memberWalletService.increaseWithdrawal(new MemberWalletUpdateDTO(memberWithdrawalMessage.getPrice(), + memberWithdrawalMessage.getMemberId(), "第三方提现失败,提现金额解冻到余额", DepositServiceTypeEnum.WALLET_WITHDRAWAL.name())); break; case FAIL_AUDITING: //需要从冻结金额扣减到余额 - memberWalletService.increaseWithdrawal(new MemberWalletUpdateDTO(memberWithdrawalMessage.getPrice(), memberWithdrawalMessage.getMemberId(), "审核拒绝,提现金额解冻到余额", DepositServiceTypeEnum.WALLET_WITHDRAWAL.name())); + memberWalletService.increaseWithdrawal(new MemberWalletUpdateDTO(memberWithdrawalMessage.getPrice(), + memberWithdrawalMessage.getMemberId(), "审核拒绝,提现金额解冻到余额", DepositServiceTypeEnum.WALLET_WITHDRAWAL.name())); + break; default: break; } diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/CashierSupport.java b/framework/src/main/java/cn/lili/modules/payment/kit/CashierSupport.java index e9dca0f89..77f6454a4 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/CashierSupport.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/CashierSupport.java @@ -19,6 +19,7 @@ import cn.lili.modules.system.entity.dto.payment.dto.PaymentSupportItem; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.dto.TransferResultDTO; import cn.lili.modules.wallet.service.MemberWalletService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -149,7 +150,7 @@ public class CashierSupport { * @param paymentMethodEnum 支付渠道 * @param memberWithdrawApply 用户提现申请 */ - public boolean transfer(PaymentMethodEnum paymentMethodEnum, MemberWithdrawApply memberWithdrawApply) { + public TransferResultDTO transfer(PaymentMethodEnum paymentMethodEnum, MemberWithdrawApply memberWithdrawApply) { Payment payment = (Payment) SpringContextUtil.getBean(paymentMethodEnum.getPlugin()); return payment.transfer(memberWithdrawApply); } diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/Payment.java b/framework/src/main/java/cn/lili/modules/payment/kit/Payment.java index bb96c3e9e..c0b92fa70 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/Payment.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/Payment.java @@ -7,6 +7,7 @@ import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.payment.kit.dto.PayParam; import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.dto.TransferResultDTO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -114,7 +115,7 @@ public interface Payment { /** * 提现 */ - default boolean transfer(MemberWithdrawApply memberWithdrawApply) { + default TransferResultDTO transfer(MemberWithdrawApply memberWithdrawApply) { throw new ServiceException(ResultCode.PAY_ERROR); } diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/plugin/alipay/AliPayPlugin.java b/framework/src/main/java/cn/lili/modules/payment/kit/plugin/alipay/AliPayPlugin.java index f40f277f1..1688f5192 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/plugin/alipay/AliPayPlugin.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/plugin/alipay/AliPayPlugin.java @@ -27,6 +27,7 @@ import cn.lili.modules.system.entity.dto.payment.AlipayPaymentSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.dto.TransferResultDTO; import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; import com.alipay.api.domain.*; @@ -170,7 +171,8 @@ public class AliPayPlugin implements Payment { payModel.setTimeoutExpress("3m"); payModel.setOutTradeNo(outTradeNo); log.info("支付宝扫码:{}", payModel); - String resultStr = AliPayRequest.tradePrecreatePayToResponse(payModel, notifyUrl(apiProperties.getBuyer(), PaymentMethodEnum.ALIPAY)).getBody(); + String resultStr = + AliPayRequest.tradePrecreatePayToResponse(payModel, notifyUrl(apiProperties.getBuyer(), PaymentMethodEnum.ALIPAY)).getBody(); log.info("支付宝扫码交互返回:{}", resultStr); JSONObject jsonObject = JSONObject.parseObject(resultStr); @@ -202,7 +204,8 @@ public class AliPayPlugin implements Payment { refundLog.setIsRefund(true); refundLog.setReceivableNo(refundLog.getOutOrderNo()); } else { - refundLog.setErrorMessage(String.format("错误码:%s,错误原因:%s", alipayTradeRefundResponse.getSubCode(), alipayTradeRefundResponse.getSubMsg())); + refundLog.setErrorMessage(String.format("错误码:%s,错误原因:%s", alipayTradeRefundResponse.getSubCode(), + alipayTradeRefundResponse.getSubMsg())); } refundLogService.save(refundLog); } catch (Exception e) { @@ -237,7 +240,7 @@ public class AliPayPlugin implements Payment { * @param memberWithdrawApply 会员提现申请 */ @Override - public boolean transfer(MemberWithdrawApply memberWithdrawApply) { + public TransferResultDTO transfer(MemberWithdrawApply memberWithdrawApply) { AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel(); model.setOutBizNo(SnowFlake.createStr("T")); model.setRemark("用户提现"); @@ -257,15 +260,15 @@ public class AliPayPlugin implements Payment { AlipayFundTransUniTransferResponse alipayFundTransUniTransferResponse = AliPayApi.uniTransferToResponse(model, null); log.error("支付宝退款,参数:{},支付宝响应:{}", JSONUtil.toJsonStr(model), JSONUtil.toJsonStr(alipayFundTransUniTransferResponse)); if (alipayFundTransUniTransferResponse.isSuccess()) { - return true; + return TransferResultDTO.builder().result(true).build(); } else { log.error(alipayFundTransUniTransferResponse.getSubMsg()); + return TransferResultDTO.builder().result(false).response(alipayFundTransUniTransferResponse.getSubMsg()).build(); } } catch (Exception e) { log.error("用户提现异常:", e); - throw new ServiceException(ResultCode.PAY_ERROR); + return TransferResultDTO.builder().result(false).response(e.getMessage()).build(); } - return false; } /** diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wechat/WechatPlugin.java b/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wechat/WechatPlugin.java index 13617a89f..94ce4589b 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wechat/WechatPlugin.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wechat/WechatPlugin.java @@ -17,7 +17,6 @@ import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.connect.entity.Connect; -import cn.lili.modules.connect.entity.enums.ConnectEnum; import cn.lili.modules.connect.entity.enums.SourceEnum; import cn.lili.modules.connect.service.ConnectService; import cn.lili.modules.member.entity.dto.ConnectQueryDTO; @@ -47,10 +46,10 @@ import cn.lili.modules.system.entity.dto.payment.WechatPaymentSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.dto.TransferResultDTO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.gson.Gson; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.formula.atp.Switch; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -481,13 +480,15 @@ public class WechatPlugin implements Payment { * @param memberWithdrawApply 会员提现申请 */ @Override - public boolean transfer(MemberWithdrawApply memberWithdrawApply) { + public TransferResultDTO transfer(MemberWithdrawApply memberWithdrawApply) { try { //获取提现设置 - WithdrawalSetting withdrawalSetting = new Gson().fromJson(settingService.get(SettingEnum.WITHDRAWAL_SETTING.name()).getSettingValue(), WithdrawalSetting.class); + WithdrawalSetting withdrawalSetting = new Gson().fromJson(settingService.get(SettingEnum.WITHDRAWAL_SETTING.name()).getSettingValue(), + WithdrawalSetting.class); //获取用户OPENID - WechatConnectSetting wechatConnectSetting = new Gson().fromJson(settingService.get(SettingEnum.WECHAT_CONNECT.name()).getSettingValue(), WechatConnectSetting.class); + WechatConnectSetting wechatConnectSetting = new Gson().fromJson(settingService.get(SettingEnum.WECHAT_CONNECT.name()).getSettingValue() + , WechatConnectSetting.class); String source = ""; for (WechatConnectSettingItem wechatConnectSettingItem : wechatConnectSetting.getWechatConnectSettingItems()) { if (wechatConnectSettingItem.getAppId().equals(withdrawalSetting.getWechatAppId())) { @@ -548,12 +549,13 @@ public class WechatPlugin implements Payment { log.info("微信提现响应 {}", response); String body = response.getBody(); JSONObject jsonObject = JSONUtil.parseObj(body); - return jsonObject.getStr("batch_id") != null ? true : false; + + return TransferResultDTO.builder().result(jsonObject.getStr("batch_id") != null).response(body).build(); //根据自身业务进行接下来的任务处理 } catch (Exception e) { e.printStackTrace(); + return TransferResultDTO.builder().result(false).response(e.getMessage()).build(); } - return false; } @@ -670,7 +672,8 @@ public class WechatPlugin implements Payment { String transactionId = jsonObject.getStr("transaction_id"); String refundId = jsonObject.getStr("refund_id"); - RefundLog refundLog = refundLogService.getOne(new LambdaQueryWrapper().eq(RefundLog::getPaymentReceivableNo, transactionId)); + RefundLog refundLog = refundLogService.getOne(new LambdaQueryWrapper().eq(RefundLog::getPaymentReceivableNo, + transactionId)); if (refundLog != null) { refundLog.setIsRefund(true); refundLog.setReceivableNo(refundId); @@ -683,7 +686,8 @@ public class WechatPlugin implements Payment { String transactionId = jsonObject.getStr("transaction_id"); String refundId = jsonObject.getStr("refund_id"); - RefundLog refundLog = refundLogService.getOne(new LambdaQueryWrapper().eq(RefundLog::getPaymentReceivableNo, transactionId)); + RefundLog refundLog = refundLogService.getOne(new LambdaQueryWrapper().eq(RefundLog::getPaymentReceivableNo, + transactionId)); if (refundLog != null) { refundLog.setReceivableNo(refundId); refundLog.setErrorMessage(ciphertext.getStr("summary")); diff --git a/framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWithdrawApply.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWithdrawApply.java index cb5ee344a..ac54ce73a 100644 --- a/framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWithdrawApply.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWithdrawApply.java @@ -67,4 +67,10 @@ public class MemberWithdrawApply extends BaseEntity { @ApiModelProperty(value = "第三方平台账号") private String connectNumber; + /** + * 支付宝登录账号 + */ + @ApiModelProperty(value = "第三方错误消息") + private String errorMessage; + } diff --git a/framework/src/main/java/cn/lili/modules/wallet/entity/dto/TransferResultDTO.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/TransferResultDTO.java new file mode 100644 index 000000000..fb672a1c3 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/TransferResultDTO.java @@ -0,0 +1,24 @@ +package cn.lili.modules.wallet.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +/** + * 转账结果 + * + * @author liushuai(liushuai711 @ gmail.com) + * @version v4.0 + * @Description: + * @since 2023/5/6 16:10 + */ +@Data +@Builder +public class TransferResultDTO { + + @ApiModelProperty(value = "错误信息") + private String response; + @ApiModelProperty(value = "是否成功") + private Boolean result; + +} 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 c0b0c416b..4b3a93490 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 @@ -6,7 +6,6 @@ import cn.lili.modules.wallet.entity.dos.MemberWallet; import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; import cn.lili.modules.wallet.entity.vo.MemberWalletVO; import com.baomidou.mybatisplus.extension.service.IService; -import org.springframework.web.bind.annotation.RequestParam; /** * 会员预存款业务层 @@ -102,8 +101,7 @@ public interface MemberWalletService extends IService { * 提现公共方法 * * @param withdrawApplyId 会员零钱提现Id - * @return 操作状态 */ - Boolean withdrawal(String withdrawApplyId); + void withdrawal(String withdrawApplyId); } \ No newline at end of file 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 f2943876f..ac0c65e0b 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 @@ -22,6 +22,7 @@ import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; import cn.lili.modules.wallet.entity.dos.WalletLog; import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage; +import cn.lili.modules.wallet.entity.dto.TransferResultDTO; import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum; import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; import cn.lili.modules.wallet.entity.vo.MemberWalletVO; @@ -312,7 +313,7 @@ public class MemberWalletServiceImpl extends ServiceImpl