From c6e38b6c66de5f5a8df5b8b2ab03a82c3b605db8 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期三, 03 十二月 2025 00:48:44 +0800
Subject: [PATCH] feat:优化同步

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java |  292 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 259 insertions(+), 33 deletions(-)

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 25cb9ec..30081ad 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
@@ -11,18 +11,22 @@
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 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.enums.BusinessType;
 import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskLog;
+import com.ruoyi.system.domain.VehicleInfo;
 import com.ruoyi.system.domain.vo.TaskQueryVO;
 import com.ruoyi.system.domain.vo.TaskCreateVO;
 import com.ruoyi.system.domain.vo.TaskUpdateVO;
 import com.ruoyi.system.domain.vo.TaskStatisticsVO;
 import com.ruoyi.system.domain.enums.TaskStatus;
 import com.ruoyi.system.service.ISysTaskService;
+import com.ruoyi.system.service.IVehicleInfoService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
 
@@ -38,24 +42,51 @@
     
     @Autowired
     private ISysTaskService sysTaskService;
+    
+    @Autowired
+    private IVehicleInfoService vehicleInfoService;
 
     /**
-     * 鏌ヨ浠诲姟绠$悊鍒楄〃
+     * 鏌ヨ浠诲姟绠$悊鍒楄〃锛堝悗鍙扮鐞嗙锛�
+     * 绠$悊鍛樻潈闄愶紝鍙互鏌ョ湅鎵�鏈変换鍔�
      */
     @PreAuthorize("@ss.hasPermi('task:general:query')")
-    @GetMapping("/list")
-    public TableDataInfo list(TaskQueryVO queryVO) {
+    @GetMapping("/admin/list")
+    public TableDataInfo adminList(TaskQueryVO queryVO) {
         startPage();
         List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
         return getDataTable(list);
     }
 
     /**
-     * 瀵煎嚭浠诲姟绠$悊鍒楄〃
+     * 鏌ヨ浠诲姟鍒楄〃锛圓PP绔級
+     * 浠呮樉绀哄綋鍓嶇敤鎴风浉鍏崇殑浠诲姟锛�
+     * 1. 褰撳墠鐢ㄦ埛鎵�鍦ㄦ満鏋勭殑浠诲姟
+     * 2. 褰撳墠鐢ㄦ埛鍒涘缓鐨勪换鍔�
+     * 3. 鍒嗛厤缁欏綋鍓嶇敤鎴风殑浠诲姟
+     */
+    @GetMapping("/list")
+    public TableDataInfo appList(TaskQueryVO queryVO) {
+        // 鍦ㄥ悗绔嚜鍔ㄨ幏鍙栧綋鍓嶇敤鎴蜂俊鎭紝瀹炵幇缁煎悎鏌ヨ
+        Long currentUserId = getUserId();
+        Long currentDeptId = getDeptId();
+        
+        // APP绔己鍒朵娇鐢ㄥ綋鍓嶇櫥褰曠敤鎴蜂俊鎭繘琛岃繃婊�
+        queryVO.setDeptId(currentDeptId);
+        queryVO.setCreatorId(currentUserId);
+        queryVO.setAssigneeId(currentUserId);
+        
+        startPage();
+        List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭浠诲姟绠$悊鍒楄〃锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:export')")
     @Log(title = "浠诲姟绠$悊", businessType = BusinessType.EXPORT)
-    @PostMapping("/export")
+    @PostMapping("/admin/export")
     public void export(HttpServletResponse response, TaskQueryVO queryVO) {
         List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
         ExcelUtil<SysTask> util = new ExcelUtil<SysTask>(SysTask.class);
@@ -63,61 +94,105 @@
     }
 
     /**
-     * 鑾峰彇浠诲姟绠$悊璇︾粏淇℃伅
+     * 鑾峰彇浠诲姟璇︾粏淇℃伅锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:query')")
-    @GetMapping(value = "/{taskId}")
-    public AjaxResult getInfo(@PathVariable("taskId") Long taskId) {
+    @GetMapping(value = "/admin/{taskId}")
+    public AjaxResult adminGetInfo(@PathVariable("taskId") Long taskId) {
         return success(sysTaskService.getTaskDetail(taskId));
     }
 
     /**
-     * 鏂板浠诲姟绠$悊
+     * 鑾峰彇浠诲姟璇︾粏淇℃伅锛圓PP绔級
+     */
+    @GetMapping(value = "/{taskId}")
+    public AjaxResult appGetInfo(@PathVariable("taskId") Long taskId) {
+        return success(sysTaskService.getTaskDetail(taskId));
+    }
+
+    /**
+     * 鏂板浠诲姟锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:add')")
     @Log(title = "浠诲姟绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody TaskCreateVO createVO) {
+    @PostMapping("/admin")
+    public AjaxResult adminAdd(@RequestBody TaskCreateVO createVO) {
         return toAjax(sysTaskService.insertSysTask(createVO));
     }
 
     /**
-     * 淇敼浠诲姟绠$悊
+     * 鏂板浠诲姟锛圓PP绔級
      */
-    @PreAuthorize("@ss.hasPermi('task:general:edit')")
-    @Log(title = "浠诲姟绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody TaskUpdateVO updateVO) {
-        return toAjax(sysTaskService.updateSysTask(updateVO));
+    @Log(title = "浠诲姟鍒涘缓", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult appAdd(@RequestBody TaskCreateVO createVO) {
+        return toAjax(sysTaskService.insertSysTask(createVO));
     }
 
     /**
-     * 鍒犻櫎浠诲姟绠$悊
+     * 淇敼浠诲姟锛堝悗鍙扮鐞嗙锛�
      */
-    @PreAuthorize("@ss.hasPermi('task:general:remove')")
-    @Log(title = "浠诲姟绠$悊", businessType = BusinessType.DELETE)
+    @PreAuthorize("@ss.hasPermi('task:general:edit')")
+    @Log(title = "浠诲姟绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping("/admin")
+    public AjaxResult adminEdit(@RequestBody TaskUpdateVO updateVO) {
+        return toAjax(sysTaskService.updateSysTask(updateVO,false));
+    }
+
+    /**
+     * 淇敼浠诲姟锛圓PP绔級
+     */
+    @Log(title = "浠诲姟淇敼", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult appEdit(@RequestBody TaskUpdateVO updateVO) {
+        return toAjax(sysTaskService.updateSysTask(updateVO,false));
+    }
+
+    /**
+     * 鍒犻櫎浠诲姟锛圓PP绔級
+     */
+    @Log(title = "浠诲姟鍒犻櫎", businessType = BusinessType.DELETE)
     @DeleteMapping("/{taskIds}")
-    public AjaxResult remove(@PathVariable Long[] taskIds) {
+    public AjaxResult appRemove(@PathVariable Long[] taskIds) {
         return toAjax(sysTaskService.deleteSysTaskByTaskIds(taskIds));
     }
 
     /**
-     * 鍒嗛厤浠诲姟
+     * 鍒犻櫎浠诲姟锛堝悗鍙扮鐞嗙锛�
      */
-    @PreAuthorize("@ss.hasPermi('task:general:assign')")
+    @PreAuthorize("@ss.hasPermi('task:general:remove')")
+    @Log(title = "浠诲姟绠$悊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/admin/{taskIds}")
+    public AjaxResult adminRemove(@PathVariable Long[] taskIds) {
+        return toAjax(sysTaskService.deleteSysTaskByTaskIds(taskIds));
+    }
+
+    /**
+     * 鍒嗛厤浠诲姟锛堝悗鍙扮鐞嗙锛�
+     */
+    @PreAuthorize("@ss.hasPermi('task:general:edit')")
     @Log(title = "浠诲姟鍒嗛厤", businessType = BusinessType.UPDATE)
-    @PutMapping("/{taskId}/assign")
-    public AjaxResult assignTask(@PathVariable Long taskId, @RequestBody AssignTaskRequest request) {
+    @PutMapping("/admin/{taskId}/assign")
+    public AjaxResult adminAssignTask(@PathVariable Long taskId, @RequestBody AssignTaskRequest request) {
         return toAjax(sysTaskService.assignTask(taskId, request.getAssigneeId(), request.getRemark()));
     }
 
     /**
-     * 鏇存柊浠诲姟鐘舵��
+     * 鍒嗛厤浠诲姟锛圓PP绔級
      */
-    @PreAuthorize("@ss.hasPermi('task:general:status')")
+    @Log(title = "浠诲姟鍒嗛厤", businessType = BusinessType.UPDATE)
+    @PutMapping("/{taskId}/assign")
+    public AjaxResult appAssignTask(@PathVariable Long taskId, @RequestBody AssignTaskRequest request) {
+        return toAjax(sysTaskService.assignTask(taskId, request.getAssigneeId(), request.getRemark()));
+    }
+
+    /**
+     * 鏇存柊浠诲姟鐘舵�侊紙鍚庡彴绠$悊绔級
+     */
+    @PreAuthorize("@ss.hasPermi('task:general:edit')")
     @Log(title = "浠诲姟鐘舵�佸彉鏇�", businessType = BusinessType.UPDATE)
-    @PutMapping("/{taskId}/status")
-    public AjaxResult changeTaskStatus(@PathVariable Long taskId, @RequestBody ChangeStatusRequest request) {
+    @PutMapping("/admin/{taskId}/status")
+    public AjaxResult adminChangeTaskStatus(@PathVariable Long taskId, @RequestBody ChangeStatusRequest request) {
         TaskStatus newStatus = TaskStatus.getByCode(request.getTaskStatus());
         if (newStatus == null) {
             return error("鏃犳晥鐨勪换鍔$姸鎬�");
@@ -126,9 +201,40 @@
     }
 
     /**
-     * 鏌ヨ浠诲姟缁熻淇℃伅
+     * 鏇存柊浠诲姟鐘舵�侊紙APP绔級
+     * 鏀寔GPS浣嶇疆淇℃伅涓婃姤
      */
-    @PreAuthorize("@ss.hasPermi('task:general:query')")
+    @Log(title = "浠诲姟鐘舵�佸彉鏇�", businessType = BusinessType.UPDATE)
+    @PutMapping("/{taskId}/status")
+    public AjaxResult appChangeTaskStatus(@PathVariable Long taskId, @RequestBody ChangeStatusRequest request) {
+        TaskStatus newStatus = TaskStatus.getByCode(request.getTaskStatus());
+        if (newStatus == null) {
+            return error("鏃犳晥鐨勪换鍔$姸鎬�");
+        }
+        
+        // 濡傛灉鍖呭惈GPS浣嶇疆淇℃伅锛屼娇鐢ㄥ甫浣嶇疆鐨勬柟娉�
+        if (request.getLatitude() != null && request.getLongitude() != null) {
+            SysTaskLog locationLog = new SysTaskLog();
+            locationLog.setLatitude(request.getLatitude());
+            locationLog.setLongitude(request.getLongitude());
+            locationLog.setLocationAddress(request.getLocationAddress());
+            locationLog.setLocationProvince(request.getLocationProvince());
+            locationLog.setLocationCity(request.getLocationCity());
+            locationLog.setLocationDistrict(request.getLocationDistrict());
+            locationLog.setGpsAccuracy(request.getGpsAccuracy());
+            locationLog.setAltitude(request.getAltitude());
+            locationLog.setSpeed(request.getSpeed());
+            locationLog.setHeading(request.getHeading());
+            
+            return toAjax(sysTaskService.changeTaskStatusWithLocation(taskId, newStatus, request.getRemark(), locationLog));
+        }
+        
+        return toAjax(sysTaskService.changeTaskStatus(taskId, newStatus, request.getRemark()));
+    }
+
+    /**
+     * 鏌ヨ浠诲姟缁熻淇℃伅锛圓PP绔級
+     */
     @GetMapping("/statistics")
     public AjaxResult getStatistics() {
         TaskStatisticsVO statistics = sysTaskService.getTaskStatistics();
@@ -136,9 +242,18 @@
     }
 
     /**
-     * 鏌ヨ瓒呮椂浠诲姟鍒楄〃
+     * 鏌ヨ浠诲姟缁熻淇℃伅锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:query')")
+    @GetMapping("/admin/statistics")
+    public AjaxResult adminGetStatistics() {
+        TaskStatisticsVO statistics = sysTaskService.getTaskStatistics();
+        return success(statistics);
+    }
+
+    /**
+     * 鏌ヨ瓒呮椂浠诲姟鍒楄〃锛圓PP绔級
+     */
     @GetMapping("/overdue")
     public AjaxResult getOverdueTasks() {
         List<SysTask> list = sysTaskService.selectOverdueTasks();
@@ -146,13 +261,32 @@
     }
 
     /**
-     * 鏌ヨ鎴戠殑浠诲姟鍒楄〃
+     * 鏌ヨ瓒呮椂浠诲姟鍒楄〃锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:query')")
+    @GetMapping("/admin/overdue")
+    public AjaxResult adminGetOverdueTasks() {
+        List<SysTask> list = sysTaskService.selectOverdueTasks();
+        return success(list);
+    }
+
+    /**
+     * 鏌ヨ鎴戠殑浠诲姟鍒楄〃锛圓PP绔級
+     */
     @GetMapping("/my")
     public AjaxResult getMyTasks() {
         List<SysTask> list = sysTaskService.selectMyTasks(getUserId());
         return success(list);
+    }
+
+    /**
+     * 妫�鏌ヨ溅杈嗘槸鍚︽湁姝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);
     }
 
     /**
@@ -185,6 +319,18 @@
     public static class ChangeStatusRequest {
         private String taskStatus;
         private String remark;
+        
+        // GPS浣嶇疆淇℃伅瀛楁
+        private Double latitude;
+        private Double longitude;
+        private String locationAddress;
+        private String locationProvince;
+        private String locationCity;
+        private String locationDistrict;
+        private Double gpsAccuracy;
+        private Double altitude;
+        private Double speed;
+        private Double heading;
 
         public String getTaskStatus() {
             return taskStatus;
@@ -201,5 +347,85 @@
         public void setRemark(String remark) {
             this.remark = remark;
         }
+
+        public Double getLatitude() {
+            return latitude;
+        }
+
+        public void setLatitude(Double latitude) {
+            this.latitude = latitude;
+        }
+
+        public Double getLongitude() {
+            return longitude;
+        }
+
+        public void setLongitude(Double longitude) {
+            this.longitude = longitude;
+        }
+
+        public String getLocationAddress() {
+            return locationAddress;
+        }
+
+        public void setLocationAddress(String locationAddress) {
+            this.locationAddress = locationAddress;
+        }
+
+        public String getLocationProvince() {
+            return locationProvince;
+        }
+
+        public void setLocationProvince(String locationProvince) {
+            this.locationProvince = locationProvince;
+        }
+
+        public String getLocationCity() {
+            return locationCity;
+        }
+
+        public void setLocationCity(String locationCity) {
+            this.locationCity = locationCity;
+        }
+
+        public String getLocationDistrict() {
+            return locationDistrict;
+        }
+
+        public void setLocationDistrict(String locationDistrict) {
+            this.locationDistrict = locationDistrict;
+        }
+
+        public Double getGpsAccuracy() {
+            return gpsAccuracy;
+        }
+
+        public void setGpsAccuracy(Double gpsAccuracy) {
+            this.gpsAccuracy = gpsAccuracy;
+        }
+
+        public Double getAltitude() {
+            return altitude;
+        }
+
+        public void setAltitude(Double altitude) {
+            this.altitude = altitude;
+        }
+
+        public Double getSpeed() {
+            return speed;
+        }
+
+        public void setSpeed(Double speed) {
+            this.speed = speed;
+        }
+
+        public Double getHeading() {
+            return heading;
+        }
+
+        public void setHeading(Double heading) {
+            this.heading = heading;
+        }
     }
 }

--
Gitblit v1.9.1