From 205ecdcba56836a14fdd83b41c65869900c936eb Mon Sep 17 00:00:00 2001
From: 彭雪彬 <1724387007@qq.com>
Date: Mon, 14 Jul 2025 18:23:05 +0800
Subject: [PATCH] 骑手接单

---
 oying-system/src/main/java/com/oying/modules/rider/service/RiderInfoService.java                 |    2 
 oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderRecordServiceImpl.java |   85 +++++++++++++++++++++++++++++++++++-------
 oying-system/src/main/java/com/oying/modules/rider/rest/WxRiderController.java                   |   14 ++++++
 oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderInfoServiceImpl.java        |    3 +
 4 files changed, 87 insertions(+), 17 deletions(-)

diff --git a/oying-system/src/main/java/com/oying/modules/rider/rest/WxRiderController.java b/oying-system/src/main/java/com/oying/modules/rider/rest/WxRiderController.java
index 89a1ecc..9def780 100644
--- a/oying-system/src/main/java/com/oying/modules/rider/rest/WxRiderController.java
+++ b/oying-system/src/main/java/com/oying/modules/rider/rest/WxRiderController.java
@@ -41,7 +41,7 @@
     @GetMapping("getRiderSourceInfo/{riderId}")
     @ApiOperation("查询第三方数据骑手信息")
     @PreAuthorize("@el.check('riderInfo:list')")
-    public ResponseEntity<?> getRiderSourceInfo(@PathVariable String riderId) {
+    public ResponseEntity<?> getRiderSourceInfo(@PathVariable Long riderId) {
         RiderInfo riderInfo = riderInfoService.getRiderSourceInfo(riderId);
         return ResponseEntity.ok(R.success(riderInfo));
     }
@@ -114,4 +114,16 @@
         return ResponseEntity.ok(R.success(result));
     }
 
+    // @GetMapping("riderCancelOrder/{orderNum}")
+    // @ApiOperation("骑手订单已送达")
+    // @PreAuthorize("@el.check('riderOrderRecord:list')")
+    // public ResponseEntity<?> riderCancelOrder(@PathVariable String orderNum) {
+    //     // 订单号不能为空
+    //     if (orderNum == null || orderNum.equals("")) {
+    //         return ResponseEntity.ok(R.fail(Constants.HTTP_CODE_FAIL, "订单号不能为空"));
+    //     }
+    //     R result = riderOrderRecordService.riderCancelOrder(orderNum);
+    //     return ResponseEntity.ok(R.success(result));
+    // }
+
 }
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/RiderInfoService.java b/oying-system/src/main/java/com/oying/modules/rider/service/RiderInfoService.java
index e4d1e96..4ab7577 100644
--- a/oying-system/src/main/java/com/oying/modules/rider/service/RiderInfoService.java
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/RiderInfoService.java
@@ -68,5 +68,5 @@
      * @return RiderInfo
      * @param riderId /
      */
-    RiderInfo getRiderSourceInfo(String riderId);
+    RiderInfo getRiderSourceInfo(Long riderId);
 }
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderInfoServiceImpl.java b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderInfoServiceImpl.java
index 490c1b3..26ed831 100644
--- a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderInfoServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderInfoServiceImpl.java
@@ -96,6 +96,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void syncRiderSourceInfo(String sourcePlatform) {
         Long riderId = SecurityUtils.getCurrentUserId();
         // 查询其他平台的数据
@@ -164,7 +165,7 @@
     }
 
     @Override
-    public RiderInfo getRiderSourceInfo(String riderId) {
+    public RiderInfo getRiderSourceInfo(Long riderId) {
         QueryWrapper<RiderInfo> riderInfoQueryWrapper = new QueryWrapper<>();
         riderInfoQueryWrapper.eq(RiderInfo.COL_RIDER_ID, riderId);
         return riderInfoMapper.selectOne(riderInfoQueryWrapper);
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderRecordServiceImpl.java b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderRecordServiceImpl.java
index ea3d97a..cbbf0cd 100644
--- a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderRecordServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderRecordServiceImpl.java
@@ -2,7 +2,15 @@
 
 import cn.hutool.core.lang.UUID;
 import com.oying.exception.BadRequestException;
+import com.oying.modules.pc.store.domain.Store;
+import com.oying.modules.pc.store.service.StoreService;
+import com.oying.modules.rider.domain.RiderInfo;
 import com.oying.modules.rider.domain.RiderOrderRecord;
+import com.oying.modules.rider.service.RiderInfoService;
+import com.oying.modules.sh.domain.OrderOperationLog;
+import com.oying.modules.sh.domain.vo.OrderResponse;
+import com.oying.modules.sh.service.OrderOperationLogService;
+import com.oying.modules.sh.service.OrderService;
 import com.oying.utils.*;
 import lombok.RequiredArgsConstructor;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -13,6 +21,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.sql.Timestamp;
 import java.util.List;
 import java.util.Map;
 import java.io.IOException;
@@ -21,24 +30,27 @@
 import java.util.LinkedHashMap;
 
 /**
-* @description 服务实现
-* @author pxb
-* @date 2025-07-01
-**/
+ * @author pxb
+ * @description 服务实现
+ * @date 2025-07-01
+ **/
 @Service
 @RequiredArgsConstructor
 public class RiderOrderRecordServiceImpl extends ServiceImpl<RiderOrderRecordMapper, RiderOrderRecord> implements RiderOrderRecordService {
 
     private final RiderOrderRecordMapper riderOrderRecordMapper;
     private final RedisUtils redisUtils;
+    private final OrderService orderService;
+    private final RiderInfoService riderInfoService;
+    private final StoreService storeService;
 
     @Override
-    public PageResult<RiderOrderRecord> queryAll(RiderOrderRecordQueryCriteria criteria, Page<Object> page){
+    public PageResult<RiderOrderRecord> queryAll(RiderOrderRecordQueryCriteria criteria, Page<Object> page) {
         return PageUtil.toPage(riderOrderRecordMapper.findAll(criteria, page));
     }
 
     @Override
-    public List<RiderOrderRecord> queryAll(RiderOrderRecordQueryCriteria criteria){
+    public List<RiderOrderRecord> queryAll(RiderOrderRecordQueryCriteria criteria) {
         return riderOrderRecordMapper.findAll(criteria);
     }
 
@@ -101,19 +113,25 @@
             // 获取分布式锁,设置超时时间10秒
             boolean isLocked = redisUtils.setIfAbsent(lockKey, clientId, 10);
             if (!isLocked) {
-                return R.fail(400, "请稍后重试");
+                return R.fail(400, "订单已经被其他骑手接单,请稍后重试");
             }
             // 查询当前订单 检查订单是否已经被其他骑手抢到或取消 直接返回
-
+            OrderResponse orderResponse = orderService.getByOrderNum(orderNum);
+            // 商家已接单 商家已备货 这两个状态可以接单
+            if (orderResponse == null || orderResponse.getOrder().getOrderStatus() != 2 || orderResponse.getOrder().getOrderStatus() != 4) {
+                return R.fail(400, "订单已经被其他骑手接单或顾客取消,请稍后重试");
+            }
             // 订单没有被接单或取消的情况下,进行接单操作
-            // 1.修改订单状态
-
+            // 查询骑手信息
+            Long riderId = SecurityUtils.getCurrentUserId();
+            RiderInfo riderInfo = riderInfoService.getRiderSourceInfo(riderId);
+            // 查询商家信息
+            Store store = storeService.getById(orderResponse.getOrder().getStoreId());
+            // 1.新增骑手接单记录
+            addRiderOrderRecord(riderInfo, orderResponse, store);
             // 2.新增订单接单流程信息
-
-            // 3.新增骑手端订单记录详情
-
             // 返回成功信息
-            return R.success(null, "接单成功");
+            return R.success(orderResponse, "接单成功");
         } catch (Exception e) {
             throw new BadRequestException("接单失败,请稍后重试");
         } finally {
@@ -127,9 +145,47 @@
         }
     }
 
+    /**
+     * 功能描述: <添加接单记录>
+     *
+     * @Date: 2025/7/14 17:48
+     */
+    public void addRiderOrderRecord(RiderInfo riderInfo, OrderResponse orderResponse, Store store) {
+        RiderOrderRecord riderOrderRecord = new RiderOrderRecord();
+        riderOrderRecord.setOrderId(orderResponse.getOrder().getOrderId());
+        riderOrderRecord.setOrderNum(orderResponse.getOrder().getOrderNum());
+        riderOrderRecord.setMerchantId(orderResponse.getOrder().getStoreId());
+        riderOrderRecord.setMerchantName(orderResponse.getOrder().getStoreName());
+        riderOrderRecord.setMerchantAddress(store.getAddress());
+        riderOrderRecord.setReceiverAddress(orderResponse.getAddress().getDetail());
+        // 当前为接单 设置为待取货状态 1-待取货 2-配送中 3-已完成 4-商家取消 5-骑手取消 6-客户取消 7-系统取消
+        riderOrderRecord.setOrderStatus("1");
+        riderOrderRecord.setAcceptTime(new Timestamp(System.currentTimeMillis()));
+        // 取单编号
+        riderOrderRecord.setAcceptNum(orderResponse.getOrder().getOrderStoreNum());
+        // 是否超时:1-是 0-否
+        riderOrderRecord.setIsOvertime("0");
+        // 订单来源: 1-平台派单 2-骑手抢单 3-商家直派 4-其他
+        riderOrderRecord.setOrderSource("3");
+        riderOrderRecord.setRiderId(riderInfo.getRiderId());
+        riderOrderRecord.setRiderName(riderInfo.getCardName());
+        riderOrderRecord.setPhone(riderInfo.getPhone());
+        riderOrderRecord.setUserId(orderResponse.getOrder().getUserId());
+        riderOrderRecord.setUserLongitude(String.valueOf(orderResponse.getAddress().getLongitude()));
+        riderOrderRecord.setUserLatitude(String.valueOf(orderResponse.getAddress().getLatitude()));
+        riderOrderRecord.setMerchantLongitude(String.valueOf(store.getLongitude()));
+        riderOrderRecord.setMerchantLatitude(String.valueOf(store.getLatitude()));
+        // 配送费详情Id
+        // riderOrderRecord.setDeliveryFeeId(orderResponse.getOrder().getDeliveryFeeId());
+        riderOrderRecord.setOrderIncome(orderResponse.getOrder().getSendPrice());
+        create(riderOrderRecord);
+    }
+
+
     @Override
     public R riderCancelOrder(String orderNum) {
         // 查询当前订单信息
+        OrderResponse orderResponse = orderService.getByOrderNum(orderNum);
         // 根据信息判断当前订单信息是否满足取消条件
         // 满足取消订单
         // 不满足取消订单条件,返回错误信息
@@ -137,4 +193,5 @@
         return null;
     }
 
+
 }

--
Gitblit v1.9.3