wlzboy
2025-09-20 b62bc392f3c1658381107be1d5f737a3389e7f5f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package com.ruoyi.quartz.task;
 
import com.ruoyi.gps.service.IGpsCollectService;
import com.ruoyi.gps.service.IVehicleInfoService;
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.gps.domain.GpsDevice;
import com.ruoyi.gps.domain.GpsDeviceListResponse;
import com.ruoyi.gps.domain.GpsGroup;
import com.ruoyi.gps.domain.VehicleInfo;
 
/**
 * 车辆同步定时任务
 */
@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;
    }