From dada6627b182f64de30d1f42c3072902bdd9dad5 Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 3 Aug 2022 16:18:37 +0800 Subject: [PATCH] =?UTF-8?q?//=20=E7=9B=B4=E8=BF=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration/V2022072800001__pay_account.sql | 204 +++++++++++++++++- .../controller/WxOrderController.java | 15 +- .../java/com/iformall/common/ErrorCode.java | 1 + .../java/com/iformall/domain/po/WxCoupon.java | 4 +- .../com/iformall/domain/po/WxPayAccount.java | 16 ++ .../com/iformall/domain/po/WxPayOrder.java | 6 +- .../pay/enums/MerchantImportStatus.java | 41 ++++ .../service/WxCouponChannelService.java | 3 + .../service/WxProfitSharingOrderService.java | 2 +- .../WxProfitSharingReceiverService.java | 1 + .../impl/WxCouponChannelServiceImpl.java | 31 ++- .../impl/WxCouponOrderServiceImpl.java | 101 ++++----- .../service/impl/WxCouponServiceImpl.java | 166 +++++++++----- .../service/impl/WxMerchantServiceImpl.java | 48 ++--- .../service/impl/WxOrderServiceImpl.java | 36 +++- .../service/impl/WxPayOrderServiceImpl.java | 36 +++- .../impl/WxProfitSharingOrderServiceImpl.java | 10 +- .../entity/WxComposeChildOrderShare.java | 8 +- .../service/order/entity/WxComposeOrder.java | 2 + .../pay/douyin/miniApp/EnumTtPayChannel.java | 36 ++++ .../miniApp/TtMiniAppPayAdapterService.java | 4 + .../service/share/PayShareAdapterService.java | 6 +- .../share/douyin/TtPayShareService.java | 70 ++++-- .../service/share/wx/WxPayShareService.java | 40 +++- .../resources/mapper/WxPayOrderMapper.xml | 3 +- 25 files changed, 677 insertions(+), 213 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/douyin/pay/enums/MerchantImportStatus.java create mode 100644 mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/EnumTtPayChannel.java diff --git a/mallinkAdmin/src/main/resources/db/migration/V2022072800001__pay_account.sql b/mallinkAdmin/src/main/resources/db/migration/V2022072800001__pay_account.sql index 42791c312..e21afda25 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2022072800001__pay_account.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2022072800001__pay_account.sql @@ -1,3 +1,205 @@ ALTER TABLE `mallink`.`wx_pay_account` ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `type`, -ADD COLUMN `open_pay` json COMMENT '总分模式开通收款方式状态' AFTER `mch_type`; \ No newline at end of file +ADD COLUMN `open_pay` json COMMENT '总分模式开通收款方式状态' AFTER `mch_type`; + + +ALTER TABLE `mallink`.`wx_pay_order_0` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_1` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_2` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_3` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_4` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_5` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_6` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_7` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_8` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_9` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_10` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_11` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_12` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_13` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_14` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_15` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_16` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_17` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_18` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_19` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_20` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_21` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_22` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_23` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_24` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_25` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_26` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_27` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_28` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_29` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_30` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_31` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_32` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_33` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_34` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_35` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_36` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_37` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_38` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_39` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_40` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_41` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_42` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_43` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_44` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_45` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_46` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_47` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_48` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_49` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_50` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_51` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_52` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_53` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_54` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_55` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_56` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_57` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_58` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_59` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_60` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_61` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_62` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_63` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_64` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_65` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_66` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_67` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_68` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_69` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_70` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_71` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_72` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_73` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_74` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_75` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_76` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_77` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_78` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_79` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_80` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_81` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_82` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_83` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_84` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_85` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_86` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_87` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_88` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_89` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_90` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_91` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_92` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_93` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_94` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_95` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_96` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_97` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_98` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; +ALTER TABLE `mallink`.`wx_pay_order_99` +ADD COLUMN `mch_type` smallint(2) DEFAULT 0 COMMENT '0:总分,1:直连' AFTER `pay_param`; diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index 115ee0248..d03805595 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -252,20 +252,9 @@ public class WxOrderController extends BaseController { data.put("out_order_no",order.getMainOrderId().toString()); data.put("pay_expire_seconds",14*60); data.put("order_entry_schema",wxOrderService.getOrderEntrySchema(order.getMainOrderId())); - - List> order_goods_info = new ArrayList<>(); - for (CreateOrderCallback.Good good:createOrderCallback.getGoods()) { - Map map_info = new HashMap<>(); - map_info.put("goods_id",good.getGoodsId()); - if("1028".equals(order.getTenantId())){ - map_info.put("merchant_uid","71228500084451433283"); - }else if("1030".equals(order.getTenantId())){ - map_info.put("merchant_uid","71252541927546739583"); - } - order_goods_info.add(map_info); + if(order.getExtParam() != null && !order.getExtParam().isEmpty()){ + data.put("order_goods_info",order.getExtParam()); } - data.put("order_goods_info",order_goods_info); - // List> goodsValid = new ArrayList<>(); diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 4c42bd6a1..7ca2a448f 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -341,6 +341,7 @@ public enum ErrorCode{ PAY_ORDER_IS_NOT_PAYMENT(12005, "不是支付订单"), PREPAY_ID_IS_EMPTY(12006, "prepay_id是空值"), PAY_ORDER_QUERY_ERROR(12007, "支付订单查询异常"), + PAY_ORDER_MERCHANT_UID_ERROR(12008, "直连模式,收款商户异常"), REFUND_ORDER_EXIST(12010, "退款订单已存在"), REFUND_PAY_ORDER_IS_NOT_EXIST(12011, "退款支付订单不存在"), diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java index e88fa754d..220c2618d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java @@ -440,7 +440,7 @@ public class WxCoupon extends TenantEntity { return false; } - public boolean validDate(boolean isShare,boolean hasShareAmount,Date curr) { + public boolean validDate(boolean isShare,Date curr) { if(this.getType().equals(EnumCouponType.COUPON_DOUYIN.getCode())){ return true; } @@ -464,7 +464,7 @@ public class WxCoupon extends TenantEntity { // } } - public Date getRealValidDate(boolean isShare,boolean hasShareAmount,Date curr) { + public Date getRealValidDate(Date curr) { //券都上架卖出去了还判断个什么有效期 // Map retMap = calcuteValidDate(isShare,hasShareAmount,curr); // return (Date) retMap.get("realDate"); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java index a51db7441..904177093 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java @@ -1,9 +1,12 @@ package com.iformall.domain.po; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.douyin.pay.orderQuery.QueryMerchantResult; import lombok.Data; import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.StringUtils; @TableName(value = "wx_pay_account") @Data @@ -71,4 +74,17 @@ public class WxPayAccount extends TenantEntity { // @io.swagger.annotations.ApiModelProperty(value="app平台 EnumAppPlat ",name="plat") // private Integer plat; + + public QueryMerchantResult getOpenPayResult(){ + QueryMerchantResult openPayResult = null; + try{ + if(StringUtils.isNotBlank(this.openPay)) { + openPayResult = JSON.parseObject(this.openPay, QueryMerchantResult.class); + } + }catch(Exception e){} + if(openPayResult == null){ + openPayResult = new QueryMerchantResult(); + } + return openPayResult; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java index 7c81ea827..31cc76c63 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java @@ -61,6 +61,8 @@ public class WxPayOrder extends TenantEntity { private boolean creatPay; @io.swagger.annotations.ApiModelProperty(value="支付额外参数",name="payParam") private String payParam; + @io.swagger.annotations.ApiModelProperty(value="EnumPayMchType 0:总分1:直连",name="mchType") + private Integer mchType; @io.swagger.annotations.ApiModelProperty(value="分账状态: 0-未分账;1-分账",name="payOrderStatus") private Integer share; @io.swagger.annotations.ApiModelProperty(value="分账金额(总金额扣除手续费后的金额)",name="shareAmount") @@ -74,13 +76,13 @@ public class WxPayOrder extends TenantEntity { public WxComposeChildOrderShare getChildOrderShare(Long wxOrderId) { if (StringUtils.isBlank(this.childOrderShare)) { - return new WxComposeChildOrderShare(this.payAmount, this.shareAmount, this.rateAmount,null,null); + return new WxComposeChildOrderShare(this.payAmount, this.shareAmount, this.rateAmount,null,null,null); } Map childs = JSON.parseObject(this.childOrderShare, Map.class); JSONObject childOrderShare = (JSONObject) childs.get(String.valueOf(wxOrderId)); if (null != childOrderShare) { return new WxComposeChildOrderShare(childOrderShare.getInteger("realPayMent"), childOrderShare.getInteger("shareAmount"), childOrderShare.getInteger("rateAmount"), - childOrderShare.getInteger("realRateAmount"), childOrderShare.getInteger("commissionAmount")); + childOrderShare.getInteger("realRateAmount"), childOrderShare.getInteger("commissionAmount"), childOrderShare.getString("merchantUid")); } return null; } diff --git a/mallinkService/src/main/java/com/iformall/douyin/pay/enums/MerchantImportStatus.java b/mallinkService/src/main/java/com/iformall/douyin/pay/enums/MerchantImportStatus.java new file mode 100644 index 000000000..18650a7d8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/pay/enums/MerchantImportStatus.java @@ -0,0 +1,41 @@ +package com.iformall.douyin.pay.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum MerchantImportStatus { + + //0-未进件、1-进件成功、2-进件失败、3-审核中、4-冻结中 + + improt_no(0, "未进件"), + improt_success(1, "进件成功"), + improt_fail(2, "进件失败"), + improt_ing(3, "审核中"), + improt_freeze(4, "冻结中"), + ; + + public static MerchantImportStatus getEnum(Integer code) { + for (MerchantImportStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + MerchantImportStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java index 335b5907d..998828c82 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java @@ -9,6 +9,7 @@ import com.iformall.domain.vo.TtCouponChannelVo; import com.iformall.domain.vo.WxCouponCVo; import com.iformall.domain.vo.WxCouponChannelAddVo; import com.iformall.domain.vo.WxCouponChannelVo; +import com.iformall.enums.EnumPayWay; import java.util.Date; import java.util.List; @@ -82,4 +83,6 @@ public interface WxCouponChannelService { PageInfo ttChannelList(TtCouponChannelVo ttChannelVo, Integer pageNum, Integer pageSize); ResultData updateOnline(WxCouponChannel wxCouponChannel); + + String getCouponOneMerchantUid(EnumPayWay payWay,Long couponChannelId, String tenantId); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java index 57ca186c7..a61483711 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 share); + ResultData createSharingOrder(WxSharingOrderDto wxSharingOrderDto,Integer payway,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 0c19bbea1..7581bc7c8 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitSharingReceiverService.java @@ -59,4 +59,5 @@ public interface WxProfitSharingReceiverService { ResultData getTtReceiverBalanceURL(WxMerchant merchant, String appId, String payAccountKey); ResultData updateTtReceiverIsUse(WxMerchant merchant, String appId, String payAccountKey); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java index 9e9dced08..15b329740 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java @@ -6,11 +6,8 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; -import com.iformall.domain.po.TtCouponChannelPoi; +import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxCouponChannel; -import com.iformall.domain.po.WxMall; import com.iformall.domain.po.msg.FmInsideProductPushMsg; import com.iformall.domain.vo.*; import com.iformall.enums.*; @@ -18,6 +15,7 @@ import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.mq.MqBaseProducer; import com.iformall.service.*; +import com.iformall.service.pay.PayServiceFactory; import com.iformall.utils.Constant; import com.iformall.utils.RedisLock; @@ -91,6 +89,12 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { @Autowired private MqBaseProducer mqBaseProducer; + + @Autowired + private PayServiceFactory payServiceFactory; + + @Autowired + private WxProfitSharingReceiverMapper wxProfitSharingReceiverMapper; /** * B端业务端 @@ -824,6 +828,25 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { return new ResultData(); } + @Override + public String getCouponOneMerchantUid(EnumPayWay payWay,Long couponChannelId, String tenantId) { + WxCouponChannel couponChannel = wxCouponChannelMapper.selectById(couponChannelId, tenantId); + List merchantIds = wxCouponMerchantMapper.findMerchantIdListByProduct(couponChannel.getCouponId(), tenantId); + if(merchantIds != null && merchantIds.size() == 1){ + WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); + psReceiverQ.setTenantId(tenantId); + psReceiverQ.setMerchantId(merchantIds.get(0)); + psReceiverQ.setSharingType(payServiceFactory.getPayShareAdapterService(payWay.getCode()).getProfitSharingType()); + psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + psReceiverQ.setPlat(payWay.getPlat().getCode()); + List psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); + if(psReceiverList != null && psReceiverList.size() == 1){ + return psReceiverList.get(0).getReceiverAccount(); + } + } + return null; + } + @Override public WxCouponChannel getPriceAndStock(TenantEntity tenantEntity, Long couponChannelId) { return wxCouponChannelMapper.getPriceAndStock(couponChannelId, tenantEntity.getTenantId()); 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 804fd56e6..5516e0d17 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -20,6 +20,7 @@ import com.iformall.domain.po.msg.FmInsideCouponVerifyMsg; import com.iformall.domain.po.msg.MpAppMsg; import com.iformall.domain.po.msg.SmartAppMsg; import com.iformall.domain.vo.*; +import com.iformall.douyin.pay.enums.MerchantImportStatus; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; @@ -31,6 +32,7 @@ import com.iformall.service.order.OrderFactory; import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.order.util.OrderHelper; import com.iformall.service.pay.PayServiceFactory; +import com.iformall.service.pay.service.pay.douyin.miniApp.EnumTtPayChannel; import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; import com.iformall.utils.PayUtils; @@ -1296,34 +1298,17 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } if(merchantId != null){ - //如果开启了分账,就必须要配置分账账号 - WxAppinfo appInfo = getAppinfo(couponOrder,couponOrder.getPayVendor()); - WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); - WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); - psReceiverQ.updateTenantInfo(payAccount); - psReceiverQ.setMerchantId(merchantId); - psReceiverQ.setSharingType(payServiceFactory.getPayShareAdapterService(couponOrder.getPayVendor()).getProfitSharingType()); - psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - psReceiverQ.setPlat(appInfo.getPlat()); - if(EnumAppPlat.TOUTIAO.getCode().equals(psReceiverQ.getPlat())){ - psReceiverQ.setIsUse(EnumProfitSharingUse.YES.getCode()); + WxPayOrder wxPayOrderQ = new WxPayOrder(); + wxPayOrderQ.updateTenantInfo(couponOrder); + wxPayOrderQ.setOrderId(couponOrder.getComposeOrderId()); + wxPayOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + 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()) + .getReceiverList(couponOrder, merchantId, wxPayOrder.getTtPayWay()); } - List psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); - if (null == payAccount.getShare()) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该租户payAccount未设置分账."); - } - if (EnumPayShare.YES.getCode().intValue() == payAccount.getShare().intValue()) { - if (null == psReceiverList || psReceiverList.size() == 0) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未设置分账账号."); - }else { - for (WxProfitSharingReceiver receiver:psReceiverList) { - if (EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID.getCode().intValue() - == receiver.getReceiverType().intValue()) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户收款账号存在个人微信号方式,微信已停止支持,请重新设置."); - } - } - } - } + } int num = 0; @@ -1582,21 +1567,23 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override public void actionAfterVerify(WxCouponOrder couponOrder, WxMerchant merchant) { - //如果是组合的,则为多次 - if (EnumComposeOrder.isSingle(couponOrder.getComposeOrderType())) { - try { - // 核销分账 - shareAfterVerify(couponOrder, merchant.getId(),couponOrder.getPayVendor(),false); - } catch (Exception e) { - logger.error("核销记账失败"+e.getMessage(),e); - } - }else { - try { - // 核销分账 - shareAfterVerify(couponOrder, merchant.getId(),couponOrder.getPayVendor(),true); - } catch (Exception e) { - logger.error("核销记账失败"+e.getMessage(),e); + try { + boolean mulityShare = true; + if(EnumComposeOrder.isSingle(couponOrder.getComposeOrderType())){ + mulityShare = false; + }else{ + WxOrder wxOrderQ = new WxOrder(); + wxOrderQ.updateTenantInfo(couponOrder); + wxOrderQ.setComposeOrderId(couponOrder.getComposeOrderId()); + Integer count = wxOrderMapper.countList(wxOrderQ); + if(count.intValue() == 1){ + mulityShare = false; + } } + // 核销分账 + shareAfterVerify(couponOrder, merchant.getId(),couponOrder.getPayVendor(),mulityShare); + } catch (Exception e) { + logger.error("核销记账失败"+e.getMessage(),e); } try { @@ -1607,14 +1594,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } boolean bSentCoupon = false; - // 核销发券 try { bSentCoupon = sendCouponAfterVerify(couponOrder); } catch (Exception e) { logger.error("核销记账失败"+e.getMessage(),e); } - // 核销发模板消息 try { sendVerifyMsg(couponOrder, merchant, bSentCoupon); @@ -1691,7 +1676,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { wxPayOrder.setOrderId(couponOrder.getComposeOrderId()); wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder)); - if(wxPayOrder != null && EnumPayShare.NO.getCode().equals(wxPayOrder.getShare())){ + if(wxPayOrder != null && EnumPayMchType.TOTAL.getCode().equals(wxPayOrder.getMchType()) + && EnumPayShare.NO.getCode().equals(wxPayOrder.getShare())){ try { // 订单购买时未分账 核销记账,并且往账户里面记帐 if (couponOrder.getCouponPrice() > 0) { @@ -1700,17 +1686,10 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } catch (Exception e) { logger.error("核销记账失败"+e.getMessage(),e); } - }else if(wxPayOrder != null){ - WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); - psReceiverQ.updateTenantInfo(wxPayOrder); - psReceiverQ.setMerchantId(merchantId); - psReceiverQ.setSharingType(payServiceFactory.getPayShareAdapterService(payWay).getProfitSharingType()); - psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - psReceiverQ.setPlat(EnumPayWay.getEnum(payWay).getPlat().getCode()); - if(EnumAppPlat.TOUTIAO.getCode().equals(psReceiverQ.getPlat())){ - psReceiverQ.setIsUse(EnumProfitSharingUse.YES.getCode()); - } - List psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); + }else if(wxPayOrder != null && EnumPayMchType.TOTAL.getCode().equals(wxPayOrder.getMchType())){ + List psReceiverList = payServiceFactory.getPayShareAdapterService(payWay) + .getReceiverList(wxPayOrder,merchantId,wxPayOrder.getTtPayWay()); + if (psReceiverList == null || psReceiverList.size() == 0) { try { // 查询不到分账帐号,往账户里面记帐 @@ -1741,7 +1720,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); wxSharingOrderDto.updateTenantInfo(wxPayOrder); wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); - wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,payWay,wxPayOrder.getShare()); + wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,payWay,wxPayOrder.getMchType(),wxPayOrder.getShare()); } } catch (Exception e) { logger.error("微信分账: " + e.getMessage()); @@ -2671,12 +2650,14 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); } } + EnumPayShare isShare = EnumPayShare.NO; WxAppinfo appInfo = wxAppinfoService.getCAppInfo(bUser,payWay.getPlat()); WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); - EnumPayShare isShare = EnumPayShare.NO; - if (payAccount.checkShare()) { - isShare = EnumPayShare.YES; - } + EnumPayShare paySHareEnum = EnumPayShare.getEnum(payAccount.getShare()); + if (paySHareEnum != null) { + isShare = paySHareEnum; + } + final Integer shareCode = isShare.getCode(); // 添加payOrder final IdWorker idWorker = IdWorker.get(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java index b79461b70..f2c517efc 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -19,6 +19,8 @@ import com.iformall.domain.vo.*; import com.iformall.domain.vo.excel.WxCardData; import com.iformall.domain.vo.excel.WxCouponData; import com.iformall.domain.vo.excel.WxPressData; +import com.iformall.douyin.pay.enums.MerchantImportStatus; +import com.iformall.douyin.pay.orderQuery.QueryMerchantResult; import com.iformall.douyin.web.bean.GoodsTemplateGet; import com.iformall.enums.*; import com.iformall.exception.MallinkException; @@ -429,54 +431,11 @@ public class WxCouponServiceImpl implements WxCouponService { } } - List merchantParamList = JSONObject.parseArray(record.getMerchantParams(), JSONObject.class); - //有价券判断商户是否配置了分账账号 - if (!EnumCouponType.COUPON_GIFT.getCode().equals(record.getType()) - && record.getSalePrice() != null && record.getSalePrice() > 0) { - boolean share = false; - WxPayAccount payQ = new WxPayAccount(); - payQ.updateTenantInfo(record); - - try { - WxPayAccount payAccount = payAccountMapper.selectOne(new QueryWrapper<>(payQ)); - if (payAccount != null) { - share = payAccount.checkShare(); - } - } catch (Exception e) { - logger.error(e.getMessage()); - } - - if (share) { - StringBuilder sb = new StringBuilder(); - boolean flag = false; - for (int i = 0, size = merchantParamList.size(); i < size; i++) { - JSONObject jsonObject = merchantParamList.get(i); - Long id = jsonObject.getLong("id"); - WxMerchant wxMerchant = new WxMerchant(); - wxMerchant.setId(id); - WxMerchant merchant = wxMerchantMapper.selectById(id); - if (null == merchant) { - flag = true; - sb.append("[未查询到商户信息]"); - }else { - WxProfitSharingReceiver wxProfitSharingReceiverQ = new WxProfitSharingReceiver(); - wxProfitSharingReceiverQ.updateTenantInfo(record); - wxProfitSharingReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); -// wxProfitSharingReceiverQ.setIsUse(EnumProfitSharingUse.YES.getCode()); - wxProfitSharingReceiverQ.setMerchantId(id); - WxProfitSharingReceiver receiver = wxProfitSharingReceiverMapper.findOne(wxProfitSharingReceiverQ); - if (null == receiver || receiver.getId() == null) { - flag = true; - sb.append("[").append(merchant.getName()).append("]"); - } - } - } - if (flag) { - String message = sb.toString(); - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "商户:" + message + "还未配置分账账户"); - } - } + ResultData resultData = checkCouponMerchantReceiver(record); + if(resultData.code != 200){ + return resultData; } + List merchantParamList = JSONObject.parseArray(record.getMerchantParams(), JSONObject.class); final IdWorker idWorker = IdWorker.get(); if (record.getId() == null) { @@ -666,6 +625,106 @@ public class WxCouponServiceImpl implements WxCouponService { return new ResultData(record.getId()); } + private ResultData checkCouponMerchantReceiver(WxCoupon record){ + List merchantParamList = JSONObject.parseArray(record.getMerchantParams(), JSONObject.class); + if(EnumCouponType.COUPON_GIFT.getCode().equals(record.getType())){ + return new ResultData(); + } + if((merchantParamList == null || merchantParamList.isEmpty())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "未选择对应门店"); + } + if(record.getSalePrice() != null && record.getSalePrice() > 0) { + //todo 目前模式下券只能在一个平台下卖,即一个广场只有一个C端 + WxAppinfo cAppInfo = wxAppinfoService.getCAppInfo(record, null); + if (cAppInfo == null) { + return new ResultData(ErrorCode.APP_ID_NOT_FOUND); + } + EnumAppPlat plat = EnumAppPlat.WX; + EnumAppPlat platEnum = EnumAppPlat.getByCode(cAppInfo.getPlat()); + if (platEnum != null) { + plat = platEnum; + } + WxPayAccount payAccount = payAccountMapper.selectById(cAppInfo.getPayId()); + if (payAccount == null) { + return new ResultData(ErrorCode.APP_ID_NOT_FOUND); + } + EnumPayMchType payMchType = EnumPayMchType.TOTAL; + EnumPayShare isShare = EnumPayShare.NO; + + EnumPayMchType payMchTypeEnum = EnumPayMchType.getEnum(payAccount.getMchType()); + if (payMchTypeEnum != null) { + payMchType = payMchTypeEnum; + } + if (EnumPayMchType.DIRECT.equals(payMchType)) { + isShare = EnumPayShare.NO; + } else { + EnumPayShare paySHareEnum = EnumPayShare.getEnum(payAccount.getShare()); + if (paySHareEnum != null) { + isShare = paySHareEnum; + } + } + + if (EnumPayMchType.DIRECT.equals(payMchType)) { + if (merchantParamList.size() > 1) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "直连模式只能选择一个对应门店"); + } + Long merchantId = merchantParamList.get(0).getLong("id"); + WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); + psReceiverQ.updateTenantInfo(record); + psReceiverQ.setMerchantId(merchantId); + psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + psReceiverQ.setPlat(plat.getCode()); + WxProfitSharingReceiver one = wxProfitSharingReceiverMapper.findOne(psReceiverQ); + if (one == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "对应门店至少进件一种支付模式"); + } + if (EnumAppPlat.TOUTIAO.equals(plat)) { + if (!MerchantImportStatus.improt_success.getCode().equals(one.getWxImportStatus()) + && !MerchantImportStatus.improt_success.getCode().equals(one.getAlipayImportStatus()) + && !MerchantImportStatus.improt_success.getCode().equals(one.getHzImportStatus())) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "对应门店至少进件一种支付模式"); + } + } + } else if (EnumPayShare.YES.equals(isShare)) { + for (int i = 0, size = merchantParamList.size(); i < size; i++) { + JSONObject jsonObject = merchantParamList.get(i); + Long id = jsonObject.getLong("id"); + WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); + psReceiverQ.updateTenantInfo(record); + psReceiverQ.setMerchantId(id); + psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + psReceiverQ.setPlat(plat.getCode()); + WxProfitSharingReceiver one = wxProfitSharingReceiverMapper.findOne(psReceiverQ); + int n = i + 1; + if (one == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "第(" + n + ")个商户还未配置分账账户或未进件"); + } + if (EnumAppPlat.TOUTIAO.equals(plat)) { + QueryMerchantResult openPayResult = payAccount.getOpenPayResult(); + if(!EnumYesOrNo.YES.getCode().equals(openPayResult.getAlipay()) + && !EnumYesOrNo.YES.getCode().equals(openPayResult.getWx()) + && !EnumYesOrNo.YES.getCode().equals(openPayResult.getHz())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "分账模式未设置开通支付渠道"); + } + if(EnumYesOrNo.YES.getCode().equals(openPayResult.getAlipay()) + && !MerchantImportStatus.improt_success.getCode().equals(one.getAlipayImportStatus())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "第(" + n + ")个商户未进件支付宝"); + } + if(EnumYesOrNo.YES.getCode().equals(openPayResult.getWx()) + && !MerchantImportStatus.improt_success.getCode().equals(one.getWxImportStatus())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "第(" + n + ")个商户未进件微信"); + } + if(EnumYesOrNo.YES.getCode().equals(openPayResult.getHz()) + && !MerchantImportStatus.improt_success.getCode().equals(one.getHzImportStatus())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "第(" + n + ")个商户未进件抖音"); + } + } + } + } + } + return new ResultData(); + } + @Override public ResultData updateTtProduct(WxCoupon record) { if(StringUtils.isBlank(record.getProductAttrs()) || StringUtils.isBlank(record.getSkuAttrs())){ @@ -1137,12 +1196,17 @@ public class WxCouponServiceImpl implements WxCouponService { //有价券开启了分账,必须在30天以内。,停车券,积分券,积分停车券,卡无次限制 @Override public boolean validCouponDate(WxCoupon wxCoupon) { + EnumPayShare isShare = EnumPayShare.NO; WxPayAccount payAccount = payAccountMapper.getByTenantId(wxCoupon.getTenantId()); - boolean isShare = false; - if (payAccount.checkShare()) { - isShare = true; + EnumPayShare paySHareEnum = EnumPayShare.getEnum(payAccount.getShare()); + if (paySHareEnum != null) { + isShare = paySHareEnum; + } + if (EnumPayShare.YES.equals(isShare)) { + return wxCoupon.validDate(true,new Date()); + }else{ + return wxCoupon.validDate(false,new Date()); } - return wxCoupon.validDate(isShare,true,new Date()); } @Override 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 6b7c2220b..3d252494c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -1005,16 +1005,16 @@ public class WxMerchantServiceImpl implements WxMerchantService { } } - List isUseMerchantIds = new ArrayList(); - if(record.getIsUse() != null){ - WxProfitSharingReceiver wxProfitSharingReceiver = new WxProfitSharingReceiver(); - wxProfitSharingReceiver.updateTenantInfo(record); - wxProfitSharingReceiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_DOUYIN.getCode()); - wxProfitSharingReceiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - wxProfitSharingReceiver.setPlat(EnumAppPlat.TOUTIAO.getCode()); - wxProfitSharingReceiver.setIsUse(EnumProfitSharingUse.YES.getCode()); - isUseMerchantIds = wxProfitSharingReceiverMapper.findMerchantIdList(wxProfitSharingReceiver); - } +// List isUseMerchantIds = new ArrayList(); +// if(record.getIsUse() != null){ +// WxProfitSharingReceiver wxProfitSharingReceiver = new WxProfitSharingReceiver(); +// wxProfitSharingReceiver.updateTenantInfo(record); +// wxProfitSharingReceiver.setSharingType(EnumProfitSharingType.PROFIT_SHARING_TYPE_DOUYIN.getCode()); +// wxProfitSharingReceiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); +// wxProfitSharingReceiver.setPlat(EnumAppPlat.TOUTIAO.getCode()); +// wxProfitSharingReceiver.setIsUse(EnumProfitSharingUse.YES.getCode()); +// isUseMerchantIds = wxProfitSharingReceiverMapper.findMerchantIdList(wxProfitSharingReceiver); +// } List merchantIds = new ArrayList(); String phone = StringUtils.trimToNull(record.getPhone()); @@ -1043,13 +1043,13 @@ public class WxMerchantServiceImpl implements WxMerchantService { } } - if(EnumProfitSharingUse.YES.getCode().equals(record.getIsUse())){ - if(merchantIds.size() > 0){ - merchantIds.retainAll(isUseMerchantIds); - }else{ - merchantIds.addAll(isUseMerchantIds); - } - } +// if(EnumProfitSharingUse.YES.getCode().equals(record.getIsUse())){ +// if(merchantIds.size() > 0){ +// merchantIds.retainAll(isUseMerchantIds); +// }else{ +// merchantIds.addAll(isUseMerchantIds); +// } +// } if (merchantIds.size() > 0 ) { record.setIds(merchantIds); @@ -1067,13 +1067,13 @@ public class WxMerchantServiceImpl implements WxMerchantService { // record.setNotInids(usedMerchantIds); } } - if(EnumProfitSharingUse.NO.getCode().equals(record.getIsUse())){ - if(noMerchantIds.size() > 0){ - noMerchantIds.retainAll(isUseMerchantIds); - }else{ - noMerchantIds.addAll(isUseMerchantIds); - } - } +// if(EnumProfitSharingUse.NO.getCode().equals(record.getIsUse())){ +// if(noMerchantIds.size() > 0){ +// noMerchantIds.retainAll(isUseMerchantIds); +// }else{ +// noMerchantIds.addAll(isUseMerchantIds); +// } +// } if(noMerchantIds.size() > 0){ record.setNotInids(noMerchantIds); 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 23b2518d0..0b8d85e54 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -1318,15 +1318,15 @@ public class WxOrderServiceImpl implements WxOrderService { } } - boolean hasShareAmount = false; - if (payOrder != null && payOrder.getShareAmount() != null) { - hasShareAmount = true; - } - boolean isShare = false; - if (null != payOrder && null != payOrder.getShare() && payOrder.getShare().intValue() > 0) { - isShare = true; - } - valid_date = coupon.getRealValidDate(isShare,hasShareAmount,curr); +// boolean hasShareAmount = false; +// if (payOrder != null && payOrder.getShareAmount() != null) { +// hasShareAmount = true; +// } +// boolean isShare = false; +// if (null != payOrder && null != payOrder.getShare() && payOrder.getShare().intValue() > 0) { +// isShare = true; +// } + valid_date = coupon.getRealValidDate(curr); boolean isCard = false; // 检查是否是储值卡 @@ -2558,7 +2558,7 @@ public class WxOrderServiceImpl implements WxOrderService { sharingOrder.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); sharingOrder.updateTenantInfo(wxPayOrder); sharingOrder.setTransactionId(wxPayOrder.getTransactionId()); - wxProfitSharingOrderService.createSharingOrder(sharingOrder,payWay.getCode(),wxPayOrder.getShare()); + wxProfitSharingOrderService.createSharingOrder(sharingOrder,payWay.getCode(),wxPayOrder.getMchType(),wxPayOrder.getShare()); } else { logger.error("微信分账: 未找到payorder or merchant at orderid-" + orderId); } @@ -3628,7 +3628,11 @@ public class WxOrderServiceImpl implements WxOrderService { public ResultData handlerPushOrder(TenantEntity tenantEntity, Long composeOrderId, String batchExtParam, List goods) { WxBatchOrder wxBatchOrder = this.getWxBatchOrder(tenantEntity, composeOrderId); if(wxBatchOrder == null){ - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到订单"); + return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); + } + WxPayOrder payOrder = wxPayOrderService.getById(composeOrderId, tenantEntity.getTenantId()); + if(payOrder == null){ + return new ResultData(ErrorCode.PAY_ORDER_NOT_FOUND); } WxBatchOrder updBatchOrder = new WxBatchOrder(); updBatchOrder.updateTenantInfo(tenantEntity); @@ -3643,10 +3647,18 @@ public class WxOrderServiceImpl implements WxOrderService { Map> collect = childOrders.stream().collect(groupingBy(WxOrder::getCouponChannelId)); Map maps = goods.stream().collect(Collectors.toMap(CreateOrderCallback.Good::getGoodsId, Function.identity())); if(collect.keySet().size() == goods.size()){ + List> order_goods_info = new ArrayList<>(); for (Long key: collect.keySet()) { List wxOrders = collect.get(key); TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectByChannelId(tenantEntity.getTenantId(),key); CreateOrderCallback.Good good = maps.get(ttCouponChannelPoi.getSpuId()); + if(EnumPayMchType.DIRECT.getCode().equals(payOrder.getMchType())){ + Map map_info = new HashMap<>(); + map_info.put("goods_id",good.getGoodsId()); + WxComposeChildOrderShare childOrderShare = payOrder.getChildOrderShare(wxOrders.get(0).getId()); + map_info.put("merchant_uid",childOrderShare.getMerchantUid()); + order_goods_info.add(map_info); + } if(wxOrders.size() == good.getItemOrderInfoList().size()){ for(int i=0;i> map = wxOrderCouponVos.stream().collect(Collectors.groupingBy(WxOrderCouponVo::getComposeOrderId)); return map; } + // private List batchOderToOrderCouponVoList(List batchOrderList) { // if (null == batchOrderList || batchOrderList.size() <= 0 ) { // return null; 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 6fa576db2..611265ff3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -128,6 +128,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { @Autowired OrderSnapshotService orderSnapshotService; + + @Autowired + WxCouponChannelService wxCouponChannelService; @Autowired OrderFactory orderFactory; @@ -349,12 +352,22 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { public PayAdapterResult createPayOrder(WxAppinfo appInfo, WxCUserBasicInfo user,WxPayOrder record,WxComposeOrder composeOrder,List childOrders, String productName,EnumPayWay payWay,PayExtraParam params,boolean isCreatePay) { IdWorker idworker = IdWorker.get(); + EnumPayMchType payMchType = EnumPayMchType.TOTAL; EnumPayShare isShare = EnumPayShare.NO; - + try { WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); - if (payAccount.checkShare()) { - isShare = EnumPayShare.YES; + EnumPayMchType payMchTypeEnum = EnumPayMchType.getEnum(payAccount.getMchType()); + if(payMchTypeEnum != null){ + payMchType = payMchTypeEnum; + } + if(EnumPayMchType.DIRECT.equals(payMchType)){ + isShare = EnumPayShare.NO; + }else{ + EnumPayShare paySHareEnum = EnumPayShare.getEnum(payAccount.getShare()); + if (paySHareEnum != null) { + isShare = paySHareEnum; + } } Date currentDate = new Date(); @@ -416,6 +429,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { record.setPayFrom(payWay.getCode()); record.setPayVendor(payWay.getCode()); record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); + record.setMchType(payMchType.getCode()); record.setShare(isShare.getCode()); record.setComposeOrder(composeOrder.getComposeOrderType()); // if (isShare == EnumPayShare.YES) { @@ -438,13 +452,20 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { int rate_amount = 0; //todo 注意购物车模式(需测试)每笔子订单算法可能与总订单算法有差 for (WxOrder o : orderList) { + String merchant_uid = ""; + if(EnumPayMchType.DIRECT.equals(payMchType)){//直连模式记录收款商户 + merchant_uid = wxCouponChannelService.getCouponOneMerchantUid(payWay,o.getCouponChannelId(),o.getTenantId()); + if(StringUtils.isBlank(merchant_uid)){ + throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); + } + } int rate = payShareServie.getOfficialCommission(o,payAccount);//抖音分佣率 logger.info("抖音分佣率"+rate); PayShareCalculateAmount oShareAmount = payShareServie.calculateAmount(o.getPayment(),rate, payAccount); logger.info("佣金明细"+ JSON.toJSONString(oShareAmount)); share_amount += oShareAmount.getShareAmount(); rate_amount += oShareAmount.getRateAmount(); - childShares.put(String.valueOf(o.getId()), new WxComposeChildOrderShare(oShareAmount)); + childShares.put(String.valueOf(o.getId()), new WxComposeChildOrderShare(oShareAmount,merchant_uid)); } record.setShareAmount(share_amount); record.setRateAmount(rate_amount); @@ -523,8 +544,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { return new ResultData(ErrorCode.PAY_ORDER_IS_NOT_PAYMENT); } WxPayAccount payAccount = wxPayAccountMapper.selectById(appInfo.getPayId()); - if (payAccount.checkShare()) { - isShare = EnumPayShare.YES; + EnumPayShare paySHareEnum = EnumPayShare.getEnum(payAccount.getShare()); + if (paySHareEnum != null) { + isShare = paySHareEnum; } // 2. check 是否有支付订单 @@ -1039,7 +1061,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { try { return payServiceFactory.getPayAdapterService(EnumPayWay.PAY_WAY_TT.getCode()).queryPayStatus(payOrder, appInfo, payAccount); } catch (Exception e) { - return new PayQueryAdapterResult(ErrorCode.SYS_SERVER_ERROR.getCode(), e.getMessage(),EnumPayWay.PAY_WAY_TT.getCode(),null,null,null); + return new PayQueryAdapterResult(ErrorCode.SYS_SERVER_ERROR.getCode(), e.getMessage(),null,null,null,null); } } 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 c817325c3..6b1bb320f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java @@ -260,11 +260,15 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ @Override // @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) - public ResultData createSharingOrder(WxSharingOrderDto sharingOrderDto,Integer payWay,Integer share) { + public ResultData createSharingOrder(WxSharingOrderDto sharingOrderDto,Integer payWay,Integer mchType,Integer share) { PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(payWay); - WxProfitSharingOrder record = payShareAdapterService.createSharingOrder(sharingOrderDto,share); + WxProfitSharingOrder record = payShareAdapterService.createSharingOrder(sharingOrderDto,mchType,share); + + if(EnumPayWay.PAY_WAY_TT.getCode().equals(payWay)){ + return new ResultData(); + } if (!sharingOrderDto.getType().equals(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()) && !sharingOrderDto.getType().equals(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode())){ @@ -272,7 +276,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ } EnumProfitSharingOrderType shareType = EnumProfitSharingOrderType.getEnum(sharingOrderDto.getType()); if (null == shareType) { - new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),sharingOrderDto.getType()+"在分账方式中不存在。EnumProfitSharingOrderType"); + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),sharingOrderDto.getType()+"在分账方式中不存在。EnumProfitSharingOrderType"); } if(StringUtils.isNotBlank(record.getReceivers())){ JSONArray jsonArray = JSONArray.parseArray(record.getReceivers()); diff --git a/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java index 244bc28d4..2d962c2aa 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java +++ b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java @@ -11,20 +11,22 @@ import lombok.Data; @Data public class WxComposeChildOrderShare { - public WxComposeChildOrderShare(Integer realPayMent,Integer shareAmount,Integer rateAmount,Integer realRateAmount,Integer commissionAmount) { + public WxComposeChildOrderShare(Integer realPayMent,Integer shareAmount,Integer rateAmount,Integer realRateAmount,Integer commissionAmount,String merchantUid) { this.realPayMent = realPayMent; this.shareAmount = shareAmount; this.rateAmount = rateAmount; this.realRateAmount = realRateAmount; this.commissionAmount = commissionAmount; + this.merchantUid = merchantUid; } - public WxComposeChildOrderShare(PayShareCalculateAmount shareCalculateAmount) { + public WxComposeChildOrderShare(PayShareCalculateAmount shareCalculateAmount,String merchantUid) { this.realPayMent = shareCalculateAmount.getPayAmount(); this.shareAmount = shareCalculateAmount.getShareAmount(); this.rateAmount = shareCalculateAmount.getRateAmount(); this.realRateAmount = shareCalculateAmount.getRealRateAmount(); this.commissionAmount = shareCalculateAmount.getCommissionAmount(); + this.merchantUid = merchantUid; } private Integer realPayMent;//付款金额 @@ -35,4 +37,6 @@ public class WxComposeChildOrderShare { private Integer realRateAmount;//平台手续费 private Integer commissionAmount;//平台佣金 + + private String merchantUid;//收款商户 } diff --git a/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeOrder.java b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeOrder.java index c50584453..96958e720 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeOrder.java +++ b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeOrder.java @@ -38,5 +38,7 @@ public class WxComposeOrder extends TenantEntity{ private Map couponChannelMap; private Map couponMap; + + private List> extParam;//处理其他返回参数 } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/EnumTtPayChannel.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/EnumTtPayChannel.java new file mode 100644 index 000000000..46808240f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/EnumTtPayChannel.java @@ -0,0 +1,36 @@ +package com.iformall.service.pay.service.pay.douyin.miniApp; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumTtPayChannel { + + WX_PAY(1, "微信"), + ALI_PAY(2, "支付宝"), + HZ_PAY(10, "合众"), + ; + public static EnumTtPayChannel getEnum(Integer code) { + for (EnumTtPayChannel value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumTtPayChannel(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/TtMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/TtMiniAppPayAdapterService.java index 4d15ec174..c1835144a 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/TtMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/TtMiniAppPayAdapterService.java @@ -73,7 +73,11 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen @Override public PayAdapterResult pay(WxPayAccount payAccount, WxPayOrder record,WxComposeOrder composeOrder,String productName,EnumPayShare isShare,WxAppinfo appInfo,Date currentDate, PayExtraParam params) throws Exception { + if(true){ + throw new MallinkException(ErrorCode.SYS_AUTH_ERROR.getCode(),"请升级抖音版本"); + } + //todo 去掉抖音低版本兼容 if(!record.isCreatPay()){ if(StringUtils.isBlank(record.getPayParam())){ throw new MallinkException(ErrorCode.SYS_AUTH_ERROR.getCode(),"请升级抖音版本"); 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 a7bdad5f2..45904b99f 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 @@ -1,11 +1,13 @@ package com.iformall.service.pay.service.share; +import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSONArray; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumProfitSharingOrderType; import com.iformall.enums.EnumProfitSharingReceiverType; @@ -122,5 +124,7 @@ public interface PayShareAdapterService { ResultData handerSharingOrder(WxPayOrder payOrder, WxProfitSharingOrder sharingOrder); - WxProfitSharingOrder createSharingOrder(WxSharingOrderDto sharingOrderDto, Integer share); + WxProfitSharingOrder createSharingOrder(WxSharingOrderDto sharingOrderDto, Integer mchType,Integer share); + + List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay); } 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 ac501de91..3dc7045bd 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 @@ -9,8 +9,10 @@ import com.iformall.common.IdWorker; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; import com.iformall.douyin.pay.DouYinPayHelper; import com.iformall.douyin.pay.TtPayService; +import com.iformall.douyin.pay.enums.MerchantImportStatus; import com.iformall.douyin.pay.exception.TtPayException; import com.iformall.douyin.pay.orderQuery.QuerySettleResult; import com.iformall.douyin.pay.preOrder.Settle; @@ -22,6 +24,7 @@ import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.order.entity.WxComposeChildOrderShare; import com.iformall.service.order.util.OrderHelper; +import com.iformall.service.pay.service.pay.douyin.miniApp.EnumTtPayChannel; import com.iformall.service.pay.service.share.PayShareBaseAdapterService; import com.iformall.service.pay.service.share.entity.PayShareCalculateAmount; import com.iformall.service.pay.service.share.entity.PayShareQueryResult; @@ -102,7 +105,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ String before3dayStr = DateUtils.getTimeBefore(2, new Date()); Date before3day = DateUtils.stringToDate(before3dayStr); if(before3day.before(record.getCreateTime())){ - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_READY.getCode(),"未满足D+3", null,null); + return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_READY.getCode(),"未满足结算周期..", null,null); } try { TtPayService ttPayService = maUtil.getTtPayService(appInfo, payAccount); @@ -154,7 +157,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ String before3dayStr = DateUtils.getTimeBefore(2, new Date()); Date before3day = DateUtils.stringToDate(before3dayStr); if(before3day.before(record.getCreateTime())){ - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_APPLY_FAILED.getCode(),"未满足D+3", null,null); + return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_APPLY_FAILED.getCode(),"未满足结算周期..", null,null); } try { TtPayService ttPayService = maUtil.getTtPayService(appInfo, payAccount); @@ -280,7 +283,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ public ResultData handerSharingOrder(WxPayOrder payOrder, WxProfitSharingOrder sharingOrder) { if(!EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode().equals(sharingOrder.getType()) && !EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE_FINISH.getCode().equals(sharingOrder.getType())){ - return new ResultData(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"分账类型错误"); + return new ResultData(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"抖音暂不支持多次分账"); } WxCouponOrder couponOrder = new WxCouponOrder(); couponOrder.updateTenantInfo(payOrder); @@ -313,19 +316,8 @@ 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()); - - WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); - psReceiverQ.updateTenantInfo(payOrder); - psReceiverQ.setMerchantId(co.getBMerchantId()); - psReceiverQ.setSharingType(this.getProfitSharingType()); - psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - psReceiverQ.setPlat(EnumAppPlat.TOUTIAO.getCode()); - psReceiverQ.setIsUse(EnumProfitSharingUse.YES.getCode()); - List psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); - if(psReceiverList == null || psReceiverList.isEmpty() || psReceiverList.size() > 1){ - return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(),"分账帐号异常{WxCouponOrder.getBMerchantId}"+co.getBMerchantId()); - } - WxProfitSharingReceiver receiver = psReceiverList.get(0); + List receiverList = getReceiverList(payOrder, co.getBMerchantId(), payOrder.getTtPayWay()); + WxProfitSharingReceiver receiver = receiverList.get(0); WxComposeChildOrderShare childOrderShare = payOrder.getChildOrderShare(o.getId()); int darenTakeAmount = 0; if(EnumOrderCpsStatus.ORDER_IS_CPS.getCode().equals(o.getCpsStatus())){ @@ -360,10 +352,10 @@ public class TtPayShareService extends PayShareBaseAdapterService{ } @Override - public WxProfitSharingOrder createSharingOrder(WxSharingOrderDto sharingOrderDto, Integer share) { + public WxProfitSharingOrder createSharingOrder(WxSharingOrderDto sharingOrderDto, Integer mchType,Integer share) { if(!EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode().equals(sharingOrderDto.getType()) && !EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE_FINISH.getCode().equals(sharingOrderDto.getType())){ - throw new MallinkException(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"分账类型错误"); + throw new MallinkException(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"抖音暂不支持多次分账"); } WxProfitSharingOrder record = new WxProfitSharingOrder(); @@ -386,15 +378,51 @@ public class TtPayShareService extends PayShareBaseAdapterService{ record.setUpdateTime(currentDate); record.setPayTimeStart(sharingOrderDto.getPayTimeStart()); record.setPayTimeEnd(sharingOrderDto.getPayTimeEnd()); - if(EnumPayShare.YES.getCode().equals(share)){ - record.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()); - }else{ + if(EnumPayMchType.DIRECT.getCode().equals(mchType)){ record.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE_FINISH.getCode()); + }else{ + if(EnumPayShare.YES.getCode().equals(share)){ + record.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()); + }else{ + record.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE_FINISH.getCode()); + } } + wxProfitSharingOrderMapper.insert(record); } return record; } + @Override + public List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay) { + WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); + psReceiverQ.updateTenantInfo(tenantEntity); + psReceiverQ.setMerchantId(merchantId); + psReceiverQ.setSharingType(this.getProfitSharingType()); + psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + psReceiverQ.setPlat(EnumAppPlat.TOUTIAO.getCode()); + String payMsg = ""; + if(EnumTtPayChannel.WX_PAY.getCode().equals(ttPayWay)){ + payMsg = EnumTtPayChannel.WX_PAY.getMessage(); + psReceiverQ.setWxImportStatus(MerchantImportStatus.improt_success.getCode()); + }else if(EnumTtPayChannel.ALI_PAY.getCode().equals(ttPayWay)){ + payMsg = EnumTtPayChannel.ALI_PAY.getMessage(); + psReceiverQ.setAlipayImportStatus(MerchantImportStatus.improt_success.getCode()); + }else if(EnumTtPayChannel.HZ_PAY.getCode().equals(ttPayWay)){ + payMsg = EnumTtPayChannel.HZ_PAY.getMessage(); + psReceiverQ.setHzImportStatus(MerchantImportStatus.improt_success.getCode()); + }else{ + log.error("该订单支付方式异常{}"); + } + List list = wxProfitSharingReceiverMapper.findList(psReceiverQ); + if(list == null || list.isEmpty()){ + throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未未进件."+payMsg); + } + if(list.size() > 1){ + throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_UNKNOWN.getCode(),"该商户分账帐号异常."); + } + return list; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java index 6d630df87..b521e9da6 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java @@ -7,8 +7,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iformall.common.IdWorker; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.douyin.pay.enums.MerchantImportStatus; import com.iformall.enums.*; import com.iformall.mapper.*; +import com.iformall.service.pay.service.pay.douyin.miniApp.EnumTtPayChannel; import net.sf.saxon.trans.Err; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -444,7 +447,10 @@ public class WxPayShareService extends PayShareBaseAdapterService{ } @Override - public WxProfitSharingOrder createSharingOrder(WxSharingOrderDto sharingOrderDto, Integer share) { + public WxProfitSharingOrder createSharingOrder(WxSharingOrderDto sharingOrderDto, Integer mchType,Integer share) { + if(EnumPayMchType.DIRECT.getCode().equals(mchType)){ + throw new MallinkException(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"微信直连模式待开发"); + } if(EnumYesOrNo.NO.getCode().equals(share)){ throw new MallinkException(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"微信不分账"); } @@ -473,14 +479,8 @@ public class WxPayShareService extends PayShareBaseAdapterService{ wxProfitSharingOrderMapper.insert(record); } - //准备分账列表 - WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); - psReceiverQ.updateTenantInfo(sharingOrderDto); - psReceiverQ.setMerchantId(sharingOrderDto.getMerchantId()); - psReceiverQ.setSharingType(this.getProfitSharingType()); - psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - psReceiverQ.setPlat(EnumAppPlat.WX.getCode()); - List psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); + List psReceiverList = getReceiverList(sharingOrderDto, sharingOrderDto.getMerchantId(), null); + if (psReceiverList != null && psReceiverList.size() > 50) { throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID); } @@ -531,6 +531,28 @@ public class WxPayShareService extends PayShareBaseAdapterService{ return record; } + @Override + public List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay) { + WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); + psReceiverQ.updateTenantInfo(tenantEntity); + psReceiverQ.setMerchantId(merchantId); + psReceiverQ.setSharingType(getProfitSharingType()); + psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + psReceiverQ.setPlat(EnumAppPlat.WX.getCode()); + List psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); + if (null == psReceiverList || psReceiverList.size() == 0) { + throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未设置分账账号."); + }else { + for (WxProfitSharingReceiver receiver:psReceiverList) { + if (EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID.getCode().intValue() + == receiver.getReceiverType().intValue()) { + throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户收款账号存在个人微信号方式,微信已停止支持,请重新设置."); + } + } + } + return psReceiverList; + } + private static String queryOrderShareAmount(String mchId,String transcationId,String apiKey) { WxProfitSharingP psCmd = new WxProfitSharingP(); psCmd.setMch_id(mchId);//服务商商户id diff --git a/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml index 7c4ecd1e7..550df01dc 100644 --- a/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml @@ -23,6 +23,7 @@ + @@ -40,7 +41,7 @@ `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`order_id`,`c_user_id`,`open_id`,`b_user_id`, `auth_code`,`ip`,`pay_amount`,`pay_time_start`,`pay_time_end`, `prepay_id`,`transaction_id`,`pay_vendor`,`tt_pay_way`,`pay_order_no`, - `pay_order_status`,`pay_param`,`share`,`share_amount`,`rate_amount`,`fail_reason`, + `pay_order_status`,`pay_param`,`mch_type`,`share`,`share_amount`,`rate_amount`,`fail_reason`, `pos_pay_order_id`,`pos_pay_order_time`,`pos_payment_type`,`pos_pay_order_no`,`pos_pay_des`,`compose_order`, `child_order_share`