From 5ee07ec34d4eee862c8a089f1ca75ee499887c93 Mon Sep 17 00:00:00 2001 From: "pikachu1995@126.com" Date: Wed, 1 Mar 2023 10:59:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8F=90=E7=8E=B0-=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E6=94=AF=E4=BB=98=E6=8F=90=E7=8E=B0=EF=BC=8C?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wallet/MemberWalletBuyerController.java | 46 +++++-- .../lili/event/impl/MemberWalletExecute.java | 32 ++++- .../lili/event/impl/NoticeMessageExecute.java | 75 +++-------- .../java/cn/lili/common/enums/ResultCode.java | 5 +- .../DistributionCashServiceImpl.java | 2 - .../entity/enums/NoticeMessageNodeEnum.java | 7 +- .../serviceimpl/NoticeMessageServiceImpl.java | 2 +- .../modules/payment/kit/CashierSupport.java | 8 +- .../cn/lili/modules/payment/kit/Payment.java | 2 +- .../kit/plugin/alipay/AliPayPlugin.java | 8 +- .../kit/plugin/wechat/WechatPlugin.java | 30 +++-- .../system/entity/dto/WithdrawalSetting.java | 23 +++- .../system/entity/vo/WithdrawalSettingVO.java | 27 ++++ .../entity/dos/MemberWithdrawApply.java | 6 + .../entity/dto/MemberWithdrawalMessage.java | 9 +- .../entity/enums/WithdrawStatusEnum.java | 10 +- .../wallet/service/MemberWalletService.java | 14 +- .../serviceimpl/MemberWalletServiceImpl.java | 125 +++++++++++------- .../MemberWithdrawApplyServiceImpl.java | 29 +--- .../other/ElasticsearchController.java | 4 - 20 files changed, 276 insertions(+), 188 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/system/entity/vo/WithdrawalSettingVO.java diff --git a/buyer-api/src/main/java/cn/lili/controller/wallet/MemberWalletBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/wallet/MemberWalletBuyerController.java index 52328e6ff..4e330d5d8 100644 --- a/buyer-api/src/main/java/cn/lili/controller/wallet/MemberWalletBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/wallet/MemberWalletBuyerController.java @@ -9,12 +9,18 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; +import cn.lili.modules.system.entity.dos.Setting; +import cn.lili.modules.system.entity.dto.WithdrawalSetting; +import cn.lili.modules.system.entity.enums.SettingEnum; +import cn.lili.modules.system.entity.vo.WithdrawalSettingVO; +import cn.lili.modules.system.service.SettingService; import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; import cn.lili.modules.wallet.entity.dos.MemberWallet; import cn.lili.modules.wallet.entity.vo.MemberWalletVO; import cn.lili.modules.wallet.service.MemberWalletService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.google.gson.Gson; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -24,7 +30,6 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.Max; -import javax.validation.constraints.Min; import javax.validation.constraints.Pattern; /** @@ -54,6 +59,9 @@ public class MemberWalletBuyerController { @Autowired private VerificationService verificationService; + @Autowired + private SettingService settingService; + @GetMapping @ApiOperation(value = "查询会员预存款余额") public ResultMessage get() { @@ -64,6 +72,31 @@ public class MemberWalletBuyerController { throw new ServiceException(ResultCode.USER_NOT_LOGIN); } + @GetMapping(value = "/withdrawalSettingVO") + @ApiOperation(value = "获取提现设置VO") + public ResultMessage minPrice() { + Setting setting = settingService.get(SettingEnum.WITHDRAWAL_SETTING.name()); + WithdrawalSetting withdrawalSetting = new Gson().fromJson(setting.getSettingValue(), WithdrawalSetting.class); + + WithdrawalSettingVO withdrawalSettingVO = new WithdrawalSettingVO(); + withdrawalSettingVO.setMinPrice(withdrawalSetting.getMinPrice()); + withdrawalSettingVO.setFee(withdrawalSetting.getFee()); + withdrawalSettingVO.setType(withdrawalSetting.getType()); + return ResultUtil.data(withdrawalSettingVO); + } + + @PreventDuplicateSubmissions + @PostMapping(value = "/withdrawal") + @ApiOperation(value = "会员中心余额提现") + @ApiImplicitParams({ + @ApiImplicitParam(name = "price", value = "提现金额", required = true, dataType = "double", paramType = "query"), + @ApiImplicitParam(name = "realName", value = "真实姓名", required = true, dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "connectNumber", value = "第三方登录账号", required = true, dataType = "String", paramType = "query") + }) + public ResultMessage withdrawal(@Max(value = 9999, message = "充值金额单次最多允许提现9999元") Double price, @RequestParam String realName, @RequestParam String connectNumber) { + return ResultUtil.data(memberWalletService.applyWithdrawal(price, realName, connectNumber)); + } + @PostMapping(value = "/set-password") @ApiOperation(value = "设置支付密码") @ApiImplicitParams({ @@ -120,15 +153,4 @@ public class MemberWalletBuyerController { return memberWalletService.checkPassword(); } - - @PreventDuplicateSubmissions - @PostMapping(value = "/withdrawal") - @ApiOperation(value = "会员中心余额提现") - @ApiImplicitParams({ - @ApiImplicitParam(name = "price", value = "提现金额", required = true, dataType = "double", paramType = "query") - }) - public ResultMessage withdrawal(@Max(value = 9999, message = "充值金额单次最多允许提现9999元") @Min(value = 1, message = "充值金额单次最少提现金额为1元") Double price) { - return ResultUtil.data(memberWalletService.applyWithdrawal(price)); - } - } 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 79713ce2e..b2fbf5b80 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java @@ -1,8 +1,11 @@ package cn.lili.event.impl; -import cn.lili.event.MemberRegisterEvent; -import cn.lili.modules.member.entity.dos.Member; +import cn.lili.event.MemberWithdrawalEvent; +import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; +import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage; +import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum; +import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; import cn.lili.modules.wallet.service.MemberWalletService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,14 +17,31 @@ import org.springframework.stereotype.Service; * @since 2020-07-03 11:20 */ @Service -public class MemberWalletExecute implements MemberRegisterEvent { +public class MemberWalletExecute implements MemberWithdrawalEvent { @Autowired private MemberWalletService memberWalletService; @Override - public void memberRegister(Member member) { - // 有些情况下,会同时创建一个member_id的两条数据 -// memberWalletService.save(member.getId(),member.getUsername()); + public void memberWithdrawal(MemberWithdrawalMessage memberWithdrawalMessage) { + switch (WithdrawStatusEnum.valueOf(memberWithdrawalMessage.getStatus())) { + case VIA_AUDITING: + memberWalletService.withdrawal(memberWithdrawalMessage.getMemberWithdrawApplyId()); + break; + case SUCCESS: + //提现成功扣减冻结金额 + memberWalletService.reduceFrozen( + 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())); + break; + case FAIL_AUDITING: + //需要从冻结金额扣减到余额 + memberWalletService.increaseWithdrawal(new MemberWalletUpdateDTO(memberWithdrawalMessage.getPrice(), memberWithdrawalMessage.getMemberId(), "审核拒绝,提现金额解冻到余额", DepositServiceTypeEnum.WALLET_WITHDRAWAL.name())); + default: + break; + } } } diff --git a/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java b/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java index 386732a7b..3dfc8b1ec 100644 --- a/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java @@ -16,7 +16,6 @@ import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum; import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage; -import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum; import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -179,60 +178,30 @@ public class NoticeMessageExecute implements TradeEvent, OrderStatusChangeEvent, public void memberWithdrawal(MemberWithdrawalMessage memberWithdrawalMessage) { NoticeMessageDTO noticeMessageDTO = new NoticeMessageDTO(); noticeMessageDTO.setMemberId(memberWithdrawalMessage.getMemberId()); - //如果提现状态为申请则发送申请提现站内消息 - if (memberWithdrawalMessage.getStatus().equals(WithdrawStatusEnum.APPLY.name())) { - noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_WITHDRAWAL_CREATE); - Map params = new HashMap<>(2); - params.put("price", memberWithdrawalMessage.getPrice().toString()); - noticeMessageDTO.setParameter(params); - //发送提现申请成功消息 - noticeMessageService.noticeMessage(noticeMessageDTO); - } - //如果提现状态为通过则发送审核通过站内消息 - if (memberWithdrawalMessage.getStatus().equals(WithdrawStatusEnum.VIA_AUDITING.name())) { - //如果提现到余额 - if (memberWithdrawalMessage.getDestination().equals(MemberWithdrawalDestinationEnum.WALLET.name())) { - //组织参数 - Map params = new HashMap<>(2); - params.put("income", memberWithdrawalMessage.getPrice().toString()); - noticeMessageDTO.setParameter(params); + Map params = new HashMap<>(2); + switch (WithdrawStatusEnum.valueOf(memberWithdrawalMessage.getStatus())) { + case APPLY: + //如果提现状态为申请则发送申请提现站内消息 + noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_WITHDRAWAL_CREATE); + break; + case FAIL_AUDITING: + noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_WITHDRAWAL_AUDIT_ERROR); + break; + case SUCCESS: noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_WITHDRAWAL_SUCCESS); - //发送提现成功消息 - noticeMessageService.noticeMessage(noticeMessageDTO); - params.put("income", memberWithdrawalMessage.getPrice().toString()); - params.put("expenditure", "0"); - noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_CHANGE); - noticeMessageDTO.setParameter(params); - //发送余额变动消息 - noticeMessageService.noticeMessage(noticeMessageDTO); - } - //如果提现到微信 - if (memberWithdrawalMessage.getDestination().equals(MemberWithdrawalDestinationEnum.WECHAT.name())) { - Map params = new HashMap<>(2); - params.put("income", memberWithdrawalMessage.getPrice().toString()); - noticeMessageDTO.setParameter(params); - noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_WITHDRAWAL_WEICHAT_SUCCESS); - //发送提现成功消息 - noticeMessageService.noticeMessage(noticeMessageDTO); - - params.put("income", "0"); - params.put("expenditure", memberWithdrawalMessage.getPrice().toString()); - noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_CHANGE); - noticeMessageDTO.setParameter(params); - //发送余额变动消息 - noticeMessageService.noticeMessage(noticeMessageDTO); - } - } - //如果提现状态为拒绝则发送审核拒绝站内消息 - if (memberWithdrawalMessage.getStatus().equals(WithdrawStatusEnum.FAIL_AUDITING.name())) { - noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_WITHDRAWAL_ERROR); - Map params = new HashMap<>(2); - params.put("price", memberWithdrawalMessage.getPrice().toString()); - noticeMessageDTO.setParameter(params); - //发送提现申请成功消息 - noticeMessageService.noticeMessage(noticeMessageDTO); + break; + case ERROR: + noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_WITHDRAWAL_ERROR); + break; + case VIA_AUDITING: + noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_WITHDRAWAL_AUDIT_SUCCESS); + default: + break; } - + params.put("price", memberWithdrawalMessage.getPrice().toString()); + noticeMessageDTO.setParameter(params); + //发送提现申请消息 + noticeMessageService.noticeMessage(noticeMessageDTO); } } diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index b93239fb4..e31369e52 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -257,8 +257,9 @@ public enum ResultCode { WALLET_WITHDRAWAL_FROZEN_AMOUNT_INSUFFICIENT(34006, "冻结金额不足,无法处理提现申请请求!"), WALLET_ERROR_INSUFFICIENT(34003, "零钱提现失败!"), WALLET_REMARK_ERROR(34004, "请填写审核备注!"), - WALLET_EXIT_ERROR(34000, "钱包已存在,无法重复创建"), - WALLET_APPLY_ERROR(34005, "提现申请异常!"), + WALLET_EXIT_ERROR(34005, "钱包已存在,无法重复创建"), + WALLET_APPLY_ERROR(34006, "提现申请异常!"), + WALLET_APPLY_MIN_PRICE_ERROR(34007, "提现最低提现金额错误!"), /** * 评价 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 8f3e18ccd..122b23d2e 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 @@ -83,7 +83,6 @@ public class DistributionCashServiceImpl extends ServiceImpl() .eq(NoticeMessage::getNoticeNode - , noticeMessageDTO.getNoticeMessageNodeEnum().getDescription().trim())); + , noticeMessageDTO.getNoticeMessageNodeEnum().getDescription().trim()),false); //如果通知类站内信开启的情况下 if (noticeMessage != null && noticeMessage.getNoticeStatus().equals(SwitchEnum.OPEN.name())) { MemberMessage memberMessage = new MemberMessage(); 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 fb8874cc3..e9dca0f89 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 @@ -145,13 +145,15 @@ public class CashierSupport { /** * 用户提现 - * @param paymentMethodEnum 支付渠道 + * + * @param paymentMethodEnum 支付渠道 * @param memberWithdrawApply 用户提现申请 */ - public void transfer(PaymentMethodEnum paymentMethodEnum, MemberWithdrawApply memberWithdrawApply){ + public boolean transfer(PaymentMethodEnum paymentMethodEnum, MemberWithdrawApply memberWithdrawApply) { Payment payment = (Payment) SpringContextUtil.getBean(paymentMethodEnum.getPlugin()); - payment.transfer(memberWithdrawApply); + 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 fba4010e2..bb96c3e9e 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 @@ -114,7 +114,7 @@ public interface Payment { /** * 提现 */ - default void transfer(MemberWithdrawApply memberWithdrawApply) { + default boolean 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 2d72e845b..f40f277f1 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 @@ -31,7 +31,6 @@ import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; import com.alipay.api.domain.*; import com.alipay.api.internal.util.AlipaySignature; -import com.alipay.api.request.AlipayFundTransUniTransferRequest; import com.alipay.api.response.AlipayFundTransUniTransferResponse; import com.alipay.api.response.AlipayTradeRefundResponse; import lombok.extern.slf4j.Slf4j; @@ -238,7 +237,7 @@ public class AliPayPlugin implements Payment { * @param memberWithdrawApply 会员提现申请 */ @Override - public void transfer(MemberWithdrawApply memberWithdrawApply) { + public boolean transfer(MemberWithdrawApply memberWithdrawApply) { AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel(); model.setOutBizNo(SnowFlake.createStr("T")); model.setRemark("用户提现"); @@ -255,10 +254,10 @@ public class AliPayPlugin implements Payment { model.setOrderTitle("用户提现"); //交互退款 try { - AlipayFundTransUniTransferResponse alipayFundTransUniTransferResponse = AliPayApi.uniTransferToResponse(model,null); + AlipayFundTransUniTransferResponse alipayFundTransUniTransferResponse = AliPayApi.uniTransferToResponse(model, null); log.error("支付宝退款,参数:{},支付宝响应:{}", JSONUtil.toJsonStr(model), JSONUtil.toJsonStr(alipayFundTransUniTransferResponse)); if (alipayFundTransUniTransferResponse.isSuccess()) { - + return true; } else { log.error(alipayFundTransUniTransferResponse.getSubMsg()); } @@ -266,6 +265,7 @@ public class AliPayPlugin implements Payment { log.error("用户提现异常:", e); throw new ServiceException(ResultCode.PAY_ERROR); } + 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 3497d8e2a..a4cbbd4ef 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 @@ -39,11 +39,13 @@ import cn.lili.modules.payment.kit.plugin.wechat.model.*; import cn.lili.modules.payment.service.PaymentService; import cn.lili.modules.payment.service.RefundLogService; import cn.lili.modules.system.entity.dos.Setting; +import cn.lili.modules.system.entity.dto.WithdrawalSetting; 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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.google.gson.Gson; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -475,17 +477,21 @@ public class WechatPlugin implements Payment { * @param memberWithdrawApply 会员提现申请 */ @Override - public void transfer(MemberWithdrawApply memberWithdrawApply) { + public boolean transfer(MemberWithdrawApply memberWithdrawApply) { try { - WechatPaymentSetting setting = wechatPaymentSetting(); + //获取提现设置 + WithdrawalSetting withdrawalSetting = new Gson().fromJson(settingService.get(SettingEnum.WITHDRAWAL_SETTING.name()).getSettingValue(), WithdrawalSetting.class); + //获取微信设置 + WechatPaymentSetting wechatPaymentSetting = wechatPaymentSetting(); + //获取用户openId Connect connect = connectService.queryConnect( - ConnectQueryDTO.builder().userId(UserContext.getCurrentUser().getId()) + ConnectQueryDTO.builder().userId(memberWithdrawApply.getMemberId()) .unionType(ConnectEnum.WECHAT_OPEN_ID.name()).build() ); - //根据自身情况设置AppId,此处我存放的是服务号的APPID,下方的openID需要对应此处的APPID配置 + //构建提现,发起申请 TransferModel transferModel = new TransferModel() - .setAppid(setting.getServiceAppId()) + .setAppid(withdrawalSetting.getWechatAppId()) .setOut_batch_no(SnowFlake.createStr("T")) .setBatch_name("用户提现") .setBatch_remark("用户提现") @@ -499,10 +505,6 @@ public class WechatPlugin implements Payment { transferDetailInput.setTransfer_amount(CurrencyUtil.fen(memberWithdrawApply.getApplyMoney())); transferDetailInput.setTransfer_remark("用户提现"); transferDetailInput.setOpenid(connect.getUnionId()); -// transferDetailInput.setUserName( -// "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45"); -// transferDetailInput.setUserIdCard( -// "8609cb22e1774a50a930e414cc71eca06121bcd266335cda230d24a7886a8d9f"); transferDetailListList.add(transferDetailInput); } transferModel.setTransfer_detail_list(transferDetailListList); @@ -511,17 +513,21 @@ public class WechatPlugin implements Payment { RequestMethodEnums.POST, WechatDomain.CHINA.toString(), WechatApiEnum.TRANSFER_BATCHES.toString(), - setting.getMchId(), - setting.getSerialNumber(), + wechatPaymentSetting.getMchId(), + wechatPaymentSetting.getSerialNumber(), null, - setting.getApiclient_key(), + wechatPaymentSetting.getApiclient_key(), JSONUtil.toJsonStr(transferModel) ); log.info("微信提现响应 {}", response); + String body = response.getBody(); + JSONObject jsonObject = JSONUtil.parseObj(body); + return jsonObject.getStr("batch_id") != null ? true : false; //根据自身业务进行接下来的任务处理 } catch (Exception e) { e.printStackTrace(); } + return false; } diff --git a/framework/src/main/java/cn/lili/modules/system/entity/dto/WithdrawalSetting.java b/framework/src/main/java/cn/lili/modules/system/entity/dto/WithdrawalSetting.java index 932bbab4e..bb916e2c4 100644 --- a/framework/src/main/java/cn/lili/modules/system/entity/dto/WithdrawalSetting.java +++ b/framework/src/main/java/cn/lili/modules/system/entity/dto/WithdrawalSetting.java @@ -15,7 +15,28 @@ public class WithdrawalSetting implements Serializable { private static final long serialVersionUID = -3872782530832122976L; /** - * 提现是否需要申请 + * 提现最低金额 + */ + private Double minPrice; + /** + * 提现手续费 + */ + private Double fee; + /** + * 提现类型 WECHAT\ALI + */ + private String type; + /** + * 提现是否需要审核 */ private Boolean apply; + + /** + * 微信提现使用的APPID + */ + private String wechatAppId; + /** + * 微信APPID渠道 + */ + private String wechatAppIdSource; } diff --git a/framework/src/main/java/cn/lili/modules/system/entity/vo/WithdrawalSettingVO.java b/framework/src/main/java/cn/lili/modules/system/entity/vo/WithdrawalSettingVO.java new file mode 100644 index 000000000..2c1d9545c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/system/entity/vo/WithdrawalSettingVO.java @@ -0,0 +1,27 @@ +package cn.lili.modules.system.entity.vo; + +import lombok.Data; + +/** + * 用户提现设置VO + * + * @author Bulbasaur + * @since 2023/3/1 + */ +@Data +public class WithdrawalSettingVO { + + /** + * 提现最低金额 + */ + private Double minPrice; + /** + * 提现手续费 + */ + private Double fee; + /** + * 提现类型 WECHAT\ALI + */ + private String type; + +} 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 78c630ae3..cb5ee344a 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 @@ -56,8 +56,14 @@ public class MemberWithdrawApply extends BaseEntity { @ApiModelProperty(value = "sn") private String sn; + /** + * 支付宝提现时必填 + */ @ApiModelProperty(value = "真实姓名") private String realName; + /** + * 支付宝登录账号 + */ @ApiModelProperty(value = "第三方平台账号") private String connectNumber; diff --git a/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWithdrawalMessage.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWithdrawalMessage.java index 6eeb7f623..30a691f12 100644 --- a/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWithdrawalMessage.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWithdrawalMessage.java @@ -1,6 +1,5 @@ package cn.lili.modules.wallet.entity.dto; -import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -13,6 +12,9 @@ import lombok.Data; @Data public class MemberWithdrawalMessage { + @ApiModelProperty(value = "提现申请ID") + private String memberWithdrawApplyId; + @ApiModelProperty(value = "金额") private Double price; @@ -22,9 +24,4 @@ public class MemberWithdrawalMessage { @ApiModelProperty(value = "提现状态") private String status; - /** - * @see MemberWithdrawalDestinationEnum - */ - @ApiModelProperty(value = "提现到哪里") - private String destination; } diff --git a/framework/src/main/java/cn/lili/modules/wallet/entity/enums/WithdrawStatusEnum.java b/framework/src/main/java/cn/lili/modules/wallet/entity/enums/WithdrawStatusEnum.java index 3910eaceb..d5f91e733 100644 --- a/framework/src/main/java/cn/lili/modules/wallet/entity/enums/WithdrawStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/enums/WithdrawStatusEnum.java @@ -18,7 +18,15 @@ public enum WithdrawStatusEnum { /** * 审核未通过 */ - FAIL_AUDITING("审核未通过"); + FAIL_AUDITING("审核未通过"), + /** + * 提现成功 + */ + SUCCESS("提现成功"), + /** + * 提现失败 + */ + ERROR("提现失败"); private String description; 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 99334fd3a..c0b0c416b 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 @@ -3,10 +3,10 @@ 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; +import org.springframework.web.bind.annotation.RequestParam; /** * 会员预存款业务层 @@ -80,7 +80,7 @@ public interface MemberWalletService extends IService { Boolean checkPassword(); /** - * 会员注册添加会员预存款 + * 会员注册添加会员余额钱包 * * @param memberId 会员id * @param memberName 会员名称 @@ -92,16 +92,18 @@ public interface MemberWalletService extends IService { * 用户提现 * * @param price 提现金额 + * @param realName 真实姓名 + * @param connectNumber 第三方账号 * @return 是否提现成功 */ - Boolean applyWithdrawal(Double price); + Boolean applyWithdrawal(Double price, String realName, String connectNumber); /** - * 提现公共方法,此方法供前端用户提现和后端提现使用 + * 提现公共方法 * - * @param memberWithdrawApply 会员零钱提现申请 + * @param withdrawApplyId 会员零钱提现Id * @return 操作状态 */ - Boolean withdrawal(MemberWithdrawApply memberWithdrawApply); + Boolean 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 4ea20933e..266619fb3 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 @@ -23,7 +23,6 @@ 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.enums.DepositServiceTypeEnum; -import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum; import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; import cn.lili.modules.wallet.entity.vo.MemberWalletVO; import cn.lili.modules.wallet.mapper.MemberWalletMapper; @@ -248,71 +247,105 @@ public class MemberWalletServiceImpl extends ServiceImpl corporateBankInit(int i) { - corporateBankService.init(i); return ResultUtil.success(); } @Autowired