wlzboy
6 天以前 09e6dc3fb7266620fafb5e341808a8eb36e080a1
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package com.ruoyi.web.controller.system;
 
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.VehicleGpsSegmentMileage;
import com.ruoyi.system.mapper.VehicleGpsSegmentMileageMapper;
import com.ruoyi.system.service.IVehicleGpsSegmentMileageService;
import com.ruoyi.system.service.ISysConfigService;
 
/**
 * GPS分段里程Controller
 */
@RestController
@RequestMapping("/system/gpsSegment")
public class VehicleGpsSegmentMileageController extends BaseController {
    
    private static final Logger logger = LoggerFactory.getLogger(VehicleGpsSegmentMileageController.class);
    
    @Autowired
    private VehicleGpsSegmentMileageMapper segmentMileageMapper;
    
    @Autowired
    private IVehicleGpsSegmentMileageService segmentMileageService;
    
    @Autowired
    private ISysConfigService configService;
 
    /**
     * 查询GPS分段里程列表
     */
    @PreAuthorize("@ss.hasPermi('system:gpsSegment:list')")
    @GetMapping("/list")
    public TableDataInfo list(VehicleGpsSegmentMileage segmentMileage) {
        startPage();
        List<VehicleGpsSegmentMileage> list = segmentMileageMapper.selectVehicleGpsSegmentMileageList(segmentMileage);
        return getDataTable(list);
    }
 
    /**
     * 按任务ID查询GPS分段里程列表
     */
    @PreAuthorize("@ss.hasPermi('system:gpsSegment:query')")
    @GetMapping("/task/{taskId}")
    public AjaxResult getSegmentsByTask(@PathVariable("taskId") Long taskId) {
        try {
            List<VehicleGpsSegmentMileage> list = segmentMileageMapper.selectSegmentsByTaskId(taskId);
            return success(list);
        } catch (Exception e) {
            logger.error("查询任务GPS里程失败 - taskId: {}", taskId, e);
            return error("查询失败:" + e.getMessage());
        }
    }
 
    /**
     * 查询任务的总里程
     */
    @PreAuthorize("@ss.hasPermi('system:gpsSegment:query')")
    @GetMapping("/task/{taskId}/total")
    public AjaxResult getTaskTotalMileage(@PathVariable("taskId") Long taskId) {
        try {
            BigDecimal totalMileage = segmentMileageMapper.selectTotalMileageByTaskId(taskId);
            return success(totalMileage);
        } catch (Exception e) {
            logger.error("查询任务总里程失败 - taskId: {}", taskId, e);
            return error("查询失败:" + e.getMessage());
        }
    }
 
    /**
     * 查询车辆指定日期范围的GPS分段里程
     */
    @PreAuthorize("@ss.hasPermi('system:gpsSegment:query')")
    @GetMapping("/range")
    public AjaxResult getSegmentsByDateRange(
            @RequestParam("vehicleId") Long vehicleId,
            @RequestParam("startDate") String startDateStr,
            @RequestParam("endDate") String endDateStr) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date startDate = sdf.parse(startDateStr + " 00:00:00");
            Date endDate = sdf.parse(endDateStr + " 23:59:59");
            
            List<VehicleGpsSegmentMileage> list = segmentMileageMapper.selectSegmentsByDateRange(vehicleId, startDate, endDate);
            return success(list);
        } catch (Exception e) {
            logger.error("查询GPS分段里程失败 - vehicleId: {}, dateRange: {} - {}", 
                        vehicleId, startDateStr, endDateStr, e);
            return error("查询失败:" + e.getMessage());
        }
    }
    
    /**
     * 补偿计算:查找并计算未被处理的GPS数据
     * 用于服务重启后的数据修复
     */
    @PreAuthorize("@ss.hasPermi('system:gpsSegment:compensate')")
    @Log(title = "GPS里程补偿计算", businessType = BusinessType.OTHER)
    @PostMapping("/compensate")
    public AjaxResult compensateCalculation() {
        try {
            // 从配置中获取回溯天数,默认2天
            String lookbackDaysConfig = configService.selectConfigByKey("gps.mileage.compensate.lookback.days");
            int lookbackDays = lookbackDaysConfig != null ? Integer.parseInt(lookbackDaysConfig) : 2;
            
            logger.info("开始执行GPS里程补偿计算 - 回溯天数: {}", lookbackDays);
            
            int successCount = segmentMileageService.compensateCalculation(lookbackDays);
            
            return success("补偿计算完成,处理 " + successCount + " 辆车");
        } catch (Exception e) {
            logger.error("GPS里程补偿计算失败", e);
            return error("补偿计算失败:" + e.getMessage());
        }
    }
}