wanglizhong
2025-05-14 f1ba120c486048373505acfa74c3943c19be55ca
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java
@@ -6,16 +6,13 @@
import java.util.List;
import java.util.stream.Collectors;
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;
@@ -42,7 +39,7 @@
        log.info("开始同步CMS车辆信息");
        try {
            // 获取CMS所有车辆信息
            CmsVehicleDeviceResponse response = cmsGpsCollectService.queryVehicleDevices();
            CmsVehicleDeviceListResponse response = cmsGpsCollectService.getDeviceByVehicle(null);
            if (response.getResult() != 0) {
                log.error("获取CMS车辆信息失败");
                return;
@@ -50,10 +47,10 @@
            // 获取所有CMS车辆的车牌号
            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,17 +67,29 @@
            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) {
            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);
                    syncCarCount++;
                }
            }
                else{
                    vehicleInfo.setVehicleNo(plateNo);
                    vehicleInfo.setDeviceId(vehicle.getDid());
                    vehicleInfo.setPlatformCode("CMS");
                    vehicleInfo.setStatus("0");
                    vehicleInfoService.updateVehicleInfo(vehicleInfo);
                }
            });
            log.info("成功同步{}个CMS车辆信息", syncCarCount);
@@ -138,12 +147,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);