Browse Source

Merge remote-tracking branch 'origin/master'

叶君翔 3 năm trước cách đây
mục cha
commit
44436ec8ba

+ 11 - 7
lb-app/src/main/java/com/ydd/app/controller/OrderOpenApi.java

@@ -1,9 +1,8 @@
 package com.ydd.app.controller;
 
+import com.ydd.app.dto.*;
 import com.ydd.app.dto.OrderCreateReq;
-import com.ydd.app.dto.OrderReq;
 import com.ydd.app.dto.OrderValuationReq;
-import com.ydd.app.dto.PushOrderDto;
 import com.ydd.app.service.OpenApiOrderService;
 import com.ydd.app.service.OpenApiOrderValuationService;
 import com.ydd.common.annotation.ControllerLog;
@@ -53,15 +52,20 @@ public class OrderOpenApi {
 
     @ApiOperation("开放接口-推送订单")
     @RequestMapping(value = "/push", method = RequestMethod.POST)
-    public ResponseResult pushOrder(@Valid PushOrderDto orderDto) {
-        return openApiOrderService.pushOrder(orderDto);
+    public ResponseResult pushOrder(@Valid @RequestBody OrderPushReq pushReq) {
+        return openApiOrderService.pushOrder(pushReq);
     }
 
     @ApiOperation("开放接口-取消订单")
     @RequestMapping(value = "/cancel", method = RequestMethod.POST)
-    public ResponseResult cancelOrder(@RequestBody OrderReq orderReq) {
-        openApiOrderService.cancelOrder(orderReq);
-        return ResponseResult.success();
+    public ResponseResult cancelOrder(@Valid @RequestBody OrderCancelReq cancelReq) {
+        return openApiOrderService.cancelOrder(cancelReq);
+    }
+
+    @ApiOperation("开放接口-骑手位置")
+    @RequestMapping(value = "/rider/location", method = RequestMethod.POST)
+    public ResponseResult location(@Valid @RequestBody OrderLocationReq locationReq) {
+        return openApiOrderService.riderLocation(locationReq);
     }
 
 }

+ 44 - 0
lb-app/src/main/java/com/ydd/app/dto/OrderCancelReq.java

@@ -0,0 +1,44 @@
+package com.ydd.app.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/12 13:44
+ */
+@Data
+public class OrderCancelReq extends BaseDto implements Serializable {
+
+    private static final long serialVersionUID = -8561104085245324941L;
+
+    /**
+     * 接入方订单编号(唯一标识),最长不超过32个字符
+     */
+    @NotBlank(message = "接入方订单编号不能为空")
+    @Size(max = 32, message = "接入方订单编号最长不能超过32个字符")
+    @ApiModelProperty(required = true, value = "接入方订单编号")
+    private String outOrderSn;
+
+    /**
+     * 猎豹订单号,最长不超过32个字符
+     */
+    @NotBlank(message = "猎豹订单号不能为空")
+    @Size(max = 32, message = "猎豹订单号最长不能超过32个字符")
+    @ApiModelProperty(required = true, value = "猎豹订单号")
+    private String orderSn;
+
+    /**
+     * 订单备注
+     */
+    @NotBlank(message = "取消原因不能为空")
+    @Size(max = 200, message = "取消原因不能超过200个字符")
+    @ApiModelProperty(required = true, value = "取消原因")
+    private String cancelReason;
+}

+ 36 - 0
lb-app/src/main/java/com/ydd/app/dto/OrderLocationReq.java

@@ -0,0 +1,36 @@
+package com.ydd.app.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/13 16:13
+ */
+@Data
+public class OrderLocationReq extends BaseDto implements Serializable {
+
+    private static final long serialVersionUID = -8561104085245324941L;
+
+    /**
+     * 接入方订单编号(唯一标识),最长不超过32个字符
+     */
+    @NotBlank(message = "接入方订单编号不能为空")
+    @Size(max = 32, message = "接入方订单编号最长不能超过32个字符")
+    @ApiModelProperty(required = true, value = "接入方订单编号")
+    private String outOrderSn;
+
+    /**
+     * 猎豹订单号,最长不超过32个字符
+     */
+    @NotBlank(message = "猎豹订单号不能为空")
+    @Size(max = 32, message = "猎豹订单号最长不能超过32个字符")
+    @ApiModelProperty(required = true, value = "猎豹订单号")
+    private String orderSn;
+}

+ 20 - 1
lb-app/src/main/java/com/ydd/app/dto/PushOrderDto.java

@@ -7,6 +7,7 @@ import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Size;
 import java.io.Serializable;
 
 /**
@@ -18,7 +19,7 @@ import java.io.Serializable;
 @Data
 @NoArgsConstructor
 @Accessors(chain = true)
-public class PushOrderDto extends BaseDto implements Serializable {
+public class OrderPushReq extends BaseDto implements Serializable {
 
     private static final long serialVersionUID = 4482372764158072355L;
 
@@ -26,6 +27,7 @@ public class PushOrderDto extends BaseDto implements Serializable {
      * 接入方订单编号(唯一标识),最长不超过32个字符
      */
     @NotBlank(message = "接入方订单编号不能为空")
+    @Size(max = 32, message = "接入方订单编号最长不能超过32个字符")
     @ApiModelProperty(required = true, value = "接入方订单编号")
     private String outOrderSn;
 
@@ -46,6 +48,7 @@ public class PushOrderDto extends BaseDto implements Serializable {
     /**
      * 订单备注
      */
+    @Size(max = 200, message = "订单备注最长不能超过200个字符")
     @ApiModelProperty(value = "订单备注")
     private String remark;
 
@@ -53,6 +56,7 @@ public class PushOrderDto extends BaseDto implements Serializable {
      * 收件人名称,最长不超过50个字符
      */
     @NotBlank(message = "收件人名称不能为空")
+    @Size(max = 50, message = "收件人名称最长不能超过50个字符")
     @ApiModelProperty(required = true, value = "收件人名称")
     private String receiverName;
 
@@ -60,6 +64,7 @@ public class PushOrderDto extends BaseDto implements Serializable {
      * 收件人联系电话,最长不超过40个字符
      */
     @NotBlank(message = "收件人联系电话不能为空")
+    @Size(max = 40, message = "收件人联系电话最长不能超过40个字符")
     @ApiModelProperty(required = true, value = "收件人联系电话")
     private String receiverPhone;
 
@@ -67,6 +72,7 @@ public class PushOrderDto extends BaseDto implements Serializable {
      * 收件人所在省,最长不超过30个字符
      */
     @NotBlank(message = "收件人所在省不能为空")
+    @Size(max = 30, message = "收件人所在省最长不能超过30个字符")
     @ApiModelProperty(required = true, value = "收件人所在省")
     private String receiverProvinceName;
 
@@ -74,12 +80,14 @@ public class PushOrderDto extends BaseDto implements Serializable {
      * 收件人所在市,最长不超过30个字符
      */
     @NotBlank(message = "收件人所在市不能为空")
+    @Size(max = 30, message = "收件人详细地址最长不能超过30个字符")
     @ApiModelProperty(required = true, value = "收件人所在市")
     private String receiverCityName;
 
     /**
      * 收件人所在区,最长不超过40个字符
      */
+    @Size(max = 40, message = "收件人所在区最长不能超过40个字符")
     @ApiModelProperty(value = "收件人所在区")
     private String receiverDistrictName;
 
@@ -87,6 +95,7 @@ public class PushOrderDto extends BaseDto implements Serializable {
      * 收件人详细地址,最长不超过150个字符
      */
     @NotBlank(message = "收件人详细地址不能为空")
+    @Size(max = 150, message = "收件人详细地址最长不能超过150个字符")
     @ApiModelProperty(required = true, value = "收件人详细地址")
     private String receiverAddress;
 
@@ -119,54 +128,63 @@ public class PushOrderDto extends BaseDto implements Serializable {
     /**
      * 发件人名称,当传入shopCode门店编号时,不必填,根据门店信息发单,最长不超过50个字符
      */
+    @Size(max = 50, message = "发件人名称最长不能超过50个字符")
     @ApiModelProperty(value = "发件人名称")
     private String sendName;
 
     /**
      * 发件人联系电话,当传入shopCode门店编号时,不必填,根据门店信息发单,最长不超过40个字符
      */
+    @Size(max = 40, message = "发件人联系电话最长不能超过40个字符")
     @ApiModelProperty(value = "发件人联系电话")
     private String sendPhone;
 
     /**
      * 发件人所在省,当传入shopCode门店编号时,不必填,根据门店信息发单,最长不超过30个字符
      */
+    @Size(max = 30, message = "发件人所在省最长不能超过30个字符")
     @ApiModelProperty(value = "发件人所在省")
     private String sendProvinceName;
 
     /**
      * 发件人所在市,当传入shopCode门店编号时,不必填,根据门店信息发单,最长不超过30个字符
      */
+    @Size(max = 30, message = "发件人所在市最长不能超过30个字符")
     @ApiModelProperty(value = "发件人所在市")
     private String sendCityName;
 
     /**
      * 发件人所在区,当传入shopCode门店编号时,不必填,根据门店信息发单,最长不超过30个字符
      */
+    @Size(max = 30, message = "发件人所在区最长不能超过30个字符")
     @ApiModelProperty(value = "发件人所在区")
     private String sendDistrictName;
 
     /**
      * 发件人详细地址,当传入shopCode门店编号时,不必填,根据门店信息发单,最长不超过150个字符
      */
+    @Size(max = 150, message = "发件人详细地址最长不能超过150个字符")
     @ApiModelProperty(value = "发件人详细地址")
     private String sendAddress;
 
     /**
      * 发件人门牌号,当传入shopCode门店编号时,不必填,根据门店信息发单,最长不超过30个字符
      */
+    @Size(max = 30, message = "发件人门牌号最长不能超过30个字符")
     @ApiModelProperty(value = "发件人门牌号")
     private String sendHouseNumber;
 
     /**
      * 发件人纬度,火星坐标系,最长不超过40个字符
      */
+    @Size(max = 40, message = "发件人纬度最长不能超过40个字符")
     @ApiModelProperty(value = "发件人纬度")
     private String sendLng;
 
     /**
      * 发件人经度,火星坐标系,最长不超过40个字符
      */
+    @Size(max = 40, message = "发件人经度最长不能超过40个字符")
     @ApiModelProperty(value = "发件人经度")
     private String sendLat;
 
@@ -174,6 +192,7 @@ public class PushOrderDto extends BaseDto implements Serializable {
      * 流水号,最长不超过5个字符
      */
     @NotBlank(message = "流水号不能为空")
+    @Size(max = 5, message = "流水号最长不能超过5个字符")
     @ApiModelProperty(required = true, value = "流水号")
     private String daySeq;
 

+ 18 - 10
lb-app/src/main/java/com/ydd/app/service/OpenApiOrderService.java

@@ -1,8 +1,10 @@
 package com.ydd.app.service;
 
+import com.ydd.app.dto.OrderCancelReq;
+import com.ydd.app.dto.OrderLocationReq;
 import com.ydd.app.dto.OrderCreateReq;
 import com.ydd.app.dto.OrderReq;
-import com.ydd.app.dto.PushOrderDto;
+import com.ydd.app.dto.OrderPushReq;
 import com.ydd.common.core.domain.ResponseResult;
 
 /**
@@ -14,17 +16,10 @@ public interface OpenApiOrderService {
 
     /**
      * 推送订单
-     * @param orderDto 推送订单信息
+     * @param pushReq 推送订单信息
      * @return 推送结果
      */
-    ResponseResult pushOrder(PushOrderDto orderDto);
-
-    /**
-     * 取消订单
-     * @param orderReq 取消订单请求参数
-     * @return 取消结果
-     */
-    Boolean cancelOrder(OrderReq orderReq);
+    ResponseResult pushOrder(OrderPushReq pushReq);
 
     /**
      * 创建订单
@@ -33,4 +28,17 @@ public interface OpenApiOrderService {
      */
     ResponseResult createOrder(OrderCreateReq orderCreateReq);
 
+    /**
+     * 取消订单
+     * @param cancelReq 取消订单请求参数
+     * @return 取消结果
+     */
+    ResponseResult cancelOrder(OrderCancelReq cancelReq);
+
+    /**
+     * 骑手位置
+     * @param locationReq 订单号sn
+     * @return 骑手信息
+     */
+    ResponseResult riderLocation(OrderLocationReq locationReq);
 }

+ 596 - 53
lb-app/src/main/java/com/ydd/app/service/impl/OpenApiOrderServiceImpl.java

@@ -1,32 +1,60 @@
 package com.ydd.app.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.ydd.api.DeliveryService;
+import com.ydd.app.dto.OrderCancelReq;
+import com.ydd.app.dto.OrderLocationReq;
 import com.ydd.app.dto.OrderCreateReq;
 import com.ydd.app.dto.OrderReq;
-import com.ydd.app.dto.PushOrderDto;
+import com.ydd.app.dto.OrderPushReq;
 import com.ydd.app.service.ApiOrderNewService;
 import com.ydd.app.service.OpenApiOrderService;
+import com.ydd.app.vo.OrderLocationVo;
 import com.ydd.app.vo.OrderCreateVo;
 import com.ydd.app.vo.PushOrderVo;
 import com.ydd.common.constant.RedisKeyConstant;
 import com.ydd.common.core.domain.ResponseResult;
 import com.ydd.common.core.redis.RedisCache;
+import com.ydd.common.enums.DeliveryTypeEnums;
 import com.ydd.common.enums.ResponseResultCodeEnum;
+import com.ydd.common.enums.WaimaiTypeEnums;
 import com.ydd.common.utils.SnCodeUtils;
 import com.ydd.common.utils.StringUtils;
-import com.ydd.module.domain.Order;
-import com.ydd.module.domain.Product;
-import com.ydd.module.domain.Shop;
-import com.ydd.module.service.IOrderService;
-import com.ydd.module.service.IProductService;
-import com.ydd.module.service.IShopService;
+import com.ydd.ecloud.core.enums.DeletedEnum;
+import com.ydd.ecloud.core.utils.BigDecimalUtils;
+import com.ydd.module.CancelOrderUtils;
+import com.ydd.module.domain.*;
+import com.ydd.module.dto.CancelOrderDto;
+import com.ydd.module.dto.CouponDto;
+import com.ydd.module.enums.DeliveryStatusEnum;
+import com.ydd.module.enums.MemberCouponStatusEnum;
+import com.ydd.module.enums.OrderCancelTypeEnum;
+import com.ydd.module.enums.PayStatusEnum;
+import com.ydd.module.service.*;
+import com.ydd.third.common.utils.CoordinateUtils;
+import com.ydd.third.common.vo.ResObject;
+import com.ydd.third.common.vo.huolalavo.HirtualPhoneInfo;
+import com.ydd.third.common.vo.vo.order.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 订单类开放接口 ServiceImpl
+ *
  * @author 叶君翔
  * @date 2022/04/08 15:20
  */
@@ -36,73 +64,88 @@ import org.springframework.stereotype.Service;
 public class OpenApiOrderServiceImpl implements OpenApiOrderService {
 
     private final IOrderService iOrderService;
+    private final IOrderLogService iOrderLogService;
 
     private final IProductService iProductService;
 
     private final IShopService iShopService;
+    private final IDspDeliveryService iDspDeliveryService;
 
-    private final RedisCache redisCache;
+    private final IShopDeliveryBindService iShopDeliveryBindService;
+    private final IOrderDeliveryService iOrderDeliveryService;
 
     private final ApiOrderNewService apiOrderNewService;
 
+    private final IOrderTipService iOrderTipService;
+
+    // redis控制台
+    private final RedisTemplate redisTemplate;
+
+    private final RedisCache redisCache;
+
+    private final DeliveryService client;
+
+    private final IShopWaimaiService iShopWaimaiService;
+    private final IDspWaimaiService iDspWaimaiService;
+
     @Override
-    public ResponseResult pushOrder(PushOrderDto orderDto) {
+    public ResponseResult pushOrder(OrderPushReq pushReq) {
         // 特殊必填处理
-        ResponseResult result = specialJudge(orderDto);
-        if (result.getCode() == 1) {
+        ResponseResult result = specialJudge(pushReq);
+        if (result.getCode() != ResponseResultCodeEnum.SUCCESS.getCode()) {
             return result;
         }
 
-        Order order = iOrderService.getOne(new QueryWrapper<Order>().eq("deleted", 0).eq("out_trade_no", orderDto.getOutOrderSn()));
+        Order order = iOrderService.getOne(new QueryWrapper<Order>().eq("deleted", 0).eq("out_trade_no", pushReq.getOutOrderSn()));
         if (order == null) {
             order = new Order();
         }
 
         // 添加订单其它属性
-        order.setOutTradeNo(orderDto.getOutOrderSn());
-        order.setProductId(orderDto.getCategoryId().longValue());
+        order.setOutTradeNo(pushReq.getOutOrderSn());
+        order.setProductId(pushReq.getCategoryId().longValue());
         Product product = iProductService.getById(order.getProductId());
         order.setProductName(product.getName());
-        order.setWeight(orderDto.getWeight());
-        if (StringUtils.isNotBlank(orderDto.getRemark())) {
-            order.setTakeRemark(orderDto.getRemark());
-        }
-        order.setReceiptContactName(orderDto.getReceiverName());
-        order.setReceiptPhone(orderDto.getReceiverPhone());
-        order.setReceiptProvinceName(orderDto.getReceiverProvinceName());
-        order.setReceiptCityName(orderDto.getReceiverCityName());
-        if (StringUtils.isNotBlank(orderDto.getReceiverDistrictName())) {
-            order.setReceiptDistrictName(orderDto.getReceiverDistrictName());
-        }
-        order.setReceiptAddress(orderDto.getReceiverAddress());
-        if (StringUtils.isNotBlank(orderDto.getReceiverHouseNumber())) {
-            order.setReceiptStreet(orderDto.getReceiverHouseNumber());
-        }
-        order.setReceiptLng(orderDto.getReceiverLng());
-        order.setReceiptLat(orderDto.getReceiverLat());
-        if (StringUtils.isNotBlank(orderDto.getShopCode())) {
-            Shop shop = iShopService.getOne(new QueryWrapper<Shop>().eq("deleted", 0).eq("code", orderDto.getShopCode()));
+        order.setWeight(pushReq.getWeight());
+        if (StringUtils.isNotBlank(pushReq.getRemark())) {
+            order.setTakeRemark(pushReq.getRemark());
+        }
+        order.setReceiptContactName(pushReq.getReceiverName());
+        order.setReceiptPhone(pushReq.getReceiverPhone());
+        order.setReceiptProvinceName(pushReq.getReceiverProvinceName());
+        order.setReceiptCityName(pushReq.getReceiverCityName());
+        if (StringUtils.isNotBlank(pushReq.getReceiverDistrictName())) {
+            order.setReceiptDistrictName(pushReq.getReceiverDistrictName());
+        }
+        order.setReceiptAddress(pushReq.getReceiverAddress());
+        if (StringUtils.isNotBlank(pushReq.getReceiverHouseNumber())) {
+            order.setReceiptStreet(pushReq.getReceiverHouseNumber());
+        }
+        order.setReceiptLng(pushReq.getReceiverLng());
+        order.setReceiptLat(pushReq.getReceiverLat());
+        if (StringUtils.isNotBlank(pushReq.getShopCode())) {
+            Shop shop = iShopService.getOne(new QueryWrapper<Shop>().eq("deleted", 0).eq("code", pushReq.getShopCode()));
             if (shop != null) {
                 order.setMerchantId(shop.getMerchantId());
                 order.setShopId(shop.getId());
                 order.setShopName(shop.getName());
             }
         } else {
-            order.setSendContactName(orderDto.getSendName());
-            order.setSendPhone(orderDto.getSendPhone());
-            order.setSendProvinceName(orderDto.getSendProvinceName());
-            order.setSendCityName(orderDto.getSendCityName());
-            if (StringUtils.isNotBlank(orderDto.getSendDistrictName())) {
-                order.setSendDistrictName(orderDto.getSendDistrictName());
+            order.setSendContactName(pushReq.getSendName());
+            order.setSendPhone(pushReq.getSendPhone());
+            order.setSendProvinceName(pushReq.getSendProvinceName());
+            order.setSendCityName(pushReq.getSendCityName());
+            if (StringUtils.isNotBlank(pushReq.getSendDistrictName())) {
+                order.setSendDistrictName(pushReq.getSendDistrictName());
             }
-            order.setSendAddress(orderDto.getSendAddress());
-            if (StringUtils.isNotBlank(orderDto.getSendHouseNumber())) {
-                order.setSendStreet(orderDto.getSendHouseNumber());
+            order.setSendAddress(pushReq.getSendAddress());
+            if (StringUtils.isNotBlank(pushReq.getSendHouseNumber())) {
+                order.setSendStreet(pushReq.getSendHouseNumber());
             }
-            order.setSendLng(orderDto.getSendLng());
-            order.setSendLat(orderDto.getSendLat());
+            order.setSendLng(pushReq.getSendLng());
+            order.setSendLat(pushReq.getSendLat());
         }
-        order.setLbDaySeq(orderDto.getDaySeq());
+        order.setLbDaySeq(pushReq.getDaySeq());
         order.setOrderSn(SnCodeUtils.createSn());
 
         if (order.getId() == null) {
@@ -112,19 +155,13 @@ public class OpenApiOrderServiceImpl implements OpenApiOrderService {
         }
 
         PushOrderVo vo = new PushOrderVo();
-        vo.setOutOrderSn(orderDto.getOutOrderSn());
+        vo.setOutOrderSn(pushReq.getOutOrderSn());
         vo.setOrderSn(order.getOrderSn());
         result.setData(vo);
         return result;
     }
 
-    @Override
-    public Boolean cancelOrder(OrderReq orderReq) {
-        // Order order = iOrderService.selectOrderBySn(orderReq.getOrderSn(), orderReq.getoutt);
-        return null;
-    }
-
-    private ResponseResult specialJudge(PushOrderDto orderDto) {
+    private ResponseResult specialJudge(OrderPushReq orderDto) {
         ResponseResult result = ResponseResult.success();
         if (StringUtils.isBlank(orderDto.getShopCode())) {
             if (StringUtils.isBlank(orderDto.getSendName())) {
@@ -153,6 +190,512 @@ public class OpenApiOrderServiceImpl implements OpenApiOrderService {
     }
 
     @Override
+    public ResponseResult cancelOrder(OrderCancelReq cancelReq) {
+        ResponseResult result = ResponseResult.success();
+        Order order = iOrderService.selectOrderBySn(cancelReq.getOrderSn(), cancelReq.getOutOrderSn());
+
+        if (Objects.isNull(order)) {
+            return ResponseResult.error(ResponseResultCodeEnum.ORDER_NOT_EXIST);
+        }
+
+        int count = 0;
+        ResponseResult responseResult = new ResponseResult();
+        Integer orderStatus = DeliveryStatusEnum.CANCEL.status;
+        try {
+            boolean flag = (order.getDeliveryStatus().equals(DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) || order.getDeliveryStatus().equals(DeliveryStatusEnum.TO_BE_DELIVERED.status))
+                    || order.getDeliveryStatus().equals(DeliveryStatusEnum.IN_DELIVERY.status);
+            if (flag) {
+                if (redisTemplate.hasKey(order.getOrderSn() + "_cancel")) {
+                    Long size = redisTemplate.opsForList().size(order.getOrderSn() + "_cancel");
+                    if (size != null) {
+                        for (long i = 0; i < size; i++) {
+                            OrderResultVo vo = (OrderResultVo) redisTemplate.opsForList().rightPop(order.getOrderSn() + "_cancel");
+                            responseResult = cancelThirdOrder(order, vo.getDeliveryId(), count, vo.getAptOrderId(), vo.getPhone(), null, cancelReq.getCancelReason());
+                        }
+                    }
+                } else if (order.getDeliveryStatus().intValue() >= DeliveryStatusEnum.TO_BE_DELIVERED.status.intValue()) {
+                    cancelOrder(order, order.getCancelReason(), orderStatus);
+                    responseResult = cancelThirdOrder(order,order.getDeliveryId(),count,order.getAptOrderId(),order.getAptPhone(),null,order.getCancelReason());
+                } else if (order.getDeliveryStatus().intValue() == DeliveryStatusEnum.ORDERS_TO_BE_BILLED.status.intValue()) {
+                    cancelOrder(order, order.getCancelReason(), orderStatus);
+                } else if (order.getDeliveryStatus().equals(DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status)) {
+                    cancelOrder(order, order.getCancelReason(), orderStatus);
+                    List<OrderDelivery> list = iOrderDeliveryService.list(new QueryWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).ne("delivery_id",19).ge("delivery_status",DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status));
+                    if(CollectionUtils.isNotEmpty(list)){
+                        for(OrderDelivery orderDelivery:list){
+                            responseResult = cancelThirdOrder(order,orderDelivery.getDeliveryId(),count,null,null,null,order.getCancelReason());
+                        }
+                    }
+                }
+            } else if (order.getStatus().equals(PayStatusEnum.NO_PAYED.status) && order.getDeliveryStatus().equals(DeliveryStatusEnum.ORDERS_TO_BE_BILLED.status)) {
+                cancelOrder(order, order.getCancelReason(), orderStatus);
+            } else if (DeliveryStatusEnum.ABNORMAL.status.equals(order.getDeliveryStatus()) && DeliveryStatusEnum.CANCEL.status.equals(orderStatus)) {
+                cancelOrder(order, order.getCancelReason(), orderStatus);
+            }
+
+        } catch (Exception e) {
+            count += 1;
+            // 回滚事务
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+        }
+
+        if (count > 0 || responseResult.getCode() == ResponseResultCodeEnum.FAIL.getCode()) {
+            return ResponseResult.error(ResponseResultCodeEnum.FAIL);
+        }
+
+        return result;
+    }
+
+    public ResponseResult cancelThirdOrder(Order order,Long deliveryId,int result,Integer aptOrderId,String aptPhone,Integer cancelType,String cancenlResonMsg){
+        ResponseResult responseResult = new ResponseResult();
+        responseResult.setCode(ResponseResultCodeEnum.SUCCESS.getCode());
+        DspDelivery delivery = iDspDeliveryService.getById(deliveryId);
+        OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).eq("delivery_id", deliveryId));
+        // 违约金处理
+        BigDecimal deductFee = BigDecimal.ZERO;
+        if (DeliveryStatusEnum.CANCEL.status.equals(orderDelivery.getDeliveryStatus())) {
+            // 三方平台已取消
+            cancelSf(deductFee, order,deliveryId,"");
+        } else {
+            //调用配送平台取消接口
+            ResObject<CancelOrderResultVo> resObject = getCancelOrderResultVoResObject(orderDelivery.getChildOrderSn(), orderDelivery.getOutTradeNo(), orderDelivery.getUuptOpenId(), aptOrderId,
+                    aptPhone, order.getId(), delivery, cancelType, cancenlResonMsg);
+            if (resObject.getCode() != 0) {
+                result += 1;
+                orderDelivery.setCancelResult(resObject.getMsg());
+                iOrderDeliveryService.update(orderDelivery, new UpdateWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).eq("delivery_id", deliveryId));
+               if(resObject.getCode() !=2011&&!orderDelivery.getDeliveryName().contains("达达")){
+                   responseResult.setCode(ResponseResultCodeEnum.FAIL.getCode());
+               }
+            }
+
+            if (resObject.getData() != null&&!DeliveryTypeEnums.SHAN_SONG.getType().equals(delivery.getType())) {
+                deductFee = resObject.getData().getDeductFee() == null ? BigDecimal.ZERO : resObject.getData().getDeductFee();
+                if (deductFee.compareTo(BigDecimal.ZERO) > 0) {
+                    redisCache.setCacheObject("deuctFee_"+order.getOrderSn(), deductFee);
+                    redisCache.expire("deuctFee_"+order.getOrderSn(),2, TimeUnit.HOURS);
+                }
+            }
+            //商家取消订单 顺丰是实时处理不回调
+            if (DeliveryTypeEnums.SHUN_FENG.getType().equals(delivery.getType()) || DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())
+                    || DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())
+                    || DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())
+                    || DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType())) {
+                cancelSf(deductFee, order,deliveryId,resObject.getMsg());
+            }
+
+            if (result > 0) {
+                responseResult.setCode(ResponseResultCodeEnum.FAIL.getCode());
+            }
+        }
+        return responseResult;
+    }
+
+    public void cancelOrder(Order order, String cancelReason, Integer orderStatus) {
+        order.setStatus(PayStatusEnum.CANCEL.status);
+        order.setDeliveryStatus(orderStatus);
+        order.setCancelReason(cancelReason);
+        iOrderService.updateById(order);
+        iOrderLogService.addOrderLog(order.getId(), order.getDeliveryStatus());
+    }
+
+    private void cancelSf(BigDecimal deductFee, Order order,Long deliveryId,String cancelResult) {
+        OrderDelivery orderDelivery = new OrderDelivery();
+        orderDelivery.setDeliveryStatus(DeliveryStatusEnum.CANCEL.status);
+        orderDelivery.setCancelTime(new Date());
+        orderDelivery.setCancelResult(cancelResult);
+        iOrderDeliveryService.update(orderDelivery, new UpdateWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).eq("delivery_id", deliveryId));
+        int count = iOrderDeliveryService.count(new QueryWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn())
+                .ne("delivery_status", DeliveryStatusEnum.CANCEL.status).ne("out_trade_no", -1).isNotNull("out_trade_no"));
+
+        BigDecimal result = redisCache.getCacheObject(order.getOrderSn());
+        if (result != null) {
+            deductFee = result;
+            redisCache.deleteObject(order.getOrderSn());
+        }
+        if (count == 0) {
+            order = iOrderService.getById(order.getId());
+            if (order.getRefundMoney().compareTo(BigDecimal.ZERO) == 0) {
+                order.setRefundMoney(order.getPayAmount().subtract(deductFee));
+                List<OrderTip> orderTips = iOrderTipService.list(new QueryWrapper<OrderTip>().eq("order_no", order.getOrderSn()).eq("status", PayStatusEnum.PAYED.status));
+                BigDecimal refundMoney = order.getPayAmount().subtract(deductFee);
+
+                BigDecimal tips = orderTips.stream().map(OrderTip::getAmount).reduce(BigDecimal.ZERO, BigDecimalUtils::sum);
+                refundMoney = refundMoney.subtract(tips);
+                apiOrderNewService.refundTip(orderTips, "加小费退款", order.getMemberId(), order.getMerchantId());
+
+                apiOrderNewService.refund(order.getOrderSn(), refundMoney, "取消订单退款", order.getMemberId(), order.getMerchantId());
+                redisTemplate.delete(order.getOrderSn()+"to_recive:");
+            }
+            iOrderService.updateById(order);
+        }
+    }
+
+    private ResObject<CancelOrderResultVo> getCancelOrderResultVoResObject(String orderNo, String outTradeNo, String uuptOpenId, Integer aptOrderId, String aptPhone,
+                                                                           Long orderId, DspDelivery delivery, Integer cancelType,String cancenlResonMsg) {
+        OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper<OrderDelivery>().eq("child_order_sn", orderNo));
+
+        CancelOrderDto dto = new CancelOrderDto();
+        dto.setOrderSn(orderNo);
+        dto.setReason(OrderCancelTypeEnum.getNameByType(cancelType));
+        dto.setCancelCode(cancelType);
+        dto.setCancenlResonMsg(cancenlResonMsg);
+        dto.setOutTradeNo(outTradeNo);
+        dto.setUuptOpenId(uuptOpenId);
+
+        dto.setAptOrderId(aptOrderId);
+        dto.setAptPhone(aptPhone);
+
+        dto.setKfAccessToken(orderDelivery.getKfToken());
+
+        // 美团众包
+        dto.setZbOrderSn(orderDelivery.getOutTradeNo());
+        dto.setZbAccessToken(orderDelivery.getZbToken());
+
+        // 美团在我们平台的订单id
+        dto.setOrderId(orderId);
+        dto.setIsMine(orderDelivery.getIsMine());
+        // 货拉拉订单状态
+        dto.setHllStatus(orderDelivery.getHllStatus());
+        //顺丰需要shopId  delivery配送平台信息
+
+        CancelOrderVo orderVo = CancelOrderUtils.createOrderVo(dto, delivery);
+        Order order = iOrderService.getById(orderId);
+        if (order.getMerchantId() != null && orderDelivery.getIsMine().equals(1)) {
+            ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
+            if (shopDeliveryBind != null) {
+                orderVo.setAccessToken(shopDeliveryBind.getAuthToken());
+                orderVo.setMerchantId(shopDeliveryBind.getThirdShopId());
+            }
+        }
+        //订单取消返回结果
+        ResObject<CancelOrderResultVo> resObject = client.cancelOrder(orderVo);
+        if (resObject.getCode() != 0) {
+            try {
+                log.info("<===========>重新发起取消开始********************");
+                TimeUnit.SECONDS.sleep(5);
+                resObject = client.cancelOrder(orderVo);
+            } catch (Exception e) {
+
+            }
+            log.error("取消订单失败" + JSONObject.toJSONString(orderVo));
+        }
+        return resObject;
+    }
+
+    @Override
+    public ResponseResult riderLocation(OrderLocationReq locationReq) {
+        ResponseResult result = ResponseResult.success();
+        Order order = iOrderService.selectOrderBySn(locationReq.getOrderSn(), locationReq.getOutOrderSn());
+        if (Objects.isNull(order)) {
+            return ResponseResult.error(ResponseResultCodeEnum.ORDER_NOT_EXIST);
+        }
+
+        boolean flag = order.getDeliveryStatus() > DeliveryStatusEnum.IN_DELIVERY.getStatus() ||
+                DeliveryStatusEnum.CANCEL.status.equals(order.getDeliveryStatus()) || DeliveryStatusEnum.ABNORMAL.status.equals(order.getDeliveryStatus());
+        if (flag) {
+            return ResponseResult.error(ResponseResultCodeEnum.ORDER_STATUS_FAIL);
+        }
+
+        OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper<OrderDelivery>()
+                .eq("deleted", 0)
+                .eq("order_sn", order.getOrderSn())
+                .eq("delivery_id", order.getDeliveryId()));
+        DspDelivery delivery = iDspDeliveryService.findById(order.getDeliveryId());
+
+        OrderLocationVo vo = getRiderLocation(order, orderDelivery, delivery);
+        if (Objects.isNull(vo)) {
+            return ResponseResult.error(ResponseResultCodeEnum.FAIL);
+        }else {
+            result.setData(vo);
+        }
+
+        return result;
+    }
+
+    private OrderLocationVo getRiderLocation(Order order, OrderDelivery orderDelivery, DspDelivery delivery) {
+        OrderLocationVo locationVo = new OrderLocationVo();
+
+        if (DeliveryTypeEnums.DADA.getType().equals(delivery.getType())&&orderDelivery!=null) {
+                OrderQueryVo orderQueryVo = new OrderQueryVo();
+                orderQueryVo.setLbClient(DeliveryTypeEnums.DADA.getName());
+                orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
+                orderQueryVo.setIsDirectDelivery(0);
+                if (orderDelivery.getIsMine() == 1L){
+                    ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
+                    if (shopDeliveryBind != null){
+                        orderQueryVo.setMerchantId(shopDeliveryBind.getThirdShopId());
+                    }
+                }
+                ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
+                if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                    String riderLat = resObject.getData().getRiderLat().toString();
+                    String riderLng = resObject.getData().getRiderLng().toString();
+                    locationVo.setShipperLat(riderLat);
+                    locationVo.setShipperLng(riderLng);
+                    locationVo.setShipperName(resObject.getData().getRiderName());
+                    locationVo.setShipperPhone(resObject.getData().getRiderPhone());
+                }
+            } else if (DeliveryTypeEnums.DADA_YZ.getType().equals(delivery.getType())&&orderDelivery!=null) {
+                OrderQueryVo orderQueryVo = new OrderQueryVo();
+                orderQueryVo.setLbClient(DeliveryTypeEnums.DADA_YZ.getName());
+                orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
+                orderQueryVo.setIsDirectDelivery(1);
+                if (orderDelivery.getIsMine() == 1){
+                    ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
+
+                    if (shopDeliveryBind != null){
+                        orderQueryVo.setMerchantId(shopDeliveryBind.getThirdShopId());
+                    }
+                }
+                ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
+                if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                    String riderLat = resObject.getData().getRiderLat().toString();
+                    String riderLng = resObject.getData().getRiderLng().toString();
+                    locationVo.setShipperLat(riderLat);
+                    locationVo.setShipperLng(riderLng);
+                    locationVo.setShipperName(resObject.getData().getRiderName());
+                    locationVo.setShipperPhone(resObject.getData().getRiderPhone());
+                }
+            } else if (DeliveryTypeEnums.UUPT.getType().equals(delivery.getType())) {
+                OrderQueryVo orderQueryVo = new OrderQueryVo();
+                orderQueryVo.setLbClient(DeliveryTypeEnums.UUPT.getName());
+                orderQueryVo.setOrderNo(order.getOutTradeNo());
+                orderQueryVo.setUuptOpenId(order.getUuptOpenId());
+                ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
+                if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                    if(resObject.getData().getRiderLat() != null){
+                        double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
+                        locationVo.setShipperLat(receiverGps[0] + "");
+                        locationVo.setShipperLng(receiverGps[1] + "");
+                        locationVo.setShipperName(resObject.getData().getRiderName());
+                        locationVo.setShipperPhone(resObject.getData().getRiderPhone());
+                    }
+                }
+            } else if (DeliveryTypeEnums.AIPT.getType().equals(delivery.getType())) {
+                OrderQueryVo orderQueryVo = new OrderQueryVo();
+                orderQueryVo.setLbClient(DeliveryTypeEnums.AIPT.getName());
+                orderQueryVo.setAptOrderId(order.getAptOrderId());
+                orderQueryVo.setAptPhone(order.getAptPhone());
+                if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
+                    ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
+                    if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                        if(resObject.getData().getRiderLat() != null){
+                            double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
+                            locationVo.setShipperLat(receiverGps[0] + "");
+                            locationVo.setShipperLng(receiverGps[1] + "");
+                            locationVo.setShipperName(resObject.getData().getRiderName());
+                            locationVo.setShipperPhone(resObject.getData().getRiderPhone());
+                        }
+                    }
+                }
+            } else if (DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())&&orderDelivery!=null) {
+                if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
+                    OrderQueryVo orderQueryVo = new OrderQueryVo();
+                    orderQueryVo.setLbClient(DeliveryTypeEnums.FENG_NIAO.getName());
+                    orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
+                    orderQueryVo.setAccessToken(delivery.getAuthToken());
+                    orderQueryVo.setMerchantId(delivery.getShopId());
+                    ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
+                    if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                        locationVo.setShipperName(resObject.getData().getRiderName());
+                        locationVo.setShipperPhone(resObject.getData().getRiderPhone());
+                    }
+                    RiderLocationVo riderLocationVo = new RiderLocationVo();
+                    riderLocationVo.setLbClient(DeliveryTypeEnums.FENG_NIAO.getName());
+                    riderLocationVo.setOrderNo(orderDelivery.getChildOrderSn());
+                    riderLocationVo.setAccessToken(delivery.getAuthToken());
+                    riderLocationVo.setMerchantId(delivery.getShopId());
+                    ResObject<RiderLocationResultVo> res = client.getRiderLocation(riderLocationVo);
+                    if (DeletedEnum.NO.getValue().equals(res.getCode())) {
+                        String riderLat = res.getData().getLat().toString();
+                        String riderLng = res.getData().getLng().toString();
+                        locationVo.setShipperLat(riderLat);
+                        locationVo.setShipperLng(riderLng);
+                    }
+                }
+            } else if (DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())) {
+                if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
+                    RiderLocationVo orderQueryVo = new RiderLocationVo();
+                    orderQueryVo.setLbClient(DeliveryTypeEnums.MEI_TUAN.getName());
+                    // 美团订单号
+                    orderQueryVo.setOrderNo(order.getOutTradeNo());
+                    // 我们平台订单号
+                    orderQueryVo.setDeliveryId(order.getId());
+                    ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
+                    if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                        String riderLat = resObject.getData().getLat().toString();
+                        String riderLng = resObject.getData().getLng().toString();
+                        locationVo.setShipperLat(riderLat);
+                        locationVo.setShipperLng(riderLng);
+                    }
+                    OrderQueryVo orderQuery = new OrderQueryVo();
+                    orderQuery.setLbClient(DeliveryTypeEnums.MEI_TUAN.getName());
+                    // 美团订单号
+                    orderQuery.setOrderNo(order.getOutTradeNo());
+                    // 我们平台订单号
+                    orderQuery.setDeliveryId(order.getId());
+                    ResObject<OrderQueryResultVo> resObject1 = client.queryOrderInfo(orderQuery);
+                    if (DeletedEnum.NO.getValue().equals(resObject1.getCode())) {
+                        locationVo.setShipperName(resObject1.getData().getRiderName());
+                        locationVo.setShipperPhone(resObject1.getData().getRiderPhone());
+                    }
+                }
+            } else if (DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())) {
+                if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
+                    RiderLocationVo orderQueryVo = new RiderLocationVo();
+                    orderQueryVo.setLbClient(DeliveryTypeEnums.MEI_TUAN_ZB.getName());
+                    // 美团订单号
+                    orderQueryVo.setOrderNo(orderDelivery.getOutTradeNo());
+                    // token
+                    orderQueryVo.setAccessToken(orderDelivery.getZbToken());
+                    ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
+                    if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                        String riderLat = resObject.getData().getLat().toString();
+                        String riderLng = resObject.getData().getLng().toString();
+                        locationVo.setShipperLat(riderLat);
+                        locationVo.setShipperLng(riderLng);
+                    }
+                }
+            }
+            else if (DeliveryTypeEnums.SHAN_SONG.getType().equals(delivery.getType())&&orderDelivery!=null) {
+                OrderQueryVo orderQueryVo = new OrderQueryVo();
+                orderQueryVo.setLbClient(DeliveryTypeEnums.SHAN_SONG.getName());
+                orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
+                orderQueryVo.setIssOrderNo(order.getOutTradeNo());
+                if (orderDelivery.getIsMine() == 1){
+                    orderQueryVo.setIsShansongSH(true);
+                    ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
+
+                    if (shopDeliveryBind != null){
+                        orderQueryVo.setAccessToken(shopDeliveryBind.getAuthToken());
+                    }
+                }
+                if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
+                    ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
+                    if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                        if(resObject.getData().getRiderLat() != null){
+                            double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
+                            locationVo.setShipperLat(receiverGps[0] + "");
+                            locationVo.setShipperLng(receiverGps[1] + "");
+                            locationVo.setShipperName(resObject.getData().getRiderName());
+                            locationVo.setShipperPhone(resObject.getData().getRiderPhone());
+                        }
+                    }
+                }
+            }
+            else if (DeliveryTypeEnums.KUAI_FU.getType().equals(delivery.getType())&&orderDelivery!=null) {
+                OrderQueryVo orderQueryVo = new OrderQueryVo();
+                orderQueryVo.setLbClient(DeliveryTypeEnums.KUAI_FU.getName());
+                orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
+                orderQueryVo.setIssOrderNo(order.getOutTradeNo());
+                // 现在快服相关信息
+                orderQueryVo.setAccessToken(orderDelivery.getKfToken());
+                orderQueryVo.setKfOpenId(orderDelivery.getKfOpenId());
+                orderQueryVo.setIsMine(orderDelivery.getIsMine() );
+
+                if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
+                    ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
+                    if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                        if(resObject.getData().getRiderLat() != null){
+                            double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
+                            locationVo.setShipperLat(receiverGps[0] + "");
+                            locationVo.setShipperLng(receiverGps[1] + "");
+                            locationVo.setShipperName(resObject.getData().getRiderName());
+                            locationVo.setShipperPhone(resObject.getData().getRiderPhone());
+                        }
+                    }
+                }
+            }else if (DeliveryTypeEnums.HUO_LA_LA.getType().equals(delivery.getType())&&orderDelivery!=null){
+                OrderQueryVo orderQueryVo = new OrderQueryVo();
+                orderQueryVo.setLbClient(DeliveryTypeEnums.HUO_LA_LA.getName());
+                orderQueryVo.setIssOrderNo(orderDelivery.getOutTradeNo());
+                orderQueryVo.setAccessToken(delivery.getAuthToken());
+                ResObject<OrderQueryResultVo> orderInfo = client.queryOrderInfo(orderQueryVo);
+                if (orderInfo!=null) {
+                    locationVo.setShipperName(orderInfo.getData().getRiderName());
+                    locationVo.setShipperPhone(orderInfo.getData().getRiderPhone());
+                    List<HirtualPhoneInfo> list = orderInfo.getData().getHllPhones();
+                    if(!org.springframework.util.CollectionUtils.isEmpty(list)){
+                        for(HirtualPhoneInfo info:list ){
+                            if(info.getUser_phone_no().equals(order.getSendPhone())){
+                                locationVo.setShipperPhone(info.getConnect_phone_no());
+                            }
+                        }
+                    }else{
+                        String phone = client.bindVirtualPhone(delivery.getAuthToken(),orderDelivery.getOutTradeNo(),order.getSendPhone());
+                        locationVo.setShipperPhone(phone);
+                    }
+                    String riderLat = orderInfo.getData().getRiderLat().toString();
+                    String riderLng = orderInfo.getData().getRiderLng().toString();
+                    locationVo.setShipperLat(riderLat);
+                    locationVo.setShipperLng(riderLng);
+                }
+            } else if (DeliveryTypeEnums.SHUN_FENG.getType().equals(delivery.getType())) {
+                RiderLocationVo orderQueryVo = new RiderLocationVo();
+                orderQueryVo.setLbClient(DeliveryTypeEnums.SHUN_FENG.getName());
+                orderQueryVo.setOrderNo(order.getOutTradeNo());
+                orderQueryVo.setOrderType(1);
+                ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
+                if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                    if(resObject.getData().getLat() != null){
+                        String riderLat = resObject.getData().getLat().toString();
+                        String riderLng = resObject.getData().getLng().toString();
+                        locationVo.setShipperLat(riderLat);
+                        locationVo.setShipperLng(riderLng);
+                        locationVo.setShipperName(resObject.getData().getName());
+                        locationVo.setShipperPhone(resObject.getData().getPhone());
+                    }
+                }
+            } else if (DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType())) {
+                if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
+                    DspWaimai waiMai = iDspWaimaiService.findOne(WaimaiTypeEnums.MEI_TUAN.getType());
+                    ShopWaimai shopWaimai = iShopWaimaiService.findByToken(order.getShopId(), waiMai.getId(),orderDelivery.getZbToken());
+                    RiderLocationVo orderQueryVo = new RiderLocationVo();
+                    orderQueryVo.setLbClient(DeliveryTypeEnums.MEI_TUAN_SG_ZB.getName());
+                    // 美团订单号
+                    orderQueryVo.setOrderNo(orderDelivery.getOutTradeNo());
+                    // token
+                    orderQueryVo.setAccessToken(orderDelivery.getZbToken());
+                    orderQueryVo.setThirdShopId(shopWaimai.getThirdShopId());
+                    ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
+                    if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                        String riderLat = resObject.getData().getLat().toString();
+                        String riderLng = resObject.getData().getLng().toString();
+                        locationVo.setShipperLat(riderLat);
+                        locationVo.setShipperLng(riderLng);
+                    }
+                }
+            }else if (DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())&&orderDelivery!=null) {
+                if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
+                    OrderQueryVo orderQueryVo = new OrderQueryVo();
+                    orderQueryVo.setLbClient(DeliveryTypeEnums.FENG_NIAO_PT.getName());
+                    orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
+                    orderQueryVo.setAccessToken(delivery.getAuthToken());
+                    orderQueryVo.setMerchantId(delivery.getShopId());
+                    ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
+                    if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
+                        locationVo.setShipperName(resObject.getData().getRiderName());
+                        locationVo.setShipperPhone(resObject.getData().getRiderPhone());
+                    }
+                    RiderLocationVo riderLocationVo = new RiderLocationVo();
+                    riderLocationVo.setLbClient(DeliveryTypeEnums.FENG_NIAO_PT.getName());
+                    riderLocationVo.setOrderNo(orderDelivery.getChildOrderSn());
+                    riderLocationVo.setAccessToken(delivery.getAuthToken());
+                    riderLocationVo.setMerchantId(delivery.getShopId());
+                    ResObject<RiderLocationResultVo> res = client.getRiderLocation(riderLocationVo);
+                    if (DeletedEnum.NO.getValue().equals(res.getCode())) {
+                        String riderLat = res.getData().getLat().toString();
+                        String riderLng = res.getData().getLng().toString();
+                        locationVo.setShipperLat(riderLat);
+                        locationVo.setShipperLng(riderLng);
+                    }
+                }
+            }
+            return locationVo;
+    }
+
+    @Override
     public ResponseResult createOrder(OrderCreateReq orderCreateReq) {
         // 计价结果缓存到redis, 10分钟有效, 到时需重新计价
         if (!redisCache.hasKey(RedisKeyConstant.VALUATION_RESULT + orderCreateReq.getOutOrderSn())) {

+ 33 - 0
lb-app/src/main/java/com/ydd/app/vo/OrderLocationVo.java

@@ -0,0 +1,33 @@
+package com.ydd.app.vo;
+
+import lombok.Data;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/14 9:39
+ */
+@Data
+public class OrderLocationVo {
+
+    /**
+     * 骑手经度
+     */
+    private String shipperLng;
+
+    /**
+     * 骑手纬度
+     */
+    private String shipperLat;
+
+    /**
+     * 骑手姓名
+     */
+    private String shipperName;
+
+    /**
+     * 骑手电话
+     */
+    private String shipperPhone;
+}

+ 3 - 1
lb-common/src/main/java/com/ydd/common/enums/ResponseResultCodeEnum.java

@@ -31,9 +31,11 @@ public enum ResponseResultCodeEnum {
     MERCHANT_DISABLE(2005, "该商家已禁用"),
     MERCHANT_IS_AUDIT(2006, "请等待商家通过认证"),
     CATEGORY_NOT_EXIST(2007, "物品分类不存在"),
+    NO_DELIVERY(2008, "无可用发单运力"),
+    ORDER_NOT_EXIST(2009, "订单不存在"),
+    ORDER_STATUS_FAIL(2010, "订单状态异常"),
 
 
-    NO_DELIVERY(2020, "无可用发单运力"),
     VALUATION_ERR(2021, "计价失败"),
 
 

+ 2 - 0
lb-module/src/main/java/com/ydd/module/mapper/OrderMapper.java

@@ -154,5 +154,7 @@ public interface OrderMapper extends BaseMapper<Order> {
 
     Integer countPersonalOrder(@Param("lastDayTime") String lastDayTime, @Param("memberId") Long memberId);
 
+    Order selectOrderBySn(@Param("orderSn") String orderSn, @Param("outOrderSn") String outOrderSn);
+
 }
 

+ 8 - 0
lb-module/src/main/java/com/ydd/module/service/IOrderService.java

@@ -215,4 +215,12 @@ public interface IOrderService extends IService<Order> {
      */
     Integer countPersonalOrder(String lastDayTime, Long memberId);
 
+    /**
+     * 根据猎豹订单号和接入方订单编号查询订单
+     * @param orderSn 猎豹订单号
+     * @param outOrderSn 接入方订单编号
+     * @return
+     */
+    Order selectOrderBySn(String orderSn, String outOrderSn);
+
 }

+ 5 - 0
lb-module/src/main/java/com/ydd/module/service/impl/OrderServiceImpl.java

@@ -1469,4 +1469,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return baseMapper.countPersonalOrder(lastDayTime, memberId);
     }
 
+    @Override
+    public Order selectOrderBySn(String orderSn, String outOrderSn) {
+        return baseMapper.selectOrderBySn(orderSn, outOrderSn);
+    }
+
 }

+ 10 - 0
lb-module/src/main/resources/mapper/module/orderMapper.xml

@@ -2232,4 +2232,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND create_time >= #{lastDayTime};
     </select>
 
+    <select id="selectOrderBySn" resultType="com.ydd.module.domain.Order">
+        SELECT * FROM lb_order WHERE 1=1
+        <if test="orderSn != null and orderSn != ''">
+            AND order_sn LIKE concat('%', #{orderSn}, '%')
+        </if>
+        <if test="outOrderSn != null and outOrderSn != ''">
+            AND out_trade_no LIKE concat('%', #{outOrderSn}, '%')
+        </if>
+    </select>
+
 </mapper>

+ 4 - 0
lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/aipt/AiptClient.java

@@ -332,6 +332,10 @@ public class AiptClient implements ClientHandler {
             OrderQueryResultVo queryResultVo = new OrderQueryResultVo();
             String data = jsonObject.getString("data");
             JSONObject json = JSONObject.parseObject(data);
+            String receive = json.getString("receive");
+            queryResultVo.setRiderName(receive);
+            String receivePhone = json.getString("receive_phone");
+            queryResultVo.setRiderPhone(receivePhone);
             String gps = json.getString("gps");
             String[] array = gps.split(",");
             queryResultVo.setRiderLng(new BigDecimal(array[1]));