From 06a17c236d4cb9b8da75fce43af938cb7ea510bf Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期一, 15 十二月 2025 09:50:12 +0800
Subject: [PATCH] feat: 优化企业微信判断,优化gps分断处理
---
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java | 97 +++++++++++++++++++++++++++++++++++++-----------
1 files changed, 74 insertions(+), 23 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 e414f6a..b006eb5 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
@@ -6,16 +6,14 @@
import java.util.List;
import java.util.stream.Collectors;
+import com.ruoyi.common.utils.PlateNumberExtractor;
+import com.ruoyi.system.domain.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.system.domain.CmsVehicleDeviceResponse;
-import com.ruoyi.system.domain.CmsVehicleLocationResponse;
-import com.ruoyi.system.domain.VehicleGps;
-import com.ruoyi.system.domain.VehicleInfo;
import com.ruoyi.system.service.ICmsGpsCollectService;
import com.ruoyi.system.service.IVehicleGpsService;
import com.ruoyi.system.service.IVehicleInfoService;
@@ -39,10 +37,10 @@
private IVehicleGpsService vehicleGpsService;
public void syncVehicleInfo() {
- log.info("寮�濮嬪悓姝MS杞﹁締淇℃伅");
+// log.info("寮�濮嬪悓姝MS杞﹁締淇℃伅");
try {
// 鑾峰彇CMS鎵�鏈夎溅杈嗕俊鎭�
- CmsVehicleDeviceResponse response = cmsGpsCollectService.queryVehicleDevices();
+ CmsVehicleDeviceListResponse response = cmsGpsCollectService.getDeviceByVehicle(null);
if (response.getResult() != 0) {
log.error("鑾峰彇CMS杞﹁締淇℃伅澶辫触");
return;
@@ -50,10 +48,10 @@
// 鑾峰彇鎵�鏈塁MS杞﹁締鐨勮溅鐗屽彿
List<String> cmsPlateNos = new ArrayList<>();
- response.getVehicles().forEach(vehicle -> {
- if (StringUtils.isNotEmpty(vehicle.getNm())) {
+ response.getDevices().forEach(vehicle -> {
+ if (StringUtils.isNotEmpty(vehicle.getVid())) {
// 浠庤溅杈嗗悕绉颁腑鎻愬彇杞︾墝鍙凤紙鍋囪鏍煎紡涓�"鈽呰溅鐗屽彿锛堝湴鍖猴級"锛�
- String plateNo =this.getPlateNo(vehicle.getNm());
+ String plateNo =this.getPlateNo(vehicle.getVid());
cmsPlateNos.add(plateNo);
}
});
@@ -70,21 +68,67 @@
List<String> onlyCms=cmsPlateNos.stream().filter(e->!notCmsVehicles.contains(e)).collect((Collectors.toList()));
Integer syncCarCount=0;
- for(String e:onlyCms){
- VehicleInfo vehicleInfo = new VehicleInfo();
- vehicleInfo.setVehicleNo(e);
- vehicleInfo.setPlatformCode("CMS");
- vehicleInfo.setStatus("0");
- //濡傛灉杞﹁締涓嶅瓨鍦紝鍒欐彃鍏�
- if (vehicleInfoService.selectVehicleInfoList(vehicleInfo).size()==0) {
- vehicleInfoService.insertVehicleInfo(vehicleInfo);
- syncCarCount++;
+ 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());
+ // 缁х画澶勭悊涓嬩竴涓溅杈�
}
}
- log.info("鎴愬姛鍚屾{}涓狢MS杞﹁締淇℃伅", syncCarCount);
- log.info("CMS杞﹁締淇℃伅鍚屾瀹屾垚");
+
+
+// log.info("鎴愬姛鍚屾{}涓狢MS杞﹁締淇℃伅", syncCarCount);
+// log.info("CMS杞﹁締淇℃伅鍚屾瀹屾垚");
} catch (Exception e) {
log.error("鍚屾CMS杞﹁締淇℃伅寮傚父", e);
}
@@ -92,6 +136,7 @@
//瀵硅溅鐗屽鐞嗙殑閫氱敤鏂规硶
private String getPlateNo(String plateNo){
+
if (StringUtils.isNotEmpty(plateNo)) {
// 浠庤溅杈嗗悕绉颁腑鎻愬彇杞︾墝鍙凤紙鍋囪鏍煎紡涓�"鈽呰溅鐗屽彿锛堝湴鍖猴級"锛�
if(plateNo.contains("(")) {
@@ -100,14 +145,16 @@
plateNo = plateNo.replace("鈽�", "").replace("鈽�", "").split("锛�")[0];
}
}
- return plateNo;
+ //xxx绮SX120
+ plateNo = plateNo.replaceAll("[^a-zA-Z0-9]", "");
+ return PlateNumberExtractor.extractPlateNumber(plateNo);
}
/**
* 鍚屾CMS杞﹁締浣嶇疆淇℃伅
*/
public void syncVehicleLocation() {
- log.info("寮�濮嬪悓姝MS杞﹁締浣嶇疆淇℃伅");
+// log.info("寮�濮嬪悓姝MS杞﹁締浣嶇疆淇℃伅");
try {
//鍏堣幏寰楁湰鍦癈MS涓婄殑鎵�鏈塁MS杞﹁締
VehicleInfo query = new VehicleInfo();
@@ -138,12 +185,16 @@
if(f==null){
continue;
}
-
+ if(vehicle.getJd()==null||vehicle.getWd()==null){
+ continue;
+ }
// 鍒涘缓GPS璁板綍
VehicleGps gps = new VehicleGps();
gps.setVehicleId(f.getVehicleId());
gps.setDeviceId(null);
+
gps.setLongitude(vehicle.getJd()/1000000);
+
gps.setLatitude(vehicle.getWd()/1000000);
gps.setSpeed(defaultZero);
gps.setVehicleNo(plateNo);
--
Gitblit v1.9.1