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());
|
}
|
}
|
}
|