Browse Source

推单逻辑

lhm 3 years ago
parent
commit
2c639ab6dd

+ 3 - 2
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java

@@ -22,6 +22,7 @@ import com.kmall.common.utils.wechat.WechatRefundApiResult;
 import com.kmall.common.utils.wechat.WechatReverseApiResult;
 import com.kmall.manager.manager.alipay.AliPayMicropayApiResult;
 import com.kmall.manager.manager.alipay.AliPayUtil;
+import com.kmall.manager.manager.dto.PayOriginInfoDTO;
 import com.kmall.manager.manager.express.sf.ServiceException;
 import com.kmall.manager.manager.merch.OmsMerchPropertiesBuilder;
 import com.kmall.manager.manager.pingan.PinganUtil;
@@ -798,12 +799,12 @@ public class OrderController {
 
         //保存支付记录
         OrderWXPayRecordEntity orderWXPayRecordCurrent = orderWXPayRecordService.saveRecord(orderEntity);
-
+        PayOriginInfoDTO payOriginInfoDTO = new PayOriginInfoDTO();
         StoreEntity store = storeService.queryObject(orderEntity.getStoreId());
         WechatMicropayApiResult wechatMicropayApiResult = WechatUtil
                 .wxMicropay(store.getMerchName() + "-" + store.getStoreName(), orderEntity.getOrderBizType(), null,
                             orderWXPayRecordCurrent.getOutTradeNoWX(), orderEntity.getActualPrice().doubleValue(),
-                            "127.0.0.1", auth_code);
+                            "127.0.0.1", auth_code, payOriginInfoDTO);
         orderWXPayRecordService.updateRecord(orderWXPayRecordCurrent.getId(), wechatMicropayApiResult);
 
         //当支付成功时,修改订单,并把其他支付记录撤销

+ 215 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/dto/OrderInfoDTO.java

@@ -0,0 +1,215 @@
+package com.kmall.admin.haikong.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.*;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 订单主信息
+ * @author lhm
+ * @createDate 2021-12-07
+ */
+public class OrderInfoDTO implements Serializable {
+
+    private static final long serialVersionUID = -1110285187874182199L;
+
+    @JsonProperty("outer_order_no")
+    private String outerOrderNo;
+
+    @JsonProperty("pay_app")
+    private String payApp;
+
+    /**
+     * 默认:SF
+     */
+    @JsonProperty("dlytype_code")
+    private String dlytypeCode;
+
+    @JsonProperty("consignee_name")
+    private String consigneeName;
+
+    @JsonProperty("consignee_area_province")
+    private String consigneeAreaProvince;
+
+    @JsonProperty("consignee_area_city")
+    private String consigneeAreaCity;
+
+    @JsonProperty("consignee_area_county")
+    private String consigneeAreaCounty;
+
+    @JsonProperty("consignee_address")
+    private String consigneeAddress;
+
+    @JsonProperty("consignee_zip")
+    private String consigneeZip;
+
+    @JsonProperty("consignee_tel")
+    private String consigneeTel;
+
+    @JsonProperty("consignee_email")
+    private String consigneeEmail;
+
+    @JsonProperty("consignee_mobile")
+    private String consigneeMobile;
+
+    private String weight;
+
+    private Integer quantity;
+
+    @JsonProperty("order_total")
+    private BigDecimal orderTotal;
+
+    private String platform;
+
+    public String getOuterOrderNo() {
+        return outerOrderNo;
+    }
+
+    public void setOuterOrderNo(String outerOrderNo) {
+        this.outerOrderNo = outerOrderNo;
+    }
+
+    public String getPayApp() {
+        return payApp;
+    }
+
+    public void setPayApp(String payApp) {
+        this.payApp = payApp;
+    }
+
+    public String getDlytypeCode() {
+        return dlytypeCode;
+    }
+
+    public void setDlytypeCode(String dlytypeCode) {
+        this.dlytypeCode = dlytypeCode;
+    }
+
+    public String getConsigneeName() {
+        return consigneeName;
+    }
+
+    public void setConsigneeName(String consigneeName) {
+        this.consigneeName = consigneeName;
+    }
+
+    public String getConsigneeAreaProvince() {
+        return consigneeAreaProvince;
+    }
+
+    public void setConsigneeAreaProvince(String consigneeAreaProvince) {
+        this.consigneeAreaProvince = consigneeAreaProvince;
+    }
+
+    public String getConsigneeAreaCity() {
+        return consigneeAreaCity;
+    }
+
+    public void setConsigneeAreaCity(String consigneeAreaCity) {
+        this.consigneeAreaCity = consigneeAreaCity;
+    }
+
+    public String getConsigneeAreaCounty() {
+        return consigneeAreaCounty;
+    }
+
+    public void setConsigneeAreaCounty(String consigneeAreaCounty) {
+        this.consigneeAreaCounty = consigneeAreaCounty;
+    }
+
+    public String getConsigneeAddress() {
+        return consigneeAddress;
+    }
+
+    public void setConsigneeAddress(String consigneeAddress) {
+        this.consigneeAddress = consigneeAddress;
+    }
+
+    public String getConsigneeZip() {
+        return consigneeZip;
+    }
+
+    public void setConsigneeZip(String consigneeZip) {
+        this.consigneeZip = consigneeZip;
+    }
+
+    public String getConsigneeTel() {
+        return consigneeTel;
+    }
+
+    public void setConsigneeTel(String consigneeTel) {
+        this.consigneeTel = consigneeTel;
+    }
+
+    public String getConsigneeEmail() {
+        return consigneeEmail;
+    }
+
+    public void setConsigneeEmail(String consigneeEmail) {
+        this.consigneeEmail = consigneeEmail;
+    }
+
+    public String getConsigneeMobile() {
+        return consigneeMobile;
+    }
+
+    public void setConsigneeMobile(String consigneeMobile) {
+        this.consigneeMobile = consigneeMobile;
+    }
+
+    public String getWeight() {
+        return weight;
+    }
+
+    public void setWeight(String weight) {
+        this.weight = weight;
+    }
+
+    public Integer getQuantity() {
+        return quantity;
+    }
+
+    public void setQuantity(Integer quantity) {
+        this.quantity = quantity;
+    }
+
+    public BigDecimal getOrderTotal() {
+        return orderTotal;
+    }
+
+    public void setOrderTotal(BigDecimal orderTotal) {
+        this.orderTotal = orderTotal;
+    }
+
+    public String getPlatform() {
+        return platform;
+    }
+
+    public void setPlatform(String platform) {
+        this.platform = platform;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderInfoDTO{" +
+                "outerOrderNo='" + outerOrderNo + '\'' +
+                ", payApp='" + payApp + '\'' +
+                ", dlytypeCode='" + dlytypeCode + '\'' +
+                ", consigneeName='" + consigneeName + '\'' +
+                ", consigneeAreaProvince='" + consigneeAreaProvince + '\'' +
+                ", consigneeAreaCity='" + consigneeAreaCity + '\'' +
+                ", consigneeAreaCounty='" + consigneeAreaCounty + '\'' +
+                ", consigneeAddress='" + consigneeAddress + '\'' +
+                ", consigneeZip='" + consigneeZip + '\'' +
+                ", consigneeTel='" + consigneeTel + '\'' +
+                ", consigneeEmail='" + consigneeEmail + '\'' +
+                ", consigneeMobile='" + consigneeMobile + '\'' +
+                ", weight='" + weight + '\'' +
+                ", quantity='" + quantity + '\'' +
+                ", orderTotal=" + orderTotal +
+                ", platform='" + platform + '\'' +
+                '}';
+    }
+}

+ 158 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/dto/OrderInfoItemDTO.java

@@ -0,0 +1,158 @@
+package com.kmall.admin.haikong.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 订单明细信息
+ * @author lhm
+ * @createDate 2021-12-07
+ */
+public class OrderInfoItemDTO implements Serializable {
+
+    private static final long serialVersionUID = -5010285187879982199L;
+
+    @JsonProperty("order_id")
+    private String orderId;
+
+    @JsonProperty("image_url")
+    private String imageUrl;
+
+    private String bn;
+
+    private String barcode;
+
+    private String name;
+
+    private BigDecimal cost;
+
+    private BigDecimal price;
+
+    private String itemcode;
+
+    private BigDecimal amount;
+
+    private Integer nums;
+
+    @JsonProperty("is_tax")
+    private Boolean tax;
+
+    @JsonProperty("tax_price")
+    private BigDecimal taxPrice;
+
+    public String getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(String orderId) {
+        this.orderId = orderId;
+    }
+
+    public String getImageUrl() {
+        return imageUrl;
+    }
+
+    public void setImageUrl(String imageUrl) {
+        this.imageUrl = imageUrl;
+    }
+
+    public String getBn() {
+        return bn;
+    }
+
+    public void setBn(String bn) {
+        this.bn = bn;
+    }
+
+    public String getBarcode() {
+        return barcode;
+    }
+
+    public void setBarcode(String barcode) {
+        this.barcode = barcode;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public BigDecimal getCost() {
+        return cost;
+    }
+
+    public void setCost(BigDecimal cost) {
+        this.cost = cost;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode;
+    }
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public Integer getNums() {
+        return nums;
+    }
+
+    public void setNums(Integer nums) {
+        this.nums = nums;
+    }
+
+    public Boolean getTax() {
+        return tax;
+    }
+
+    public void setTax(Boolean tax) {
+        this.tax = tax;
+    }
+
+    public BigDecimal getTaxPrice() {
+        return taxPrice;
+    }
+
+    public void setTaxPrice(BigDecimal taxPrice) {
+        this.taxPrice = taxPrice;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderInfoItemDTO{" +
+                "orderId='" + orderId + '\'' +
+                ", imageUrl='" + imageUrl + '\'' +
+                ", bn='" + bn + '\'' +
+                ", barcode='" + barcode + '\'' +
+                ", name='" + name + '\'' +
+                ", cost=" + cost +
+                ", price=" + price +
+                ", itemcode='" + itemcode + '\'' +
+                ", amount=" + amount +
+                ", nums=" + nums +
+                ", tax=" + tax +
+                ", taxPrice=" + taxPrice +
+                '}';
+    }
+}

+ 32 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/dto/OrderProductInfoDTO.java

@@ -0,0 +1,32 @@
+package com.kmall.admin.haikong.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * @author lhm
+ * @createDate 2021-12-07
+ */
+public class OrderProductInfoDTO {
+
+    @JsonProperty("product_id")
+    private String productId;
+
+    @JsonProperty("goods_id")
+    private String goodsId;
+
+    public String getProductId() {
+        return productId;
+    }
+
+    public void setProductId(String productId) {
+        this.productId = productId;
+    }
+
+    public String getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(String goodsId) {
+        this.goodsId = goodsId;
+    }
+}

+ 82 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/dto/PayInfoDTO.java

@@ -0,0 +1,82 @@
+package com.kmall.admin.haikong.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 订单支付信息
+ * @author lhm
+ * @createDate 2021-12-07
+ */
+public class PayInfoDTO implements Serializable {
+
+    private static final long serialVersionUID = -5010666187874182199L;
+
+    private BigDecimal money;
+
+    /**
+     * 默认线下支付:offline
+     */
+    @JsonProperty("pay_mode")
+    private String payMode;
+
+    private String request;
+
+    private String response;
+
+    @JsonProperty("out_trade_no")
+    private String outTradeNo;
+
+    public BigDecimal getMoney() {
+        return money;
+    }
+
+    public void setMoney(BigDecimal money) {
+        this.money = money;
+    }
+
+    public String getPayMode() {
+        return payMode;
+    }
+
+    public void setPayMode(String payMode) {
+        this.payMode = payMode;
+    }
+
+    public String getRequest() {
+        return request;
+    }
+
+    public void setRequest(String request) {
+        this.request = request;
+    }
+
+    public String getResponse() {
+        return response;
+    }
+
+    public void setResponse(String response) {
+        this.response = response;
+    }
+
+    public String getOutTradeNo() {
+        return outTradeNo;
+    }
+
+    public void setOutTradeNo(String outTradeNo) {
+        this.outTradeNo = outTradeNo;
+    }
+
+    @Override
+    public String toString() {
+        return "PayInfoDTO{" +
+                "money=" + money +
+                ", payMode='" + payMode + '\'' +
+                ", request='" + request + '\'' +
+                ", response='" + response + '\'' +
+                ", outTradeNo='" + outTradeNo + '\'' +
+                '}';
+    }
+}

+ 96 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/dto/SeaportInfoDTO.java

@@ -0,0 +1,96 @@
+package com.kmall.admin.haikong.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 跨境信息
+ * @author lhm
+ * @createDate 2021-12-07
+ */
+public class SeaportInfoDTO implements Serializable {
+
+    private static final long serialVersionUID = -5010285187875875199L;
+
+    /**
+     * 口岸代码:默认珠海海关口岸代码
+     */
+    @JsonProperty("seaport_code")
+    private String seaportCode;
+
+    private String platform;
+
+    @JsonProperty("identity_card")
+    private String identityCard;
+
+    @JsonProperty("identity_name")
+    private String identityName;
+
+    @JsonProperty("identity_mobile")
+    private String identityMobile;
+
+    @JsonProperty("order_product_info")
+    private List<OrderProductInfoDTO> orderProductInfoList;
+
+    public String getSeaportCode() {
+        return seaportCode;
+    }
+
+    public void setSeaportCode(String seaportCode) {
+        this.seaportCode = seaportCode;
+    }
+
+    public String getPlatform() {
+        return platform;
+    }
+
+    public void setPlatform(String platform) {
+        this.platform = platform;
+    }
+
+    public String getIdentityCard() {
+        return identityCard;
+    }
+
+    public void setIdentityCard(String identityCard) {
+        this.identityCard = identityCard;
+    }
+
+    public String getIdentityName() {
+        return identityName;
+    }
+
+    public void setIdentityName(String identityName) {
+        this.identityName = identityName;
+    }
+
+    public String getIdentityMobile() {
+        return identityMobile;
+    }
+
+    public void setIdentityMobile(String identityMobile) {
+        this.identityMobile = identityMobile;
+    }
+
+    public List<OrderProductInfoDTO> getOrderProductInfoList() {
+        return orderProductInfoList;
+    }
+
+    public void setOrderProductInfoList(List<OrderProductInfoDTO> orderProductInfoList) {
+        this.orderProductInfoList = orderProductInfoList;
+    }
+
+    @Override
+    public String toString() {
+        return "SeaportInfoDTO{" +
+                "seaportCode='" + seaportCode + '\'' +
+                ", platform='" + platform + '\'' +
+                ", identityCard='" + identityCard + '\'' +
+                ", identityName='" + identityName + '\'' +
+                ", identityMobile='" + identityMobile + '\'' +
+                ", orderProductInfoList=" + orderProductInfoList +
+                '}';
+    }
+}

+ 71 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/dto/SendOrderToVmcShopDTO.java

@@ -0,0 +1,71 @@
+package com.kmall.admin.haikong.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.*;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 免税mall创建订单
+ * @author lhm
+ * @createDate 2021-12-07
+ */
+public class SendOrderToVmcShopDTO implements Serializable {
+
+    private static final long serialVersionUID = -5010285187874182199L;
+
+    @JsonProperty("orderinfo")
+    private OrderInfoDTO orderInfo;
+
+    @JsonProperty("order_items")
+    private List<OrderInfoItemDTO> orderInfoItems;
+
+    @JsonProperty("payinfo")
+    private PayInfoDTO payInfo;
+
+    @JsonProperty("seaport_info")
+    private SeaportInfoDTO seaportInfo;
+
+    public OrderInfoDTO getOrderInfo() {
+        return orderInfo;
+    }
+
+    public void setOrderInfo(OrderInfoDTO orderInfo) {
+        this.orderInfo = orderInfo;
+    }
+
+    public List<OrderInfoItemDTO> getOrderInfoItems() {
+        return orderInfoItems;
+    }
+
+    public void setOrderInfoItems(List<OrderInfoItemDTO> orderInfoItems) {
+        this.orderInfoItems = orderInfoItems;
+    }
+
+    public PayInfoDTO getPayInfo() {
+        return payInfo;
+    }
+
+    public void setPayInfo(PayInfoDTO payInfo) {
+        this.payInfo = payInfo;
+    }
+
+    public SeaportInfoDTO getSeaportInfo() {
+        return seaportInfo;
+    }
+
+    public void setSeaportInfo(SeaportInfoDTO seaportInfo) {
+        this.seaportInfo = seaportInfo;
+    }
+
+    @Override
+    public String toString() {
+        return "SendOrderToVmcShopDTO{" +
+                "orderInfo=" + orderInfo +
+                ", orderInfoItems=" + orderInfoItems +
+                ", payInfo=" + payInfo +
+                ", seaportInfo=" + seaportInfo +
+                '}';
+    }
+}

+ 38 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/utils/R.java

@@ -0,0 +1,38 @@
+package com.kmall.admin.haikong.utils;
+
+/**
+ * @author lhm
+ * @createDate 2021-12-07
+ */
+public class R<T> {
+
+    private int code;
+
+    private String result;
+
+    private T data;
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getResult() {
+        return result;
+    }
+
+    public void setResult(String result) {
+        this.result = result;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+}

+ 131 - 6
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -76,6 +76,7 @@ import com.kmall.common.utils.wechat.WechatReverseApiResult;
 import com.kmall.manager.manager.alipay.AliPayMicropayApiResult;
 import com.kmall.manager.manager.alipay.AliPayRequestParams;
 import com.kmall.manager.manager.alipay.AliPayUtil;
+import com.kmall.manager.manager.dto.PayOriginInfoDTO;
 import com.kmall.manager.manager.express.kdn.KdniaoUtil;
 import com.kmall.manager.manager.express.sf.ServiceException;
 import com.kmall.manager.manager.express.sf.entity.RouteEntity;
@@ -2668,6 +2669,7 @@ public class OrderServiceImpl implements OrderService {
             String couponSn = (String) userInfo.get("couponSn");
             order.setMerchOrderSn(merchOrderSn);
             order.setCoupon_name(couponSn); // 借用这个字段来记录是否使用优惠券
+            order.setIdCard(userEntity.getIdNo());
             //插入订单信息和订单商品
             orderDao.saveOrderVo(order);
 
@@ -2906,6 +2908,14 @@ public class OrderServiceImpl implements OrderService {
                     + "");
 
             JedisUtil.del(Constants.WAREHOUSE_STOCK_MAP_KEY + "_" + storeId);
+
+            // TODO 推单测试用
+            order.setPayApp("wxpay");
+            order.setRequest("1111111111111111111");
+            order.setResponse("2222222222222222222");
+            // 推单
+            sendOrderInfoToVmcShop(order, orderGoodsVoList);
+
             return resultObj;
         } catch (Exception e) {
             e.printStackTrace();
@@ -2915,6 +2925,110 @@ public class OrderServiceImpl implements OrderService {
         }
     }
 
+    /**
+     * 免税mall创建订单
+     * @param order             订单信息:包含订单信息,支付信息,跨境信息
+     * @param orderGoodsVoList  订单详情数据
+     */
+    private void sendOrderInfoToVmcShop(OrderVo order, List<OrderGoodsVo> orderGoodsVoList) {
+        SendOrderToVmcShopDTO sendOrderToVmcShopDTO = new SendOrderToVmcShopDTO();
+
+        OrderInfoDTO orderInfoDTO = wrapOrderInfo(order);
+        PayInfoDTO payInfoDTO = wrapPayInfo(order);
+        SeaportInfoDTO seaportInfoDTO = wrapSeaportInfo(order);
+        List<OrderProductInfoDTO> orderProductInfoDTOList = orderGoodsVoList.stream().map(this::wrapOrderProductInfo).collect(Collectors.toList());
+        seaportInfoDTO.setOrderProductInfoList(orderProductInfoDTOList);
+        List<OrderInfoItemDTO> orderInfoItemDTOList = orderGoodsVoList.stream().map(this::wrapOrderInfoItem).collect(Collectors.toList());
+
+        sendOrderToVmcShopDTO.setOrderInfo(orderInfoDTO);
+        sendOrderToVmcShopDTO.setOrderInfoItems(orderInfoItemDTOList);
+        sendOrderToVmcShopDTO.setSeaportInfo(seaportInfoDTO);
+        sendOrderToVmcShopDTO.setPayInfo(payInfoDTO);
+
+        String body = JacksonUtil.toJson(sendOrderToVmcShopDTO);
+
+        try {
+
+            String response = vmcShopTemplate.sendOrder(body);
+
+            com.kmall.admin.haikong.utils.R<String> r = JacksonUtil.fromListJson(response, new TypeReference<com.kmall.admin.haikong.utils.R<String>>() {});
+
+            if (Objects.nonNull(r) && r.getCode() == 0) {
+                LOGGER.info("推送订单到免税mall成功!响应结果:{}", response);
+            } else {
+                LOGGER.error("推送订单到免税mall失败!响应结果:{}", response);
+            }
+        } catch (Exception e) {
+            LOGGER.error("推送订单到免税mall失败!出现异常!", e);
+        }
+    }
+
+    private SeaportInfoDTO wrapSeaportInfo(OrderVo order) {
+        SeaportInfoDTO seaportInfoDTO = new SeaportInfoDTO();
+        seaportInfoDTO.setSeaportCode("4600");
+        seaportInfoDTO.setPlatform("1");
+        seaportInfoDTO.setIdentityCard(order.getIdCard());
+        seaportInfoDTO.setIdentityName(order.getPay_name());
+        seaportInfoDTO.setIdentityMobile(order.getMobile());
+        return seaportInfoDTO;
+    }
+
+    private PayInfoDTO wrapPayInfo(OrderVo order) {
+        PayInfoDTO payInfoDTO = new PayInfoDTO();
+        payInfoDTO.setMoney(order.getActual_price());
+        payInfoDTO.setPayMode("offline");
+        payInfoDTO.setRequest(order.getRequest());
+        payInfoDTO.setResponse(order.getResponse());
+        payInfoDTO.setOutTradeNo(order.getOrder_sn());
+        return payInfoDTO;
+    }
+
+    private OrderInfoItemDTO wrapOrderInfoItem(OrderGoodsVo orderGoodsVo) {
+        OrderInfoItemDTO orderInfoItemDTO = new OrderInfoItemDTO();
+        orderInfoItemDTO.setOrderId(orderGoodsVo.getOrderSn());
+        orderInfoItemDTO.setImageUrl(orderGoodsVo.getList_pic_url());
+        orderInfoItemDTO.setBn("11111111");
+        orderInfoItemDTO.setBarcode(orderGoodsVo.getBarcode());
+        orderInfoItemDTO.setName(orderGoodsVo.getGoods_name());
+        orderInfoItemDTO.setCost(orderGoodsVo.getMarket_price());
+        orderInfoItemDTO.setPrice(orderGoodsVo.getRetail_price());
+        orderInfoItemDTO.setItemcode(orderGoodsVo.getSku());
+        orderInfoItemDTO.setAmount(orderGoodsVo.getActualPaymentAmount());
+        orderInfoItemDTO.setNums(orderGoodsVo.getNumber());
+        orderInfoItemDTO.setTax(true);
+        orderInfoItemDTO.setTaxPrice(orderGoodsVo.getTaxPrice());
+        return orderInfoItemDTO;
+    }
+
+    private OrderInfoDTO wrapOrderInfo(OrderVo order) {
+        OrderInfoDTO orderInfoDTO = new OrderInfoDTO();
+        orderInfoDTO.setOuterOrderNo(order.getOrder_sn());
+        orderInfoDTO.setPayApp(order.getPayApp());
+        orderInfoDTO.setDlytypeCode("SF");
+        orderInfoDTO.setConsigneeName(order.getPay_name());
+        orderInfoDTO.setConsigneeAreaProvince(order.getProvince());
+        orderInfoDTO.setConsigneeAreaCity(order.getCity());
+        orderInfoDTO.setConsigneeAreaCounty(order.getDistrict());
+        orderInfoDTO.setConsigneeAddress(order.getAddress());
+        orderInfoDTO.setConsigneeZip("519000");
+        orderInfoDTO.setConsigneeTel("0756-8800000");
+        orderInfoDTO.setConsigneeEmail("hk@greedc.com");
+        orderInfoDTO.setConsigneeMobile(order.getMobile());
+        orderInfoDTO.setWeight("?");
+        orderInfoDTO.setQuantity(order.getNumber());
+        orderInfoDTO.setOrderTotal(order.getActual_price());
+        orderInfoDTO.setPlatform("store");
+
+        return orderInfoDTO;
+    }
+
+    private OrderProductInfoDTO wrapOrderProductInfo(OrderGoodsVo orderGoodsVo) {
+        OrderProductInfoDTO orderProductInfoDTO = new OrderProductInfoDTO();
+        orderProductInfoDTO.setProductId(orderGoodsVo.getBarcode());
+        orderProductInfoDTO.setGoodsId(orderGoodsVo.getGoods_sn());
+        return orderProductInfoDTO;
+    }
+
     private void AliPay(SysUserEntity user, String parCode, OrderVo order, OrderProcessRecordEntity processRecordEntity, OrderWXPayRecordEntity orderWXPayRecordCurrent, StoreEntity store) throws Exception {
 
         AliPayRequestParams params = new AliPayRequestParams();
@@ -2934,11 +3048,15 @@ public class OrderServiceImpl implements OrderService {
         params.setSubject(store.getMerchName() + "-" + store.getStoreName() + "-" + orderBizTypeZn);
         params.setStoreId(store.getId() + "");
         params.setTotalAmount(order.getActual_price().setScale(2, BigDecimal.ROUND_HALF_UP) + "");
-        LOGGER.info("调用阿里支付接口的请求参数:" + JacksonUtils.toJson(params));
+        String paramsJson = JacksonUtils.toJson(params);
+        order.setRequest(paramsJson);
+        LOGGER.info("调用阿里支付接口的请求参数:" + paramsJson);
         AliPayMicropayApiResult aliPayMicropayApiResult = AliPayUtil.aliTradePay(params);
         orderWXPayRecordService.updateRecordByAli(orderWXPayRecordCurrent.getId(), aliPayMicropayApiResult);
-        LOGGER.info("调用阿里支付接口的同步返回结果:" + JacksonUtils.toJson(aliPayMicropayApiResult));
-
+        String responseJson = JacksonUtils.toJson(aliPayMicropayApiResult);
+        LOGGER.info("调用阿里支付接口的同步返回结果:" + responseJson);
+        order.setResponse(responseJson);
+        order.setPayApp("alipay");
 
         // 修改订单状态
         //当支付成功时,修改订单,并把其他支付记录撤销
@@ -3047,14 +3165,16 @@ public class OrderServiceImpl implements OrderService {
         } catch (Exception e) {
             e.printStackTrace();
         }
-
+        PayOriginInfoDTO payOriginInfoDTO = new PayOriginInfoDTO();
         WechatMicropayApiResult wechatMicropayApiResult = WechatUtil
                 .wxMicropay(store.getMerchName() + "-" + store.getStoreName(), order.getOrderBizType(), null,
                         orderWXPayRecordCurrent.getOutTradeNoWX(), order.getActual_price().doubleValue(),
-                        ip, parCode);
+                        ip, parCode, payOriginInfoDTO);
         orderWXPayRecordService.updateRecord(orderWXPayRecordCurrent.getId(), wechatMicropayApiResult);
 
-
+        order.setRequest(payOriginInfoDTO.getRequest());
+        order.setResponse(payOriginInfoDTO.getResponse());
+        order.setPayApp("wxpay");
         resultObj.put("shopName", store.getStoreName()); // 根据门店编号查询
         resultObj.put("userName", user.getUsername());
         // 修改订单状态
@@ -4749,6 +4869,7 @@ public class OrderServiceImpl implements OrderService {
         BigDecimal couponPrice = BigDecimal.ZERO;
         BigDecimal freightPrice = Constant.ZERO;
         BigDecimal actualPrice = Constant.ZERO;
+        Integer number = 0;
         //订单价格计算:订单的总价+运费
         for (GoodsEntity goodsEntity : goodsList) {
             goodsTotalPrice = goodsTotalPrice
@@ -4758,6 +4879,7 @@ public class OrderServiceImpl implements OrderService {
             actualPrice = actualPrice
                     .add(goodsEntity.getActualPaymentAmount()).setScale(2, RoundingMode.HALF_UP);
             couponPrice = couponPrice.add(goodsEntity.getDiscountedPrice()).setScale(2, RoundingMode.HALF_UP);
+            number += goodsEntity.getSellVolume();
         }
 
 
@@ -4773,6 +4895,7 @@ public class OrderServiceImpl implements OrderService {
         orderInfo.setOrder_sn(orderSn);
         orderInfo.setMerchSn(merchSn);
         orderInfo.setUser_id(loginUser.getId().longValue());
+        orderInfo.setNumber(number);
         actualPrice = actualPrice.subtract(couponPrice);
 
         //StoreEntity storeEntity = storeDao.queryObject(storeId);
@@ -4878,6 +5001,8 @@ public class OrderServiceImpl implements OrderService {
         orderGoodsVo.setList_pic_url(goodsDto.getListPicUrl());
         orderGoodsVo.setMarket_price(goodsDto.getStoreRetailPrice());
         orderGoodsVo.setRetail_price(goodsDto.getStoreRetailPrice());
+        orderGoodsVo.setOrderSn(orderInfo.getOrder_sn());
+        orderGoodsVo.setBarcode(goodsDto.getProdBarcode());
 
         orderGoodsVo.setDiscountedPrice(goodsDto.getDiscountedPrice());
         orderGoodsVo.setActualPaymentAmount(goodsDto.getActualPaymentAmount());

+ 26 - 0
kmall-api/src/main/java/com/kmall/api/entity/OrderGoodsVo.java

@@ -79,6 +79,16 @@ public class OrderGoodsVo implements Serializable {
      */
     private Integer deductionScore;
 
+    /**
+     * 订单编号
+     */
+    private String orderSn;
+
+    /**
+     * 条码
+     */
+    private String barcode;
+
 
 
     public BigDecimal getDiscountedPrice() {
@@ -329,4 +339,20 @@ public class OrderGoodsVo implements Serializable {
     public void setDeductionScore(Integer deductionScore) {
         this.deductionScore = deductionScore;
     }
+
+    public String getOrderSn() {
+        return orderSn;
+    }
+
+    public void setOrderSn(String orderSn) {
+        this.orderSn = orderSn;
+    }
+
+    public String getBarcode() {
+        return barcode;
+    }
+
+    public void setBarcode(String barcode) {
+        this.barcode = barcode;
+    }
 }

+ 65 - 0
kmall-api/src/main/java/com/kmall/api/entity/OrderVo.java

@@ -211,6 +211,31 @@ public class OrderVo implements Serializable {
 
     private String discountApplyType;
 
+    /**
+     * 商品总数量
+     */
+    private Integer number;
+
+    /**
+     * 调用支付接口请求体
+     */
+    private String request;
+
+    /**
+     * 调用支付接口响应
+     */
+    private String response;
+
+    /**
+     * 身份证号
+     */
+    private String idCard;
+
+    /**
+     * 支付方式
+     */
+    private String payApp;
+
     public String getDiscountApplyType() {
         return discountApplyType;
     }
@@ -1004,4 +1029,44 @@ public class OrderVo implements Serializable {
     public void setAliTradeNo(String aliTradeNo) {
         this.aliTradeNo = aliTradeNo;
     }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public String getRequest() {
+        return request;
+    }
+
+    public void setRequest(String request) {
+        this.request = request;
+    }
+
+    public String getResponse() {
+        return response;
+    }
+
+    public void setResponse(String response) {
+        this.response = response;
+    }
+
+    public String getIdCard() {
+        return idCard;
+    }
+
+    public void setIdCard(String idCard) {
+        this.idCard = idCard;
+    }
+
+    public String getPayApp() {
+        return payApp;
+    }
+
+    public void setPayApp(String payApp) {
+        this.payApp = payApp;
+    }
 }

+ 37 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/dto/PayOriginInfoDTO.java

@@ -0,0 +1,37 @@
+package com.kmall.manager.manager.dto;
+
+/**
+ * 支付原始信息
+ * @author lhm
+ * @createDate 2021-12-07
+ */
+public class PayOriginInfoDTO {
+
+    private String request;
+
+    private String response;
+
+    public String getRequest() {
+        return request;
+    }
+
+    public void setRequest(String request) {
+        this.request = request;
+    }
+
+    public String getResponse() {
+        return response;
+    }
+
+    public void setResponse(String response) {
+        this.response = response;
+    }
+
+    @Override
+    public String toString() {
+        return "PayOriginInfoDTO{" +
+                "request='" + request + '\'' +
+                ", response='" + response + '\'' +
+                '}';
+    }
+}

+ 4 - 1
kmall-manager/src/main/java/com/kmall/manager/manager/wechat/WechatUtil.java

@@ -2,6 +2,7 @@ package com.kmall.manager.manager.wechat;
 
 import com.kmall.common.utils.*;
 import com.kmall.common.utils.wechat.*;
+import com.kmall.manager.manager.dto.PayOriginInfoDTO;
 import com.kmall.manager.manager.pay.wxpay.CommonWxPayPropertiesBuilder;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.HttpEntity;
@@ -465,7 +466,7 @@ public class WechatUtil {
      */
     public static WechatMicropayApiResult wxMicropay(String shop_name, String orderBizType, String attach,
                                                      String out_trade_no, double orderMoney, String ip,
-                                                     String auth_code) {
+                                                     String auth_code, PayOriginInfoDTO payOriginInfoDTO) {
         //初始化请求微信服务器的配置信息包括appid密钥等
         //转换金钱格式
         BigDecimal bdOrderMoney = new BigDecimal(orderMoney, MathContext.DECIMAL32);
@@ -476,6 +477,8 @@ public class WechatUtil {
         String mapToXml = MapUtils.convertMap2Xml(params);
         //请求微信
         String reponseXml = sendMicropaySSLPostToWx(mapToXml);
+        payOriginInfoDTO.setRequest(JacksonUtils.toJson(params));
+        payOriginInfoDTO.setResponse(reponseXml);
         WechatMicropayApiResult result =
                 (WechatMicropayApiResult) XmlUtil.xmlStrToBean(reponseXml, WechatMicropayApiResult.class);
         if (WXTradeState.SUCCESS.getCode().equals(result.getReturn_code()) && "OK".equals(result.getReturn_msg())) {