该功能实现了任务与GPS里程的自动关联,可以在任务详情页面直接展示该任务执行期间的GPS行驶里程统计。
mysql -u root -p < sql/updates/add_task_id_to_segment_mileage.sql
<template>
<div>
<!-- 任务基本信息 -->
<el-card>
<!-- ... 任务详情内容 ... -->
</el-card>
<!-- GPS里程统计组件 -->
<task-mileage-detail :task-id="taskId" />
</div>
</template>
<script>
import TaskMileageDetail from '@/components/TaskMileageDetail'
export default {
components: {
TaskMileageDetail
},
data() {
return {
taskId: 123 // 任务ID
}
}
}
</script>
import { getTaskTotalMileage, getSegmentsByTaskId } from '@/api/system/gpsSegment'
// 查询任务总里程
getTaskTotalMileage(taskId).then(res => {
console.log('任务总里程:', res.data, 'km')
})
// 查询任务GPS分段明细
getSegmentsByTaskId(taskId).then(res => {
console.log('分段明细:', res.data)
})
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | Number/String | 是 | 任务ID |
接口地址: GET /system/gpsSegment/task/{taskId}
权限: system:gpsSegment:query
返回示例:json { "code": 200, "data": [ { "segmentId": 1, "vehicleId": 10, "vehicleNo": "粤A12345", "taskId": 100, "taskCode": "T20250115001", "segmentStartTime": "2025-01-15 10:00:00", "segmentEndTime": "2025-01-15 10:05:00", "segmentDistance": 2.5, "gpsPointCount": 5, "startLongitude": 113.264385, "startLatitude": 23.129112, "endLongitude": 113.280637, "endLatitude": 23.125178 } ] }
接口地址: GET /system/gpsSegment/task/{taskId}/total
权限: system:gpsSegment:query
返回示例:json { "code": 200, "data": 15.8 }
接口地址: GET /system/gpsSegment/range
参数:
- vehicleId: 车辆ID
- startDate: 开始日期 (格式: yyyy-MM-dd)
- endDate: 结束日期 (格式: yyyy-MM-dd)
graph LR
A[定时任务触发] --> B[计算GPS里程]
B --> C[查询车辆正在执行的任务]
C --> D{时间段是否重叠?}
D -->|是| E[关联task_id和task_code]
D -->|否| F[task_id为NULL]
E --> G[保存分段里程记录]
F --> G
G --> H[前端查询展示]
[segmentStartTime, segmentEndTime][actualStartTime, actualEndTime]segmentStartTime < taskEndTime && segmentEndTime > taskStartTimesystem:gpsSegment:query 权限idx_task_id, idx_vehicle_task