From 25b482cada4766d28e43a2f706d46c0eabfa9ba0 Mon Sep 17 00:00:00 2001 From: xhxu Date: Fri, 2 Sep 2022 17:01:38 +0800 Subject: [PATCH] // test --- .../service/impl/WxPayOrderServiceImpl.java | 47 +++++++++---------- .../maPay/WxMiniMaPayAdapterService.java | 15 +++++- .../appPay/WxMiniAppPayV3AdapterService.java | 4 +- .../share/douyin/TtPayShareService.java | 3 ++ 4 files changed, 41 insertions(+), 28 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 3d7c9cdf0..df91cc353 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -546,6 +546,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { return new ResultData(ErrorCode.PAY_ORDER_IS_NOT_PAYMENT); } WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); + PayShareAdapterService payShareServie = payServiceFactory.getPayShareAdapterService(payWay.getCode(),payAccount.getPayVersion()); EnumPayShare paySHareEnum = EnumPayShare.getEnum(payAccount.getShare()); if (paySHareEnum != null) { isShare = paySHareEnum; @@ -579,20 +580,29 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { record.setShare(isShare.getCode()); record.setComposeOrder(EnumComposeOrder.SINGLE.getCode()); - if (isShare == EnumPayShare.YES) { - // 分账金额 - int iChargeFee = OrderHelper.getMallCharge(record.getPayAmount(), payAccount); - Integer share_amount = record.getPayAmount() - iChargeFee; - record.setShareAmount(share_amount); - if(payAccount.getRealRate() != null) { - int iRealChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRealRate(), true); - record.setRateAmount(iRealChargeFee); - } - if (share_amount <= 0) { - isShare = EnumPayShare.NO; - record.setShare(isShare.getCode()); + Map childShares = new HashMap(); + Long merchant_id = null; + String merchant_uid = ""; + if(EnumPayMchType.DIRECT.equals(record.getMchType())){//直连模式记录收款商户 + merchant_id = user.getMerchantId(); + WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchant_id, null, record.getMchType()); +// merchant_uid = wxCouponChannelService.getCouponOneMerchantUid(payWay,merchant_id,o.getTenantId()); +// if(null == merchant_id || StringUtils.isBlank(merchant_uid)){ + if(receiver == null){ + throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); } + merchant_uid = receiver.getReceiverAccount(); } + int rate = payShareServie.getOfficialCommission(order,payAccount);//抖音分佣率 + logger.info("抖音分佣率"+rate); + PayShareCalculateAmount oShareAmount = payShareServie.calculateAmount(order.getPayment(),rate, payAccount); + logger.info("佣金明细"+ JSON.toJSONString(oShareAmount)); + int share_amount = oShareAmount.getShareAmount(); + int rate_amount = oShareAmount.getRateAmount(); + childShares.put(String.valueOf(order.getId()), new WxComposeChildOrderShare(oShareAmount,merchant_id,merchant_uid,order.getId())); + record.setShareAmount(share_amount); + record.setRateAmount(rate_amount); + record.setChildOrderShare(JSON.toJSONString(childShares)); int sqlRow = wxPayOrderMapper.insert(record); if (sqlRow != 1) { @@ -601,19 +611,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } } else { record = list.get(0); - if (null == record.getShare()) { - if (isShare == EnumPayShare.YES) { - int iChargeFee = OrderHelper.getMallCharge(record.getPayAmount(), payAccount); - Integer share_amount = record.getPayAmount() - iChargeFee; - if (share_amount <= 0) { - isShare = EnumPayShare.NO; - } - } - record.setShare(isShare.getCode()); - }else { - isShare = EnumPayShare.getEnum(record.getShare()); - } - payOrderNo = String.valueOf(record.getId()); } logger.debug("wxPayRecord md5 before:"+record.toString()); diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/maPay/WxMiniMaPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/maPay/WxMiniMaPayAdapterService.java index afae37b15..f75090c6e 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/maPay/WxMiniMaPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/maPay/WxMiniMaPayAdapterService.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import com.iformall.domain.po.*; +import com.iformall.service.order.entity.WxComposeChildOrderShare; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -43,6 +44,11 @@ import me.chanjar.weixin.common.error.WxErrorException; @Service public class WxMiniMaPayAdapterService extends BaseWxPayV2AdapterService implements CPassivePayService{ + protected String getMerchantUid(WxPayOrder payOrder,WxOrder order) { + WxComposeChildOrderShare share = payOrder.getChildOrderShare(order.getId()); + return share.getMerchantUid(); + } + private WxMicroPayOrderP generateWxMicroPayOrderP(WxPayAccount payAccount, WxComposeOrder composeOrder, String productName,WxPayOrder record, EnumPayShare isShare, WxAppinfo appInfo, Date currentDate,String bAppId,String bUserPhone) throws Exception { String noncestr = Utility.generate32UUID(); @@ -104,7 +110,14 @@ public class WxMiniMaPayAdapterService extends BaseWxPayV2AdapterService impleme wxPayOrderSP.setAppid(appInfo.getParentAppId()); wxPayOrderSP.setMch_id(payAccount.getMchId()); wxPayOrderSP.setSub_appid(appInfo.getAppId()); - wxPayOrderSP.setSub_mch_id(payAccount.getSubMchId()); + if (record.getMchType() == EnumPayMchType.DIRECT.getCode()) { + wxPayOrderSP.setSub_mch_id(getMerchantUid(record,composeOrder.getSingleOrder())); + //总分 + }else if (record.getMchType() == EnumPayMchType.TOTAL.getCode()) { + wxPayOrderSP.setSub_mch_id(payAccount.getSubMchId()); + }else { + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"当前支付模式非法"); + } wxPayOrderSP.setDevice_info(bUserPhone); wxPayOrderSP.setNonce_str(noncestr); wxPayOrderSP.setBody(productName); diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java index 0608b3cbd..a073ffbc6 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java @@ -77,10 +77,10 @@ public class WxMiniAppPayV3AdapterService extends BaseWxPayV3AdapterService impl req.setSp_mchid(payAccount.getMchId()); req.setSub_appid(appInfo.getAppId()); //直连 - if (payAccount.getMchType() == EnumPayMchType.DIRECT.getCode()) { + if (record.getMchType() == EnumPayMchType.DIRECT.getCode()) { req.setSub_mchid(getMerchantUid(record,composeOrder.getSingleOrder())); //总分 - }else if (payAccount.getMchType() == EnumPayMchType.TOTAL.getCode()) { + }else if (record.getMchType() == EnumPayMchType.TOTAL.getCode()) { req.setSub_mchid(payAccount.getSubMchId()); }else { throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"当前支付模式非法"); 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 f95ea42b6..19a97959d 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 @@ -267,6 +267,9 @@ public class TtPayShareService extends PayShareBaseAdapterService{ @Override public int getOfficialCommission(WxOrder o, WxPayAccount payAccount) { + if(!EnumOrderType.COUPON.getCode().equals(o.getType())){ + return 0; + } Long couponId = wxCouponChannelMapper.findCouponIdById(o.getCouponChannelId(), o.getTenantId()); Integer categoryId = wxCouponMapper.findCategoryIdById(couponId,o.getTenantId()); if(categoryId != null){