From 2f09efc660bf2cc94cbc5291ad25ca06fc9bdadf Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 24 一月 2026 22:03:09 +0800
Subject: [PATCH] feat: 增加OCR测试,车辆

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java |  134 ++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 120 insertions(+), 14 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 4181398..56ad818 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
@@ -1,9 +1,15 @@
 package com.ruoyi.web.controller.task;
 
+import java.util.Date;
 import java.util.List;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.domain.SysTaskEmergency;
 import com.ruoyi.system.service.*;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -47,6 +53,9 @@
     
     @Autowired
     private ISysTaskService sysTaskService;
+
+    @Autowired
+    private ISysTaskEmergencyService sysTaskEmergencyService;
     
     @Autowired
     private IVehicleInfoService vehicleInfoService;
@@ -70,7 +79,18 @@
     @GetMapping("/admin/list")
     public TableDataInfo adminList(TaskQueryVO queryVO) {
         startPage();
-        List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
+        // Handle multi-field task code search
+        String searchTaskCode = queryVO.getTaskCode();
+        List<SysTask> list;
+        if(searchTaskCode != null && !searchTaskCode.trim().isEmpty()){
+            // Search across task_code, emergency_info.dispatch_code, and emergency_info.service_code
+            list = sysTaskService.selectSysTaskListByMultiCode(queryVO, searchTaskCode);
+        } else {
+            queryVO.setTaskCode(null);
+            list = sysTaskService.selectSysTaskList(queryVO);
+        }
+
+
         return getDataTable(list);
     }
 
@@ -164,7 +184,8 @@
     @Log(title = "浠诲姟绠$悊", businessType = BusinessType.INSERT)
     @PostMapping("/admin")
     public AjaxResult adminAdd(@RequestBody TaskCreateVO createVO) {
-        return toAjax(sysTaskService.insertSysTask(createVO));
+        Long taskId = sysTaskService.insertSysTask(createVO);
+        return taskId > 0 ? AjaxResult.success("鏂板鎴愬姛").put("taskId", taskId) : AjaxResult.error("鏂板澶辫触");
     }
 
     /**
@@ -173,7 +194,32 @@
     @Log(title = "浠诲姟鍒涘缓", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult appAdd(@RequestBody TaskCreateVO createVO) {
-        return toAjax(sysTaskService.insertSysTask(createVO));
+        Long taskId = sysTaskService.insertSysTask(createVO);
+        return taskId > 0 ? AjaxResult.success("鏂板鎴愬姛").put("taskId", taskId) : AjaxResult.error("鏂板澶辫触");
+    }
+    
+    /**
+     * 妫�鏌ヤ换鍔℃槸鍚﹂噸澶嶏紙鏍规嵁鑱旂郴浜虹數璇濆拰鍒涘缓鏃ユ湡锛�
+     * @param phone 鑱旂郴浜虹數璇�
+     * @param createDate 浠诲姟鍒涘缓鏃ユ湡锛堟牸寮忥細YYYY-MM-DD锛�
+     * @return 鏄惁瀛樺湪閲嶅浠诲姟
+     */
+    @GetMapping("/checkDuplicate")
+    public AjaxResult checkDuplicate(
+            @RequestParam("phone") String phone,
+            @RequestParam("createDate") String createDate) {
+        
+        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(createDate)) {
+            return AjaxResult.error("鍙傛暟涓嶈兘涓虹┖");
+        }
+        
+        boolean isDuplicate = sysTaskService.checkTaskDuplicate(phone, createDate);
+        
+        if (isDuplicate) {
+            return AjaxResult.error("璇ヨ仈绯荤數璇濆湪璇ユ棩鏈熷凡鏈変换鍔★紝涓嶈兘閲嶅鎻愪氦");
+        }
+        
+        return AjaxResult.success("鏈彂鐜伴噸澶嶄换鍔�");
     }
 
     /**
@@ -259,26 +305,53 @@
             return error("鏃犳晥鐨勪换鍔$姸鎬�");
         }
         
+        // 濡傛灉鏄彇娑堢姸鎬侊紝淇濆瓨鍙栨秷鍘熷洜
+        if (newStatus == TaskStatus.CANCELLED && StringUtils.isNotEmpty(request.getCancelReason())) {
+            sysTaskService.saveCancelInfo(taskId, request.getCancelReason());
+        }
+        
+        // 濡傛灉鏄己鍒跺畬鎴愶紝鏇存柊瀹為檯寮�濮嬫椂闂村拰缁撴潫鏃堕棿
+        if (newStatus == TaskStatus.COMPLETED && request.getActualStartTime() != null && request.getActualEndTime() != null) {
+            SysTask task = new SysTask();
+            task.setTaskId(taskId);
+            task.setTaskStatus(newStatus.getCode());
+            //灏哠tring杞垚Date
+
+            task.setActualStartTime(DateUtils.parseDate(request.getActualStartTime()));
+            task.setActualEndTime(DateUtils.parseDate(request.getActualEndTime()));
+            task.setRemark(request.getRemark());
+            task.setUpdateBy(SecurityUtils.getUsername());
+            task.setUpdateTime(DateUtils.getNowDate());
+            
+            int result = sysTaskService.forceCompleteTask(task);
+            return toAjax(result);
+        }
+        
         // 濡傛灉鍖呭惈GPS浣嶇疆淇℃伅锛屼娇鐢ㄥ甫浣嶇疆鐨勬柟娉�
         if (request.getLatitude() != null && request.getLongitude() != null) {
            String address= mapService.reverseGeocoding(request.getLongitude(), request.getLatitude());
            request.setLocationAddress(address);
-            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());
+            SysTaskLog locationLog = getLocationLog(request);
 
             return toAjax(sysTaskService.changeTaskStatusWithLocation(taskId, newStatus, request.getRemark(), locationLog));
         }
 
         return toAjax(sysTaskService.changeTaskStatus(taskId, newStatus, request.getRemark()));
+    }
+
+    private static SysTaskLog getLocationLog(ChangeStatusRequest request) {
+        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 locationLog;
     }
 
     /**
@@ -412,6 +485,15 @@
         private Double altitude;
         private Double speed;
         private Double heading;
+        
+        // 鍙栨秷鐩稿叧瀛楁
+        private String cancelReason;  // 鍙栨秷鍘熷洜锛堝叧鑱旀暟鎹瓧鍏竧ask_cancel_reason锛�
+        
+        // 寮哄埗瀹屾垚鐩稿叧瀛楁
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+        private String actualStartTime;  // 瀹為檯寮�濮嬫椂闂�
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+        private String actualEndTime;    // 瀹為檯缁撴潫鏃堕棿
 
         public String getTaskStatus() {
             return taskStatus;
@@ -508,5 +590,29 @@
         public void setHeading(Double heading) {
             this.heading = heading;
         }
+
+        public String getCancelReason() {
+            return cancelReason;
+        }
+
+        public void setCancelReason(String cancelReason) {
+            this.cancelReason = cancelReason;
+        }
+        
+        public String getActualStartTime() {
+            return actualStartTime;
+        }
+        
+        public void setActualStartTime(String actualStartTime) {
+            this.actualStartTime = actualStartTime;
+        }
+        
+        public String getActualEndTime() {
+            return actualEndTime;
+        }
+        
+        public void setActualEndTime(String actualEndTime) {
+            this.actualEndTime = actualEndTime;
+        }
     }
 }

--
Gitblit v1.9.1