Просмотр исходного кода

fix order

release_toaliyun_real
xiaohanzi 4 лет назад
Родитель
Сommit
e68daab181
18 измененных файлов: 348 добавлений и 74 удалений
  1. +102
    -1
      mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql
  2. +8
    -2
      mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java
  3. +1
    -1
      mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java
  4. +3
    -3
      mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java
  5. +5
    -0
      mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java
  6. +2
    -2
      mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java
  7. +15
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java
  8. +2
    -1
      mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java
  9. +34
    -10
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java
  10. +19
    -31
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java
  11. +33
    -8
      mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java
  12. +14
    -0
      mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java
  13. +19
    -0
      mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderPrice.java
  14. +24
    -0
      mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java
  15. +15
    -1
      mallinkService/src/main/java/com/iformall/service/order/impl/BatchOrderAdapterService.java
  16. +13
    -6
      mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java
  17. +36
    -7
      mallinkService/src/main/java/com/iformall/service/order/util/OrderHelper.java
  18. +3
    -1
      mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml

+ 102
- 1
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_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_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_98 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号';
ALTER TABLE wx_coupon_order_99 ADD COLUMN `compose_order_id` bigint(20) COMMENT '组合订单编号';
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 '子订单分账金额';

+ 8
- 2
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.enums.*;
import com.iformall.exception.MallinkException; import com.iformall.exception.MallinkException;
import com.iformall.service.*; import com.iformall.service.*;
import com.iformall.service.order.OrderFactory;
import com.iformall.service.order.entity.WxComposeOrder;
import com.iformall.utils.IPUtil; import com.iformall.utils.IPUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
@@ -57,6 +59,9 @@ public class WxMicroPayController extends BaseController {


@Autowired @Autowired
private WxCUserBasicInfoService wxCUserBasicInfoService; private WxCUserBasicInfoService wxCUserBasicInfoService;
@Autowired
OrderFactory orderFactory;


@ApiOperation(value = "付款码支付订单", notes = "params:{\"authCode\":\"String\",\"totalFee\":\"支付金额\"},\n" + @ApiOperation(value = "付款码支付订单", notes = "params:{\"authCode\":\"String\",\"totalFee\":\"支付金额\"},\n" +
"注意:\n" + "注意:\n" +
@@ -428,7 +433,8 @@ public class WxMicroPayController extends BaseController {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); 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) { if (microOrder == null) {
return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); return new ResultData(ErrorCode.ORDER_IS_NOT_FIND);
} }
@@ -449,7 +455,7 @@ public class WxMicroPayController extends BaseController {
Integer remainPrice = payPrice; Integer remainPrice = payPrice;
if (wxCouponOrder != null) { if (wxCouponOrder != null) {
try { 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 = microOrder.getPayment() - couponPayOrder.getPayAmount();
remainPrice = couponPayOrder.getPayAmount(); remainPrice = couponPayOrder.getPayAmount();
// 更新实际支付金额 // 更新实际支付金额


+ 1
- 1
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()); 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") @PostMapping("singleSave")
public ResultData saveOrder(@RequestBody OrderSaveDto orderSaveDto) { public ResultData saveOrder(@RequestBody OrderSaveDto orderSaveDto) {
Long memberId; Long memberId;


+ 3
- 3
mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java Просмотреть файл

@@ -180,12 +180,12 @@ public class CouponOrderExpiringSchedule {
wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd());
wxSharingOrderDto.updateTenantInfo(wxPayOrder); wxSharingOrderDto.updateTenantInfo(wxPayOrder);
wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); 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 { } else {
// 未设置通道费差 // 未设置通道费差
wxSharingOrderDto.setShareAmount(wxPayOrder.getShareAmount());
wxSharingOrderDto.setShareAmount(wxPayOrder.getChildOrderShare(co.getOrderId()).getShareAmount());
} }
wxProfitSharingOrderService.finishSharingOrder(wxSharingOrderDto,wxPayOrder.getPayVendor()); wxProfitSharingOrderService.finishSharingOrder(wxSharingOrderDto,wxPayOrder.getPayVendor());
} }


+ 5
- 0
mallinkService/src/main/java/com/iformall/domain/dto/OrderSaveDto.java Просмотреть файл

@@ -21,5 +21,10 @@ public class OrderSaveDto implements Serializable {


//被操作人的ID 供A端使用 //被操作人的ID 供A端使用
private Long userId; private Long userId;
public boolean isPressOrder() {
boolean isPress = this.getPress() != null ? this.getPress() : false;
return isPress;
}


} }

+ 2
- 2
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") @io.swagger.annotations.ApiModelProperty(value="组合订单编号",name="composeOrderId")
private Long composeOrderId; private Long composeOrderId;
@io.swagger.annotations.ApiModelProperty(value="组合订单编号",name="couponNumber")
@io.swagger.annotations.ApiModelProperty(value="商品数量",name="couponNumber")
private Integer couponNumber; private Integer couponNumber;
@io.swagger.annotations.ApiModelProperty(value="组合订单类型EnumComposeOrder",name="composeOrderType") @io.swagger.annotations.ApiModelProperty(value="组合订单类型EnumComposeOrder",name="composeOrderType")
private Integer composeOrderType; private Integer composeOrderType;
@TableField(exist = false) @TableField(exist = false)
protected List<Integer> statusS; protected List<Integer> statusS;




+ 15
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java Просмотреть файл

@@ -1,7 +1,11 @@
package com.iformall.domain.po; package com.iformall.domain.po;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.service.order.entity.WxComposeChildOrderShare;

import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
@@ -52,6 +56,17 @@ public class WxPayOrder extends TenantEntity {
private Integer shareAmount; private Integer shareAmount;
@io.swagger.annotations.ApiModelProperty(value="通道费差(购买时刻的通道费差,分账完结时使用)",name="rateAmount") @io.swagger.annotations.ApiModelProperty(value="通道费差(购买时刻的通道费差,分账完结时使用)",name="rateAmount")
private Integer 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") @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason")
private String failReason; private String failReason;
@io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom") @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom")


+ 2
- 1
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.po.base.TenantEntity;
import com.iformall.domain.vo.*; import com.iformall.domain.vo.*;
import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumPayWay;
import com.iformall.service.order.entity.WxComposeOrder;


import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -206,7 +207,7 @@ public interface WxCouponOrderService {
*/ */
JSONArray queryMicroPayCouponOrder(WxMerchantBUser user, WxCUserBasicInfo cUser, Integer price); 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); Integer microPayVerify(WxMerchantBUser bUser, Long couponOrderId,EnumPayWay payWay);




+ 34
- 10
mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java Просмотреть файл

@@ -1,5 +1,6 @@
package com.iformall.service.impl; package com.iformall.service.impl;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -25,6 +26,12 @@ import com.iformall.mapper.*;
import com.iformall.mq.MqBaseProducer; import com.iformall.mq.MqBaseProducer;
import com.iformall.pay.WxPayConstant; import com.iformall.pay.WxPayConstant;
import com.iformall.service.*; 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.service.pay.PayServiceFactory;
import com.iformall.utils.Constant; import com.iformall.utils.Constant;
import com.iformall.utils.DateUtils; import com.iformall.utils.DateUtils;
@@ -152,6 +159,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
@Autowired @Autowired
RedisLock redisLock; RedisLock redisLock;
@Autowired
OrderFactory orderFactory;


private final SimpleDateFormat mydateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 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.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode());
} }
wxSharingOrderDto.setPayAmount(wxPayOrder.getPayAmount()); wxSharingOrderDto.setPayAmount(wxPayOrder.getPayAmount());
wxSharingOrderDto.setRateAmount(wxPayOrder.getRateAmount());
wxSharingOrderDto.setRateAmount(wxPayOrder.getChildOrderShare(couponOrder.getOrderId()).getRateAmount());
wxSharingOrderDto.setOrderId(wxPayOrder.getId()); wxSharingOrderDto.setOrderId(wxPayOrder.getId());
wxSharingOrderDto.setPayTimeStart(wxPayOrder.getPayTimeStart()); wxSharingOrderDto.setPayTimeStart(wxPayOrder.getPayTimeStart());
wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd());
wxSharingOrderDto.updateTenantInfo(wxPayOrder); wxSharingOrderDto.updateTenantInfo(wxPayOrder);
wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId());
wxSharingOrderDto.setShareAmount(wxPayOrder.getShareAmount());
wxSharingOrderDto.setShareAmount(wxPayOrder.getChildOrderShare(couponOrder.getOrderId()).getShareAmount());
wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,payWay); wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,payWay);
} }
} catch (Exception e) { } catch (Exception e) {
@@ -1357,7 +1367,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {


@Override @Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @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. 获取券信息 // 1. 获取券信息
WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId(),couponOrder.getTenantId()); WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId(),couponOrder.getTenantId());
if (wxCoupon == null) { if (wxCoupon == null) {
@@ -1406,7 +1416,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify();
posCouponOrderVerify.updateTenantInfo(couponOrder); posCouponOrderVerify.updateTenantInfo(couponOrder);
posCouponOrderVerify.setCouponOrderId(couponOrder.getId()); posCouponOrderVerify.setCouponOrderId(couponOrder.getId());
posCouponOrderVerify.setPosOrderId(microOrder.getId());
posCouponOrderVerify.setPosOrderId(composeOrder.getSingleOrder().getId());
posCouponOrderVerify.setOrderFrom(EnumOrderFrom.INSIDE.getCode()); posCouponOrderVerify.setOrderFrom(EnumOrderFrom.INSIDE.getCode());
posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); posCouponOrderVerify.setState(EnumEnableType.Enable.getCode());
try { try {
@@ -1441,7 +1451,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify(); PosCouponOrderVerify posCouponOrderVerify = new PosCouponOrderVerify();
posCouponOrderVerify.updateTenantInfo(couponOrder); posCouponOrderVerify.updateTenantInfo(couponOrder);
posCouponOrderVerify.setCouponOrderId(couponOrder.getId()); posCouponOrderVerify.setCouponOrderId(couponOrder.getId());
posCouponOrderVerify.setPosOrderId(microOrder.getId());
posCouponOrderVerify.setPosOrderId(composeOrder.getSingleOrder().getId());
posCouponOrderVerify.setOrderFrom(EnumOrderFrom.INSIDE.getCode()); posCouponOrderVerify.setOrderFrom(EnumOrderFrom.INSIDE.getCode());
posCouponOrderVerify.setState(EnumEnableType.Enable.getCode()); posCouponOrderVerify.setState(EnumEnableType.Enable.getCode());
try { try {
@@ -1481,9 +1491,9 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
WxPayOrder payOrder = new WxPayOrder(); WxPayOrder payOrder = new WxPayOrder();
Date curDate = new Date(); Date curDate = new Date();
payOrder.setId(payOrderId); 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.setCreateTime(curDate);
payOrder.setUpdateTime(curDate); payOrder.setUpdateTime(curDate);
payOrder.setPayTimeStart(curDate); payOrder.setPayTimeStart(curDate);
@@ -1491,7 +1501,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
payOrder.setPayOrderNo(String.valueOf(payOrderId)); payOrder.setPayOrderNo(String.valueOf(payOrderId));
payOrder.setIp(ipstr); payOrder.setIp(ipstr);
payOrder.setAuthCode(authCode); payOrder.setAuthCode(authCode);
Integer payAmount = microOrder.getPayment() - wxCoupon.getPrice();
Integer payAmount = composeOrder.getSingleOrder().getPayment() - wxCoupon.getPrice();
payOrder.setPayAmount(payAmount); payOrder.setPayAmount(payAmount);
// if (microOrder.getPayment() > wxCoupon.getPrice()) { // if (microOrder.getPayment() > wxCoupon.getPrice()) {
// payOrder.setPayAmount(wxCoupon.getPrice()); // payOrder.setPayAmount(wxCoupon.getPrice());
@@ -1503,7 +1513,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
payOrder.setShare(shareCode); payOrder.setShare(shareCode);
if (shareCode.intValue() == EnumPayShare.YES.getCode().intValue()) { 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; Integer share_amount = payAmount - iChargeFee;
payOrder.setShareAmount(share_amount); payOrder.setShareAmount(share_amount);
if(payAccount.getRealRate() != null) { if(payAccount.getRealRate() != null) {
@@ -1513,6 +1523,20 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
if (share_amount <= 0) { if (share_amount <= 0) {
payOrder.setShare(EnumPayShare.NO.getCode()); payOrder.setShare(EnumPayShare.NO.getCode());
} }
//设置子订单分账金额
Map<String,WxComposeChildOrderShare> childShares = new HashMap<String,WxComposeChildOrderShare>();
OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType());
List<WxOrder> 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.setPayFrom(EnumPayFrom.INSIDE_B.getCode());
payOrder.setPosPayOrderId(couponOrder.getId()); payOrder.setPosPayOrderId(couponOrder.getId());


+ 19
- 31
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.*;
import com.iformall.service.order.OrderAdapterService; import com.iformall.service.order.OrderAdapterService;
import com.iformall.service.order.OrderFactory; 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.entity.WxComposeOrder;
import com.iformall.service.order.util.OrderHelper;


import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -1111,22 +1114,19 @@ public class WxOrderServiceImpl implements WxOrderService {
cardInfo.setTransactionId(payOrder.getTransactionId()); cardInfo.setTransactionId(payOrder.getTransactionId());
if (payOrder.getShareAmount() != null) { 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 { } 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.setShareFeeAmount(shareAmount);
cardInfo.setRemainingShareFeeAmount(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 { } else {
@@ -1749,13 +1749,13 @@ public class WxOrderServiceImpl implements WxOrderService {
sharingOrder.setMerchantId(wxMerchantBUser.getMerchantId()); sharingOrder.setMerchantId(wxMerchantBUser.getMerchantId());
sharingOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode()); sharingOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode());
sharingOrder.setPayAmount(wxPayOrder.getPayAmount()); sharingOrder.setPayAmount(wxPayOrder.getPayAmount());
sharingOrder.setRateAmount(wxPayOrder.getRateAmount());
sharingOrder.setRateAmount(wxPayOrder.getChildOrderShare(orderId).getRateAmount());
sharingOrder.setOrderId(wxPayOrder.getId()); sharingOrder.setOrderId(wxPayOrder.getId());
sharingOrder.setPayTimeStart(wxPayOrder.getPayTimeStart()); sharingOrder.setPayTimeStart(wxPayOrder.getPayTimeStart());
sharingOrder.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); sharingOrder.setPayTimeEnd(wxPayOrder.getPayTimeEnd());
sharingOrder.updateTenantInfo(wxPayOrder); sharingOrder.updateTenantInfo(wxPayOrder);
sharingOrder.setTransactionId(wxPayOrder.getTransactionId()); sharingOrder.setTransactionId(wxPayOrder.getTransactionId());
sharingOrder.setShareAmount(wxPayOrder.getShareAmount());
sharingOrder.setShareAmount(wxPayOrder.getChildOrderShare(orderId).getShareAmount());
ResultData resultData = wxProfitSharingOrderService.createSharingOrder(sharingOrder,payWay.getCode()); ResultData resultData = wxProfitSharingOrderService.createSharingOrder(sharingOrder,payWay.getCode());
} else { } else {
logger.error("微信分账: 未找到payorder or merchant at orderid-" + orderId); logger.error("微信分账: 未找到payorder or merchant at orderid-" + orderId);
@@ -2007,7 +2007,6 @@ public class WxOrderServiceImpl implements WxOrderService {
} }
for (int j =0 ; j < totalOrderCount ; j ++) { for (int j =0 ; j < totalOrderCount ; j ++) {
// 是否砍价 // 是否砍价
boolean isPress = orderdto.getSignleOrder().getPress() != null ? orderdto.getSignleOrder().getPress() : false;
WxOrder order = null; WxOrder order = null;
if (checkCouponIsFree(orderdto.getWxCoupon())) { if (checkCouponIsFree(orderdto.getWxCoupon())) {
// 免费券 // 免费券
@@ -2024,7 +2023,7 @@ public class WxOrderServiceImpl implements WxOrderService {
} }
} else { } 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. 保存订单 // 4. 保存订单
Long orderNumber; Long orderNumber;
// 4.1 券价格 // 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 保存订单 // 4.2 保存订单
WxOrder record = new WxOrder(); WxOrder record = new WxOrder();
@@ -2136,7 +2124,7 @@ public class WxOrderServiceImpl implements WxOrderService {
record.setCouponChannelId(couponChannelId); record.setCouponChannelId(couponChannelId);
record.setOrderGroupId(orderGroupId); record.setOrderGroupId(orderGroupId);
record.setFormId(formId); record.setFormId(formId);
record.setPayment(payment);
record.setPayment(price.getRealPayMent());
record.setOrderStatus(orderStatus); record.setOrderStatus(orderStatus);
record.setComposeOrderId(composeOrder.getMainOrderId()); record.setComposeOrderId(composeOrder.getMainOrderId());
record.setComposeOrderType(composeOrder.getComposeOrderType()); record.setComposeOrderType(composeOrder.getComposeOrderType());


+ 33
- 8
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.helper.WxPayOrderServiceHelper;
import com.iformall.service.order.OrderAdapterService; import com.iformall.service.order.OrderAdapterService;
import com.iformall.service.order.OrderFactory; 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.entity.WxComposeOrder;
import com.iformall.service.order.util.OrderHelper;
import com.iformall.service.pay.PayServiceFactory; import com.iformall.service.pay.PayServiceFactory;
import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.entity.PayExtraParam;
import com.iformall.service.pay.service.pay.CDrivingPayService; import com.iformall.service.pay.service.pay.CDrivingPayService;
@@ -380,15 +383,23 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
record.setComposeOrder(composeOrder.getComposeOrderType()); record.setComposeOrder(composeOrder.getComposeOrderType());
if (isShare == EnumPayShare.YES) { 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); 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<String,WxComposeChildOrderShare> childShares = new HashMap<String,WxComposeChildOrderShare>();
OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType());
List<WxOrder> 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); int sqlRow = wxPayOrderMapper.insert(record);
@@ -484,7 +495,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
record.setShare(isShare.getCode()); record.setShare(isShare.getCode());
if (isShare == EnumPayShare.YES) { 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; Integer share_amount = record.getPayAmount() - iChargeFee;
record.setShareAmount(share_amount); record.setShareAmount(share_amount);
if(payAccount.getRealRate() != null) { if(payAccount.getRealRate() != null) {
@@ -495,6 +506,20 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
isShare = EnumPayShare.NO; isShare = EnumPayShare.NO;
record.setShare(isShare.getCode()); record.setShare(isShare.getCode());
} }
//设置子订单分账金额
Map<String,WxComposeChildOrderShare> childShares = new HashMap<String,WxComposeChildOrderShare>();
OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType());
List<WxOrder> 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); int sqlRow = wxPayOrderMapper.insert(record);


+ 14
- 0
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.WxOrder;
import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumPayWay;
import com.iformall.service.order.entity.WxComposeChildOrderPrice;
import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.order.entity.WxComposeOrder;


public interface OrderAdapterService { public interface OrderAdapterService {
@@ -24,6 +25,19 @@ public interface OrderAdapterService {
*/ */
boolean isOneNumberOneOrder(WxCoupon coupon); boolean isOneNumberOneOrder(WxCoupon coupon);
/**
* 查询每一个订单的产品的真实支付价格及补贴
* @param coupon
* @return
*/
WxComposeChildOrderPrice getChildOrderPrice(WxCoupon coupon,boolean isPress,Long orderGroupId,Integer couponNumber);
/**
* 计算每一个子订单的补贴
* @return
*/
Integer calcuteChildOrderSubsidy();
/** /**
* 查询订单信息,单个模式查询WxOrder * 查询订单信息,单个模式查询WxOrder
* @param mainOrderId * @param mainOrderId


+ 19
- 0
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;//产品编号
}

+ 24
- 0
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;
}

+ 15
- 1
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.mapper.WxOrderMapper;
import com.iformall.service.WxOrderService; import com.iformall.service.WxOrderService;
import com.iformall.service.order.OrderAdapterService; 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.entity.WxComposeOrder;
import com.iformall.service.order.util.OrderHelper; import com.iformall.service.order.util.OrderHelper;


@@ -48,7 +49,8 @@ public class BatchOrderAdapterService implements OrderAdapterService {
int payment = 0; int payment = 0;
for (OrderComposeSaveDto ocsd : orderSave) { for (OrderComposeSaveDto ocsd : orderSave) {
boolean isPress = ocsd.getSignleOrder().getPress() != null ? ocsd.getSignleOrder().getPress() : false; 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.setPayment(payment);
order.setCreateDate(new Date()); 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;
}
} }

+ 13
- 6
mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java Просмотреть файл

@@ -1,26 +1,21 @@
package com.iformall.service.order.impl; package com.iformall.service.order.impl;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;


import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

import com.iformall.common.IdWorker;
import com.iformall.domain.dto.OrderComposeSaveDto; import com.iformall.domain.dto.OrderComposeSaveDto;
import com.iformall.domain.po.WxBatchOrder;
import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxOrder;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumComposeOrder; import com.iformall.enums.EnumComposeOrder;
import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumPayWay;
import com.iformall.mapper.WxBatchOrderMapper;
import com.iformall.mapper.WxOrderMapper; import com.iformall.mapper.WxOrderMapper;
import com.iformall.service.order.OrderAdapterService; 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.entity.WxComposeOrder;
import com.iformall.service.order.util.OrderHelper; import com.iformall.service.order.util.OrderHelper;


@@ -71,6 +66,18 @@ public class SingleOrderAdapterService implements OrderAdapterService {
wxOrderMapper.updateCUserId(order); 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;
}







+ 36
- 7
mallinkService/src/main/java/com/iformall/service/order/util/OrderHelper.java Просмотреть файл

@@ -1,26 +1,55 @@
package com.iformall.service.order.util; package com.iformall.service.order.util;


import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxPayAccount;
import com.iformall.enums.EnumCouponType; import com.iformall.enums.EnumCouponType;
import com.iformall.enums.EnumOrderStatus;
import com.iformall.utils.PayUtils;


public class OrderHelper { 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 券价格 // 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())) { 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 (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) {
if (orderGroupId == null) { if (orderGroupId == null) {
// 拼团券 初始是全价即面额 // 拼团券 初始是全价即面额
payment = coupon.getPrice()*couponNumber;
} else {
//orderStatus = EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode();
payment = coupon.getPrice();
} }
} }
return payment; 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;
}
} }

+ 3
- 1
mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml Просмотреть файл

@@ -30,6 +30,7 @@
<result column="pos_pay_order_no" jdbcType="INTEGER" property="posPayOrderNo"/> <result column="pos_pay_order_no" jdbcType="INTEGER" property="posPayOrderNo"/>
<result column="pos_pay_des" jdbcType="INTEGER" property="posPayDes"/> <result column="pos_pay_des" jdbcType="INTEGER" property="posPayDes"/>
<result column="compose_order" jdbcType="INTEGER" property="composeOrder"/> <result column="compose_order" jdbcType="INTEGER" property="composeOrder"/>
<result column="child_order_share" jdbcType="VARCHAR" property="childOrderShare"/>
</resultMap> </resultMap>


<sql id="allColumns"> <sql id="allColumns">
@@ -37,7 +38,8 @@
`auth_code`,`ip`,`pay_amount`,`pay_time_start`,`pay_time_end`, `auth_code`,`ip`,`pay_amount`,`pay_time_start`,`pay_time_end`,
`prepay_id`,`transaction_id`,`pay_vendor`,`pay_order_no`, `prepay_id`,`transaction_id`,`pay_vendor`,`pay_order_no`,
`pay_order_status`,`share`,`share_amount`,`rate_amount`,`fail_reason`, `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`
</sql> </sql>


<sql id="dynamicWhereConditions"> <sql id="dynamicWhereConditions">


Загрузка…
Отмена
Сохранить