package com.ruoyi.quartz.task; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.system.domain.GpsDevice; import com.ruoyi.system.domain.GpsDeviceListResponse; import com.ruoyi.system.domain.GpsGroup; import com.ruoyi.system.domain.VehicleInfo; import com.ruoyi.system.service.IGpsCollectService; import com.ruoyi.system.service.IVehicleInfoService; /** * 车辆同步定时任务 */ @Component("vehicleSyncTask") public class VehicleSyncTask { private static final Logger log = LoggerFactory.getLogger(VehicleSyncTask.class); @Autowired private IGpsCollectService gpsCollectService; @Autowired private IVehicleInfoService vehicleInfoService; /** * 同步车辆信息 */ public void syncVehicleInfo() { try { log.info("开始同步车辆信息..."); // 获取设备列表,这会自动更新车辆信息中的设备ID GpsDeviceListResponse response = gpsCollectService.getDeviceList(); // 更新车辆设备ID updateVehicleDeviceIds(response); log.info("车辆信息同步完成"); } catch (Exception e) { log.error("车辆信息同步失败: {}", e.getMessage()); } } /** * 更新车辆设备ID */ private void updateVehicleDeviceIds(GpsDeviceListResponse response) { if (response.getStatus() != 0 || response.getGroups() == null) { return; } for (GpsGroup group : response.getGroups()) { for (GpsDevice device : group.getDevices()) { String deviceName = device.getDevicename(); String remark = device.getRemark(); String deviceId = device.getDeviceid(); if (StringUtils.isNotEmpty(deviceName) || StringUtils.isNotEmpty(remark)) { String plateNumber = extractPlateNumber(deviceName, remark); if (StringUtils.isNotEmpty(plateNumber)) { VehicleInfo vehicleInfo = vehicleInfoService.selectVehicleInfoByPlateNumber(plateNumber); if (vehicleInfo != null) { vehicleInfo.setDeviceId(deviceId); vehicleInfo.setPlatformCode("GPS51"); vehicleInfoService.updateVehicleInfo(vehicleInfo); } else { VehicleInfo newVehicle = new VehicleInfo(); newVehicle.setVehicleNo(plateNumber); newVehicle.setDeviceId(deviceId); newVehicle.setStatus("0"); newVehicle.setPlatformCode("GPS51"); vehicleInfoService.insertVehicleInfo(newVehicle); } } } } } } /** * 从设备名称和备注中提取车牌号 */ private String extractPlateNumber(String deviceName, String remark) { if (StringUtils.isNotEmpty(deviceName)) { return deviceName; } if (StringUtils.isNotEmpty(remark)) { return remark; } return null; } }