From 5f2ee03958a1a16dc27195c76ea7cffb422c95d1 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期五, 19 十二月 2025 22:40:34 +0800
Subject: [PATCH] feat: 任务修改接口,删除一些不要的字段同步

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/TaskEmergencySyncService.java           |   13 
 app/pages/index.vue                                                                         |   83 +
 ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java               |   42 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java                     |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskDispatchSyncUtilService.java   |  408 +++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java   |   11 
 app/pagesTask/components/DepartmentSelector.vue                                             |   11 
 ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.java                  |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java            |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java   | 1339 +-----------------------
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskSyncUtilService.java           |  368 ++++++
 app/pages/task/index.vue                                                                    |  104 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.java           |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java            |   91 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskEmergencySyncServiceImpl.java  |  174 +++
 ruoyi-system/src/main/java/com/ruoyi/system/event/TaskUpdateEvent.java                      |   16 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskEmergencyServiceImpl.java   |   15 
 app/pagesTask/edit-emergency.vue                                                            |   63 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskDispatchSyncService.java           |   16 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskDispatchSyncServiceImpl.java   |  395 +++++++
 ruoyi-admin/src/main/resources/application-dev.yml                                          |    1 
 ruoyi-system/src/main/resources/mapper/system/LegacyTransferSyncMapper.xml                  |    2 
 23 files changed, 1,833 insertions(+), 1,357 deletions(-)

diff --git a/app/pages/index.vue b/app/pages/index.vue
index b6dbb88..6579435 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -89,7 +89,11 @@
     </view>
 
     <!-- 姝e湪杩愯鐨勪换鍔″垪琛� -->
-    <scroll-view class="running-tasks-section" scroll-y="true">
+    <scroll-view 
+      class="running-tasks-section" 
+      scroll-y="true"
+      @scrolltolower="onScrollToLower"
+    >
       <view class="task-list">
         <view class="task-item" v-for="task in runningTasks" :key="task.id">
           <view class="task-main" @click="viewTaskDetail(task)">
@@ -215,6 +219,15 @@
           <uni-icons type="info" size="40" color="#ccc"></uni-icons>
           <text>鏆傛棤姝e湪杩愯鐨勪换鍔�</text>
         </view>
+        
+        <!-- 鍔犺浇鏇村鎻愮ず -->
+        <view class="load-more" v-if="runningTasks.length > 0 && hasMore && loading">
+          <uni-icons type="spinner-cycle" size="20" color="#999"></uni-icons>
+          <text>姝e湪鍔犺浇鏇村鏁版嵁...</text>
+        </view>
+        <view class="load-more no-more" v-else-if="runningTasks.length > 0 && !hasMore">
+          <text>娌℃湁鏇村鏁版嵁浜�</text>
+        </view>
       </view>
     </scroll-view>
   </view>
@@ -241,11 +254,17 @@
       unreadMessageCount: 0,
 
       // 姝e湪杩愯鐨勪换鍔″垪琛�
-      taskList: [],
+      allTaskList: [], // 瀛樺偍鎵�鏈変换鍔℃暟鎹�
+      displayedTaskList: [], // 瀛樺偍褰撳墠鏄剧ず鐨勪换鍔℃暟鎹�
       loading: false,
 
       // 璁㈤槄鐘舵��
       hasSubscribed: false,
+      
+      // 鍓嶇鍒嗛〉鐩稿叧
+      currentPage: 1,
+      pageSize: 10,
+      hasMore: true,
     };
   },
   computed: {
@@ -256,7 +275,7 @@
 
     // 姝e湪杩愯鐨勪换鍔★紙寰呭鐞嗗拰鍚勭澶勭悊涓殑浠诲姟锛�
     runningTasks() {
-      return this.taskList.filter((task) => {
+      return this.displayedTaskList.filter((task) => {
         // 鍖呭惈寰呭鐞嗐�佸嚭鍙戜腑銆佸凡鍒拌揪銆佽繑绋嬩腑绛夋墍鏈夋湭瀹屾垚鐨勭姸鎬�
         return [
           "PENDING",
@@ -299,10 +318,16 @@
 
     // 姣忔鏄剧ず椤甸潰鏃跺埛鏂颁换鍔″垪琛ㄣ�佺粦瀹氳溅杈嗗拰娑堟伅鏁伴噺
     this.loadUserVehicle();
+    // 閲嶆柊鍔犺浇浠诲姟鍒楄〃鏃堕噸缃垎椤�
+    this.currentPage = 1;
+    this.hasMore = true;
     this.loadRunningTasks();
     this.loadUnreadMessageCount();
   },
   onPullDownRefresh() {
+    // 涓嬫媺鍒锋柊鏃堕噸缃垎椤靛弬鏁�
+    this.currentPage = 1;
+    this.hasMore = true;
     // 涓嬫媺鍒锋柊
     this.loadRunningTasks();
     setTimeout(() => {
@@ -310,6 +335,13 @@
     }, 1000);
   },
   methods: {
+    // 婊氬姩鍒板簳閮ㄦ椂鍔犺浇鏇村
+    onScrollToLower() {
+      if (this.hasMore && !this.loading) {
+        this.loadMoreTasks();
+      }
+    },
+    
     // 鑷姩璁㈤槄锛堝皬绋嬪簭鍚姩鏃惰皟鐢級
     autoSubscribeOnLaunch() {
       subscribeManager.autoSubscribe()
@@ -438,9 +470,16 @@
           this.loading = false;
           // 鏍规嵁鍚庣杩斿洖鐨勬暟鎹粨鏋勮繘琛岃В鏋�
           const data = response.data || response.rows || response || [];
-          // 杩囨护鍑烘湭瀹屾垚鐨勪换鍔�
-          const allTasks = Array.isArray(data) ? data : [];
-          this.taskList = allTasks
+          
+          // 濡傛灉鏄涓�椤碉紝鐩存帴鏇挎崲鏁版嵁锛涘惁鍒欒拷鍔犳暟鎹�
+          if (this.currentPage === 1) {
+            this.allTaskList = data;
+          } else {
+            this.allTaskList = [...this.allTaskList, ...data];
+          }
+          
+          // 鏍煎紡鍖栦换鍔℃暟鎹�
+          this.allTaskList = this.allTaskList
             .filter((task) => {
               // 鍙樉绀烘湭瀹屾垚鍜屾湭鍙栨秷鐨勪换鍔�
               return (
@@ -480,11 +519,30 @@
                 status: this.convertStatus(task.taskStatus), // 杞崲鐘舵�佹牸寮忎互鍏煎鏃I
               };
             });
+
+          // 鏇存柊鏄剧ず鐨勪换鍔″垪琛�
+          this.updateDisplayedTaskList();
         })
         .catch((error) => {
           this.loading = false;
           console.error("鍔犺浇浠诲姟鍒楄〃澶辫触:", error);
         });
+    },
+    
+    // 鏇存柊鏄剧ず鐨勪换鍔″垪琛紙鍓嶇鍒嗛〉锛�
+    updateDisplayedTaskList() {
+      const start = 0;
+      const end = this.currentPage * this.pageSize;
+      this.displayedTaskList = this.allTaskList.slice(start, end);
+      this.hasMore = end < this.allTaskList.length;
+    },
+    
+    // 鍔犺浇鏇村浠诲姟锛堝墠绔垎椤碉級
+    loadMoreTasks() {
+      if (!this.hasMore || this.loading) return;
+      
+      this.currentPage++;
+      this.updateDisplayedTaskList();
     },
 
     // 鏍煎紡鍖栧湴鍧� - 鍙樉绀�-鍓嶉潰鐨勯儴鍒�
@@ -1149,6 +1207,19 @@
         margin-top: 20rpx;
       }
     }
+    
+    .load-more {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      padding: 20rpx 0;
+      color: #999;
+      font-size: 28rpx;
+      
+      &.no-more {
+        color: #666;
+      }
+    }
   }
 }
 </style>
\ No newline at end of file
diff --git a/app/pages/task/index.vue b/app/pages/task/index.vue
index 559b246..36fdbb6 100644
--- a/app/pages/task/index.vue
+++ b/app/pages/task/index.vue
@@ -213,6 +213,14 @@
             <uni-icons type="info" size="40" color="#ccc"></uni-icons>
             <text>鏆傛棤浠诲姟鏁版嵁</text>
           </view>
+          <!-- 鍔犺浇鏇村鎻愮ず -->
+          <view class="load-more" v-if="filteredTaskList.length > 0 && hasMore">
+            <uni-icons type="spinner-cycle" size="20" color="#999"></uni-icons>
+            <text>姝e湪鍔犺浇鏇村鏁版嵁...</text>
+          </view>
+          <view class="load-more no-more" v-else-if="filteredTaskList.length > 0 && !hasMore">
+            <text>娌℃湁鏇村鏁版嵁浜�</text>
+          </view>
         </view>
       </scroll-view>
     </view>
@@ -251,7 +259,13 @@
         // 浠诲姟鍒楄〃
         taskList: [],
         loading: false,
-        refreshing: false
+        refreshing: false,
+        
+        // 鍒嗛〉鐩稿叧
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        hasMore: true
       }
     },
     computed: {
@@ -342,6 +356,12 @@
     onPullDownRefresh() {
       this.refreshList()
     },
+    // 鐩戝惉婊氬姩鍒板簳閮ㄤ簨浠�
+    onReachBottom() {
+      if (this.hasMore && !this.loading) {
+        this.loadMore()
+      }
+    },
     methods: {
       // 澶勭悊鍒锋柊浜嬩欢
       handleRefreshEvent() {
@@ -352,16 +372,27 @@
       // 鍔犺浇浠诲姟鍒楄〃
       loadTaskList() {
         this.loading = true
+        // 閲嶇疆鍒嗛〉鍙傛暟
+        this.currentPage = 1
+        this.hasMore = true
+        this.taskList = []
+        
         // 鍚庣浼氳嚜鍔ㄨ幏鍙栧綋鍓嶇敤鎴蜂俊鎭紝瀹炵幇缁煎悎鏌ヨ
         // 缁煎悎鏌ヨ锛氬綋鍓嶇敤鎴锋墍鍦ㄦ満鏋勪换鍔� + 褰撳墠鐢ㄦ埛鍒涘缓鐨勪换鍔� + 鍒嗛厤缁欏綋鍓嶇敤鎴风殑浠诲姟
         const queryParams = {
-          pageNum: 1,
-          pageSize: 100
+          pageNum: this.currentPage,
+          pageSize: this.pageSize,
+          orderByColumn: 'create_time',
+          isAsc: 'desc'
         }
         
         listTask(queryParams).then(response => {
           this.loading = false
           const data = response.data || response.rows || []
+          // 璁剧疆鎬绘暟鍜屾槸鍚︽湁鏇村鏁版嵁
+          this.total = response.total || data.length || 0
+          this.hasMore = data.length === this.pageSize
+          
           this.taskList = data.map(task => {
             // 浠巃ssignedVehicles鏁扮粍涓幏鍙栬溅杈嗕俊鎭�
             let vehicleInfo = '鏈垎閰嶈溅杈�'
@@ -389,6 +420,60 @@
           this.loading = false
           console.error('鍔犺浇浠诲姟鍒楄〃澶辫触:', error)
           this.$modal.showToast('鍔犺浇浠诲姟鍒楄〃澶辫触')
+        })
+      },
+      
+      // 鍔犺浇鏇村鏁版嵁
+      loadMore() {
+        if (!this.hasMore || this.loading) return
+        
+        this.loading = true
+        this.currentPage++
+        
+        const queryParams = {
+          pageNum: this.currentPage,
+          pageSize: this.pageSize,
+          orderByColumn: 'create_time',
+          isAsc: 'desc'
+        }
+        
+        listTask(queryParams).then(response => {
+          this.loading = false
+          const data = response.data || response.rows || []
+          // 鏇存柊鏄惁鏈夋洿澶氭暟鎹�
+          this.hasMore = data.length === this.pageSize
+          
+          const newTasks = data.map(task => {
+            // 浠巃ssignedVehicles鏁扮粍涓幏鍙栬溅杈嗕俊鎭�
+            let vehicleInfo = '鏈垎閰嶈溅杈�'
+            if (task.assignedVehicles && task.assignedVehicles.length > 0) {
+              // 濡傛灉鏈夊涓溅杈�,鏄剧ず绗竴涓�,骞舵爣娉ㄦ暟閲�
+              const firstVehicle = task.assignedVehicles[0]
+              vehicleInfo = firstVehicle.vehicleNo || '鏈煡杞︾墝'
+              if (task.assignedVehicles.length > 1) {
+                vehicleInfo += ` 绛�${task.assignedVehicles.length}杈哷
+              }
+            }
+            
+            return {
+              ...task,
+              // 鏍煎紡鍖栨樉绀哄瓧娈� - 浣跨敤鍚庣杩斿洖鐨刟ssignedVehicles鏁版嵁
+              vehicle: vehicleInfo,
+              vehicleList: task.assignedVehicles || [],
+              startLocation: this.formatAddress(task.departureAddress || task.startLocation || '鏈缃�'),
+              endLocation: this.formatAddress(task.destinationAddress || task.endLocation || '鏈缃�'),
+              startTime: task.plannedStartTime ? formatDateTime(task.plannedStartTime, 'YYYY-MM-DD HH:mm') : '鏈缃�',
+              assignee: task.assigneeName || '鏈垎閰�'
+            }
+          })
+          
+          // 灏嗘柊鏁版嵁杩藉姞鍒扮幇鏈夊垪琛ㄤ腑
+          this.taskList = [...this.taskList, ...newTasks]
+        }).catch(error => {
+          this.loading = false
+          this.currentPage-- // 鍑洪敊鏃跺洖閫�椤电爜
+          console.error('鍔犺浇鏇村浠诲姟澶辫触:', error)
+          this.$modal.showToast('鍔犺浇鏇村浠诲姟澶辫触')
         })
       },
       
@@ -1080,5 +1165,18 @@
         margin-top: 20rpx;
       }
     }
+    
+    .load-more {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      padding: 20rpx 0;
+      color: #999;
+      font-size: 28rpx;
+      
+      &.no-more {
+        color: #666;
+      }
+    }
   }
 </style>
\ No newline at end of file
diff --git a/app/pagesTask/components/DepartmentSelector.vue b/app/pagesTask/components/DepartmentSelector.vue
index 3e2b5ef..a6c7544 100644
--- a/app/pagesTask/components/DepartmentSelector.vue
+++ b/app/pagesTask/components/DepartmentSelector.vue
@@ -100,10 +100,11 @@
     departmentOptions: {
       immediate: true,
       handler() {
-        if (this.value) {
-          this.updateSelectedIndex(this.value)
-        } else if (this.departmentId) {
+        // 浼樺厛浣跨敤绉戝ID杩涜鍖归厤锛屽鏋滄病鏈夌瀹D鍐嶄娇鐢ㄧ瀹ゅ悕绉�
+        if (this.departmentId) {
           this.updateSelectedIndexById(this.departmentId)
+        } else if (this.value) {
+          this.updateSelectedIndex(this.value)
         }
       }
     }
@@ -225,6 +226,4 @@
       color: #999;
     }
   }
-}
-</style>
-
+}
\ No newline at end of file
diff --git a/app/pagesTask/edit-emergency.vue b/app/pagesTask/edit-emergency.vue
index 4790118..24f3a97 100644
--- a/app/pagesTask/edit-emergency.vue
+++ b/app/pagesTask/edit-emergency.vue
@@ -231,7 +231,7 @@
 import uniDatetimePicker from '@/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue'
 import uniPopup from '@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue'
 import { getTask, updateTask } from "@/api/task"
-import { baiduDistanceByAddress } from "@/api/map"
+import { tiandituDistanceByAddress } from "@/api/map"
 import { calculateTransferPrice } from "@/api/price"
 import MapSelector from './components/map-selector.vue'
 import VehicleSelector from './components/VehicleSelector.vue'
@@ -569,6 +569,7 @@
         this.taskForm.hospitalOut.department = '鍏跺畠'
         this.taskForm.hospitalOut.departmentId = null
       }
+      // 娉ㄦ剰锛氶�夋嫨鏂扮殑鍖婚櫌鏃讹紝涓嶈嚜鍔ㄦ洿鏂扮瀹や俊鎭紝淇濇寔鐢ㄦ埛宸查�夋嫨鐨勭瀹�
       
       // 濡傛灉杞叆鍦板潃宸插~鍐�,鑷姩璁$畻璺濈
       if (this.taskForm.hospitalIn.address) {
@@ -599,6 +600,7 @@
         this.taskForm.hospitalIn.department = '鍏跺畠'
         this.taskForm.hospitalIn.departmentId = null
       }
+      // 娉ㄦ剰锛氶�夋嫨鏂扮殑鍖婚櫌鏃讹紝涓嶈嚜鍔ㄦ洿鏂扮瀹や俊鎭紝淇濇寔鐢ㄦ埛宸查�夋嫨鐨勭瀹�
       
       // 濡傛灉杞嚭鍦板潃宸插~鍐�,鑷姩璁$畻璺濈
       if (this.taskForm.hospitalOut.address) {
@@ -621,6 +623,7 @@
     
     // 杞嚭绉戝鍙樺寲
     onHospitalOutDepartmentChange(data) {
+      console.log('杞嚭绉戝鍙樺寲:', data)
       if (data && typeof data === 'object') {
         this.taskForm.hospitalOut.department = data.department
         this.taskForm.hospitalOut.departmentId = data.departmentId
@@ -632,6 +635,7 @@
     
     // 杞叆绉戝鍙樺寲
     onHospitalInDepartmentChange(data) {
+      console.log('杞叆绉戝鍙樺寲:', data)
       if (data && typeof data === 'object') {
         this.taskForm.hospitalIn.department = data.department
         this.taskForm.hospitalIn.departmentId = data.departmentId
@@ -826,6 +830,12 @@
         return false
       }
       
+      // 楠岃瘉鑱旂郴鐢佃瘽鏍煎紡
+      if (this.taskForm.patient.phone && !/^1[3-9]\d{9}$/.test(this.taskForm.patient.phone)) {
+        this.$modal.showToast('璇疯緭鍏ユ纭殑鎵嬫満鍙风爜')
+        return false
+      }
+      
       if (!this.taskForm.hospitalOut.name) {
         this.$modal.showToast('璇疯緭鍏ヨ浆鍑哄尰闄㈠悕绉�')
         return false
@@ -836,6 +846,11 @@
         return false
       }
       
+      if (!this.taskForm.hospitalOut.department) {
+        this.$modal.showToast('璇烽�夋嫨杞嚭绉戝')
+        return false
+      }
+      
       if (!this.taskForm.hospitalIn.name) {
         this.$modal.showToast('璇疯緭鍏ヨ浆鍏ュ尰闄㈠悕绉�')
         return false
@@ -843,6 +858,46 @@
       
       if (!this.taskForm.hospitalIn.address) {
         this.$modal.showToast('璇烽�夋嫨杞叆鍖婚櫌鍦板潃')
+        return false
+      }
+      
+      if (!this.taskForm.hospitalIn.department) {
+        this.$modal.showToast('璇烽�夋嫨杞叆绉戝')
+        return false
+      }
+      
+      // 楠岃瘉鎴愪氦浠峰繀濉�
+      if (!this.taskForm.price || this.taskForm.price.trim() === '') {
+        this.$modal.showToast('璇疯緭鍏ユ垚浜や环')
+        return false
+      }
+      
+      // 楠岃瘉鎴愪氦浠锋牸寮忥紙蹇呴』鏄暟瀛楋級
+      if (isNaN(this.taskForm.price) || parseFloat(this.taskForm.price) < 0) {
+        this.$modal.showToast('璇疯緭鍏ユ湁鏁堢殑鎴愪氦浠�')
+        return false
+      }
+      
+      // 楠岃瘉鎮h�呰韩浠借瘉鏍煎紡锛堝鏋滃~鍐欎簡锛�
+      if (this.taskForm.patient.idCard && this.taskForm.patient.idCard.trim() !== '') {
+        const idCard = this.taskForm.patient.idCard.trim()
+        // 绠�鍗曢獙璇�18浣嶈韩浠借瘉
+        if (!/^\d{17}[\dXx]$/.test(idCard)) {
+          this.$modal.showToast('璇疯緭鍏ユ纭殑18浣嶈韩浠借瘉鍙风爜')
+          return false
+        }
+      }
+      
+      // 楠岃瘉鐥呮儏鑷冲皯閫夋嫨涓�椤规垨濉啓鍏朵粬鎻忚堪
+      if ((!this.selectedDiseases || this.selectedDiseases.length === 0) && 
+          (!this.taskForm.patient.otherCondition || this.taskForm.patient.otherCondition.trim() === '')) {
+        this.$modal.showToast('璇烽�夋嫨鐥呮儏鎴栧~鍐欏叾浠栫梾鎯呮弿杩�')
+        return false
+      }
+      
+      // 楠岃瘉鎵ц浜哄憳鑷冲皯閫夋嫨涓�涓�
+      if (!this.selectedStaff || this.selectedStaff.length === 0) {
+        this.$modal.showToast('璇疯嚦灏戦�夋嫨涓�涓墽琛屼汉鍛�')
         return false
       }
       
@@ -1008,7 +1063,8 @@
       
       // 璋冪敤鐧惧害鍦板浘API璁$畻璺濈
       const region = this.selectedRegion || '骞垮窞'
-      baiduDistanceByAddress(fromAddress, region, toAddress, region)
+      //baiduDistanceByAddress(fromAddress, region, toAddress, region)
+      tiandituDistanceByAddress(fromAddress,toAddress)
         .then(response => {
           uni.hideLoading()
           
@@ -1333,5 +1389,4 @@
       }
     }
   }
-}
-</style>
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index f0a97bc..0277f9e 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -119,6 +119,7 @@
     
     # 鎬ユ晳杞繍鍒涘缓鎺ュ彛璺緞 (鍙�夛紝榛樿鍊煎涓�)
     emergency-create-path: /admin_save_19.gds
+    emergency-update-path: /admin_save_20.asp
     
     # HTTP杩炴帴瓒呮椂鏃堕棿(姣) (鍙�夛紝榛樿30绉�)
     connect-timeout: 30000
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.java
index 55b9de2..2c50ee0 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.java
@@ -17,6 +17,8 @@
     
     /** 鎬ユ晳杞繍鍒涘缓鎺ュ彛璺緞 */
     private String emergencyCreatePath = "/admin_save_19.gds";
+
+    private String emergencyUpdatePath="/admin_save_20.asp";
     
     /** 璋冨害鍗曞垱寤烘帴鍙h矾寰� */
     private String dispatchCreatePath = "/admin_save_24.gds";
@@ -129,6 +131,10 @@
     public String getEmergencyCreateUrl() {
         return baseUrl + emergencyCreatePath;
     }
+
+    public String getEmergencyUpdateUrl(){
+        return baseUrl+emergencyUpdatePath;
+    }
     
     /**
      * 鑾峰彇瀹屾暣鐨勮皟搴﹀崟鍒涘缓URL
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java
index 7958a19..6647b55 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java
@@ -78,8 +78,7 @@
     /** 杞叆鍖婚櫌淇℃伅 */
     private HospitalInfo hospitalIn;
 
-    /** 杞繍鍏噷鏁� */
-    private BigDecimal transferDistance;
+
 
     /** 鎴愪氦浠� */
     private BigDecimal price;
@@ -473,13 +472,6 @@
         this.hospitalIn = hospitalIn;
     }
 
-    public BigDecimal getTransferDistance() {
-        return transferDistance;
-    }
-
-    public void setTransferDistance(BigDecimal transferDistance) {
-        this.transferDistance = transferDistance;
-    }
 
     public BigDecimal getPrice() {
         return price;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java b/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java
index 29ba4e0..79cccc3 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskServiceOrderSyncEvent.java
@@ -1,10 +1,16 @@
 package com.ruoyi.system.event;
 
+import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer;
+
 /**
  * 鏈嶅姟鍗曞悓姝ヤ换鍔℃垚鍔熷悗瑙﹀彂浜嬩欢
  */
 public class TaskServiceOrderSyncEvent extends TaskEvent{
 
+    private Boolean needSync;
+    public Boolean getNeedSync(){
+        return this.needSync;
+    }
     private Long serviceOrderId;
     public Long getServiceOrderId(){
         return this.serviceOrderId;
@@ -17,8 +23,9 @@
      * @param taskCode
      * @param serviceOrderId
      */
-    public TaskServiceOrderSyncEvent(Object source, Long taskId, String taskCode,Long serviceOrderId) {
+    public TaskServiceOrderSyncEvent(Object source, Long taskId, String taskCode,Long serviceOrderId,Boolean isNeedSync) {
         super(source, taskId, taskCode);
         this.serviceOrderId=serviceOrderId;
+        this.needSync=isNeedSync;
     }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskUpdateEvent.java b/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskUpdateEvent.java
new file mode 100644
index 0000000..852f38d
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/event/TaskUpdateEvent.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.event;
+
+
+/**
+ * 浠诲姟鏇存柊浜嬩欢
+ */
+public class TaskUpdateEvent extends TaskEvent{
+    private String taskType;
+    public String getTaskType(){
+        return this.taskType;
+    }
+    public TaskUpdateEvent(Object source, Long taskId, String taskCode,String taskType) {
+        super(source, taskId, taskCode);
+        this.taskType = taskType;
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java
index 8cc98ed..588e0e7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java
@@ -2,10 +2,10 @@
 
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.utils.DeptUtil;
+import com.ruoyi.common.utils.LongUtil;
 import com.ruoyi.system.domain.*;
-import com.ruoyi.system.event.TaskDispatchSyncEvent;
-import com.ruoyi.system.service.ISysDeptService;
-import com.ruoyi.system.service.ISysTaskAssigneeService;
+import com.ruoyi.system.event.*;
+import com.ruoyi.system.service.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,16 +14,11 @@
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.system.event.TaskCreatedEvent;
-import com.ruoyi.system.event.TaskAssignedEvent;
-import com.ruoyi.system.event.TaskStatusChangedEvent;
 import com.ruoyi.system.mapper.SysMessageMapper;
 import com.ruoyi.system.mapper.SysUserMapper;
 import com.ruoyi.system.mapper.SysTaskMapper;
 import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
 import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.system.service.INotifyTaskService;
-import com.ruoyi.system.service.INotifyDispatchService;
 
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
@@ -85,6 +80,12 @@
                    sendDispatchNotify(assigneeIds, task.getCreatorId(), event.getTaskId(),task.getShowTaskCode(), buildNotifyContent(task, emergency));
                }
             }
+
+            Long taskId= event.getTaskId();
+            Long dispatchOrdId= event.getDispatchOrderId();
+            Long serviceOrdId= event.getServiceOrderId();
+            Integer oaUserID= event.getOaUserId();
+            legacySystemSyncService.syncTaskAttachment(taskId, dispatchOrdId, serviceOrdId, oaUserID);
 
         }catch (Exception ex){
             log.error("澶勭悊浠诲姟娲惧彂鍚屾浜嬩欢澶辫触", ex);
@@ -221,6 +222,31 @@
     }
 
 
+
+
+    @Autowired
+    private ILegacySystemSyncService legacySystemSyncService;
+
+    @Async
+    @EventListener
+    public void handleTaskUpdateEvent(TaskUpdateEvent event){
+        log.info("鏀跺埌浠诲姟鏇存柊浜嬩欢锛屼换鍔D锛歿}锛屼换鍔$紪鍙凤細{}", event.getTaskId(), event.getTaskCode());
+        legacySystemSyncService.resyncDispatchOrderToLegacy(event.getTaskId());
+
+    }
+    //鍦ㄨ繖閲岀洃鍚淳鍙戠殑浜嬩欢
+    @Async
+    @EventListener
+    public void handleTaskServiceOrderSyncEvent(TaskServiceOrderSyncEvent event) {
+//        log.info("鏀跺埌浠诲姟鏈嶅姟鍗曞悓姝ヤ簨浠讹紝浠诲姟ID锛歿}锛屼换鍔$紪鍙凤細{}锛屾湇鍔″崟ID锛歿}", event.getTaskId(), event.getTaskCode(), event.getServiceOrderId());
+       Long dispatchOrderId= legacySystemSyncService.syncDispatchOrderToLegacy(event.getTaskId());
+//       if(LongUtil.isNotEmpty(dispatchOrderId)){
+//           //鏇存柊needsync涓�0
+//
+//       }
+    }
+
+
     /**
      * 鐩戝惉浠诲姟鍒嗛厤浜嬩欢
      * 鍒涘缓閫氱煡浠诲姟锛岀敱閫氱煡鍒嗗彂鏈嶅姟鍐冲畾鍙戦�佹笭閬�
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.java
index 4f292d9..7187a02 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.java
@@ -9,7 +9,8 @@
  * @date 2024-01-20
  */
 public interface ILegacySystemSyncService {
-    
+
+
     /**
      * 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
      * 
@@ -40,7 +41,9 @@
      * @return 鏃х郴缁熻繑鍥炵殑DispatchOrdID锛屽け璐ヨ繑鍥瀗ull
      */
     Long syncDispatchOrderToLegacy(Long taskId);
-    
+
+    void syncTaskAttachment(Long taskId, Long dispatchOrdId, Long serviceOrdId, Integer oaUserID);
+
     /**
      * 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
      * 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskDispatchSyncService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskDispatchSyncService.java
new file mode 100644
index 0000000..ae92886
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskDispatchSyncService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.service;
+
+/**
+ * 鏂扮郴缁熶腑鍚屾璋冨害鍒版棫绯荤粺
+ */
+public interface ITaskDispatchSyncService {
+
+    Long syncDispatch(Long taskId);
+
+    /**
+     * 鍚屾璋冨害鍗曠殑鏁版嵁
+     * @param taskId
+     * @return
+     */
+    boolean resyncDispatchOrderToLegacy(Long taskId);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TaskEmergencySyncService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TaskEmergencySyncService.java
new file mode 100644
index 0000000..d971900
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TaskEmergencySyncService.java
@@ -0,0 +1,13 @@
+package com.ruoyi.system.service;
+
+/**
+ * 鏂扮郴缁熷悓姝ュ埌鏃х郴缁燂紙鏈嶅姟鍗� 锛夊悓姝�
+ */
+public interface TaskEmergencySyncService {
+    /**
+     * 鏂扮郴缁熷悓姝ュ埌鏃х郴缁燂紙鏈嶅姟鍗� 锛夊悓姝�
+     */
+    Long syncEmergency(Long taskId);
+
+
+}
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 d871794..f78b7ff 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
@@ -1,25 +1,10 @@
 package com.ruoyi.system.service.impl;
 
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.text.SimpleDateFormat;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import java.security.cert.X509Certificate;
-import com.ruoyi.common.utils.MapValueUtils;
+
+import com.ruoyi.common.utils.LongUtil;
 import com.ruoyi.system.domain.*;
-import com.ruoyi.system.event.TaskDispatchSyncEvent;
-import com.ruoyi.system.event.TaskServiceOrderSyncEvent;
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.service.*;
 import com.ruoyi.system.task.ITaskAttachmentService;
@@ -27,18 +12,9 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import com.ruoyi.common.config.LegacySystemConfig;
-import com.ruoyi.common.utils.MapValueUtils;
-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.vo.TaskCreateVO;
-import com.ruoyi.system.utils.TaskStatusConverter;
-import org.springframework.util.CollectionUtils;
 
 /**
  * 鏃х郴缁熷悓姝ervice涓氬姟灞傚鐞�
@@ -96,141 +72,23 @@
     
     @Autowired
     private LegacyTransferSyncMapper legacyTransferSyncMapper;
-    
-    
-    public Map<String,Object> getLegacyDispatchByDispatchId(Long dispatchId) {
-        List<Map<String, Object>> result = legacyTransferSyncMapper.selectByDispatchId(dispatchId);
-        if(!CollectionUtils.isEmpty(result)){
-            return result.get(0);
-        }else{
-            return null;
-        }
-    }
 
 
-    private Map<String,Object> getLegacyByServiceOrdId(Long serviceOrdId) {
-        List<Map<String, Object>> result = legacyTransferSyncMapper.selectByServiceOrdId(serviceOrdId);
-        if(!CollectionUtils.isEmpty(result)){
-            return result.get(0);
-        }else{
-            return null;
-        }
-    }
-    /**
-     * 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
-     */
+    @Autowired
+    private TaskEmergencySyncService taskEmergencySyncService;
+
+
+    @Autowired
+    private ITaskDispatchSyncService taskDispatchSyncService;
+
+
+
+
     @Override
     public Long syncEmergencyTaskToLegacy(Long taskId) {
-        if (!legacyConfig.isEnabled()) {
-            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囦换鍔D: {}", taskId);
-            return null;
-        }
-        
-        try {
-            // 鏌ヨ浠诲姟淇℃伅
-            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
-            if (task == null) {
-                log.error("浠诲姟涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            // 鍙悓姝ユ�ユ晳杞繍浠诲姟
-            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
-                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囧悓姝ワ紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
-            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
-            if (emergency == null) {
-                log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            // 濡傛灉宸茬粡鍚屾杩囷紝涓嶅啀閲嶅鍚屾
-            if (emergency.getLegacyServiceOrdId() != null && emergency.getLegacyServiceOrdId() > 0) {
-//                log.info("浠诲姟宸插悓姝ヨ繃锛屼换鍔D: {}, ServiceOrdID: {}", taskId, emergency.getLegacyServiceOrdId());
-                return emergency.getLegacyServiceOrdId();
-            }
-            
-            // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
-            emergency.setSyncStatus(1);
-            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-            
-            // 鏋勫缓璇锋眰鍙傛暟
-            Map<String, String> params = buildSyncParams(task, emergency);
-            
-            // 鍙戦�丠TTP璇锋眰
-            String response = sendHttpPost(legacyConfig.getEmergencyCreateUrl(), params);
-            
-            // 瑙f瀽鍝嶅簲
-            Long serviceOrdId = parseResponse(response);
-            
-            if (serviceOrdId != null && serviceOrdId > 0) {
-                // 鍚屾鎴愬姛锛屾洿鏂拌褰�
-                emergency.setLegacyServiceOrdId(serviceOrdId);
-                emergency.setSyncStatus(2); // 鍚屾鎴愬姛
-                emergency.setSyncTime(new Date());
-                emergency.setSyncErrorMsg(null);
-                Map<String, Object> legacy = getLegacyByServiceOrdId(serviceOrdId);
-                String serviceOrdNo = MapValueUtils.getStringValue(legacy, "ServiceOrdNo");
-                if(serviceOrdNo!=null) {
-                    emergency.setLegacyServiceOrdNo(serviceOrdNo);
-                }
-                String serviceOrdClass = MapValueUtils.getStringValue(legacy, "ServiceOrdClass");
-                if(serviceOrdClass!=null) {
-                    emergency.setLegacyServiceOrdClass(serviceOrdClass);
-                }
-                Date serviceCCTime = MapValueUtils.getDateValue(legacy, "ServiceOrd_CC_Time");
-                if(serviceCCTime!=null) {
-                    emergency.setLegacyServiceNsTime(serviceCCTime);
-                }
-                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-                
-                // 鏇存柊浠诲姟涓昏〃鍚屾鏍囪
-                task.setLegacySynced(1);
-                sysTaskMapper.updateSysTask(task);
-
-                eventPublisher.publishEvent(new TaskServiceOrderSyncEvent(this, taskId, task.getTaskCode(), serviceOrdId));
-//                log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
-                return serviceOrdId;
-            } else {
-                // 鍚屾澶辫触
-                emergency.setSyncStatus(3); // 鍚屾澶辫触
-                emergency.setSyncTime(new Date());
-                emergency.setSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑ServiceOrdID: " + response);
-                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-                
-                log.error("浠诲姟鍚屾澶辫触锛屼换鍔D: {}, 鍝嶅簲: {}", taskId, response);
-                return null;
-            }
-            
-        } catch (Exception e) {
-            log.error("鍚屾浠诲姟鍒版棫绯荤粺寮傚父锛屼换鍔D: {}", taskId, e);
-            
-            // 鏇存柊鍚屾鐘舵�佷负澶辫触
-            try {
-                SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
-                if (emergency != null) {
-                    emergency.setSyncStatus(3); // 鍚屾澶辫触
-                    emergency.setSyncTime(new Date());
-                    emergency.setSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
-                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-                }
-            } catch (Exception ex) {
-                log.error("鏇存柊鍚屾鐘舵�佸け璐�", ex);
-            }
-            
-            return null;
-        }
+        return taskEmergencySyncService.syncEmergency(taskId);
     }
 
-    //鍦ㄨ繖閲岀洃鍚淳鍙戠殑浜嬩欢
-    @EventListener
-    public void handleTaskServiceOrderSyncEvent(TaskServiceOrderSyncEvent event) {
-//        log.info("鏀跺埌浠诲姟鏈嶅姟鍗曞悓姝ヤ簨浠讹紝浠诲姟ID锛歿}锛屼换鍔$紪鍙凤細{}锛屾湇鍔″崟ID锛歿}", event.getTaskId(), event.getTaskCode(), event.getServiceOrderId());
-        syncDispatchOrderToLegacy(event.getTaskId());
-    }
     /**
      * 鎵归噺鍚屾鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟
      * 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
@@ -261,7 +119,7 @@
                 int pageSuccessCount = 0;
                 for (SysTaskEmergency emergency : pendingTasks) {
                     Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId());
-                    if (serviceOrdId != null && serviceOrdId > 0) {
+                    if (LongUtil.isNotEmpty(serviceOrdId)) {
                         pageSuccessCount++;
                     }
                     
@@ -314,12 +172,17 @@
             
             // 閲嶆柊鍚屾
             Long serviceOrdId = syncEmergencyTaskToLegacy(taskId);
-            return serviceOrdId != null && serviceOrdId > 0;
+            return LongUtil.isNotEmpty(serviceOrdId);
             
         } catch (Exception e) {
             log.error("閲嶆柊鍚屾浠诲姟澶辫触锛屼换鍔D: {}", taskId, e);
             return false;
         }
+    }
+
+    @Override
+    public Long syncDispatchOrderToLegacy(Long taskId) {
+        return taskDispatchSyncService.syncDispatch(taskId);
     }
 
 
@@ -342,196 +205,17 @@
             }
         });
     }
-    /**
-     * 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛�
-     */
+
+
     @Override
-    public Long syncDispatchOrderToLegacy(Long taskId) {
-        if (!legacyConfig.isEnabled()) {
-            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
-            return null;
-        }
-        
-        try {
-            // 鏌ヨ浠诲姟淇℃伅
-            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
-            if (task == null) {
-                log.error("浠诲姟涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            // 鍙悓姝ユ�ユ晳杞繍浠诲姟
-            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
-                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
-                return null;
-            }
-            
-            // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
-            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
-            if (emergency == null) {
-                log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            // 濡傛灉宸茬粡鍚屾杩囷紝涓嶅啀閲嶅鍚屾
-            if (emergency.getLegacyDispatchOrdId() != null && emergency.getLegacyDispatchOrdId() > 0) {
-//                log.info("璋冨害鍗曞凡鍚屾杩囷紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
-                return emergency.getLegacyDispatchOrdId();
-            }
-
-            Long serviceOrdId=emergency.getLegacyServiceOrdId();
-            // 蹇呴』鍏堝悓姝ユ湇鍔″崟
-            if (serviceOrdId == null || serviceOrdId <= 0) {
-                log.warn("鏈嶅姟鍗曟湭鍚屾锛屾棤娉曞悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
-                return null;
-            }
-
-            // ====== 鍓嶇疆鏍¢獙锛氱‘淇濅换鍔℃暟鎹畬鏁� ======
-            
-            // 1. 妫�鏌ユ槸鍚﹀凡鍒嗛厤杞﹁締
-            List<SysTaskVehicle> taskVehicles = sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId);
-            if (taskVehicles == null || taskVehicles.isEmpty()) {
-                log.warn("浠诲姟鏈垎閰嶈溅杈嗭紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            // 2. 妫�鏌ユ槸鍚﹀凡鍒嗛厤鎵ц浜哄憳
-            List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
-            if (taskAssignees == null || taskAssignees.isEmpty()) {
-                log.warn("浠诲姟鏈垎閰嶆墽琛屼汉鍛橈紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            // 3. 妫�鏌ラ绾︽椂闂存槸鍚︽湁鏁堬紙蹇呴』澶т簬1970骞达級
-            if (task.getPlannedStartTime() == null) {
-                log.warn("浠诲姟鏈缃绾︽椂闂达紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            // 妫�鏌ラ绾︽椂闂存槸鍚﹀ぇ浜�1970-01-01锛堟椂闂存埑0瀵瑰簲1970-01-01 00:00:00锛�
-            long timestamp1970 = 0L;
-            if (task.getPlannedStartTime().getTime() <= timestamp1970) {
-                log.warn("浠诲姟棰勭害鏃堕棿鏃犳晥锛堝皬浜庣瓑浜�1970骞达級锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}, 棰勭害鏃堕棿: {}", 
-                    taskId, task.getPlannedStartTime());
-                return null;
-            }
-            
-            // 4. 妫�鏌ヨ浆鍑哄尰闄俊鎭�
-            if (StringUtils.isEmpty(emergency.getHospitalOutName())) {
-                log.warn("浠诲姟鏈缃浆鍑哄尰闄紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            if (StringUtils.isEmpty(emergency.getHospitalOutAddress())) {
-                log.warn("浠诲姟鏈缃浆鍑哄尰闄㈠湴鍧�锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
-                return null;
-            }
-            
-            // 5. 妫�鏌ヨ浆鍏ュ尰闄俊鎭�
-            if (StringUtils.isEmpty(emergency.getHospitalInName())) {
-                log.warn("浠诲姟鏈缃浆鍏ュ尰闄紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            if (StringUtils.isEmpty(emergency.getHospitalInAddress())) {
-                log.warn("浠诲姟鏈缃浆鍏ュ尰闄㈠湴鍧�锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
-                return null;
-            }
-            
-            // 6. 妫�鏌ユ偅鑰呭熀鏈俊鎭�
-            if (StringUtils.isEmpty(emergency.getPatientName())) {
-                log.warn("浠诲姟鏈缃偅鑰呭鍚嶏紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            if (StringUtils.isEmpty(emergency.getPatientPhone())) {
-                log.warn("浠诲姟鏈缃偅鑰呯數璇濓紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
-                return null;
-            }
-            
-            log.info("浠诲姟鏁版嵁鏍¢獙閫氳繃锛屽紑濮嬪悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
-
-            // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
-            emergency.setDispatchSyncStatus(1);
-            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-
-            SysUser u=sysUserMapper.selectUserById(task.getCreatorId());
-            Integer oaUserID= u.getOaUserId();
-            
-            // 鏋勫缓璇锋眰鍙傛暟
-            Map<String, String> params = buildDispatchOrderParams(task, emergency);
-            
-           
-            // 鍙戦�丠TTP璇锋眰
-            String response = sendHttpPost(legacyConfig.getDispatchCreateUrl(), params);
-            
-            // 瑙f瀽鍝嶅簲
-            Long dispatchOrdId = parseResponse(response);
-            
-            if (dispatchOrdId != null && dispatchOrdId > 0) {
-                // 鍚屾鎴愬姛锛屾洿鏂拌褰�
-                emergency.setLegacyDispatchOrdId(dispatchOrdId);
-                emergency.setDispatchSyncStatus(2); // 鍚屾鎴愬姛
-                emergency.setDispatchSyncTime(new Date());
-                emergency.setDispatchSyncErrorMsg(null);
-                //鏇存柊璋冨害鍗曚俊鎭紑鍒版柊绯荤粺
-                Map<String,Object> dispatchInfo = this.getLegacyDispatchByDispatchId(dispatchOrdId);
-                if (dispatchInfo != null) {
-                    emergency.setLegacyDispatchNsTime(MapValueUtils.getDateValue(dispatchInfo, "DispatchOrd_NS_Time")); // 鍚屾鎴愬姛
-                    emergency.setLegacyDispatchOrdClass(MapValueUtils.getStringValue(dispatchInfo, "DispatchOrdClass")); // 鍚屾鎴愬姛
-                    emergency.setLegacyDispatchOrdNo(MapValueUtils.getStringValue(dispatchInfo, "DispatchOrdNo")); // 鍚屾鎴愬姛
-                    emergency.setLegacyServiceNsTime(MapValueUtils.getDateValue(dispatchInfo, "ServiceOrd_CC_Time")); // 鍚屾鎴愬姛
-                    emergency.setLegacyServiceOrdClass(MapValueUtils.getStringValue(dispatchInfo, "ServiceOrdClass")); // 鍚屾鎴愬姛
-                }
-                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-
-                eventPublisher.publishEvent(new TaskDispatchSyncEvent(this, taskId, task.getTaskCode(),serviceOrdId, dispatchOrdId, oaUserID));
-
-//                log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
-                return dispatchOrdId;
-            } else {
-                // 鍚屾澶辫触
-                emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
-                emergency.setDispatchSyncTime(new Date());
-                emergency.setDispatchSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑DispatchOrdID: " + response);
-                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-                
-                log.error("璋冨害鍗曞悓姝ュけ璐ワ紝浠诲姟ID: {}, 鍝嶅簲: {}", taskId, response);
-                return null;
-            }
-            
-        } catch (Exception e) {
-            log.error("鍚屾璋冨害鍗曞埌鏃х郴缁熷紓甯革紝浠诲姟ID: {}", taskId, e);
-            
-            // 鏇存柊鍚屾鐘舵�佷负澶辫触
-            try {
-                SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
-                if (emergency != null) {
-                    emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
-                    emergency.setDispatchSyncTime(new Date());
-                    emergency.setDispatchSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
-                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-                }
-            } catch (Exception ex) {
-                log.error("鏇存柊璋冨害鍗曞悓姝ョ姸鎬佸け璐�", ex);
-            }
-            
-            return null;
-        }
-    }
-
-    @EventListener
-    public void handleTaskDispatchSyncEvent(TaskDispatchSyncEvent event) {
-        Long taskId = event.getTaskId();
-        Long dispatchOrdId = event.getDispatchOrderId();
-        Long serviceOrdId = event.getServiceOrderId();
-        Integer oaUserID = event.getOaUserId();
+    public void syncTaskAttachment(Long taskId, Long dispatchOrdId, Long serviceOrdId, Integer oaUserID){
         List<SysTaskAttachment> taskAttachments= sysTaskService.getAttachmentsByTaskId(taskId);
         if (taskAttachments != null && !taskAttachments.isEmpty()) {
             //鍚屾闄勪欢
             this.syncAttachmentToLegacy(taskAttachments,serviceOrdId,dispatchOrdId,oaUserID);
         }
     }
+
     /**
      * 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
      * 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
@@ -599,915 +283,27 @@
             return 0;
         }
     }
-    
-    /**
-     * 鏋勫缓璋冨害鍗曞悓姝ュ弬鏁�
-     */
-    private Map<String, String> buildDispatchOrderParams(SysTask task, SysTaskEmergency emergency) {
-        Map<String, String> params = new HashMap<>();
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        
-        // 鑾峰彇绠$悊鍛業D锛堝垱寤轰汉ID瀵瑰簲鐨凮A_UserID锛�
-        String adminID = this.getAdminID(task);
-        
-        // 鑾峰彇璋冨害鍗曠被鍨嬶紙浠庝换鍔℃墍灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佽幏鍙栵級
-        String dispatchOrdClass = "SA"; // 榛樿鍊�
-        if (task.getDeptId() != null) {
-            try {
-                SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
-                if (dept != null && StringUtils.isNotEmpty(dept.getDispatchOrderClass())) {
-                    dispatchOrdClass = dept.getDispatchOrderClass();
-//                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 璋冨害鍗曠紪鐮�: {}", task.getDeptId(), dispatchOrdClass);
-                }
-            } catch (Exception e) {
-                log.error("鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: {}", task.getDeptId(), e);
-            }
-        }
-        params.put("AdminID", adminID);
-        
-        // 鍩烘湰淇℃伅
-        params.put("DispatchOrdClass", dispatchOrdClass);
-        params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString());
-        params.put("DispatchOrdState", "1"); // 璋冨害鍗曠姸鎬�
-        
-        // 鏃堕棿淇℃伅
-        if (task.getPlannedStartTime() != null) {
-            params.put("DispatchOrdTraSDTime", sdf.format(task.getPlannedStartTime())); // 鎷熷嚭鍙戞椂闂�
-        } else {
-            params.put("DispatchOrdTraSDTime", "");
-        }
-        params.put("DispatchOrd_NS_Time", task.getCreateTime() != null ? sdf.format(task.getCreateTime()) : sdf.format(new Date())); // 寮�鍗曟椂闂�
-        
-        // 杞﹁締淇℃伅 - 浠庝换鍔″叧鑱旂殑杞﹁締鑾峰彇CarID
-        Long carId = getTaskVehicleCarId(task.getTaskId());
-        params.put("DispatchOrdCarID", carId.toString());
-        
-        // 鑱旂郴浜轰俊鎭�
-        params.put("DispatchOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
-        params.put("DispatchOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
-        params.put("ServiceOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
-        params.put("ServiceOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
-        params.put("ServiceOrdPtName", StringUtils.nvl(emergency.getPatientName(), ""));
-        params.put("ServiceOrdTraStreet",StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), "")));
-        // 鍦板潃淇℃伅
-        params.put("DispatchOrdTraStreet", StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), "")));
-        params.put("DispatchOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), "")));
-        params.put("DispatchOrdTraVia", ""); // 瀹為檯閫旂粡鍦�
-        
-        // 鎿嶄綔鍛戒护
-        params.put("DispatchOrd_Check", "0"); // 3=鐩存帴寮哄埗瀹屾垚
-        
-        // 缁╂晥鍜岃垂鐢細纭繚鏁板�煎瓧娈典笉涓簄ull
-        String transferPrice = "0";
-        if (emergency.getTransferPrice() != null) {
-            try {
-                transferPrice = emergency.getTransferPrice().toString();
-                if (transferPrice.contains(".")) {
-                    transferPrice = new java.math.BigDecimal(transferPrice).stripTrailingZeros().toPlainString();
-                }
-            } catch (Exception e) {
-                log.warn("杞崲杞繍浠锋牸澶辫触锛屼换鍔D: {}, 浣跨敤榛樿鍊�0", task.getTaskId(), e);
-                transferPrice = "0";
-            }
-        }
-        params.put("DispatchOrdPerfomance", transferPrice);
-        params.put("StretcherMoney", "0"); // 鎶媴鏋惰垂
-        params.put("AddMoneyType", ""); // 闄勫姞椤圭洰
-        params.put("AddMoney", "0"); // 闄勫姞椤圭洰璐圭敤
-        params.put("AddMoneyExplain", ""); // 闄勫姞椤圭洰璇存槑
-        
-        // 浜哄憳淇℃伅
-        params.put("EntourageName_aid1", ""); // 澶栨彺浜哄憳1
-        params.put("EntourageName_aid2", ""); // 澶栨彺浜哄憳2
-        params.put("DispatchOrd_NS_ID", adminID); // 璋冨害浜哄憳ID
-        params.put("RecommendedCar", ""); // 鎸囧畾杞﹀瀷
-        params.put("ServiceOrdTaskRemarks", StringUtils.nvl(task.getTaskDescription(), "")); // 鍖绘姢鍙稿娉�
-        
-        // 鐢佃瘽淇℃伅
-        params.put("Phone", StringUtils.nvl(emergency.getPatientPhone(), ""));
-        params.put("TEL_Time", sdf.format(new Date()));
-        params.put("TEL_Remarks", "鏂扮郴缁熷悓姝ュ垱寤鸿皟搴﹀崟");
-        
-        // 鏃堕暱淇℃伅
-        params.put("TimeLength_Program", "0"); // 澶у瀷娲诲姩淇濋殰鏃堕暱
-        params.put("TimeLength_ICU", "0"); // 灞呭ICU鏃堕暱
-        params.put("TimeLength_Wait", "0"); // 绛夊緟鏃堕暱
-        
-        // 閲岀▼鏁�
-        params.put("DispatchOrdTraStreetMileage", ""); // 寮�濮嬮噷绋嬫暟
-        params.put("DispatchOrdTraEndMileage", ""); // 缁撴潫閲岀▼鏁�
-        
-        // 鏈嶅姟鍗曠浉鍏充俊鎭紙浠巃dmin_save_24.gds 221-255琛岃ˉ鍏咃級
-        params.put("ServiceOrdPtCondition", StringUtils.nvl(emergency.getPatientCondition(), "")); // 鐥呮儏鎻忚堪
-        params.put("ServiceOrdPtDoctor", ""); // 鎮h�呭尰鐢�
-        params.put("ServiceOrdPtDoctorPhone", ""); // 鎮h�呭尰鐢熺數璇�
-        params.put("TransferModeID", ""); // 杞繍鏂瑰紡
-        params.put("ServiceOrdVIP", "0"); // VIP瀹㈡埛
-        // 浠锋牸瀛楁澶嶇敤锛岀‘淇濅竴鑷存��
-        params.put("ServiceOrdTraTxnPrice", transferPrice); // 鎴愪氦浠�
-        params.put("ServiceOrdTraPrePayment", "0"); // 闇�棰勪粯娆�
-        params.put("SettlementPrice", "0"); // 缁撶畻浠�
-        params.put("ServiceOrdTraPriceReason", ""); // 宸环鍘熷洜
-        params.put("ServiceOrd_CC_ID", ""); // 瀹㈡湇浜哄憳ID
-        params.put("ServiceOrd_Sale_ID", ""); // 閿�鍞汉鍛業D
-        params.put("ServiceOrdIntroducer", ""); // 浠嬬粛浜�
-        params.put("ServiceOrd_work_ID", ""); // 涓昏浼佸井瀹㈡湇ID
-        params.put("ServiceOrd_work_IDs", ""); // 鍏朵粬浼佸井瀹㈡湇ID
-        params.put("ServiceOrd_work_is", "0"); // 鏄惁浼佸井鎴愪氦
-        params.put("CommissionScenarioID", "0"); // 浼佸井缁╂晥鏂规
-        params.put("ServiceOrdApptDate", task.getPlannedStartTime() != null ? sdf.format(task.getPlannedStartTime()) : ""); // 棰勭害鏃堕棿
-        params.put("ServiceOrdPtDiagnosis", ""); // 璇婃柇
-        params.put("ServiceOrdOperationRemarks", "鏂扮郴缁熷悓姝ュ垱寤�"); // 鎿嶄綔澶囨敞
-        params.put("ServiceOrdEstimatedOrderDate", ""); // 棰勮娲惧崟鏃堕棿
-        params.put("ServiceOrdEstimatedOrderDateOld", ""); // 鍘熼璁℃淳鍗曟椂闂�
-        params.put("ServiceOrdViaDistance", "0"); // 涓�旇窛绂�
-        // 璺濈瀛楁锛氱‘淇濅笉涓虹┖锛岄伩鍏嶆棫绯荤粺鎺ュ彛鎶ラ敊
-        String transferDistance = "0";
-        if (emergency.getTransferDistance() != null) {
-            try {
-                transferDistance = emergency.getTransferDistance().toString();
-                // 鍘婚櫎鍙兘鐨勫皬鏁扮偣鍚庡浣欑殑0
-                if (transferDistance.contains(".")) {
-                    transferDistance = new java.math.BigDecimal(transferDistance).stripTrailingZeros().toPlainString();
-                }
-            } catch (Exception e) {
-                log.warn("杞崲杞繍璺濈澶辫触锛屼换鍔D: {}, 浣跨敤榛樿鍊�0", task.getTaskId(), e);
-                transferDistance = "0";
-            }
-        }
-        params.put("ServiceOrdTraDistance", transferDistance);
-        params.put("OrderLevel", "0"); // 鏌ョ湅绛夌骇
-        params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
-        params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
-        params.put("DirectionType", "0"); // 杞繍鍘诲悜
-        params.put("ServiceOrdPtOutHospID", emergency.getHospitalOutId() != null ? emergency.getHospitalOutId().toString() : "0"); // 杞嚭鍖婚櫌ID
-        params.put("ServiceOrdPtInHospID", emergency.getHospitalInId() != null ? emergency.getHospitalInId().toString() : "0"); // 杞叆鍖婚櫌ID
-        params.put("ServiceOrdPtOutHosp", StringUtils.nvl(emergency.getHospitalOutName(), "")); // 杞嚭鍖婚櫌
-        params.put("ServiceOrdTraVia", StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), ""))); // 杞嚭鍦板潃
-        params.put("ServiceOrdPtInHosp", StringUtils.nvl(emergency.getHospitalInName(), "")); // 杞叆鍖婚櫌
-        params.put("ServiceOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), ""))); // 杞叆鍦板潃
-        params.put("FromHQ2_is", "0"); // 骞垮窞鎬婚儴鎺ㄩ�佷换鍔℃爣璁�
-        
-        // 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID锛岀敤浜庤瘖鏂璉CD锛�
-        // 鏍煎紡锛氶�楀彿鍒嗛殧鐨処D鍒楄〃锛屽 ",1,2,3,"
-        String ordIcdId = "";
-        if (StringUtils.isNotEmpty(emergency.getDiseaseIds())) {
-            // 灏嗗瓨鍌ㄧ殑 "1,2,3" 鏍煎紡杞崲涓烘棫绯荤粺瑕佹眰鐨� ",1,2,3," 鏍煎紡
-            ordIcdId = "," + emergency.getDiseaseIds() + ",";
-            log.info("鐥呮儏ID鍒楄〃宸茶缃紝浠诲姟ID: {}, OrdICD_ID: {}", task.getTaskId(), ordIcdId);
-        }
-        params.put("OrdICD_ID", ordIcdId);
-        params.put("OrdICD_ID_old", ""); // 鏃х梾鎯匢D鍒楄〃锛堢敤浜庡姣旀槸鍚﹂渶瑕佹洿鏂帮級
-        
-        // 鎵ц浜哄憳淇℃伅锛堥殢琛屼汉鍛橈級
-        syncTaskAssignees(task, params);
-        
-        return params;
-    }
-    
-    /**
-     * 鍚屾浠诲姟鎵ц浜哄憳淇℃伅鍒拌皟搴﹀崟闅忚浜哄憳鍙傛暟
-     * 
-     * @param task 浠诲姟淇℃伅
-     * @param params 璋冨害鍗曞弬鏁癕ap
-     */
-    private void syncTaskAssignees(SysTask task, Map<String, String> params) {
-        try {
-            // 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛� //TODO 濡傛灉鏈変袱涓徃鏈哄氨瑕� 璁剧疆銆�Entourage_1鍜孍ntourage_2
-            //涓や釜鎶ゅ+灏辫璁剧疆 Entourage_4鍜孍ntourage_6
-            //涓や釜鍖荤敓瑕佽缃� Entourage_3鍜孍ntourage_5
-            List<TaskCreateVO.AssigneeInfo> assignees = getTaskAssignees(task.getTaskId());
-            
-            if (assignees == null || assignees.isEmpty()) {
-                log.warn("浠诲姟鏃犳墽琛屼汉鍛橈紝浠诲姟ID: {}", task.getTaskId());
-                // 璁剧疆榛樿绌哄��
-                params.put("EntourageLeadID", "");
-                params.put("Entourage_1", ""); // 鍙告満
-                params.put("Entourage_2", ""); //鍙告満
-                params.put("Entourage_3", ""); // 鍖荤敓
-                params.put("Entourage_5", ""); //鍖荤敓
-                params.put("Entourage_4", ""); // 鎶ゅ+
-                params.put("Entourage_6", ""); // 鎶ゅ+
 
-                return;
-            }
-            
-            String leadEntourageId = ""; // 棰嗛槦鐨凟ntourageID
-            String driverOaId = "";      // 鍙告満鐨凮A_UserID
-            String doctorOaId = "";      // 鍖荤敓鐨凮A_UserID
-            String nurseOaId = "";       // 鎶ゅ+鐨凮A_UserID
-            
-            // 閬嶅巻鎵ц浜哄憳锛屾牴鎹鑹茬被鍨嬪垎閰嶅埌瀵瑰簲鐨凟ntourage鍙傛暟
-            for (int i = 0; i < assignees.size(); i++) {
-                TaskCreateVO.AssigneeInfo assignee = assignees.get(i);
-                Long userId = assignee.getUserId();
-                String userType = assignee.getUserType(); // 鐩存帴浣跨敤鍓嶇浼犻�掔殑瑙掕壊绫诲瀷
-                
-                if (userId == null) {
-                    continue;
-                }
-                
-                // 鏌ヨ鐢ㄦ埛鐨凮A_UserID
-                SysUser user = sysUserMapper.selectUserById(userId);
-                if (user == null || user.getOaUserId() == null) {
-                    log.warn("鎵ц浜哄憳淇℃伅涓嶅瓨鍦ㄦ垨鏈厤缃甇A_UserID锛岀敤鎴稩D: {}", userId);
-                    continue;
-                }
-                
-                String oaUserId = user.getOaUserId().toString();
-                
-                // 鏍规嵁鐢ㄦ埛绫诲瀷鍒嗛厤鍒板搴旂殑Entourage鍙傛暟
-                if ("driver".equals(userType)) {
-                    if (driverOaId.isEmpty()) {
-                        driverOaId = oaUserId;
-                        if(params.get("Entourage_1")==null) {
-                            params.put("Entourage_1", oaUserId);
-                        }else{
-                            params.put("Entourage_2", oaUserId);
-                        }
-                        // 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
-                        if (i == 0 && leadEntourageId.isEmpty()) {
-                            leadEntourageId = "1"; // 鍙告満瀵瑰簲Entourage_1
-                        }
-                    }
-                } else if ("doctor".equals(userType)) {
-                    if (doctorOaId.isEmpty()) {
-                        doctorOaId = oaUserId;
-                        if(params.get("Entourage_3")==null) {
-                            params.put("Entourage_3", oaUserId);
-                        }else{
-                            params.put("Entourage_5", oaUserId);
-                        }
-                        // 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
-                        if (i == 0 && leadEntourageId.isEmpty()) {
-                            leadEntourageId = "3"; // 鍖荤敓瀵瑰簲Entourage_3
-                        }
-                    }
-                } else if ("nurse".equals(userType)) {
-                    if (nurseOaId.isEmpty()) {
-                        nurseOaId = oaUserId;
-                        if(params.get("Entourage_4")==null) {
-                            params.put("Entourage_4", oaUserId);
-                        }else{
-                            params.put("Entourage_6", oaUserId);
-                        }
-                        // 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
-                        if (i == 0 && leadEntourageId.isEmpty()) {
-                            leadEntourageId = "4"; // 鎶ゅ+瀵瑰簲Entourage_4
-                        }
-                    }
-                }
-            }
-            
-            // 璁剧疆鍙傛暟
-            params.put("EntourageLeadID", leadEntourageId);
-//            params.put("Entourage_1", driverOaId);  // 鍙告満
-//            params.put("Entourage_3", doctorOaId);  // 鍖荤敓
-//            params.put("Entourage_4", nurseOaId);   // 鎶ゅ+
-            
-//            log.info("浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: {}, 棰嗛槦ID: {}, 鍙告満: {}, 鍖荤敓: {}, 鎶ゅ+: {}",
-//                task.getTaskId(), leadEntourageId, driverOaId, doctorOaId, nurseOaId);
-            
-        } catch (Exception e) {
-            log.error("鍚屾浠诲姟鎵ц浜哄憳寮傚父锛屼换鍔D: {}", task.getTaskId(), e);
-            // 璁剧疆榛樿绌哄��
-            params.put("EntourageLeadID", "");
-            params.put("Entourage_1", "");
-            params.put("Entourage_3", "");
-            params.put("Entourage_4", "");
-        }
-    }
-    
-    /**
-     * 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛�
-     * 
-     * @param taskId 浠诲姟ID
-     * @return 鎵ц浜哄憳淇℃伅鍒楄〃
-     */
-    private List<TaskCreateVO.AssigneeInfo> getTaskAssignees(Long taskId) {
-        List<TaskCreateVO.AssigneeInfo> assignees = new java.util.ArrayList<>();
-        
-        try {
-            // 浠庢暟鎹簱鏌ヨ鎵ц浜哄憳淇℃伅锛堟寜鎺掑簭椤哄簭锛�
-            List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
-            
-            if (taskAssignees != null && !taskAssignees.isEmpty()) {
-                // 灏嗘暟鎹簱涓殑鎵ц浜哄憳杞崲涓篈ssigneeInfo瀵硅薄
-                for (SysTaskAssignee taskAssignee : taskAssignees) {
-                    TaskCreateVO.AssigneeInfo assignee = new TaskCreateVO.AssigneeInfo();
-                    assignee.setUserId(taskAssignee.getUserId());
-                    assignee.setUserName(taskAssignee.getUserName());
-                    assignee.setUserType(taskAssignee.getUserType());
-                    assignees.add(assignee);
-                }
-                
-                log.info("浠庢暟鎹簱鑾峰彇鎵ц浜哄憳淇℃伅鎴愬姛锛屼换鍔D: {}, 浜哄憳鏁伴噺: {}", taskId, assignees.size());
-                return assignees;
-            }
-            
-            // 濡傛灉鏁版嵁搴撲腑娌℃湁鎵ц浜哄憳淇℃伅锛屽皾璇曚粠浠诲姟鐨勪富瑕佹墽琛屼汉鑾峰彇
-//            log.warn("鏁版嵁搴撲腑鏈壘鍒版墽琛屼汉鍛樹俊鎭紝灏濊瘯浠庝换鍔′富瑕佹墽琛屼汉鑾峰彇锛屼换鍔D: {}", taskId);
-            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
-            if (task != null && task.getAssigneeId() != null) {
-                SysUser user = sysUserMapper.selectUserById(task.getAssigneeId());
-                if (user != null) {
-                    TaskCreateVO.AssigneeInfo assignee = new TaskCreateVO.AssigneeInfo();
-                    assignee.setUserId(user.getUserId());
-                    assignee.setUserName(user.getNickName());
-                    assignee.setUserType(getUserType(user)); // 閫氳繃瑙掕壊鍒ゆ柇绫诲瀷
-                    assignees.add(assignee);
-                }
-            }
-        } catch (Exception e) {
-            log.error("鑾峰彇浠诲姟鎵ц浜哄憳淇℃伅寮傚父锛屼换鍔D: {}", taskId, e);
-        }
-        
-        return assignees;
-    }
-    
-    
-    /**
-     * 鍒ゆ柇鐢ㄦ埛绫诲瀷锛堝徃鏈�/鍖荤敓/鎶ゅ+/鍏朵粬锛�
-     * 鏍规嵁鐢ㄦ埛鐨勮鑹插悕绉版潵鍒ゆ柇
-     * 
-     * @param user 鐢ㄦ埛淇℃伅
-     * @return 鐢ㄦ埛绫诲瀷锛歞river/doctor/nurse/other
-     */
-    private String getUserType(SysUser user) {
-        String roleName = "";
-        
-        // 浠庣敤鎴风殑瑙掕壊鍒楄〃涓幏鍙栬鑹插悕绉�
-        if (user.getRoles() != null && !user.getRoles().isEmpty()) {
-            roleName = user.getRoles().get(0).getRoleName();
-        }
-        
-        // 鍒ゆ柇鏄惁涓哄徃鏈�
-        if (roleName != null && roleName.contains("鍙告満")) {
-            return "driver";
-        }
-        // 鍒ゆ柇鏄惁涓哄尰鐢�
-        if (roleName != null && roleName.contains("鍖荤敓")) {
-            return "doctor";
-        }
-        // 鍒ゆ柇鏄惁涓烘姢澹�
-        if (roleName != null && roleName.contains("鎶ゅ+")) {
-            return "nurse";
-        }
-        
-        // 鍏朵粬绫诲瀷锛岄粯璁や负鍙告満锛堜繚璇佽嚦灏戞湁涓�涓汉鍛橈級
-        log.warn("鐢ㄦ埛瑙掕壊鏃犳硶鍒ゆ柇绫诲瀷锛岄粯璁や负鍙告満锛岀敤鎴稩D: {}, 瑙掕壊: {}", user.getUserId(), roleName);
-        return "driver";
-    }
-    
-    /**
-     * 鑾峰彇浠诲姟鍏宠仈杞﹁締鐨勬棫绯荤粺CarID
-     * 
-     * @param taskId 浠诲姟ID
-     * @return CarID锛屽鏋滄湭鎵惧埌鍒欒繑鍥�0L
-     */
-    private Long getTaskVehicleCarId(Long taskId) {
-        try {
-            // 浠� sys_task_vehicle 琛ㄦ煡璇㈣溅杈咺D
-            List<SysTaskVehicle> taskVehicles = sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId);
-            if (taskVehicles != null && !taskVehicles.isEmpty()) {
-                // 鍙栫涓�涓叧鑱旂殑杞﹁締
-                Long vehicleId = taskVehicles.get(0).getVehicleId();
-                if (vehicleId != null) {
-                    // 浠� tb_vehicle_info 琛ㄨ幏鍙� car_id
-                    VehicleInfo vehicleInfo = vehicleInfoMapper.selectVehicleInfoById(vehicleId);
-                    if (vehicleInfo != null && vehicleInfo.getCarId() != null) {
-                        Long carId = vehicleInfo.getCarId().longValue();
-                        log.info("鑾峰彇浠诲姟鍏宠仈杞﹁締鐨凜arID鎴愬姛锛屼换鍔D: {}, 杞﹁締ID: {}, CarID: {}", 
-                            taskId, vehicleId, carId);
-                        return carId;
-                    } else {
-                        log.warn("杞﹁締淇℃伅涓湭閰嶇疆CarID锛屼换鍔D: {}, 杞﹁締ID: {}", taskId, vehicleId);
-                    }
-                } else {
-                    log.warn("浠诲姟杞﹁締鍏宠仈璁板綍涓溅杈咺D涓虹┖锛屼换鍔D: {}", taskId);
-                }
-            } else {
-                log.warn("浠诲姟鏈叧鑱旇溅杈嗭紝浠诲姟ID: {}", taskId);
-            }
-        } catch (Exception e) {
-            log.error("鏌ヨ浠诲姟鍏宠仈杞﹁締鐨凜arID寮傚父锛屼换鍔D: {}", taskId, e);
-        }
-        return 0L;
-    }
-    
-    private String getAdminID(SysTask task) {
-        String adminID="";
-if (task.getCreatorId() != null) {
-            try {
-                SysUser creator = sysUserMapper.selectUserById(task.getCreatorId());
-                if (creator != null && creator.getOaUserId() != null) {
-                    adminID = creator.getOaUserId().toString();
-                    log.info("鑾峰彇鍒涘缓浜篛A_UserID鎴愬姛锛岀敤鎴稩D: {}, OA_UserID: {}", task.getCreatorId(), adminID);
-                } else {
-                    log.warn("鍒涘缓浜烘湭閰嶇疆OA_UserID锛岀敤鎴稩D: {}", task.getCreatorId());
-                }
-            } catch (Exception e) {
-                log.error("鏌ヨ鍒涘缓浜篛A_UserID寮傚父锛岀敤鎴稩D: {}", task.getCreatorId(), e);
-            }
-        }
-        return adminID;
-    }
-    /**
-     * 鏋勫缓鍚屾鍙傛暟
-     */
-    private Map<String, String> buildSyncParams(SysTask task, SysTaskEmergency emergency) {
-        Map<String, String> params = new HashMap<>();
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
-        Long taskId=task.getTaskId();
-        // 绠$悊鍛業D锛堝垱寤轰汉ID瀵瑰簲鐨凮A_UserID锛�
-        String adminID = this.getAdminID(task);
-        
-        params.put("adminID", adminID);
-        
-        // 鏈嶅姟鍗曞垎绫伙紙浠庝换鍔℃墍灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佽幏鍙栵級
-        String serviceOrdClass = "BF"; // ServiceOrdClass榛樿鍊�
-        if (task.getDeptId() != null) {
-            try {
-                SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
-                if (dept != null && StringUtils.isNotEmpty(dept.getServiceOrderClass())) {
-                    // 浣跨敤閮ㄩ棬鐨勬湇鍔″崟缂栫爜浣滀负ServiceOrdClass
-                    serviceOrdClass = dept.getServiceOrderClass();
-//                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 閮ㄩ棬鍚嶇О: {}, 鏈嶅姟鍗曠紪鐮�: {}",
-//                        task.getDeptId(), dept.getDeptName(), serviceOrdClass);
-                } else {
-                    log.warn("浠诲姟鎵�灞為儴闂ㄦ湭閰嶇疆鏈嶅姟鍗曠紪鐮侊紝閮ㄩ棬ID: {}銆侀儴闂ㄥ悕绉�: {}锛屼娇鐢ㄩ粯璁ゅ��", 
-                        task.getDeptId(), dept != null ? dept.getDeptName() : "null");
-                }
-            } catch (Exception e) {
-                log.error("鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: {}", task.getDeptId(), e);
-            }
-        } else {
-            log.warn("浠诲姟鏈叧鑱旈儴闂紝浣跨敤榛樿鏈嶅姟鍗曠紪鐮�");
-        }
-        
-        // 鏈嶅姟鍗曟墽琛屽尯鍩燂紙浠庝换鍔$殑document_type_id鑾峰彇锛�
-        String serviceOrdAreaType = "1"; // 榛樿鍊�
-        if (StringUtils.isNotEmpty(emergency.getDocumentTypeId())) {
-            serviceOrdAreaType = emergency.getDocumentTypeId();
-//            log.info("鑾峰彇鍗曟嵁绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 鍗曟嵁绫诲瀷ID: {}", task.getTaskId(), serviceOrdAreaType);
-        } else {
-            log.warn("浠诲姟鏈厤缃崟鎹被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", task.getTaskId());
-        }
-        
-        // 鍩虹淇℃伅
-        params.put("ServiceOrdClass", serviceOrdClass); // 浠庨儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佽幏鍙�
-        params.put("ServiceOrdAreaType", serviceOrdAreaType); // 浠庝换鍔$殑document_type_id鑾峰彇
-        
-        // 鏈嶅姟鍗曟墽琛岀被鍨嬶紙浠庝换鍔$殑task_type_id鑾峰彇锛�
-        String serviceOrdType = "1"; // 榛樿鍊�
-        if (StringUtils.isNotEmpty(emergency.getTaskTypeId())) {
-            serviceOrdType = emergency.getTaskTypeId();
-//            log.info("鑾峰彇浠诲姟绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 浠诲姟绫诲瀷ID: {}", taskId, serviceOrdType);
-        } else {
-            log.warn("浠诲姟鏈厤缃换鍔$被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", taskId);
-        }
-        params.put("ServiceOrdType", serviceOrdType); // 鏈嶅姟鍗曟墽琛岀被鍨嬶紙浠庝换鍔$殑task_type_id鑾峰彇锛�
-        
-        params.put("ServiceOrdState", "2"); // 鏈嶅姟鍗曠姸鎬侊紙2=姝e紡鍗曪級
-        params.put("ServiceOrdStartDate", task.getCreateTime() != null ? sdfDate.format(task.getCreateTime()) : sdfDate.format(new Date()));
-        
-        // 棰勭害鏃堕棿
-        if (task.getPlannedStartTime() != null) {
-            params.put("ServiceOrdApptDate", sdf.format(task.getPlannedStartTime()));
-        }
-        
-        // 鑱旂郴浜轰俊鎭�
-        params.put("ServiceOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
-        params.put("ServiceOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
-        params.put("ServiceOrdCoTies", ""); // 鑱旂郴浜轰笌鎮h�呭叧绯�
-        
-        // 鎮h�呬俊鎭�
-        params.put("ServiceOrdPtName", StringUtils.nvl(emergency.getPatientName(), ""));
-        params.put("ServiceOrdPtAge", ""); // 骞撮緞
-        params.put("ServiceOrdPtKG", ""); // 浣撻噸
-        params.put("ServiceOrdPtSex", "0".equals(emergency.getPatientGender()) ? "鐢�" : "1".equals(emergency.getPatientGender()) ? "濂�" : "");
-        params.put("ServiceOrdPtNat", ""); // 鍥界睄
-        params.put("ServiceOrdPtIDCard", StringUtils.nvl(emergency.getPatientIdCard(), ""));
-        
-        // 鍖婚櫌淇℃伅
-        params.put("ServiceOrdPtOutHosp", StringUtils.nvl(emergency.getHospitalOutName(), ""));
-        params.put("ServiceOrdPtOutHospID", emergency.getHospitalOutId() != null ? emergency.getHospitalOutId().toString() : "0"); // 杞嚭鍖婚櫌ID
-        params.put("ServiceOrdPtInHosp", StringUtils.nvl(emergency.getHospitalInName(), ""));
-        params.put("ServiceOrdPtInHospID", emergency.getHospitalInId() != null ? emergency.getHospitalInId().toString() : "0"); // 杞叆鍖婚櫌ID
-        
-        // 绉戝淇℃伅
-        params.put("ServiceOrdPtServices", StringUtils.nvl(emergency.getHospitalOutDepartment(), ""));
-        params.put("ServiceOrdPtServicesID", StringUtils.nvl(emergency.getHospitalOutDepartmentId(), "0")); // 杞嚭绉戝ID
-        params.put("ServiceOrdPtInServices", StringUtils.nvl(emergency.getHospitalInDepartment(), ""));
-        params.put("ServiceOrdPtInServicesID", StringUtils.nvl(emergency.getHospitalInDepartmentId(), "0")); // 杞叆绉戝ID
-        
-        // 鐥呮儏淇℃伅
-        params.put("ServiceOrdPtDiagnosis", ""); // 璇婃柇
-        params.put("ServiceOrdPtCondition", StringUtils.nvl(emergency.getPatientCondition(), ""));
-        params.put("ServiceOrdTaskRemarks", StringUtils.nvl(task.getTaskDescription(), ""));
-        params.put("ServiceOrdPtDoctor", ""); // 鎮h�呭尰鐢�
-        params.put("ServiceOrdPtDoctorPhone", ""); // 鎮h�呭尰鐢熺數璇�
-        
-        // 鍦板潃淇℃伅
-        params.put("province", ""); // 鍑哄彂鍦扮渷浠�
-        params.put("city", ""); // 鍑哄彂鍦板煄甯�
-        params.put("ServiceOrdTraStreet",task.getDepartureAddress()); //娲捐溅鍦板潃
-        params.put("ServiceOrdTraStreetCoo", ""); // 鍑哄彂鍦板潗鏍�
-        params.put("ServiceOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), "")));
-        params.put("ServiceOrdTraEndCoo", ""); // 鐩殑鍦板潗鏍�
-        params.put("ServiceOrdTraVia", ""); // 閫旂粡鍦�
-        
-        // 璺濈鍜屼环鏍间俊鎭�
-        params.put("ServiceOrdViaDistance", "0"); // 涓�旇窛绂�
-        params.put("ServiceOrdTraDistance", emergency.getTransferDistance() != null ? emergency.getTransferDistance().toString() : "0");
-        params.put("ServiceOrdTraDuration", ""); // 棰勮琛岀▼鏃堕棿
-        params.put("ServiceOrdTraUnitPrice", "0"); // 鍗曚环/鍏噷
-        params.put("ServiceOrdTraOfferPrice", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0");
-        params.put("ServiceOrdTraTxnPrice", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0");
-        params.put("ServiceOrdTraPrePayment", "0"); // 闇�棰勪粯娆�
-        params.put("SettlementPrice", "0"); // 缁撶畻浠�
-        params.put("ServiceOrdTraPriceReason", ""); // 宸环鍘熷洜
-        
-        // 鍏朵粬淇℃伅
-        params.put("Phone", StringUtils.nvl(emergency.getPatientPhone(), "")); // 鏉ョ數鐢佃瘽
-        params.put("TEL_Time", sdf.format(new Date())); // 鏉ョ數鏃堕棿
-        params.put("TEL_Remarks", "鏂扮郴缁熷悓姝�"); // 鏉ョ數澶囨敞
-        params.put("TransferModeID", ""); // 杞繍鏂瑰紡
-        params.put("ServiceOrdVIP", "0"); // VIP瀹㈡埛
-        params.put("ServiceOrd_CC_ID", ""); // 瀹㈡湇浜哄憳ID
-        params.put("ServiceOrd_Sale_ID", ""); // 閿�鍞汉鍛業D
-        params.put("ServiceOrdIntroducer", ""); // 浠嬬粛浜�
-        params.put("ServiceOrd_work_ID", ""); // 涓昏浼佸井瀹㈡湇ID
-        params.put("ServiceOrd_work_IDs", ""); // 鍏朵粬浼佸井瀹㈡湇ID
-        params.put("ServiceOrd_work_is", "0"); // 鏄惁浼佸井鎴愪氦
-        params.put("CommissionScenarioID", "0"); // 浼佸井缁╂晥鏂规
-        params.put("ServiceOrdOperationRemarks", "鏂扮郴缁熷悓姝ュ垱寤�"); // 鎿嶄綔澶囨敞
-        params.put("ServiceOrdEstimatedOrderDate", ""); // 棰勮娲惧崟鏃堕棿
-        params.put("ServiceOrdSource", "10"); // 璁㈠崟鏉ユ簮锛�10=鏂扮郴缁燂級
-        params.put("OrderLevel", "0"); // 鏌ョ湅绛夌骇
-        params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
-        params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
-        params.put("DirectionType", "0"); // 杞繍鍘诲悜
-        params.put("ServiceOrd_m", "1"); // 鏉ユ簮鍏ュ彛
-        params.put("FromHQ2_is", "0"); // 骞垮窞鎬婚儴鎺ㄩ�佷换鍔℃爣璁�
-        params.put("OrderPrice_Auto", "0"); // 璁㈠崟鑷姩鎶ヤ环鍙傝�冨��
-        
-        return params;
-    }
-    
-    /**
-     * 鍙戦�丠TTP/HTTPS POST璇锋眰
-     * 鏀寔HTTPS鑷鍚嶈瘉涔�
-     */
-    private String sendHttpPost(String urlString, Map<String, String> params) throws Exception {
-        URL url = new URL(urlString);
-        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-        
-        // 濡傛灉鏄疕TTPS璇锋眰锛岄厤缃甋SL淇′换鎵�鏈夎瘉涔�
-        if (conn instanceof HttpsURLConnection) {
-            HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
-            httpsConn.setSSLSocketFactory(createTrustAllSSLContext().getSocketFactory());
-            httpsConn.setHostnameVerifier((hostname, session) -> true); // 淇′换鎵�鏈変富鏈哄悕
-//            log.debug("閰嶇疆HTTPS杩炴帴锛屼俊浠绘墍鏈塖SL璇佷功锛孶RL: {}", urlString);
-        }
-        
-        try {
-            // 璁剧疆杩炴帴灞炴��
-            conn.setRequestMethod("POST");
-            conn.setConnectTimeout(legacyConfig.getConnectTimeout());
-            conn.setReadTimeout(legacyConfig.getReadTimeout());
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-            conn.setUseCaches(false);
-            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + legacyConfig.getCharset());
-            conn.setRequestProperty("Accept-Charset", legacyConfig.getCharset());
-            
-            // 鏋勫缓POST鏁版嵁
-            StringBuilder postData = new StringBuilder();
-            for (Map.Entry<String, String> entry : params.entrySet()) {
-                if (postData.length() > 0) {
-                    postData.append("&");
-                }
-                postData.append(URLEncoder.encode(entry.getKey(), legacyConfig.getCharset()));
-                postData.append("=");
-                postData.append(URLEncoder.encode(entry.getValue(), legacyConfig.getCharset()));
-            }
-            
-            // 鍙戦�丳OST鏁版嵁
-            try (OutputStream os = conn.getOutputStream()) {
-                os.write(postData.toString().getBytes(legacyConfig.getCharset()));
-                os.flush();
-            }
-
-
-            
-            // 璇诲彇鍝嶅簲
-            int responseCode = conn.getResponseCode();
-            if (responseCode == HttpURLConnection.HTTP_OK) {
-                try (BufferedReader reader = new BufferedReader(
-                        new InputStreamReader(conn.getInputStream(), legacyConfig.getCharset()))) {
-                    StringBuilder response = new StringBuilder();
-                    String line;
-                    while ((line = reader.readLine()) != null) {
-                        response.append(line);
-                    }
-                    return response.toString().trim();
-                }
-            } else {
-                log.error("璇锋眰澶辫触锛岃姹俇RL {},鍙傛暟 {}",urlString,postData);
-                throw new Exception("HTTP/HTTPS璇锋眰澶辫触锛屽搷搴旂爜: " + responseCode);
-            }
-            
-        } finally {
-            conn.disconnect();
-        }
-    }
-    
-    /**
-     * 鍒涘缓淇′换鎵�鏈塖SL璇佷功鐨凷SLContext
-     * 鐢ㄤ簬鏀寔鑷鍚嶈瘉涔︾殑HTTPS璇锋眰
-     * 
-     * 娉ㄦ剰锛氭鏂规硶浼氫俊浠绘墍鏈塖SL璇佷功锛屽寘鎷嚜绛惧悕璇佷功
-     * 浠呯敤浜庝笌鏃х郴缁熺殑鍐呴儴閫氫俊锛岀敓浜х幆澧冨缓璁娇鐢ㄦ瑙凜A璇佷功
-     */
-    private SSLContext createTrustAllSSLContext() throws Exception {
-        // 鍒涘缓淇′换鎵�鏈夎瘉涔︾殑TrustManager
-        TrustManager[] trustAllCerts = new TrustManager[] {
-            new X509TrustManager() {
-                @Override
-                public X509Certificate[] getAcceptedIssuers() {
-                    return null;
-                }
-                
-                @Override
-                public void checkClientTrusted(X509Certificate[] certs, String authType) {
-                    // 淇′换鎵�鏈夊鎴风璇佷功
-                }
-                
-                @Override
-                public void checkServerTrusted(X509Certificate[] certs, String authType) {
-                    // 淇′换鎵�鏈夋湇鍔″櫒璇佷功
-                }
-            }
-        };
-        
-        // 瀹夎淇′换鎵�鏈夎瘉涔︾殑TrustManager
-        SSLContext sslContext = SSLContext.getInstance("TLS");
-        sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
-        return sslContext;
-    }
-    
-    /**
-     * 瑙f瀽鏃х郴缁熷搷搴�
-     * 棰勬湡鏍煎紡: "OK:ServiceOrdID" 鎴栭敊璇俊鎭�
-     */
-    private Long parseResponse(String response) {
-        if (StringUtils.isEmpty(response)) {
-            return null;
-        }
-        
-        // 鍘婚櫎鍙兘鐨凥TML鏍囩鍜岀┖鐧藉瓧绗�
-        response = response.replaceAll("<[^>]*>", "").trim();
-        
-        // 妫�鏌ユ槸鍚︽垚鍔熷搷搴�
-        if (response.startsWith("OK:")) {
-            try {
-                String serviceOrdIdStr = response.substring(3).trim();
-                return Long.parseLong(serviceOrdIdStr);
-            } catch (NumberFormatException e) {
-                log.error("瑙f瀽ServiceOrdID澶辫触: {}", response, e);
-                return null;
-            }
-        } else {
-            log.error("鏃х郴缁熻繑鍥為敊璇�: {}", response);
-            return null;
-        }
-    }
-    
-    // 鍒犻櫎涓嬮潰鐨勯噸澶嶆柟娉曪紝鍥犱负鎴戜滑灏嗕娇鐢∕apValueUtils宸ュ叿绫讳腑鐨勬柟娉�
-    /*
-    private String getStringValue(Map<String, Object> map, String key) {
-        Object value = map.get(key);
-        return value != null ? value.toString() : null;
-    }
-    
-    private BigDecimal getBigDecimalValue(Map<String, Object> map, String key) {
-        Object value = map.get(key);
-        if (value == null) {
-            return null;
-        }
-        if (value instanceof BigDecimal) {
-            return (BigDecimal) value;
-        }
-        try {
-            return new BigDecimal(value.toString());
-        } catch (NumberFormatException e) {
-            return null;
-        }
-    }
-    
-    private Long getLongValue(Map<String, Object> map, String key) {
-        Object value = map.get(key);
-        if (value == null) {
-            return null;
-        }
-        if (value instanceof Long) {
-            return (Long) value;
-        }
-        try {
-            return Long.valueOf(value.toString());
-        } catch (NumberFormatException e) {
-            return null;
-        }
-    }
-    
-    private Integer getIntegerValue(Map<String, Object> map, String key) {
-        Object value = map.get(key);
-        if (value == null) {
-            return null;
-        }
-        if (value instanceof Integer) {
-            return (Integer) value;
-        }
-        try {
-            return Integer.valueOf(value.toString());
-        } catch (NumberFormatException e) {
-            return null;
-        }
-    }
-    
-    private Date getDateValue(Map<String, Object> map, String key) {
-        Object value = map.get(key);
-        if (value == null) {
-            return null;
-        }
-        if (value instanceof Date) {
-            return (Date) value;
-        }
-        // 濡傛灉鏄瓧绗︿覆锛屽皾璇曡В鏋�
-        if (value instanceof String) {
-            try {
-                return DateUtils.parseDate(value.toString());
-            } catch (Exception e) {
-                return null;
-            }
-        }
-        return null;
-    }
-    
-    private boolean isValidDateFormat(String dateStr, String format) {
-        if (StringUtils.isEmpty(dateStr)) {
-            return false;
-        }
-        
-        try {
-            SimpleDateFormat sdf = new SimpleDateFormat(format);
-            sdf.setLenient(false);
-            sdf.parse(dateStr);
-            return true;
-        } catch (Exception e) {
-            return false;
-        }
-    }
-    */
-    
-    /**
-     * 閲嶆柊鍚屾杞﹁締鍜屼汉鍛樺彉鏇寸殑浠诲姟鍒版棫绯荤粺
-     * 褰撲换鍔$殑杞﹁締淇℃伅鎴栦汉鍛樹俊鎭彂鐢熷彉鏇存椂锛岄渶瑕佽皟鐢ㄦ棫绯荤粺鎺ュ彛閲嶆柊鍚屾
-     * 浣跨敤 admin_save_25.asp 鎺ュ彛锛岃�屼笉鏄� admin_save_24.gds
-     */
     @Override
-    @Transactional
     public boolean resyncDispatchOrderToLegacy(Long taskId) {
-        if (!legacyConfig.isEnabled()) {
-            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
-            return false;
-        }
-        
-        try {
-            // 鏌ヨ浠诲姟淇℃伅
-            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
-            if (task == null) {
-                log.error("浠诲姟涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
-                return false;
-            }
-            
-            // 鍙悓姝ユ�ユ晳杞繍浠诲姟
-            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
-                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
-                return false;
-            }
-            
-            // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
-            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
-            if (emergency == null) {
-                log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
-                return false;
-            }
-            
-            // 蹇呴』宸茬粡鍚屾杩囪皟搴﹀崟
-            if (emergency.getLegacyDispatchOrdId() == null || emergency.getLegacyDispatchOrdId() <= 0) {
-                log.warn("璋冨害鍗曟湭鍚屾锛屾棤娉曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
-                return false;
-            }
-            
-            Long serviceOrdId = emergency.getLegacyServiceOrdId();
-            if (serviceOrdId == null || serviceOrdId <= 0) {
-                log.warn("鏈嶅姟鍗曟湭鍚屾锛屾棤娉曢噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
-                return false;
-            }
-            
-            // ====== 鍓嶇疆鏍¢獙锛氱‘淇濅换鍔℃暟鎹畬鏁� ======
-            
-            // 1. 妫�鏌ユ槸鍚﹀凡鍒嗛厤杞﹁締
-            List<SysTaskVehicle> taskVehicles = sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId);
-            if (taskVehicles == null || taskVehicles.isEmpty()) {
-                log.warn("浠诲姟鏈垎閰嶈溅杈嗭紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
-                return false;
-            }
-            
-            // 2. 妫�鏌ユ槸鍚﹀凡鍒嗛厤鎵ц浜哄憳
-            List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
-            if (taskAssignees == null || taskAssignees.isEmpty()) {
-                log.warn("浠诲姟鏈垎閰嶆墽琛屼汉鍛橈紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
-                return false;
-            }
-            
-            // 3. 妫�鏌ラ绾︽椂闂存槸鍚︽湁鏁�
-            if (task.getPlannedStartTime() == null || task.getPlannedStartTime().getTime() <= 0L) {
-                log.warn("浠诲姟棰勭害鏃堕棿鏃犳晥锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
-                return false;
-            }
-            
-            // 4. 妫�鏌ヨ浆鍑哄尰闄俊鎭�
-            if (StringUtils.isEmpty(emergency.getHospitalOutName()) || StringUtils.isEmpty(emergency.getHospitalOutAddress())) {
-                log.warn("浠诲姟杞嚭鍖婚櫌淇℃伅涓嶅畬鏁达紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
-                return false;
-            }
-            
-            // 5. 妫�鏌ヨ浆鍏ュ尰闄俊鎭�
-            if (StringUtils.isEmpty(emergency.getHospitalInName()) || StringUtils.isEmpty(emergency.getHospitalInAddress())) {
-                log.warn("浠诲姟杞叆鍖婚櫌淇℃伅涓嶅畬鏁达紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
-                return false;
-            }
-            
-            // 6. 妫�鏌ユ偅鑰呭熀鏈俊鎭�
-            if (StringUtils.isEmpty(emergency.getPatientName()) || StringUtils.isEmpty(emergency.getPatientPhone())) {
-                log.warn("浠诲姟鎮h�呬俊鎭笉瀹屾暣锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
-                return false;
-            }
-            
-            log.info("浠诲姟鏁版嵁鏍¢獙閫氳繃锛屽紑濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
-            
-            // 鏋勫缓璇锋眰鍙傛暟锛堜娇鐢ㄧ浉鍚岀殑鍙傛暟鏋勫缓鏂规硶锛�
-            Map<String, String> params = buildDispatchOrderParams(task, emergency);
-            params.put("DispatchOrdID", emergency.getLegacyDispatchOrdId().toString());
-            params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString());
-            params.put("DispatchOrdState", "3");
-            log.info("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熻姹傚弬鏁�: {}", params);
-            // 鍙戦�丠TTP璇锋眰鍒版棫绯荤粺锛堜娇鐢╝dmin_save_25.asp鎺ュ彛锛�
-            String response = sendHttpPost(legacyConfig.getDispatchUpdateUrl(), params);
-//            log.info("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熷搷搴�: ServiceOrdID:{},DispatchOrdId:{},Result: {}",emergency.getLegacyServiceOrdId(),emergency.getLegacyDispatchOrdId(), response);
-            // 瑙f瀽鍝嶅簲
-//            Long dispatchOrdId = parseResponse(response);
-            
-            if (response != null && response.equals("OK")) {
-                // 閲嶆柊鍚屾鎴愬姛锛屾竻闄ら噸鏂板悓姝ユ爣璁�
+        SysTaskEmergency emergency=sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+        Long dispatchOrderId = emergency.getLegacyDispatchOrdId();
+        if(LongUtil.isEmpty(dispatchOrderId)){
+            Long serviceOrderId= taskEmergencySyncService.syncEmergency(taskId);
+            if(LongUtil.isNotEmpty(serviceOrderId)) {
                 emergency.setNeedResync(0);
-                emergency.setDispatchSyncTime(new Date());
-                emergency.setDispatchSyncErrorMsg(null);
+//                emergency.setSyncStatus(2);
+                emergency.setSyncTime(new Date());
                 sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-                
-//                log.info("璋冨害鍗曢噸鏂板悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
                 return true;
-            } else {
-                // 閲嶆柊鍚屾澶辫触
-                emergency.setDispatchSyncErrorMsg("閲嶆柊鍚屾澶辫触锛�" + response);
-                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-                
-                log.error("璋冨害鍗曢噸鏂板悓姝ュけ璐ワ紝浠诲姟ID: {}, 鍝嶅簲: {}", taskId, response);
-                return false;
             }
-            
-        } catch (Exception e) {
-            log.error("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熷紓甯革紝浠诲姟ID: {}", taskId, e);
-            
-            // 鏇存柊鍚屾鐘舵�佷负澶辫触
-            try {
-                SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
-                if (emergency != null) {
-                    emergency.setDispatchSyncErrorMsg("閲嶆柊鍚屾寮傚父: " + e.getMessage());
-                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-                }
-            } catch (Exception ex) {
-                log.error("鏇存柊璋冨害鍗曞悓姝ョ姸鎬佸け璐�", ex);
-            }
-            
             return false;
+        }else {
+            return taskDispatchSyncService.resyncDispatchOrderToLegacy(taskId);
         }
     }
-    
+
+
     /**
      * 鎵归噺閲嶆柊鍚屾闇�瑕佹洿鏂扮殑璋冨害鍗�
      */
@@ -1526,47 +322,60 @@
             while (true) {
                 // 鍒嗛〉鏌ヨ闇�瑕侀噸鏂板悓姝ョ殑浠诲姟
                 List<SysTaskEmergency> needResyncTasks = sysTaskEmergencyMapper.selectNeedResyncTasks(offset, pageSize);
-                
+
 //                log.info("鏌ヨ鍒伴渶瑕侀噸鏂板悓姝ョ殑浠诲姟鏁伴噺: {}", needResyncTasks.size());
                 if (needResyncTasks == null || needResyncTasks.isEmpty()) {
                     log.info("娌℃湁鏇村闇�瑕侀噸鏂板悓姝ョ殑浠诲姟锛宱ffset: {}", offset);
                     break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
                 }
-                
+
 //                log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, needResyncTasks.size());
-                
+
                 int pageSuccessCount = 0;
                 for (SysTaskEmergency emergency : needResyncTasks) {
+                    Long dispatchOrdId = emergency.getLegacyDispatchOrdId();
+                    Long taskId = emergency.getTaskId();
+                    if (LongUtil.isEmpty(dispatchOrdId)) {
+                        //娌℃湁璋冨害鍗曪紝鎴戜滑灏辫皟鐢ㄥ垱寤鸿皟搴﹀崟
+                        Long serviceOrderId = syncDispatchOrderToLegacy(taskId);
+                        if (LongUtil.isNotEmpty(serviceOrderId)) {
+                            emergency.setNeedResync(0);
+                            emergency.setDispatchSyncTime(new Date());
+                            emergency.setDispatchSyncErrorMsg(null);
+                            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+                            continue;
+                        }
 //                    log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
-                    boolean success = resyncDispatchOrderToLegacy(emergency.getTaskId());
-                    
-                    if (success) {
-                        pageSuccessCount++;
+                        boolean success = resyncDispatchOrderToLegacy(emergency.getTaskId());
+
+                        if (success) {
+                            pageSuccessCount++;
+                        }
+
+                        // 閬垮厤杩囦簬棰戠箒鐨勮姹�
+                        try {
+                            Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
+                        } catch (InterruptedException e) {
+                            Thread.currentThread().interrupt();
+                            log.warn("閲嶆柊鍚屾璋冨害鍗曡涓柇");
+                            return totalSuccessCount + pageSuccessCount;
+                        }
                     }
-                    
-                    // 閬垮厤杩囦簬棰戠箒鐨勮姹�
-                    try {
-                        Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
-                    } catch (InterruptedException e) {
-                        Thread.currentThread().interrupt();
-                        log.warn("閲嶆柊鍚屾璋冨害鍗曡涓柇");
-                        return totalSuccessCount + pageSuccessCount;
-                    }
-                }
-                
-                totalSuccessCount += pageSuccessCount;
+
+                    totalSuccessCount += pageSuccessCount;
 //                log.info("璋冨害鍗曢噸鏂板悓姝ョ {} 椤靛畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
 //                    (offset / pageSize) + 1, needResyncTasks.size(), pageSuccessCount);
-                
-                // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
-                if (needResyncTasks.size() < pageSize) {
+
+                    // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
+                    if (needResyncTasks.size() < pageSize) {
 //                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曢噸鏂板悓姝ョ粨鏉�");
-                    break;
+                        break;
+                    }
+
+                    offset += pageSize; // 涓嬩竴椤�
                 }
-                
-                offset += pageSize; // 涓嬩竴椤�
             }
-            
 //            log.info("鎵归噺閲嶆柊鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
             return totalSuccessCount;
             
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
index 55d2337..96f03eb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -461,9 +461,9 @@
             createTaskVo.setTaskType("EMERGENCY_TRANSFER"); // 鎬ユ晳杞繍浠诲姟
             
             // 璁剧疆鍗曟嵁绫诲瀷鍜屼换鍔$被鍨婭D锛堜粠鏃х郴缁熷瓧娈垫槧灏勶級
-
-            if (StringUtils.isNotEmpty(serviceOrdClass)) {
-                createTaskVo.setDocumentTypeId(serviceOrdClass);
+            String ServiceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType");
+            if (StringUtils.isNotEmpty(ServiceOrdAreaType)) {
+                createTaskVo.setDocumentTypeId(ServiceOrdAreaType);
             }
             
             String serviceOrdType = MapValueUtils.getStringValue(order, "ServiceOrdType");
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java
index ceac8fb..50eb36f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysEmergencyTaskServiceImpl.java
@@ -110,7 +110,7 @@
             }
         }
 
-        emergencyInfo.setTransferDistance(createVO.getTransferDistance());
+        emergencyInfo.setTransferDistance(createVO.getDistance());
         emergencyInfo.setTransferPrice(createVO.getPrice());
         emergencyInfo.setDocumentTypeId(createVO.getDocumentTypeId());
         emergencyInfo.setTaskTypeId(createVO.getTaskTypeId());
@@ -266,8 +266,8 @@
             }
         }
 
-        if (updateVO.getTransferDistance() != null) {
-            oldEmergency.setTransferDistance(updateVO.getTransferDistance());
+        if (updateVO.getDistance() != null) {
+            oldEmergency.setTransferDistance(updateVO.getDistance());
         }
         if (updateVO.getPrice() != null) {
             oldEmergency.setTransferPrice(updateVO.getPrice());
@@ -428,8 +428,8 @@
         }
         
         // 鏇存柊璐圭敤淇℃伅
-        if (createVO.getTransferDistance() != null) {
-            existingInfo.setTransferDistance(createVO.getTransferDistance());
+        if (createVO.getDistance() != null) {
+            existingInfo.setTransferDistance(createVO.getDistance());
         }
         if (createVO.getPrice() != null) {
             existingInfo.setTransferPrice(createVO.getPrice());
@@ -484,6 +484,7 @@
         }
         try {
             sysTaskEmergencyService.markNeedResync(taskId);
+
         } catch (Exception e) {
             // 鏍囪澶辫触涓嶅奖鍝嶄富娴佺▼
         }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskEmergencyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskEmergencyServiceImpl.java
index c145c31..f6cd1a4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskEmergencyServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskEmergencyServiceImpl.java
@@ -134,13 +134,16 @@
             if (emergency == null) {
                 return;
             }
+            emergency.setNeedResync(1);
+            emergency.setUpdateTime(new java.util.Date());
+            sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
             
-            // 鍙湁宸茬粡鍚屾杩囪皟搴﹀崟鐨勪换鍔℃墠闇�瑕佹爣璁伴噸鏂板悓姝�
-            if (emergency.getDispatchSyncStatus() != null && emergency.getDispatchSyncStatus() == 2 
-                    && emergency.getLegacyDispatchOrdId() != null && emergency.getLegacyDispatchOrdId() > 0) {
-                emergency.setNeedResync(1);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
-            }
+//
+//            // 鍙湁宸茬粡鍚屾杩囪皟搴﹀崟鐨勪换鍔℃墠闇�瑕佹爣璁伴噸鏂板悓姝�
+//            if (emergency.getDispatchSyncStatus() != null && emergency.getDispatchSyncStatus() == 2
+//                    && emergency.getLegacyDispatchOrdId() != null && emergency.getLegacyDispatchOrdId() > 0) {
+//
+//            }
         } catch (Exception e) {
             // 鏍囪澶辫触涓嶅奖鍝嶄富娴佺▼锛屽彧璁板綍鏃ュ織
             Logger log = LoggerFactory.getLogger(SysTaskEmergencyServiceImpl.class);
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 596f1cd..0159840 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
@@ -386,8 +386,8 @@
         if (createVO.getTransferTime() != null) {
             task.setPlannedStartTime(createVO.getTransferTime());
         }
-        if (createVO.getTransferDistance() != null) {
-            task.setEstimatedDistance(createVO.getTransferDistance());
+        if (createVO.getDistance() != null) {
+            task.setEstimatedDistance(createVO.getDistance());
         }
         if (createVO.getPlannedStartTime() != null) {
             task.setPlannedStartTime(createVO.getPlannedStartTime());
@@ -481,14 +481,13 @@
     @Override
     @Transactional
     public int updateSysTask(TaskUpdateVO updateVO, Boolean updateFromLegacy) {
-        SysTask oldTask = sysTaskMapper.selectSysTaskByTaskId(updateVO.getTaskId());
-        if (oldTask == null) {
+        SysTask task = sysTaskMapper.selectSysTaskByTaskId(updateVO.getTaskId());
+        if (task == null) {
             throw new RuntimeException("浠诲姟涓嶅瓨鍦�");
         }
         Long userId = SecurityUtils.getUserId();
         String userName = SecurityUtils.getUsername();
-        
-        SysTask task = new SysTask();
+
         task.setTaskId(updateVO.getTaskId());
         task.setTaskDescription(updateVO.getTaskDescription());
         task.setPlannedStartTime(updateVO.getPlannedStartTime());
@@ -500,43 +499,32 @@
 
 
         
-        // 璁剧疆閫氱敤鍦板潃鍜屽潗鏍囦俊鎭�
-        task.setDepartureAddress(updateVO.getDepartureAddress());
-        task.setDestinationAddress(updateVO.getDestinationAddress());
-        task.setDepartureLongitude(updateVO.getDepartureLongitude());
-        task.setDepartureLatitude(updateVO.getDepartureLatitude());
-        task.setDestinationLongitude(updateVO.getDestinationLongitude());
-        task.setDestinationLatitude(updateVO.getDestinationLatitude());
+
         
         // 璁剧疆棰勮璺濈
         if (updateVO.getEstimatedDistance() != null) {
             task.setEstimatedDistance(updateVO.getEstimatedDistance());
-        } else if (updateVO.getTransferDistance() != null) {
-            // 鍏煎鎬ユ晳杞繍瀛楁
-            task.setEstimatedDistance(updateVO.getTransferDistance());
         } else if (updateVO.getDistance() != null) {
-            // 鍏煎绂忕杞﹀瓧娈�
+            // 鍏煎鎬ユ晳杞繍瀛楁
             task.setEstimatedDistance(updateVO.getDistance());
         }
         
         // 濡傛灉鏇存柊浜嗛儴闂↖D
         if (updateVO.getDeptId() != null) {
             task.setDeptId(updateVO.getDeptId());
-        }else{
-            task.setDeptId(oldTask.getDeptId());
         }
-        
         // 濡傛灉鏇存柊浜嗕换鍔$紪鍙�
         if (updateVO.getTaskCode() != null) {
             task.setTaskCode(updateVO.getTaskCode());
         }
+        Boolean hasSetDepartureFlag=false;
         //璁剧疆鎬婚儴鎺ㄩ��
-        task.setIsHeadPush(this.isTaskHeaderPush(oldTask.getCreatorId(), task.getDeptId())?"1":"0");
+        task.setIsHeadPush(this.isTaskHeaderPush(task.getCreatorId(), task.getDeptId())?"1":"0");
         // 鑷姩鑾峰彇鍑哄彂鍦癎PS鍧愭爣锛堝鏋滄洿鏂颁簡鍦板潃浣嗙己澶卞潗鏍囷級
         if (updateVO.getDepartureAddress() != null && 
             (updateVO.getDepartureLongitude() == null || updateVO.getDepartureLatitude() == null) && 
             mapService != null) {
-            if (!updateVO.getDepartureAddress().equals(oldTask.getDepartureAddress())) {
+            if (!updateVO.getDepartureAddress().equals(task.getDepartureAddress())) {
                 try {
                     Map<String, Double> coords = mapService.geocoding(
                         updateVO.getDepartureAddress(),
@@ -545,6 +533,7 @@
                     if (coords != null) {
                         task.setDepartureLongitude(BigDecimal.valueOf(coords.get("lng")));
                         task.setDepartureLatitude(BigDecimal.valueOf(coords.get("lat")));
+                        hasSetDepartureFlag = true;
 //                        log.info("鍑哄彂鍦癎PS鍧愭爣鑷姩鑾峰彇鎴愬姛: {}, {}", coords.get("lng"), coords.get("lat"));
                     }
                 } catch (Exception e) {
@@ -552,12 +541,20 @@
                 }
             }
         }
-        
+        // 璁剧疆閫氱敤鍦板潃鍜屽潗鏍囦俊鎭�
+        task.setDepartureAddress(updateVO.getDepartureAddress());
+        if(!hasSetDepartureFlag) {
+
+            task.setDepartureLongitude(updateVO.getDepartureLongitude());
+            task.setDepartureLatitude(updateVO.getDepartureLatitude());
+        }
+
+        Boolean hasSetDestinationFlag=false;
         // 鑷姩鑾峰彇鐩殑鍦癎PS鍧愭爣锛堝鏋滄洿鏂颁簡鍦板潃浣嗙己澶卞潗鏍囷級
         if (updateVO.getDestinationAddress() != null && 
             (updateVO.getDestinationLongitude() == null || updateVO.getDestinationLatitude() == null) && 
             mapService != null) {
-            if (!updateVO.getDestinationAddress().equals(oldTask.getDestinationAddress())) {
+            if (!updateVO.getDestinationAddress().equals(task.getDestinationAddress())) {
                 try {
                     Map<String, Double> coords = mapService.geocoding(
                         updateVO.getDestinationAddress(),
@@ -566,6 +563,7 @@
                     if (coords != null) {
                         task.setDestinationLongitude(BigDecimal.valueOf(coords.get("lng")));
                         task.setDestinationLatitude(BigDecimal.valueOf(coords.get("lat")));
+                        hasSetDestinationFlag = true;
 //                        log.info("鐩殑鍦癎PS鍧愭爣鑷姩鑾峰彇鎴愬姛: {}, {}", coords.get("lng"), coords.get("lat"));
                     }
                 } catch (Exception e) {
@@ -573,6 +571,12 @@
                 }
             }
         }
+        task.setDestinationAddress(updateVO.getDestinationAddress());
+        if(!hasSetDestinationFlag) {
+            task.setDestinationLongitude(updateVO.getDestinationLongitude());
+            task.setDestinationLatitude(updateVO.getDestinationLatitude());
+        }
+
         if(updateVO.getAssignees()!=null && !updateVO.getAssignees().isEmpty()){
            TaskCreateVO.AssigneeInfo assigneeInfo= updateVO.getAssignees().get(0);
             task.setAssigneeId(assigneeInfo.getUserId());
@@ -593,7 +597,8 @@
                 needResync = true;
             }
         }
-        
+
+
         // 鏇存柊鎵ц浜哄憳锛堟娴嬩汉鍛樺彉鏇达級
         if (result > 0 && updateVO.getAssignees() != null) {
             boolean assigneesChanged = sysTaskAssigneeService.updateTaskAssignees(
@@ -605,43 +610,52 @@
         }
         Long dispatchOrderId=0L;
         // 鏇存柊鎬ユ晳杞繍鎵╁睍淇℃伅锛堟娴嬪湴鍧�鍜屾垚浜や环鍙樻洿锛�
-        if (result > 0 && "EMERGENCY_TRANSFER".equals(oldTask.getTaskType())) {
+        if (result > 0 && "EMERGENCY_TRANSFER".equals(task.getTaskType())) {
             SysTaskEmergency oldEmergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(updateVO.getTaskId());
             sysEmergencyTaskService.updateEmergencyInfoFromUpdateVO(oldEmergency, updateVO, userName);
           dispatchOrderId=  oldEmergency.getLegacyDispatchOrdId();
-            sysEmergencyTaskService.markNeedResyncIfNecessary(updateVO.getTaskId(), oldTask, updateVO, updateFromLegacy);
+
+            markNeedSync(task,updateVO);
         }
         
         // 鏇存柊绂忕杞︽墿灞曚俊鎭�
-        if (result > 0 && "WELFARE".equals(oldTask.getTaskType())) {
+        if (result > 0 && "WELFARE".equals(task.getTaskType())) {
             if (updateVO.getPassenger() != null || updateVO.getStartAddress() != null || updateVO.getEndAddress() != null) {
                 sysWelfareTaskService.updateWelfareInfo(updateVO.getTaskId(), updateVO, userName);
             }
         }
         
-        // 濡傛灉鏄�ユ晳杞繍浠诲姟涓旀湁鍙樻洿锛屾爣璁伴渶瑕侀噸鏂板悓姝�
-        if (result > 0 && "EMERGENCY_TRANSFER".equals(oldTask.getTaskType()) && needResync && !updateFromLegacy) {
-            sysEmergencyTaskService.markNeedResyncIfNecessary(updateVO.getTaskId(), oldTask, updateVO, updateFromLegacy);
-        }
+
         
         // 璁板綍鎿嶄綔鏃ュ織
         if (result > 0) {
             recordTaskLog(updateVO.getTaskId(), "UPDATE", "鏇存柊浠诲姟",
-                buildTaskDescription(oldTask), buildTaskDescription(task),
+                buildTaskDescription(task), buildTaskDescription(task),
                 userId, userName);
         }
 
-        if(result > 0 && oldTask.getTaskStatus().equals(TaskStatus.PENDING.getCode())
+        if(result > 0 && task.getTaskStatus().equals(TaskStatus.PENDING.getCode())
                 && updateVO.getAssignees() != null
                 && !updateVO.getAssignees().isEmpty()
                 && LongUtil.isNotEmpty(dispatchOrderId)){
 
-            this.sendTaskAssigneeEvent(updateVO,oldTask,userId,userName);
+            this.sendTaskAssigneeEvent(updateVO,task,userId,userName);
         }
 
         return result;
     }
 
+
+    private void markNeedSync(SysTask sysTask,TaskUpdateVO updateVO){
+        // 濡傛灉鏄�ユ晳杞繍浠诲姟涓旀湁鍙樻洿锛屾爣璁伴渶瑕侀噸鏂板悓姝�
+        if ( "EMERGENCY_TRANSFER".equals(sysTask.getTaskType()) ) {
+
+            sysEmergencyTaskService.markNeedResyncIfNecessary(updateVO.getTaskId(), sysTask, updateVO, true);
+
+            eventPublisher.publishEvent(new TaskUpdateEvent(this,sysTask.getTaskId(),
+                    sysTask.getTaskCode(),sysTask.getTaskType()));
+        }
+    }
     /**
      * 鏇存柊浠诲姟锛堢敤浜庢棫绯荤粺鍚屾锛�
      * 
@@ -803,7 +817,8 @@
             }
             taskEmergency.setUpdateTime(DateUtils.getNowDate());
 
-            Boolean hasEmergencyInfo = updateVO.getHospitalOut() != null || updateVO.getHospitalIn() != null || updateVO.getPatient() != null;
+            Boolean hasEmergencyInfo = updateVO.getHospitalOut() != null || updateVO.getHospitalIn() != null || updateVO.getPatient() != null
+                    || updateVO.getPrice() != null || updateVO.getDistance() != null;
 
 
             // 浣跨敤TaskCreateVO鐨勫瓧娈垫潵鏇存柊鎬ユ晳杞繍淇℃伅
@@ -1426,8 +1441,8 @@
         if (createVO.getTransferTime() != null) {
             task.setPlannedStartTime(createVO.getTransferTime());
         }
-        if (createVO.getTransferDistance() != null) {
-            task.setEstimatedDistance(createVO.getTransferDistance());
+        if (createVO.getDistance() != null) {
+            task.setEstimatedDistance(createVO.getDistance());
         }
         
         // 璁剧疆绂忕杞︾壒瀹氫俊鎭�
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskDispatchSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskDispatchSyncServiceImpl.java
new file mode 100644
index 0000000..b39db4b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskDispatchSyncServiceImpl.java
@@ -0,0 +1,395 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.LongUtil;
+import com.ruoyi.common.utils.MapValueUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskAssignee;
+import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.domain.SysTaskVehicle;
+import com.ruoyi.system.domain.vo.TaskCreateVO;
+import com.ruoyi.system.event.TaskDispatchSyncEvent;
+import com.ruoyi.system.mapper.*;
+import com.ruoyi.system.service.ISysTaskEmergencyService;
+import com.ruoyi.system.service.ITaskDispatchSyncService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鍚屾鏂扮郴缁熶腑鐨勮皟搴﹀埌鏃х郴缁熶腑
+ */
+@Slf4j
+@Service
+public class TaskDispatchSyncServiceImpl implements ITaskDispatchSyncService {
+
+    @Autowired
+    private ApplicationEventPublisher eventPublisher;
+
+    @Override
+    public Long syncDispatch(Long taskId) {
+        return this.syncDispatchOrderToLegacy(taskId);
+    }
+
+    @Autowired
+    private LegacySystemConfig legacyConfig;
+
+    @Autowired
+    private ISysTaskEmergencyService sysTaskEmergencyService;
+
+    @Autowired
+    private SysTaskMapper sysTaskMapper;
+
+    @Autowired
+    private SysTaskVehicleMapper sysTaskVehicleMapper;
+
+    @Autowired
+    private SysTaskAssigneeMapper sysTaskAssigneeMapper;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private LegacyTransferSyncMapper legacyTransferSyncMapper;
+
+    @Autowired
+    private TaskSyncUtilService taskSyncUtilService;
+    @Autowired
+    private TaskDispatchSyncUtilService taskDispatchSyncUtilService;
+
+
+
+    /**
+     * 閲嶆柊鍚屾杞﹁締鍜屼汉鍛樺彉鏇寸殑浠诲姟鍒版棫绯荤粺
+     * 褰撲换鍔$殑杞﹁締淇℃伅鎴栦汉鍛樹俊鎭彂鐢熷彉鏇存椂锛岄渶瑕佽皟鐢ㄦ棫绯荤粺鎺ュ彛閲嶆柊鍚屾
+     * 浣跨敤 admin_save_25.asp 鎺ュ彛锛岃�屼笉鏄� admin_save_24.gds
+     */
+   @Override
+    public boolean resyncDispatchOrderToLegacy(Long taskId) {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
+            return false;
+        }
+
+        try {
+            // 鏌ヨ浠诲姟淇℃伅
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+            if (task == null) {
+                log.error("浠诲姟涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
+                return false;
+            }
+
+            // 鍙悓姝ユ�ユ晳杞繍浠诲姟
+            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
+                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
+                return false;
+            }
+
+            // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
+            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+            if (emergency == null) {
+                log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
+                return false;
+            }
+
+            // 蹇呴』宸茬粡鍚屾杩囪皟搴﹀崟
+            if (emergency.getLegacyDispatchOrdId() == null || emergency.getLegacyDispatchOrdId() <= 0) {
+                log.warn("璋冨害鍗曟湭鍚屾锛屾棤娉曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
+                return false;
+            }
+
+            Long serviceOrdId = emergency.getLegacyServiceOrdId();
+            if (serviceOrdId == null || serviceOrdId <= 0) {
+                log.warn("鏈嶅姟鍗曟湭鍚屾锛屾棤娉曢噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
+                return false;
+            }
+
+            // ====== 鍓嶇疆鏍¢獙锛氱‘淇濅换鍔℃暟鎹畬鏁� ======
+
+            // 1. 妫�鏌ユ槸鍚﹀凡鍒嗛厤杞﹁締
+            List<SysTaskVehicle> taskVehicles = sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId);
+            if (taskVehicles == null || taskVehicles.isEmpty()) {
+                log.warn("浠诲姟鏈垎閰嶈溅杈嗭紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
+                return false;
+            }
+
+            // 2. 妫�鏌ユ槸鍚﹀凡鍒嗛厤鎵ц浜哄憳
+            List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
+            if (taskAssignees == null || taskAssignees.isEmpty()) {
+                log.warn("浠诲姟鏈垎閰嶆墽琛屼汉鍛橈紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
+                return false;
+            }
+
+            // 3. 妫�鏌ラ绾︽椂闂存槸鍚︽湁鏁�
+            if (task.getPlannedStartTime() == null || task.getPlannedStartTime().getTime() <= 0L) {
+                log.warn("浠诲姟棰勭害鏃堕棿鏃犳晥锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
+                return false;
+            }
+
+            // 4. 妫�鏌ヨ浆鍑哄尰闄俊鎭�
+            if (StringUtils.isEmpty(emergency.getHospitalOutName()) || StringUtils.isEmpty(emergency.getHospitalOutAddress())) {
+                log.warn("浠诲姟杞嚭鍖婚櫌淇℃伅涓嶅畬鏁达紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
+                return false;
+            }
+
+            // 5. 妫�鏌ヨ浆鍏ュ尰闄俊鎭�
+            if (StringUtils.isEmpty(emergency.getHospitalInName()) || StringUtils.isEmpty(emergency.getHospitalInAddress())) {
+                log.warn("浠诲姟杞叆鍖婚櫌淇℃伅涓嶅畬鏁达紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
+                return false;
+            }
+
+            // 6. 妫�鏌ユ偅鑰呭熀鏈俊鎭�
+            if (StringUtils.isEmpty(emergency.getPatientName()) || StringUtils.isEmpty(emergency.getPatientPhone())) {
+                log.warn("浠诲姟鎮h�呬俊鎭笉瀹屾暣锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
+                return false;
+            }
+
+            log.info("浠诲姟鏁版嵁鏍¢獙閫氳繃锛屽紑濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+
+            // 鏋勫缓璇锋眰鍙傛暟锛堜娇鐢ㄧ浉鍚岀殑鍙傛暟鏋勫缓鏂规硶锛�
+            Map<String, Object> params = taskDispatchSyncUtilService.buildDispatchOrderParams(task, emergency);
+            params.put("DispatchOrdID", emergency.getLegacyDispatchOrdId().toString());
+            params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString());
+            params.put("DispatchOrdState", "3");
+            log.info("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熻姹傚弬鏁�: {}", params);
+            // 鍙戦�丠TTP璇锋眰鍒版棫绯荤粺锛堜娇鐢╝dmin_save_25.asp鎺ュ彛锛�
+            String response =taskSyncUtilService.sendHttpPost(legacyConfig.getDispatchUpdateUrl(), params);
+            log.info("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熷搷搴�: ServiceOrdID:{},DispatchOrdId:{},Result: {}",emergency.getLegacyServiceOrdId(),emergency.getLegacyDispatchOrdId(), response);
+            // 瑙f瀽鍝嶅簲
+//            Long dispatchOrdId = parseResponse(response);
+
+            if (response != null && response.equals("OK")) {
+                // 閲嶆柊鍚屾鎴愬姛锛屾竻闄ら噸鏂板悓姝ユ爣璁�
+                emergency.setNeedResync(0);
+                emergency.setDispatchSyncTime(new Date());
+                emergency.setDispatchSyncErrorMsg(null);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+//                log.info("璋冨害鍗曢噸鏂板悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+                return true;
+            } else {
+                // 閲嶆柊鍚屾澶辫触
+                emergency.setDispatchSyncErrorMsg("閲嶆柊鍚屾澶辫触锛�" + response);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+                log.error("璋冨害鍗曢噸鏂板悓姝ュけ璐ワ紝浠诲姟ID: {}, 鍝嶅簲: {}", taskId, response);
+                return false;
+            }
+
+        } catch (Exception e) {
+            log.error("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熷紓甯革紝浠诲姟ID: {}", taskId, e);
+
+            // 鏇存柊鍚屾鐘舵�佷负澶辫触
+            try {
+                SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+                if (emergency != null) {
+                    emergency.setDispatchSyncErrorMsg("閲嶆柊鍚屾寮傚父: " + e.getMessage());
+                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+                }
+            } catch (Exception ex) {
+                log.error("鏇存柊璋冨害鍗曞悓姝ョ姸鎬佸け璐�", ex);
+            }
+
+            return false;
+        }
+    }
+
+
+    public Map<String,Object> getLegacyDispatchByDispatchId(Long dispatchId) {
+        List<Map<String, Object>> result = legacyTransferSyncMapper.selectByDispatchId(dispatchId);
+        if(!CollectionUtils.isEmpty(result)){
+            return result.get(0);
+        }else{
+            return null;
+        }
+    }
+
+    /**
+     * 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛�
+     */
+
+    private Long syncDispatchOrderToLegacy(Long taskId) {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
+            return null;
+        }
+
+        try {
+            // 鏌ヨ浠诲姟淇℃伅
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+            if (task == null) {
+                log.error("浠诲姟涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+
+            // 鍙悓姝ユ�ユ晳杞繍浠诲姟
+            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
+                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
+                return null;
+            }
+
+            // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
+            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+            if (emergency == null) {
+                log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+
+            // 濡傛灉宸茬粡鍚屾杩囷紝涓嶅啀閲嶅鍚屾
+            if (emergency.getLegacyDispatchOrdId() != null && emergency.getLegacyDispatchOrdId() > 0) {
+//                log.info("璋冨害鍗曞凡鍚屾杩囷紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+                return emergency.getLegacyDispatchOrdId();
+            }
+
+            Long serviceOrdId=emergency.getLegacyServiceOrdId();
+            // 蹇呴』鍏堝悓姝ユ湇鍔″崟
+            if (LongUtil.isEmpty(serviceOrdId)) {
+                log.warn("鏈嶅姟鍗曟湭鍚屾锛屾棤娉曞悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
+                return null;
+            }
+
+            // ====== 鍓嶇疆鏍¢獙锛氱‘淇濅换鍔℃暟鎹畬鏁� ======
+
+            // 1. 妫�鏌ユ槸鍚﹀凡鍒嗛厤杞﹁締
+            List<SysTaskVehicle> taskVehicles = sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId);
+            if (taskVehicles == null || taskVehicles.isEmpty()) {
+                log.warn("浠诲姟鏈垎閰嶈溅杈嗭紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+
+            // 2. 妫�鏌ユ槸鍚﹀凡鍒嗛厤鎵ц浜哄憳
+            List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
+            if (taskAssignees == null || taskAssignees.isEmpty()) {
+                log.warn("浠诲姟鏈垎閰嶆墽琛屼汉鍛橈紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+
+            // 3. 妫�鏌ラ绾︽椂闂存槸鍚︽湁鏁堬紙蹇呴』澶т簬1970骞达級
+            if (task.getPlannedStartTime() == null) {
+                log.warn("浠诲姟鏈缃绾︽椂闂达紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+
+            // 妫�鏌ラ绾︽椂闂存槸鍚﹀ぇ浜�1970-01-01锛堟椂闂存埑0瀵瑰簲1970-01-01 00:00:00锛�
+            long timestamp1970 = 0L;
+            if (task.getPlannedStartTime().getTime() <= timestamp1970) {
+                log.warn("浠诲姟棰勭害鏃堕棿鏃犳晥锛堝皬浜庣瓑浜�1970骞达級锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}, 棰勭害鏃堕棿: {}",
+                        taskId, task.getPlannedStartTime());
+                return null;
+            }
+
+            // 4. 妫�鏌ヨ浆鍑哄尰闄俊鎭�
+            if (StringUtils.isEmpty(emergency.getHospitalOutName())) {
+                log.warn("浠诲姟鏈缃浆鍑哄尰闄紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+
+            if (StringUtils.isEmpty(emergency.getHospitalOutAddress())) {
+                log.warn("浠诲姟鏈缃浆鍑哄尰闄㈠湴鍧�锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
+                return null;
+            }
+
+            // 5. 妫�鏌ヨ浆鍏ュ尰闄俊鎭�
+            if (StringUtils.isEmpty(emergency.getHospitalInName())) {
+                log.warn("浠诲姟鏈缃浆鍏ュ尰闄紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+
+            if (StringUtils.isEmpty(emergency.getHospitalInAddress())) {
+                log.warn("浠诲姟鏈缃浆鍏ュ尰闄㈠湴鍧�锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
+                return null;
+            }
+
+            // 6. 妫�鏌ユ偅鑰呭熀鏈俊鎭�
+            if (StringUtils.isEmpty(emergency.getPatientName())) {
+                log.warn("浠诲姟鏈缃偅鑰呭鍚嶏紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+
+            if (StringUtils.isEmpty(emergency.getPatientPhone())) {
+                log.warn("浠诲姟鏈缃偅鑰呯數璇濓紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+
+            log.info("浠诲姟鏁版嵁鏍¢獙閫氳繃锛屽紑濮嬪悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
+
+            // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
+            emergency.setDispatchSyncStatus(1);
+            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+            SysUser u=sysUserMapper.selectUserById(task.getCreatorId());
+            Integer oaUserID= u.getOaUserId();
+
+            // 鏋勫缓璇锋眰鍙傛暟
+            Map<String, Object> params = taskDispatchSyncUtilService.buildDispatchOrderParams(task, emergency);
+
+
+            // 鍙戦�丠TTP璇锋眰
+            String response =taskSyncUtilService.sendHttpPost(legacyConfig.getDispatchCreateUrl(), params);
+
+            // 瑙f瀽鍝嶅簲
+            Long dispatchOrdId = taskSyncUtilService.parseResponse(response);
+
+            if (dispatchOrdId != null && dispatchOrdId > 0) {
+                // 鍚屾鎴愬姛锛屾洿鏂拌褰�
+                emergency.setLegacyDispatchOrdId(dispatchOrdId);
+                emergency.setDispatchSyncStatus(2); // 鍚屾鎴愬姛
+                emergency.setDispatchSyncTime(new Date());
+                emergency.setDispatchSyncErrorMsg(null);
+                //鏇存柊璋冨害鍗曚俊鎭紑鍒版柊绯荤粺
+                Map<String,Object> dispatchInfo = this.getLegacyDispatchByDispatchId(dispatchOrdId);
+                if (dispatchInfo != null) {
+                    emergency.setLegacyDispatchNsTime(MapValueUtils.getDateValue(dispatchInfo, "DispatchOrd_NS_Time")); // 鍚屾鎴愬姛
+                    emergency.setLegacyDispatchOrdClass(MapValueUtils.getStringValue(dispatchInfo, "DispatchOrdClass")); // 鍚屾鎴愬姛
+                    emergency.setLegacyDispatchOrdNo(MapValueUtils.getStringValue(dispatchInfo, "DispatchOrdNo")); // 鍚屾鎴愬姛
+                    emergency.setLegacyServiceNsTime(MapValueUtils.getDateValue(dispatchInfo, "ServiceOrd_CC_Time")); // 鍚屾鎴愬姛
+                    emergency.setLegacyServiceOrdClass(MapValueUtils.getStringValue(dispatchInfo, "ServiceOrdClass")); // 鍚屾鎴愬姛
+                }
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+                eventPublisher.publishEvent(new TaskDispatchSyncEvent(this, taskId, task.getTaskCode(),serviceOrdId, dispatchOrdId, oaUserID));
+
+//                log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
+                return dispatchOrdId;
+            } else {
+                // 鍚屾澶辫触
+                emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
+                emergency.setDispatchSyncTime(new Date());
+                emergency.setDispatchSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑DispatchOrdID: " + response);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+                log.error("璋冨害鍗曞悓姝ュけ璐ワ紝浠诲姟ID: {}, 鍝嶅簲: {}", taskId, response);
+                return null;
+            }
+
+        } catch (Exception e) {
+            log.error("鍚屾璋冨害鍗曞埌鏃х郴缁熷紓甯革紝浠诲姟ID: {}", taskId, e);
+
+            // 鏇存柊鍚屾鐘舵�佷负澶辫触
+            try {
+                SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+                if (emergency != null) {
+                    emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
+                    emergency.setDispatchSyncTime(new Date());
+                    emergency.setDispatchSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
+                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+                }
+            } catch (Exception ex) {
+                log.error("鏇存柊璋冨害鍗曞悓姝ョ姸鎬佸け璐�", ex);
+            }
+
+            return null;
+        }
+    }
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskDispatchSyncUtilService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskDispatchSyncUtilService.java
new file mode 100644
index 0000000..8300d98
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskDispatchSyncUtilService.java
@@ -0,0 +1,408 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.domain.vo.TaskCreateVO;
+import com.ruoyi.system.mapper.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class TaskDispatchSyncUtilService {
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private SysTaskMapper sysTaskMapper;
+    @Autowired
+    private SysTaskAssigneeMapper sysTaskAssigneeMapper;
+
+    @Autowired
+    private TaskSyncUtilService taskSyncUtilService;
+
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
+    /**
+     * 鏋勫缓璋冨害鍗曞悓姝ュ弬鏁�
+     */
+    public Map<String, Object> buildDispatchOrderParams(SysTask task, SysTaskEmergency emergency) {
+        Map<String, Object> params = new HashMap<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        // 鑾峰彇绠$悊鍛業D锛堝垱寤轰汉ID瀵瑰簲鐨凮A_UserID锛�
+        String adminID = taskSyncUtilService.getAdminID(task);
+
+        // 鑾峰彇璋冨害鍗曠被鍨嬶紙浠庝换鍔℃墍灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佽幏鍙栵級
+        String dispatchOrdClass = "SA"; // 榛樿鍊�
+        if (task.getDeptId() != null) {
+            try {
+                SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
+                if (dept != null && StringUtils.isNotEmpty(dept.getDispatchOrderClass())) {
+                    dispatchOrdClass = dept.getDispatchOrderClass();
+//                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 璋冨害鍗曠紪鐮�: {}", task.getDeptId(), dispatchOrdClass);
+                }
+            } catch (Exception e) {
+                log.error("鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: {}", task.getDeptId(), e);
+            }
+        }
+        params.put("AdminID", adminID);
+
+        // 鍩烘湰淇℃伅
+        params.put("DispatchOrdClass", dispatchOrdClass);
+        params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString());
+        params.put("DispatchOrdState", "1"); // 璋冨害鍗曠姸鎬�
+
+        // 鏃堕棿淇℃伅
+        if (task.getPlannedStartTime() != null) {
+            params.put("DispatchOrdTraSDTime", sdf.format(task.getPlannedStartTime())); // 鎷熷嚭鍙戞椂闂�
+        } else {
+            params.put("DispatchOrdTraSDTime", "");
+        }
+        params.put("DispatchOrd_NS_Time", task.getCreateTime() != null ? sdf.format(task.getCreateTime()) : sdf.format(new Date())); // 寮�鍗曟椂闂�
+
+        // 杞﹁締淇℃伅 - 浠庝换鍔″叧鑱旂殑杞﹁締鑾峰彇CarID
+        Long carId = getTaskVehicleCarId(task.getTaskId());
+        params.put("DispatchOrdCarID", carId.toString());
+
+
+        // 鑱旂郴浜轰俊鎭�
+        params.put("DispatchOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
+        params.put("DispatchOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
+        params.put("ServiceOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
+        params.put("ServiceOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
+        params.put("ServiceOrdPtName", StringUtils.nvl(emergency.getPatientName(), ""));
+        params.put("ServiceOrdTraStreet",StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), "")));
+        // 鍦板潃淇℃伅
+        params.put("DispatchOrdTraStreet", StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), "")));
+        params.put("DispatchOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), "")));
+        params.put("DispatchOrdTraVia", ""); // 瀹為檯閫旂粡鍦�
+
+        // 鎿嶄綔鍛戒护
+        params.put("DispatchOrd_Check", "0"); // 3=鐩存帴寮哄埗瀹屾垚
+
+        // 缁╂晥鍜岃垂鐢細纭繚鏁板�煎瓧娈典笉涓簄ull
+        String transferPrice = "0";
+        if (emergency.getTransferPrice() != null) {
+            try {
+                transferPrice = emergency.getTransferPrice().toString();
+                if (transferPrice.contains(".")) {
+                    transferPrice = new java.math.BigDecimal(transferPrice).stripTrailingZeros().toPlainString();
+                }
+            } catch (Exception e) {
+                log.warn("杞崲杞繍浠锋牸澶辫触锛屼换鍔D: {}, 浣跨敤榛樿鍊�0", task.getTaskId(), e);
+                transferPrice = "0";
+            }
+        }
+        params.put("DispatchOrdPerfomance", transferPrice);
+        params.put("StretcherMoney", "0"); // 鎶媴鏋惰垂
+        params.put("AddMoneyType", ""); // 闄勫姞椤圭洰
+        params.put("AddMoney", "0"); // 闄勫姞椤圭洰璐圭敤
+        params.put("AddMoneyExplain", ""); // 闄勫姞椤圭洰璇存槑
+
+        // 浜哄憳淇℃伅
+        params.put("EntourageName_aid1", ""); // 澶栨彺浜哄憳1
+        params.put("EntourageName_aid2", ""); // 澶栨彺浜哄憳2
+        params.put("DispatchOrd_NS_ID", adminID); // 璋冨害浜哄憳ID
+        params.put("RecommendedCar", ""); // 鎸囧畾杞﹀瀷
+        params.put("ServiceOrdTaskRemarks", StringUtils.nvl(task.getTaskDescription(), "")); // 鍖绘姢鍙稿娉�
+
+        // 鐢佃瘽淇℃伅
+        params.put("Phone", StringUtils.nvl(emergency.getPatientPhone(), ""));
+        params.put("TEL_Time", sdf.format(new Date()));
+        params.put("TEL_Remarks", "鏂扮郴缁熷悓姝ュ垱寤鸿皟搴﹀崟");
+
+        // 鏃堕暱淇℃伅
+        params.put("TimeLength_Program", "0"); // 澶у瀷娲诲姩淇濋殰鏃堕暱
+        params.put("TimeLength_ICU", "0"); // 灞呭ICU鏃堕暱
+        params.put("TimeLength_Wait", "0"); // 绛夊緟鏃堕暱
+
+        // 閲岀▼鏁�
+        params.put("DispatchOrdTraStreetMileage", ""); // 寮�濮嬮噷绋嬫暟
+        params.put("DispatchOrdTraEndMileage", ""); // 缁撴潫閲岀▼鏁�
+
+        // 鏈嶅姟鍗曠浉鍏充俊鎭紙浠巃dmin_save_24.gds 221-255琛岃ˉ鍏咃級
+        params.put("ServiceOrdPtCondition", StringUtils.nvl(emergency.getPatientCondition(), "")); // 鐥呮儏鎻忚堪
+        params.put("ServiceOrdPtDoctor", ""); // 鎮h�呭尰鐢�
+        params.put("ServiceOrdPtDoctorPhone", ""); // 鎮h�呭尰鐢熺數璇�
+        params.put("TransferModeID", ""); // 杞繍鏂瑰紡
+        params.put("ServiceOrdVIP", "0"); // VIP瀹㈡埛
+        // 浠锋牸瀛楁澶嶇敤锛岀‘淇濅竴鑷存��
+        params.put("ServiceOrdTraTxnPrice", transferPrice); // 鎴愪氦浠�
+        params.put("ServiceOrdTraPrePayment", "0"); // 闇�棰勪粯娆�
+        params.put("SettlementPrice", "0"); // 缁撶畻浠�
+        params.put("ServiceOrdTraPriceReason", ""); // 宸环鍘熷洜
+        params.put("ServiceOrd_CC_ID", ""); // 瀹㈡湇浜哄憳ID
+        params.put("ServiceOrd_Sale_ID", ""); // 閿�鍞汉鍛業D
+        params.put("ServiceOrdIntroducer", ""); // 浠嬬粛浜�
+        params.put("ServiceOrd_work_ID", ""); // 涓昏浼佸井瀹㈡湇ID
+        params.put("ServiceOrd_work_IDs", ""); // 鍏朵粬浼佸井瀹㈡湇ID
+        params.put("ServiceOrd_work_is", "0"); // 鏄惁浼佸井鎴愪氦
+        params.put("CommissionScenarioID", "0"); // 浼佸井缁╂晥鏂规
+        params.put("ServiceOrdApptDate", task.getPlannedStartTime() != null ? sdf.format(task.getPlannedStartTime()) : ""); // 棰勭害鏃堕棿
+        params.put("ServiceOrdPtDiagnosis", ""); // 璇婃柇
+        params.put("ServiceOrdOperationRemarks", "鏂扮郴缁熷悓姝ュ垱寤�"); // 鎿嶄綔澶囨敞
+        params.put("ServiceOrdEstimatedOrderDate", ""); // 棰勮娲惧崟鏃堕棿
+        params.put("ServiceOrdEstimatedOrderDateOld", ""); // 鍘熼璁℃淳鍗曟椂闂�
+        params.put("ServiceOrdViaDistance", "0"); // 涓�旇窛绂�
+        // 璺濈瀛楁锛氱‘淇濅笉涓虹┖锛岄伩鍏嶆棫绯荤粺鎺ュ彛鎶ラ敊
+        String transferDistance = "0";
+        if (emergency.getTransferDistance() != null) {
+            try {
+                transferDistance = emergency.getTransferDistance().toString();
+                // 鍘婚櫎鍙兘鐨勫皬鏁扮偣鍚庡浣欑殑0
+                if (transferDistance.contains(".")) {
+                    transferDistance = new java.math.BigDecimal(transferDistance).stripTrailingZeros().toPlainString();
+                }
+            } catch (Exception e) {
+                log.warn("杞崲杞繍璺濈澶辫触锛屼换鍔D: {}, 浣跨敤榛樿鍊�0", task.getTaskId(), e);
+                transferDistance = "0";
+            }
+        }
+//        log.info("杞繍璺濈:{}",transferDistance);
+        params.put("ServiceOrdTraDistance", transferDistance);
+        params.put("OrderLevel", "0"); // 鏌ョ湅绛夌骇
+        params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
+        params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
+        params.put("DirectionType", "0"); // 杞繍鍘诲悜
+        params.put("ServiceOrdPtOutHospID", emergency.getHospitalOutId() != null ? emergency.getHospitalOutId().toString() : "0"); // 杞嚭鍖婚櫌ID
+        params.put("ServiceOrdPtServices", emergency.getHospitalOutBedNumber()==null?"":emergency.getHospitalOutBedNumber().toString()); // 杞嚭搴婁綅
+        params.put("ServiceOrdPtServicesID",emergency.getHospitalOutDepartmentId()==null?"":emergency.getHospitalOutDepartmentId().toString()); // 杞嚭绉戝ID
+        params.put("ServiceOrdPtInServicesID",emergency.getHospitalInDepartmentId()==null?"":emergency.getHospitalInDepartmentId().toString()); // 杞叆绉戝ID
+        params.put("ServiceOrdPtInServices", emergency.getHospitalInBedNumber()==null?"":emergency.getHospitalInBedNumber().toString());// 杞叆搴婁綅
+        params.put("ServiceOrdPtInHospID", emergency.getHospitalInId() != null ? emergency.getHospitalInId().toString() : "0"); // 杞叆鍖婚櫌ID
+        params.put("ServiceOrdPtOutHosp", StringUtils.nvl(emergency.getHospitalOutName(), "")); // 杞嚭鍖婚櫌
+        params.put("ServiceOrdTraVia", StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), ""))); // 杞嚭鍦板潃
+        params.put("ServiceOrdPtInHosp", StringUtils.nvl(emergency.getHospitalInName(), "")); // 杞叆鍖婚櫌
+        params.put("ServiceOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), ""))); // 杞叆鍦板潃
+        params.put("FromHQ2_is", "0"); // 骞垮窞鎬婚儴鎺ㄩ�佷换鍔℃爣璁�
+
+        // 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID锛岀敤浜庤瘖鏂璉CD锛�
+        // 鏍煎紡锛氶�楀彿鍒嗛殧鐨処D鍒楄〃锛屽 ",1,2,3,"
+        String ordIcdId = "";
+        if (StringUtils.isNotEmpty(emergency.getDiseaseIds())) {
+            // 灏嗗瓨鍌ㄧ殑 "1,2,3" 鏍煎紡杞崲涓烘棫绯荤粺瑕佹眰鐨� ",1,2,3," 鏍煎紡
+            ordIcdId = "," + emergency.getDiseaseIds() + ",";
+            log.info("鐥呮儏ID鍒楄〃宸茶缃紝浠诲姟ID: {}, OrdICD_ID: {}", task.getTaskId(), ordIcdId);
+        }
+        params.put("OrdICD_ID", ordIcdId);
+        params.put("OrdICD_ID_old", ""); // 鏃х梾鎯匢D鍒楄〃锛堢敤浜庡姣旀槸鍚﹂渶瑕佹洿鏂帮級
+
+        // 鎵ц浜哄憳淇℃伅锛堥殢琛屼汉鍛橈級
+        syncTaskAssignees(task, params);
+
+        return params;
+    }
+
+
+    @Autowired
+    private SysTaskVehicleMapper sysTaskVehicleMapper;
+    @Autowired
+    private VehicleInfoMapper vehicleInfoMapper;
+
+
+    /**
+     * 鑾峰彇浠诲姟鍏宠仈杞﹁締鐨勬棫绯荤粺CarID
+     *
+     * @param taskId 浠诲姟ID
+     * @return CarID锛屽鏋滄湭鎵惧埌鍒欒繑鍥�0L
+     */
+    private Long getTaskVehicleCarId(Long taskId) {
+        try {
+            // 浠� sys_task_vehicle 琛ㄦ煡璇㈣溅杈咺D
+            List<SysTaskVehicle> taskVehicles = sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId);
+            if (taskVehicles != null && !taskVehicles.isEmpty()) {
+                // 鍙栫涓�涓叧鑱旂殑杞﹁締
+                Long vehicleId = taskVehicles.get(0).getVehicleId();
+                if (vehicleId != null) {
+                    // 浠� tb_vehicle_info 琛ㄨ幏鍙� car_id
+                    VehicleInfo vehicleInfo = vehicleInfoMapper.selectVehicleInfoById(vehicleId);
+                    if (vehicleInfo != null && vehicleInfo.getCarId() != null) {
+                        Long carId = vehicleInfo.getCarId().longValue();
+                        log.info("鑾峰彇浠诲姟鍏宠仈杞﹁締鐨凜arID鎴愬姛锛屼换鍔D: {}, 杞﹁締ID: {}, CarID: {}",
+                                taskId, vehicleId, carId);
+                        return carId;
+                    } else {
+                        log.warn("杞﹁締淇℃伅涓湭閰嶇疆CarID锛屼换鍔D: {}, 杞﹁締ID: {}", taskId, vehicleId);
+                    }
+                } else {
+                    log.warn("浠诲姟杞﹁締鍏宠仈璁板綍涓溅杈咺D涓虹┖锛屼换鍔D: {}", taskId);
+                }
+            } else {
+                log.warn("浠诲姟鏈叧鑱旇溅杈嗭紝浠诲姟ID: {}", taskId);
+            }
+        } catch (Exception e) {
+            log.error("鏌ヨ浠诲姟鍏宠仈杞﹁締鐨凜arID寮傚父锛屼换鍔D: {}", taskId, e);
+        }
+        return 0L;
+    }
+
+    /**
+     * 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛�
+     *
+     * @param taskId 浠诲姟ID
+     * @return 鎵ц浜哄憳淇℃伅鍒楄〃
+     */
+    private List<TaskCreateVO.AssigneeInfo> getTaskAssignees(Long taskId) {
+        List<TaskCreateVO.AssigneeInfo> assignees = new java.util.ArrayList<>();
+
+        try {
+            // 浠庢暟鎹簱鏌ヨ鎵ц浜哄憳淇℃伅锛堟寜鎺掑簭椤哄簭锛�
+            List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
+
+            if (taskAssignees != null && !taskAssignees.isEmpty()) {
+                // 灏嗘暟鎹簱涓殑鎵ц浜哄憳杞崲涓篈ssigneeInfo瀵硅薄
+                for (SysTaskAssignee taskAssignee : taskAssignees) {
+                    TaskCreateVO.AssigneeInfo assignee = new TaskCreateVO.AssigneeInfo();
+                    assignee.setUserId(taskAssignee.getUserId());
+                    assignee.setUserName(taskAssignee.getUserName());
+                    assignee.setUserType(taskAssignee.getUserType());
+                    assignees.add(assignee);
+                }
+
+                log.info("浠庢暟鎹簱鑾峰彇鎵ц浜哄憳淇℃伅鎴愬姛锛屼换鍔D: {}, 浜哄憳鏁伴噺: {}", taskId, assignees.size());
+                return assignees;
+            }
+
+            // 濡傛灉鏁版嵁搴撲腑娌℃湁鎵ц浜哄憳淇℃伅锛屽皾璇曚粠浠诲姟鐨勪富瑕佹墽琛屼汉鑾峰彇
+//            log.warn("鏁版嵁搴撲腑鏈壘鍒版墽琛屼汉鍛樹俊鎭紝灏濊瘯浠庝换鍔′富瑕佹墽琛屼汉鑾峰彇锛屼换鍔D: {}", taskId);
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+            if (task != null && task.getAssigneeId() != null) {
+                SysUser user = sysUserMapper.selectUserById(task.getAssigneeId());
+                if (user != null) {
+                    TaskCreateVO.AssigneeInfo assignee = new TaskCreateVO.AssigneeInfo();
+                    assignee.setUserId(user.getUserId());
+                    assignee.setUserName(user.getNickName());
+                    assignee.setUserType(taskSyncUtilService.getUserType(user)); // 閫氳繃瑙掕壊鍒ゆ柇绫诲瀷
+                    assignees.add(assignee);
+                }
+            }
+        } catch (Exception e) {
+            log.error("鑾峰彇浠诲姟鎵ц浜哄憳淇℃伅寮傚父锛屼换鍔D: {}", taskId, e);
+        }
+
+        return assignees;
+    }
+    /**
+     * 鍚屾浠诲姟鎵ц浜哄憳淇℃伅鍒拌皟搴﹀崟闅忚浜哄憳鍙傛暟
+     *
+     * @param task 浠诲姟淇℃伅
+     * @param params 璋冨害鍗曞弬鏁癕ap
+     */
+    private void syncTaskAssignees(SysTask task, Map<String, Object> params) {
+        try {
+            // 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛� //TODO 濡傛灉鏈変袱涓徃鏈哄氨瑕� 璁剧疆銆�Entourage_1鍜孍ntourage_2
+            //涓や釜鎶ゅ+灏辫璁剧疆 Entourage_4鍜孍ntourage_6
+            //涓や釜鍖荤敓瑕佽缃� Entourage_3鍜孍ntourage_5
+            List<TaskCreateVO.AssigneeInfo> assignees = getTaskAssignees(task.getTaskId());
+
+            if (assignees == null || assignees.isEmpty()) {
+                log.warn("浠诲姟鏃犳墽琛屼汉鍛橈紝浠诲姟ID: {}", task.getTaskId());
+                // 璁剧疆榛樿绌哄��
+                params.put("EntourageLeadID", "");
+                params.put("Entourage_1", ""); // 鍙告満
+                params.put("Entourage_2", ""); //鍙告満
+                params.put("Entourage_3", ""); // 鍖荤敓
+                params.put("Entourage_5", ""); //鍖荤敓
+                params.put("Entourage_4", ""); // 鎶ゅ+
+                params.put("Entourage_6", ""); // 鎶ゅ+
+
+                return;
+            }
+
+            String leadEntourageId = ""; // 棰嗛槦鐨凟ntourageID
+            String driverOaId = "";      // 鍙告満鐨凮A_UserID
+            String doctorOaId = "";      // 鍖荤敓鐨凮A_UserID
+            String nurseOaId = "";       // 鎶ゅ+鐨凮A_UserID
+
+            // 閬嶅巻鎵ц浜哄憳锛屾牴鎹鑹茬被鍨嬪垎閰嶅埌瀵瑰簲鐨凟ntourage鍙傛暟
+            for (int i = 0; i < assignees.size(); i++) {
+                TaskCreateVO.AssigneeInfo assignee = assignees.get(i);
+                Long userId = assignee.getUserId();
+                String userType = assignee.getUserType(); // 鐩存帴浣跨敤鍓嶇浼犻�掔殑瑙掕壊绫诲瀷
+
+                if (userId == null) {
+                    continue;
+                }
+
+                // 鏌ヨ鐢ㄦ埛鐨凮A_UserID
+                SysUser user = sysUserMapper.selectUserById(userId);
+                if (user == null || user.getOaUserId() == null) {
+                    log.warn("鎵ц浜哄憳淇℃伅涓嶅瓨鍦ㄦ垨鏈厤缃甇A_UserID锛岀敤鎴稩D: {}", userId);
+                    continue;
+                }
+
+                String oaUserId = user.getOaUserId().toString();
+
+                // 鏍规嵁鐢ㄦ埛绫诲瀷鍒嗛厤鍒板搴旂殑Entourage鍙傛暟
+                if ("driver".equals(userType)) {
+                    if (driverOaId.isEmpty()) {
+                        driverOaId = oaUserId;
+                        if(params.get("Entourage_1")==null) {
+                            params.put("Entourage_1", oaUserId);
+                        }else{
+                            params.put("Entourage_2", oaUserId);
+                        }
+                        // 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
+                        if (i == 0 && leadEntourageId.isEmpty()) {
+                            leadEntourageId = "1"; // 鍙告満瀵瑰簲Entourage_1
+                        }
+                    }
+                } else if ("doctor".equals(userType)) {
+                    if (doctorOaId.isEmpty()) {
+                        doctorOaId = oaUserId;
+                        if(params.get("Entourage_3")==null) {
+                            params.put("Entourage_3", oaUserId);
+                        }else{
+                            params.put("Entourage_5", oaUserId);
+                        }
+                        // 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
+                        if (i == 0 && leadEntourageId.isEmpty()) {
+                            leadEntourageId = "3"; // 鍖荤敓瀵瑰簲Entourage_3
+                        }
+                    }
+                } else if ("nurse".equals(userType)) {
+                    if (nurseOaId.isEmpty()) {
+                        nurseOaId = oaUserId;
+                        if(params.get("Entourage_4")==null) {
+                            params.put("Entourage_4", oaUserId);
+                        }else{
+                            params.put("Entourage_6", oaUserId);
+                        }
+                        // 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
+                        if (i == 0 && leadEntourageId.isEmpty()) {
+                            leadEntourageId = "4"; // 鎶ゅ+瀵瑰簲Entourage_4
+                        }
+                    }
+                }
+            }
+
+            // 璁剧疆鍙傛暟
+            params.put("EntourageLeadID", leadEntourageId);
+//            params.put("Entourage_1", driverOaId);  // 鍙告満
+//            params.put("Entourage_3", doctorOaId);  // 鍖荤敓
+//            params.put("Entourage_4", nurseOaId);   // 鎶ゅ+
+
+//            log.info("浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: {}, 棰嗛槦ID: {}, 鍙告満: {}, 鍖荤敓: {}, 鎶ゅ+: {}",
+//                task.getTaskId(), leadEntourageId, driverOaId, doctorOaId, nurseOaId);
+
+        } catch (Exception e) {
+            log.error("鍚屾浠诲姟鎵ц浜哄憳寮傚父锛屼换鍔D: {}", task.getTaskId(), e);
+            // 璁剧疆榛樿绌哄��
+            params.put("EntourageLeadID", "");
+            params.put("Entourage_1", "");
+            params.put("Entourage_3", "");
+            params.put("Entourage_4", "");
+        }
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskEmergencySyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskEmergencySyncServiceImpl.java
new file mode 100644
index 0000000..91b1425
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskEmergencySyncServiceImpl.java
@@ -0,0 +1,174 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.common.utils.LongUtil;
+import com.ruoyi.common.utils.MapValueUtils;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.event.TaskServiceOrderSyncEvent;
+import com.ruoyi.system.mapper.LegacyTransferSyncMapper;
+import com.ruoyi.system.mapper.SysTaskMapper;
+import com.ruoyi.system.service.ISysTaskEmergencyService;
+import com.ruoyi.system.service.ISysTaskService;
+import com.ruoyi.system.service.TaskEmergencySyncService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class TaskEmergencySyncServiceImpl implements TaskEmergencySyncService {
+
+    @Autowired
+    private ApplicationEventPublisher eventPublisher;
+
+
+
+    @Autowired
+    private ISysTaskService sysTaskService;
+
+    @Autowired
+    private SysTaskMapper sysTaskMapper;
+
+    @Autowired
+    private ISysTaskEmergencyService sysTaskEmergencyService;
+
+    @Autowired
+    private LegacySystemConfig legacyConfig;
+
+    @Autowired
+    private LegacyTransferSyncMapper legacyTransferSyncMapper;
+
+    @Autowired
+    private TaskSyncUtilService taskSyncUtilService;
+
+    private Map<String,Object> getLegacyByServiceOrdId(Long serviceOrdId) {
+        List<Map<String, Object>> result = legacyTransferSyncMapper.selectByServiceOrdId(serviceOrdId);
+        if(!CollectionUtils.isEmpty(result)){
+            return result.get(0);
+        }else{
+            return null;
+        }
+    }
+
+    /**
+     * 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
+     */
+    public Long syncEmergencyTaskToLegacy(SysTask task,SysTaskEmergency emergency,Boolean isNew) {
+       Long taskId=task.getTaskId();
+       Long serviceOrderId = emergency.getLegacyServiceOrdId();
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囦换鍔D: {}", taskId);
+            return null;
+        }
+
+        try {
+            // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
+            emergency.setSyncStatus(1);
+            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+            // 鏋勫缓璇锋眰鍙傛暟
+            Map<String, Object> params = taskSyncUtilService.buildSyncParams(task, emergency);
+            String updateUrl=legacyConfig.getEmergencyCreateUrl();
+            if(!isNew){
+                updateUrl=legacyConfig.getEmergencyUpdateUrl();
+                params.put("ServiceOrdID",serviceOrderId);
+            }
+            // 鍙戦�丠TTP璇锋眰
+            String response = taskSyncUtilService.sendHttpPost(updateUrl, params);
+
+            // 瑙f瀽鍝嶅簲
+            Long serviceOrdId = taskSyncUtilService.parseResponse(response);
+
+            if (LongUtil.isNotEmpty(serviceOrderId)) {
+                // 鍚屾鎴愬姛锛屾洿鏂拌褰�
+                emergency.setLegacyServiceOrdId(serviceOrdId);
+                emergency.setSyncStatus(2); // 鍚屾鎴愬姛
+                emergency.setSyncTime(new Date());
+                emergency.setSyncErrorMsg(null);
+                Map<String, Object> legacy = getLegacyByServiceOrdId(serviceOrdId);
+                String serviceOrdNo = MapValueUtils.getStringValue(legacy, "ServiceOrdNo");
+                if(serviceOrdNo!=null) {
+                    emergency.setLegacyServiceOrdNo(serviceOrdNo);
+                }
+                String serviceOrdClass = MapValueUtils.getStringValue(legacy, "ServiceOrdClass");
+                if(serviceOrdClass!=null) {
+                    emergency.setLegacyServiceOrdClass(serviceOrdClass);
+                }
+                Date serviceCCTime = MapValueUtils.getDateValue(legacy, "ServiceOrd_CC_Time");
+                if(serviceCCTime!=null) {
+                    emergency.setLegacyServiceNsTime(serviceCCTime);
+                }
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+                // 鏇存柊浠诲姟涓昏〃鍚屾鏍囪
+                task.setLegacySynced(1);
+                sysTaskMapper.updateSysTask(task);
+
+                eventPublisher.publishEvent(new TaskServiceOrderSyncEvent(this, taskId, task.getTaskCode(), serviceOrdId,!isNew));
+//                log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
+                return serviceOrdId;
+            } else {
+                // 鍚屾澶辫触
+                emergency.setSyncStatus(3); // 鍚屾澶辫触
+                emergency.setSyncTime(new Date());
+                emergency.setSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑ServiceOrdID: " + response);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+                log.error("浠诲姟鍚屾澶辫触锛屼换鍔D: {}, 鍝嶅簲: {}", taskId, response);
+                return null;
+            }
+
+        } catch (Exception e) {
+            log.error("鍚屾浠诲姟鍒版棫绯荤粺寮傚父锛屼换鍔D: {}", taskId, e);
+
+            // 鏇存柊鍚屾鐘舵�佷负澶辫触
+            try {
+                 emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+                if (emergency != null) {
+                    emergency.setSyncStatus(3); // 鍚屾澶辫触
+                    emergency.setSyncTime(new Date());
+                    emergency.setSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
+                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+                }
+            } catch (Exception ex) {
+                log.error("鏇存柊鍚屾鐘舵�佸け璐�", ex);
+            }
+
+            return null;
+        }
+    }
+    @Override
+    public Long syncEmergency(Long taskId) {
+        SysTask task=sysTaskService.selectSysTaskByTaskId(taskId);
+        SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+        if(emergency!=null){
+            Long dispatchOrderId=emergency.getLegacyDispatchOrdId();
+            Long serviceOrderId = emergency.getLegacyServiceOrdId();
+            if(LongUtil.isEmpty(dispatchOrderId) && LongUtil.isEmpty(serviceOrderId)){
+                //dispatch涓虹┖涓�
+                return syncNewEmergency(task,emergency);
+            }else if(LongUtil.isNotEmpty(serviceOrderId) && LongUtil.isEmpty(dispatchOrderId)){
+                //serviceId涓嶄负绌猴紝dispatchOrdId涓虹┖
+                return syncUpdateEmergency(task,emergency);
+            }
+        }
+        return 0L;
+    }
+
+
+    private Long syncNewEmergency(SysTask task,SysTaskEmergency emergency) {
+        return this.syncEmergencyTaskToLegacy(task,emergency,true);
+    }
+
+
+    private Long syncUpdateEmergency(SysTask task,SysTaskEmergency emergency) {
+        return this.syncEmergencyTaskToLegacy(task,emergency,false);
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskSyncUtilService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskSyncUtilService.java
new file mode 100644
index 0000000..5bc0c13
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskSyncUtilService.java
@@ -0,0 +1,368 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.cert.X509Certificate;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class TaskSyncUtilService {
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    @Autowired
+    private ISysDeptService sysDeptService;
+
+    @Autowired
+    private LegacySystemConfig legacySystemConfig;
+
+    /**
+     * 鍒ゆ柇鐢ㄦ埛绫诲瀷锛堝徃鏈�/鍖荤敓/鎶ゅ+/鍏朵粬锛�
+     * 鏍规嵁鐢ㄦ埛鐨勮鑹插悕绉版潵鍒ゆ柇
+     *
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛绫诲瀷锛歞river/doctor/nurse/other
+     */
+    public String getUserType(SysUser user) {
+        String roleName = "";
+
+        // 浠庣敤鎴风殑瑙掕壊鍒楄〃涓幏鍙栬鑹插悕绉�
+        if (user.getRoles() != null && !user.getRoles().isEmpty()) {
+            roleName = user.getRoles().get(0).getRoleName();
+        }
+
+        // 鍒ゆ柇鏄惁涓哄徃鏈�
+        if (roleName != null && roleName.contains("鍙告満")) {
+            return "driver";
+        }
+        // 鍒ゆ柇鏄惁涓哄尰鐢�
+        if (roleName != null && roleName.contains("鍖荤敓")) {
+            return "doctor";
+        }
+        // 鍒ゆ柇鏄惁涓烘姢澹�
+        if (roleName != null && roleName.contains("鎶ゅ+")) {
+            return "nurse";
+        }
+
+        // 鍏朵粬绫诲瀷锛岄粯璁や负鍙告満锛堜繚璇佽嚦灏戞湁涓�涓汉鍛橈級
+        log.warn("鐢ㄦ埛瑙掕壊鏃犳硶鍒ゆ柇绫诲瀷锛岄粯璁や负鍙告満锛岀敤鎴稩D: {}, 瑙掕壊: {}", user.getUserId(), roleName);
+        return "driver";
+    }
+    public String getAdminID(SysTask task) {
+        String adminID="";
+        if (task.getCreatorId() != null) {
+            try {
+                SysUser creator = sysUserService.selectUserById(task.getCreatorId());
+                if (creator != null && creator.getOaUserId() != null) {
+                    adminID = creator.getOaUserId().toString();
+                    log.info("鑾峰彇鍒涘缓浜篛A_UserID鎴愬姛锛岀敤鎴稩D: {}, OA_UserID: {}", task.getCreatorId(), adminID);
+                } else {
+                    log.warn("鍒涘缓浜烘湭閰嶇疆OA_UserID锛岀敤鎴稩D: {}", task.getCreatorId());
+                }
+            } catch (Exception e) {
+                log.error("鏌ヨ鍒涘缓浜篛A_UserID寮傚父锛岀敤鎴稩D: {}", task.getCreatorId(), e);
+            }
+        }
+        return adminID;
+    }
+
+    /**
+     * 鏋勫缓鍚屾鍙傛暟
+     */
+    public Map<String, Object> buildSyncParams(SysTask task, SysTaskEmergency emergency) {
+        Map<String, Object> params = new HashMap<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
+        Long taskId=task.getTaskId();
+        // 绠$悊鍛業D锛堝垱寤轰汉ID瀵瑰簲鐨凮A_UserID锛�
+        String adminID = this.getAdminID(task);
+
+        params.put("adminID", adminID);
+
+        // 鏈嶅姟鍗曞垎绫伙紙浠庝换鍔℃墍灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佽幏鍙栵級
+        String serviceOrdClass = "BF"; // ServiceOrdClass榛樿鍊�
+        if (task.getDeptId() != null) {
+            try {
+                SysDept dept = sysDeptService.selectDeptById(task.getDeptId());
+                if (dept != null && StringUtils.isNotEmpty(dept.getServiceOrderClass())) {
+                    // 浣跨敤閮ㄩ棬鐨勬湇鍔″崟缂栫爜浣滀负ServiceOrdClass
+                    serviceOrdClass = dept.getServiceOrderClass();
+//                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 閮ㄩ棬鍚嶇О: {}, 鏈嶅姟鍗曠紪鐮�: {}",
+//                        task.getDeptId(), dept.getDeptName(), serviceOrdClass);
+                } else {
+                    log.warn("浠诲姟鎵�灞為儴闂ㄦ湭閰嶇疆鏈嶅姟鍗曠紪鐮侊紝閮ㄩ棬ID: {}銆侀儴闂ㄥ悕绉�: {}锛屼娇鐢ㄩ粯璁ゅ��",
+                            task.getDeptId(), dept != null ? dept.getDeptName() : "null");
+                }
+            } catch (Exception e) {
+                log.error("鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: {}", task.getDeptId(), e);
+            }
+        } else {
+            log.warn("浠诲姟鏈叧鑱旈儴闂紝浣跨敤榛樿鏈嶅姟鍗曠紪鐮�");
+        }
+
+        // 鏈嶅姟鍗曟墽琛屽尯鍩燂紙浠庝换鍔$殑document_type_id鑾峰彇锛�
+        String serviceOrdAreaType = "1"; // 榛樿鍊�
+        if (StringUtils.isNotEmpty(emergency.getDocumentTypeId())) {
+            serviceOrdAreaType = emergency.getDocumentTypeId();
+//            log.info("鑾峰彇鍗曟嵁绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 鍗曟嵁绫诲瀷ID: {}", task.getTaskId(), serviceOrdAreaType);
+        } else {
+            log.warn("浠诲姟鏈厤缃崟鎹被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", task.getTaskId());
+        }
+
+        // 鍩虹淇℃伅
+        params.put("ServiceOrdClass", serviceOrdClass); // 浠庨儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佽幏鍙�
+        params.put("ServiceOrdAreaType", serviceOrdAreaType); // 浠庝换鍔$殑document_type_id鑾峰彇
+
+        // 鏈嶅姟鍗曟墽琛岀被鍨嬶紙浠庝换鍔$殑task_type_id鑾峰彇锛�
+        String serviceOrdType = "1"; // 榛樿鍊�
+        if (StringUtils.isNotEmpty(emergency.getTaskTypeId())) {
+            serviceOrdType = emergency.getTaskTypeId();
+//            log.info("鑾峰彇浠诲姟绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 浠诲姟绫诲瀷ID: {}", taskId, serviceOrdType);
+        } else {
+            log.warn("浠诲姟鏈厤缃换鍔$被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", taskId);
+        }
+        params.put("ServiceOrdType", serviceOrdType); // 鏈嶅姟鍗曟墽琛岀被鍨嬶紙浠庝换鍔$殑task_type_id鑾峰彇锛�
+
+        params.put("ServiceOrdState", "2"); // 鏈嶅姟鍗曠姸鎬侊紙2=姝e紡鍗曪級
+        params.put("ServiceOrdStartDate", task.getCreateTime() != null ? sdfDate.format(task.getCreateTime()) : sdfDate.format(new Date()));
+
+        // 棰勭害鏃堕棿
+        if (task.getPlannedStartTime() != null) {
+            params.put("ServiceOrdApptDate", sdf.format(task.getPlannedStartTime()));
+        }
+
+        // 鑱旂郴浜轰俊鎭�
+        params.put("ServiceOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
+        params.put("ServiceOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
+        params.put("ServiceOrdCoTies", ""); // 鑱旂郴浜轰笌鎮h�呭叧绯�
+
+        // 鎮h�呬俊鎭�
+        params.put("ServiceOrdPtName", StringUtils.nvl(emergency.getPatientName(), ""));
+        params.put("ServiceOrdPtAge", ""); // 骞撮緞
+        params.put("ServiceOrdPtKG", ""); // 浣撻噸
+        params.put("ServiceOrdPtSex", "0".equals(emergency.getPatientGender()) ? "鐢�" : "1".equals(emergency.getPatientGender()) ? "濂�" : "");
+        params.put("ServiceOrdPtNat", ""); // 鍥界睄
+        params.put("ServiceOrdPtIDCard", StringUtils.nvl(emergency.getPatientIdCard(), ""));
+
+        // 鍖婚櫌淇℃伅
+        params.put("ServiceOrdPtOutHosp", StringUtils.nvl(emergency.getHospitalOutName(), ""));
+        params.put("ServiceOrdPtOutHospID", emergency.getHospitalOutId() != null ? emergency.getHospitalOutId().toString() : "0"); // 杞嚭鍖婚櫌ID
+        params.put("ServiceOrdPtInHosp", StringUtils.nvl(emergency.getHospitalInName(), ""));
+        params.put("ServiceOrdPtInHospID", emergency.getHospitalInId() != null ? emergency.getHospitalInId().toString() : "0"); // 杞叆鍖婚櫌ID
+
+        // 绉戝淇℃伅
+        params.put("ServiceOrdPtServices", StringUtils.nvl(emergency.getHospitalOutBedNumber(), "")); //杞嚭搴婁綅
+        params.put("ServiceOrdPtServicesID", StringUtils.nvl(emergency.getHospitalOutDepartmentId(), "0")); // 杞嚭绉戝ID
+        params.put("ServiceOrdPtInServices", StringUtils.nvl(emergency.getHospitalInBedNumber(), "")); //杞叆搴婁綅
+        params.put("ServiceOrdPtInServicesID", StringUtils.nvl(emergency.getHospitalInDepartmentId(), "0")); // 杞叆绉戝ID
+
+        // 鐥呮儏淇℃伅
+        params.put("ServiceOrdPtDiagnosis", ""); // 璇婃柇
+        //鐥呮儏鎻忚堪
+        params.put("ServiceOrdPtCondition", StringUtils.nvl(emergency.getPatientCondition(), ""));
+        params.put("ServiceOrdTaskRemarks", StringUtils.nvl(task.getTaskDescription(), ""));
+        params.put("ServiceOrdPtDoctor", ""); // 鎮h�呭尰鐢�
+        params.put("ServiceOrdPtDoctorPhone", ""); // 鎮h�呭尰鐢熺數璇�
+
+        // 鍦板潃淇℃伅
+        params.put("province", ""); // 鍑哄彂鍦扮渷浠�
+        params.put("city", ""); // 鍑哄彂鍦板煄甯�
+        params.put("ServiceOrdTraStreet",task.getDepartureAddress()); //娲捐溅鍦板潃
+        params.put("ServiceOrdTraStreetCoo", ""); // 鍑哄彂鍦板潗鏍�
+        params.put("ServiceOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), "")));
+        params.put("ServiceOrdTraEndCoo", ""); // 鐩殑鍦板潗鏍�
+        params.put("ServiceOrdTraVia", ""); // 閫旂粡鍦�
+
+        // 璺濈鍜屼环鏍间俊鎭�
+        params.put("ServiceOrdViaDistance", "0"); // 涓�旇窛绂�
+        params.put("ServiceOrdTraDistance", emergency.getTransferDistance() != null ? emergency.getTransferDistance().toString() : "0");
+        params.put("ServiceOrdTraDuration", ""); // 棰勮琛岀▼鏃堕棿
+        params.put("ServiceOrdTraUnitPrice", "0"); // 鍗曚环/鍏噷
+        params.put("ServiceOrdTraOfferPrice", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0");
+        params.put("ServiceOrdTraTxnPrice", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0");
+        params.put("ServiceOrdTraPrePayment", "0"); // 闇�棰勪粯娆�
+        params.put("SettlementPrice", "0"); // 缁撶畻浠�
+        params.put("ServiceOrdTraPriceReason", ""); // 宸环鍘熷洜
+
+        // 鍏朵粬淇℃伅
+        params.put("Phone", StringUtils.nvl(emergency.getPatientPhone(), "")); // 鏉ョ數鐢佃瘽
+        params.put("TEL_Time", sdf.format(new Date())); // 鏉ョ數鏃堕棿
+        params.put("TEL_Remarks", "鏂扮郴缁熷悓姝�"); // 鏉ョ數澶囨敞
+        params.put("TransferModeID", ""); // 杞繍鏂瑰紡
+        params.put("ServiceOrdVIP", "0"); // VIP瀹㈡埛
+        params.put("ServiceOrd_CC_ID", ""); // 瀹㈡湇浜哄憳ID
+        params.put("ServiceOrd_Sale_ID", ""); // 閿�鍞汉鍛業D
+        params.put("ServiceOrdIntroducer", ""); // 浠嬬粛浜�
+        params.put("ServiceOrd_work_ID", ""); // 涓昏浼佸井瀹㈡湇ID
+        params.put("ServiceOrd_work_IDs", ""); // 鍏朵粬浼佸井瀹㈡湇ID
+        params.put("ServiceOrd_work_is", "0"); // 鏄惁浼佸井鎴愪氦
+        params.put("CommissionScenarioID", "0"); // 浼佸井缁╂晥鏂规
+        params.put("ServiceOrdOperationRemarks", "鏂扮郴缁熷悓姝ュ垱寤�"); // 鎿嶄綔澶囨敞
+        params.put("ServiceOrdEstimatedOrderDate", ""); // 棰勮娲惧崟鏃堕棿
+        params.put("ServiceOrdSource", "10"); // 璁㈠崟鏉ユ簮锛�10=鏂扮郴缁燂級
+        params.put("OrderLevel", "0"); // 鏌ョ湅绛夌骇
+        params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
+        params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
+        params.put("DirectionType", "0"); // 杞繍鍘诲悜
+        params.put("ServiceOrd_m", "1"); // 鏉ユ簮鍏ュ彛
+        params.put("FromHQ2_is", "0"); // 骞垮窞鎬婚儴鎺ㄩ�佷换鍔℃爣璁�
+        params.put("OrderPrice_Auto", "0"); // 璁㈠崟鑷姩鎶ヤ环鍙傝�冨��
+
+        return params;
+    }
+
+    /**
+     * 鍙戦�丠TTP/HTTPS POST璇锋眰
+     * 鏀寔HTTPS鑷鍚嶈瘉涔�
+     */
+    public String sendHttpPost(String urlString, Map<String, Object> params) throws Exception {
+        URL url = new URL(urlString);
+        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+
+        // 濡傛灉鏄疕TTPS璇锋眰锛岄厤缃甋SL淇′换鎵�鏈夎瘉涔�
+        if (conn instanceof HttpsURLConnection) {
+            HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
+            httpsConn.setSSLSocketFactory(createTrustAllSSLContext().getSocketFactory());
+            httpsConn.setHostnameVerifier((hostname, session) -> true); // 淇′换鎵�鏈変富鏈哄悕
+//            log.debug("閰嶇疆HTTPS杩炴帴锛屼俊浠绘墍鏈塖SL璇佷功锛孶RL: {}", urlString);
+        }
+
+        try {
+            // 璁剧疆杩炴帴灞炴��
+            conn.setRequestMethod("POST");
+            conn.setConnectTimeout(legacySystemConfig.getConnectTimeout());
+            conn.setReadTimeout(legacySystemConfig.getReadTimeout());
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            conn.setUseCaches(false);
+            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + legacySystemConfig.getCharset());
+            conn.setRequestProperty("Accept-Charset", legacySystemConfig.getCharset());
+
+            // 鏋勫缓POST鏁版嵁
+            StringBuilder postData = new StringBuilder();
+            for (Map.Entry<String, Object> entry : params.entrySet()) {
+                if (postData.length() > 0) {
+                    postData.append("&");
+                }
+                postData.append(URLEncoder.encode(entry.getKey(), legacySystemConfig.getCharset()));
+                postData.append("=");
+                postData.append(URLEncoder.encode(entry.getValue().toString(), legacySystemConfig.getCharset()));
+            }
+
+            // 鍙戦�丳OST鏁版嵁
+            try (OutputStream os = conn.getOutputStream()) {
+                os.write(postData.toString().getBytes(legacySystemConfig.getCharset()));
+                os.flush();
+            }
+
+
+
+            // 璇诲彇鍝嶅簲
+            int responseCode = conn.getResponseCode();
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                try (BufferedReader reader = new BufferedReader(
+                        new InputStreamReader(conn.getInputStream(), legacySystemConfig.getCharset()))) {
+                    StringBuilder response = new StringBuilder();
+                    String line;
+                    while ((line = reader.readLine()) != null) {
+                        response.append(line);
+                    }
+                    return response.toString().trim();
+                }
+            } else {
+                log.error("璇锋眰澶辫触锛岃姹俇RL {},鍙傛暟 {}",urlString,postData);
+                throw new Exception("HTTP/HTTPS璇锋眰澶辫触锛屽搷搴旂爜: " + responseCode);
+            }
+
+        } finally {
+            conn.disconnect();
+        }
+    }
+
+
+    /**
+     * 瑙f瀽鏃х郴缁熷搷搴�
+     * 棰勬湡鏍煎紡: "OK:ServiceOrdID" 鎴栭敊璇俊鎭�
+     */
+    public Long parseResponse(String response) {
+        if (StringUtils.isEmpty(response)) {
+            return null;
+        }
+
+        // 鍘婚櫎鍙兘鐨凥TML鏍囩鍜岀┖鐧藉瓧绗�
+        response = response.replaceAll("<[^>]*>", "").trim();
+
+        // 妫�鏌ユ槸鍚︽垚鍔熷搷搴�
+        if (response.startsWith("OK:")) {
+            try {
+                String serviceOrdIdStr = response.substring(3).trim();
+                return Long.parseLong(serviceOrdIdStr);
+            } catch (NumberFormatException e) {
+                log.error("瑙f瀽ServiceOrdID澶辫触: {}", response, e);
+                return null;
+            }
+        } else {
+            log.error("鏃х郴缁熻繑鍥為敊璇�: {}", response);
+            return null;
+        }
+    }
+    /**
+     * 鍒涘缓淇′换鎵�鏈塖SL璇佷功鐨凷SLContext
+     * 鐢ㄤ簬鏀寔鑷鍚嶈瘉涔︾殑HTTPS璇锋眰
+     *
+     * 娉ㄦ剰锛氭鏂规硶浼氫俊浠绘墍鏈塖SL璇佷功锛屽寘鎷嚜绛惧悕璇佷功
+     * 浠呯敤浜庝笌鏃х郴缁熺殑鍐呴儴閫氫俊锛岀敓浜х幆澧冨缓璁娇鐢ㄦ瑙凜A璇佷功
+     */
+    private SSLContext createTrustAllSSLContext() throws Exception {
+        // 鍒涘缓淇′换鎵�鏈夎瘉涔︾殑TrustManager
+        TrustManager[] trustAllCerts = new TrustManager[] {
+                new X509TrustManager() {
+                    @Override
+                    public X509Certificate[] getAcceptedIssuers() {
+                        return null;
+                    }
+
+                    @Override
+                    public void checkClientTrusted(X509Certificate[] certs, String authType) {
+                        // 淇′换鎵�鏈夊鎴风璇佷功
+                    }
+
+                    @Override
+                    public void checkServerTrusted(X509Certificate[] certs, String authType) {
+                        // 淇′换鎵�鏈夋湇鍔″櫒璇佷功
+                    }
+                }
+        };
+
+        // 瀹夎淇′换鎵�鏈夎瘉涔︾殑TrustManager
+        SSLContext sslContext = SSLContext.getInstance("TLS");
+        sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+        return sslContext;
+    }
+
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/LegacyTransferSyncMapper.xml b/ruoyi-system/src/main/resources/mapper/system/LegacyTransferSyncMapper.xml
index 4b29293..050beae 100644
--- a/ruoyi-system/src/main/resources/mapper/system/LegacyTransferSyncMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/LegacyTransferSyncMapper.xml
@@ -152,7 +152,7 @@
             b.DispatchOrdState,            
             b.DispatchOrdNo,
             b.DispatchOrdClass,
-            a.ServiceOrdClass           
+            a.ServiceOrdClass
 
         FROM ServiceOrder as a 
         left JOIN DispatchOrd b on a.ServiceOrdID = b.ServiceOrdIDDt

--
Gitblit v1.9.1