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/impl/RiderOrderRecordServiceImpl.java |   85 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 71 insertions(+), 14 deletions(-)

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