diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileMerchantInfoController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileMerchantInfoController.java index f52305a0f..6592b8453 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileMerchantInfoController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileMerchantInfoController.java @@ -51,7 +51,7 @@ public class PileMerchantInfoController extends BaseController { @PreAuthorize("@ss.hasPermi('pile:merchant:list')") @GetMapping("queryFirstLevelMerchant") public TableDataInfo queryFirstLevelMerchant() { - List list = pileMerchantInfoService.queryFirstLevelMerchant(); + List list = pileMerchantInfoService.queryFirstLevelMerchantList(); return getDataTable(list); } diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index b97e9a80a..7cd707986 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -206,6 +206,16 @@ public class SpringBootTestController { @Autowired private LTYTService ltytService; + @Autowired + private IPileMerchantInfoService pileMerchantInfoService; + + @Test + public void getFirstLevelMerchantByMerchantIdTest() { + String merchantId = "13"; + PileMerchantInfo merchantInfo = pileMerchantInfoService.getFirstLevelMerchantByMerchantId(merchantId); + System.out.println(JSON.toJSONString(merchantInfo)); + } + @Test public void queryPaymentInfoTest() throws BaseAdaPayException { String wechatAppId = "wxbb3e0d474569481d"; diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSettleResult.java b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSettleResult.java index 96ae1aa5b..79f55a249 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSettleResult.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSettleResult.java @@ -3,11 +3,24 @@ package com.jsowell.adapay.vo; import lombok.Getter; import lombok.Setter; +/** + * 订单分账结果 + */ @Getter @Setter public class OrderSettleResult { /** - * 状态 + * 订单编号 + */ + private String orderCode; + + /** + * 订单结算金额 + */ + private String settleAmt; + + /** + * 分账状态 */ private String status; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileMerchantInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileMerchantInfoMapper.java index ef4d35a4a..71e95344c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileMerchantInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileMerchantInfoMapper.java @@ -88,7 +88,7 @@ public interface PileMerchantInfoMapper { /** * 查询一级运营商 */ - List queryFirstLevelMerchant(); + List queryFirstLevelMerchantList(); /** * 根据appid查询对应一级运营商id diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java index c7938e4fb..0152193c8 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java @@ -97,7 +97,7 @@ public interface IPileMerchantInfoService { * 查询一级运营商列表 * @return */ - List queryFirstLevelMerchant(); + List queryFirstLevelMerchantList(); String queryAppIdByMerchantId(String merchantId); @@ -109,4 +109,9 @@ public interface IPileMerchantInfoService { List getDeptIdsByAppId(String appId); String getDelayModeByWechatAppId(String wechatAppId); + + /** + * 通过merchantId获取一级运营商信息 + */ + PileMerchantInfo getFirstLevelMerchantByMerchantId(String merchantId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index a0c9dc756..7b3cbdc23 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -695,7 +695,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { transactionService.doUpdateOrder(dto); // 订单支付结算 - orderPaymentSettlement(orderBasicInfo); + OrderSettleResult orderSettleResult = orderPaymentSettlement(orderBasicInfo); // 退款逻辑/需要退款的情况 BigDecimal residue = orderBasicInfo.getRefundAmount(); @@ -735,18 +735,33 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { * 清分账单生成逻辑改为当天第一笔结算后就新建,后面的产生的订单,追加更新 */ private OrderSettleResult orderPaymentSettlement(OrderBasicInfo orderBasicInfo) { - // 获取一级运营商appId - String appId = pileMerchantInfoService.queryAppIdByMerchantId(orderBasicInfo.getMerchantId()); - if (StringUtils.isBlank(appId)) { + String merchantId = orderBasicInfo.getMerchantId(); + String orderCode = orderBasicInfo.getOrderCode(); + // 获取一级运营商信息 + PileMerchantInfo merchantInfo = pileMerchantInfoService.getFirstLevelMerchantByMerchantId(merchantId); + if (merchantInfo == null) { + logger.info("订单分账逻辑-订单:{}, 查不到一级运营商信息", orderCode); return null; } + String appId = merchantInfo.getAppId(); + String delayMode = merchantInfo.getDelayMode(); + // 获取结算账户信息 - AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(orderBasicInfo.getMerchantId()); + AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(merchantId); if (adapayMemberAccount == null) { + logger.info("订单分账逻辑-订单:{}, 运营商id:{}, 没有配置结算账户信息", orderCode, merchantId); return null; } + + /* + 获取一级运营商的 延时分账设置 + 使用延时分账的一级运营商,需要 + + 未使用延时分账的一级运营商 + */ OrderSettleResult orderSettleResult = null; - try { + if (StringUtils.equals(delayMode, Constants.ADAPAY_PAY_MODE_DELAY)) { + // 延时分账的处理逻辑 if (OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) { // 余额支付的订单 orderSettleResult = doBalancePayment(orderBasicInfo, adapayMemberAccount, appId); @@ -754,9 +769,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { // 在线支付,进行支付确认分账 orderSettleResult = doPaymentConfirm(orderBasicInfo, adapayMemberAccount, appId); } - } catch (Exception e) { - logger.error("订单交易确认失败:{}", orderBasicInfo.getOrderCode(), e); + } else { + } + + + return orderSettleResult; } @@ -1208,7 +1226,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { * @return */ @Override - public OrderSettleResult doBalancePayment(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException { + public OrderSettleResult doBalancePayment(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) { BigDecimal settleAmount = orderBasicInfo.getSettleAmount(); String orderCode = orderBasicInfo.getOrderCode(); @@ -1222,28 +1240,22 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { for (BalanceDeductionAmountVO vo : list) { String paymentId = vo.getPaymentId(); BigDecimal deductionAmount = vo.getDeductionAmount(); - String delayMode = vo.getDelayMode(); - if (StringUtils.equals(delayMode, Constants.ADAPAY_PAY_MODE_DELAY)) { - // 延时分账,使用确认交易API - PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode, wechatAppId); - if (paymentConfirmResponse != null && paymentConfirmResponse.isNotFailed()) { - confirmAmt = confirmAmt.add(new BigDecimal(paymentConfirmResponse.getConfirmed_amt())); - feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt())); - status = paymentConfirmResponse.getStatus(); - description = paymentConfirmResponse.getDescription(); + // 延时分账,使用确认交易API + PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode, wechatAppId); + if (paymentConfirmResponse != null && paymentConfirmResponse.isNotFailed()) { + confirmAmt = confirmAmt.add(new BigDecimal(paymentConfirmResponse.getConfirmed_amt())); + feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt())); + status = paymentConfirmResponse.getStatus(); + description = paymentConfirmResponse.getDescription(); - // 更新这笔交易的剩余金额 - MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId); - // 更新此笔交易单的消费金额 = 历史消费金额 + 本次消费金额 - record.setSpendAmt(record.getSpendAmt().add(deductionAmount)); - // 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额 - record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt())); - memberAdapayRecordService.updateByPrimaryKeySelective(record); - } - } else { - // 实时分账 - logger.info("实时分账"); + // 更新这笔交易的剩余金额 + MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId); + // 更新此笔交易单的消费金额 = 历史消费金额 + 本次消费金额 + record.setSpendAmt(record.getSpendAmt().add(deductionAmount)); + // 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额 + record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt())); + memberAdapayRecordService.updateByPrimaryKeySelective(record); } } @@ -1314,10 +1326,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { * * @param orderBasicInfo 订单 * @param adapayMemberAccount 结算账户 - * @throws BaseAdaPayException */ @Override - public OrderSettleResult doPaymentConfirm(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException { + public OrderSettleResult doPaymentConfirm(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) { // 查询订单的交易id String orderCode = orderBasicInfo.getOrderCode(); AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByOrderCode(orderCode); @@ -2747,9 +2758,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { // 余额支付 balancePayOrder(dto); } else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) { - // 微信支付 - // dto.setOrderBasicInfo(orderInfo); - // 2023-07-11 全部改为汇付支付 dto.setGoodsTitle("充电费用"); dto.setGoodsDesc("充电桩预付款金额"); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java index bba5ea84f..eecb5812b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java @@ -339,8 +339,8 @@ public class PileMerchantInfoServiceImpl implements IPileMerchantInfoService { * @return */ @Override - public List queryFirstLevelMerchant() { - return pileMerchantInfoMapper.queryFirstLevelMerchant(); + public List queryFirstLevelMerchantList() { + return pileMerchantInfoMapper.queryFirstLevelMerchantList(); } /** @@ -407,4 +407,27 @@ public class PileMerchantInfoServiceImpl implements IPileMerchantInfoService { return null; } + @Override + public PileMerchantInfo getFirstLevelMerchantByMerchantId(String merchantId) { + if (StringUtils.isBlank(merchantId)) { + return null; + } + // 拿merchantId先查一次 + PileMerchantInfo pileMerchantInfo = selectPileMerchantInfoById(merchantId); + if (pileMerchantInfo == null) { + return null; + } + if (StringUtils.equals(pileMerchantInfo.getMerchantLevel(), Constants.ONE)) { + // 如果是一级运营商直接返回 + return pileMerchantInfo; + } + // 通过parentId再查一次 + String parentId = pileMerchantInfo.getParentId(); + pileMerchantInfo = selectPileMerchantInfoById(parentId); + if (pileMerchantInfo == null) { + return null; + } + return pileMerchantInfo; + } + } diff --git a/jsowell-pile/src/main/resources/mapper/pile/PileMerchantInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/PileMerchantInfoMapper.xml index 86cacf91a..341231a9e 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/PileMerchantInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/PileMerchantInfoMapper.xml @@ -339,7 +339,7 @@ - select from