From 40a8157440e3b906da8f52e07d939d78c3f4c313 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 12 四月 2026 16:14:06 +0800
Subject: [PATCH] feat: 任务增加统计、同步增加通知

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskService.java |  223 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 213 insertions(+), 10 deletions(-)

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 c56fa71..21f81b5 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
@@ -1,14 +1,14 @@
 package com.ruoyi.system.service;
 
+import java.util.Date;
 import java.util.List;
+
+import com.ruoyi.system.domain.vo.*;
 import org.springframework.web.multipart.MultipartFile;
 import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskLog;
 import com.ruoyi.system.domain.SysTaskVehicle;
 import com.ruoyi.system.domain.SysTaskAttachment;
-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;
 
 /**
@@ -18,7 +18,16 @@
  * @date 2024-01-15
  */
 public interface ISysTaskService {
-    
+
+    public Boolean dispatchSyncEvent(Long taskId);
+
+    /**
+     * 鍒ゆ柇浠诲姟鏄惁鎬婚儴鎺ㄩ��
+     * @param taskCreatorId
+     * @param taskDeptId
+     * @return
+     */
+    public Boolean isTaskHeaderPush(Long taskCreatorId,Long taskDeptId);
     /**
      * 鏌ヨ浠诲姟绠$悊
      * 
@@ -36,12 +45,43 @@
     public List<SysTask> selectSysTaskList(TaskQueryVO queryVO);
 
     /**
+     * 鏍规嵁浠诲姟缂栧彿銆佽皟搴﹀崟缂栧彿鎴栨湇鍔″崟缂栧彿鏌ヨ浠诲姟鍒楄〃
+     * 
+     * @param queryVO 浠诲姟鏌ヨ瀵硅薄
+     * @param taskCode 浠诲姟缂栧彿
+     * @return 浠诲姟绠$悊闆嗗悎
+     */
+    public List<SysTask> selectSysTaskListByMultiCode(TaskQueryVO queryVO, String taskCode);
+
+    /**
      * 鏂板浠诲姟绠$悊
      * 
      * @param createVO 浠诲姟鍒涘缓瀵硅薄
      * @return 缁撴灉
      */
-    public int insertSysTask(TaskCreateVO createVO);
+    /**
+     * 鏂板浠诲姟
+     * 
+     * @param createVO 浠诲姟鍒涘缓淇℃伅
+     * @return 浠诲姟ID
+     */
+    public Long insertSysTask(TaskCreateVO createVO);
+
+    /**
+     * 鏂板浠诲姟绠$悊锛堝厑璁镐粠澶栭儴浼犲叆鐢ㄦ埛淇℃伅銆侀儴闂ㄤ俊鎭拰鏃堕棿淇℃伅锛�
+     * 
+     * @param createVO 浠诲姟鍒涘缓瀵硅薄
+     * @param serviceOrderId 鏈嶅姟鍗旾D
+     * @param dispatchOrderId 璋冨害鍗旾D
+     * @param serviceOrdNo 鏈嶅姟鍗曠紪鍙�
+     * @param userId 鐢ㄦ埛ID
+     * @param userName 鐢ㄦ埛鍚嶇О
+     * @param deptId 閮ㄩ棬ID
+     * @param createTime 鍒涘缓鏃堕棿
+     * @param updateTime 鏇存柊鏃堕棿
+     * @return 浠诲姟ID
+     */
+    public Long insertTask(TaskCreateVO createVO,Long serviceOrderId,Long dispatchOrderId, String serviceOrdNo, Long userId,String userName, Long deptId, Date createTime, Date updateTime);
 
     /**
      * 淇敼浠诲姟绠$悊
@@ -49,7 +89,22 @@
      * @param updateVO 浠诲姟鏇存柊瀵硅薄
      * @return 缁撴灉
      */
-    public int updateSysTask(TaskUpdateVO updateVO);
+    public int updateSysTask(TaskUpdateVO updateVO,Boolean updateFromLegacy);
+
+    /**
+     * 淇敼浠诲姟绠$悊锛堝厑璁镐粠澶栭儴浼犲叆鐢ㄦ埛淇℃伅銆侀儴闂ㄤ俊鎭拰鏃堕棿淇℃伅锛� 鐢ㄤ簬浠庢棫绯荤粺涓悓姝ヨ繃鏉�
+     * @param updateVO
+     * @param serviceOrderId
+     * @param dispatchOrderId
+     * @param serviceOrdNo
+     * @param userId
+     * @param userName
+     * @param deptId
+     * @param createTime
+     * @param updateTime
+     * @return
+     */
+    public int updateTask(TaskUpdateVO updateVO, Long serviceOrderId, Long dispatchOrderId, String serviceOrdNo, Long userId, String userName, Long deptId, Date createTime, Date updateTime);
 
     /**
      * 鎵归噺鍒犻櫎浠诲姟绠$悊
@@ -80,13 +135,61 @@
     public int changeTaskStatus(Long taskId, TaskStatus newStatus, String remark);
 
     /**
+     * 寮哄埗瀹屾垚浠诲姟锛堟寚瀹氬疄闄呭紑濮嬫椂闂村拰缁撴潫鏃堕棿锛�
+     * 
+     * @param task 浠诲姟淇℃伅锛堝寘鍚玹askId銆乼askStatus銆乤ctualStartTime銆乤ctualEndTime銆乺emark锛�
+     * @return 缁撴灉
+     */
+    public int forceCompleteTask(SysTask task);
+
+    /**
+     * 鍙樻洿浠诲姟鐘舵�侊紙鍚獹PS浣嶇疆淇℃伅锛�
+     * 
+     * @param taskId 浠诲姟ID
+     * @param newStatus 鏂扮姸鎬�
+     * @param remark 澶囨敞
+     * @param locationLog GPS浣嶇疆淇℃伅鏃ュ織瀵硅薄
+     * @return 缁撴灉
+     */
+    public int changeTaskStatusWithLocation(Long taskId, TaskStatus newStatus, String remark, SysTaskLog locationLog);
+
+    /**
+     * 淇濆瓨浠诲姟鍙栨秷淇℃伅锛堜粎闄愯浆杩愪换鍔★級
+     * 
+     * @param taskId 浠诲姟ID
+     * @param cancelReason 鍙栨秷鍘熷洜锛堟暟鎹瓧鍏竧ask_cancel_reason鐨剉alue锛�
+     * @return 缁撴灉
+     */
+    public int saveCancelInfo(Long taskId, String cancelReason);
+
+    /**
+     * 淇濆瓨浠诲姟鍙栨秷淇℃伅锛堝惈鍙栨秷浜猴級
+     * @param taskId
+     * @param cancelReason
+     * @param cancelBy
+     * @return
+     */
+    public int saveCancel(Long taskId, String cancelReason,String cancelBy,Date cancelTime);
+    /**
      * 涓婁紶浠诲姟闄勪欢
      * 
      * @param taskId 浠诲姟ID
      * @param file 鏂囦欢
+     * @param category 闄勪欢鍒嗙被
      * @return 缁撴灉
      */
-    public int uploadAttachment(Long taskId, MultipartFile file);
+    public Long uploadAttachment(Long taskId, MultipartFile file, String category);
+    
+    /**
+     * 浠庡井淇ediaId涓婁紶浠诲姟闄勪欢
+     * 
+     * @param taskId 浠诲姟ID
+     * @param accessToken 寰俊AccessToken
+     * @param mediaId 寰俊mediaId
+     * @param category 闄勪欢鍒嗙被
+     * @return
+     */
+    public Long uploadAttachmentFromWechat(Long taskId, String accessToken, String mediaId, String category);
 
     /**
      * 鍒犻櫎浠诲姟闄勪欢
@@ -95,7 +198,17 @@
      * @return 缁撴灉
      */
     public int deleteAttachment(Long attachmentId);
+    
+    /**
+     * 鏍规嵁ID鑾峰彇闄勪欢璇︽儏
+     * 
+     * @param attachmentId 闄勪欢ID
+     * @return 闄勪欢璇︽儏
+     */
+    public SysTaskAttachment getAttachmentById(Long attachmentId);
 
+
+    public List<SysTaskAttachment> getAttachmentsByTaskId(Long taskId);
     /**
      * 鍒嗛厤杞﹁締缁欎换鍔�
      * 
@@ -104,7 +217,7 @@
      * @param remark 澶囨敞
      * @return 缁撴灉
      */
-    public int assignVehicleToTask(Long taskId, Long vehicleId, String remark);
+    public int assignVehicleToTask(Long taskId, Long vehicleId, String remark,Long userId,String userName);
 
     /**
      * 鍙栨秷浠诲姟杞﹁締鍒嗛厤
@@ -123,7 +236,7 @@
      * @param remark 澶囨敞
      * @return 缁撴灉
      */
-    public int assignMultipleVehiclesToTask(Long taskId, List<Long> vehicleIds, String remark);
+    public int assignMultipleVehiclesToTask(Long taskId, List<Long> vehicleIds, String remark,Long userId,String userName);
 
     /**
      * 鏌ヨ浠诲姟鍏宠仈鐨勮溅杈�
@@ -171,4 +284,94 @@
      * @return 浠诲姟璇︽儏
      */
     public SysTask getTaskDetail(Long taskId);
+
+    /**
+     * 妫�鏌ヨ溅杈嗘槸鍚︽湁姝e湪杩涜涓殑浠诲姟
+     * 姝e湪杩涜涓殑浠诲姟鏄寚鐘舵�佷笉涓猴細PENDING锛堝緟澶勭悊锛夈�丆OMPLETED锛堝凡瀹屾垚锛夈�丆ANCELLED锛堝凡鍙栨秷锛夌殑浠诲姟
+     * 
+     * @param vehicleId 杞﹁締ID
+     * @return 姝e湪杩涜涓殑浠诲姟鍒楄〃
+     */
+    public List<SysTask> checkVehicleActiveTasks(Long vehicleId);
+
+    /**
+     * 妫�鏌ヤ换鍔℃槸鍚﹀凡鍏宠仈鏃х郴缁熸湇鍔″崟ID
+     * 
+     * @param taskId 浠诲姟ID
+     * @return true-宸插叧鑱旓紝false-鏈叧鑱�
+     */
+    public boolean hasLegacyServiceOrdId(Long taskId);
+
+    /**
+     * 妫�鏌ヤ换鍔℃槸鍚﹀凡鍏宠仈鏃х郴缁熻皟搴﹀崟ID
+     * 
+     * @param taskId 浠诲姟ID
+     * @return true-宸插叧鑱旓紝false-鏈叧鑱�
+     */
+    public boolean hasLegacyDispatchOrdId(Long taskId);
+
+    /**
+     * 鏍规嵁鏃х郴缁熸湇鍔″崟ID妫�鏌ユ槸鍚﹀瓨鍦ㄤ换鍔�
+     * 
+     * @param legacyServiceOrdId 鏃х郴缁熸湇鍔″崟ID
+     * @return true-瀛樺湪锛宖alse-涓嶅瓨鍦�
+     */
+    public boolean existsByLegacyServiceOrdId(Long legacyServiceOrdId);
+
+    /**
+     * 鏍规嵁鏃х郴缁熻皟搴﹀崟ID妫�鏌ユ槸鍚﹀瓨鍦ㄤ换鍔�
+     * 
+     * @param legacyDispatchOrdId 鏃х郴缁熻皟搴﹀崟ID
+     * @return true-瀛樺湪锛宖alse-涓嶅瓨鍦�
+     */
+    public boolean existsByLegacyDispatchOrdId(Long legacyDispatchOrdId);
+
+    /**
+     * 妫�鏌ヤ换鍔℃槸鍚﹀彲浠ュ嚭鍙�
+     * 妫�鏌ワ細
+     * 1. 杞﹁締鏄惁鏈夋湭瀹屾垚鐨勪换鍔�
+     * 2. 鎵ц浜哄憳鏄惁鏈夋湭瀹屾垚鐨勪换鍔�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return AjaxResult 鏍¢獙缁撴灉锛屽寘鍚� valid 鍜� conflicts 淇℃伅
+     */
+    public com.ruoyi.common.core.domain.AjaxResult checkTaskCanDepart(Long taskId);
+
+    /**
+     * 鎵ц浜虹偣鍑诲氨缁�
+     * 
+     * @param taskId 浠诲姟ID
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+    public com.ruoyi.common.core.domain.AjaxResult setAssigneeReady(Long taskId, Long userId);
+
+    /**
+     * 鍙栨秷鎵ц浜哄氨缁�
+     * 
+     * @param taskId 浠诲姟ID
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+    public com.ruoyi.common.core.domain.AjaxResult cancelAssigneeReady(Long taskId, Long userId);
+    
+    /**
+     * 妫�鏌ヤ换鍔℃槸鍚﹂噸澶嶏紙鏍规嵁鑱旂郴浜虹數璇濆拰鍒涘缓鏃ユ湡锛�
+     * 
+     * @param phone 鑱旂郴浜虹數璇�
+     * @param createDate 浠诲姟鍒涘缓鏃ユ湡锛堟牸寮忥細YYYY-MM-DD锛�
+     * @return true-瀛樺湪閲嶅锛宖alse-涓嶉噸澶�
+     */
+    public boolean checkTaskDuplicate(String phone, String createDate);
+
+    /**
+     * 鎸夊垎鍏徃鎸夊ぉ缁熻褰曞崟鏁伴噺
+     *
+     * @param deptIds   鍒嗗叕鍙窱D鍒楄〃锛堜负null鎴栫┖鏃舵煡鍏ㄩ儴锛�
+     * @param startDate 寮�濮嬫棩鏈燂紝yyyy-MM-dd
+     * @param endDate   缁撴潫鏃ユ湡锛寉yyy-MM-dd
+     * @return 缁熻缁撴灉鍒楄〃
+     */
+    List<DeptOrderStatVO> selectDeptOrderStat(List<Long> deptIds, String startDate, String endDate);
+
 }

--
Gitblit v1.9.1