Quellcode durchsuchen

快递信息查询

刘俊驰 vor 1 Jahr
Ursprung
Commit
6c973c5dc3

+ 26 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderController.java

@@ -1,11 +1,13 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.yonge.cooleshow.admin.service.OmsOrderCourierService;
 import com.yonge.cooleshow.admin.wrapper.OmsOrderWrapper;
 import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
 import com.yonge.cooleshow.admin.dto.*;
 import com.yonge.cooleshow.admin.service.OmsOrderService;
 import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -31,6 +33,9 @@ public class OmsOrderController {
     @Autowired
     private OmsOrderService orderService;
 
+
+    @Autowired
+    private OmsOrderCourierService orderCourierService;
     @Autowired
     private RedissonClient redissonClient;
     @ApiOperation("查询订单")
@@ -159,4 +164,25 @@ public class OmsOrderController {
         }
         return CommonResult.failed();
     }
+
+
+
+
+    @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 {
+        OmsOrderCourier omsOrderCourier = orderCourierService.refreshCourier(deliverySn);
+        return CommonResult.success(omsOrderCourier);
+    }
 }

+ 30 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderCourierService.java

@@ -0,0 +1,30 @@
+package com.yonge.cooleshow.admin.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);
+
+    /**
+     * 刷新物流信息
+     * @return
+     */
+    @Transactional
+    OmsOrderCourier refreshCourier(String deliverySn) throws InterruptedException;
+}

+ 68 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderCourierServiceImpl.java

@@ -0,0 +1,68 @@
+package com.yonge.cooleshow.admin.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.admin.service.OmsOrderCourierService;
+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.mall.common.exception.ApiException;
+import com.yonge.cooleshow.mbg.mapper.OmsOrderCourierMapper;
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
+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) {
+        OmsOrderCourier omsOrderCourier = omsOrderCourierMapper.queryByCourierNo(deliverySn);
+        if (omsOrderCourier == null) {
+            throw new ApiException("未找到物流信息");
+        }
+        return omsOrderCourier;
+    }
+
+    @Override
+    public OmsOrderCourier refreshCourier(String deliverySn) throws InterruptedException {
+        RLock lock = redissonClient.getLock(OrderCacheEnum.COURIER_LOCK.getCode() + deliverySn);
+        boolean b = lock.tryLock(0,1, TimeUnit.HOURS);
+
+        OmsOrderCourier omsOrderCourier = omsOrderCourierMapper.queryByCourierNo(deliverySn);
+        if (b) {
+            if (omsOrderCourier == null) {
+                throw new ApiException("未找到物流信息");
+            }
+            CourierInfo courierInfo = courierService.queryTrack(CompanyEnum.descOf(omsOrderCourier.getCompany()),
+                                                                omsOrderCourier.getCourierNo());
+            updateCourierInfo(courierInfo);
+        }
+        return omsOrderCourierMapper.queryByCourierNo(deliverySn);
+    }
+}

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

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

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

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.mbg.mapper;
+
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 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);
+}

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

@@ -0,0 +1,75 @@
+package com.yonge.cooleshow.mbg.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 快递信息表
+ */
+public class OmsOrderCourier {
+    @ApiModelProperty("")
+    private Long id;
+
+    /**
+    * 快递公司
+    */
+    @ApiModelProperty("快递公司名")
+    private String company;
+
+    /**
+     * 订单号
+     */
+    @ApiModelProperty("订单id")
+    private Long orderId;
+
+    /**
+     * 快递单号
+     */
+    @ApiModelProperty("快递单号")
+    private String courierNo;
+
+    /**
+     * 物流信息
+     */
+    @ApiModelProperty("物流信息 ")
+    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
mec-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
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java

@@ -9,11 +9,13 @@ import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
 import com.yonge.cooleshow.mall.common.util.DistributedLock;
 import com.yonge.cooleshow.mall.common.util.StringUtil;
 import com.yonge.cooleshow.mbg.model.OmsOrder;
+import com.yonge.cooleshow.mbg.model.OmsOrderCourier;
 import com.yonge.cooleshow.mbg.model.UmsMember;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 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.cooleshow.portal.service.UmsMemberService;
 import com.yonge.cooleshow.portal.service.UserOrderPaymentService;
@@ -52,6 +54,9 @@ public class OmsPortalOrderController {
     @Value("${message.debugMode}")
     private boolean debugMode;
 
+
+    @Autowired
+    private OmsOrderCourierService orderCourierService;
     @Autowired
     private RedissonClient redissonClient;
 
@@ -263,4 +268,22 @@ 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 {
+        return CommonResult.success(orderCourierService.refreshCourier(deliverySn));
+    }
 }

+ 10 - 2
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/open/OpenShareController.java

@@ -7,12 +7,15 @@ import com.baomidou.mybatisplus.extension.enums.ApiErrorCode;
 import com.ym.mec.common.controller.BaseController;
 import com.yonge.cooleshow.mall.common.api.CommonPage;
 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.mbg.model.PmsProduct;
 import com.yonge.cooleshow.portal.domain.OmsOrderDetail;
 import com.yonge.cooleshow.portal.domain.PmsPortalProductDetail;
 import com.yonge.cooleshow.portal.dto.ProductSearch;
 import com.yonge.cooleshow.portal.dto.ProductSearchConditionVo;
 import com.yonge.cooleshow.portal.dto.StockOperateModel;
+import com.yonge.cooleshow.portal.service.OmsOrderCourierService;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
 import com.yonge.cooleshow.portal.service.PmsPortalProductService;
 import io.swagger.annotations.Api;
@@ -39,6 +42,11 @@ public class OpenShareController extends BaseController {
     @Autowired
     private OmsPortalOrderService portalOrderService;
 
+    @Autowired
+    private OmsOrderCourierService orderCourierService;
+    @Autowired
+    private CourierService courierService;
+
     @ApiOperation(value = "同步库存")
     @PostMapping(value="/updateStock/{stockType}")
     @ResponseBody
@@ -107,8 +115,6 @@ public class OpenShareController extends BaseController {
     }
 
 
-
-
     @ApiOperation(value = "快递信息回调")
     @PostMapping(value="/courierCallback", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
     @ResponseBody
@@ -128,4 +134,6 @@ public class OpenShareController extends BaseController {
 
         return result;
     }
+
+
 }

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

@@ -0,0 +1,30 @@
+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);
+
+    /**
+     * 刷新物流信息
+     * @return
+     */
+    @Transactional
+    OmsOrderCourier refreshCourier(String deliverySn) throws InterruptedException;
+}

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

@@ -0,0 +1,68 @@
+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.mall.common.exception.ApiException;
+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) {
+        OmsOrderCourier omsOrderCourier = omsOrderCourierMapper.queryByCourierNo(deliverySn);
+        if (omsOrderCourier == null) {
+            throw new ApiException("未找到物流信息");
+        }
+        return omsOrderCourier;
+    }
+
+    @Override
+    public OmsOrderCourier refreshCourier(String deliverySn) throws InterruptedException {
+        RLock lock = redissonClient.getLock(OrderCacheEnum.COURIER_LOCK.getCode() + deliverySn);
+        boolean b = lock.tryLock(0,1, TimeUnit.HOURS);
+
+        OmsOrderCourier omsOrderCourier = omsOrderCourierMapper.queryByCourierNo(deliverySn);
+        if (b) {
+            if (omsOrderCourier == null) {
+                throw new ApiException("未找到物流信息");
+            }
+            CourierInfo courierInfo = courierService.queryTrack(CompanyEnum.descOf(omsOrderCourier.getCompany()),
+                                                                omsOrderCourier.getCourierNo());
+            updateCourierInfo(courierInfo);
+        }
+        return omsOrderCourierMapper.queryByCourierNo(deliverySn);
+    }
+}