From 913fdba5705739e7ca52fa86951cf80addb9c541 Mon Sep 17 00:00:00 2001 From: zhengfangyuan Date: Thu, 25 Aug 2022 13:33:07 +0800 Subject: [PATCH] fix pay v3 share --- .../service/WxProfitSharingOrderService.java | 2 +- .../WxProfitSharingReceiverService.java | 3 +- .../helper/WxCUserTagsServiceHelper.java | 5 +- .../impl/WxCouponOrderServiceImpl.java | 21 +++- .../service/impl/WxMerchantServiceImpl.java | 2 +- .../service/impl/WxOrderServiceImpl.java | 2 +- .../impl/WxProfitSharingOrderServiceImpl.java | 107 +++++++++++------- .../WxProfitSharingReceiverServiceImpl.java | 8 +- .../service/share/PayShareAdapterService.java | 3 +- .../share/douyin/TtPayShareService.java | 7 +- .../share/wx/sft/WxPayShareSFTService.java | 2 +- .../share/wx/v2/WxPayShareService.java | 15 ++- .../share/wx/v3/WxPayShareV3Service.java | 27 ++++- 13 files changed, 124 insertions(+), 80 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java index 50dff36a6..388667d3a 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java @@ -21,7 +21,7 @@ public interface WxProfitSharingOrderService { /** * 创建分账订单 */ - ResultData createSharingOrder(WxSharingOrderDto wxSharingOrderDto,Integer payway,Integer payVersion,Integer mchType,Integer share); + ResultData createSharingOrder(WxSharingOrderDto wxSharingOrderDto,WxPayOrder payOrder,Integer payway,Integer payVersion,Integer mchType,Integer share); /** * 分账重试 diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java index 631a95323..5a34eae62 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java @@ -44,8 +44,7 @@ public interface WxProfitSharingReceiverService { void deleteById(Long id); WxProfitSharingReceiver findReceiver(TenantEntity tenantEntity,Long merchantId, EnumAppPlat plat,EnumProfitSharingType sharingType); - - List findReceivers(TenantEntity tenantEntity,Long merchantId,EnumAppPlat plat); + List findReceivers(TenantEntity tenantEntity,Long merchantId); ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList); diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java index 7b2333986..1db7155ca 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxCUserTagsServiceHelper.java @@ -343,7 +343,7 @@ public class WxCUserTagsServiceHelper{ public List assignTypeId14(WxCUserBasicInfo user,TenantEntity tenantEntity, WxCUserTagsService wxCUserTagsService) { - List resList = null; + List resList = new ArrayList(); Calendar endC = Calendar.getInstance(); Calendar startC = Calendar.getInstance(); endC.setTime(new Date()); @@ -443,6 +443,9 @@ public class WxCUserTagsServiceHelper{ } }); + if (resList.size() == 0) { + return null; + } return resList; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index cd0f05cfb..ff63d8894 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -1298,6 +1298,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); } merchantId = bUser.getMerchantId(); + + //TODO 111111111查询核销商户的收款账户有没有配置 + //couponOrder.getm } if(merchantId != null){ @@ -1308,10 +1311,16 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { WxPayOrder wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrderQ)); if(wxPayOrder != null && EnumPayMchType.TOTAL.getCode().equals(wxPayOrder.getMchType()) && EnumPayShare.YES.getCode().equals(wxPayOrder.getShare())){ - payServiceFactory.getPayShareAdapterService(wxPayOrder.getPayVendor(),couponOrder.getPayVersion()) - .getReceiverList(couponOrder, merchantId, wxPayOrder.getTtPayWay()); + WxProfitSharingReceiver receiver = payServiceFactory.getPayShareAdapterService(wxPayOrder.getPayVendor(),couponOrder.getPayVersion()) + .getReceiver(couponOrder, merchantId, wxPayOrder.getTtPayWay(),wxPayOrder.getMchType()); + if (null == receiver) { + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL.getCode(),"当前商户没有配置收款账号。"); + } }else if(wxPayOrder != null && EnumPayMchType.DIRECT.getCode().equals(wxPayOrder.getMchType())){ merchantId = wxPayOrder.getChildOrderShare(couponOrder.getOrderId()).getMerchantId(); + if (null == merchantId) { + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL.getCode(),"订单支付信息未包含商户"); + } } } @@ -1705,10 +1714,10 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { logger.error("核销记账失败"+e.getMessage(),e); } }else if(wxPayOrder != null && EnumPayMchType.TOTAL.getCode().equals(wxPayOrder.getMchType())){ - List psReceiverList = payServiceFactory.getPayShareAdapterService(payWay,couponOrder.getPayVersion()) - .getReceiverList(wxPayOrder,merchantId,wxPayOrder.getTtPayWay()); + WxProfitSharingReceiver psReceiver = payServiceFactory.getPayShareAdapterService(payWay,couponOrder.getPayVersion()) + .getReceiver(wxPayOrder,merchantId,wxPayOrder.getTtPayWay(),wxPayOrder.getMchType()); - if (psReceiverList == null || psReceiverList.size() == 0) { + if (psReceiver == null) { try { // 查询不到分账帐号,往账户里面记帐 if (couponOrder.getCouponPrice() > 0) { @@ -1750,7 +1759,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); wxSharingOrderDto.updateTenantInfo(wxPayOrder); wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); - wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,payWay,wxPayOrder.getPayVersion(),wxPayOrder.getMchType(),wxPayOrder.getShare()); + wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,wxPayOrder,payWay,wxPayOrder.getPayVersion(),wxPayOrder.getMchType(),wxPayOrder.getShare()); } } catch (Exception e) { logger.error("微信分账: " + e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 1eb11e3c9..da49fb64f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -355,7 +355,7 @@ public class WxMerchantServiceImpl implements WxMerchantService { } //分账信息 - List receiver = wxProfitSharingReceiverService.findReceivers(wxMerchant,wxMerchant.getId(),null); + List receiver = wxProfitSharingReceiverService.findReceivers(wxMerchant,wxMerchant.getId()); if (receiver != null) { wxMerchant.setWxProfitSharingReceiver(receiver); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index dfe95016e..b4e00be83 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -2569,7 +2569,7 @@ public class WxOrderServiceImpl implements WxOrderService { sharingOrder.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); sharingOrder.updateTenantInfo(wxPayOrder); sharingOrder.setTransactionId(wxPayOrder.getTransactionId()); - wxProfitSharingOrderService.createSharingOrder(sharingOrder,payWay.getCode(),wxPayOrder.getPayVersion(),wxPayOrder.getMchType(),wxPayOrder.getShare()); + wxProfitSharingOrderService.createSharingOrder(sharingOrder,wxPayOrder,payWay.getCode(),wxPayOrder.getPayVersion(),wxPayOrder.getMchType(),wxPayOrder.getShare()); } else { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java index 25d7f7da2..de07d798d 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java @@ -261,7 +261,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ @Override // @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) - public ResultData createSharingOrder(WxSharingOrderDto sharingOrderDto,Integer payWay,Integer payVersion,Integer mchType,Integer share) { + public ResultData createSharingOrder(WxSharingOrderDto sharingOrderDto,WxPayOrder payOrder,Integer payWay,Integer payVersion,Integer mchType,Integer share) { PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(payWay,payVersion); @@ -279,54 +279,73 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ if (null == shareType) { throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),sharingOrderDto.getType()+"在分账方式中不存在。EnumProfitSharingOrderType"); } - if(StringUtils.isNotBlank(record.getReceivers())){ - JSONArray jsonArray = JSONArray.parseArray(record.getReceivers()); - WxAppinfo appInfo = getAppinfo(sharingOrderDto.getTenantId(),payWay); - WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); - - PayShareResult shareResult = payShareAdapterService.haveReciversShare(appInfo, payAccount, record, - sharingOrderDto.getTransactionId(), jsonArray, shareType); - WxProfitSharingOrder updSharingOrder = new WxProfitSharingOrder(); - updSharingOrder.updateTenantInfo(record); - updSharingOrder.setId(record.getId()); - updSharingOrder.setOutSettleNo(record.getOutSettleNo()); - if (!shareResult.isSuccess()) { - updSharingOrder.setSharingStatus(shareResult.getCode()); - updSharingOrder.setErrorMsg(shareResult.getMsg()); - updSharingOrder.setUpdateTime(new Date()); - wxProfitSharingOrderMapper.updateById(updSharingOrder); - return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),updSharingOrder.getErrorMsg()); - } - updSharingOrder.setSharingOrderNo(shareResult.getShareOrderNo()); - updSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_ACCEPTED.getCode()); + WxAppinfo appInfo = getAppinfo(sharingOrderDto.getTenantId(),payWay); + WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); + PayShareResult shareResult = null; + JSONArray jsonArray = null; + //总分模式,收款账户分账 + if (EnumPayMchType.TOTAL.getCode() == mchType) { + if(StringUtils.isNotBlank(record.getReceivers())){ + jsonArray = JSONArray.parseArray(record.getReceivers()); + shareResult = payShareAdapterService.haveReciversShare(appInfo, payAccount, record, + sharingOrderDto.getTransactionId(), jsonArray, shareType); + }else { + return new ResultData(); + } + //直连模式,不用分账,直接完结分账 + }else if (EnumPayMchType.DIRECT.getCode() == mchType) { + shareResult = payShareAdapterService.noReciverShare(appInfo, payAccount, record, sharingOrderDto.getTransactionId(), sharingOrderDto.getShareAmount()); + //当前商户的收款账号 + WxProfitSharingReceiver receiver = payShareAdapterService.getReceiver(sharingOrderDto, sharingOrderDto.getMerchantId(), payOrder.getTtPayWay(), mchType); + if (null == receiver) { + return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"当前商户未配置收款账号"); + } + StringBuffer sb = new StringBuffer("[{").append("\"description\":").append(receiver.getId()).append(",\"amount\":").append(sharingOrderDto.getShareAmount()); + jsonArray = JSONArray.parseArray(sb.toString()); + } + if (null == shareResult) { + return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"当前支付模式调用分账未返回结果"); + } + + WxProfitSharingOrder updSharingOrder = new WxProfitSharingOrder(); + updSharingOrder.updateTenantInfo(record); + updSharingOrder.setId(record.getId()); + updSharingOrder.setOutSettleNo(record.getOutSettleNo()); + if (!shareResult.isSuccess()) { + updSharingOrder.setSharingStatus(shareResult.getCode()); + updSharingOrder.setErrorMsg(shareResult.getMsg()); updSharingOrder.setUpdateTime(new Date()); wxProfitSharingOrderMapper.updateById(updSharingOrder); + return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),updSharingOrder.getErrorMsg()); + } + updSharingOrder.setSharingOrderNo(shareResult.getShareOrderNo()); + updSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_ACCEPTED.getCode()); + updSharingOrder.setUpdateTime(new Date()); + wxProfitSharingOrderMapper.updateById(updSharingOrder); - final IdWorker idworker = IdWorker.get(); - try { - jsonArray.stream().forEach(obj -> { - JSONObject receiver =(JSONObject) obj; - Date currentDate = new Date(); - WxProfitSharingResult result = new WxProfitSharingResult(); - result.setId(idworker.nextId()); - result.updateTenantInfo(sharingOrderDto); - result.setMerchantId(record.getMerchantId()); - result.setSharingOrderId(record.getId()); - result.setSharingReceiverId(Long.valueOf(receiver.getString("description"))); - result.setPayAmount(receiver.getInteger("amount")); - result.setCreateTime(currentDate); - result.setUpdateTime(currentDate); - result.setSharingStatus(EnumProfitSharingResultStatus.PROFIT_SHARING_RESULT_PENDING.getCode()); - wxProfitSharingResultMapper.insert(result); - }); - }catch (Exception e) { - logger.error("分账详细信息为null"); + final IdWorker idworker = IdWorker.get(); + try { + jsonArray.stream().forEach(obj -> { + JSONObject receiver =(JSONObject) obj; + Date currentDate = new Date(); + WxProfitSharingResult result = new WxProfitSharingResult(); + result.setId(idworker.nextId()); + result.updateTenantInfo(sharingOrderDto); + result.setMerchantId(record.getMerchantId()); + result.setSharingOrderId(record.getId()); + result.setSharingReceiverId(Long.valueOf(receiver.getString("description"))); + result.setPayAmount(receiver.getInteger("amount")); + result.setCreateTime(currentDate); + result.setUpdateTime(currentDate); + result.setSharingStatus(EnumProfitSharingResultStatus.PROFIT_SHARING_RESULT_PENDING.getCode()); + wxProfitSharingResultMapper.insert(result); + }); + }catch (Exception e) { + logger.error("分账详细信息为null"); // return new ResultData(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID); - } - - return new ResultData(shareResult.getData()); } - return new ResultData(); + return new ResultData(shareResult.getData()); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java index e67f1e768..9d31a0704 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingReceiverServiceImpl.java @@ -128,20 +128,16 @@ public class WxProfitSharingReceiverServiceImpl implements WxProfitSharingReceiv receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); return wxProfitSharingReceiverMapper.findOne(receiver); } - + @Override - public List findReceivers(TenantEntity tenantEntity, Long merchantId,EnumAppPlat plat) { + public List findReceivers(TenantEntity tenantEntity,Long merchantId) { WxProfitSharingReceiver receiver = new WxProfitSharingReceiver(); receiver.updateTenantInfo(tenantEntity); receiver.setMerchantId(merchantId); - if (null != plat) { - receiver.setPlat(plat.getCode()); - } receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); return wxProfitSharingReceiverMapper.findList(receiver); } - @Override public ResultData addReceiver(WxMerchant merchant, WxProfitSharingReceiver receiver, List delList) { diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java index 571cf5e33..196cd4bf8 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java @@ -12,6 +12,7 @@ import com.iformall.enums.EnumPayMchType; import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumProfitSharingOrderType; import com.iformall.enums.EnumProfitSharingReceiverType; +import com.iformall.enums.EnumProfitSharingType; import com.iformall.exception.MallinkException; import com.iformall.service.pay.service.share.entity.ShareAccountResult; import com.iformall.service.pay.service.share.entity.PayShareCalculateAmount; @@ -49,7 +50,7 @@ public interface PayShareAdapterService { * @param ttPayWay * @return */ - List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay); + WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType); /** * 创建分账记录 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java index 5790e2732..f0cf100bd 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java @@ -319,8 +319,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ Map map = list.stream().collect(Collectors.toMap(WxCouponOrder::getOrderId, co -> co)); for (WxOrder o:list1) { WxCouponOrder co = map.get(o.getId()); - List receiverList = getReceiverList(payOrder, co.getBMerchantId(), payOrder.getTtPayWay()); - WxProfitSharingReceiver receiver = receiverList.get(0); + WxProfitSharingReceiver receiver = getReceiver(payOrder, co.getBMerchantId(), payOrder.getTtPayWay(),payOrder.getMchType()); WxComposeChildOrderShare childOrderShare = payOrder.getChildOrderShare(o.getId()); int darenTakeAmount = 0; if(EnumOrderCpsStatus.ORDER_IS_CPS.getCode().equals(o.getCpsStatus())){ @@ -401,7 +400,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ } @Override - public List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay) { + public WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); psReceiverQ.updateTenantInfo(tenantEntity); psReceiverQ.setMerchantId(merchantId); @@ -428,7 +427,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ if(list.size() > 1){ throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_UNKNOWN.getCode(),"该商户分账帐号异常."); } - return list; + return list.get(0); } } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java index 43fd756b1..925b9a63e 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java @@ -169,7 +169,7 @@ public class WxPayShareSFTService extends PayShareBaseAdapterService{ } @Override - public List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay) { + public WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { return null; } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java index 9cae6b194..eaa32e724 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java @@ -478,15 +478,18 @@ public class WxPayShareService extends PayShareBaseAdapterService{ wxProfitSharingOrderMapper.insert(record); } - List psReceiverList = getReceiverList(sharingOrderDto, sharingOrderDto.getMerchantId(), null); - record.setReceivers(calReceiversAmount(sharingOrderDto, psReceiverList)); - wxProfitSharingOrderMapper.updateById(record); - + WxProfitSharingReceiver psReceiver = getReceiver(sharingOrderDto, sharingOrderDto.getMerchantId(), null,mchType); + if (null != psReceiver) { + List psReceiverList = new ArrayList(); + psReceiverList.add(psReceiver); + record.setReceivers(calReceiversAmount(sharingOrderDto, psReceiverList)); + wxProfitSharingOrderMapper.updateById(record); + } return record; } @Override - public List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay) { + public WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); psReceiverQ.updateTenantInfo(tenantEntity); psReceiverQ.setMerchantId(merchantId); @@ -504,7 +507,7 @@ public class WxPayShareService extends PayShareBaseAdapterService{ } } } - return psReceiverList; + return psReceiverList.get(0); } private static String queryOrderShareAmount(String mchId,String transcationId,String apiKey) { diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java index b2c2f4740..7970765ee 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java @@ -117,17 +117,32 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ wxProfitSharingOrderMapper.insert(record); } //如果是总分模式,则需要加上收款账户 - if (mchType != EnumPayMchType.TOTAL.getCode()) { - List psReceiverList = getReceiverList(sharingOrderDto, sharingOrderDto.getMerchantId(), null); - record.setReceivers(calV3ReceiversAmount(sharingOrderDto, psReceiverList)); - wxProfitSharingOrderMapper.updateById(record); + if (mchType == EnumPayMchType.TOTAL.getCode()) { + WxProfitSharingReceiver psReceiver = getReceiver(sharingOrderDto, sharingOrderDto.getMerchantId(), null,mchType); + if (null != psReceiver) { + List psReceiverList = new ArrayList(); + psReceiverList.add(psReceiver); + record.setReceivers(calV3ReceiversAmount(sharingOrderDto, psReceiverList)); + wxProfitSharingOrderMapper.updateById(record); + } } return record; } @Override - public List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay) { - return wxProfitSharingReceiverService.findReceivers(tenantEntity, merchantId,EnumAppPlat.WX); + public WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) { + WxProfitSharingReceiver receiver = null; + //直连,必须是特约商户号 + if (EnumPayMchType.DIRECT.getCode() == mchType) { + receiver = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT_v2); + //总分 + }else if (EnumPayMchType.TOTAL.getCode() == mchType) { + receiver = wxProfitSharingReceiverService.findReceiver(tenantEntity, merchantId,EnumAppPlat.WX,EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT); + } + if (null == receiver) { + throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未设置分账账号."); + } + return receiver; } //无需分账,直接解冻