From 364adbc9a93a396b74e154f910c2a0a72bfb1a0f Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 29 十一月 2025 22:10:41 +0800
Subject: [PATCH] feat: 更新车辆里程统计

---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java |   74 +++++++++++++++++++++++++++----------
 1 files changed, 54 insertions(+), 20 deletions(-)

diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java
index c5abe54..b55780a 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java
@@ -67,27 +67,61 @@
             List<String> onlyCms=cmsPlateNos.stream().filter(e->!notCmsVehicles.contains(e)).collect((Collectors.toList()));
 
             Integer syncCarCount=0;
-            response.getDevices().stream().filter(e->onlyCms.contains(this.getPlateNo(e.getVid()))).forEach(vehicle->{
-                String plateNo =this.getPlateNo(vehicle.getVid());
-
-                VehicleInfo vehicleInfo= vehicleInfoService.selectVehicleInfoByPlateNumber(plateNo);
-                if (vehicleInfo==null) {
-                    vehicleInfo = new VehicleInfo();
-                    vehicleInfo.setVehicleNo(plateNo);
-                    vehicleInfo.setDeviceId(vehicle.getDid());
-                    vehicleInfo.setPlatformCode("CMS");
-                    vehicleInfo.setStatus("0");
-                    vehicleInfoService.insertVehicleInfo(vehicleInfo);
+            for (CmsVehicleDeviceListResponse.CmsVehicleDevice vehicle : response.getDevices()) {
+                try {
+                    if (!onlyCms.contains(this.getPlateNo(vehicle.getVid()))) {
+                        continue;
+                    }
+                    
+                    String plateNo = this.getPlateNo(vehicle.getVid());
+                    
+                    // 浣跨敤閲嶈瘯鏈哄埗澶勭悊姝婚攣
+                    int maxRetries = 3;
+                    int retryCount = 0;
+                    boolean success = false;
+                    
+                    while (!success && retryCount < maxRetries) {
+                        try {
+                            // 鏌ヨ杞﹁締淇℃伅锛堜娇鐢ㄧ簿纭尮閰嶏級
+                            VehicleInfo vehicleInfo = vehicleInfoService.selectVehicleInfoByPlateNumber(plateNo);
+                            if (vehicleInfo == null) {
+                                // 鏂板杞﹁締
+                                vehicleInfo = new VehicleInfo();
+                                vehicleInfo.setVehicleNo(plateNo);
+                                vehicleInfo.setDeviceId(vehicle.getDid());
+                                vehicleInfo.setPlatformCode("CMS");
+                                vehicleInfo.setStatus("0");
+                                vehicleInfoService.insertVehicleInfo(vehicleInfo);
+                                syncCarCount++;
+                                log.info("鏂板CMS杞﹁締: {}", plateNo);
+                            } else {
+                                // 鏇存柊杞﹁締 - 浠呮洿鏂板繀瑕佸瓧娈�,閬垮厤瑙﹀彂鍏宠仈琛ㄦ搷浣�
+                                vehicleInfo.setDeviceId(vehicle.getDid());
+                                vehicleInfo.setPlatformCode("CMS");
+                                vehicleInfo.setStatus("0");
+                                vehicleInfo.setDeptIds(null); // 涓嶆洿鏂伴儴闂ㄥ叧鑱�,閬垮厤姝婚攣
+                                vehicleInfoService.updateVehicleInfo(vehicleInfo);
+                                syncCarCount++;
+                                log.debug("鏇存柊CMS杞﹁締: {}", plateNo);
+                            }
+                            success = true;
+                        } catch (org.springframework.dao.DeadlockLoserDataAccessException e) {
+                            retryCount++;
+                            if (retryCount < maxRetries) {
+                                log.warn("鍚屾杞﹁締 {} 閬囧埌姝婚攣,绗瑊}娆¢噸璇�", plateNo, retryCount);
+                                // 闅忔満绛夊緟50-200ms鍚庨噸璇�,閬垮厤澶氫釜绾跨▼鍚屾椂閲嶈瘯
+                                Thread.sleep(50 + (long)(Math.random() * 150));
+                            } else {
+                                log.error("鍚屾杞﹁締 {} 澶辫触: 姝婚攣閲嶈瘯{}娆″悗浠嶅け璐�", plateNo, maxRetries);
+                                throw e;
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+                    log.error("鍚屾杞﹁締 {} 澶辫触: {}", vehicle.getVid(), e.getMessage());
+                    // 缁х画澶勭悊涓嬩竴涓溅杈�
                 }
-                else{
-                    vehicleInfo.setVehicleNo(plateNo);
-                    vehicleInfo.setDeviceId(vehicle.getDid());
-                    vehicleInfo.setPlatformCode("CMS");
-                    vehicleInfo.setStatus("0");
-                    vehicleInfoService.updateVehicleInfo(vehicleInfo);
-                }
-
-            });
+            }
 
 
 

--
Gitblit v1.9.1