donglang 1 месяц назад
Родитель
Сommit
ba603b5856

+ 2 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java

@@ -335,6 +335,7 @@ public class KwfDriverService {
         //查询司机关联车辆信息
         KwfTruckReport truckReport = truckReportRepository.getOne(Wrappers.<KwfTruckReport>lambdaQuery()
                 .eq(BaseModel::getDelFlag, 0)
+                .eq(BaseModel::getStatus, 1)
                 .eq(KwfTruckReport::getDriverId, driverId)
                 .eq(KwfTruckReport::getEntId, entId));
         if (truckReport == null) {
@@ -1147,6 +1148,7 @@ public class KwfDriverService {
             newTruckReport.setTruckId(params.getTruckId());
             newTruckReport.setDriverId(params.getId());
             newTruckReport.setEntId(LoginUserHolder.getEntId());
+            newTruckReport.setStatus(Global.YES);
             boolean saveResult = truckReportRepository.save(newTruckReport);
             return saveResult ? HttpResult.ok("车辆绑定成功!") : HttpResult.error("车辆绑定失败!");
         } else {

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -274,11 +274,11 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
 
     public KwtWaybillOrder findOneByTruckNo(Long logOrderId, String truckNo, Long entId ) {
         return getOne(Wrappers.<KwtWaybillOrder>lambdaQuery()
-                .eq(KwtWaybillOrder::getDelFlag,0)
+                .eq(KwtWaybillOrder::getLOrderId,logOrderId)
                 .eq(KwtWaybillOrder::getTruckNo,truckNo)
                 .eq(KwtWaybillOrder::getEntId, entId)
+                .eq(KwtWaybillOrder::getDelFlag,0)
                 .eq(KwtWaybillOrder::getStatus, 1)
-                .orderByDesc(KwtWaybillOrder::getId)
                 .last("limit 1"));
     }
 }

+ 5 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -850,7 +850,7 @@ public class WaybillOrderService {
      */
     @Transactional(rollbackFor = Exception.class)
     public OrderTakingResp orderTaking(OrderCirculateTakingQueryParam param) {
-        // 1. 幂等性校验:检查是否已经存在该车辆针对该物流订单的有效运单
+        // 1. 幂等性校验
         checkIdempotent(param);
 
         // 2. 构建分布式锁Key(物流订单ID+车牌号 唯一标识)
@@ -869,11 +869,11 @@ public class WaybillOrderService {
             // 4. 再次幂等性校验(防止锁等待期间已经创建运单)
             checkIdempotent(param);
 
-            // 6. 执行核心接单逻辑
+            // 5. 执行接单
             return takingOrderHandler.handler(param);
 
         } finally {
-            // 7. 释放分布式锁(只有获取锁的请求才能释放)
+            // 6. 释放分布式锁
             if (lockAcquired) {
                 releaseLock(lockKey, requestId);
                 log.info("释放接单分布式锁成功,lockKey:{}, requestId:{}", lockKey, requestId);
@@ -886,7 +886,7 @@ public class WaybillOrderService {
      * @param param 接单参数
      */
     private void checkIdempotent(OrderCirculateTakingQueryParam param) {
-        // 查询该车辆针对该物流订单是否已有有效运单
+        // 查询该物流订单+车牌号+企业下是否已有接单状态运单
         KwtWaybillOrder existingOrder = waybillOrderRepository.findOneByTruckNo(param.getLogOrderId(), param.getTruckNo(), param.getEntId());
 
         if (existingOrder != null) {
@@ -908,7 +908,7 @@ public class WaybillOrderService {
     private boolean acquireLock(String lockKey, String requestId, long expireSeconds, long waitMillis) {
         long startTime = System.currentTimeMillis();
         while (System.currentTimeMillis() - startTime < waitMillis) {
-            // 使用SET NX EX命令获取锁(原子操作)
+            // 使用SET NX EX命令获取锁
             Boolean success = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, expireSeconds, TimeUnit.SECONDS);
             if (Boolean.TRUE.equals(success)) {
                 log.info("获取接单分布式锁成功,lockKey:{}, requestId:{}", lockKey, requestId);