From e1dcb45e0b7c80eedaf2bb0e5616bc752b60dd28 Mon Sep 17 00:00:00 2001
From: xiao-fajia <1665375861@qq.com>
Date: Tue, 27 Aug 2024 11:11:40 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A1=A5=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../impl/RescueOrderInfoServiceImpl.java      | 39 +++++++++++++++----
 1 file changed, 32 insertions(+), 7 deletions(-)

diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java
index 25107ef4..3e668959 100644
--- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java
+++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java
@@ -22,12 +22,12 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.nio.charset.StandardCharsets;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
 
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0;
 import static cn.iocoder.yudao.module.rescue.service.impl.RescueDriverInfoServiceImpl.getRandomString6;
 
 
@@ -158,7 +158,7 @@ public class RescueOrderInfoServiceImpl extends ServiceImpl<RescueOrderInfoMappe
 //            }
 //        }
         //待支付的情况下进行主动查询
-        orderInfo.setOrderNo("appJy" + "-" + System.currentTimeMillis() + "-" + getRandomString6());
+        orderInfo.setOrderNo("appJy" + "-" + System.currentTimeMillis() + "-" + getRandomString6() + "-" + rescueInfo.getId());
         this.updateById(orderInfo);
         RescueOrderDetail rescueOrderDetail =new RescueOrderDetail();
         rescueOrderDetail.setRecordTime(new Date());
@@ -178,6 +178,30 @@ public class RescueOrderInfoServiceImpl extends ServiceImpl<RescueOrderInfoMappe
         return one;
     }
 
+    /**
+     * 通过rescue_info_id去拿订单
+     * @author 小李
+     * @date 10:56 2024/8/27
+     * @param rescueInfoId
+    **/
+    private RescueOrderInfo getOrderByRescueInfoId(Integer rescueInfoId){
+        /*
+        不确定是否会出现多条记录的情况,所以用创建订单时的时间降序去取最新的一条
+         */
+        List<RescueOrderInfo> list = this.list(new LambdaQueryWrapper<RescueOrderInfo>().eq(RescueOrderInfo::getRescueInfoId, rescueInfoId));
+        // 没查到直接抛异常,理论上讲是不会抛的,但以防万一,抛了好过直接报错
+        if (ObjectUtils.isEmpty(list) || CollectionUtil.isEmpty(list)){
+            throw exception0(500, "系统故障");
+        }
+        // 如果只有一条,就用这一条
+        if (list.size() == 1){
+            return list.get(0);
+        }
+        // 多条就创建时间降序排序取第一条
+        List<RescueOrderInfo> result = list.stream().sorted(Comparator.comparing(RescueOrderInfo::getCreateTime).reversed()).collect(Collectors.toList());
+        return result.get(0);
+    }
+
 
     public Map<String,Object> transactions(Long orderId){
         RescueOrderInfo orderInfo = this.getById(orderId);
@@ -216,9 +240,10 @@ public class RescueOrderInfoServiceImpl extends ServiceImpl<RescueOrderInfoMappe
             JSONObject decryptDataObj = JSONObject.parseObject(decryptData, JSONObject.class);
             if(lock.tryLock()) {
                 try {
-                    // 解密resource中的通知数据
+                    // 解密resource中的通知数据 TODO
                     String orderNo = decryptDataObj.get("out_trade_no").toString();
-                    RescueOrderInfo orderInfo = this.getOrderByOrderNo(orderNo);
+                    String rescueInfoId = orderNo.split("-")[orderNo.split("-").length - 1];
+                    RescueOrderInfo orderInfo = getOrderByRescueInfoId(Integer.parseInt(rescueInfoId));
                     if (orderInfo.getOrderStatus().equals("1")){
                         RescueInfo rescueInfo = rescueInfoService.getById(orderInfo.getRescueInfoId());
                         DriverInfo driverInfo = driverInfoService.getById(rescueInfo.getDriverId());