From e68daab181c688d4263faf6e6d0008df04914027 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Fri, 10 Sep 2021 14:17:55 +0800 Subject: [PATCH] fix order --- .../db/migration/V202109070001__order.sql | 103 +++++++++++++++++- .../controller/WxMicroPayController.java | 10 +- .../controller/WxOrderController.java | 2 +- .../schedule/CouponOrderExpiringSchedule.java | 6 +- .../com/iformall/domain/dto/OrderSaveDto.java | 5 + .../java/com/iformall/domain/po/WxOrder.java | 4 +- .../com/iformall/domain/po/WxPayOrder.java | 15 +++ .../service/WxCouponOrderService.java | 3 +- .../impl/WxCouponOrderServiceImpl.java | 44 ++++++-- .../service/impl/WxOrderServiceImpl.java | 50 ++++----- .../service/impl/WxPayOrderServiceImpl.java | 41 +++++-- .../service/order/OrderAdapterService.java | 14 +++ .../entity/WxComposeChildOrderPrice.java | 19 ++++ .../entity/WxComposeChildOrderShare.java | 24 ++++ .../order/impl/BatchOrderAdapterService.java | 16 ++- .../order/impl/SingleOrderAdapterService.java | 19 +++- .../service/order/util/OrderHelper.java | 43 ++++++-- .../resources/mapper/WxPayOrderMapper.xml | 4 +- 18 files changed, 348 insertions(+), 74 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderPrice.java create mode 100644 mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java diff --git a/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql b/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql index 3dbab2ade..a36797de0 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql @@ -718,4 +718,105 @@ ALTER TABLE wx_coupon_order_95 ADD COLUMN `compose_order_id` bigint(20) C ALTER TABLE wx_coupon_order_96 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; ALTER TABLE wx_coupon_order_97 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; ALTER TABLE wx_coupon_order_98 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; -ALTER TABLE wx_coupon_order_99 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; \ No newline at end of file +ALTER TABLE wx_coupon_order_99 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号'; + +ALTER TABLE wx_pay_order_0 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_1 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_2 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_3 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_4 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_5 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_6 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_7 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_8 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_9 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_10 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_11 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_12 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_13 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_14 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_15 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_16 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_17 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_18 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_19 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_20 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_21 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_22 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_23 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_24 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_25 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_26 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_27 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_28 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_29 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_30 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_31 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_32 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_33 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_34 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_35 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_36 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_37 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_38 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_39 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_40 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_41 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_42 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_43 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_44 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_45 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_46 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_47 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_48 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_49 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_50 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_51 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_52 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_53 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_54 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_55 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_56 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_57 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_58 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_59 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_60 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_61 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_62 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_63 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_64 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_65 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_66 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_67 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_68 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_69 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_70 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_71 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_72 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_73 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_74 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_75 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_76 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_77 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_78 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_79 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_80 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_81 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_82 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_83 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_84 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_85 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_86 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_87 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_88 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_89 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_90 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_91 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_92 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_93 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_94 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_95 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_96 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_97 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_98 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; +ALTER TABLE wx_pay_order_99 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; \ No newline at end of file diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java index 4f5285202..b693979ac 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java @@ -9,6 +9,8 @@ import com.iformall.domain.po.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.*; +import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.utils.IPUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -57,6 +59,9 @@ public class WxMicroPayController extends BaseController { @Autowired private WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + OrderFactory orderFactory; @ApiOperation(value = "付款码支付订单", notes = "params:{\"authCode\":\"String\",\"totalFee\":\"支付金额\"},\n" + "注意:\n" + @@ -428,7 +433,8 @@ public class WxMicroPayController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } - WxOrder microOrder = wxOrderService.getById(orderId,wxMerchantBUser.getTenantId()); + WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(EnumComposeOrder.SINGLE.getCode()).getComposeOrder(orderId, wxMerchantBUser.getTenantId()); + WxOrder microOrder = composeOrder.getSingleOrder(); if (microOrder == null) { return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); } @@ -449,7 +455,7 @@ public class WxMicroPayController extends BaseController { Integer remainPrice = payPrice; if (wxCouponOrder != null) { try { - couponPayOrder = wxCouponOrderService.microPayPreVerify(microOrder, wxCouponOrder, wxMerchantBUser, payPrice,payWay,ipStr,authCode); + couponPayOrder = wxCouponOrderService.microPayPreVerify(composeOrder, wxCouponOrder, wxMerchantBUser, payPrice,payWay,ipStr,authCode); //remainPrice = microOrder.getPayment() - couponPayOrder.getPayAmount(); remainPrice = couponPayOrder.getPayAmount(); // 更新实际支付金额 diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index e20fa4f11..a06339f97 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -88,7 +88,7 @@ public class WxOrderController extends BaseController { return wxOrderService.composeSaveOrder(EnumComposeOrder.BATCH,orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); } - @ApiOperation(value = "单个券单个订单,拼团,砍价用", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") + @ApiOperation(value = "单个券单个订单,卡(分账导致无法批量下单)、拼团,砍价用", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") @PostMapping("singleSave") public ResultData saveOrder(@RequestBody OrderSaveDto orderSaveDto) { Long memberId; diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java index 7e5b0b755..bf9d1ff7f 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java @@ -180,12 +180,12 @@ public class CouponOrderExpiringSchedule { wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); wxSharingOrderDto.updateTenantInfo(wxPayOrder); wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); - if (wxPayOrder.getRateAmount() != null) { + if (wxPayOrder.getChildOrderShare(co.getOrderId()).getRateAmount() != null) { // 实际分账金额为 分账金额 + 通道费差 - wxSharingOrderDto.setShareAmount(wxPayOrder.getShareAmount()+wxPayOrder.getRateAmount()); + wxSharingOrderDto.setShareAmount(wxPayOrder.getChildOrderShare(co.getOrderId()).getShareAmount()+wxPayOrder.getChildOrderShare(co.getOrderId()).getRateAmount()); } else { // 未设置通道费差 - wxSharingOrderDto.setShareAmount(wxPayOrder.getShareAmount()); + wxSharingOrderDto.setShareAmount(wxPayOrder.getChildOrderShare(co.getOrderId()).getShareAmount()); } wxProfitSharingOrderService.finishSharingOrder(wxSharingOrderDto,wxPayOrder.getPayVendor()); } diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java index 25d1c091f..52def9a31 100644 --- a/mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java +++ b/mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java @@ -21,5 +21,10 @@ public class OrderSaveDto implements Serializable { //被操作人的ID 供A端使用 private Long userId; + + public boolean isPressOrder() { + boolean isPress = this.getPress() != null ? this.getPress() : false; + return isPress; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java index b12710dcb..e170fb75d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java @@ -97,12 +97,12 @@ public class WxOrder extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="组合订单编号",name="composeOrderId") private Long composeOrderId; - @io.swagger.annotations.ApiModelProperty(value="组合订单编号",name="couponNumber") + @io.swagger.annotations.ApiModelProperty(value="商品数量",name="couponNumber") private Integer couponNumber; @io.swagger.annotations.ApiModelProperty(value="组合订单类型EnumComposeOrder",name="composeOrderType") private Integer composeOrderType; - + @TableField(exist = false) protected List statusS; 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 fefa053fe..00a69c1a6 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java @@ -1,7 +1,11 @@ package com.iformall.domain.po; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.service.order.entity.WxComposeChildOrderShare; + import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -52,6 +56,17 @@ public class WxPayOrder extends TenantEntity { private Integer shareAmount; @io.swagger.annotations.ApiModelProperty(value="通道费差(购买时刻的通道费差,分账完结时使用)",name="rateAmount") private Integer rateAmount; + @io.swagger.annotations.ApiModelProperty(value="子订单分账金额json",name="childOrderShare") + private String childOrderShare; + + public WxComposeChildOrderShare getChildOrderShare(Long wxOrderId) { + 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")); + } + return null; + } @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason") private String failReason; @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom") diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 6f7416041..65289aeb7 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -7,6 +7,7 @@ import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.*; import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeOrder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -206,7 +207,7 @@ public interface WxCouponOrderService { */ JSONArray queryMicroPayCouponOrder(WxMerchantBUser user, WxCUserBasicInfo cUser, Integer price); - WxPayOrder microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price, EnumPayWay payWay,String ipstr,String authCode); + WxPayOrder microPayPreVerify(WxComposeOrder composeOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price, EnumPayWay payWay,String ipstr,String authCode); Integer microPayVerify(WxMerchantBUser bUser, Long couponOrderId,EnumPayWay payWay); 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 43be6b2fe..37f7a780b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -1,5 +1,6 @@ package com.iformall.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -25,6 +26,12 @@ import com.iformall.mapper.*; import com.iformall.mq.MqBaseProducer; import com.iformall.pay.WxPayConstant; import com.iformall.service.*; +import com.iformall.service.order.OrderAdapterService; +import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; +import com.iformall.service.order.entity.WxComposeChildOrderShare; +import com.iformall.service.order.entity.WxComposeOrder; +import com.iformall.service.order.util.OrderHelper; import com.iformall.service.pay.PayServiceFactory; import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; @@ -152,6 +159,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Autowired RedisLock redisLock; + + @Autowired + OrderFactory orderFactory; private final SimpleDateFormat mydateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -670,13 +680,13 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { wxSharingOrderDto.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()); } wxSharingOrderDto.setPayAmount(wxPayOrder.getPayAmount()); - wxSharingOrderDto.setRateAmount(wxPayOrder.getRateAmount()); + wxSharingOrderDto.setRateAmount(wxPayOrder.getChildOrderShare(couponOrder.getOrderId()).getRateAmount()); wxSharingOrderDto.setOrderId(wxPayOrder.getId()); wxSharingOrderDto.setPayTimeStart(wxPayOrder.getPayTimeStart()); wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); wxSharingOrderDto.updateTenantInfo(wxPayOrder); wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); - wxSharingOrderDto.setShareAmount(wxPayOrder.getShareAmount()); + wxSharingOrderDto.setShareAmount(wxPayOrder.getChildOrderShare(couponOrder.getOrderId()).getShareAmount()); wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,payWay); } } catch (Exception e) { @@ -1357,7 +1367,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxPayOrder microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice, EnumPayWay payWay,String ipstr,String authCode) { + public WxPayOrder microPayPreVerify(WxComposeOrder composeOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice, EnumPayWay payWay,String ipstr,String authCode) { // 1. 获取券信息 WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId(),couponOrder.getTenantId()); if (wxCoupon == null) { @@ -1406,7 +1416,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); posCouponOrderVerify.updateTenantInfo(couponOrder); posCouponOrderVerify.setCouponOrderId(couponOrder.getId()); - posCouponOrderVerify.setPosOrderId(microOrder.getId()); + posCouponOrderVerify.setPosOrderId(composeOrder.getSingleOrder().getId()); posCouponOrderVerify.setOrderFrom(EnumOrderFrom.INSIDE.getCode()); posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); try { @@ -1441,7 +1451,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); posCouponOrderVerify.updateTenantInfo(couponOrder); posCouponOrderVerify.setCouponOrderId(couponOrder.getId()); - posCouponOrderVerify.setPosOrderId(microOrder.getId()); + posCouponOrderVerify.setPosOrderId(composeOrder.getSingleOrder().getId()); posCouponOrderVerify.setOrderFrom(EnumOrderFrom.INSIDE.getCode()); posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); try { @@ -1481,9 +1491,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { WxPayOrder payOrder = new WxPayOrder(); Date curDate = new Date(); payOrder.setId(payOrderId); - payOrder.updateTenantInfo(microOrder); - payOrder.setCUserId(microOrder.getCUserId()); - payOrder.setOrderId(microOrder.getId()); + payOrder.updateTenantInfo(composeOrder.getSingleOrder()); + payOrder.setCUserId(composeOrder.getSingleOrder().getCUserId()); + payOrder.setOrderId(composeOrder.getSingleOrder().getId()); payOrder.setCreateTime(curDate); payOrder.setUpdateTime(curDate); payOrder.setPayTimeStart(curDate); @@ -1491,7 +1501,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { payOrder.setPayOrderNo(String.valueOf(payOrderId)); payOrder.setIp(ipstr); payOrder.setAuthCode(authCode); - Integer payAmount = microOrder.getPayment() - wxCoupon.getPrice(); + Integer payAmount = composeOrder.getSingleOrder().getPayment() - wxCoupon.getPrice(); payOrder.setPayAmount(payAmount); // if (microOrder.getPayment() > wxCoupon.getPrice()) { // payOrder.setPayAmount(wxCoupon.getPrice()); @@ -1503,7 +1513,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { payOrder.setShare(shareCode); if (shareCode.intValue() == EnumPayShare.YES.getCode().intValue()) { // 分账金额 - int iChargeFee = PayUtils.getPayRate(payAmount, payAccount.getRate(), false); + int iChargeFee = OrderHelper.getMallCharge(payAmount, payAccount); Integer share_amount = payAmount - iChargeFee; payOrder.setShareAmount(share_amount); if(payAccount.getRealRate() != null) { @@ -1513,6 +1523,20 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { if (share_amount <= 0) { payOrder.setShare(EnumPayShare.NO.getCode()); } + + //设置子订单分账金额 + Map childShares = new HashMap(); + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()); + List orderList = orderAdapterService.getChildOrders(composeOrder, appInfo.getTenantId()); + for (WxOrder o : orderList) { + WxCoupon coupon = wxCouponMapper.selectById(o.getProductId(), appInfo.getTenantId()); + WxComposeChildOrderPrice price = orderAdapterService.getChildOrderPrice(coupon, false, o.getOrderGroupId(), o.getCouponNumber()); + int orderMallCharge = OrderHelper.getMallCharge(price.getRealPayMent(), payAccount); + Integer orderShareAmount = price.getRealPayMent() - orderMallCharge; + Integer orderRateAmount = PayUtils.getPayRate(price.getRealPayMent(), payAccount.getRealRate(), true); + childShares.put(String.valueOf(o.getId()), new WxComposeChildOrderShare(price.getRealPayMent(), orderShareAmount, orderRateAmount)); + } + payOrder.setChildOrderShare(JSON.toJSONString(childShares)); } payOrder.setPayFrom(EnumPayFrom.INSIDE_B.getCode()); payOrder.setPosPayOrderId(couponOrder.getId()); 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 171c9ed23..8f112178f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -21,7 +21,10 @@ import com.iformall.enums.*; import com.iformall.service.*; import com.iformall.service.order.OrderAdapterService; import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; +import com.iformall.service.order.entity.WxComposeChildOrderShare; import com.iformall.service.order.entity.WxComposeOrder; +import com.iformall.service.order.util.OrderHelper; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -1111,22 +1114,19 @@ public class WxOrderServiceImpl implements WxOrderService { cardInfo.setTransactionId(payOrder.getTransactionId()); if (payOrder.getShareAmount() != null) { // 开启分账 - fee = payOrder.getPayAmount() - payOrder.getShareAmount(); - cardInfo.setShareFeeAmount(payOrder.getShareAmount()); - cardInfo.setRemainingShareFeeAmount(payOrder.getShareAmount()); - cardInfo.setRateAmount(payOrder.getRateAmount()); + WxComposeChildOrderShare share = payOrder.getChildOrderShare(order.getId()); + fee = share.getRealPayMent() - share.getShareAmount(); + cardInfo.setShareFeeAmount(share.getShareAmount()); + cardInfo.setRemainingShareFeeAmount(share.getShareAmount()); + cardInfo.setRateAmount(share.getRateAmount()); } else { // 未开启分账 - fee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRate(), false); - Integer shareAmount = payOrder.getPayAmount() - fee; + Integer orderRealPayMent = payOrder.getChildOrderShare(order.getId()).getRealPayMent(); + fee = OrderHelper.getMallCharge(orderRealPayMent, payAccountQ); + Integer shareAmount = orderRealPayMent - fee; cardInfo.setShareFeeAmount(shareAmount); cardInfo.setRemainingShareFeeAmount(shareAmount); - if (payAccount.getRealRate() != null) { - int iRealChargeFee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRealRate(), true); - if (fee > iRealChargeFee) { - cardInfo.setRateAmount(fee - iRealChargeFee); - } - } + cardInfo.setRateAmount(OrderHelper.getRateAmount(orderRealPayMent, fee, payAccountQ)); } } } else { @@ -1749,13 +1749,13 @@ public class WxOrderServiceImpl implements WxOrderService { sharingOrder.setMerchantId(wxMerchantBUser.getMerchantId()); sharingOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()); sharingOrder.setPayAmount(wxPayOrder.getPayAmount()); - sharingOrder.setRateAmount(wxPayOrder.getRateAmount()); + sharingOrder.setRateAmount(wxPayOrder.getChildOrderShare(orderId).getRateAmount()); sharingOrder.setOrderId(wxPayOrder.getId()); sharingOrder.setPayTimeStart(wxPayOrder.getPayTimeStart()); sharingOrder.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); sharingOrder.updateTenantInfo(wxPayOrder); sharingOrder.setTransactionId(wxPayOrder.getTransactionId()); - sharingOrder.setShareAmount(wxPayOrder.getShareAmount()); + sharingOrder.setShareAmount(wxPayOrder.getChildOrderShare(orderId).getShareAmount()); ResultData resultData = wxProfitSharingOrderService.createSharingOrder(sharingOrder,payWay.getCode()); } else { logger.error("微信分账: 未找到payorder or merchant at orderid-" + orderId); @@ -2007,7 +2007,6 @@ public class WxOrderServiceImpl implements WxOrderService { } for (int j =0 ; j < totalOrderCount ; j ++) { // 是否砍价 - boolean isPress = orderdto.getSignleOrder().getPress() != null ? orderdto.getSignleOrder().getPress() : false; WxOrder order = null; if (checkCouponIsFree(orderdto.getWxCoupon())) { // 免费券 @@ -2024,7 +2023,7 @@ public class WxOrderServiceImpl implements WxOrderService { } } else { // 有价券 - order = proxy.saveNoFreeOrderForCoupon(composeOrder,user, orderdto.getWxCoupon(),perCouponNumber, orderdto.getSignleOrder().getCouponChannelId(), isPress, orderdto.getSignleOrder().getOrderGroupId(), orderdto.getSignleOrder().getFormId()); + order = proxy.saveNoFreeOrderForCoupon(composeOrder,user, orderdto.getWxCoupon(),perCouponNumber, orderdto.getSignleOrder().getCouponChannelId(), orderdto.getSignleOrder().isPressOrder(), orderdto.getSignleOrder().getOrderGroupId(), orderdto.getSignleOrder().getFormId()); } } @@ -2115,20 +2114,9 @@ public class WxOrderServiceImpl implements WxOrderService { // 4. 保存订单 Long orderNumber; // 4.1 券价格 - int payment = coupon.getSalePrice()*couponNumber; - Integer orderStatus = EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode(); - if (isPress || coupon.getType().equals(EnumCouponType.COUPON_PRESS.getCode())) { - // 砍价券 初始是全价即面额 - payment = coupon.getPrice()*couponNumber; - } - if (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { - if (orderGroupId == null) { - // 拼团券 初始是全价即面额 - payment = coupon.getPrice()*couponNumber; - } else { - orderStatus = EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode(); - } - } + WxComposeChildOrderPrice price = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()).getChildOrderPrice(coupon, isPress, orderGroupId, couponNumber); + + Integer orderStatus = OrderHelper.getOrderStatusWxCoupon(coupon, orderGroupId); // 4.2 保存订单 WxOrder record = new WxOrder(); @@ -2136,7 +2124,7 @@ public class WxOrderServiceImpl implements WxOrderService { record.setCouponChannelId(couponChannelId); record.setOrderGroupId(orderGroupId); record.setFormId(formId); - record.setPayment(payment); + record.setPayment(price.getRealPayMent()); record.setOrderStatus(orderStatus); record.setComposeOrderId(composeOrder.getMainOrderId()); record.setComposeOrderType(composeOrder.getComposeOrderType()); 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 afe771e79..5892e17a8 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -20,7 +20,10 @@ import com.iformall.service.*; import com.iformall.service.helper.WxPayOrderServiceHelper; import com.iformall.service.order.OrderAdapterService; import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; +import com.iformall.service.order.entity.WxComposeChildOrderShare; 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.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; @@ -380,15 +383,23 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { record.setComposeOrder(composeOrder.getComposeOrderType()); if (isShare == EnumPayShare.YES) { // 分账金额 - int iChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRate(), false); - Integer share_amount = record.getPayAmount() - iChargeFee; + int mallCharge = OrderHelper.getMallCharge(record.getPayAmount(), payAccount); + Integer share_amount = record.getPayAmount() - mallCharge; record.setShareAmount(share_amount); - if(payAccount.getRealRate() != null) { - int iRealChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRealRate(), true); - if(iChargeFee > iRealChargeFee) { - record.setRateAmount(iChargeFee - iRealChargeFee); - } + record.setRateAmount(OrderHelper.getRateAmount(record.getPayAmount(),mallCharge, payAccount)); + //设置子订单分账金额 + Map childShares = new HashMap(); + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()); + List orderList = orderAdapterService.getChildOrders(composeOrder, appInfo.getTenantId()); + for (WxOrder o : orderList) { + WxCoupon coupon = wxCouponMapper.selectById(o.getProductId(), appInfo.getTenantId()); + WxComposeChildOrderPrice price = orderAdapterService.getChildOrderPrice(coupon, false, o.getOrderGroupId(), o.getCouponNumber()); + int orderMallCharge = OrderHelper.getMallCharge(price.getRealPayMent(), payAccount); + Integer orderShareAmount = price.getRealPayMent() - orderMallCharge; + Integer orderRateAmount = OrderHelper.getRateAmount(price.getRealPayMent(),orderMallCharge, payAccount); + childShares.put(String.valueOf(o.getId()), new WxComposeChildOrderShare(price.getRealPayMent(), orderShareAmount, orderRateAmount)); } + record.setChildOrderShare(JSON.toJSONString(childShares)); } int sqlRow = wxPayOrderMapper.insert(record); @@ -484,7 +495,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { record.setShare(isShare.getCode()); if (isShare == EnumPayShare.YES) { // 分账金额 - int iChargeFee = PayUtils.getPayRate(record.getPayAmount(), payAccount.getRate(), false); + int iChargeFee = OrderHelper.getMallCharge(record.getPayAmount(), payAccount); Integer share_amount = record.getPayAmount() - iChargeFee; record.setShareAmount(share_amount); if(payAccount.getRealRate() != null) { @@ -495,6 +506,20 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { isShare = EnumPayShare.NO; record.setShare(isShare.getCode()); } + + //设置子订单分账金额 + Map childShares = new HashMap(); + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()); + List orderList = orderAdapterService.getChildOrders(composeOrder, appInfo.getTenantId()); + for (WxOrder o : orderList) { + WxCoupon coupon = wxCouponMapper.selectById(o.getProductId(), appInfo.getTenantId()); + WxComposeChildOrderPrice price = orderAdapterService.getChildOrderPrice(coupon, false, o.getOrderGroupId(), o.getCouponNumber()); + int orderMallCharge = OrderHelper.getMallCharge(price.getRealPayMent(), payAccount); + Integer orderShareAmount = price.getRealPayMent() - orderMallCharge; + Integer orderRateAmount = PayUtils.getPayRate(price.getRealPayMent(), payAccount.getRealRate(), true); + childShares.put(String.valueOf(o.getId()), new WxComposeChildOrderShare(price.getRealPayMent(), orderShareAmount, orderRateAmount)); + } + record.setChildOrderShare(JSON.toJSONString(childShares)); } int sqlRow = wxPayOrderMapper.insert(record); diff --git a/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java index 16c908df9..6e1800e97 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java @@ -8,6 +8,7 @@ import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; import com.iformall.service.order.entity.WxComposeOrder; public interface OrderAdapterService { @@ -24,6 +25,19 @@ public interface OrderAdapterService { */ boolean isOneNumberOneOrder(WxCoupon coupon); + /** + * 查询每一个订单的产品的真实支付价格及补贴 + * @param coupon + * @return + */ + WxComposeChildOrderPrice getChildOrderPrice(WxCoupon coupon,boolean isPress,Long orderGroupId,Integer couponNumber); + + /** + * 计算每一个子订单的补贴 + * @return + */ + Integer calcuteChildOrderSubsidy(); + /** * 查询订单信息,单个模式查询WxOrder * @param mainOrderId diff --git a/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderPrice.java b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderPrice.java new file mode 100644 index 000000000..5137adfd9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderPrice.java @@ -0,0 +1,19 @@ +package com.iformall.service.order.entity; + +import lombok.Data; + +@Data +public class WxComposeChildOrderPrice { + + public WxComposeChildOrderPrice(Integer productSinglePrice,Integer productNumber,Long productId) { + this.productSinglePrice = productSinglePrice; + this.productNumber = productNumber; + this.productId = productId; + this.realPayMent = productSinglePrice*productNumber; + } + + private Integer realPayMent;//真实支付价格 + private Integer productSinglePrice;//产品单价 + private Integer productNumber;//产品数量 + private Long productId;//产品编号 +} 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 new file mode 100644 index 000000000..9b8af6eff --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java @@ -0,0 +1,24 @@ +package com.iformall.service.order.entity; + +import lombok.Data; + +/** + * 子订单分账信息 + * @author alascor + * + */ +@Data +public class WxComposeChildOrderShare { + + public WxComposeChildOrderShare(Integer realPayMent,Integer shareAmount,Integer rateAmount) { + this.realPayMent = realPayMent; + this.shareAmount = shareAmount; + this.rateAmount = rateAmount; + } + + private Integer realPayMent; + + private Integer shareAmount; + + private Integer rateAmount; +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/BatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/BatchOrderAdapterService.java index 3a8e70f56..76129f297 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/impl/BatchOrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/BatchOrderAdapterService.java @@ -22,6 +22,7 @@ import com.iformall.mapper.WxBatchOrderMapper; import com.iformall.mapper.WxOrderMapper; import com.iformall.service.WxOrderService; import com.iformall.service.order.OrderAdapterService; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.order.util.OrderHelper; @@ -48,7 +49,8 @@ public class BatchOrderAdapterService implements OrderAdapterService { int payment = 0; for (OrderComposeSaveDto ocsd : orderSave) { boolean isPress = ocsd.getSignleOrder().getPress() != null ? ocsd.getSignleOrder().getPress() : false; - payment = payment+OrderHelper.getCouponPayment(ocsd.getWxCoupon(), isPress, ocsd.getSignleOrder().getOrderGroupId(),ocsd.getCount()); + WxComposeChildOrderPrice price = getChildOrderPrice(ocsd.getWxCoupon(), isPress, ocsd.getSignleOrder().getOrderGroupId(), ocsd.getCount()); + payment = payment+price.getRealPayMent(); } order.setPayment(payment); order.setCreateDate(new Date()); @@ -104,5 +106,17 @@ public class BatchOrderAdapterService implements OrderAdapterService { } } + + @Override + public WxComposeChildOrderPrice getChildOrderPrice(WxCoupon coupon,boolean isPress,Long orderGroupId,Integer couponNumber) { + Integer perPrice = OrderHelper.getCouponPerPayment(coupon, isPress, orderGroupId); + return new WxComposeChildOrderPrice(perPrice, couponNumber, coupon.getId()); + } + + @Override + public Integer calcuteChildOrderSubsidy() { + // TODO Auto-generated method stub + return null; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java index da706118b..c16c8c33d 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java @@ -1,26 +1,21 @@ package com.iformall.service.order.impl; import java.util.ArrayList; -import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; - -import com.iformall.common.IdWorker; import com.iformall.domain.dto.OrderComposeSaveDto; -import com.iformall.domain.po.WxBatchOrder; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxOrder; -import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumComposeOrder; import com.iformall.enums.EnumPayWay; -import com.iformall.mapper.WxBatchOrderMapper; import com.iformall.mapper.WxOrderMapper; import com.iformall.service.order.OrderAdapterService; +import com.iformall.service.order.entity.WxComposeChildOrderPrice; import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.order.util.OrderHelper; @@ -71,6 +66,18 @@ public class SingleOrderAdapterService implements OrderAdapterService { wxOrderMapper.updateCUserId(order); } + @Override + public WxComposeChildOrderPrice getChildOrderPrice(WxCoupon coupon, boolean isPress, Long orderGroupId, + Integer couponNumber) { + Integer perPrice = OrderHelper.getCouponPerPayment(coupon, isPress, orderGroupId); + return new WxComposeChildOrderPrice(perPrice, couponNumber, coupon.getId()); + } + + @Override + public Integer calcuteChildOrderSubsidy() { + return null; + } + diff --git a/mallinkService/src/main/java/com/iformall/service/order/util/OrderHelper.java b/mallinkService/src/main/java/com/iformall/service/order/util/OrderHelper.java index 77aa3c291..044c11e8d 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/util/OrderHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/order/util/OrderHelper.java @@ -1,26 +1,55 @@ package com.iformall.service.order.util; import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxPayAccount; import com.iformall.enums.EnumCouponType; +import com.iformall.enums.EnumOrderStatus; +import com.iformall.utils.PayUtils; public class OrderHelper { - public static int getCouponPayment(WxCoupon coupon,boolean isPress,Long orderGroupId,int couponNumber) { + public static int getCouponPerPayment(WxCoupon coupon,boolean isPress,Long orderGroupId) { // 4.1 券价格 - int payment = coupon.getSalePrice()*couponNumber; - //Integer orderStatus = EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode(); + int payment = coupon.getSalePrice(); if (isPress || coupon.getType().equals(EnumCouponType.COUPON_PRESS.getCode())) { // 砍价券 初始是全价即面额 - payment = coupon.getPrice()*couponNumber; + payment = coupon.getPrice(); } if (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { if (orderGroupId == null) { // 拼团券 初始是全价即面额 - payment = coupon.getPrice()*couponNumber; - } else { - //orderStatus = EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode(); + payment = coupon.getPrice(); } } return payment; } + + public static Integer getOrderStatusWxCoupon(WxCoupon coupon,Long orderGroupId) { + Integer orderStatus = EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode(); + if (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { + if (orderGroupId == null) { + // 拼团券 初始是全价即面额 + } else { + orderStatus = EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode(); + } + } + return orderStatus; + } + + //分账金额,扣掉商场设置的手续费率 + public static int getMallCharge(Integer payment,WxPayAccount payAccount) { + int iChargeFee = PayUtils.getPayRate(payment, payAccount.getRate(), false); + return iChargeFee; + } + + //费率差,微信、支付宝交易的费率. iChargeFee:商场扣掉的手续费 + public static Integer getRateAmount(Integer payment,int mallCharge, WxPayAccount payAccount) { + if(payAccount.getRealRate() != null) { + int iRealChargeFee = PayUtils.getPayRate(payment, payAccount.getRealRate(), true); + if(mallCharge > iRealChargeFee) { + return mallCharge - iRealChargeFee; + } + } + return null; + } } diff --git a/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml index 31414355a..27afcea12 100644 --- a/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml @@ -30,6 +30,7 @@ + @@ -37,7 +38,8 @@ `auth_code`,`ip`,`pay_amount`,`pay_time_start`,`pay_time_end`, `prepay_id`,`transaction_id`,`pay_vendor`,`pay_order_no`, `pay_order_status`,`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` + `pos_pay_order_id`,`pos_pay_order_time`,`pos_payment_type`,`pos_pay_order_no`,`pos_pay_des`,`compose_order`, + `child_order_share`