From 40e8c12ca580399572c36e30d58af15fd7185f4b Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Tue, 1 Aug 2023 16:16:34 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BF=9D=E5=AD=98=E6=8F=90=E7=8E=B0?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pile/AdapayMemberController.java | 8 ++- .../test/java/SpringBootTestController.java | 18 ++++- .../common/enums/ykc/ReturnCodeEnum.java | 2 + .../adapay/service/AdapayMemberService.java | 66 +++++++++++++++---- .../adapay/vo/AdapayAccountBalanceVO.java | 9 +++ 5 files changed, 87 insertions(+), 16 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/AdapayMemberController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/AdapayMemberController.java index 4d7b4603c..220c34c8f 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/AdapayMemberController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/AdapayMemberController.java @@ -110,6 +110,9 @@ public class AdapayMemberController extends BaseController { try { AdapayAccountBalanceVO vo = adapayMemberService.queryAdapayAccountBalance(dto.getMerchantId()); result = AjaxResult.success(vo); + } catch (BusinessException e) { + logger.error("查询汇付账户余额error", e); + result = AjaxResult.error(e.getMessage()); } catch (BaseAdaPayException e) { logger.error("查询汇付账户余额error", e); result = AjaxResult.error(); @@ -163,8 +166,11 @@ public class AdapayMemberController extends BaseController { try { adapayMemberService.drawCash(dto); result = AjaxResult.success(); + } catch (BusinessException e) { + logger.error("申请取现接口error", e); + result = AjaxResult.error(e.getMessage()); } catch (BaseAdaPayException e) { - logger.error("提现接口 error", e); + logger.error("申请取现接口 error", e); result = AjaxResult.error(); } return result; diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index a3287c3d0..50a2a7839 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -20,6 +20,7 @@ import com.jsowell.common.core.domain.entity.SysDictData; import com.jsowell.common.core.domain.ykc.LoginRequestData; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.redis.RedisCache; +import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.*; @@ -56,7 +57,6 @@ import com.jsowell.thirdparty.lianlian.util.Encodes; import com.jsowell.thirdparty.lianlian.util.GBSignUtils; import com.jsowell.wxpay.common.WeChatPayParameter; import com.jsowell.wxpay.dto.AppletTemplateMessageSendDTO; -import com.jsowell.pile.dto.ApplyRefundDTO; import com.jsowell.wxpay.response.WechatPayRefundRequest; import com.jsowell.wxpay.service.WxAppletRemoteService; import org.apache.commons.collections4.CollectionUtils; @@ -186,6 +186,22 @@ public class SpringBootTestController { @Autowired private IMemberBasicInfoService memberBasicInfoService; + @Autowired + private ClearingWithdrawInfoService clearingWithdrawInfoService; + + @Test + public void testClearingWithdraw() { + // 保存提现记录 + ClearingWithdrawInfo record = new ClearingWithdrawInfo(); + record.setWithdrawCode("132321354"); + record.setWithdrawStatus(Constants.ZERO); + Date now = new Date(); + record.setApplicationTime(now); + record.setCreateTime(now); + record.setDelFlag(DelFlagEnum.NORMAL.getValue()); + clearingWithdrawInfoService.insertOrUpdate(record); + } + @Test public void testGetPileTypeNum() { Long stationId = 1L; diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java index e5d9c3ce6..97b33fbd5 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java @@ -104,6 +104,8 @@ public enum ReturnCodeEnum { CODE_ADAPAY_CALLBACK_IS_NULL_ERROR("00100048", "未查询到订单支付记录回调"), + CODE_INSUFFICIENT_BALANCE_ERROR("00100049", "余额不足"), + /* 个人桩 start */ CODE_PILE_HAS_BEEN_BINDING_ERROR("00400001", "此桩已被绑定,请联系管理员!"), diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java index 788cb7deb..8bc6cdeec 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java @@ -16,12 +16,16 @@ import com.jsowell.adapay.vo.AdapayCorpMemberVO; import com.jsowell.adapay.vo.AdapayMemberInfoVO; import com.jsowell.adapay.vo.AdapaySettleAccountVO; import com.jsowell.common.constant.Constants; +import com.jsowell.common.enums.DelFlagEnum; +import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.AdapayUtil; import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.ZipUtil; import com.jsowell.common.util.id.IdUtils; import com.jsowell.pile.domain.AdapayMemberAccount; +import com.jsowell.pile.domain.ClearingWithdrawInfo; +import com.jsowell.pile.service.ClearingWithdrawInfoService; import com.jsowell.pile.service.IAdapayMemberAccountService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -33,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.math.BigDecimal; +import java.util.Date; import java.util.List; import java.util.Map; @@ -51,6 +56,9 @@ public class AdapayMemberService { @Autowired private IAdapayMemberAccountService adapayMemberAccountService; + @Autowired + private ClearingWithdrawInfoService clearingWithdrawInfoService; + public void createSettleAccount(SettleAccountDTO dto) throws BaseAdaPayException, BusinessException { String bankAcctType = dto.getBankAcctType(); if (StringUtils.equals(bankAcctType, Constants.ONE)) { @@ -323,8 +331,7 @@ public class AdapayMemberService { // 通过merchantId 查询出汇付会员id 和 结算账户id,用来查询余额 AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(merchantId); if (adapayMemberAccount == null) { - log.error("通过merchantId:{}, 没有查询到结算账户配置", merchantId); - return vo; + throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_MEMBER_IS_NULL_ERROR); } String settle_account_id = adapayMemberAccount.getSettleAccountId(); String member_id = adapayMemberAccount.getAdapayMemberId(); @@ -340,6 +347,8 @@ public class AdapayMemberService { vo.setAcctBalance(new BigDecimal((String) settleCount.get("acct_balance"))); vo.setAvlBalance(new BigDecimal((String) settleCount.get("avl_balance"))); vo.setLastAvlBalance(new BigDecimal((String) settleCount.get("last_avl_balance"))); + vo.setAdapayMemberId(adapayMemberAccount.getAdapayMemberId()); + vo.setSettleAccountId(adapayMemberAccount.getSettleAccountId()); return vo; } @@ -432,25 +441,54 @@ public class AdapayMemberService { * @throws BaseAdaPayException */ public void drawCash(WithdrawDTO dto) throws BaseAdaPayException { - // 通过merchantId 查询出汇付会员id 和 结算账户id,用来查询余额 - AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(dto.getMerchantId()); - if (adapayMemberAccount == null) { - log.error("通过merchantId:{}, 没有查询到结算账户配置", dto.getMerchantId()); - return; + // 查询余额 + AdapayAccountBalanceVO adapayAccountBalanceVO = queryAdapayAccountBalance(dto.getMerchantId()); + if (adapayAccountBalanceVO == null) { + throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_MEMBER_IS_NULL_ERROR); } - Map settleCountParams = Maps.newHashMap(); + // 提现手续费 每笔固定10元 + BigDecimal feeAmt = new BigDecimal("10"); + + // 实际提现到账金额 + BigDecimal cashAmt = adapayAccountBalanceVO.getAvlBalance().subtract(feeAmt); + + // 可提现金额减去手续费后需大于0 + if (cashAmt.compareTo(BigDecimal.ZERO) < 0) { + throw new BusinessException(ReturnCodeEnum.CODE_INSUFFICIENT_BALANCE_ERROR); + } + + // 发送提现申请 + Map settleCountParams = Maps.newHashMap(); settleCountParams.put("order_no", "drawcash_" + System.currentTimeMillis()); - settleCountParams.put("cash_amt", AdapayUtil.formatAmount(dto.getCashAmt())); - settleCountParams.put("member_id", adapayMemberAccount.getAdapayMemberId()); + settleCountParams.put("cash_amt", AdapayUtil.formatAmount(cashAmt)); + settleCountParams.put("member_id", adapayAccountBalanceVO.getAdapayMemberId()); settleCountParams.put("app_id", ADAPAY_APP_ID); - settleCountParams.put("settle_account_id", adapayMemberAccount.getSettleAccountId()); + settleCountParams.put("settle_account_id", adapayAccountBalanceVO.getSettleAccountId()); settleCountParams.put("cash_type", "T1"); settleCountParams.put("notify_url", ADAPAY_CALLBACK_URL); - - log.info("取现接口,请求参数:{}", JSON.toJSONString(settleCountParams)); + log.info("申请取现接口,请求参数:{}", JSON.toJSONString(settleCountParams)); Map settleCount = Drawcash.create(settleCountParams); - log.info("取现接口返回参数{}", JSON.toJSONString(settleCount)); + log.info("申请取现接口,返回参数:{}", JSON.toJSONString(settleCount)); + + if (settleCount == null) { + throw new BusinessException("", "申请取现接口发生异常"); + } + + String id = (String) settleCount.get("id"); + + // 发起支付手续费请求 inMemberId为0表示本商户 + createBalancePaymentRequest(adapayAccountBalanceVO.getAdapayMemberId(), Constants.ZERO, feeAmt.toString()); + + // 保存提现记录 + ClearingWithdrawInfo record = new ClearingWithdrawInfo(); + record.setWithdrawCode(id); + record.setWithdrawStatus(Constants.ZERO); + Date now = new Date(); + record.setApplicationTime(now); + record.setCreateTime(now); + record.setDelFlag(DelFlagEnum.NORMAL.getValue()); + clearingWithdrawInfoService.insertOrUpdate(record); } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayAccountBalanceVO.java b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayAccountBalanceVO.java index 9d692a1e5..4ebae55f9 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayAccountBalanceVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayAccountBalanceVO.java @@ -4,6 +4,9 @@ import lombok.*; import java.math.BigDecimal; +/** + * 汇付会员余额 + */ @Getter @Setter @NoArgsConstructor @@ -22,4 +25,10 @@ public class AdapayAccountBalanceVO { // 昨日日终余额。 private BigDecimal lastAvlBalance; + // 汇付会员id + private String adapayMemberId; + + // 汇付结算账户id + private String settleAccountId; + }