Browse Source

Merge remote-tracking branch 'upsteam/master'

zhh 3 năm trước cách đây
mục cha
commit
f6990aeaf8
28 tập tin đã thay đổi với 755 bổ sung124 xóa
  1. 1 0
      kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/ali/AliCusDeclareBiz.java
  2. 46 62
      kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/merch/MerchantNoticeBiz.java
  3. 1 0
      kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/wx/WxCusDeclareBiz.java
  4. 11 1
      kmall-admin/src/main/java/com/kmall/admin/cuspay/entity/merch/MerchNoti.java
  5. 3 0
      kmall-admin/src/main/java/com/kmall/admin/cuspay/task/AliPayCuspayTask.java
  6. 7 0
      kmall-admin/src/main/java/com/kmall/admin/dao/OrderDao.java
  7. 2 0
      kmall-admin/src/main/java/com/kmall/admin/dao/OrderProcessRecordDao.java
  8. 3 0
      kmall-admin/src/main/java/com/kmall/admin/dao/PickUpCodeDao.java
  9. 52 0
      kmall-admin/src/main/java/com/kmall/admin/dto/GoodsDetailsDto.java
  10. 40 0
      kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeDetailRecordEntity.java
  11. 1 1
      kmall-admin/src/main/java/com/kmall/admin/haikong/client/HaiKongWarehouseTemplate.java
  12. 101 0
      kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java
  13. 50 0
      kmall-admin/src/main/java/com/kmall/admin/haikong/vo/OrderGiftScoreRulesVo.java
  14. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/OrderProcessRecordService.java
  15. 8 0
      kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java
  16. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/PickUpCodeService.java
  17. 11 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  18. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderProcessRecordServiceImpl.java
  19. 195 55
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  20. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/PickUpCodeServiceImpl.java
  21. 2 1
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  22. 26 0
      kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml
  23. 51 0
      kmall-admin/src/main/resources/mybatis/mapper/OrderProcessRecordDao.xml
  24. 9 0
      kmall-admin/src/main/resources/mybatis/mapper/PickUpCodeDao.xml
  25. 17 2
      kmall-admin/src/main/resources/mybatis/mapper/cuspay/MerchNotiMapper.xml
  26. 15 0
      kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeDetailRecordDao.xml
  27. 76 0
      kmall-api/src/main/java/com/kmall/api/entity/OrderGoodsVo.java
  28. 13 0
      kmall-api/src/main/java/com/kmall/api/entity/OrderVo.java

+ 1 - 0
kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/ali/AliCusDeclareBiz.java

@@ -214,6 +214,7 @@ public class AliCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
         }
 
         MerchNoti merchNoti = new MerchNoti();
+        merchNoti.setOrderSn(params.get("orderSn").toString());
         try {
             if (stringObjectMap != null) {
                 isSuccess = stringObjectMap.get("is_success").toString();

+ 46 - 62
kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/merch/MerchantNoticeBiz.java

@@ -1,28 +1,25 @@
 package com.kmall.admin.cuspay.biz.merch;
 
-import com.kmall.admin.cuspay.biz.CuspayBiz;
+import com.google.common.collect.ImmutableMap;
 import com.kmall.admin.cuspay.common.contant.MerchNoticeDict;
+import com.kmall.admin.cuspay.util.Contants;
 import com.kmall.admin.dao.cuspay.merch.MerchNotiMapper;
 import com.kmall.admin.cuspay.entity.merch.MerchNoti;
-import com.kmall.admin.cuspay.support.msg.resp.ResponseMessage;
-import com.kmall.admin.cuspay.support.msg.resp.ResponseStatus;
-import com.kmall.admin.cuspay.util.OkHttpUtils;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.gson.Gson;
-import okhttp3.Request;
-import okhttp3.RequestBody;
+import com.kmall.admin.haikong.constant.Constants;
+import com.kmall.admin.service.OrderProcessRecordService;
+import com.kmall.admin.service.OrderService;
+import com.kmall.admin.service.PickUpCodeService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.PropertySource;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
 
 import java.io.IOException;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 商户通知请求回执
@@ -36,7 +33,7 @@ import java.util.Map;
  */
 @Component
 @PropertySource(value = {"classpath:conf/cuspay/cuspay-merch-notice.properties"})
-public class MerchantNoticeBiz implements CuspayBiz{
+public class MerchantNoticeBiz {
     private static final Logger logger = LoggerFactory.getLogger(MerchantNoticeBiz.class);
 
     @Autowired
@@ -47,8 +44,16 @@ public class MerchantNoticeBiz implements CuspayBiz{
     @Autowired
     private MerchNotiMapper merchNotiMapper;
 
-    @Override
-    public void biz(Map<String, Object> params) {
+    @Autowired
+    private PickUpCodeService pickUpCodeService;
+
+    @Autowired
+    private OrderProcessRecordService orderProcessRecordService;
+
+    @Autowired
+    private OrderService orderService;
+
+    public void biz() {
         limit = Integer.parseInt(environment.getProperty("db.merch.notice.limit"));
 
         limit = (limit != null && limit > 0) ? limit : 20;
@@ -64,7 +69,7 @@ public class MerchantNoticeBiz implements CuspayBiz{
 
         notis.forEach(noti->{
 
-            if (noti.getNotifyUrl() == null) {
+            if (StringUtils.isEmpty(noti.getNotifyUrl())) {
                 logger.error("商户通知回调接口为空");
                 noti.setNotiStatue(MerchNoticeDict.NoticeStatus.i_3.getItem()); //发送失败
                 noti.setIsStoped(MerchNoticeDict.IsStopStatus.i_1.getItem());
@@ -72,7 +77,7 @@ public class MerchantNoticeBiz implements CuspayBiz{
                 return;
             }
 
-            if (noti.getNotiCount() == null || noti.getNotiCount() <= 0) {
+            if (Objects.isNull(noti.getNotiCount()) || noti.getNotiCount() <= 0) {
                 logger.error("通知商户次数为空");
                 noti.setNotiStatue(MerchNoticeDict.NoticeStatus.i_3.getItem()); //发送失败
                 noti.setIsStoped(MerchNoticeDict.IsStopStatus.i_1.getItem());
@@ -80,28 +85,32 @@ public class MerchantNoticeBiz implements CuspayBiz{
                 return;
             }
 
-            //组装需要请求的参数
-            String jsonStr = createJsonByNoti(noti);
-            logger.info("商户通知回调参数Parameters:"+ jsonStr);
-
-            int counter = 0;
-
-            while (counter < noti.getNotiCount()) {
-                ++counter;
-
-                Request request = OkHttpUtils.buildRequest(noti.getNotifyUrl(),
-                        RequestBody.create(OkHttpUtils.JSON, jsonStr));
-                String result = null;
-                try{
-                    result = OkHttpUtils.post(request);
-                    noti.setNotiStatue(MerchNoticeDict.NoticeStatus.i_2.getItem()); //通知发送成功
-                    noti.setIsStoped(MerchNoticeDict.IsStopStatus.i_1.getItem());//停止通知
-                    break;
-                }catch (IOException e) {
-                    logger.error("商户回调通知异常", e);
-                    noti.setNotiStatue(MerchNoticeDict.NoticeStatus.i_3.getItem()); //发送失败
-                    noti.setIsStoped(MerchNoticeDict.IsStopStatus.i_1.getItem());
+            if(Constants.DocStatus.item_12.getItem().equals(noti.getCusDeclStatus())){
+                // 身份信息不一致
+                if("2".equals(noti.getBuyerPayerCheck())){
+                    try {
+
+                        // 新增修改kmall中取货码表的状态
+                        Map<String,String> pickUpCodeMap = new HashMap<>();
+                        pickUpCodeMap.put("orderSn", noti.getOrderSn());
+                        pickUpCodeMap.put("pickUpCodeSn","4");
+                        pickUpCodeService.updatePickUpCode(pickUpCodeMap);
+
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+
                 }
+
+                Map<String, Object> recordMap = ImmutableMap.of("orderSn", noti.getOrderSn(), "paymentSuccTime", new Date(),"isPaymentSend", Contants.WX_SUCC);
+                orderProcessRecordService.updateMallOrderProcessRecord(recordMap);
+                Map<String, Object> alipayMap = ImmutableMap.of("orderSn", noti.getOrderSn(), "buyerPayCheck", noti.getBuyerPayerCheck());
+                orderService.updateBuyerPayCheck(alipayMap);
+
+            }else if(Constants.DocStatus.item_13.getItem().equals(noti.getCusDeclStatus())){
+                Map<String, Object> recordMap = ImmutableMap.of("orderSn", noti.getOrderSn(), "paymentSuccTime", new Date(),"isPaymentSend", Contants.WX_FAIL);
+                orderProcessRecordService.updateMallOrderProcessRecord(recordMap);
+
             }
             noticeList.add(noti);
         });
@@ -117,31 +126,6 @@ public class MerchantNoticeBiz implements CuspayBiz{
         }
     }
 
-    private String createJsonByNoti(MerchNoti noti) {
-        Map<String, String> request = Maps.newHashMap();
-        request.put("merchErpOrderSn",noti.getMerchErpOrderSn());
-        request.put("merchSn", noti.getMerchSn());
-        request.put("allPaySn",noti.getAllPaySn());
-        request.put("allPayNo",noti.getAllPayNo());
-        request.put("allMerchId",noti.getAllMerchId());
-        request.put("allSubOrderNo",noti.getAllSubOrderNo());
-        request.put("buyerPayerCheck",noti.getBuyerPayerCheck());
-        request.put("payChnlFlag",noti.getPayChnlFlag());
-        request.put("code",noti.getCode());
-        request.put("msg",noti.getMsg());
-        request.put("cusDeclStatus", noti.getCusDeclStatus());
-        request.put("thirdPartyMerchCode",noti.getThirdPartyMerchCode());
-        request.put("thirdPartyMerchName",noti.getThirdPartyMerchName());
-        request.put("platNo", noti.getPlatSn());
-        request.put("platName", noti.getPlatName());
-        request.put("merchOrderSn",noti.getAllSubOrderId());
-
-        ResponseMessage responseMessage = new ResponseMessage.Builder()
-                .setCode(ResponseStatus.SUCCESS.getItem())
-                .setData(request).build();
-        return new Gson().toJson(responseMessage);
-    }
-
     public void bizsTest() {
         logger.info("测试定时执行11");
         logger.info("测试定时执行11");

+ 1 - 0
kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/wx/WxCusDeclareBiz.java

@@ -239,6 +239,7 @@ public class WxCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
         }
 
         MerchNoti merchNoti = new MerchNoti();
+        merchNoti.setOrderSn(params.get("orderSn").toString());
         try {
             wxCbPayDoc.setResultCode(wxResponseMsgDto.getResultCode());
             wxCbPayDoc.setReturnCode(wxResponseMsgDto.getReturnCode());

+ 11 - 1
kmall-admin/src/main/java/com/kmall/admin/cuspay/entity/merch/MerchNoti.java

@@ -63,7 +63,9 @@ public class MerchNoti implements Serializable {
 
     private String allSubOrderId;
 
-    private static final long serialVersionUID = 1L;
+    private String orderSn;
+
+    private static final long serialVersionUID = 164513876943515L;
 
     public MerchNoti() {
         super();
@@ -300,4 +302,12 @@ public class MerchNoti implements Serializable {
     public void setTstm(Date tstm) {
         this.tstm = tstm;
     }
+
+    public String getOrderSn() {
+        return orderSn;
+    }
+
+    public void setOrderSn(String orderSn) {
+        this.orderSn = orderSn;
+    }
 }

+ 3 - 0
kmall-admin/src/main/java/com/kmall/admin/cuspay/task/AliPayCuspayTask.java

@@ -19,5 +19,8 @@ public class AliPayCuspayTask {
 
     @Scheduled(fixedDelay = 5000L)
     public void task() {
+
+        merchantNoticeBiz.biz();
+
     }
 }

+ 7 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/OrderDao.java

@@ -185,4 +185,11 @@ public interface OrderDao extends BaseDao<OrderEntity> {
     void updateOrderStatusByOrderSnList(List<String> orderSnList);
 
     Integer queryObjectByMerchOrderSnHkMall(@Param("merchOrderSn")String merchOrderSn);
+
+    /**
+     * 支付单凭证回传更新 buyer_pay_check
+     * @param wxMap 更新数据
+     * @return      结果
+     */
+    int updateBuyerPayCheck(Map<String, Object> wxMap);
 }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/OrderProcessRecordDao.java

@@ -6,6 +6,7 @@ import com.kmall.manager.dao.BaseDao;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 订单流转过程记录表Dao
@@ -26,4 +27,5 @@ public interface OrderProcessRecordDao extends BaseDao<OrderProcessRecordEntity>
 
     void updateHkNoticeMsgMallOrder(List<OrderProcessRecordHkNewEntity> orderProcessRecordList);
 
+    void updateMallOrderProcessRecord(Map<String, Object> recordMap);
 }

+ 3 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/PickUpCodeDao.java

@@ -6,6 +6,7 @@ import com.kmall.manager.dao.BaseDao;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 小票码信息表Dao
@@ -35,4 +36,6 @@ public interface PickUpCodeDao extends BaseDao<PickUpCodeEntity> {
     void updateHkNoticeMsgPickUpCode(List<OrderProcessRecordHkNewEntity> orderProcessRecordList);
 
     void updatePickUpCodeStatusByOrderSn(@Param("orderSn") String orderSn, @Param("pickUpCodeStatus") String pickUpCodeStatus);
+
+    void updatePickUpCode(Map<String, String> pickUpCodeMap);
 }

+ 52 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/GoodsDetailsDto.java

@@ -89,6 +89,26 @@ public class GoodsDetailsDto {
      */
     private Integer deductionScore;
 
+    /**
+     * 仓库编码
+     */
+    private String warehouseSn;
+
+    /**
+     * 货主编码
+     */
+    private String consignorSn;
+
+    /**
+     * 仓储系统商品ID
+     */
+    private String warehouseSysGoodId;
+
+    /**
+     * 库存类型,默认:ZP(正品)
+     */
+    private String inventoryType;
+
     public BigDecimal getRmarketPrice() {
         return rmarketPrice;
     }
@@ -320,4 +340,36 @@ public class GoodsDetailsDto {
     public void setDeductionScore(Integer deductionScore) {
         this.deductionScore = deductionScore;
     }
+
+    public String getWarehouseSn() {
+        return warehouseSn;
+    }
+
+    public void setWarehouseSn(String warehouseSn) {
+        this.warehouseSn = warehouseSn;
+    }
+
+    public String getConsignorSn() {
+        return consignorSn;
+    }
+
+    public void setConsignorSn(String consignorSn) {
+        this.consignorSn = consignorSn;
+    }
+
+    public String getWarehouseSysGoodId() {
+        return warehouseSysGoodId;
+    }
+
+    public void setWarehouseSysGoodId(String warehouseSysGoodId) {
+        this.warehouseSysGoodId = warehouseSysGoodId;
+    }
+
+    public String getInventoryType() {
+        return inventoryType;
+    }
+
+    public void setInventoryType(String inventoryType) {
+        this.inventoryType = inventoryType;
+    }
 }

+ 40 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberScoreChangeDetailRecordEntity.java

@@ -26,6 +26,19 @@ public class HaiKongMemberScoreChangeDetailRecordEntity {
 
     private Integer deductionScore;
 
+    private Integer giftScore;
+
+    /**
+     * 生成积分规则
+     * 0:门店 1:分类 2:商品 3:无规则
+     */
+    private Integer generateRules;
+
+    /**
+     * 生成积分规则比例,无规则为0
+     */
+    private BigDecimal generateRatio;
+
     private Date createTime;
 
     private Date modifyTime;
@@ -94,6 +107,30 @@ public class HaiKongMemberScoreChangeDetailRecordEntity {
         this.deductionScore = deductionScore;
     }
 
+    public Integer getGiftScore() {
+        return giftScore;
+    }
+
+    public void setGiftScore(Integer giftScore) {
+        this.giftScore = giftScore;
+    }
+
+    public Integer getGenerateRules() {
+        return generateRules;
+    }
+
+    public void setGenerateRules(Integer generateRules) {
+        this.generateRules = generateRules;
+    }
+
+    public BigDecimal getGenerateRatio() {
+        return generateRatio;
+    }
+
+    public void setGenerateRatio(BigDecimal generateRatio) {
+        this.generateRatio = generateRatio;
+    }
+
     public Date getCreateTime() {
         return createTime;
     }
@@ -121,6 +158,9 @@ public class HaiKongMemberScoreChangeDetailRecordEntity {
                 ", actualPrice=" + actualPrice +
                 ", sellVolume=" + sellVolume +
                 ", deductionScore=" + deductionScore +
+                ", giftScore=" + giftScore +
+                ", generateRules=" + generateRules +
+                ", generateRatio=" + generateRatio +
                 ", createTime=" + createTime +
                 ", modifyTime=" + modifyTime +
                 '}';

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/haikong/client/HaiKongWarehouseTemplate.java

@@ -52,7 +52,7 @@ public class HaiKongWarehouseTemplate {
                 "&format=xml" + "&sign_method=md5" + "&customerId=" + haiKongProperties.getWareCustomerId() +
                 "&timestamp=" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss") +
                 "&app_key=" + haiKongProperties.getWareAppId() + "&v=1.0";
-        String signUrl = WareSysSignUtils.getSignRequest(url, xmlStr, "GREE1001");
+        String signUrl = WareSysSignUtils.getSignRequest(url, xmlStr, haiKongProperties.getWareAppSecret());
 
         Request.Builder builder = new Request.Builder();
 

+ 101 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java

@@ -19,6 +19,25 @@ public class Constants {
 
     /* --------------------------------------------------redis常量----------------------------------------------- */
 
+
+    /* --------------------------------------------------支付宝常量----------------------------------------------- */
+
+    //响应的是否成功
+    public static final String SUCCESS = "T";
+    public static final String SUCCESS_CODE = "SUCCESS";
+    //失败
+    public static final String FAIL = "F";
+    public static final String FAIL_CODE = "FAIL";
+
+    //支付公司标识:支付宝
+    public static final String ALIPAY = "00";
+    //微信
+    public static final String WECHAT = "10";
+    //工行
+    public static final String ICBC = "20";
+
+    /* --------------------------------------------------支付宝常量----------------------------------------------- */
+
     /**
      * 活动主题枚举
      */
@@ -212,4 +231,86 @@ public class Constants {
 
     }
 
+    /**
+     * 海关申报状态,10:等待海关处理,11:海关申报中,12:海关申报成功,13:海关申报中失败
+     */
+    public enum DocStatus {
+        item_10("10", "等待海关处理"),
+        item_11("11", "海关申报中"),
+        item_12("12", "海关申报成功"),
+        item_13("13", "海关申报中失败");
+
+        private String item;
+        private String itemName;
+
+        DocStatus(String item, String itemName) {
+            this.item = item;
+            this.itemName = itemName;
+        }
+
+        public String getItem() {
+            return item;
+        }
+
+        public void setItem(String item) {
+            this.item = item;
+        }
+
+        public String getItemName() {
+            return itemName;
+        }
+
+        public void setItemName(String itemName) {
+            this.itemName = itemName;
+        }
+    }
+
+    /**
+     * 库存类型,string (50),SY=所有,ZP=正品, CC=残次,JS=机损, XS= 箱损, ZT=在途库存,默认为查所有类型的库存
+     */
+    public enum InventoryType {
+        /**
+         * 所有库存
+         */
+        SY("SY", "所有"),
+        /**
+         * 正品库存
+         */
+        ZP("ZP", "正品"),
+        /**
+         * 残次库存
+         */
+        CC("CC", "残次"),
+        /**
+         * 机损库存
+         */
+        JS("JS", "机损"),
+        /**
+         * 箱损库存
+         */
+        XS("XS", "箱损"),
+        /**
+         * 在途库存
+         */
+        ZT("ZT", "在途"),
+        ;
+
+        private final String type;
+
+        private final String desc;
+
+        InventoryType(String type, String desc) {
+            this.type = type;
+            this.desc = desc;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public String getDesc() {
+            return desc;
+        }
+    }
+
 }

+ 50 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/vo/OrderGiftScoreRulesVo.java

@@ -0,0 +1,50 @@
+package com.kmall.admin.haikong.vo;
+
+import java.math.BigDecimal;
+
+/**
+ * 订单赠送积分
+ * @author lhm
+ * @createDate 2021-12-10
+ */
+public class OrderGiftScoreRulesVo {
+
+    private Integer generateType;
+
+    private Integer giftScore;
+
+    private BigDecimal generateRatio;
+
+    public Integer getGenerateType() {
+        return generateType;
+    }
+
+    public void setGenerateType(Integer generateType) {
+        this.generateType = generateType;
+    }
+
+    public Integer getGiftScore() {
+        return giftScore;
+    }
+
+    public void setGiftScore(Integer giftScore) {
+        this.giftScore = giftScore;
+    }
+
+    public BigDecimal getGenerateRatio() {
+        return generateRatio;
+    }
+
+    public void setGenerateRatio(BigDecimal generateRatio) {
+        this.generateRatio = generateRatio;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderGiftScoreRulesVo{" +
+                "generateType=" + generateType +
+                ", giftScore=" + giftScore +
+                ", generateRatio=" + generateRatio +
+                '}';
+    }
+}

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/service/OrderProcessRecordService.java

@@ -84,4 +84,6 @@ public interface OrderProcessRecordService {
      * @return
      */
     Message saveHkNoticeMsg(List<OrderProcessRecordHkNewEntity> orderProcessRecordList,OutRequestMessage outRequestMessage) throws Exception;
+
+    void updateMallOrderProcessRecord(Map<String, Object> recordMap);
 }

+ 8 - 0
kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java

@@ -236,4 +236,12 @@ public interface OrderService {
     CalculateOrderDiscountPriceResponseVO calculateOrderDiscountPrice(CalculateOrderDiscountPriceVO calculateOrderDiscountPriceVo);
 
     R resendOrderHkMall(String orderSn);
+
+
+    /**
+     * 支付单凭证回传更新 buyer_pay_check
+     * @param wxMap 更新数据
+     * @return      结果
+     */
+    int updateBuyerPayCheck(Map<String, Object> wxMap);
 }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/service/PickUpCodeService.java

@@ -78,4 +78,6 @@ public interface PickUpCodeService {
     public String queryPickUpCodeStatus(String orderSn);
 
     void updatePickUpCodeStatusByOrderSn(String orderSn, String pickUpCodeStatus);
+
+    void updatePickUpCode(Map<String,String> pickUpCodeMap);
 }

+ 11 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -1666,11 +1666,20 @@ public class GoodsServiceImpl implements GoodsService {
 //            WareQueryStockParamDTO wareQueryStockParamDTO = new WareQueryStockParamDTO();
 //            List<Criteria> criteriaList = new ArrayList<>();
 //            Criteria criteria = new Criteria();
-//            criteria.setItemId(goods.getProdBarcode());
+//            criteria.setItemId(goods.getWarehouseSysGoodId());
 //            criteria.setItemCode(goods.getSku());
+//            criteria.setOwnerCode(goods.getConsignorSn());
+//            criteria.setInventoryType(Constants.InventoryType.ZP.getType());
+//            criteria.setWarehouseCode(goods.getWarehouseSn());
 //            criteriaList.add(criteria);
 //            wareQueryStockParamDTO.setCriteriaList(criteriaList);
-//            String queryWarehouseStockResponse = haiKongWarehouseTemplate.queryWarehouseStock(wareQueryStockParamDTO);
+//            String queryWarehouseStockResponse = null;
+//            try {
+//                queryWarehouseStockResponse = haiKongWarehouseTemplate.queryWarehouseStock(wareQueryStockParamDTO);
+//            } catch (Exception e) {
+//                log.error("sku:【{}】,调用海控仓库系统查询库存出现异常!", sku, e);
+//                throw new ServiceException(String.format("sku:【%s】,调用海控仓库系统查询库存出现异常!", sku));
+//            }
 //            log.info("调用海控仓库系统,请求参数,门店:{}、商品条码:{}、商品编码:{},响应数据:{}", storeId, prodBarcode, sku, queryWarehouseStockResponse);
 //            if (org.springframework.util.StringUtils.isEmpty(queryWarehouseStockResponse)) {
 //                log.error("调用库存系统接口出现错误!返回结果为空!");

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderProcessRecordServiceImpl.java

@@ -201,4 +201,9 @@ public class OrderProcessRecordServiceImpl implements OrderProcessRecordService
         interfaceSendLogEntity.setResponseDate(new Date());
         interfaceSendLogDao.save(interfaceSendLogEntity);
     }
+
+    @Override
+    public void updateMallOrderProcessRecord(Map<String, Object> recordMap) {
+        orderProcessRecordDao.updateMallOrderProcessRecord(recordMap);
+    }
 }

+ 195 - 55
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -38,9 +38,7 @@ import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.haikong.constant.*;
 import com.kmall.admin.haikong.dto.*;
 import com.kmall.admin.haikong.utils.ListUtils;
-import com.kmall.admin.haikong.vo.CalculateOrderDiscountPriceResponseVO;
-import com.kmall.admin.haikong.vo.PointsRulesAndDetailVO;
-import com.kmall.admin.haikong.vo.QueryGoodsVO;
+import com.kmall.admin.haikong.vo.*;
 import com.kmall.admin.haikong.client.HaiKongMemberTemplate;
 import com.kmall.admin.haikong.client.HaiKongWarehouseTemplate;
 import com.kmall.admin.haikong.client.VmcShopTemplate;
@@ -63,7 +61,6 @@ import com.kmall.admin.utils.data.response.ResponseMessageData;
 import com.kmall.admin.utils.jackson.JacksonUtil;
 import com.kmall.admin.utils.oms.OmsSign;
 import com.kmall.admin.utils.pdf.BarcodeUtil;
-import com.kmall.admin.haikong.vo.CalculateOrderDiscountPriceVO;
 import com.kmall.admin.websocket.WebSocketServer;
 import com.kmall.api.entity.OrderGoodsRestoreVo;
 import com.kmall.api.entity.OrderGoodsVo;
@@ -113,6 +110,7 @@ import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -2144,33 +2142,80 @@ public class OrderServiceImpl implements OrderService {
 //            e.printStackTrace();
             LOGGER.error("decode machine code failed! error message : ", e);
         }
+        Integer storeId = user.getStoreId();
+        // 根据商品条码、sku、门店id查询相对应的商品信息,并组装成对象
+        List<QueryGoodsVO> queryGoodsVOList = new ArrayList<>();
+        Map<String, GoodsEntity> goodsEntityMap;
+        List<GoodsEntity> goodsEntityList;
+        try {
+            goodsList.forEach(map -> {
+                QueryGoodsVO queryGoodsVo = new QueryGoodsVO();
+                queryGoodsVo.setProdBarcode((String) map.get("prodBarcode"));
+                queryGoodsVo.setSku((String) map.get("goodsSn"));
+                queryGoodsVo.setStoreId(storeId.longValue());
+                queryGoodsVo.setSellVolume((Integer) map.get("sellVolume"));
+                queryGoodsVo.setRetailPrice(new BigDecimal(String.valueOf(map.get("retailPrice"))));
+                queryGoodsVo.setGoodsTaxes(new BigDecimal(String.valueOf(map.get("goodstaxes"))));
+                queryGoodsVo.setDisCountedPrice(new BigDecimal(String.valueOf(map.get("discountedPrice"))));
+                queryGoodsVo.setTotalPrice(new BigDecimal(String.valueOf(map.get("actualPaymentAmount"))));
+                queryGoodsVo.setActivity((String) map.get("activity"));
+                queryGoodsVo.setDeductionScore((Integer) map.get("deductionScore"));
+                queryGoodsVOList.add(queryGoodsVo);
+            });
+            // 将在循环中查询数据库改为一次性查询
+            goodsEntityList = goodsService.queryGoodsStockByQueryGoodsVoList(queryGoodsVOList);
+            goodsEntityMap = goodsEntityList.stream().collect(Collectors.toMap(GoodsEntity::getSku, Function.identity(), (k1, k2) -> k2));
+        } catch (Exception e){
+            LOGGER.error("组装查询商品数据或查询商品数据时出现异常!", e);
+            throw new ServiceException(e);
+        }
 
         Map resultObj = Maps.newHashMap();
         // 海控需求,下单流程修改,收银端接收会员码,付款码,用户信息,订单数据
         // 1. 校验库存:保税仓库存 + 展销店库存 - 出区数 >= 购买数
         // TODO 获取保税仓库存,测试时注释
-//        String queryWarehouseStockResponse = haiKongWarehouseTemplate.queryWarehouseStock(null);
-//        if (org.springframework.util.StringUtils.isEmpty(queryWarehouseStockResponse)) {
-//            LOGGER.error("调用库存系统接口出现错误!返回结果为空!");
-//            throw new ServiceException("调用库存系统接口出现错误!");
-//        }
-//        WareQueryStockResponseDTO wareQueryStockResponseDTO = JacksonUtil.fromStringJson(queryWarehouseStockResponse, WareQueryStockResponseDTO.class);
-//        if (Objects.isNull(wareQueryStockResponseDTO)) {
-//            throw new ServiceException("解析一步达库存系统响应数据出现错误!");
-//        }
-//        List<WareQueryStockResponseDTO.WareQueryStockResponseItemDTO> items = wareQueryStockResponseDTO.getItems();
-//        // 解析xml,组装成map key=>sku value=>库存
-//        Map<String, Integer> stockMap = new HashMap<>(16);
-//        items.forEach(item -> {
-//            String itemCode = item.getItemCode();
-//            Integer quantity = item.getQuantity();
-//            if (stockMap.containsKey(itemCode)) {
-//                // 避免出现sku相同情况
-//                stockMap.put(itemCode, stockMap.get(itemCode) + quantity);
-//            } else {
-//                stockMap.put(itemCode, quantity);
-//            }
-//        });
+        /*WareQueryStockParamDTO wareQueryStockParamDTO = new WareQueryStockParamDTO();
+        List<Criteria> criteriaList = new ArrayList<>();
+        goodsList.forEach(goods -> {
+            Criteria criteria = new Criteria();
+            String sku = (String) goods.get("goodsSn");
+            criteria.setItemCode(sku);
+            GoodsEntity goodsEntity = goodsEntityMap.get(sku);
+            criteria.setItemId(goodsEntity.getWarehousSysGoodId());
+            criteria.setWarehouseCode(goodsEntity.getWarehouseSn());
+            criteria.setOwnerCode(goodsEntity.getConsignorSn());
+            criteria.setInventoryType(Constants.InventoryType.ZP.getType());
+            criteriaList.add(criteria);
+        });
+        wareQueryStockParamDTO.setCriteriaList(criteriaList);
+        String queryWarehouseStockResponse = null;
+        try {
+            queryWarehouseStockResponse = haiKongWarehouseTemplate.queryWarehouseStock(wareQueryStockParamDTO);
+        } catch (Exception e) {
+            LOGGER.error("下单调用海控仓库系统查询库存出现异常!", e);
+            throw new ServiceException(String.format("下单调用海控仓库系统查询库存出现异常!"));
+        }
+        if (org.springframework.util.StringUtils.isEmpty(queryWarehouseStockResponse)) {
+            LOGGER.error("调用库存系统接口出现错误!返回结果为空!");
+            throw new ServiceException("调用库存系统接口出现错误!");
+        }
+        WareQueryStockResponseDTO wareQueryStockResponseDTO = JacksonUtil.fromStringJson(queryWarehouseStockResponse, WareQueryStockResponseDTO.class);
+        if (Objects.isNull(wareQueryStockResponseDTO)) {
+            throw new ServiceException("解析一步达库存系统响应数据出现错误!");
+        }
+        List<WareQueryStockResponseDTO.WareQueryStockResponseItemDTO> items = wareQueryStockResponseDTO.getItems();
+        // 解析xml,组装成map key=>sku value=>库存
+        Map<String, Integer> stockMap = new HashMap<>(16);
+        items.forEach(item -> {
+            String itemCode = item.getItemCode();
+            Integer quantity = item.getQuantity();
+            if (stockMap.containsKey(itemCode)) {
+                // 避免出现sku相同情况
+                stockMap.put(itemCode, stockMap.get(itemCode) + quantity);
+            } else {
+                stockMap.put(itemCode, quantity);
+            }
+        });*/
 
         // TODO 上生产时注释,模拟仓库系统(sku最大库存为3)返回
         Map<String, Integer> stockMap = new HashMap<>(16);
@@ -2201,32 +2246,17 @@ public class OrderServiceImpl implements OrderService {
                 return resultObj;
             }
             Long userId = user.getUserId();
-            Integer storeId = user.getStoreId();
 
             List<GoodsEntity> goodsEntities = new ArrayList<>();
 
             BigDecimal totalTax = new BigDecimal(0);
-            // 根据商品条码、sku、门店id查询相对应的商品信息,并组装成对象
-            List<QueryGoodsVO> queryGoodsVOList = new ArrayList<>();
-            goodsList.forEach(map -> {
-                QueryGoodsVO queryGoodsVo = new QueryGoodsVO();
-                queryGoodsVo.setProdBarcode((String) map.get("prodBarcode"));
-                queryGoodsVo.setSku((String) map.get("goodsSn"));
-                queryGoodsVo.setStoreId(storeId.longValue());
-                queryGoodsVo.setSellVolume((Integer) map.get("sellVolume"));
-                queryGoodsVo.setRetailPrice(new BigDecimal(String.valueOf(map.get("retailPrice"))));
-                queryGoodsVo.setGoodsTaxes(new BigDecimal(String.valueOf(map.get("goodstaxes"))));
-                queryGoodsVo.setDisCountedPrice(new BigDecimal(String.valueOf(map.get("discountedPrice"))));
-                queryGoodsVo.setTotalPrice(new BigDecimal(String.valueOf(map.get("actualPaymentAmount"))));
-                queryGoodsVo.setActivity((String) map.get("activity"));
-                queryGoodsVo.setDeductionScore((Integer) map.get("deductionScore"));
-                queryGoodsVOList.add(queryGoodsVo);
-            });
-            // 将在循环中查询数据库改为一次性查询
-            List<GoodsEntity> goodsEntityList = goodsService.queryGoodsStockByQueryGoodsVoList(queryGoodsVOList);
+
             // 复制集合数据
             ListUtils listUtils = BeanUtils.instantiate(ListUtils.class);
             listUtils.copyList(goodsEntityList, queryGoodsVOList);
+
+            // 商品总重量
+            BigDecimal weight = new BigDecimal(0);
             // 检查库存和更新库存
             for (QueryGoodsVO goodsDto : queryGoodsVOList) {
                 // 要购买的数量
@@ -2319,6 +2349,17 @@ public class OrderServiceImpl implements OrderService {
                     goodsEntity.setSellVolume(goodsDto.getSellVolume());
                     goodsEntity.setActivity(goodsDto.getActivity());
                     goodsEntity.setStoreId(storeId);
+                    goodsEntity.setListPicUrl(goodsDto.getListPicUrl());
+                    GoodsEntity goodsEntity1 = goodsEntityMap.get(sku);
+                    if (Objects.nonNull(goodsEntity1)) {
+                        goodsEntity.setNetWeight(goodsEntity1.getNetWeight());
+                        goodsEntity.setWarehouseSn(goodsEntity1.getWarehouseSn());
+                        goodsEntity.setConsignorSn(goodsEntity1.getConsignorSn());
+                        goodsEntity.setWarehousSysGoodId(goodsEntity1.getWarehousSysGoodId());
+                        goodsEntity.setInventoryType(goodsEntity1.getInventoryType());
+                        goodsEntity.setDefectiveProductsGrade(goodsEntity1.getDefectiveProductsGrade());
+                        weight = weight.add(goodsEntity1.getNetWeight().multiply(new BigDecimal(goodsEntity.getSellVolume())));
+                    }
                     goodsEntities.add(goodsEntity);
                 } else {
                     // sku不存在
@@ -2393,6 +2434,7 @@ public class OrderServiceImpl implements OrderService {
             order.setMerchOrderSn(merchOrderSn);
             order.setCoupon_name(couponSn); // 借用这个字段来记录是否使用优惠券
             order.setIdCard(userEntity.getIdNo());
+            order.setWeight(weight);
             //插入订单信息和订单商品
             orderDao.saveOrderVo(order);
 
@@ -2494,6 +2536,7 @@ public class OrderServiceImpl implements OrderService {
             // 总的积分:基础积分
             AtomicReference<Integer> memberScore = new AtomicReference<>(0);
             // 无会员码,不参与积分赠送
+            Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap = new HashMap<>();
             if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
                 List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList = mall2PointsRulesService.queryListByTime(new Date());
                 // 商品map,key===>sku value===>金额
@@ -2516,13 +2559,21 @@ public class OrderServiceImpl implements OrderService {
                             // 商品积分生成规则包含这个sku
                             // 订单中该sku的总金额
                             BigDecimal money = goodsMap.get(pointsDetailNameId);
+                            OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
+                            orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.TWO.getCode());
                             if (ratio.compareTo(BigDecimal.ZERO) > 0) {
                                 // 算出所积的分
-                                memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
+                                int giftScore = money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue();
+                                memberScore.set(giftScore);
+                                orderGiftScoreRulesVo.setGiftScore(giftScore);
+                                orderGiftScoreRulesVo.setGenerateRatio(ratio);
                             } else {
                                 // 积分比例设置为0,该商品不记积分。
                                 LOGGER.info("商品SKU:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
+                                orderGiftScoreRulesVo.setGiftScore(0);
+                                orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                             }
+                            giftGoodsScoreDetailMap.put(pointsDetailNameId, orderGiftScoreRulesVo);
                             goodsDataMap.remove(pointsDetailNameId);
                         }
 
@@ -2533,17 +2584,25 @@ public class OrderServiceImpl implements OrderService {
                             // 商品类别
                             Integer categoryId = goodsEntity.getCategoryId();
                             String sku = goodsEntity.getSku();
+                            OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
+                            orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.ONE.getCode());
                             if (categorySet.contains(categoryId)) {
                                 if (categoryId.equals(Integer.parseInt(pointsDetailNameId))) {
                                     // 订单中该sku的总金额
                                     BigDecimal money = goodsMap.get(sku);
                                     if (ratio.compareTo(BigDecimal.ZERO) > 0) {
                                         // 算出所积的分
-                                        memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
+                                        int giftScore = money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue();
+                                        memberScore.set(giftScore);
+                                        orderGiftScoreRulesVo.setGiftScore(giftScore);
+                                        orderGiftScoreRulesVo.setGenerateRatio(ratio);
                                     } else {
                                         // 积分比例设置为0,该商品不记积分。
                                         LOGGER.info("分类:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
+                                        orderGiftScoreRulesVo.setGiftScore(0);
+                                        orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                                     }
+                                    giftGoodsScoreDetailMap.put(sku, orderGiftScoreRulesVo);
                                     goodsDataMap.remove(sku);
                                 }
                             }
@@ -2555,20 +2614,37 @@ public class OrderServiceImpl implements OrderService {
                         goodsEntityCollection.forEach(goodsEntity -> {
                             Integer storeId1 = goodsEntity.getStoreId();
                             String sku = goodsEntity.getSku();
+                            OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
+                            orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.ZERO.getCode());
                             if (storeId.equals(storeId1)) {
                                 // 订单中该sku的总金额
                                 BigDecimal money = goodsMap.get(sku);
                                 if (ratio.compareTo(BigDecimal.ZERO) != 0) {
                                     // 算出所积的分
-                                    memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
+                                    int giftScore = money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue();
+                                    memberScore.set(giftScore);
+                                    orderGiftScoreRulesVo.setGiftScore(giftScore);
+                                    orderGiftScoreRulesVo.setGenerateRatio(ratio);
                                 } else {
                                     // 积分比例设置为0,该商品不记积分。
                                     LOGGER.info("门店:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
+                                    orderGiftScoreRulesVo.setGiftScore(0);
+                                    orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
                                 }
                             }
+                            giftGoodsScoreDetailMap.put(sku, orderGiftScoreRulesVo);
                         });
                     }
                 });
+                goodsSkuList.forEach(s -> {
+                    if (!giftGoodsScoreDetailMap.containsKey(s)) {
+                        OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
+                        orderGiftScoreRulesVo.setGiftScore(0);
+                        orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
+                        orderGiftScoreRulesVo.setGenerateType(3);
+                        giftGoodsScoreDetailMap.put(s, orderGiftScoreRulesVo);
+                    }
+                });
 
                 // 增加该会员的积分
                 Mall2MemberPointsEntity memberPointsEntity = memberPointsDao.queryByUserId(userEntityId);
@@ -2621,10 +2697,10 @@ public class OrderServiceImpl implements OrderService {
             if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
                 // 同步会员订单消费记录
                 syncMemberConsumeRecord(memberPhone, order, deductionScore);
-                syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", queryGoodsVOList, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
+                syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
                 // 积分变动接口,下单扣减
                 Integer score = memberScore.get();
-                syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
+                syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
             }
 
             // 生成取票码
@@ -2703,6 +2779,11 @@ public class OrderServiceImpl implements OrderService {
         }
     }
 
+    /**
+     * 组装推送订单数据:跨境数据
+     * @param order 订单数据
+     * @return 跨境数据
+     */
     private SeaportInfoDTO wrapSeaportInfo(OrderVo order) {
         SeaportInfoDTO seaportInfoDTO = new SeaportInfoDTO();
         seaportInfoDTO.setSeaportCode("4600");
@@ -2713,6 +2794,11 @@ public class OrderServiceImpl implements OrderService {
         return seaportInfoDTO;
     }
 
+    /**
+     * 组装推送订单数据:支付数据
+     * @param order 订单数据
+     * @return  支付数据
+     */
     private PayInfoDTO wrapPayInfo(OrderVo order) {
         PayInfoDTO payInfoDTO = new PayInfoDTO();
         payInfoDTO.setMoney(order.getActual_price());
@@ -2723,11 +2809,16 @@ public class OrderServiceImpl implements OrderService {
         return payInfoDTO;
     }
 
+    /**
+     * 组装推送订单数据:订单详情数据
+     * @param orderGoodsVo  订单详情
+     * @return  订单详情数据
+     */
     private OrderInfoItemDTO wrapOrderInfoItem(OrderGoodsVo orderGoodsVo) {
         OrderInfoItemDTO orderInfoItemDTO = new OrderInfoItemDTO();
         orderInfoItemDTO.setOrderId(orderGoodsVo.getOrderSn());
         orderInfoItemDTO.setImageUrl(orderGoodsVo.getList_pic_url());
-        orderInfoItemDTO.setBn("11111111");
+        orderInfoItemDTO.setBn(orderGoodsVo.getSku());
         orderInfoItemDTO.setBarcode(orderGoodsVo.getBarcode());
         orderInfoItemDTO.setName(orderGoodsVo.getGoods_name());
         orderInfoItemDTO.setCost(orderGoodsVo.getMarket_price());
@@ -2740,6 +2831,11 @@ public class OrderServiceImpl implements OrderService {
         return orderInfoItemDTO;
     }
 
+    /**
+     * 组装推送订单数据:跨境数据
+     * @param order 订单数据
+     * @return  订单数据
+     */
     private OrderInfoDTO wrapOrderInfo(OrderVo order) {
         OrderInfoDTO orderInfoDTO = new OrderInfoDTO();
         orderInfoDTO.setOuterOrderNo(order.getOrder_sn());
@@ -2754,7 +2850,12 @@ public class OrderServiceImpl implements OrderService {
         orderInfoDTO.setConsigneeTel("0756-8800000");
         orderInfoDTO.setConsigneeEmail("hk@greedc.com");
         orderInfoDTO.setConsigneeMobile(order.getMobile());
-        orderInfoDTO.setWeight("?");
+        BigDecimal weight = order.getWeight();
+        if (Objects.nonNull(weight)) {
+            orderInfoDTO.setWeight(weight.toString());
+        } else {
+            orderInfoDTO.setWeight("0");
+        }
         orderInfoDTO.setQuantity(order.getNumber());
         orderInfoDTO.setOrderTotal(order.getActual_price());
         orderInfoDTO.setPlatform("store");
@@ -2769,6 +2870,9 @@ public class OrderServiceImpl implements OrderService {
         return orderProductInfoDTO;
     }
 
+    /**
+     * 支付宝支付
+     */
     private void AliPay(SysUserEntity user, String parCode, OrderVo order, OrderProcessRecordEntity processRecordEntity, OrderWXPayRecordEntity orderWXPayRecordCurrent, StoreEntity store) throws Exception {
 
         AliPayRequestParams params = new AliPayRequestParams();
@@ -2812,6 +2916,7 @@ public class OrderServiceImpl implements OrderService {
             // 组装支付单信息
             Map<String, Object> orderSendCusParams = new HashMap<>();
             orderSendCusParams.put("merchSn", order.getMerchSn());
+            orderSendCusParams.put("orderSn", order.getOrder_sn());
             orderSendCusParams.put("merchName", order.getMerchName());
             orderSendCusParams.put("thirdPartyMerchCode", store.getThirdPartyMerchCode());
             orderSendCusParams.put("thirdPartyMerchName", store.getThirdPartyMerchName());
@@ -2894,6 +2999,9 @@ public class OrderServiceImpl implements OrderService {
 
     }
 
+    /**
+     * 微信支付
+     */
     private void wxPay(SysUserEntity user, String parCode, Map resultObj, OrderVo order, OrderProcessRecordEntity processRecordEntity, OrderWXPayRecordEntity orderWXPayRecordCurrent, StoreEntity store) throws ParseException {
         R r;
 
@@ -2940,6 +3048,7 @@ public class OrderServiceImpl implements OrderService {
             // 组装支付单信息
             Map<String, Object> orderSendCusParams = new HashMap<>();
             orderSendCusParams.put("merchSn", order.getMerchSn());
+            orderSendCusParams.put("orderSn", order.getOrder_sn());
             orderSendCusParams.put("merchName", order.getMerchName());
             orderSendCusParams.put("thirdPartyMerchCode", store.getThirdPartyMerchCode());
             orderSendCusParams.put("thirdPartyMerchName", store.getThirdPartyMerchName());
@@ -3045,9 +3154,16 @@ public class OrderServiceImpl implements OrderService {
      * @param changeEvent 变动事件
      * @param changeReason 变动原因
      * @param goodsList 商品详情
+     * @param giftGoodsScoreDetailMap 赠送积分详情
      * @param score     变动积分
      */
-    private void syncMemberScoreChangeRecord(String openId, OrderVo order, Integer score, String changeReason, List<QueryGoodsVO> goodsList, String changeEvent) {
+    private void syncMemberScoreChangeRecord(String openId,
+                                             OrderVo order,
+                                             Integer score,
+                                             String changeReason,
+                                             List<QueryGoodsVO> goodsList,
+                                             Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap,
+                                             String changeEvent) {
         HaiKongMemberScoreChangeRecordEntity haiKongMemberScoreChangeRecordEntity = new HaiKongMemberScoreChangeRecordEntity();
         MemberScoreChangeDTO memberScoreChangeDTO = new MemberScoreChangeDTO();
         String changeId = UUID.randomUUID(true).toString();
@@ -3081,14 +3197,22 @@ public class OrderServiceImpl implements OrderService {
             haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
             haiKongMemberScoreChangeRecordService.save(haiKongMemberScoreChangeRecordEntity);
         }
+        LOGGER.info("保存会员系统积分变动详情记录中......");
         List<HaiKongMemberScoreChangeDetailRecordEntity> recordEntityList = goodsList.stream().map(goodsEntity -> {
             HaiKongMemberScoreChangeDetailRecordEntity entity = new HaiKongMemberScoreChangeDetailRecordEntity();
+            String sku = goodsEntity.getSku();
+            OrderGiftScoreRulesVo orderGiftScoreRulesVo = giftGoodsScoreDetailMap.get(sku);
+            if (Objects.nonNull(orderGiftScoreRulesVo)) {
+                entity.setGenerateRatio(orderGiftScoreRulesVo.getGenerateRatio());
+                entity.setGenerateRules(orderGiftScoreRulesVo.getGenerateType());
+                entity.setGiftScore(orderGiftScoreRulesVo.getGiftScore());
+            }
             entity.setOrderSn(order.getOrder_sn());
             entity.setRetailPrice(goodsEntity.getRetailPrice());
             entity.setActualPrice(goodsEntity.getTotalPrice());
             entity.setProductBarcode(goodsEntity.getProdBarcode());
             entity.setSellVolume(goodsEntity.getSellVolume());
-            entity.setSku(goodsEntity.getSku());
+            entity.setSku(sku);
             entity.setDeductionScore(goodsEntity.getDeductionScore());
             return entity;
         }).collect(Collectors.toList());
@@ -4796,6 +4920,12 @@ public class OrderServiceImpl implements OrderService {
         orderGoodsVo.setGoodsRate(goodsDto.getGoodsRate());
         orderGoodsVo.setSku(goodsDto.getSku());
 
+        orderGoodsVo.setNetWeight(goodsDto.getNetWeight());
+        orderGoodsVo.setWarehouseSn(goodsDto.getWarehouseSn());
+        orderGoodsVo.setConsignorSn(goodsDto.getConsignorSn());
+        orderGoodsVo.setWarehouseSysGoodId(goodsDto.getWarehousSysGoodId());
+        orderGoodsVo.setInventoryType(goodsDto.getInventoryType());
+        orderGoodsVo.setDefectiveProductsGrade(goodsDto.getDefectiveProductsGrade());
 
         BigDecimal number = new BigDecimal(Long.valueOf(goodsDto.getSellVolume()));
         BigDecimal goodsTotal = goodsDto.getRetailPrice().multiply(number);//单商品总价
@@ -4827,7 +4957,6 @@ public class OrderServiceImpl implements OrderService {
             orderGoodsVo.setSettlePrice(settlePrice);//商品结算平摊价格
         }
 
-
         // 计算税费
         GoodsEntity goodsEntity = goodsService.queryObject(goodsDto.getId().intValue());
         BigDecimal goodsTax = CalculateTax.calculateFinalTax(goodsEntity, goodsDto.getStoreRetailPrice(), goodsService).setScale(3, RoundingMode.HALF_UP);
@@ -4837,4 +4966,15 @@ public class OrderServiceImpl implements OrderService {
         return orderGoodsVo;
     }
 
+
+    /**
+     * 支付单凭证回传更新 buyer_pay_check
+     *
+     * @param wxMap 更新数据
+     * @return 结果
+     */
+    @Override
+    public int updateBuyerPayCheck(Map<String, Object> wxMap) {
+        return orderDao.updateBuyerPayCheck(wxMap);
+    }
 }

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/PickUpCodeServiceImpl.java

@@ -105,4 +105,9 @@ public class PickUpCodeServiceImpl implements PickUpCodeService {
     public void updatePickUpCodeStatusByOrderSn(String orderSn, String pickUpCodeStatus) {
         pickUpCodeDao.updatePickUpCodeStatusByOrderSn(orderSn, pickUpCodeStatus);
     }
+
+    @Override
+    public void updatePickUpCode(Map<String, String> pickUpCodeMap) {
+        pickUpCodeDao.updatePickUpCode(pickUpCodeMap);
+    }
 }

+ 2 - 1
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -254,7 +254,8 @@
     <select id="queryGoodsDetailsByProdBarcode" resultType="com.kmall.admin.dto.GoodsDetailsDto">
         SELECT distinct
         a.goods_sn as GoodsSn, a.goods_sn as sku, m.retail_price as retailPrice,a.prod_barcode as prodBarcode,a.name,a.brand,a.goods_desc as goodsDesc,a.goods_unit as goodsUnit,a.goods_rate as goodsRate,a.primary_pic_url ,m.stock_num as stockNum,r.value as specification
-        ,a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel,a.to_be_restored, m.exit_region_number as exitRegionNumber
+        ,a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel,a.to_be_restored, m.exit_region_number as exitRegionNumber,
+        a.warehouse_sn as warehouseSn, a.consignor_sn as consignorSn, a.warehous_sys_good_id as warehouseSysGoodId
         FROM
             mall_goods a
         LEFT JOIN mall_goods_specification r ON r.goods_id = a.id

+ 26 - 0
kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml

@@ -2421,9 +2421,35 @@
             #{item}
         </foreach>
     </update>
+    <update id="updateBuyerPayCheck"></update>
 
     <select id="queryObjectByMerchOrderSnHkMall" parameterType="java.lang.String" resultType="java.lang.Integer">
         select count(*) from mall_order a where merch_order_sn = #{merchOrderSn}
     </select>
 
+    <update id="updateBuyerPayCheck" parameterType="hashMap">
+        update mall_order
+        <set >
+            <if test="buyerPayCheck != null">
+                buyer_pay_check = #{buyerPayCheck},
+            </if>
+            <if test="orderStatus != null">
+                order_status = #{orderStatus},
+            </if>
+            <if test="shippingNo != null">
+                shipping_no = #{shippingNo},
+            </if>
+            <if test="shippingCode != null">
+                shipping_code = #{shippingCode},
+            </if>
+            <if test="shippingName != null">
+                shipping_name = #{shippingName},
+            </if>
+            <if test="shippingStatus != null">
+                shipping_status = #{shippingStatus},
+            </if>
+        </set>
+        where order_sn = #{orderSn,jdbcType=VARCHAR}
+    </update>
+
 </mapper>

+ 51 - 0
kmall-admin/src/main/resources/mybatis/mapper/OrderProcessRecordDao.xml

@@ -480,4 +480,55 @@ select
 		</foreach>
 	</update>
 
+	<update id="updateMallOrderProcessRecord" parameterType="hashMap">
+		update mall_order_process_record
+		<set >
+			<if test="paymentStartTime != null">
+				payment_start_time = #{paymentStartTime},
+			</if>
+			<if test="paymentSuccTime != null">
+				payment_succ_time = #{paymentSuccTime}, </if>
+			<if test="isPaymentSend != null" >
+				is_payment_send = #{isPaymentSend,jdbcType=VARCHAR},
+			</if>
+			<if test="eleOrderStartTime != null" >
+				ele_order_start_time = #{eleOrderStartTime,jdbcType=VARCHAR},
+			</if>
+			<if test="eleOrderSuccTime != null" >
+				ele_order_succ_time = #{eleOrderSuccTime,jdbcType=VARCHAR},
+			</if>
+			<if test="isEleOrderSend != null" >
+				is_ele_order_send = #{isEleOrderSend,jdbcType=VARCHAR},
+			</if>
+			<if test="waybillStartTime != null" >
+				waybill_start_time = #{waybillStartTime,jdbcType=VARCHAR},
+			</if>
+			<if test="waybillSuccTime != null" >
+				waybill_succ_time = #{waybillSuccTime,jdbcType=VARCHAR},
+			</if>
+			<if test="customsStartTime != null" >
+				customs_start_time = #{customsStartTime,jdbcType=VARCHAR},
+			</if>
+			<if test="customsSuccTime != null" >
+				customs_succ_time = #{customsSuccTime,jdbcType=VARCHAR},
+			</if>
+			<if test="isCustomsSend != null" >
+				is_customs_send = #{isCustomsSend,jdbcType=TIMESTAMP},
+			</if>
+			<if test="shipmentStartTime != null" >
+				shipment_start_time = #{shipmentStartTime,jdbcType=VARCHAR},
+			</if>
+			<if test="shipmentSuccTime != null" >
+				shipment_succ_time = #{shipmentSuccTime,jdbcType=VARCHAR},
+			</if>
+			<if test="logisticsNo != null">
+				logistics_no = #{logisticsNo},
+			</if>
+			<if test="invtNo != null">
+				invt_no = #{invtNo},
+			</if>
+		</set>
+		where order_sn = #{orderSn,jdbcType=VARCHAR}
+	</update>
+
 </mapper>

+ 9 - 0
kmall-admin/src/main/resources/mybatis/mapper/PickUpCodeDao.xml

@@ -197,5 +197,14 @@
 		where order_sn = #{orderSn}
 	</update>
 
+	<update id="updatePickUpCode" parameterType="hashMap">
+		update mall_pick_up_code
+		<set>
+			<if test="pickUpCodeSn != null">
+				pick_up_code_status = #{pickUpCodeSn}
+			</if>
+		</set>
+		where order_sn = #{orderSn}
+	</update>
 
 </mapper>

+ 17 - 2
kmall-admin/src/main/resources/mybatis/mapper/cuspay/MerchNotiMapper.xml

@@ -31,12 +31,13 @@
     <result column="moder_sn" property="moderSn" jdbcType="VARCHAR" />
     <result column="mod_time" property="modTime" jdbcType="VARCHAR" />
     <result column="tstm" property="tstm" jdbcType="TIMESTAMP" />
+    <result column="order_sn" property="orderSn" jdbcType="VARCHAR" />
   </resultMap>
   <sql id="Base_Column_List" >
     noti_sn, all_pay_sn, merch_sn, merch_name, merch_erp_order_sn, plat_sn, plat_name,
     third_party_merch_code, third_party_merch_name, all_merch_id, all_order_no, all_pay_no,
     all_sub_order_no, all_sub_order_id, pay_chnl_flag, buyer_payer_check, noti_count, is_stoped, cus_decl_status,
-    noti_statue, code, msg, notify_url, remark, creater_sn, create_time, moder_sn, mod_time,
+    noti_statue, code, msg, notify_url, remark, creater_sn, create_time, moder_sn, mod_time, order_sn,
     tstm
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
@@ -150,6 +151,9 @@
       <if test="tstm != null" >
         tstm,
       </if>
+      <if test="orderSn != null" >
+        order_sn,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides="," >
       <if test="notiSn != null" >
@@ -239,6 +243,9 @@
       <if test="tstm != null" >
         #{tstm,jdbcType=TIMESTAMP},
       </if>
+      <if test="orderSn != null" >
+        #{orderSn,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <update id="updateByPrimaryKeySelective" parameterType="com.kmall.admin.cuspay.entity.merch.MerchNoti" >
@@ -328,6 +335,9 @@
       <if test="tstm != null" >
         tstm = #{tstm,jdbcType=TIMESTAMP},
       </if>
+      <if test="orderSn != null" >
+        order_sn = #{orderSn,jdbcType=VARCHAR},
+      </if>
     </set>
     where noti_sn = #{notiSn,jdbcType=VARCHAR}
   </update>
@@ -368,7 +378,8 @@
         creater_sn,
         create_time,
         moder_sn,
-        mod_time
+        mod_time,
+        order_sn
     </trim>
     VALUES
     <foreach collection="list" item="item" index="index" separator=",">
@@ -401,6 +412,7 @@
           #{item.createTime,jdbcType=VARCHAR},
           #{item.moderSn,jdbcType=VARCHAR},
           #{item.modTime,jdbcType=VARCHAR},
+          #{item.orderSn,jdbcType=VARCHAR},
       </trim>
     </foreach>
   </insert>
@@ -492,6 +504,9 @@
         <if test="item.tstm != null" >
           tstm = #{item.tstm,jdbcType=TIMESTAMP},
         </if>
+        <if test="item.orderSn != null" >
+          order_sn = #{item.orderSn,jdbcType=VARCHAR},
+        </if>
       </set>
       where noti_sn = #{item.notiSn,jdbcType=VARCHAR}
     </foreach>

+ 15 - 0
kmall-admin/src/main/resources/mybatis/mapper/haikong/HaiKongMemberScoreChangeDetailRecordDao.xml

@@ -10,6 +10,9 @@
         <result column="actual_price" property="actualPrice" />
         <result column="sell_volume" property="sellVolume" />
         <result column="deduction_score" property="deductionScore" />
+        <result column="gift_score" property="giftScore" />
+        <result column="generate_rules" property="generateRules" />
+        <result column="generate_ratio" property="generateRatio" />
         <result column="modify_time" property="modifyTime" />
         <result column="create_time" property="createTime" />
     </resultMap>
@@ -30,6 +33,9 @@
             `actual_price`,
             `sell_volume`,
             `deduction_score`,
+            `gift_score`,
+            `generate_rules`,
+            `generate_ratio`,
             `modify_time`,
             `create_time`
         )
@@ -42,6 +48,9 @@
             #{actualPrice},
             #{sellVolume},
             #{deductionScore},
+            #{giftScore},
+            #{generateRules},
+            #{generateRatio},
             #{modifyTime},
             #{createTime}
         )
@@ -57,6 +66,9 @@
             `actual_price`,
             `sell_volume`,
             `deduction_score`,
+            `gift_score`,
+            `generate_rules`,
+            `generate_ratio`,
             `modify_time`,
             `create_time`
         )
@@ -70,6 +82,9 @@
                 #{item.actualPrice},
                 #{item.sellVolume},
                 #{item.deductionScore},
+                #{item.giftScore},
+                #{item.generateRules},
+                #{item.generateRatio},
                 #{item.modifyTime},
                 #{item.createTime}
             )

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

@@ -89,7 +89,35 @@ public class OrderGoodsVo implements Serializable {
      */
     private String barcode;
 
+    /**
+     * 商品重量
+     */
+    private BigDecimal netWeight;
+
+    /**
+     * 仓库编码
+     */
+    private String warehouseSn;
+
+    /**
+     * 货主编码
+     */
+    private String consignorSn;
+
+    /**
+     * 仓储系统商品ID
+     */
+    private String warehouseSysGoodId;
 
+    /**
+     * 库存类型,默认:ZP(正品)
+     */
+    private String inventoryType;
+
+    /**
+     * 残品等级(非残次品可不填)
+     */
+    private String defectiveProductsGrade;
 
     public BigDecimal getDiscountedPrice() {
         return discountedPrice;
@@ -355,4 +383,52 @@ public class OrderGoodsVo implements Serializable {
     public void setBarcode(String barcode) {
         this.barcode = barcode;
     }
+
+    public BigDecimal getNetWeight() {
+        return netWeight;
+    }
+
+    public void setNetWeight(BigDecimal netWeight) {
+        this.netWeight = netWeight;
+    }
+
+    public String getWarehouseSn() {
+        return warehouseSn;
+    }
+
+    public void setWarehouseSn(String warehouseSn) {
+        this.warehouseSn = warehouseSn;
+    }
+
+    public String getConsignorSn() {
+        return consignorSn;
+    }
+
+    public void setConsignorSn(String consignorSn) {
+        this.consignorSn = consignorSn;
+    }
+
+    public String getWarehouseSysGoodId() {
+        return warehouseSysGoodId;
+    }
+
+    public void setWarehouseSysGoodId(String warehouseSysGoodId) {
+        this.warehouseSysGoodId = warehouseSysGoodId;
+    }
+
+    public String getInventoryType() {
+        return inventoryType;
+    }
+
+    public void setInventoryType(String inventoryType) {
+        this.inventoryType = inventoryType;
+    }
+
+    public String getDefectiveProductsGrade() {
+        return defectiveProductsGrade;
+    }
+
+    public void setDefectiveProductsGrade(String defectiveProductsGrade) {
+        this.defectiveProductsGrade = defectiveProductsGrade;
+    }
 }

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

@@ -236,6 +236,11 @@ public class OrderVo implements Serializable {
      */
     private String payApp;
 
+    /**
+     * 商品总重量
+     */
+    private BigDecimal weight;
+
     public String getDiscountApplyType() {
         return discountApplyType;
     }
@@ -1069,4 +1074,12 @@ public class OrderVo implements Serializable {
     public void setPayApp(String payApp) {
         this.payApp = payApp;
     }
+
+    public BigDecimal getWeight() {
+        return weight;
+    }
+
+    public void setWeight(BigDecimal weight) {
+        this.weight = weight;
+    }
 }