From 99f528e235f11126fea44480c6e8888a9e463f2f Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 08 十一月 2025 21:09:53 +0800
Subject: [PATCH] feat:任务附件上传和同步

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java |  217 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 158 insertions(+), 59 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
index 8e181d8..db1fa94 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
@@ -12,6 +12,9 @@
 import java.util.List;
 import java.util.Map;
 
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.service.*;
+import com.ruoyi.system.task.ITaskAttachmentService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,11 +25,6 @@
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.entity.SysDept;
-import com.ruoyi.system.domain.SysTask;
-import com.ruoyi.system.domain.SysTaskEmergency;
-import com.ruoyi.system.domain.SysTaskVehicle;
-import com.ruoyi.system.domain.SysTaskAssignee;
-import com.ruoyi.system.domain.VehicleInfo;
 import com.ruoyi.system.domain.vo.TaskCreateVO;
 import com.ruoyi.system.mapper.SysTaskMapper;
 import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
@@ -35,7 +33,7 @@
 import com.ruoyi.system.mapper.VehicleInfoMapper;
 import com.ruoyi.system.mapper.SysUserMapper;
 import com.ruoyi.system.mapper.SysDeptMapper;
-import com.ruoyi.system.service.ILegacySystemSyncService;
+import com.ruoyi.system.utils.TaskStatusConverter;
 
 /**
  * 鏃х郴缁熷悓姝ervice涓氬姟灞傚鐞�
@@ -55,9 +53,6 @@
     private SysTaskMapper sysTaskMapper;
     
     @Autowired
-    private SysTaskEmergencyMapper sysTaskEmergencyMapper;
-    
-    @Autowired
     private SysUserMapper sysUserMapper;
     
     @Autowired
@@ -71,6 +66,21 @@
     
     @Autowired
     private VehicleInfoMapper vehicleInfoMapper;
+    
+    @Autowired
+    private IDispatchOrdService dispatchOrdService;
+    
+    @Autowired
+    private ISysTaskEmergencyService sysTaskEmergencyService;
+
+    @Autowired
+    private ITaskAttachmentSyncService taskAttachmentSyncService;
+
+    @Autowired
+    private ISysTaskService sysTaskService;
+
+    @Autowired
+    private ITaskAttachmentService taskAttachmentService;
     
     /**
      * 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
@@ -98,7 +108,7 @@
             }
             
             // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
-            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
             if (emergency == null) {
                 log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
                 return null;
@@ -112,7 +122,7 @@
             
             // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
             emergency.setSyncStatus(1);
-            sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
             
             // 鏋勫缓璇锋眰鍙傛暟
             Map<String, String> params = buildSyncParams(task, emergency);
@@ -129,7 +139,7 @@
                 emergency.setSyncStatus(2); // 鍚屾鎴愬姛
                 emergency.setSyncTime(new Date());
                 emergency.setSyncErrorMsg(null);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 
                 // 鏇存柊浠诲姟涓昏〃鍚屾鏍囪
                 task.setLegacySynced(1);
@@ -142,7 +152,7 @@
                 emergency.setSyncStatus(3); // 鍚屾澶辫触
                 emergency.setSyncTime(new Date());
                 emergency.setSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑ServiceOrdID: " + response);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 
                 log.error("浠诲姟鍚屾澶辫触锛屼换鍔D: {}, 鍝嶅簲: {}", taskId, response);
                 return null;
@@ -153,12 +163,12 @@
             
             // 鏇存柊鍚屾鐘舵�佷负澶辫触
             try {
-                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+                SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
                 if (emergency != null) {
                     emergency.setSyncStatus(3); // 鍚屾澶辫触
                     emergency.setSyncTime(new Date());
                     emergency.setSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
-                    sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 }
             } catch (Exception ex) {
                 log.error("鏇存柊鍚屾鐘舵�佸け璐�", ex);
@@ -170,6 +180,7 @@
     
     /**
      * 鎵归噺鍚屾鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟
+     * 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
      */
     @Override
     public int batchSyncPendingTasks() {
@@ -179,27 +190,53 @@
         }
         
         try {
-            // 鏌ヨ鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟锛堝悓姝ョ姸鎬佷负0鎴�3鐨勪换鍔★級
-            List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingSyncTasks();
+            int totalSuccessCount = 0;
+            int pageSize = 100; // 姣忛〉100鏉�
+            int offset = 0;
             
-            int successCount = 0;
-            for (SysTaskEmergency emergency : pendingTasks) {
-                Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId());
-                if (serviceOrdId != null && serviceOrdId > 0) {
-                    successCount++;
+            while (true) {
+                // 鍒嗛〉鏌ヨ鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟锛堝悓姝ョ姸鎬佷负0鎴�3鐨勪换鍔★級
+                List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingSyncTasks(offset, pageSize);
+                
+                if (pendingTasks == null || pendingTasks.isEmpty()) {
+                    log.info("娌℃湁鏇村闇�瑕佸悓姝ョ殑浠诲姟锛宱ffset: {}", offset);
+                    break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
                 }
                 
-                // 閬垮厤杩囦簬棰戠箒鐨勮姹�
-                try {
-                    Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
-                } catch (InterruptedException e) {
-                    Thread.currentThread().interrupt();
+                log.info("寮�濮嬪悓姝ョ {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
+                
+                int pageSuccessCount = 0;
+                for (SysTaskEmergency emergency : pendingTasks) {
+                    Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId());
+                    if (serviceOrdId != null && serviceOrdId > 0) {
+                        pageSuccessCount++;
+                    }
+                    
+                    // 閬垮厤杩囦簬棰戠箒鐨勮姹�
+                    try {
+                        Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
+                    } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
+                        log.warn("鍚屾琚腑鏂�");
+                        return totalSuccessCount + pageSuccessCount;
+                    }
+                }
+                
+                totalSuccessCount += pageSuccessCount;
+                log.info("绗� {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
+                    (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
+                
+                // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
+                if (pendingTasks.size() < pageSize) {
+                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝鍚屾缁撴潫");
                     break;
                 }
+                
+                offset += pageSize; // 涓嬩竴椤�
             }
             
-            log.info("鎵归噺鍚屾瀹屾垚锛屾�绘暟: {}, 鎴愬姛: {}", pendingTasks.size(), successCount);
-            return successCount;
+            log.info("鎵归噺鍚屾瀹屾垚锛屾�绘垚鍔熸暟: {}", totalSuccessCount);
+            return totalSuccessCount;
             
         } catch (Exception e) {
             log.error("鎵归噺鍚屾浠诲姟寮傚父", e);
@@ -215,12 +252,12 @@
     public boolean retrySyncTask(Long taskId) {
         try {
             // 閲嶇疆鍚屾鐘舵��
-            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
             if (emergency != null) {
                 emergency.setSyncStatus(0); // 閲嶇疆涓烘湭鍚屾
                 emergency.setLegacyServiceOrdId(null);
                 emergency.setSyncErrorMsg(null);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
             }
             
             // 閲嶆柊鍚屾
@@ -232,7 +269,27 @@
             return false;
         }
     }
-    
+
+
+    /**
+     * 鍚屾浠诲姟闄勪欢鍒版棫绯荤粺
+     * @param taskAttachments
+     * @param serviceOrdId
+     * @param dispatchOrdId
+     * @param oaUserID
+     */
+    public void syncAttachmentToLegacy(List<SysTaskAttachment> taskAttachments, Long serviceOrdId,Long dispatchOrdId,Integer oaUserID) {
+        taskAttachments.forEach((taskAttachment)->{
+            Long imageDataId=  taskAttachmentSyncService.syncAttachmentToImageData(taskAttachment,serviceOrdId,dispatchOrdId,oaUserID);
+            if (imageDataId != null && imageDataId > 0) {
+
+                taskAttachment.setSyncedToImageData(1);
+                taskAttachment.setSyncTime(new Date());
+                taskAttachment.setImageDataId(imageDataId);
+                taskAttachmentService.updateAttachment(taskAttachment);
+            }
+        });
+    }
     /**
      * 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛�
      */
@@ -259,7 +316,7 @@
             }
             
             // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
-            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
             if (emergency == null) {
                 log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
                 return null;
@@ -270,16 +327,23 @@
                 log.info("璋冨害鍗曞凡鍚屾杩囷紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
                 return emergency.getLegacyDispatchOrdId();
             }
-            
+
+            Long serviceOrdId=emergency.getLegacyServiceOrdId();
             // 蹇呴』鍏堝悓姝ユ湇鍔″崟
-            if (emergency.getLegacyServiceOrdId() == null || emergency.getLegacyServiceOrdId() <= 0) {
+            if (serviceOrdId == null || serviceOrdId <= 0) {
                 log.warn("鏈嶅姟鍗曟湭鍚屾锛屾棤娉曞悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
                 return null;
             }
-            
+
+
+
+
             // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
             emergency.setDispatchSyncStatus(1);
-            sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+            SysUser u=sysUserMapper.selectUserById(task.getCreatorId());
+            Integer oaUserID= u.getOaUserId();
             
             // 鏋勫缓璇锋眰鍙傛暟
             Map<String, String> params = buildDispatchOrderParams(task, emergency);
@@ -296,8 +360,14 @@
                 emergency.setDispatchSyncStatus(2); // 鍚屾鎴愬姛
                 emergency.setDispatchSyncTime(new Date());
                 emergency.setDispatchSyncErrorMsg(null);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
-                
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+                List<SysTaskAttachment> taskAttachments= sysTaskService.getAttachmentsByTaskId(taskId);
+                if (taskAttachments != null && !taskAttachments.isEmpty()) {
+                    //鍚屾闄勪欢
+                   this.syncAttachmentToLegacy(taskAttachments,serviceOrdId,dispatchOrdId,oaUserID);
+                }
+
                 log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
                 return dispatchOrdId;
             } else {
@@ -305,7 +375,7 @@
                 emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
                 emergency.setDispatchSyncTime(new Date());
                 emergency.setDispatchSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑DispatchOrdID: " + response);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 
                 log.error("璋冨害鍗曞悓姝ュけ璐ワ紝浠诲姟ID: {}, 鍝嶅簲: {}", taskId, response);
                 return null;
@@ -316,12 +386,12 @@
             
             // 鏇存柊鍚屾鐘舵�佷负澶辫触
             try {
-                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+                SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
                 if (emergency != null) {
                     emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
                     emergency.setDispatchSyncTime(new Date());
                     emergency.setDispatchSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
-                    sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 }
             } catch (Exception ex) {
                 log.error("鏇存柊璋冨害鍗曞悓姝ョ姸鎬佸け璐�", ex);
@@ -333,6 +403,7 @@
     
     /**
      * 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
+     * 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
      */
     @Override
     public int batchSyncPendingDispatchOrders() {
@@ -342,27 +413,55 @@
         }
         
         try {
-            // 鏌ヨ宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曠殑浠诲姟
-            List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingDispatchSyncTasks();
+            int totalSuccessCount = 0;
+            int pageSize = 100; // 姣忛〉100鏉�
+            int offset = 0;
             
-            int successCount = 0;
-            for (SysTaskEmergency emergency : pendingTasks) {
-                Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId());
-                if (dispatchOrdId != null && dispatchOrdId > 0) {
-                    successCount++;
+            while (true) {
+                // 鍒嗛〉鏌ヨ宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曠殑浠诲姟
+                List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingDispatchSyncTasks(offset, pageSize);
+                log.info("鏌ヨ鍒版湭鍚屾璋冨害鍗曠殑浠诲姟鏁伴噺: {}", pendingTasks.size());
+                if (pendingTasks == null || pendingTasks.isEmpty()) {
+                    log.info("娌℃湁鏇村闇�瑕佸悓姝ヨ皟搴﹀崟鐨勪换鍔★紝offset: {}", offset);
+                    break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
                 }
                 
-                // 閬垮厤杩囦簬棰戠箒鐨勮姹�
-                try {
-                    Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
-                } catch (InterruptedException e) {
-                    Thread.currentThread().interrupt();
+                log.info("寮�濮嬪悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
+                
+                int pageSuccessCount = 0;
+                for (SysTaskEmergency emergency : pendingTasks) {
+                    log.info("寮�濮嬪悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
+                    Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId());
+
+                    if (dispatchOrdId != null && dispatchOrdId > 0) {
+                        pageSuccessCount++;
+                    }
+                    
+                    // 閬垮厤杩囦簬棰戠箒鐨勮姹�
+                    try {
+                        Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
+                    } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
+                        log.warn("鍚屾璋冨害鍗曡涓柇");
+                        return totalSuccessCount + pageSuccessCount;
+                    }
+                }
+                
+                totalSuccessCount += pageSuccessCount;
+                log.info("璋冨害鍗曠 {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
+                    (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
+                
+                // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
+                if (pendingTasks.size() < pageSize) {
+                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曞悓姝ョ粨鏉�");
                     break;
                 }
+                
+                offset += pageSize; // 涓嬩竴椤�
             }
             
-            log.info("鎵归噺鍚屾璋冨害鍗曞畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", pendingTasks.size(), successCount);
-            return successCount;
+            log.info("鎵归噺鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+            return totalSuccessCount;
             
         } catch (Exception e) {
             log.error("鎵归噺鍚屾璋冨害鍗曞紓甯�", e);
@@ -398,7 +497,7 @@
         // 鍩烘湰淇℃伅
         params.put("DispatchOrdClass", dispatchOrdClass);
         params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString());
-        params.put("DispatchOrdState", "8"); // 璋冨害鍗曠姸鎬�
+        params.put("DispatchOrdState", "1"); // 璋冨害鍗曠姸鎬�
         
         // 鏃堕棿淇℃伅
         if (task.getPlannedStartTime() != null) {
@@ -478,7 +577,7 @@
         params.put("ServiceOrdEstimatedOrderDateOld", ""); // 鍘熼璁℃淳鍗曟椂闂�
         params.put("ServiceOrdViaDistance", "0"); // 涓�旇窛绂�
         params.put("ServiceOrdTraDistance", emergency.getTransferDistance() != null ? emergency.getTransferDistance().toString() : "0"); // 璺濈
-        params.put("OrderLevel", "2"); // 鏌ョ湅绛夌骇
+        params.put("OrderLevel", "0"); // 鏌ョ湅绛夌骇
         params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
         params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
         params.put("DirectionType", "0"); // 杞繍鍘诲悜
@@ -866,7 +965,7 @@
         params.put("ServiceOrdOperationRemarks", "鏂扮郴缁熷悓姝ュ垱寤�"); // 鎿嶄綔澶囨敞
         params.put("ServiceOrdEstimatedOrderDate", ""); // 棰勮娲惧崟鏃堕棿
         params.put("ServiceOrdSource", "10"); // 璁㈠崟鏉ユ簮锛�10=鏂扮郴缁燂級
-        params.put("OrderLevel", "2"); // 鏌ョ湅绛夌骇
+        params.put("OrderLevel", "0"); // 鏌ョ湅绛夌骇
         params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
         params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
         params.put("DirectionType", "0"); // 杞繍鍘诲悜

--
Gitblit v1.9.1