From 310633feef20e9b77d44fd25e0b41778e033b33b Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期二, 11 十一月 2025 21:48:46 +0800
Subject: [PATCH] feat: 车辆GPS统计,并修改了一些变更任务状态的逻辑
---
sql/车辆里程统计实现总结.md | 0
app/api/task.js | 8 ++
sql/vehicle_mileage_stats_job.sql | 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java | 10 +++
ruoyi-system/src/main/resources/mapper/system/VehicleMileageStatsMapper.xml | 0
sql/vehicle_mileage_stats.sql | 0
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleMileageStatsTask.java | 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java | 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleMileageStatsService.java | 0
sql/车辆里程统计使用说明.md | 0
app/pages/task/create-emergency.vue | 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java | 12 ++++
sql/vehicle_mileage_stats_menu.sql | 0
app/api/mileageStats.js | 0
ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml | 13 ++++
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskMapper.java | 9 +++
ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleMileageStatsMapper.java | 0
ruoyi-common/src/main/java/com/ruoyi/common/config/TiandituMapConfig.java | 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/TaskTimeInterval.java | 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java | 9 +++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleMileageStatsController.java | 0
app/pages/task/detail.vue | 83 ++++++++++++++++++++++++++-
ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleMileageStats.java | 0
23 files changed, 141 insertions(+), 4 deletions(-)
diff --git a/app/api/mileageStats.js b/app/api/mileageStats.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/app/api/mileageStats.js
diff --git a/app/api/task.js b/app/api/task.js
index f43e912..3121d97 100644
--- a/app/api/task.js
+++ b/app/api/task.js
@@ -141,3 +141,11 @@
method: 'get'
})
}
+
+// 妫�鏌ヨ溅杈嗘槸鍚︽湁姝e湪杩涜涓殑浠诲姟
+export function checkVehicleActiveTasks(vehicleId) {
+ return request({
+ url: '/task/vehicle/' + vehicleId + '/active',
+ method: 'get'
+ })
+}
diff --git a/app/pages/task/create-emergency.vue b/app/pages/task/create-emergency.vue
index a5876c9..8154fcb 100644
--- a/app/pages/task/create-emergency.vue
+++ b/app/pages/task/create-emergency.vue
@@ -511,6 +511,7 @@
import { listBranchUsers } from "@/api/system/user"
import { searchIcd10 } from "@/api/icd10"
import { calculateTransferPrice } from "@/api/price"
+import { checkVehicleActiveTasks } from "@/api/task"
import { getDicts } from "@/api/dict"
import { getServiceOrdAreaTypes, getServiceOrderTypes, getHospitalDepartments } from "@/api/dictionary"
diff --git a/app/pages/task/detail.vue b/app/pages/task/detail.vue
index fa10be3..e28d9e9 100644
--- a/app/pages/task/detail.vue
+++ b/app/pages/task/detail.vue
@@ -328,6 +328,7 @@
<script>
import { getTask, changeTaskStatus } from '@/api/task'
+ import { checkVehicleActiveTasks } from '@/api/task'
import { formatDateTime } from '@/utils/common'
import AttachmentUpload from '@/components/AttachmentUpload.vue'
@@ -504,10 +505,8 @@
handleTaskAction(action) {
switch (action) {
case 'depart':
- // 鍑哄彂 -> 鐘舵�佸彉涓哄嚭鍙戜腑
- this.$modal.confirm('纭畾瑕佸嚭鍙戝悧锛�').then(() => {
- this.updateTaskStatus('DEPARTING', '浠诲姟宸插嚭鍙�')
- }).catch(() => {});
+ // 鍑哄彂 -> 妫�鏌ヨ溅杈嗘槸鍚︽湁鍏朵粬姝e湪杩涜涓殑浠诲姟
+ this.checkVehicleAndDepart();
break;
case 'cancel':
@@ -547,6 +546,82 @@
}
},
+ // 妫�鏌ヨ溅杈嗙姸鎬佸苟鍑哄彂
+ checkVehicleAndDepart() {
+ // 鑾峰彇浠诲姟杞﹁締ID
+ const vehicleId = this.getVehicleId();
+ if (!vehicleId) {
+ this.$modal.showToast('鏈壘鍒颁换鍔¤溅杈嗕俊鎭�');
+ return;
+ }
+
+ // 鏄剧ず鍔犺浇鎻愮ず
+ uni.showLoading({
+ title: '妫�鏌ヨ溅杈嗙姸鎬�...'
+ });
+
+ checkVehicleActiveTasks(vehicleId).then(response => {
+ uni.hideLoading();
+
+ const activeTasks = response.data || [];
+
+ // 杩囨护鎺夊綋鍓嶄换鍔℃湰韬�
+ const otherActiveTasks = activeTasks.filter(task => task.taskId !== this.taskId);
+
+ if (otherActiveTasks.length > 0) {
+ // 杞﹁締鏈夊叾浠栨鍦ㄨ繘琛屼腑鐨勪换鍔�
+ const task = otherActiveTasks[0];
+ const taskStatus = this.getStatusText(task.taskStatus);
+ const message = `璇ヨ溅杈嗗凡鏈夋鍦ㄨ浆杩愪腑鐨勪换鍔★紒
+
+浠诲姟鍗曞彿锛�${task.taskCode}
+浠诲姟鐘舵�侊細${taskStatus}
+
+璇峰厛瀹屾垚褰撳墠浠诲姟鍚庡啀鍑哄彂鏂颁换鍔°�俙;
+
+ uni.showModal({
+ title: '鎻愮ず',
+ content: message,
+ showCancel: false,
+ confirmText: '鎴戠煡閬撲簡'
+ });
+ return;
+ }
+
+ // 杞﹁締娌℃湁鍏朵粬姝e湪杩涜涓殑浠诲姟锛屽彲浠ュ嚭鍙�
+ this.$modal.confirm('纭畾瑕佸嚭鍙戝悧锛�').then(() => {
+ this.updateTaskStatus('DEPARTING', '浠诲姟宸插嚭鍙�')
+ }).catch(() => {});
+
+ }).catch(error => {
+ uni.hideLoading();
+ console.error('妫�鏌ヨ溅杈嗙姸鎬佸け璐�:', error);
+ // 妫�鏌ュけ璐ユ椂锛屼粛鐒跺厑璁稿嚭鍙�
+ this.$modal.confirm('妫�鏌ヨ溅杈嗙姸鎬佸け璐ワ紝鏄惁缁х画鍑哄彂锛�').then(() => {
+ this.updateTaskStatus('DEPARTING', '浠诲姟宸插嚭鍙�')
+ }).catch(() => {});
+ });
+ },
+
+ // 鑾峰彇浠诲姟杞﹁締ID
+ getVehicleId() {
+ if (!this.taskDetail) {
+ return null;
+ }
+
+ // 浠庤溅杈嗗垪琛ㄤ腑鑾峰彇绗竴涓溅杈嗙殑ID
+ if (this.taskDetail.vehicleList && this.taskDetail.vehicleList.length > 0) {
+ return this.taskDetail.vehicleList[0].vehicleId;
+ }
+
+ // 鎴栬�呬粠鍗曚釜杞﹁締瀵硅薄鑾峰彇
+ if (this.taskDetail.vehicleId) {
+ return this.taskDetail.vehicleId;
+ }
+
+ return null;
+ },
+
// 鏇存柊浠诲姟鐘舵��
updateTaskStatus(status, remark) {
// 鑾峰彇GPS浣嶇疆淇℃伅
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleMileageStatsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleMileageStatsController.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleMileageStatsController.java
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java
index e9b439b..e1d9527 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java
@@ -280,6 +280,16 @@
}
/**
+ * 妫�鏌ヨ溅杈嗘槸鍚︽湁姝e湪杩涜涓殑浠诲姟锛圓PP绔級
+ * 姝e湪杩涜涓殑浠诲姟鏄寚鐘舵�佷笉涓猴細PENDING锛堝緟澶勭悊锛夈�丆OMPLETED锛堝凡瀹屾垚锛夈�丆ANCELLED锛堝凡鍙栨秷锛夌殑浠诲姟
+ */
+ @GetMapping("/vehicle/{vehicleId}/active")
+ public AjaxResult checkVehicleActiveTasks(@PathVariable Long vehicleId) {
+ List<SysTask> activeTasks = sysTaskService.checkVehicleActiveTasks(vehicleId);
+ return success(activeTasks);
+ }
+
+ /**
* 鍒嗛厤浠诲姟璇锋眰瀵硅薄
*/
public static class AssignTaskRequest {
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/TiandituMapConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/TiandituMapConfig.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/TiandituMapConfig.java
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleMileageStatsTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleMileageStatsTask.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleMileageStatsTask.java
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TaskTimeInterval.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TaskTimeInterval.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TaskTimeInterval.java
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleMileageStats.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleMileageStats.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleMileageStats.java
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskMapper.java
index 4c703c0..a356c6a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskMapper.java
@@ -114,4 +114,13 @@
* @return 缁撴灉
*/
public int assignTask(SysTask sysTask);
+
+ /**
+ * 鏌ヨ杞﹁締姝e湪杩涜涓殑浠诲姟
+ * 姝e湪杩涜涓殑浠诲姟鏄寚鐘舵�佷笉涓猴細PENDING锛堝緟澶勭悊锛夈�丆OMPLETED锛堝凡瀹屾垚锛夈�丆ANCELLED锛堝凡鍙栨秷锛夌殑浠诲姟
+ *
+ * @param vehicleId 杞﹁締ID
+ * @return 姝e湪杩涜涓殑浠诲姟鍒楄〃
+ */
+ public List<SysTask> selectActiveTasksByVehicleId(Long vehicleId);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleMileageStatsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleMileageStatsMapper.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleMileageStatsMapper.java
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java
index 7de29d3..a5cdf19 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java
@@ -205,4 +205,13 @@
* @return 浠诲姟璇︽儏
*/
public SysTask getTaskDetail(Long taskId);
+
+ /**
+ * 妫�鏌ヨ溅杈嗘槸鍚︽湁姝e湪杩涜涓殑浠诲姟
+ * 姝e湪杩涜涓殑浠诲姟鏄寚鐘舵�佷笉涓猴細PENDING锛堝緟澶勭悊锛夈�丆OMPLETED锛堝凡瀹屾垚锛夈�丆ANCELLED锛堝凡鍙栨秷锛夌殑浠诲姟
+ *
+ * @param vehicleId 杞﹁締ID
+ * @return 姝e湪杩涜涓殑浠诲姟鍒楄〃
+ */
+ public List<SysTask> checkVehicleActiveTasks(Long vehicleId);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleMileageStatsService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleMileageStatsService.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleMileageStatsService.java
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
index 508eb71..796b509 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
@@ -961,6 +961,18 @@
return task;
}
+ /**
+ * 妫�鏌ヨ溅杈嗘槸鍚︽湁姝e湪杩涜涓殑浠诲姟
+ * 姝e湪杩涜涓殑浠诲姟鏄寚鐘舵�佷笉涓猴細PENDING锛堝緟澶勭悊锛夈�丆OMPLETED锛堝凡瀹屾垚锛夈�丆ANCELLED锛堝凡鍙栨秷锛夌殑浠诲姟
+ *
+ * @param vehicleId 杞﹁締ID
+ * @return 姝e湪杩涜涓殑浠诲姟鍒楄〃
+ */
+ @Override
+ public List<SysTask> checkVehicleActiveTasks(Long vehicleId) {
+ return sysTaskMapper.selectActiveTasksByVehicleId(vehicleId);
+ }
+
@Autowired
private TaskCodeGenerator taskCodeGenerator;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml
index 9a21d7b..338d8e2 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml
@@ -268,6 +268,19 @@
where task_id = #{taskId}
</update>
+ <select id="selectActiveTasksByVehicleId" parameterType="Long" resultMap="SysTaskResult">
+ select t.task_id, t.task_code, t.task_type, t.task_status, t.task_description,
+ t.departure_address, t.destination_address,
+ t.planned_start_time, t.actual_start_time,
+ t.create_time, t.update_time
+ from sys_task t
+ inner join sys_task_vehicle tv on t.task_id = tv.task_id
+ where tv.vehicle_id = #{vehicleId}
+ and t.del_flag = '0'
+ and t.task_status not in ('PENDING', 'COMPLETED', 'CANCELLED')
+ order by t.create_time desc
+ </select>
+
<delete id="deleteSysTaskByTaskId" parameterType="Long">
update sys_task set del_flag = '2', update_time = now() where task_id = #{taskId}
</delete>
diff --git a/ruoyi-system/src/main/resources/mapper/system/VehicleMileageStatsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/VehicleMileageStatsMapper.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/VehicleMileageStatsMapper.xml
diff --git a/sql/vehicle_mileage_stats.sql b/sql/vehicle_mileage_stats.sql
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sql/vehicle_mileage_stats.sql
diff --git a/sql/vehicle_mileage_stats_job.sql b/sql/vehicle_mileage_stats_job.sql
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sql/vehicle_mileage_stats_job.sql
diff --git a/sql/vehicle_mileage_stats_menu.sql b/sql/vehicle_mileage_stats_menu.sql
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sql/vehicle_mileage_stats_menu.sql
diff --git "a/sql/\350\275\246\350\276\206\351\207\214\347\250\213\347\273\237\350\256\241\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/sql/\350\275\246\350\276\206\351\207\214\347\250\213\347\273\237\350\256\241\344\275\277\347\224\250\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ "b/sql/\350\275\246\350\276\206\351\207\214\347\250\213\347\273\237\350\256\241\344\275\277\347\224\250\350\257\264\346\230\216.md"
diff --git "a/sql/\350\275\246\350\276\206\351\207\214\347\250\213\347\273\237\350\256\241\345\256\236\347\216\260\346\200\273\347\273\223.md" "b/sql/\350\275\246\350\276\206\351\207\214\347\250\213\347\273\237\350\256\241\345\256\236\347\216\260\346\200\273\347\273\223.md"
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ "b/sql/\350\275\246\350\276\206\351\207\214\347\250\213\347\273\237\350\256\241\345\256\236\347\216\260\346\200\273\347\273\223.md"
--
Gitblit v1.9.1