浏览代码

Merge branch 'dev_kuaidi_20221026'

liujunchi 2 年之前
父节点
当前提交
e217a93715
共有 16 个文件被更改,包括 821 次插入1 次删除
  1. 1 1
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsAdminController.java
  2. 39 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java
  3. 10 0
      cooleshow-mall/mall-common/pom.xml
  4. 150 0
      cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/domain/CourierInfo.java
  5. 61 0
      cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/enums/CompanyEnum.java
  6. 7 0
      cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/package-info.java
  7. 42 0
      cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/service/CourierService.java
  8. 150 0
      cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/service/impl/Courier100ServiceImpl.java
  9. 1 0
      cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/enums/OrderCacheEnum.java
  10. 37 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/OmsOrderCourierMapper.java
  11. 68 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderCourier.java
  12. 114 0
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderCourierMapper.xml
  13. 23 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java
  14. 31 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/open/OpenShareController.java
  15. 29 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsOrderCourierService.java
  16. 58 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsOrderCourierServiceImpl.java

+ 1 - 1
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsAdminController.java

@@ -94,7 +94,7 @@ public class UmsAdminController {
         data.put("icon", umsAdmin.getIcon());
         List<UmsRole> roleList = adminService.getRoleList(umsAdmin.getId());
         if(CollUtil.isNotEmpty(roleList)){
-            List<String> roles = roleList.stream().map(UmsRole::getName).collect(Collectors.toList());
+            List<String> roles = roleList.stream().filter(role -> role != null).map(UmsRole::getName).collect(Collectors.toList());
             data.put("roles",roles);
         }
         return CommonResult.success(data);

+ 39 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java

@@ -8,15 +8,22 @@ import com.yonge.cooleshow.admin.dto.search.OrderStatisticalSearch;
 import com.yonge.cooleshow.admin.dto.search.UserStatisticalSearch;
 import com.yonge.cooleshow.admin.service.OmsOrderReturnApplyService;
 import com.yonge.cooleshow.admin.service.PmsProductService;
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+import com.yonge.cooleshow.mall.common.courier.service.CourierService;
+import com.yonge.cooleshow.mbg.mapper.OmsOrderCourierMapper;
 import com.yonge.cooleshow.mbg.mapper.OmsOrderMapper;
 import com.yonge.cooleshow.mbg.mapper.OmsOrderOperateHistoryMapper;
+import com.yonge.cooleshow.mbg.mapper.SysConfigMapper;
 import com.yonge.cooleshow.mbg.model.OmsOrder;
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
 import com.yonge.cooleshow.mbg.model.OmsOrderExample;
 import com.yonge.cooleshow.mbg.model.OmsOrderOperateHistory;
 import com.yonge.cooleshow.admin.service.OmsOrderService;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.cooleshow.admin.enums.OrderStatisticalEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -39,6 +46,8 @@ import java.util.stream.Collectors;
  */
 @Service
 public class OmsOrderServiceImpl implements OmsOrderService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(OmsOrderServiceImpl.class);
     @Autowired
     private OmsOrderMapper orderMapper;
     @Autowired
@@ -54,6 +63,15 @@ public class OmsOrderServiceImpl implements OmsOrderService {
     @Autowired
     private PmsProductService productService;
 
+    @Autowired
+    private OmsOrderCourierMapper omsOrderCourierMapper;
+
+    @Autowired
+    private CourierService courierService;
+
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+
     @Override
     public List<OrderVo> list(OmsOrderQueryParam queryParam, Integer pageSize, Integer pageNum) {
         PageHelper.startPage(pageNum, pageSize);
@@ -76,6 +94,27 @@ public class OmsOrderServiceImpl implements OmsOrderService {
                     return history;
                 }).collect(Collectors.toList());
         orderOperateHistoryDao.insertList(operateHistoryList);
+
+        // 添加快递信息
+        List<OmsOrderCourier> omsOrderCouriers = new ArrayList<>();
+        for (OmsOrderDeliveryParam omsOrderDeliveryParam : deliveryParamList) {
+            OmsOrderCourier omsOrderCourier = new OmsOrderCourier();
+            omsOrderCourier.setOrderId(omsOrderDeliveryParam.getOrderId());
+            omsOrderCourier.setCourierNo(omsOrderDeliveryParam.getDeliverySn());
+            omsOrderCourier.setCompany(omsOrderDeliveryParam.getDeliveryCompany());
+            omsOrderCouriers.add(omsOrderCourier);
+        }
+        omsOrderCourierMapper.batchInsert(omsOrderCouriers);
+
+
+        for (OmsOrderCourier omsOrderCourier : omsOrderCouriers) {
+            try {
+                courierService.subscribe(CompanyEnum.descOf(omsOrderCourier.getCompany()),omsOrderCourier.getCourierNo(),sysConfigMapper.getConfig("kuaidiUrl"));
+
+            } catch (Exception e) {
+                LOG.error(e.getMessage());
+            }
+        }
         return count;
     }
 

+ 10 - 0
cooleshow-mall/mall-common/pom.xml

@@ -64,6 +64,16 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
+<!--        快递100-->
+        <dependency>
+            <groupId>com.github.kuaidi100-api</groupId>
+            <artifactId>sdk</artifactId>
+            <version>1.0.10</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 150 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/domain/CourierInfo.java

@@ -0,0 +1,150 @@
+package com.yonge.cooleshow.mall.common.courier.domain;
+
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description 快递运输信息
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public class CourierInfo {
+
+    // 快递公司
+    private CompanyEnum company;
+
+    // 快递单号
+    private String courierNo;
+
+    // 物流信息
+    private List<Logistics> logisticsList;
+
+    public  static class Logistics {
+        // 时间
+        private Date time;
+
+        //内容
+        private String context;
+
+
+        //行政区域的编码
+        private String areaCode;
+
+        //行政区域的名称
+        private String areaName;
+
+        //物流状态名称或者高级状态名称
+        private String status;
+
+        //快件当前地点
+        private String location;
+
+        //行政区域经纬度
+        private String areaCenter;
+
+        //行政区域拼音
+        private String areaPinYin;
+
+        //高级物流状态值
+        private String statusCode;
+
+        public Date getTime() {
+            return time;
+        }
+
+        public void setTime(Date time) {
+            this.time = time;
+        }
+
+        public String getContext() {
+            return context;
+        }
+
+        public void setContext(String context) {
+            this.context = context;
+        }
+
+        public String getAreaCode() {
+            return areaCode;
+        }
+
+        public void setAreaCode(String areaCode) {
+            this.areaCode = areaCode;
+        }
+
+        public String getAreaName() {
+            return areaName;
+        }
+
+        public void setAreaName(String areaName) {
+            this.areaName = areaName;
+        }
+
+        public String getStatus() {
+            return status;
+        }
+
+        public void setStatus(String status) {
+            this.status = status;
+        }
+
+        public String getLocation() {
+            return location;
+        }
+
+        public void setLocation(String location) {
+            this.location = location;
+        }
+
+        public String getAreaCenter() {
+            return areaCenter;
+        }
+
+        public void setAreaCenter(String areaCenter) {
+            this.areaCenter = areaCenter;
+        }
+
+        public String getAreaPinYin() {
+            return areaPinYin;
+        }
+
+        public void setAreaPinYin(String areaPinYin) {
+            this.areaPinYin = areaPinYin;
+        }
+
+        public String getStatusCode() {
+            return statusCode;
+        }
+
+        public void setStatusCode(String statusCode) {
+            this.statusCode = statusCode;
+        }
+    }
+
+    public CompanyEnum getCompany() {
+        return company;
+    }
+
+    public void setCompany(CompanyEnum company) {
+        this.company = company;
+    }
+
+    public String getCourierNo() {
+        return courierNo;
+    }
+
+    public void setCourierNo(String courierNo) {
+        this.courierNo = courierNo;
+    }
+
+    public List<Logistics> getLogisticsList() {
+        return logisticsList;
+    }
+
+    public void setLogisticsList(List<Logistics> logisticsList) {
+        this.logisticsList = logisticsList;
+    }
+}

+ 61 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/enums/CompanyEnum.java

@@ -0,0 +1,61 @@
+package com.yonge.cooleshow.mall.common.courier.enums;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public enum CompanyEnum {
+
+    SHUNFENG("shunfeng","顺丰快递"),
+    ZHONGTONG("zhongtong","中通快递"),
+    YUANTONG("yuantong","圆通快递"),
+    HUITONGKUAIDI("huitongkuaidi","汇通"),
+    SHENTONG("shentong","申通"),
+    YUNDA("yunda","韵达快递"),
+    EMS("ems","ems"),
+    JD("jd","京东"),
+    ZHAIJISONG("zhaijisong","宅急送"),
+    DEBANGKUAIDI("debangkuaidi","德邦快递"),
+    ;
+
+
+    // 快递100对应编号
+    private String code;
+
+    // 公司描述
+    private String desc;
+
+    CompanyEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public static CompanyEnum codeOf(String s) {
+        for (CompanyEnum value : CompanyEnum.values()) {
+            if (value.getCode().equals(s)) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+
+    public static CompanyEnum descOf(String s) {
+        for (CompanyEnum value : CompanyEnum.values()) {
+            if (value.getDesc().equals(s)) {
+                return value;
+            }
+        }
+        return null;
+    }
+}

+ 7 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/package-info.java

@@ -0,0 +1,7 @@
+/**
+ * Description 快递
+ *
+ * @author: feng-ji
+ * @date: 2022-10-26
+ */
+package com.yonge.cooleshow.mall.common.courier;

+ 42 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/service/CourierService.java

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.mall.common.courier.service;
+
+import com.yonge.cooleshow.mall.common.courier.domain.CourierInfo;
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public interface CourierService {
+
+
+    /**
+     * 查询快递信息
+     *
+     * @param company 快递公司
+     * @param courierNo 快递编号
+     */
+    CourierInfo queryTrack(CompanyEnum company,String courierNo);
+
+
+    /**
+     * 回调返回数据转 快递信息
+     *
+     * @param body
+     * @return
+     */
+    CourierInfo getCourierInfos(String body);
+
+    /**
+     * 快递信息订阅
+     *
+     * @param company 快递公司编号
+     * @param courierNo 快递单号
+     * @param url 回调地址
+     */
+    boolean subscribe(CompanyEnum company,String courierNo,String url) throws Exception;
+}

+ 150 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/service/impl/Courier100ServiceImpl.java

@@ -0,0 +1,150 @@
+package com.yonge.cooleshow.mall.common.courier.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.kuaidi100.sdk.api.QueryTrack;
+import com.kuaidi100.sdk.api.Subscribe;
+import com.kuaidi100.sdk.contant.ApiInfoConstant;
+import com.kuaidi100.sdk.contant.CompanyConstant;
+import com.kuaidi100.sdk.core.IBaseClient;
+import com.kuaidi100.sdk.pojo.HttpResult;
+import com.kuaidi100.sdk.request.QueryTrackParam;
+import com.kuaidi100.sdk.request.QueryTrackReq;
+import com.kuaidi100.sdk.request.SubscribeParam;
+import com.kuaidi100.sdk.request.SubscribeParameters;
+import com.kuaidi100.sdk.request.SubscribeReq;
+import com.kuaidi100.sdk.utils.SignUtils;
+import com.yonge.cooleshow.mall.common.courier.domain.CourierInfo;
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+import com.yonge.cooleshow.mall.common.courier.service.CourierService;
+import com.yonge.toolset.base.exception.BizException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+@Service("Courier100Service")
+public class Courier100ServiceImpl implements CourierService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Courier100ServiceImpl.class);
+
+    @Value("${courier.courier100.key:VCjiLJPi6082}")
+    private String key;
+
+    @Value("${courier.courier100.customer:9D9FE2336BB04B0414E243E7700FBD83}")
+    private String customer;
+
+
+    @Override
+    public CourierInfo queryTrack(CompanyEnum company, String courierNo) {
+        QueryTrackReq queryTrackReq = new QueryTrackReq();
+        QueryTrackParam queryTrackParam = new QueryTrackParam();
+
+        queryTrackParam.setCom(getCompanyConstant(company));
+        queryTrackParam.setNum(courierNo);
+        queryTrackParam.setResultv2("4");
+        String param = new Gson().toJson(queryTrackParam);
+
+        queryTrackReq.setParam(param);
+        queryTrackReq.setCustomer(customer);
+        queryTrackReq.setSign(SignUtils.querySign(param , key, customer));
+
+        IBaseClient baseClient = new QueryTrack();
+        try {
+            LOG.debug("查询快递参数: {}",queryTrackParam);
+            HttpResult execute = baseClient.execute(queryTrackReq);
+            LOG.info("查询快递信息参数: {}",execute);
+            if (execute.getStatus() != 200) {
+                throw new BizException(execute.getError());
+            }
+            String body = execute.getBody();
+            return getCourierInfos(body);
+        } catch (Exception e) {
+            LOG.error(e.getLocalizedMessage());
+            e.printStackTrace();
+            throw new BizException(e.getMessage());
+        }
+    }
+
+    @Override
+    public CourierInfo getCourierInfos(String body) {
+        JSONObject jsonObject = JSON.parseObject(body);
+        if (!"200".equals(jsonObject.getString("status"))) {
+            throw new BizException(jsonObject.getString("message"));
+        }
+        CourierInfo courierInfo = new CourierInfo();
+        List<CourierInfo.Logistics> data = JSON.parseArray(jsonObject.getString("data"), CourierInfo.Logistics.class);
+
+        courierInfo.setLogisticsList(data);
+        courierInfo.setCourierNo(jsonObject.getString("nu"));
+        courierInfo.setCompany(CompanyEnum.codeOf(jsonObject.getString("com")));
+        return courierInfo;
+    }
+
+    @Override
+    public boolean subscribe(CompanyEnum company, String courierNo, String url) {
+        SubscribeParameters subscribeParameters = new SubscribeParameters();
+        subscribeParameters.setCallbackurl(url);
+        subscribeParameters.setResultv2("4");
+
+        SubscribeParam subscribeParam = new SubscribeParam();
+        subscribeParam.setParameters(subscribeParameters);
+
+        subscribeParam.setCompany(getCompanyConstant(company));
+        subscribeParam.setNumber(courierNo);
+        subscribeParam.setKey(key);
+
+        SubscribeReq subscribeReq = new SubscribeReq();
+        subscribeReq.setSchema(ApiInfoConstant.SUBSCRIBE_SCHEMA);
+        subscribeReq.setParam(new Gson().toJson(subscribeParam));
+
+        IBaseClient subscribe = new Subscribe();
+        try {
+            LOG.debug("快递信息订阅参数: {}",subscribeReq);
+            HttpResult execute = subscribe.execute(subscribeReq);
+            LOG.info("快递信息订阅返回参数: {}",execute);
+            if (execute.getStatus() != 200) {
+                throw new BizException(execute.getError());
+            }
+            JSONObject jsonObject = JSON.parseObject(execute.getBody());
+            if (!"200".equals(jsonObject.getString("status"))) {
+                throw new BizException(jsonObject.getString("message"));
+            }
+            return true;
+        } catch (Exception e) {
+            LOG.error(e.getLocalizedMessage());
+            e.printStackTrace();
+            throw new BizException(e.getMessage());
+        }
+    }
+
+    private String getCompanyConstant(CompanyEnum companyEnum) {
+        switch (companyEnum) {
+            case JD: return CompanyConstant.JD;
+            case EMS: return CompanyConstant.EMS;
+            case YUNDA: return CompanyConstant.YD;
+            case SHENTONG: return CompanyConstant.ST;
+            case SHUNFENG: return CompanyConstant.SF;
+            case YUANTONG: return CompanyConstant.YT;
+            case ZHONGTONG: return CompanyConstant.ZT;
+            case ZHAIJISONG: return CompanyConstant.ZJS;
+            case DEBANGKUAIDI: return CompanyConstant.DB;
+            case HUITONGKUAIDI: return CompanyConstant.HT;
+            default: return null;
+        }
+    }
+
+    public static void main(String[] args) {
+        Courier100ServiceImpl courier100Service = new Courier100ServiceImpl();
+        courier100Service.queryTrack(CompanyEnum.DEBANGKUAIDI,"75606690482924");
+    }
+}

+ 1 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/enums/OrderCacheEnum.java

@@ -18,6 +18,7 @@ public enum OrderCacheEnum {
     LOCK_REFUND_ORDER_MALL("商城退款锁"),
     LOCK_ORDER_NO_MALL("订单号锁"),
     LOCK_STOCK_MALL("商品库存锁"),
+    COURIER_LOCK("快递单号锁"),
 
     ;
     /***

+ 37 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/OmsOrderCourierMapper.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.mbg.mapper;
+
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * Description
+ *
+ * @author: feng-ji
+ * @date: 2022-10-28
+ */
+public interface OmsOrderCourierMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(OmsOrderCourier record);
+
+    int insertSelective(OmsOrderCourier record);
+
+    OmsOrderCourier selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(OmsOrderCourier record);
+
+    int updateByPrimaryKey(OmsOrderCourier record);
+
+    int batchInsert(@Param("list") List<OmsOrderCourier> list);
+
+    /**
+     * 更新物流信息
+     */
+    void updateByCourierNo(@Param("courierNo") String courierNo, @Param("logistics") String logistics);
+
+    /**
+     * 查询物流信息
+     */
+    OmsOrderCourier queryByCourierNo(@Param("courierNo") String deliverySn);
+}

+ 68 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderCourier.java

@@ -0,0 +1,68 @@
+package com.yonge.cooleshow.mbg.model;
+
+/**
+ * 快递信息表
+ */
+public class OmsOrderCourier {
+    private Long id;
+
+    /**
+    * 快递公司
+    */
+    private String company;
+
+    /**
+     * 订单号
+     */
+    private Long orderId;
+
+    /**
+     * 快递单号
+     */
+    private String courierNo;
+
+    /**
+     * 物流信息
+     */
+    private String logistics;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCompany() {
+        return company;
+    }
+
+    public void setCompany(String company) {
+        this.company = company;
+    }
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+
+    public String getCourierNo() {
+        return courierNo;
+    }
+
+    public void setCourierNo(String courierNo) {
+        this.courierNo = courierNo;
+    }
+
+    public String getLogistics() {
+        return logistics;
+    }
+
+    public void setLogistics(String logistics) {
+        this.logistics = logistics;
+    }
+}

+ 114 - 0
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderCourierMapper.xml

@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yonge.cooleshow.mbg.mapper.OmsOrderCourierMapper">
+  <resultMap id="BaseResultMap" type="com.yonge.cooleshow.mbg.model.OmsOrderCourier">
+    <!--@mbg.generated-->
+    <!--@Table oms_order_courier-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="company" jdbcType="VARCHAR" property="company" />
+    <result column="order_id" jdbcType="BIGINT" property="orderId" />
+    <result column="courier_no" jdbcType="VARCHAR" property="courierNo" />
+    <result column="logistics" jdbcType="LONGVARCHAR" property="logistics" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, company, order_id, courier_no, logistics
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from oms_order_courier
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from oms_order_courier
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderCourier" useGeneratedKeys="true">
+    <!--@mbg.generated-->
+    insert into oms_order_courier (company, order_id, courier_no, 
+      logistics)
+    values (#{company,jdbcType=VARCHAR}, #{orderId,jdbcType=BIGINT}, #{courierNo,jdbcType=VARCHAR}, 
+      #{logistics,jdbcType=LONGVARCHAR})
+  </insert>
+  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderCourier" useGeneratedKeys="true">
+    <!--@mbg.generated-->
+    insert into oms_order_courier
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="company != null">
+        company,
+      </if>
+      <if test="orderId != null">
+        order_id,
+      </if>
+      <if test="courierNo != null">
+        courier_no,
+      </if>
+      <if test="logistics != null">
+        logistics,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="company != null">
+        #{company,jdbcType=VARCHAR},
+      </if>
+      <if test="orderId != null">
+        #{orderId,jdbcType=BIGINT},
+      </if>
+      <if test="courierNo != null">
+        #{courierNo,jdbcType=VARCHAR},
+      </if>
+      <if test="logistics != null">
+        #{logistics,jdbcType=LONGVARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderCourier">
+    <!--@mbg.generated-->
+    update oms_order_courier
+    <set>
+      <if test="company != null">
+        company = #{company,jdbcType=VARCHAR},
+      </if>
+      <if test="orderId != null">
+        order_id = #{orderId,jdbcType=BIGINT},
+      </if>
+      <if test="courierNo != null">
+        courier_no = #{courierNo,jdbcType=VARCHAR},
+      </if>
+      <if test="logistics != null">
+        logistics = #{logistics,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderCourier">
+    <!--@mbg.generated-->
+    update oms_order_courier
+    set company = #{company,jdbcType=VARCHAR},
+      order_id = #{orderId,jdbcType=BIGINT},
+      courier_no = #{courierNo,jdbcType=VARCHAR},
+      logistics = #{logistics,jdbcType=LONGVARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <insert id="batchInsert" keyColumn="id" keyProperty="id" parameterType="map" useGeneratedKeys="true">
+    <!--@mbg.generated-->
+    insert into oms_order_courier
+    (company, order_id, courier_no, logistics)
+    values
+    <foreach collection="list" item="item" separator=",">
+      (#{item.company,jdbcType=VARCHAR}, #{item.orderId,jdbcType=BIGINT}, #{item.courierNo,jdbcType=VARCHAR}, 
+        #{item.logistics,jdbcType=LONGVARCHAR})
+    </foreach>
+  </insert>
+
+  <update id="updateByCourierNo">
+    update oms_order_courier set logistics = #{logistics} where courier_no = #{courierNo};
+  </update>
+
+  <select id="queryByCourierNo" resultMap="BaseResultMap">
+    select * from oms_order_courier where courier_no = #{courierNo} order by  id desc limit  1
+    </select>
+</mapper>

+ 23 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java

@@ -4,9 +4,11 @@ import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
 import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
 import com.yonge.cooleshow.mbg.model.OmsOrder;
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
 import com.yonge.cooleshow.portal.domain.ConfirmOrderResult;
 import com.yonge.cooleshow.portal.domain.OmsOrderDetail;
 import com.yonge.cooleshow.portal.domain.OrderParam;
+import com.yonge.cooleshow.portal.service.OmsOrderCourierService;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.StringUtil;
@@ -37,6 +39,8 @@ public class OmsPortalOrderController {
     private OmsPortalOrderService portalOrderService;
 
 
+    @Autowired
+    private OmsOrderCourierService orderCourierService;
 
     @Value("${message.debugMode}")
     private boolean debugMode;
@@ -214,4 +218,23 @@ public class OmsPortalOrderController {
                                }, 60L, TimeUnit.SECONDS);
         return CommonResult.success(null);
     }
+
+
+    @ApiOperation("用户查询物流")
+    @GetMapping(value = "/selectCourier")
+    @ResponseBody
+    public CommonResult<OmsOrderCourier> selectCourier(@RequestParam String  deliverySn) {
+        OmsOrderCourier omsOrderCourier = orderCourierService.getCourierInfo(deliverySn);
+        return CommonResult.success(omsOrderCourier);
+    }
+
+
+
+    @ApiOperation("用户刷新物流信息")
+    @GetMapping(value = "/refreshCourier")
+    @ResponseBody
+    public CommonResult refreshCourier(@RequestParam String  deliverySn) throws InterruptedException {
+        orderCourierService.refreshCourier(deliverySn);
+        return CommonResult.success(null);
+    }
 }

+ 31 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/open/OpenShareController.java

@@ -1,12 +1,18 @@
 package com.yonge.cooleshow.portal.controller.open;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mall.common.courier.domain.CourierInfo;
+import com.yonge.cooleshow.mall.common.courier.service.CourierService;
 import com.yonge.cooleshow.portal.dto.ShareProductVo;
 import com.yonge.cooleshow.portal.dto.ShareProfitParam;
+import com.yonge.cooleshow.portal.service.OmsOrderCourierService;
+import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
 import com.yonge.cooleshow.portal.service.PmsPortalProductService;
 import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.Api;
@@ -17,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 @RestController
 @RequestMapping("/open")
@@ -30,6 +37,11 @@ public class OpenShareController extends BaseController {
     @Autowired
     private PmsPortalProductService portalProductService;
 
+    @Autowired
+    private OmsOrderCourierService orderCourierService;
+
+    @Autowired
+    private CourierService courierService;
 
     @ApiOperation(value = "老师商品分享分润")
     @PostMapping(value="/productProfit")
@@ -49,4 +61,23 @@ public class OpenShareController extends BaseController {
         }
         return CommonResult.failed("分享功能暂未开放");
     }
+
+
+
+    @ApiOperation(value = "快递信息回调")
+    @PostMapping(value="/courierCallback")
+    @ResponseBody
+    public CommonResult<ShareProductVo> courierCallback(@RequestBody String obj) {
+
+        JSONObject jsonObject = JSON.parseObject(obj);
+        String data = jsonObject.getString("lastResult");
+        CourierInfo courierInfos = courierService.getCourierInfos(data);
+
+        // 保存快递信息
+        orderCourierService.updateCourierInfo(courierInfos);
+
+        return CommonResult.failed("{\n" + "    \"result\":true,\n" + "    \"returnCode\":\"200\",\n" + "    \"message\":\"成功\"\n" + "}");
+    }
+
+
 }

+ 29 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsOrderCourierService.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.portal.service;
+
+import com.yonge.cooleshow.mall.common.courier.domain.CourierInfo;
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-31
+ */
+public interface OmsOrderCourierService {
+
+
+    @Transactional
+    void updateCourierInfo(CourierInfo courierInfos);
+
+    /**
+     * 查询物流
+     */
+    OmsOrderCourier getCourierInfo(String deliverySn);
+
+    /**
+     * 刷新物流信息
+     */
+    @Transactional
+    void refreshCourier(String deliverySn) throws InterruptedException;
+}

+ 58 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsOrderCourierServiceImpl.java

@@ -0,0 +1,58 @@
+package com.yonge.cooleshow.portal.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.mall.common.courier.domain.CourierInfo;
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+import com.yonge.cooleshow.mall.common.courier.service.CourierService;
+import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
+import com.yonge.cooleshow.mbg.mapper.OmsOrderCourierMapper;
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
+import com.yonge.cooleshow.portal.service.OmsOrderCourierService;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-31
+ */
+@Service
+public class OmsOrderCourierServiceImpl implements OmsOrderCourierService {
+
+    @Autowired
+    private OmsOrderCourierMapper omsOrderCourierMapper;
+    @Autowired
+    private CourierService courierService;
+
+    @Autowired
+    private RedissonClient redissonClient;
+
+    @Override
+    public void updateCourierInfo(CourierInfo courierInfos) {
+        String courierNo = courierInfos.getCourierNo();
+        String logistics = JSON.toJSONString(courierInfos.getLogisticsList());
+        omsOrderCourierMapper.updateByCourierNo(courierNo,logistics);
+    }
+
+    @Override
+    public OmsOrderCourier getCourierInfo(String deliverySn) {
+        return omsOrderCourierMapper.queryByCourierNo(deliverySn);
+    }
+
+    @Override
+    public void refreshCourier(String deliverySn) throws InterruptedException {
+        RLock lock = redissonClient.getLock(OrderCacheEnum.COURIER_LOCK.getCode());
+        boolean b = lock.tryLock(1, TimeUnit.HOURS);
+        if (b) {
+            OmsOrderCourier omsOrderCourier = omsOrderCourierMapper.queryByCourierNo(deliverySn);
+            CourierInfo courierInfo = courierService.queryTrack(CompanyEnum.valueOf(omsOrderCourier.getCompany()),
+                                                                omsOrderCourier.getCourierNo());
+            updateCourierInfo(courierInfo);
+        }
+    }
+}