From 82d6b98f5b6b88e223259547208ab59829ad723e Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 01 十一月 2025 21:30:52 +0800
Subject: [PATCH] fix:增加旧系统状态同步到新系统,新系统状态同步到旧系统

---
 app/api/task.js                                                                           |    7 
 ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.java                |   19 
 ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml                  |   53 +
 app/store/modules/user.js                                                                 |   14 
 sql/task_status_push_job.sql                                                              |    7 
 app/App.vue                                                                               |   52 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java                 |   26 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java      |   34 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskEmergencyService.java         |   91 ++
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacySystemSyncTask.java                |   48 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskStatusPushService.java           |   27 
 sql/update_task_status_dict.sql                                                           |   72 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskStatusSyncService.java           |   27 
 ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml                       |   24 
 ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskCodeGenerator.java                  |   33 
 app/pages/task/detail.vue                                                                 |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java   |  235 ++++++
 ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusConverter.java                |  147 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java              |   25 
 prd/旧系统任务状态同步功能说明.md                                                                      |  311 ++++++++
 app/pages/index.vue                                                                       |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusSyncServiceImpl.java   |  332 ++++++++
 sql/legacy_status_sync_job.sql                                                            |  133 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java |  156 ++-
 app/pages/task/index.vue                                                                  |   17 
 ruoyi-admin/src/main/resources/application.yml                                            |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusPushConverter.java            |  121 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.java         |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskEmergencyMapper.java            |   21 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskEmergencyServiceImpl.java |  124 +++
 ruoyi-ui/src/views/task/general/index.vue                                                 |   19 
 31 files changed, 2,105 insertions(+), 91 deletions(-)

diff --git a/app/App.vue b/app/App.vue
index 3610e7c..650a7fd 100644
--- a/app/App.vue
+++ b/app/App.vue
@@ -5,14 +5,54 @@
   import { getUnreadCount } from '@/api/message'
 
   export default {
+    data() {
+      return {
+        messagePollingTimer: null,
+        lastToken: null // 鐢ㄤ簬妫�娴� token 鍙樺寲
+      }
+    },
     onLaunch: function() {
+      this.lastToken = getToken()
       this.initApp()
+      
+      // 鐩戝惉鐢ㄦ埛鐧诲嚭浜嬩欢
+      uni.$on('user-logout', () => {
+        console.log('鎺ユ敹鍒扮敤鎴风櫥鍑轰簨浠讹紝鍋滄娑堟伅杞')
+        this.stopMessagePolling()
+        this.lastToken = null
+        // 娓呴櫎娑堟伅寰芥爣
+        uni.removeTabBarBadge({ index: 3 })
+      })
     },
     onShow: function() {
-      // 搴旂敤鏄剧ず鏃跺埛鏂版湭璇绘秷鎭暟閲�
-      if (getToken()) {
-        this.updateUnreadMessageBadge()
+      const currentToken = getToken()
+      
+      // 妫�娴� token 鍙樺寲锛氫粠鏈夊埌鏃狅紙鐧诲嚭锛�
+      if (this.lastToken && !currentToken) {
+        console.log('妫�娴嬪埌鐢ㄦ埛宸茬櫥鍑猴紝鍋滄娑堟伅杞')
+        this.stopMessagePolling()
+        this.lastToken = currentToken
+        return
       }
+      
+      // 妫�娴� token 鍙樺寲锛氫粠鏃犲埌鏈夛紙鐧诲綍锛�
+      if (!this.lastToken && currentToken) {
+        console.log('妫�娴嬪埌鐢ㄦ埛宸茬櫥褰曪紝鍚姩娑堟伅杞')
+        this.lastToken = currentToken
+      }
+      
+      // 搴旂敤鏄剧ず鏃跺埛鏂版湭璇绘秷鎭暟閲�
+      if (currentToken) {
+        this.updateUnreadMessageBadge()
+        // 閲嶆柊鍚姩杞锛堝鏋滀箣鍓嶅凡鍋滄锛�
+        if (!this.messagePollingTimer) {
+          this.startMessagePolling()
+        }
+      }
+    },
+    onHide: function() {
+      // 搴旂敤闅愯棌鏃跺仠姝㈣疆璇紝鑺傜渷璧勬簮
+      this.stopMessagePolling()
     },
     methods: {
       // 鍒濆鍖栧簲鐢�
@@ -42,6 +82,12 @@
       
       // 鏇存柊鏈娑堟伅寰芥爣
       updateUnreadMessageBadge() {
+        // 妫�鏌ユ槸鍚﹀凡鐧诲綍锛屾湭鐧诲綍鍒欎笉璇锋眰
+        if (!getToken()) {
+          console.log('鐢ㄦ埛鏈櫥褰曪紝璺宠繃鑾峰彇鏈娑堟伅鏁伴噺')
+          return
+        }
+        
         getUnreadCount().then(response => {
           const count = response.data || 0
           console.log('鏈娑堟伅鏁伴噺:', count)
diff --git a/app/api/task.js b/app/api/task.js
index a2891f8..9287710 100644
--- a/app/api/task.js
+++ b/app/api/task.js
@@ -46,7 +46,12 @@
     data: data
   })
 }
-
+/**
+ * 淇敼浠诲姟鐘舵��
+ * @param {*} taskId 
+ * @param {*} data 
+ * @returns 
+ */
 export function changeTaskStatus(taskId, data) {
   return request({
     url: '/task/' + taskId + '/status',
diff --git a/app/pages/index.vue b/app/pages/index.vue
index ea9ae6d..27abff0 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -246,6 +246,13 @@
       
       // 鍔犺浇鏈娑堟伅鏁伴噺
       loadUnreadMessageCount() {
+        // 妫�鏌ョ敤鎴锋槸鍚﹀凡鐧诲綍
+        const userId = this.currentUser.userId
+        if (!userId) {
+          console.log('鐢ㄦ埛鏈櫥褰曪紝璺宠繃鑾峰彇鏈娑堟伅鏁伴噺')
+          return
+        }
+        
         getUnreadCount().then(response => {
           if (response.code === 200) {
             this.unreadMessageCount = response.data || 0
diff --git a/app/pages/task/detail.vue b/app/pages/task/detail.vue
index bc39e8c..8598db2 100644
--- a/app/pages/task/detail.vue
+++ b/app/pages/task/detail.vue
@@ -399,11 +399,11 @@
         getTask(this.taskId).then(response => {
           this.taskDetail = response.data || response
           // 璋冭瘯锛氭墦鍗拌繑鍥炵殑鏁版嵁
-          console.log('浠诲姟璇︽儏瀹屾暣鏁版嵁:', JSON.stringify(this.taskDetail, null, 2))
-          console.log('浠诲姟绫诲瀷瀛楁鍊�:', this.taskDetail.taskType)
-          console.log('浠诲姟鐘舵�佸瓧娈靛��:', this.taskDetail.taskStatus)
-          console.log('鍑哄彂鍦板潃:', this.taskDetail.departureAddress)
-          console.log('鐩殑鍦板潃:', this.taskDetail.destinationAddress)
+          // console.log('浠诲姟璇︽儏瀹屾暣鏁版嵁:', JSON.stringify(this.taskDetail, null, 2))
+          // console.log('浠诲姟绫诲瀷瀛楁鍊�:', this.taskDetail.taskType)
+          // console.log('浠诲姟鐘舵�佸瓧娈靛��:', this.taskDetail.taskStatus)
+          // console.log('鍑哄彂鍦板潃:', this.taskDetail.departureAddress)
+          // console.log('鐩殑鍦板潃:', this.taskDetail.destinationAddress)
         }).catch(error => {
           console.error('鍔犺浇浠诲姟璇︽儏澶辫触:', error)
           this.$modal.showToast('鍔犺浇浠诲姟璇︽儏澶辫触')
diff --git a/app/pages/task/index.vue b/app/pages/task/index.vue
index c80265c..0044af2 100644
--- a/app/pages/task/index.vue
+++ b/app/pages/task/index.vue
@@ -108,7 +108,7 @@
       
       <scroll-view class="task-list-scroll" scroll-y="true">
         <view class="task-list">
-          <view class="task-item" v-for="task in filteredTaskList" :key="task.id">
+          <view class="task-item" v-for="task in filteredTaskList" :key="task.taskId">
             <view class="task-main" @click="viewTaskDetail(task)">
               <!-- 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵�佹爣绛� -->
               <view class="task-header">
@@ -430,8 +430,17 @@
       
       // 鏌ョ湅浠诲姟璇︽儏
       viewTaskDetail(task) {
-        // 璺宠浆鍒颁换鍔¤鎯呴〉闈� - 淇:浣跨敤taskId鑰屼笉鏄痠d
-        this.$tab.navigateTo(`/pages/task/detail?id=${task.taskId}`);
+        // 闃插尽鎬ф鏌�
+        if (!task || !task.taskId) {
+          console.error('浠诲姟鏁版嵁鏃犳晥:', task)
+          this.$modal.showToast('浠诲姟鏁版嵁寮傚父')
+          return
+        }
+        
+        // 璺宠浆鍒颁换鍔¤鎯呴〉闈� - 浣跨敤uni.navigateTo
+        uni.navigateTo({
+          url: `/pages/task/detail?id=${task.taskId}`
+        });
       },
       
       // 澶勭悊浠诲姟鎿嶄綔
@@ -516,6 +525,7 @@
             
             changeTaskStatus(taskId, statusData).then(response => {
               that.$modal.showToast('鐘舵�佹洿鏂版垚鍔�')
+              // 鍒锋柊浠诲姟鍒楄〃
               that.loadTaskList()
             }).catch(error => {
               console.error('鏇存柊浠诲姟鐘舵�佸け璐�:', error)
@@ -533,6 +543,7 @@
               
               changeTaskStatus(taskId, statusData).then(response => {
                 that.$modal.showToast('鐘舵�佹洿鏂版垚鍔�')
+                // 鍒锋柊浠诲姟鍒楄〃
                 that.loadTaskList()
               }).catch(error => {
                 console.error('鏇存柊浠诲姟鐘舵�佸け璐�:', error)
diff --git a/app/store/modules/user.js b/app/store/modules/user.js
index ec289bf..66b252d 100644
--- a/app/store/modules/user.js
+++ b/app/store/modules/user.js
@@ -140,8 +140,22 @@
           commit('SET_PERMISSIONS', [])
           removeToken()
           storage.clean()
+          
+          // 瑙﹀彂鍏ㄥ眬浜嬩欢锛岄�氱煡 App.vue 鍋滄杞
+          uni.$emit('user-logout')
+          
           resolve()
         }).catch(error => {
+          // 鍗充娇閫�鍑烘帴鍙eけ璐ワ紝涔熻娓呯┖鏈湴鐘舵��
+          commit('SET_TOKEN', '')
+          commit('SET_ROLES', [])
+          commit('SET_PERMISSIONS', [])
+          removeToken()
+          storage.clean()
+          
+          // 瑙﹀彂鍏ㄥ眬浜嬩欢
+          uni.$emit('user-logout')
+          
           reject(error)
         })
       })
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\344\273\273\345\212\241\347\212\266\346\200\201\345\220\214\346\255\245\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\346\227\247\347\263\273\347\273\237\344\273\273\345\212\241\347\212\266\346\200\201\345\220\214\346\255\245\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..0635374
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\344\273\273\345\212\241\347\212\266\346\200\201\345\220\214\346\255\245\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,311 @@
+# 鏃х郴缁熶换鍔$姸鎬佸悓姝ュ姛鑳借鏄�
+
+## 馃搵 鍔熻兘姒傝堪
+
+瀹炵幇浠庢棫绯荤粺鍚屾浠诲姟鐘舵�佸埌鏂扮郴缁燂紝纭繚鏂版棫绯荤粺鐨勪换鍔$姸鎬佷繚鎸佷竴鑷淬�傚綋鏃х郴缁熸搷浣滀汉鍛樻洿鏂拌皟搴﹀崟鐘舵�佸悗锛屾柊绯荤粺鑳藉鑷姩鑾峰彇鏈�鏂扮姸鎬佸苟鏇存柊鏈湴浠诲姟銆�
+
+## 馃幆 涓氬姟鍦烘櫙
+
+1. **鐘舵�佸疄鏃舵洿鏂�**: 鏃х郴缁熷徃鏈�/鍖绘姢浜哄憳鏇存柊浜嗕换鍔$姸鎬侊紝鏂扮郴缁熼渶瑕佸悓姝ユ樉绀�
+2. **鍙岀郴缁熷苟琛�**: 鏂版棫绯荤粺鍚屾椂浣跨敤鏈熼棿锛屼繚鎸佹暟鎹竴鑷存��
+3. **鐘舵�佺洃鎺�**: 閫氳繃鏂扮郴缁熺洃鎺ф棫绯荤粺浠诲姟鎵ц鎯呭喌
+
+## 馃搳 鐘舵�佹槧灏勮鍒�
+
+### 鏃х郴缁� 鈫� 鏂扮郴缁熺姸鎬佹槧灏�
+
+| 鏃х郴缁熺姸鎬� | 鐘舵�佺爜 | 鏂扮郴缁熺姸鎬� | 璇存槑 |
+|---------|-------|---------|------|
+| 鏂拌皟搴﹀崟锛堟湭涓嬪彂锛� | 0 | PENDING | 寰呭鐞� |
+| 瀹屽叏鏈‘璁� | 1 | PENDING | 寰呭鐞� |
+| 閮ㄥ垎宸茬‘璁� | 2 | PENDING | 寰呭鐞� |
+| 鏈嚭杞� | 3 | PENDING | 寰呭鐞� |
+| 宸插嚭杞︼紙鍘绘帴鎮h�呴�斾腑锛� | 4 | DEPARTING | 鍑哄彂涓� |
+| 宸插嚭杞︼紙绛夊緟鎮h�咃級 | 5 | ARRIVED | 宸插埌杈� |
+| 宸插嚭杞︼紙鏈嶅姟涓級 | 6 | IN_PROGRESS | 浠诲姟涓� |
+| 宸查�佽揪锛堝洖绋嬩腑锛� | 7 | RETURNING | 杩旂▼涓� |
+| 宸茶繑鍥� | 8 | COMPLETED | 宸插畬鎴� |
+| 璺戠┖鍗曪紝宸茶繑鍥� | 9 | COMPLETED | 宸插畬鎴� |
+| 鍙栨秷 | 10 | CANCELLED | 宸插彇娑� |
+| 宸叉彁浜わ紝绛夊緟瀹℃牳 | 11 | PENDING | 寰呭鐞� |
+| 瀹℃牳瀹屾垚 | 12 | PENDING | 寰呭鐞� |
+| 瀹℃牳涓嶉�氳繃 | 13 | CANCELLED | 宸插彇娑� |
+| 宸查┗鐐� | 14 | ARRIVED | 宸插埌杈� |
+
+## 馃敡 鎶�鏈疄鐜�
+
+### 1. 鏍稿績鏂囦欢
+
+#### 鐘舵�佽浆鎹㈠伐鍏风被
+- **鏂囦欢**: `TaskStatusConverter.java`
+- **浣嶇疆**: `ruoyi-system/src/main/java/com/ruoyi/system/utils/`
+- **鍔熻兘**: 
+  - 鏃х郴缁熺姸鎬佺爜杞柊绯荤粺鐘舵�佹灇涓�
+  - 鏂扮郴缁熺姸鎬佹灇涓捐浆鏃х郴缁熺姸鎬佺爜
+  - 鐘舵�佹弿杩版煡璇�
+
+```java
+// 浣跨敤绀轰緥
+TaskStatus newStatus = TaskStatusConverter.convertFromLegacyStatus(4);
+// 杩斿洖: TaskStatus.DEPARTING
+
+Integer legacyCode = TaskStatusConverter.convertToLegacyStatus(TaskStatus.DEPARTING);
+// 杩斿洖: 4
+
+String description = TaskStatusConverter.getLegacyStatusDescription(4);
+// 杩斿洖: "宸插嚭杞︼紙鍘绘帴鎮h�呴�斾腑锛�"
+```
+
+#### 鍚屾鏈嶅姟鎺ュ彛
+- **鎺ュ彛**: `ILegacySystemSyncService.java`
+- **瀹炵幇**: `LegacySystemSyncServiceImpl.java`
+- **鏂板鏂规硶**:
+  - `syncTaskStatusFromLegacy(Long taskId)`: 鍚屾鍗曚釜浠诲姟鐘舵��
+  - `batchSyncTaskStatusFromLegacy()`: 鎵归噺鍚屾浠诲姟鐘舵��
+
+#### 瀹氭椂浠诲姟
+- **鏂囦欢**: `LegacySystemSyncTask.java`
+- **浣嶇疆**: `ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/`
+- **鏂规硶**: `syncTaskStatusFromLegacy()`
+- **鎵ц棰戠巼**: 寤鸿姣�5鍒嗛挓涓�娆�
+
+### 2. 閰嶇疆鏂囦欢
+
+#### 鏃х郴缁熼厤缃�
+```yaml
+# application.yml
+legacy:
+  system:
+    base-url: http://legacy-system.com
+    status-query-path: /task_status_query.asp  # 鏂板鐘舵�佹煡璇㈡帴鍙h矾寰�
+    enabled: true
+```
+
+#### 瀹氭椂浠诲姟閰嶇疆
+鎵цSQL鑴氭湰: `sql/legacy_status_sync_job.sql`
+
+```sql
+-- 浠诲姟閰嶇疆
+浠诲姟鍚嶇О: 浠诲姟鐘舵�佸悓姝�
+璋冪敤鐩爣: legacySystemSyncTask.syncTaskStatusFromLegacy()
+Cron琛ㄨ揪寮�: 0 0/5 * * * ? (姣�5鍒嗛挓鎵ц涓�娆�)
+```
+
+### 3. 鍚屾娴佺▼
+
+```mermaid
+graph TB
+    A[瀹氭椂浠诲姟鍚姩] --> B[鏌ヨ闇�鍚屾浠诲姟]
+    B --> C{鏄惁鏈変换鍔
+    C -->|鏄瘄 D[閬嶅巻浠诲姟鍒楄〃]
+    C -->|鍚 E[缁撴潫]
+    D --> F[鏌ヨ鏃х郴缁熺姸鎬乚
+    F --> G{鏌ヨ鎴愬姛?}
+    G -->|鏄瘄 H[鐘舵�佺爜杞崲]
+    G -->|鍚 I[璁板綍閿欒鏃ュ織]
+    H --> J{鐘舵�佹槸鍚﹀彉鍖�?}
+    J -->|鏄瘄 K[鏇存柊浠诲姟鐘舵�乚
+    J -->|鍚 L[璺宠繃鏇存柊]
+    K --> M[璁剧疆鏃堕棿鎴砞
+    M --> N[淇濆瓨浠诲姟]
+    L --> D
+    N --> D
+    I --> D
+    D --> O{鏄惁瀹屾垚}
+    O -->|鍚 D
+    O -->|鏄瘄 P[缁熻鍚屾缁撴灉]
+    P --> E
+```
+
+### 4. 鏁版嵁搴撴煡璇�
+
+#### Mapper鏂板鏂规硶
+```xml
+<!-- 鏌ヨ宸插悓姝ヨ皟搴﹀崟涓旂姸鎬佹湭瀹屾垚鐨勪换鍔� -->
+<select id="selectSyncedTasksForStatusUpdate" resultMap="SysTaskEmergencyResult">
+    SELECT * FROM sys_task_emergency
+    WHERE dispatch_sync_status = 2 
+      AND legacy_dispatch_ord_id IS NOT NULL
+      AND task_id IN (
+          SELECT task_id FROM sys_task 
+          WHERE task_status NOT IN ('COMPLETED', 'CANCELLED')
+            AND del_flag = '0'
+      )
+    ORDER BY id ASC
+    LIMIT 200
+</select>
+```
+
+## 馃殌 閮ㄧ讲姝ラ
+
+### 1. 浠g爜閮ㄧ讲
+```bash
+# 閲嶆柊缂栬瘧椤圭洰
+mvn clean package
+
+# 閲嶅惎搴旂敤
+./ry.sh restart
+```
+
+### 2. 閰嶇疆鏃х郴缁熸帴鍙�
+
+纭繚鏃х郴缁熸彁渚涚姸鎬佹煡璇㈡帴鍙o紝鎺ュ彛瑙勮寖:
+- **URL**: `/task_status_query.asp`
+- **鏂规硶**: POST
+- **鍙傛暟**: `DispatchOrdID` (璋冨害鍗旾D)
+- **鍝嶅簲鏍煎紡**: 
+  - 鎴愬姛: `OK:鐘舵�佺爜` (濡�: `OK:4`)
+  - 澶辫触: `ERROR:閿欒淇℃伅`
+
+### 3. 娣诲姞瀹氭椂浠诲姟
+
+鎵цSQL鑴氭湰:
+```bash
+mysql -u root -p your_database < sql/legacy_status_sync_job.sql
+```
+
+鎴栧湪绯荤粺绠$悊鐣岄潰鎵嬪姩娣诲姞:
+1. 鐧诲綍绯荤粺绠$悊鍚庡彴
+2. 杩涘叆 `绯荤粺绠$悊` -> `瀹氭椂浠诲姟`
+3. 鐐瑰嚮 `鏂板`
+4. 濉啓浠诲姟淇℃伅:
+   - 浠诲姟鍚嶇О: 浠诲姟鐘舵�佸悓姝�
+   - 璋冪敤鐩爣瀛楃涓�: `legacySystemSyncTask.syncTaskStatusFromLegacy()`
+   - Cron琛ㄨ揪寮�: `0 0/5 * * * ?`
+   - 鐘舵��: 姝e父
+5. 淇濆瓨骞跺惎鍔ㄤ换鍔�
+
+### 4. 楠岃瘉鍔熻兘
+
+#### 鎵嬪姩瑙﹀彂娴嬭瘯
+```java
+// 鍦ㄥ畾鏃朵换鍔$鐞嗛〉闈㈢偣鍑�"鎵ц涓�娆�"鎸夐挳
+// 鎴栧湪浠g爜涓皟鐢�
+@Autowired
+private ILegacySystemSyncService legacySystemSyncService;
+
+// 鍚屾鍗曚釜浠诲姟
+boolean success = legacySystemSyncService.syncTaskStatusFromLegacy(taskId);
+
+// 鎵归噺鍚屾
+int count = legacySystemSyncService.batchSyncTaskStatusFromLegacy();
+```
+
+#### 鏌ョ湅鍚屾缁撴灉
+```sql
+-- 鏌ョ湅鏈�杩戝悓姝ョ殑浠诲姟
+SELECT 
+    t.task_id,
+    t.task_code,
+    t.task_status,
+    e.legacy_dispatch_ord_id,
+    t.update_time
+FROM sys_task t
+INNER JOIN sys_task_emergency e ON t.task_id = e.task_id
+WHERE e.dispatch_sync_status = 2
+ORDER BY t.update_time DESC
+LIMIT 20;
+```
+
+#### 鏌ョ湅鏃ュ織
+```bash
+# 鏌ョ湅搴旂敤鏃ュ織
+tail -f logs/sys-info.log | grep "浠诲姟鐘舵�佸悓姝�"
+```
+
+## 馃摑 鍚屾瑙勫垯
+
+### 鍚屾鏉′欢
+浠诲姟闇�瑕佹弧瓒充互涓嬫墍鏈夋潯浠舵墠浼氳鍚屾:
+1. 鉁� 璋冨害鍗曞凡鍚屾鎴愬姛 (`dispatch_sync_status = 2`)
+2. 鉁� 瀛樺湪鏃х郴缁熻皟搴﹀崟ID (`legacy_dispatch_ord_id IS NOT NULL`)
+3. 鉁� 浠诲姟鐘舵�佹湭瀹屾垚 (`task_status NOT IN ('COMPLETED', 'CANCELLED')`)
+4. 鉁� 浠诲姟鏈垹闄� (`del_flag = '0'`)
+
+### 鐘舵�佹洿鏂拌鍒�
+1. **鐘舵�佺浉鍚�**: 涓嶆洿鏂帮紝璺宠繃
+2. **鐘舵�佷笉鍚�**: 鏇存柊浠诲姟鐘舵�侊紝骞惰缃椂闂存埑:
+   - `DEPARTING/ARRIVED/IN_PROGRESS`: 璁剧疆 `actual_start_time`
+   - `COMPLETED/CANCELLED`: 璁剧疆 `actual_start_time` 鍜� `actual_end_time`
+
+### 闃查噸澶嶆満鍒�
+- 姣忔鍚屾鍓嶆鏌ョ姸鎬佹槸鍚﹀彉鍖�
+- 鐘舵�佹湭鍙樺寲鍒欒烦杩囨洿鏂帮紝閬垮厤鏃犳晥鎿嶄綔
+
+## 鈿狅笍 娉ㄦ剰浜嬮」
+
+### 1. 渚濊禆鍏崇郴
+- **鍓嶇疆鏉′欢**: 蹇呴』鍏堝畬鎴愯皟搴﹀崟鍚屾
+- **鎵ц椤哄簭**: 
+  1. 鏈嶅姟鍗曞悓姝� (admin_save_19.gds)
+  2. 璋冨害鍗曞悓姝� (admin_save_24.gds)
+  3. 鐘舵�佸悓姝� (task_status_query.asp) 鈫� 褰撳墠鍔熻兘
+
+### 2. 鎬ц兘浼樺寲
+- 姣忔鏈�澶氭煡璇�200涓换鍔�
+- 璇锋眰闂撮殧0.5绉掞紝閬垮厤棰戠箒璇锋眰
+- 浠呭悓姝ユ湭瀹屾垚鐘舵�佺殑浠诲姟
+
+### 3. 閿欒澶勭悊
+- 鏌ヨ澶辫触璁板綍閿欒鏃ュ織
+- 涓嶅奖鍝嶅叾浠栦换鍔$殑鍚屾
+- 涓嬫瀹氭椂浠诲姟缁х画灏濊瘯
+
+### 4. 鐩戞帶寤鸿
+- 瀹氭湡妫�鏌ュ畾鏃朵换鍔℃墽琛屾棩蹇�
+- 鐩戞帶鍚屾鎴愬姛鐜�
+- 鍏虫敞鐘舵�佽浆鎹㈠紓甯�
+
+## 馃攳 鏁呴殰鎺掓煡
+
+### 闂1: 鐘舵�佹湭鍚屾
+
+**鍙兘鍘熷洜**:
+1. 瀹氭椂浠诲姟鏈惎鍔�
+2. 鏃х郴缁熸帴鍙d笉鍙敤
+3. 浠诲姟涓嶆弧瓒冲悓姝ユ潯浠�
+
+**鎺掓煡姝ラ**:
+```sql
+-- 1. 妫�鏌ュ畾鏃朵换鍔$姸鎬�
+SELECT * FROM sys_job WHERE job_name = '浠诲姟鐘舵�佸悓姝�';
+
+-- 2. 妫�鏌ヤ换鍔″悓姝ョ姸鎬�
+SELECT 
+    e.task_id,
+    e.dispatch_sync_status,
+    e.legacy_dispatch_ord_id,
+    t.task_status
+FROM sys_task_emergency e
+INNER JOIN sys_task t ON e.task_id = t.task_id
+WHERE e.task_id = 'YOUR_TASK_ID';
+
+-- 3. 鏌ョ湅閿欒鏃ュ織
+-- tail -f logs/sys-error.log | grep "鐘舵�佸悓姝�"
+```
+
+### 闂2: 鐘舵�佹槧灏勯敊璇�
+
+**瑙e喅鏂规**:
+妫�鏌� `TaskStatusConverter.java` 鐨勬槧灏勮鍒欐槸鍚︽纭�
+
+### 闂3: 鎬ц兘闂
+
+**浼樺寲寤鸿**:
+- 璋冩暣瀹氭椂浠诲姟鎵ц棰戠巼
+- 鍑忓皯姣忔壒鏌ヨ鐨勪换鍔℃暟閲�
+- 澧炲姞璇锋眰闂撮殧鏃堕棿
+
+## 馃摎 鐩稿叧鏂囨。
+
+- [浠诲姟鐘舵�佹祦杞悎娉曟�ц鍒橾(../浠诲姟鐘舵��.md)
+- [鏃х郴缁熷悓姝ュ姛鑳藉疄鐜版�荤粨](鏃х郴缁熷悓姝ュ姛鑳藉疄鐜版�荤粨.md)
+- [鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃](鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md)
+
+## 馃攧 鐗堟湰鍘嗗彶
+
+- **v1.0** (2025-01-30)
+  - 瀹炵幇鍩虹鐘舵�佸悓姝ュ姛鑳�
+  - 鏀寔鏂版棫绯荤粺鐘舵�佹槧灏�
+  - 娣诲姞瀹氭椂浠诲姟鑷姩鍚屾
+  - 瀹屽杽閿欒澶勭悊鍜屾棩蹇楄褰�
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 083ca5a..bd357ff 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -56,7 +56,7 @@
     basename: i18n/messages
   profiles:
     # 鐜 dev|test|prod
-    active: dev
+    active: prod
   # 鏂囦欢涓婁紶
   servlet:
     multipart:
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 f178ee8..5038fe6 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
@@ -21,6 +21,10 @@
     /** 璋冨害鍗曞垱寤烘帴鍙h矾寰� */
     private String dispatchCreatePath = "/admin_save_24.gds";
     
+    /** 浠诲姟鐘舵�佹煡璇㈡帴鍙h矾寰勶紙宸插純鐢紝鐩存帴鏌ヨSQL Server鏁版嵁搴擄級 */
+    @Deprecated
+    private String statusQueryPath = "/task_status_query.asp";
+    
     /** 杩炴帴瓒呮椂鏃堕棿(姣) */
     private int connectTimeout = 30000;
     
@@ -102,4 +106,19 @@
     public String getDispatchCreateUrl() {
         return baseUrl + dispatchCreatePath;
     }
+    
+    public String getStatusQueryPath() {
+        return statusQueryPath;
+    }
+
+    public void setStatusQueryPath(String statusQueryPath) {
+        this.statusQueryPath = statusQueryPath;
+    }
+    
+    /**
+     * 鑾峰彇瀹屾暣鐨勭姸鎬佹煡璇RL
+     */
+    public String getStatusQueryUrl() {
+        return baseUrl + statusQueryPath;
+    }
 }
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacySystemSyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacySystemSyncTask.java
index 3e3f40b..2404483 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacySystemSyncTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacySystemSyncTask.java
@@ -6,6 +6,8 @@
 import org.springframework.stereotype.Component;
 
 import com.ruoyi.system.service.ILegacySystemSyncService;
+import com.ruoyi.system.service.ITaskStatusSyncService;
+import com.ruoyi.system.service.ITaskStatusPushService;
 
 /**
  * 鏃х郴缁熷悓姝ュ畾鏃朵换鍔�
@@ -20,6 +22,12 @@
     
     @Autowired
     private ILegacySystemSyncService legacySystemSyncService;
+    
+    @Autowired
+    private ITaskStatusSyncService taskStatusSyncService;
+    
+    @Autowired
+    private ITaskStatusPushService taskStatusPushService;
     
     /**
      * 鎵归噺鍚屾鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
@@ -80,4 +88,44 @@
             log.error("鏃х郴缁熻皟搴﹀崟鍚屾寮傚父", e);
         }
     }
+    
+    /**
+     * 鎵归噺鍚屾浠诲姟鐘舵�侊紙浠庢棫绯荤粺鍒版柊绯荤粺锛�
+     * 
+     * 浣跨敤绀轰緥:
+     * 鍦ㄧ郴缁熺鐞� -> 瀹氭椂浠诲姟涓坊鍔�:
+     * 浠诲姟鍚嶇О: 浠诲姟鐘舵�佸悓姝�
+     * 浠诲姟缁勫悕: DEFAULT
+     * 璋冪敤鐩爣瀛楃涓�: legacySystemSyncTask.syncTaskStatusFromLegacy()
+     * cron琛ㄨ揪寮�: 0 0/5 * * * ? (姣�5鍒嗛挓鎵ц涓�娆�)
+     */
+    public void syncTaskStatusFromLegacy() {
+        log.info("寮�濮嬫墽琛屼换鍔$姸鎬佸悓姝ュ畾鏃朵换鍔★紙浠庢棫绯荤粺鍒版柊绯荤粺锛�");
+        try {
+            int successCount = taskStatusSyncService.batchSyncTaskStatusFromLegacy();
+            log.info("浠诲姟鐘舵�佸悓姝ュ畬鎴愶紝鎴愬姛鍚屾: {} 涓换鍔�", successCount);
+        } catch (Exception e) {
+            log.error("浠诲姟鐘舵�佸悓姝ュ紓甯�", e);
+        }
+    }
+    
+    /**
+     * 鎵归噺鎺ㄩ�佷换鍔$姸鎬侊紙浠庢柊绯荤粺鍒版棫绯荤粺锛�
+     * 
+     * 浣跨敤绀轰緥:
+     * 鍦ㄧ郴缁熺鐞� -> 瀹氭椂浠诲姟涓坊鍔�:
+     * 浠诲姟鍚嶇О: 浠诲姟鐘舵�佹帹閫�
+     * 浠诲姟缁勫悕: DEFAULT
+     * 璋冪敤鐩爣瀛楃涓�: legacySystemSyncTask.pushTaskStatusToLegacy()
+     * cron琛ㄨ揪寮�: 0 0/3 * * * ? (姣�3鍒嗛挓鎵ц涓�娆�)
+     */
+    public void pushTaskStatusToLegacy() {
+        log.info("寮�濮嬫墽琛屼换鍔$姸鎬佹帹閫佸畾鏃朵换鍔★紙浠庢柊绯荤粺鍒版棫绯荤粺锛�");
+        try {
+            int successCount = taskStatusPushService.batchPushTaskStatusToLegacy();
+            log.info("浠诲姟鐘舵�佹帹閫佸畬鎴愶紝鎴愬姛鎺ㄩ��: {} 涓换鍔�", successCount);
+        } catch (Exception e) {
+            log.error("浠诲姟鐘舵�佹帹閫佸紓甯�", e);
+        }
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java
index 4b76078..42c13f4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.system.domain.DictionaryCondition;
 import com.ruoyi.system.domain.DispatchOrd;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -59,4 +60,29 @@
      * @return 鍥剧墖URL鍒楄〃
      */
     public List<String> selectImageUrlsByDOrdIDDt(String dOrdIDDt);
+    
+    /**
+     * 鏍规嵁璋冨害鍗旾D鏌ヨ璋冨害鍗曠姸鎬�
+     * 
+     * @param dispatchOrdID 璋冨害鍗旾D
+     * @return 璋冨害鍗曠姸鎬佺爜
+     */
+    public Integer selectDispatchOrdStateByID(Long dispatchOrdID);
+    
+    /**
+     * 鎵归噺鏌ヨ璋冨害鍗曠姸鎬�
+     * 
+     * @param dispatchOrdIDs 璋冨害鍗旾D鍒楄〃
+     * @return 璋冨害鍗旾D鍜岀姸鎬佺殑鏄犲皠闆嗗悎
+     */
+    public List<DispatchOrd> selectDispatchOrdStatesByIDs(List<Long> dispatchOrdIDs);
+    
+    /**
+     * 鏇存柊璋冨害鍗曠姸鎬�
+     * 
+     * @param dispatchOrdID 璋冨害鍗旾D
+     * @param dispatchOrdState 鐘舵�佺爜
+     * @return 褰卞搷琛屾暟
+     */
+    public int updateDispatchOrdState(@Param("dispatchOrdID") Long dispatchOrdID, @Param("dispatchOrdState") Integer dispatchOrdState);
 } 
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskEmergencyMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskEmergencyMapper.java
index 49fc98f..c1ef739 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskEmergencyMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskEmergencyMapper.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+import org.apache.ibatis.annotations.Param;
 import com.ruoyi.system.domain.SysTaskEmergency;
 
 /**
@@ -61,15 +62,31 @@
 
     /**
      * 鏌ヨ寰呭悓姝ョ殑鎬ユ晳杞繍浠诲姟鍒楄〃锛堝悓姝ョ姸鎬佷负0鎴�3鐨勪换鍔★級
+     * 鏀寔鍒嗛〉鏌ヨ锛岃繃婊ゅ凡瀹屾垚/宸插彇娑堢殑浠诲姟
      * 
+     * @param offset 鍋忕Щ閲忥紙浠庣鍑犳潯寮�濮嬶級
+     * @param limit 姣忛〉鏁伴噺
      * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
      */
-    public List<SysTaskEmergency> selectPendingSyncTasks();
+    public List<SysTaskEmergency> selectPendingSyncTasks(@Param("offset") Integer offset, @Param("limit") Integer limit);
     
     /**
      * 鏌ヨ寰呭悓姝ヨ皟搴﹀崟鐨勪换鍔″垪琛紙宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曪級
+     * 鏀寔鍒嗛〉鏌ヨ锛岃繃婊ゅ凡瀹屾垚/宸插彇娑堢殑浠诲姟
      * 
+     * @param offset 鍋忕Щ閲忥紙浠庣鍑犳潯寮�濮嬶級
+     * @param limit 姣忛〉鏁伴噺
      * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
      */
-    public List<SysTaskEmergency> selectPendingDispatchSyncTasks();
+    public List<SysTaskEmergency> selectPendingDispatchSyncTasks(@Param("offset") Integer offset, @Param("limit") Integer limit);
+    
+    /**
+     * 鏌ヨ宸插悓姝ヨ皟搴﹀崟涓旂姸鎬佹湭瀹屾垚鐨勪换鍔″垪琛紙鐢ㄤ簬鐘舵�佸悓姝ワ級
+     * 鏀寔鍒嗛〉鏌ヨ
+     * 
+     * @param offset 鍋忕Щ閲忥紙浠庣鍑犳潯寮�濮嬶級
+     * @param limit 姣忛〉鏁伴噺
+     * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
+     */
+    public List<SysTaskEmergency> selectSyncedTasksForStatusUpdate(@Param("offset") Integer offset, @Param("limit") Integer limit);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java
index c3ad290..5af35f3 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java
@@ -58,4 +58,29 @@
      * @return 鍥剧墖URL鍒楄〃  
      */
     public List<String> selectImageUrlsByDOrdIDDt(String dOrdIDDt);
+    
+    /**
+     * 鏍规嵁璋冨害鍗旾D鏌ヨ璋冨害鍗曠姸鎬�
+     * 
+     * @param dispatchOrdID 璋冨害鍗旾D
+     * @return 璋冨害鍗曠姸鎬佺爜
+     */
+    public Integer selectDispatchOrdStateByID(Long dispatchOrdID);
+    
+    /**
+     * 鎵归噺鏌ヨ璋冨害鍗曠姸鎬�
+     * 
+     * @param dispatchOrdIDs 璋冨害鍗旾D鍒楄〃
+     * @return 璋冨害鍗旾D鍜岀姸鎬佺殑鏄犲皠闆嗗悎
+     */
+    public List<DispatchOrd> selectDispatchOrdStatesByIDs(List<Long> dispatchOrdIDs);
+    
+    /**
+     * 鏇存柊璋冨害鍗曠姸鎬�
+     * 
+     * @param dispatchOrdID 璋冨害鍗旾D
+     * @param dispatchOrdState 鐘舵�佺爜
+     * @return 褰卞搷琛屾暟
+     */
+    public int updateDispatchOrdState(Long dispatchOrdID, Integer dispatchOrdState);
 } 
\ No newline at end of file
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 2a598c8..b73955e 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
@@ -47,4 +47,4 @@
      * @return 鎴愬姛鍚屾鐨勪换鍔℃暟閲�
      */
     int batchSyncPendingDispatchOrders();
-}
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskEmergencyService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskEmergencyService.java
new file mode 100644
index 0000000..2bf9ce1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTaskEmergencyService.java
@@ -0,0 +1,91 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.SysTaskEmergency;
+import java.util.List;
+
+/**
+ * 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅Service鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2024-01-16
+ */
+public interface ISysTaskEmergencyService {
+    
+    /**
+     * 鏌ヨ鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param id 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅涓婚敭
+     * @return 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     */
+    public SysTaskEmergency selectSysTaskEmergencyById(Long id);
+
+    /**
+     * 閫氳繃浠诲姟ID鏌ヨ鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     */
+    public SysTaskEmergency selectSysTaskEmergencyByTaskId(Long taskId);
+
+    /**
+     * 鏂板鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param sysTaskEmergency 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertSysTaskEmergency(SysTaskEmergency sysTaskEmergency);
+
+    /**
+     * 淇敼鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param sysTaskEmergency 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateSysTaskEmergency(SysTaskEmergency sysTaskEmergency);
+
+    /**
+     * 鍒犻櫎鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param id 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteSysTaskEmergencyById(Long id);
+
+    /**
+     * 閫氳繃浠诲姟ID鍒犻櫎鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 缁撴灉
+     */
+    public int deleteSysTaskEmergencyByTaskId(Long taskId);
+
+    /**
+     * 鏌ヨ寰呭悓姝ョ殑鎬ユ晳杞繍浠诲姟鍒楄〃锛堝悓姝ョ姸鎬佷负0鎴�3鐨勪换鍔★級
+     * 鏀寔鍒嗛〉鏌ヨ
+     * 
+     * @param offset 鍋忕Щ閲�
+     * @param limit 姣忛〉鏁伴噺
+     * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
+     */
+    public List<SysTaskEmergency> selectPendingSyncTasks(Integer offset, Integer limit);
+    
+    /**
+     * 鏌ヨ寰呭悓姝ヨ皟搴﹀崟鐨勪换鍔″垪琛紙宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曪級
+     * 鏀寔鍒嗛〉鏌ヨ
+     * 
+     * @param offset 鍋忕Щ閲�
+     * @param limit 姣忛〉鏁伴噺
+     * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
+     */
+    public List<SysTaskEmergency> selectPendingDispatchSyncTasks(Integer offset, Integer limit);
+    
+    /**
+     * 鏌ヨ宸插悓姝ヨ皟搴﹀崟涓旂姸鎬佹湭瀹屾垚鐨勪换鍔″垪琛紙鐢ㄤ簬鐘舵�佸悓姝ワ級
+     * 鏀寔鍒嗛〉鏌ヨ
+     * 
+     * @param offset 鍋忕Щ閲�
+     * @param limit 姣忛〉鏁伴噺
+     * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
+     */
+    public List<SysTaskEmergency> selectSyncedTasksForStatusUpdate(Integer offset, Integer limit);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskStatusPushService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskStatusPushService.java
new file mode 100644
index 0000000..a81c876
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskStatusPushService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.system.service;
+
+/**
+ * 浠诲姟鐘舵�佹帹閫丼ervice鎺ュ彛
+ * 璐熻矗灏嗘柊绯荤粺鐨勪换鍔$姸鎬佹帹閫佸埌鏃х郴缁�
+ * 
+ * @author ruoyi
+ * @date 2024-01-16
+ */
+public interface ITaskStatusPushService {
+    
+    /**
+     * 灏嗗崟涓换鍔$姸鎬佹帹閫佸埌鏃х郴缁�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鏄惁鎺ㄩ�佹垚鍔�
+     */
+    boolean pushTaskStatusToLegacy(Long taskId);
+    
+    /**
+     * 鎵归噺鎺ㄩ�佷换鍔$姸鎬佸埌鏃х郴缁�
+     * 鏌ヨ鏂扮郴缁熶腑鐘舵�佸凡鍙樺寲涓旈渶瑕佸悓姝ョ殑浠诲姟锛屾壒閲忔帹閫佸埌鏃х郴缁�
+     * 
+     * @return 鎴愬姛鎺ㄩ�佺殑浠诲姟鏁伴噺
+     */
+    int batchPushTaskStatusToLegacy();
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskStatusSyncService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskStatusSyncService.java
new file mode 100644
index 0000000..f01a388
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITaskStatusSyncService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.system.service;
+
+/**
+ * 浠诲姟鐘舵�佸悓姝ervice鎺ュ彛
+ * 璐熻矗浠庢棫绯荤粺鍚屾浠诲姟鐘舵�佸埌鏂扮郴缁�
+ * 
+ * @author ruoyi
+ * @date 2024-01-16
+ */
+public interface ITaskStatusSyncService {
+    
+    /**
+     * 浠庢棫绯荤粺鍚屾鍗曚釜浠诲姟鐘舵�佸埌鏂扮郴缁�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鏄惁鍚屾鎴愬姛
+     */
+    boolean syncTaskStatusFromLegacy(Long taskId);
+    
+    /**
+     * 鎵归噺鍚屾宸插悓姝ヨ皟搴﹀崟鐨勪换鍔$姸鎬侊紙浠庢棫绯荤粺鍒版柊绯荤粺锛�
+     * 鏌ヨ宸插悓姝ヨ皟搴﹀崟涓旂姸鎬佹湭瀹屾垚鐨勪换鍔★紝鎵归噺鏌ヨ鏃х郴缁熺姸鎬佸苟鏇存柊
+     * 
+     * @return 鎴愬姛鍚屾鐨勪换鍔℃暟閲�
+     */
+    int batchSyncTaskStatusFromLegacy();
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java
index d6eaf52..6e59894 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java
@@ -87,6 +87,40 @@
     public List<String> selectImageUrlsByDOrdIDDt(String dOrdIDDt) {
         return dispatchOrdMapper.selectImageUrlsByDOrdIDDt(dOrdIDDt);
     }
+    
+    /**
+     * 鏍规嵁璋冨害鍗旾D鏌ヨ璋冨害鍗曠姸鎬�
+     * 
+     * @param dispatchOrdID 璋冨害鍗旾D
+     * @return 璋冨害鍗曠姸鎬佺爜
+     */
+    @Override
+    public Integer selectDispatchOrdStateByID(Long dispatchOrdID) {
+        return dispatchOrdMapper.selectDispatchOrdStateByID(dispatchOrdID);
+    }
+    
+    /**
+     * 鎵归噺鏌ヨ璋冨害鍗曠姸鎬�
+     * 
+     * @param dispatchOrdIDs 璋冨害鍗旾D鍒楄〃
+     * @return 璋冨害鍗旾D鍜岀姸鎬佺殑鏄犲皠闆嗗悎
+     */
+    @Override
+    public List<DispatchOrd> selectDispatchOrdStatesByIDs(List<Long> dispatchOrdIDs) {
+        return dispatchOrdMapper.selectDispatchOrdStatesByIDs(dispatchOrdIDs);
+    }
+    
+    /**
+     * 鏇存柊璋冨害鍗曠姸鎬�
+     * 
+     * @param dispatchOrdID 璋冨害鍗旾D
+     * @param dispatchOrdState 鐘舵�佺爜
+     * @return 褰卞搷琛屾暟
+     */
+    @Override
+    public int updateDispatchOrdState(Long dispatchOrdID, Integer dispatchOrdState) {
+        return dispatchOrdMapper.updateDispatchOrdState(dispatchOrdID, dispatchOrdState);
+    }
         
 
 } 
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
index 8e181d8..828459a 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
@@ -36,6 +36,9 @@
 import com.ruoyi.system.mapper.SysUserMapper;
 import com.ruoyi.system.mapper.SysDeptMapper;
 import com.ruoyi.system.service.ILegacySystemSyncService;
+import com.ruoyi.system.utils.TaskStatusConverter;
+import com.ruoyi.system.service.IDispatchOrdService;
+import com.ruoyi.system.service.ISysTaskEmergencyService;
 
 /**
  * 鏃х郴缁熷悓姝ervice涓氬姟灞傚鐞�
@@ -55,9 +58,6 @@
     private SysTaskMapper sysTaskMapper;
     
     @Autowired
-    private SysTaskEmergencyMapper sysTaskEmergencyMapper;
-    
-    @Autowired
     private SysUserMapper sysUserMapper;
     
     @Autowired
@@ -71,6 +71,12 @@
     
     @Autowired
     private VehicleInfoMapper vehicleInfoMapper;
+    
+    @Autowired
+    private IDispatchOrdService dispatchOrdService;
+    
+    @Autowired
+    private ISysTaskEmergencyService sysTaskEmergencyService;
     
     /**
      * 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
@@ -98,7 +104,7 @@
             }
             
             // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
-            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
             if (emergency == null) {
                 log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
                 return null;
@@ -112,7 +118,7 @@
             
             // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
             emergency.setSyncStatus(1);
-            sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
             
             // 鏋勫缓璇锋眰鍙傛暟
             Map<String, String> params = buildSyncParams(task, emergency);
@@ -129,7 +135,7 @@
                 emergency.setSyncStatus(2); // 鍚屾鎴愬姛
                 emergency.setSyncTime(new Date());
                 emergency.setSyncErrorMsg(null);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 
                 // 鏇存柊浠诲姟涓昏〃鍚屾鏍囪
                 task.setLegacySynced(1);
@@ -142,7 +148,7 @@
                 emergency.setSyncStatus(3); // 鍚屾澶辫触
                 emergency.setSyncTime(new Date());
                 emergency.setSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑ServiceOrdID: " + response);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 
                 log.error("浠诲姟鍚屾澶辫触锛屼换鍔D: {}, 鍝嶅簲: {}", taskId, response);
                 return null;
@@ -153,12 +159,12 @@
             
             // 鏇存柊鍚屾鐘舵�佷负澶辫触
             try {
-                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+                SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
                 if (emergency != null) {
                     emergency.setSyncStatus(3); // 鍚屾澶辫触
                     emergency.setSyncTime(new Date());
                     emergency.setSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
-                    sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 }
             } catch (Exception ex) {
                 log.error("鏇存柊鍚屾鐘舵�佸け璐�", ex);
@@ -170,6 +176,7 @@
     
     /**
      * 鎵归噺鍚屾鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟
+     * 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
      */
     @Override
     public int batchSyncPendingTasks() {
@@ -179,27 +186,53 @@
         }
         
         try {
-            // 鏌ヨ鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟锛堝悓姝ョ姸鎬佷负0鎴�3鐨勪换鍔★級
-            List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingSyncTasks();
+            int totalSuccessCount = 0;
+            int pageSize = 100; // 姣忛〉100鏉�
+            int offset = 0;
             
-            int successCount = 0;
-            for (SysTaskEmergency emergency : pendingTasks) {
-                Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId());
-                if (serviceOrdId != null && serviceOrdId > 0) {
-                    successCount++;
+            while (true) {
+                // 鍒嗛〉鏌ヨ鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟锛堝悓姝ョ姸鎬佷负0鎴�3鐨勪换鍔★級
+                List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingSyncTasks(offset, pageSize);
+                
+                if (pendingTasks == null || pendingTasks.isEmpty()) {
+                    log.info("娌℃湁鏇村闇�瑕佸悓姝ョ殑浠诲姟锛宱ffset: {}", offset);
+                    break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
                 }
                 
-                // 閬垮厤杩囦簬棰戠箒鐨勮姹�
-                try {
-                    Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
-                } catch (InterruptedException e) {
-                    Thread.currentThread().interrupt();
+                log.info("寮�濮嬪悓姝ョ {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
+                
+                int pageSuccessCount = 0;
+                for (SysTaskEmergency emergency : pendingTasks) {
+                    Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId());
+                    if (serviceOrdId != null && serviceOrdId > 0) {
+                        pageSuccessCount++;
+                    }
+                    
+                    // 閬垮厤杩囦簬棰戠箒鐨勮姹�
+                    try {
+                        Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
+                    } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
+                        log.warn("鍚屾琚腑鏂�");
+                        return totalSuccessCount + pageSuccessCount;
+                    }
+                }
+                
+                totalSuccessCount += pageSuccessCount;
+                log.info("绗� {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
+                    (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
+                
+                // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
+                if (pendingTasks.size() < pageSize) {
+                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝鍚屾缁撴潫");
                     break;
                 }
+                
+                offset += pageSize; // 涓嬩竴椤�
             }
             
-            log.info("鎵归噺鍚屾瀹屾垚锛屾�绘暟: {}, 鎴愬姛: {}", pendingTasks.size(), successCount);
-            return successCount;
+            log.info("鎵归噺鍚屾瀹屾垚锛屾�绘垚鍔熸暟: {}", totalSuccessCount);
+            return totalSuccessCount;
             
         } catch (Exception e) {
             log.error("鎵归噺鍚屾浠诲姟寮傚父", e);
@@ -215,12 +248,12 @@
     public boolean retrySyncTask(Long taskId) {
         try {
             // 閲嶇疆鍚屾鐘舵��
-            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
             if (emergency != null) {
                 emergency.setSyncStatus(0); // 閲嶇疆涓烘湭鍚屾
                 emergency.setLegacyServiceOrdId(null);
                 emergency.setSyncErrorMsg(null);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
             }
             
             // 閲嶆柊鍚屾
@@ -259,7 +292,7 @@
             }
             
             // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
-            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+            SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
             if (emergency == null) {
                 log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
                 return null;
@@ -279,7 +312,7 @@
             
             // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
             emergency.setDispatchSyncStatus(1);
-            sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
             
             // 鏋勫缓璇锋眰鍙傛暟
             Map<String, String> params = buildDispatchOrderParams(task, emergency);
@@ -296,7 +329,7 @@
                 emergency.setDispatchSyncStatus(2); // 鍚屾鎴愬姛
                 emergency.setDispatchSyncTime(new Date());
                 emergency.setDispatchSyncErrorMsg(null);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 
                 log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
                 return dispatchOrdId;
@@ -305,7 +338,7 @@
                 emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
                 emergency.setDispatchSyncTime(new Date());
                 emergency.setDispatchSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑DispatchOrdID: " + response);
-                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 
                 log.error("璋冨害鍗曞悓姝ュけ璐ワ紝浠诲姟ID: {}, 鍝嶅簲: {}", taskId, response);
                 return null;
@@ -316,12 +349,12 @@
             
             // 鏇存柊鍚屾鐘舵�佷负澶辫触
             try {
-                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+                SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
                 if (emergency != null) {
                     emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
                     emergency.setDispatchSyncTime(new Date());
                     emergency.setDispatchSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
-                    sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
                 }
             } catch (Exception ex) {
                 log.error("鏇存柊璋冨害鍗曞悓姝ョ姸鎬佸け璐�", ex);
@@ -333,6 +366,7 @@
     
     /**
      * 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
+     * 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
      */
     @Override
     public int batchSyncPendingDispatchOrders() {
@@ -342,27 +376,53 @@
         }
         
         try {
-            // 鏌ヨ宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曠殑浠诲姟
-            List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingDispatchSyncTasks();
+            int totalSuccessCount = 0;
+            int pageSize = 100; // 姣忛〉100鏉�
+            int offset = 0;
             
-            int successCount = 0;
-            for (SysTaskEmergency emergency : pendingTasks) {
-                Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId());
-                if (dispatchOrdId != null && dispatchOrdId > 0) {
-                    successCount++;
+            while (true) {
+                // 鍒嗛〉鏌ヨ宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曠殑浠诲姟
+                List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingDispatchSyncTasks(offset, pageSize);
+                
+                if (pendingTasks == null || pendingTasks.isEmpty()) {
+                    log.info("娌℃湁鏇村闇�瑕佸悓姝ヨ皟搴﹀崟鐨勪换鍔★紝offset: {}", offset);
+                    break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
                 }
                 
-                // 閬垮厤杩囦簬棰戠箒鐨勮姹�
-                try {
-                    Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
-                } catch (InterruptedException e) {
-                    Thread.currentThread().interrupt();
+                log.info("寮�濮嬪悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
+                
+                int pageSuccessCount = 0;
+                for (SysTaskEmergency emergency : pendingTasks) {
+                    Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId());
+                    if (dispatchOrdId != null && dispatchOrdId > 0) {
+                        pageSuccessCount++;
+                    }
+                    
+                    // 閬垮厤杩囦簬棰戠箒鐨勮姹�
+                    try {
+                        Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
+                    } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
+                        log.warn("鍚屾璋冨害鍗曡涓柇");
+                        return totalSuccessCount + pageSuccessCount;
+                    }
+                }
+                
+                totalSuccessCount += pageSuccessCount;
+                log.info("璋冨害鍗曠 {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
+                    (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
+                
+                // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
+                if (pendingTasks.size() < pageSize) {
+                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曞悓姝ョ粨鏉�");
                     break;
                 }
+                
+                offset += pageSize; // 涓嬩竴椤�
             }
             
-            log.info("鎵归噺鍚屾璋冨害鍗曞畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", pendingTasks.size(), successCount);
-            return successCount;
+            log.info("鎵归噺鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+            return totalSuccessCount;
             
         } catch (Exception e) {
             log.error("鎵归噺鍚屾璋冨害鍗曞紓甯�", e);
@@ -398,7 +458,7 @@
         // 鍩烘湰淇℃伅
         params.put("DispatchOrdClass", dispatchOrdClass);
         params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString());
-        params.put("DispatchOrdState", "8"); // 璋冨害鍗曠姸鎬�
+        params.put("DispatchOrdState", "1"); // 璋冨害鍗曠姸鎬�
         
         // 鏃堕棿淇℃伅
         if (task.getPlannedStartTime() != null) {
@@ -478,7 +538,7 @@
         params.put("ServiceOrdEstimatedOrderDateOld", ""); // 鍘熼璁℃淳鍗曟椂闂�
         params.put("ServiceOrdViaDistance", "0"); // 涓�旇窛绂�
         params.put("ServiceOrdTraDistance", emergency.getTransferDistance() != null ? emergency.getTransferDistance().toString() : "0"); // 璺濈
-        params.put("OrderLevel", "2"); // 鏌ョ湅绛夌骇
+        params.put("OrderLevel", "0"); // 鏌ョ湅绛夌骇
         params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
         params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
         params.put("DirectionType", "0"); // 杞繍鍘诲悜
@@ -866,7 +926,7 @@
         params.put("ServiceOrdOperationRemarks", "鏂扮郴缁熷悓姝ュ垱寤�"); // 鎿嶄綔澶囨敞
         params.put("ServiceOrdEstimatedOrderDate", ""); // 棰勮娲惧崟鏃堕棿
         params.put("ServiceOrdSource", "10"); // 璁㈠崟鏉ユ簮锛�10=鏂扮郴缁燂級
-        params.put("OrderLevel", "2"); // 鏌ョ湅绛夌骇
+        params.put("OrderLevel", "0"); // 鏌ョ湅绛夌骇
         params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
         params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
         params.put("DirectionType", "0"); // 杞繍鍘诲悜
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
new file mode 100644
index 0000000..a106835
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskEmergencyServiceImpl.java
@@ -0,0 +1,124 @@
+package com.ruoyi.system.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
+import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.service.ISysTaskEmergencyService;
+
+import java.util.List;
+
+/**
+ * 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅Service涓氬姟灞傚鐞�
+ * 
+ * @author ruoyi
+ * @date 2024-01-16
+ */
+@Service
+public class SysTaskEmergencyServiceImpl implements ISysTaskEmergencyService {
+    
+    @Autowired
+    private SysTaskEmergencyMapper sysTaskEmergencyMapper;
+
+    /**
+     * 鏌ヨ鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param id 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅涓婚敭
+     * @return 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     */
+    @Override
+    public SysTaskEmergency selectSysTaskEmergencyById(Long id) {
+        return sysTaskEmergencyMapper.selectSysTaskEmergencyById(id);
+    }
+
+    /**
+     * 閫氳繃浠诲姟ID鏌ヨ鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     */
+    @Override
+    public SysTaskEmergency selectSysTaskEmergencyByTaskId(Long taskId) {
+        return sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+    }
+
+    /**
+     * 鏂板鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param sysTaskEmergency 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertSysTaskEmergency(SysTaskEmergency sysTaskEmergency) {
+        return sysTaskEmergencyMapper.insertSysTaskEmergency(sysTaskEmergency);
+    }
+
+    /**
+     * 淇敼鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param sysTaskEmergency 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateSysTaskEmergency(SysTaskEmergency sysTaskEmergency) {
+        return sysTaskEmergencyMapper.updateSysTaskEmergency(sysTaskEmergency);
+    }
+
+    /**
+     * 鍒犻櫎鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param id 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSysTaskEmergencyById(Long id) {
+        return sysTaskEmergencyMapper.deleteSysTaskEmergencyById(id);
+    }
+
+    /**
+     * 閫氳繃浠诲姟ID鍒犻櫎鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSysTaskEmergencyByTaskId(Long taskId) {
+        return sysTaskEmergencyMapper.deleteSysTaskEmergencyByTaskId(taskId);
+    }
+
+    /**
+     * 鏌ヨ寰呭悓姝ョ殑鎬ユ晳杞繍浠诲姟鍒楄〃锛堝悓姝ョ姸鎬佷负0鎴�3鐨勪换鍔★級
+     * 
+     * @param offset 鍋忕Щ閲�
+     * @param limit 姣忛〉鏁伴噺
+     * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
+     */
+    @Override
+    public List<SysTaskEmergency> selectPendingSyncTasks(Integer offset, Integer limit) {
+        return sysTaskEmergencyMapper.selectPendingSyncTasks(offset, limit);
+    }
+    
+    /**
+     * 鏌ヨ寰呭悓姝ヨ皟搴﹀崟鐨勪换鍔″垪琛紙宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曪級
+     * 
+     * @param offset 鍋忕Щ閲�
+     * @param limit 姣忛〉鏁伴噺
+     * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
+     */
+    @Override
+    public List<SysTaskEmergency> selectPendingDispatchSyncTasks(Integer offset, Integer limit) {
+        return sysTaskEmergencyMapper.selectPendingDispatchSyncTasks(offset, limit);
+    }
+    
+    /**
+     * 鏌ヨ宸插悓姝ヨ皟搴﹀崟涓旂姸鎬佹湭瀹屾垚鐨勪换鍔″垪琛紙鐢ㄤ簬鐘舵�佸悓姝ワ級
+     * 
+     * @param offset 鍋忕Щ閲�
+     * @param limit 姣忛〉鏁伴噺
+     * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
+     */
+    @Override
+    public List<SysTaskEmergency> selectSyncedTasksForStatusUpdate(Integer offset, Integer limit) {
+        return sysTaskEmergencyMapper.selectSyncedTasksForStatusUpdate(offset, limit);
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java
new file mode 100644
index 0000000..3c47332
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusPushServiceImpl.java
@@ -0,0 +1,235 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.domain.enums.TaskStatus;
+import com.ruoyi.system.mapper.SysTaskMapper;
+import com.ruoyi.system.service.IDispatchOrdService;
+import com.ruoyi.system.service.ISysTaskEmergencyService;
+import com.ruoyi.system.service.ITaskStatusPushService;
+import com.ruoyi.system.utils.TaskStatusPushConverter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * 浠诲姟鐘舵�佹帹閫丼ervice涓氬姟灞傚鐞�
+ * 璐熻矗灏嗘柊绯荤粺鐨勪换鍔$姸鎬佹帹閫佸埌鏃х郴缁�
+ * 
+ * @author ruoyi
+ * @date 2024-01-16
+ */
+@Service
+public class TaskStatusPushServiceImpl implements ITaskStatusPushService {
+    
+    private static final Logger log = LoggerFactory.getLogger(TaskStatusPushServiceImpl.class);
+    
+    @Autowired
+    private LegacySystemConfig legacyConfig;
+    
+    @Autowired
+    private SysTaskMapper sysTaskMapper;
+    
+    @Autowired
+    private ISysTaskEmergencyService sysTaskEmergencyService;
+    
+    @Autowired
+    private IDispatchOrdService dispatchOrdService;
+    
+    /**
+     * 灏嗗崟涓换鍔$姸鎬佹帹閫佸埌鏃х郴缁�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鏄惁鎺ㄩ�佹垚鍔�
+     */
+    @Override
+    @Transactional
+    public boolean pushTaskStatusToLegacy(Long taskId) {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囩姸鎬佹帹閫侊紝浠诲姟ID: {}", taskId);
+            return false;
+        }
+        
+        try {
+            // 鏌ヨ浠诲姟淇℃伅
+            log.debug("銆愭柊鎺ㄦ棫銆戞煡璇换鍔D: {}", taskId);
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+            if (task == null) {
+                log.error("銆愭柊鎺ㄦ棫銆戜换鍔′笉瀛樺湪锛屼换鍔D: {}", taskId);
+                return false;
+            }
+            
+            // 鍙帹閫佹�ユ晳杞繍浠诲姟
+            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
+                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囩姸鎬佹帹閫侊紝浠诲姟ID: {}", 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;
+            }
+            
+            // 鑾峰彇鏂扮郴缁熺姸鎬�
+            TaskStatus newTaskStatus = TaskStatus.getByCode(task.getTaskStatus());
+            if (newTaskStatus == null) {
+                log.error("鏃犳晥鐨勪换鍔$姸鎬侊紝浠诲姟ID: {}, 鐘舵�佺爜: {}", taskId, task.getTaskStatus());
+                return false;
+            }
+            
+            // 杞崲涓烘棫绯荤粺鐘舵�佺爜
+            Integer targetStatusCode = TaskStatusPushConverter.convertToLegacyStatus(newTaskStatus);
+            if (targetStatusCode == null) {
+                log.debug("銆愭柊鎺ㄦ棫銆戜换鍔$姸鎬佷笉闇�瑕佹帹閫佸埌鏃х郴缁燂紝浠诲姟ID: {}, 鐘舵��: {}",
+                    taskId, newTaskStatus.getInfo());
+                return false;
+            }
+            
+            // 鏌ヨ鏃х郴缁熷綋鍓嶇姸鎬�
+            Integer currentLegacyStatus = dispatchOrdService.selectDispatchOrdStateByID(
+                emergency.getLegacyDispatchOrdId());
+            if (currentLegacyStatus == null) {
+                log.error("銆愭柊鎺ㄦ棫銆戞煡璇㈡棫绯荤粺鐘舵�佸け璐ワ紝浠诲姟ID: {}, DispatchOrdID: {}",
+                    taskId, emergency.getLegacyDispatchOrdId());
+                return false;
+            }
+            
+            // 鍒ゆ柇鏄惁闇�瑕佹洿鏂帮紙鍖呭惈闃叉鐘舵�佸�掗��鐨勬鏌ワ級
+            // 濡傛灉鏃х郴缁熺姸鎬佸凡缁� >= 鏂扮郴缁熻鎺ㄩ�佺殑鐘舵�侊紝璇存槑鏃х郴缁熺姸鎬佹洿鏂帮紝鏂扮郴缁熻惤鍚庯紝涓嶅簲璇ユ帹閫�
+            if (!TaskStatusPushConverter.shouldUpdateLegacyStatus(targetStatusCode, currentLegacyStatus)) {
+                log.info("銆愭柊鎺ㄦ棫銆戞柊绯荤粺鐘舵�佽惤鍚庢垨绛変簬鏃х郴缁熺姸鎬侊紝璺宠繃鎺ㄩ�侊紝浠诲姟ID: {}, 鏂扮郴缁熺姸鎬�: {} ({}鈫抺}), 鏃х郴缁熺姸鎬�: {} ({})",
+                    taskId, 
+                    task.getTaskStatus(), newTaskStatus.getInfo(), targetStatusCode,
+                    currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus));
+                return true; // 杩斿洖true锛屽洜涓鸿繖涓嶇畻澶辫触锛屽彧鏄笉闇�瑕佹帹閫�
+            }
+            
+            // 鎺ㄩ�佺姸鎬佸埌鏃х郴缁�
+            boolean result = updateLegacyTaskStatus(emergency.getLegacyDispatchOrdId(), targetStatusCode);
+            
+            if (result) {
+                log.info("銆愭柊鎺ㄦ棫銆戜换鍔$姸鎬佹帹閫佹垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}, 鏃х姸鎬�: {} ({}), 鏂扮姸鎬�: {} ({})",
+                    taskId, emergency.getLegacyDispatchOrdId(),
+                    currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus),
+                    targetStatusCode, TaskStatusPushConverter.getLegacyStatusDescription(targetStatusCode));
+            } else {
+                log.error("銆愭柊鎺ㄦ棫銆戜换鍔$姸鎬佹帹閫佸け璐ワ紝浠诲姟ID: {}, DispatchOrdID: {}",
+                    taskId, emergency.getLegacyDispatchOrdId());
+            }
+            
+            return result;
+            
+        } catch (Exception e) {
+            log.error("銆愭柊鎺ㄦ棫銆戞帹閫佷换鍔$姸鎬佸紓甯革紝浠诲姟ID: {}", taskId, e);
+            return false;
+        }
+    }
+    
+    /**
+     * 鎵归噺鎺ㄩ�佷换鍔$姸鎬佸埌鏃х郴缁�
+     * 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚帹閫�
+     * 
+     * @return 鎴愬姛鎺ㄩ�佺殑浠诲姟鏁伴噺
+     */
+    @Override
+    public int batchPushTaskStatusToLegacy() {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤");
+            return 0;
+        }
+        
+        try {
+            int totalSuccessCount = 0;
+            int pageSize = 200; // 姣忛〉200鏉�
+            int offset = 0;
+            
+            while (true) {
+                // 鍒嗛〉鏌ヨ宸插悓姝ヨ皟搴﹀崟涓旂姸鎬佹湭瀹屾垚鐨勪换鍔�
+                List<SysTaskEmergency> syncedTasks = sysTaskEmergencyService.selectSyncedTasksForStatusUpdate(offset, pageSize);
+                
+                if (syncedTasks == null || syncedTasks.isEmpty()) {
+                    log.info("銆愭柊鎺ㄦ棫銆戞病鏈夋洿澶氶渶瑕佹帹閫佺姸鎬佺殑浠诲姟锛宱ffset: {}", offset);
+                    break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
+                }
+                
+                log.info("銆愭柊鎺ㄦ棫銆戝紑濮嬫帹閫佺姸鎬佺 {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, syncedTasks.size());
+                
+                int pageSuccessCount = 0;
+                for (SysTaskEmergency emergency : syncedTasks) {
+                    boolean result = pushTaskStatusToLegacy(emergency.getTaskId());
+                    if (result) {
+                        pageSuccessCount++;
+                    }
+                    
+                    // 閬垮厤杩囦簬棰戠箒鐨勮姹�
+                    try {
+                        Thread.sleep(200); // 姣忎釜璇锋眰闂撮殧0.2绉�
+                    } catch (InterruptedException e) {
+                        Thread.currentThread().interrupt();
+                        log.warn("銆愭柊鎺ㄦ棫銆戞帹閫佺姸鎬佽涓柇");
+                        return totalSuccessCount + pageSuccessCount;
+                    }
+                }
+                
+                totalSuccessCount += pageSuccessCount;
+                log.info("鐘舵�佺 {} 椤垫帹閫佸畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
+                    (offset / pageSize) + 1, syncedTasks.size(), pageSuccessCount);
+                
+                // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
+                if (syncedTasks.size() < pageSize) {
+                    log.info("銆愭柊鎺ㄦ棫銆戝凡鍒拌揪鏈�鍚庝竴椤碉紝鐘舵�佹帹閫佺粨鏉�");
+                    break;
+                }
+                
+                offset += pageSize; // 涓嬩竴椤�
+            }
+            
+            log.info("銆愭柊鎺ㄦ棫銆戞壒閲忔帹閫佷换鍔$姸鎬佸畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+            return totalSuccessCount;
+            
+        } catch (Exception e) {
+            log.error("銆愭柊鎺ㄦ棫銆戞壒閲忔帹閫佷换鍔$姸鎬佸紓甯�", e);
+            return 0;
+        }
+    }
+    
+    /**
+     * 鏇存柊鏃х郴缁熻皟搴﹀崟鐘舵�侊紙鐩存帴鎿嶄綔SQL Server鏁版嵁搴擄級
+     * 
+     * @param dispatchOrdId 璋冨害鍗旾D
+     * @param statusCode 鐩爣鐘舵�佺爜
+     * @return 鏄惁鎴愬姛
+     */
+    private boolean updateLegacyTaskStatus(Long dispatchOrdId, Integer statusCode) {
+        try {
+            // 鐩存帴閫氳繃Service璋冪敤Mapper鏇存柊SQL Server鏁版嵁搴�
+            int rows = dispatchOrdService.updateDispatchOrdState(dispatchOrdId, statusCode);
+            log.debug("鏇存柊鏃х郴缁熺姸鎬侊紝DispatchOrdID: {}, StateInt: {}", dispatchOrdId, statusCode);
+            if (rows > 0) {
+                log.debug("鏇存柊鏃х郴缁熺姸鎬佹垚鍔燂紝DispatchOrdID: {}, StateInt: {}", 
+                    dispatchOrdId, statusCode);
+                return true;
+            } else {
+                log.warn("鏇存柊鏃х郴缁熺姸鎬佸け璐ワ紝鏈壘鍒板搴旇皟搴﹀崟锛孌ispatchOrdID: {}", dispatchOrdId);
+                return false;
+            }
+            
+        } catch (Exception e) {
+            log.error("鏇存柊鏃х郴缁熺姸鎬佸紓甯革紝DispatchOrdID: {}", dispatchOrdId, e);
+            return false;
+        }
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusSyncServiceImpl.java
new file mode 100644
index 0000000..48e2a37
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskStatusSyncServiceImpl.java
@@ -0,0 +1,332 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.system.domain.DispatchOrd;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.domain.enums.TaskStatus;
+import com.ruoyi.system.mapper.SysTaskMapper;
+import com.ruoyi.system.service.IDispatchOrdService;
+import com.ruoyi.system.service.ISysTaskEmergencyService;
+import com.ruoyi.system.service.ITaskStatusSyncService;
+import com.ruoyi.system.utils.TaskStatusConverter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * 浠诲姟鐘舵�佸悓姝ervice涓氬姟灞傚鐞�
+ * 璐熻矗浠庢棫绯荤粺鍚屾浠诲姟鐘舵�佸埌鏂扮郴缁�
+ * 
+ * @author ruoyi
+ * @date 2024-01-16
+ */
+@Service
+public class TaskStatusSyncServiceImpl implements ITaskStatusSyncService {
+    
+    private static final Logger log = LoggerFactory.getLogger(TaskStatusSyncServiceImpl.class);
+    
+    @Autowired
+    private LegacySystemConfig legacyConfig;
+    
+    @Autowired
+    private SysTaskMapper sysTaskMapper;
+    
+    @Autowired
+    private ISysTaskEmergencyService sysTaskEmergencyService;
+    
+    @Autowired
+    private IDispatchOrdService dispatchOrdService;
+    
+    /**
+     * 浠庢棫绯荤粺鍚屾鍗曚釜浠诲姟鐘舵�佸埌鏂扮郴缁�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鏄惁鍚屾鎴愬姛
+     */
+    @Override
+    @Transactional
+    public boolean syncTaskStatusFromLegacy(Long taskId) {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囩姸鎬佸悓姝ワ紝浠诲姟ID: {}", 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("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囩姸鎬佸悓姝ワ紝浠诲姟ID: {}", 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;
+            }
+            
+            // 鏌ヨ鏃х郴缁熺姸鎬侊紙鐩存帴鏌ヨSQL Server鏁版嵁搴擄級
+            Integer legacyStatus = dispatchOrdService.selectDispatchOrdStateByID(emergency.getLegacyDispatchOrdId());
+            if (legacyStatus == null) {
+                log.error("鏌ヨ鏃х郴缁熺姸鎬佸け璐ワ紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+                return false;
+            }
+            
+            // 璋冪敤鍐呴儴鏂规硶鍚屾鐘舵��
+            return syncTaskStatusWithLegacyState(taskId, legacyStatus);
+            
+        } catch (Exception e) {
+            log.error("鍚屾浠诲姟鐘舵�佸紓甯革紝浠诲姟ID: {}", taskId, e);
+            return false;
+        }
+    }
+    
+    /**
+     * 鎵归噺鍚屾宸插悓姝ヨ皟搴﹀崟鐨勪换鍔$姸鎬侊紙浠庢棫绯荤粺鍒版柊绯荤粺锛�
+     * 浣跨敤鍒嗛〉鏌ヨ锛屾壒閲忔煡璇QL Server鏁版嵁搴擄紝鍑忓皯缃戠粶璇锋眰娆℃暟
+     * 
+     * @return 鎴愬姛鍚屾鐨勪换鍔℃暟閲�
+     */
+    @Override
+    public int batchSyncTaskStatusFromLegacy() {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤");
+            return 0;
+        }
+        
+        try {
+            int totalSuccessCount = 0;
+            int pageSize = 200; // 姣忛〉200鏉�
+            int offset = 0;
+            
+            while (true) {
+                // 1. 鍒嗛〉鏌ヨ鏂扮郴缁熶腑闇�瑕佸悓姝ョ姸鎬佺殑浠诲姟锛堝凡鍚屾璋冨害鍗曚笖鐘舵�佹湭瀹屾垚锛�
+                List<SysTaskEmergency> syncedTasks = sysTaskEmergencyService.selectSyncedTasksForStatusUpdate(offset, pageSize);
+                
+                if (syncedTasks == null || syncedTasks.isEmpty()) {
+                    log.info("娌℃湁鏇村闇�瑕佸悓姝ョ姸鎬佺殑浠诲姟锛宱ffset: {}", offset);
+                    break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
+                }
+                
+                log.info("寮�濮嬪悓姝ョ姸鎬佺 {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, syncedTasks.size());
+                
+                // 2. 鎻愬彇璋冨害鍗旾D鍒楄〃
+                List<Long> dispatchOrdIDs = new ArrayList<>();
+                Map<Long, SysTaskEmergency> dispatchIdToTaskMap = new HashMap<>();
+                
+                for (SysTaskEmergency emergency : syncedTasks) {
+                    Long dispatchOrdId = emergency.getLegacyDispatchOrdId();
+                    if (dispatchOrdId != null && dispatchOrdId > 0) {
+                        dispatchOrdIDs.add(dispatchOrdId);
+                        dispatchIdToTaskMap.put(dispatchOrdId, emergency);
+                    }
+                }
+                
+                if (dispatchOrdIDs.isEmpty()) {
+                    log.warn("鏈〉娌℃湁鏈夋晥鐨勮皟搴﹀崟ID");
+                    offset += pageSize;
+                    continue;
+                }
+                
+                // 3. 鎵归噺鏌ヨ鏃х郴缁熻皟搴﹀崟鐘舵�侊紙鐩存帴鏌ヨSQL Server鏁版嵁搴擄級
+                List<DispatchOrd> dispatchOrds = dispatchOrdService.selectDispatchOrdStatesByIDs(dispatchOrdIDs);
+                
+                if (dispatchOrds == null || dispatchOrds.isEmpty()) {
+                    log.warn("鏈煡璇㈠埌鏃х郴缁熻皟搴﹀崟鐘舵��");
+                    offset += pageSize;
+                    continue;
+                }
+                
+                // 4. 鏋勫缓璋冨害鍗旾D鍒扮姸鎬佺殑鏄犲皠
+                Map<Long, Integer> dispatchIdToStateMap = new HashMap<>();
+                for (DispatchOrd dispatchOrd : dispatchOrds) {
+                    try {
+                        Long dispatchOrdId = Long.parseLong(dispatchOrd.getDispatchOrdID());
+                        Integer dispatchOrdState = Integer.parseInt(dispatchOrd.getDispatchOrdState());
+                        if (dispatchOrdState != null) {
+                            dispatchIdToStateMap.put(dispatchOrdId, dispatchOrdState);
+                        }
+                    } catch (NumberFormatException e) {
+                        log.error("瑙f瀽璋冨害鍗旾D澶辫触: {}", dispatchOrd.getDispatchOrdID(), e);
+                    }
+                }
+                
+                // 5. 閬嶅巻浠诲姟锛屽悓姝ョ姸鎬�
+                int pageSuccessCount = 0;
+                for (Map.Entry<Long, SysTaskEmergency> entry : dispatchIdToTaskMap.entrySet()) {
+                    Long dispatchOrdId = entry.getKey();
+                    SysTaskEmergency emergency = entry.getValue();
+                    
+                    // 鑾峰彇鏃х郴缁熺姸鎬�
+                    Integer legacyStatus = dispatchIdToStateMap.get(dispatchOrdId);
+                    if (legacyStatus == null) {
+                        log.warn("鏈壘鍒拌皟搴﹀崟鐘舵�侊紝DispatchOrdID: {}", dispatchOrdId);
+                        continue;
+                    }
+                    
+                    // 鍚屾鍗曚釜浠诲姟鐘舵��
+                    boolean result = syncTaskStatusWithLegacyState(emergency.getTaskId(), legacyStatus);
+                    if (result) {
+                        pageSuccessCount++;
+                    }
+                }
+                
+                totalSuccessCount += pageSuccessCount;
+                log.info("鐘舵�佺 {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", 
+                    (offset / pageSize) + 1, syncedTasks.size(), pageSuccessCount);
+                
+                // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
+                if (syncedTasks.size() < pageSize) {
+                    log.info("宸插埌杈炬渶鍚庝竴椤碉紝鐘舵�佸悓姝ョ粨鏉�");
+                    break;
+                }
+                
+                offset += pageSize; // 涓嬩竴椤�
+            }
+            
+            log.info("鎵归噺鍚屾浠诲姟鐘舵�佸畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+            return totalSuccessCount;
+            
+        } catch (Exception e) {
+            log.error("鎵归噺鍚屾浠诲姟鐘舵�佸紓甯�", e);
+            return 0;
+        }
+    }
+    
+    /**
+     * 鍚屾鍗曚釜浠诲姟鐘舵�侊紙宸茬煡鏃х郴缁熺姸鎬佺爜锛�
+     * 澧炲姞鐘舵�佸姣旈�昏緫锛氬綋鏃х郴缁熺姸鎬佽惤鍚庝簬鏂扮郴缁熺姸鎬佹椂锛屼笉杩涜鍚屾
+     * 
+     * @param taskId 浠诲姟ID
+     * @param legacyStatus 鏃х郴缁熺姸鎬佺爜
+     * @return 鏄惁鎴愬姛
+     */
+    @Transactional
+    private boolean syncTaskStatusWithLegacyState(Long taskId, Integer legacyStatus) {
+        try {
+            // 鏌ヨ浠诲姟淇℃伅
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+            if (task == null) {
+                log.error("浠诲姟涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
+                return false;
+            }
+            
+            // 杞崲涓烘柊绯荤粺鐘舵��
+            TaskStatus newStatus = TaskStatusConverter.convertFromLegacyStatus(legacyStatus);
+            if (newStatus == null) {
+                log.debug("鏃х郴缁熺姸鎬佺爜 > 10 鎴栨棤娉曡浆鎹紝璺宠繃鍚屾锛屼换鍔D: {}, 鐘舵�佺爜: {} ({})",
+                    taskId, legacyStatus, TaskStatusConverter.getLegacyStatusDescription(legacyStatus));
+                return false;
+            }
+            
+            // 妫�鏌ョ姸鎬佹槸鍚﹀彉鍖�
+            if (newStatus.getCode().equals(task.getTaskStatus())) {
+                log.debug("浠诲姟鐘舵�佹湭鍙樺寲锛屼换鍔D: {}, 褰撳墠鐘舵��: {}", taskId, newStatus.getInfo());
+                return true;
+            }
+            
+            // 姣旇緝鏂版棫绯荤粺鐘舵�佺殑浼樺厛绾э紝闃叉鐘舵�佸�掗��
+            TaskStatus currentStatus = TaskStatus.getByCode(task.getTaskStatus());
+            if (currentStatus != null && !shouldSyncStatus(currentStatus, newStatus, legacyStatus)) {
+                log.info("銆愭棫绯荤粺鏇存柊鍒版柊绯荤粺銆� 鏃х郴缁熺姸鎬佽惤鍚庝簬鏂扮郴缁熺姸鎬侊紝璺宠繃鍚屾锛屼换鍔D: {}, 鏂扮郴缁熺姸鎬�: {} ({}), 鏃х郴缁熺姸鎬�: {} ({})",
+                    taskId, task.getTaskStatus(), currentStatus.getInfo(), 
+                    newStatus.getCode(), TaskStatusConverter.getLegacyStatusDescription(legacyStatus));
+                return false;
+            }
+            
+            // 鏇存柊浠诲姟鐘舵��
+            String oldStatus = task.getTaskStatus();
+            task.setTaskStatus(newStatus.getCode());
+            
+            // 鏍规嵁鐘舵�佽缃椂闂�
+            Date now = new Date();
+            switch (newStatus) {
+                case DEPARTING:
+                case ARRIVED:
+                case IN_PROGRESS:
+                    // 濡傛灉瀹為檯寮�濮嬫椂闂翠负绌猴紝璁剧疆瀹為檯寮�濮嬫椂闂�
+                    if (task.getActualStartTime() == null) {
+                        task.setActualStartTime(now);
+                    }
+                    break;
+                case COMPLETED:
+                case CANCELLED:
+                    // 璁剧疆瀹為檯缁撴潫鏃堕棿
+                    if (task.getActualEndTime() == null) {
+                        task.setActualEndTime(now);
+                    }
+                    // 濡傛灉瀹為檯寮�濮嬫椂闂翠负绌猴紝涔熻缃竴涓�
+                    if (task.getActualStartTime() == null) {
+                        task.setActualStartTime(now);
+                    }
+                    break;
+                default:
+                    break;
+            }
+            
+            sysTaskMapper.updateSysTask(task);
+            
+            log.info("浠诲姟鐘舵�佸悓姝ユ垚鍔燂紝浠诲姟ID: {}, 鏃х姸鎬�: {}, 鏂扮姸鎬�: {}, 鏃х郴缁熺姸鎬佺爜: {} ({})", 
+                taskId, oldStatus, newStatus.getCode(), legacyStatus, 
+                TaskStatusConverter.getLegacyStatusDescription(legacyStatus));
+            
+            return true;
+            
+        } catch (Exception e) {
+            log.error("鍚屾浠诲姟鐘舵�佸紓甯革紝浠诲姟ID: {}", taskId, e);
+            return false;
+        }
+    }
+    
+    /**
+     * 鍒ゆ柇鏄惁搴旇鍚屾鐘舵��
+     * 瑙勫垯锛氭棫绯荤粺鐘舵�佺爜闇�瑕佸ぇ浜庣瓑浜庢柊绯荤粺褰撳墠鐘舵�佸搴旂殑鏃х郴缁熺姸鎬佺爜
+     * 闃叉鍥犱负鏃堕棿宸鑷存柊绯荤粺鐘舵�佹瘮鏃х郴缁熸洿鏂帮紝鑰岃鏃х郴缁熺殑鏃х姸鎬佽鐩�
+     * 
+     * @param currentStatus 鏂扮郴缁熷綋鍓嶇姸鎬�
+     * @param targetStatus 鏃х郴缁熻浆鎹㈠悗鐨勭洰鏍囩姸鎬�
+     * @param legacyStatusCode 鏃х郴缁熺姸鎬佺爜
+     * @return true-搴旇鍚屾锛宖alse-涓嶅簲璇ュ悓姝�
+     */
+    private boolean shouldSyncStatus(TaskStatus currentStatus, TaskStatus targetStatus, Integer legacyStatusCode) {
+        // 鑾峰彇鏂扮郴缁熷綋鍓嶇姸鎬佸搴旂殑鏃х郴缁熺姸鎬佺爜
+        Integer currentLegacyCode = TaskStatusConverter.convertToLegacyStatus(currentStatus);
+        
+        if (currentLegacyCode == null) {
+            // 濡傛灉褰撳墠鐘舵�佹棤娉曡浆鎹负鏃х郴缁熺姸鎬佺爜锛屽厑璁稿悓姝�
+            log.warn("鏂扮郴缁熷綋鍓嶇姸鎬佹棤娉曡浆鎹负鏃х郴缁熺姸鎬佺爜锛屽厑璁稿悓姝ワ紝褰撳墠鐘舵��: {}", currentStatus.getCode());
+            return true;
+        }
+        
+        // 姣旇緝鐘舵�佺爜澶у皬
+        // 鏃х郴缁熺姸鎬佺爜 >= 鏂扮郴缁熷綋鍓嶇姸鎬佸搴旂殑鏃х郴缁熺姸鎬佺爜锛屾墠鍏佽鍚屾
+        // 渚嬪锛氭柊绯荤粺宸茬粡鏄�"鍑哄彂涓�"(4)锛屾棫绯荤粺杩樻槸"寰呭鐞�"(3)锛屽垯涓嶅悓姝�
+        //      鏂扮郴缁熸槸"鍑哄彂涓�"(4)锛屾棫绯荤粺鏄�"宸插埌杈�"(5)鎴�"鍑哄彂涓�"(4)锛屽垯鍚屾
+        boolean shouldSync = legacyStatusCode >= currentLegacyCode;
+        
+        if (!shouldSync) {
+            log.debug("鐘舵�佸姣旓細鏃х郴缁熺姸鎬佺爜({}) < 鏂扮郴缁熷綋鍓嶇姸鎬佸搴旂爜({})",
+                legacyStatusCode, currentLegacyCode);
+        }
+        
+        return shouldSync;
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskCodeGenerator.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskCodeGenerator.java
index 22c5c72..46b9d27 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskCodeGenerator.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskCodeGenerator.java
@@ -19,36 +19,55 @@
     private SysTaskMapper sysTaskMapper;
     
     /**
-     * 鐢熸垚浠诲姟缂栧彿
-     * 鏍煎紡锛歍ASK + YYYYMMDD + 4浣嶅簭鍙�
+     * 鐢熸垚浠诲姟缂栧彿锛堜娇鐢ㄩ粯璁ゅ墠缂�锛�
+     * 鏍煎紡锛歍 + YYYYMMDD + 4浣嶅簭鍙�
      * 
      * @return 浠诲姟缂栧彿
+     * @deprecated 寤鸿浣跨敤 {@link #generateTaskCode(String)} 鎸囧畾鍗曟嵁绫诲瀷鍓嶇紑
      */
+    @Deprecated
     public String generateTaskCode() {
+        return generateTaskCode("T");
+    }
+    
+    /**
+     * 鐢熸垚浠诲姟缂栧彿
+     * 鏍煎紡锛氬崟鎹被鍨嬪墠缂� + YYYYMMDD + 4浣嶅簭鍙�
+     * 
+     * @param serviceOrdClass 鍗曟嵁绫诲瀷锛堝锛欱F銆丣Z绛夛級
+     * @return 浠诲姟缂栧彿
+     */
+    public String generateTaskCode(String serviceOrdClass) {
         String dateStr = DateUtils.dateTimeNow("yyyyMMdd");
-        return generateTaskCode(dateStr);
+        return generateTaskCode(serviceOrdClass, dateStr);
     }
     
     /**
      * 鏍规嵁鏃ユ湡鐢熸垚浠诲姟缂栧彿
      * 
+     * @param serviceOrdClass 鍗曟嵁绫诲瀷锛堝锛欱F銆丣Z绛夛級
      * @param date 鏃ユ湡
      * @return 浠诲姟缂栧彿
      */
-    public String generateTaskCode(Date date) {
+    public String generateTaskCode(String serviceOrdClass, Date date) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
         String dateStr = sdf.format(date);
-        return generateTaskCode(dateStr);
+        return generateTaskCode(serviceOrdClass, dateStr);
     }
     
     /**
      * 鏍规嵁鏃ユ湡瀛楃涓茬敓鎴愪换鍔$紪鍙�
      * 
+     * @param serviceOrdClass 鍗曟嵁绫诲瀷锛堝锛欱F銆丣Z绛夛級
      * @param dateStr 鏃ユ湡瀛楃涓诧紙鏍煎紡锛歽yyyMMdd锛�
      * @return 浠诲姟缂栧彿
      */
-    private String generateTaskCode(String dateStr) {
-        String datePrefix = "TASK" + dateStr;
+    private String generateTaskCode(String serviceOrdClass, String dateStr) {
+        // 纭繚鍗曟嵁绫诲瀷鍓嶇紑涓嶄负绌猴紝榛樿浣跨敤"T"
+        String prefix = (serviceOrdClass != null && !serviceOrdClass.trim().isEmpty()) 
+                        ? serviceOrdClass.trim() : "T";
+        
+        String datePrefix = prefix + dateStr;
         
         // 鏌ヨ褰撴棩鏈�澶х紪鍙�
         String maxTaskCode = sysTaskMapper.selectMaxTaskCodeByDatePrefix(datePrefix);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusConverter.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusConverter.java
new file mode 100644
index 0000000..eb82fa1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusConverter.java
@@ -0,0 +1,147 @@
+package com.ruoyi.system.utils;
+
+import com.ruoyi.system.domain.enums.TaskStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 浠诲姟鐘舵�佽浆鎹㈠伐鍏风被
+ * 鐢ㄤ簬鏂版棫绯荤粺浠诲姟鐘舵�佺殑鏄犲皠杞崲
+ * 
+ * @author ruoyi
+ * @date 2025-01-30
+ */
+public class TaskStatusConverter {
+    
+    private static final Logger log = LoggerFactory.getLogger(TaskStatusConverter.class);
+    
+    /**
+     * 灏嗘棫绯荤粺鐘舵�佺爜杞崲涓烘柊绯荤粺TaskStatus
+     * 
+     * 鏄犲皠瑙勫垯锛�
+     * 0,1,2,3 -> PENDING (寰呭鐞�)
+     * 4 -> DEPARTING (鍑哄彂涓�)
+     * 5 -> ARRIVED (宸插埌杈�)
+     * 6 -> IN_PROGRESS (浠诲姟涓�)
+     * 7 -> RETURNING (杩旂▼涓�)
+     * 8,9 -> COMPLETED (宸插畬鎴�)
+     * 
+     * 娉ㄦ剰锛氱姸鎬佺爜 > 10 鐨勪笉杩涜鍚屾锛堝鏍哥被銆侀┗鐐圭瓑鐢辨柊绯荤粺鑷绠$悊锛�
+     * 
+     * @param legacyStatusCode 鏃х郴缁熺姸鎬佺爜
+     * @return 鏂扮郴缁烼askStatus锛岀姸鎬佺爜>=10鎴栨湭鐭ョ姸鎬佽繑鍥瀗ull
+     */
+    public static TaskStatus convertFromLegacyStatus(Integer legacyStatusCode) {
+        if (legacyStatusCode == null) {
+            log.warn("鏃х郴缁熺姸鎬佺爜涓虹┖");
+            return null;
+        }
+        
+        // 鐘舵�佺爜 > 10 鐨勪笉杩涜鍚屾
+        if (legacyStatusCode > 10) {
+            log.debug("鏃х郴缁熺姸鎬佺爜 > 10锛屼笉杩涜鍚屾: {} ({})", legacyStatusCode, getLegacyStatusDescription(legacyStatusCode));
+            return null;
+        }
+        
+        switch (legacyStatusCode) {
+            case 0:  // 鏂拌皟搴﹀崟锛堟湭涓嬪彂锛�
+            case 1:  // 瀹屽叏鏈‘璁�
+            case 2:  // 閮ㄥ垎宸茬‘璁�
+            case 3:  // 鏈嚭杞�
+                return TaskStatus.PENDING;
+                
+            case 4:  // 宸插嚭杞︼紙鍘绘帴鎮h�呴�斾腑锛�
+                return TaskStatus.DEPARTING;
+                
+            case 5:  // 宸插嚭杞︼紙绛夊緟鎮h�咃級
+                return TaskStatus.ARRIVED;
+                
+            case 6:  // 宸插嚭杞︼紙鏈嶅姟涓級
+                return TaskStatus.IN_PROGRESS;
+                
+            case 7:  // 宸查�佽揪锛堝洖绋嬩腑锛�
+                return TaskStatus.RETURNING;
+                
+            case 8:  // 宸茶繑鍥�
+            case 9:  // 璺戠┖鍗曪紝宸茶繑鍥�
+                return TaskStatus.COMPLETED;
+            case 10:
+                return TaskStatus.CANCELLED;
+            default:
+                log.warn("鏈煡鐨勬棫绯荤粺鐘舵�佺爜: {}", legacyStatusCode);
+                return null;
+        }
+    }
+    
+    /**
+     * 灏嗘柊绯荤粺TaskStatus杞崲涓烘棫绯荤粺鐘舵�佺爜
+     * 娉ㄦ剰锛氱敱浜庡瀵逛竴鐨勬槧灏勫叧绯伙紝杩欓噷杩斿洖鐨勬槸鏈�甯哥敤鐨勭姸鎬佺爜
+     * 
+     * @param taskStatus 鏂扮郴缁烼askStatus
+     * @return 鏃х郴缁熺姸鎬佺爜锛屾湭鐭ョ姸鎬佽繑鍥瀗ull
+     */
+    public static Integer convertToLegacyStatus(TaskStatus taskStatus) {
+        if (taskStatus == null) {
+            log.warn("鏂扮郴缁熶换鍔$姸鎬佷负绌�");
+            return null;
+        }
+        
+        switch (taskStatus) {
+            case PENDING:
+                return 3;  // 鏈嚭杞�
+                
+            case DEPARTING:
+                return 4;  // 宸插嚭杞︼紙鍘绘帴鎮h�呴�斾腑锛�
+                
+            case ARRIVED:
+                return 5;  // 宸插嚭杞︼紙绛夊緟鎮h�咃級
+                
+            case IN_PROGRESS:
+                return 6;  // 宸插嚭杞︼紙鏈嶅姟涓級
+                
+            case RETURNING:
+                return 7;  // 宸查�佽揪锛堝洖绋嬩腑锛�
+                
+            case COMPLETED:
+                return 8;  // 宸茶繑鍥�
+                
+            case CANCELLED:
+                return 10; // 鍙栨秷
+                
+            default:
+                log.warn("鏈煡鐨勬柊绯荤粺浠诲姟鐘舵��: {}", taskStatus);
+                return null;
+        }
+    }
+    
+    /**
+     * 鑾峰彇鏃х郴缁熺姸鎬佺爜鐨勬弿杩�
+     * 
+     * @param legacyStatusCode 鏃х郴缁熺姸鎬佺爜
+     * @return 鐘舵�佹弿杩�
+     */
+    public static String getLegacyStatusDescription(Integer legacyStatusCode) {
+        if (legacyStatusCode == null) {
+            return "鏈煡鐘舵��";
+        }
+        
+        switch (legacyStatusCode) {
+            case 0:  return "鏂拌皟搴﹀崟锛堟湭涓嬪彂锛�";
+            case 1:  return "瀹屽叏鏈‘璁�";
+            case 2:  return "閮ㄥ垎宸茬‘璁�";
+            case 3:  return "鏈嚭杞�";
+            case 4:  return "宸插嚭杞︼紙鍘绘帴鎮h�呴�斾腑锛�";
+            case 5:  return "宸插嚭杞︼紙绛夊緟鎮h�咃級";
+            case 6:  return "宸插嚭杞︼紙鏈嶅姟涓級";
+            case 7:  return "宸查�佽揪锛堝洖绋嬩腑锛�";
+            case 8:  return "宸茶繑鍥�";
+            case 9:  return "璺戠┖鍗曪紝宸茶繑鍥�";
+            case 10: return "鍙栨秷";
+            case 11: return "宸叉彁浜わ紝绛夊緟瀹℃牳";
+            case 12: return "瀹℃牳瀹屾垚";
+            case 13: return "瀹℃牳涓嶉�氳繃";
+            case 14: return "宸查┗鐐�";
+            default: return "鏈煡鐘舵��(" + legacyStatusCode + ")";
+        }
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusPushConverter.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusPushConverter.java
new file mode 100644
index 0000000..b8af81c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/TaskStatusPushConverter.java
@@ -0,0 +1,121 @@
+package com.ruoyi.system.utils;
+
+import com.ruoyi.system.domain.enums.TaskStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 鏂扮郴缁熺姸鎬佸悜鏃х郴缁熺姸鎬佽浆鎹㈠伐鍏风被
+ * 
+ * @author ruoyi
+ * @date 2024-01-16
+ */
+public class TaskStatusPushConverter {
+    
+    private static final Logger log = LoggerFactory.getLogger(TaskStatusPushConverter.class);
+    
+    /**
+     * 灏嗘柊绯荤粺TaskStatus杞崲涓烘棫绯荤粺鐘舵�佺爜
+     * 
+     * @param taskStatus 鏂扮郴缁熶换鍔$姸鎬佹灇涓�
+     * @return 鏃х郴缁熺姸鎬佺爜锛屽鏋滀笉闇�瑕佸悓姝ュ垯杩斿洖null
+     */
+    public static Integer convertToLegacyStatus(TaskStatus taskStatus) {
+        if (taskStatus == null) {
+            log.warn("鏂扮郴缁熺姸鎬佷负绌�");
+            return null;
+        }
+        
+        switch (taskStatus) {
+            case DEPARTING:      // 鍑哄彂涓�
+                return 4;
+            case IN_PROGRESS:    // 浠诲姟涓�
+                return 6;
+            case RETURNING:      // 杩旂▼涓�
+                return 7;
+            case COMPLETED:      // 宸插畬鎴�
+                return 8;
+            case CANCELLED:      // 宸插彇娑�
+                return 10;
+            case PENDING:        // 寰呭鐞� - 涓嶅悓姝�
+            case ARRIVED:        // 宸插埌杈� - 涓嶅悓姝�
+            default:
+                log.debug("鏂扮郴缁熺姸鎬佷笉闇�瑕佸悓姝ュ埌鏃х郴缁�: {}", taskStatus.getInfo());
+                return null;
+        }
+    }
+    
+    /**
+     * 鍒ゆ柇鏄惁闇�瑕佹洿鏂版棫绯荤粺鐘舵��
+     * 澧炲姞闃叉鐘舵�佸�掗��鏈哄埗锛氬綋鏂扮郴缁熺姸鎬佽惤鍚庝簬鏃х郴缁熸椂锛屼笉杩涜鎺ㄩ��
+     * 
+     * @param newStatusCode 鏂扮郴缁熻鎺ㄩ�佺殑鐘舵�佺爜
+     * @param oldStatusCode 鏃х郴缁熷綋鍓嶇姸鎬佺爜
+     * @return 鏄惁闇�瑕佹洿鏂�
+     */
+    public static boolean shouldUpdateLegacyStatus(Integer newStatusCode, Integer oldStatusCode) {
+        if (newStatusCode == null || oldStatusCode == null) {
+            log.warn("鐘舵�佺爜涓虹┖锛岃烦杩囨洿鏂帮紝鏂扮姸鎬佺爜: {}, 鏃х姸鎬佺爜: {}", newStatusCode, oldStatusCode);
+            return false;
+        }
+        
+        // 闃叉鐘舵�佸�掗��锛氭棫绯荤粺鐘舵�� >= 鏂扮郴缁熻鎺ㄩ�佺殑鐘舵�佹椂锛屼笉鏇存柊
+        // 鍘熷洜锛氬彲鑳芥槸鏃х郴缁熷凡缁忓鐞嗕簡鏇存柊鐨勭姸鎬侊紝鑰屾柊绯荤粺鐢变簬鏃堕棿宸繕娌℃湁鍚屾鍒�
+        if (oldStatusCode >= newStatusCode) {
+            log.info("鏃х郴缁熺姸鎬�({}) >= 鏂扮郴缁熺洰鏍囩姸鎬�({})锛岃烦杩囨帹閫侊紝闃叉鐘舵�佸�掗��锛�" +
+                "鏃х郴缁�: {} ({}), 鏂扮郴缁熺洰鏍�: {} ({})", 
+                oldStatusCode, newStatusCode,
+                oldStatusCode, getLegacyStatusDescription(oldStatusCode),
+                newStatusCode, getLegacyStatusDescription(newStatusCode));
+            return false;
+        }
+        
+        // 鐗规畩鐘舵�佹鏌ワ細宸插畬鎴愭垨宸插彇娑堢殑浠诲姟涓嶅簲璇ヨ鏇存柊涓轰腑闂寸姸鎬�
+        if (oldStatusCode >= 8) {
+            // 鏃х郴缁熷凡缁忔槸瀹屾垚鎬侊紙8,9,10锛夛紝涓嶅簲璇ヨ浠讳綍涓棿鐘舵�佽鐩�
+            if (newStatusCode < 8) {
+                log.warn("鏃х郴缁熷凡鏄粓鎬�({})(锛歿})锛屾嫆缁濇帹閫佷腑闂寸姸鎬�({})(锛歿})", 
+                    oldStatusCode, getLegacyStatusDescription(oldStatusCode),
+                    newStatusCode, getLegacyStatusDescription(newStatusCode));
+                return false;
+            }
+        }
+        
+        log.debug("鍏佽鎺ㄩ�佺姸鎬侊紝鏃х郴缁�: {} ({}), 鏂扮郴缁熺洰鏍�: {} ({})",
+            oldStatusCode, getLegacyStatusDescription(oldStatusCode),
+            newStatusCode, getLegacyStatusDescription(newStatusCode));
+        
+        return true;
+    }
+    
+    /**
+     * 鑾峰彇鏃х郴缁熺姸鎬佹弿杩�
+     * 
+     * @param statusCode 鏃х郴缁熺姸鎬佺爜
+     * @return 鐘舵�佹弿杩�
+     */
+    public static String getLegacyStatusDescription(Integer statusCode) {
+        if (statusCode == null) {
+            return "鏈煡";
+        }
+        
+        switch (statusCode) {
+            case 0: return "鏂拌皟搴﹀崟锛堟湭涓嬪彂锛�";
+            case 1: return "瀹屽叏鏈‘璁�";
+            case 2: return "閮ㄥ垎宸茬‘璁�";
+            case 3: return "鏈嚭杞�";
+            case 4: return "宸插嚭杞︼紙鍘绘帴鎮h�呴�斾腑锛�";
+            case 5: return "宸插嚭杞︼紙绛夊緟鎮h�咃級";
+            case 6: return "宸插嚭杞︼紙鏈嶅姟涓級";
+            case 7: return "宸查�佽揪锛堝洖绋嬩腑锛�";
+            case 8: return "宸茶繑鍥�";
+            case 9: return "璺戠┖鍗曪紝宸茶繑鍥�";
+            case 10: return "鍙栨秷";
+            case 11: return "瀹℃牳涓�";
+            case 12: return "瀹℃牳閫氳繃";
+            case 13: return "瀹℃牳涓嶉�氳繃";
+            case 14: return "椹荤偣";
+            default: return "鏈煡鐘舵��(" + statusCode + ")";
+        }
+    }
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml
index b403bfa..e6379d2 100644
--- a/ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml
@@ -83,5 +83,29 @@
         and ImageType in (1,2)
         order by UpImageTime desc
     </select>
+    
+    <!-- 鏍规嵁璋冨害鍗旾D鏌ヨ璋冨害鍗曠姸鎬� -->
+    <select id="selectDispatchOrdStateByID" parameterType="Long" resultType="Integer">
+        select DispatchOrdState 
+        from DispatchOrd 
+        where DispatchOrdID = #{dispatchOrdID}
+    </select>
+    
+    <!-- 鎵归噺鏌ヨ璋冨害鍗曠姸鎬� -->
+    <select id="selectDispatchOrdStatesByIDs" parameterType="java.util.List" resultMap="DispatchOrdResult">
+        select DispatchOrdID, DispatchOrdState 
+        from DispatchOrd 
+        where DispatchOrdID in
+        <foreach collection="list" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+    
+    <!-- 鏇存柊璋冨害鍗曠姸鎬� -->
+    <update id="updateDispatchOrdState">
+        update DispatchOrd 
+        set DispatchOrdState = #{dispatchOrdState}
+        where DispatchOrdID = #{dispatchOrdID}
+    </update>
 
 </mapper> 
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml
index cf83d3c..0eaf2d9 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml
@@ -223,8 +223,21 @@
     <select id="selectPendingSyncTasks" resultMap="SysTaskEmergencyResult">
         <include refid="selectSysTaskEmergencyVo"/>
         where (sync_status = 0 or sync_status = 3)
+          and task_id in (
+              select task_id from sys_task 
+              where task_type = 'EMERGENCY_TRANSFER'                
+                and del_flag = '0'
+          )
         order by id asc
-        limit 100
+        <if test="offset != null and limit != null">
+            limit #{offset}, #{limit}
+        </if>
+        <if test="offset == null and limit != null">
+            limit #{limit}
+        </if>
+        <if test="offset == null and limit == null">
+            limit 100
+        </if>
     </select>
     
     <!-- 鏌ヨ寰呭悓姝ヨ皟搴﹀崟鐨勪换鍔★紙宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曪級 -->
@@ -233,8 +246,44 @@
         where sync_status = 2 
           and legacy_service_ord_id is not null 
           and (dispatch_sync_status = 0 or dispatch_sync_status = 3 or dispatch_sync_status is null)
+          and task_id in (
+              select task_id from sys_task 
+              where task_type = 'EMERGENCY_TRANSFER'
+                and task_status not in ('COMPLETED', 'CANCELLED')  <!-- 杩囨护宸插畬鎴�/宸插彇娑堢殑浠诲姟 -->
+                and del_flag = '0'
+          )
         order by id asc
-        limit 100
+        <if test="offset != null and limit != null">
+            limit #{offset}, #{limit}
+        </if>
+        <if test="offset == null and limit != null">
+            limit #{limit}
+        </if>
+        <if test="offset == null and limit == null">
+            limit 100
+        </if>
+    </select>
+    
+    <!-- 鏌ヨ宸插悓姝ヨ皟搴﹀崟涓旂姸鎬佹湭瀹屾垚鐨勪换鍔★紙鐢ㄤ簬鐘舵�佸悓姝ワ級 -->
+    <select id="selectSyncedTasksForStatusUpdate" resultMap="SysTaskEmergencyResult">
+        <include refid="selectSysTaskEmergencyVo"/>
+        where dispatch_sync_status = 2 
+          and legacy_dispatch_ord_id is not null
+          and task_id in (
+              select task_id from sys_task 
+              where task_type = 'EMERGENCY_TRANSFER'
+                and del_flag = '0'
+          )
+        order by id asc
+        <if test="offset != null and limit != null">
+            limit #{offset}, #{limit}
+        </if>
+        <if test="offset == null and limit != null">
+            limit #{limit}
+        </if>
+        <if test="offset == null and limit == null">
+            limit 200
+        </if>
     </select>
 
 </mapper>
diff --git a/ruoyi-ui/src/views/task/general/index.vue b/ruoyi-ui/src/views/task/general/index.vue
index 44fcef9..8087b32 100644
--- a/ruoyi-ui/src/views/task/general/index.vue
+++ b/ruoyi-ui/src/views/task/general/index.vue
@@ -112,24 +112,7 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="鍚屾鐘舵��" align="center" prop="syncStatus" width="120" v-if="hasEmergencyTask">
-        <template slot-scope="scope">
-          <span v-if="scope.row.taskType !== 'EMERGENCY_TRANSFER'" style="color: #C0C4CC;">--</span>
-          <el-tag v-else-if="!scope.row.emergencyInfo" type="info" size="mini">--</el-tag>
-          <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 0" type="info" size="mini">
-            <i class="el-icon-warning"></i> 鏈悓姝�
-          </el-tag>
-          <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 1" type="warning" size="mini">
-            <i class="el-icon-loading"></i> 鍚屾涓�
-          </el-tag>
-          <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 2" type="success" size="mini">
-            <i class="el-icon-success"></i> 宸插悓姝�
-          </el-tag>
-          <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 3" type="danger" size="mini">
-            <i class="el-icon-error"></i> 鍚屾澶辫触
-          </el-tag>
-        </template>
-      </el-table-column>
+   
       <el-table-column label="浠诲姟鐘舵��" align="center" prop="taskStatus">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.sys_task_status" :value="scope.row.taskStatus"/>
diff --git a/sql/legacy_status_sync_job.sql b/sql/legacy_status_sync_job.sql
new file mode 100644
index 0000000..50e06b3
--- /dev/null
+++ b/sql/legacy_status_sync_job.sql
@@ -0,0 +1,133 @@
+-- ==========================================
+-- 鏃х郴缁熶换鍔$姸鎬佸悓姝ュ畾鏃朵换鍔¢厤缃剼鏈�
+-- ==========================================
+-- 
+-- 鍔熻兘璇存槑:
+-- 浠庢棫绯荤粺鍚屾浠诲姟鐘舵�佸埌鏂扮郴缁燂紝瀹炵幇鐘舵�佺殑瀹炴椂鏇存柊
+-- 
+-- 浣跨敤鍦烘櫙:
+-- 1. 鏃х郴缁熸搷浣滀汉鍛樻洿鏂颁簡璋冨害鍗曠姸鎬�
+-- 2. 鏂扮郴缁熼渶瑕佸弽鏄犳棫绯荤粺鐨勭姸鎬佸彉鏇�
+-- 3. 淇濇寔鏂版棫绯荤粺鐘舵�佺殑涓�鑷存��
+-- 
+-- 鍚屾鏉′欢:
+-- 1. 璋冨害鍗曞凡鍚屾鎴愬姛锛坉ispatch_sync_status = 2锛�
+-- 2. 鏈塂ispatchOrdID锛坙egacy_dispatch_ord_id IS NOT NULL锛�
+-- 3. 浠诲姟鐘舵�佹湭瀹屾垚锛坱ask_status NOT IN ('COMPLETED', 'CANCELLED')锛�
+-- 
+-- 鎵ц棰戠巼寤鸿:
+-- - 鐢熶骇鐜: 姣�5鍒嗛挓鎵ц涓�娆� (0 0/5 * * * ?)
+-- - 娴嬭瘯鐜: 姣�2鍒嗛挓鎵ц涓�娆� (0 0/2 * * * ?)
+-- 
+-- 娉ㄦ剰浜嬮」:
+-- 1. 渚濊禆璋冨害鍗曞悓姝ュ畬鎴�
+-- 2. 浠呭悓姝ユ湭瀹屾垚鐘舵�佺殑浠诲姟
+-- 3. 鐘舵�佹槧灏勮鍒欒TaskStatusConverter绫�
+-- ==========================================
+
+-- 鎻掑叆瀹氭椂浠诲姟閰嶇疆
+INSERT INTO `sys_job` (
+    `job_name`,
+    `job_group`,
+    `invoke_target`,
+    `cron_expression`,
+    `misfire_policy`,
+    `concurrent`,
+    `status`,
+    `create_by`,
+    `create_time`,
+    `update_by`,
+    `update_time`,
+    `remark`
+) VALUES (
+    '浠诲姟鐘舵�佸悓姝�',
+    'DEFAULT',
+    'legacySystemSyncTask.syncTaskStatusFromLegacy()',
+    '0 0/5 * * * ?',
+    '2',
+    '1',
+    '0',
+    'admin',
+    NOW(),
+    'admin',
+    NOW(),
+    '浠庢棫绯荤粺鍚屾浠诲姟鐘舵�佸埌鏂扮郴缁燂紝姣�5鍒嗛挓鎵ц涓�娆°�傚悓姝ュ凡鍚屾璋冨害鍗曚笖鐘舵�佹湭瀹屾垚鐨勪换鍔°��'
+);
+
+-- ==========================================
+-- 楠岃瘉鏌ヨ
+-- ==========================================
+
+-- 1. 鏌ョ湅瀹氭椂浠诲姟鏄惁娣诲姞鎴愬姛
+SELECT 
+    job_id,
+    job_name,
+    job_group,
+    invoke_target,
+    cron_expression,
+    CASE status 
+        WHEN '0' THEN '姝e父'
+        WHEN '1' THEN '鏆傚仠'
+    END AS job_status,
+    remark
+FROM sys_job
+WHERE job_name = '浠诲姟鐘舵�佸悓姝�';
+
+-- 2. 鏌ョ湅闇�瑕佸悓姝ョ姸鎬佺殑浠诲姟鏁伴噺
+SELECT 
+    COUNT(*) AS total_tasks,
+    SUM(CASE WHEN t.task_status = 'PENDING' THEN 1 ELSE 0 END) AS pending,
+    SUM(CASE WHEN t.task_status = 'DEPARTING' THEN 1 ELSE 0 END) AS departing,
+    SUM(CASE WHEN t.task_status = 'ARRIVED' THEN 1 ELSE 0 END) AS arrived,
+    SUM(CASE WHEN t.task_status = 'IN_PROGRESS' THEN 1 ELSE 0 END) AS in_progress,
+    SUM(CASE WHEN t.task_status = 'RETURNING' THEN 1 ELSE 0 END) AS returning
+FROM sys_task_emergency e
+INNER JOIN sys_task t ON e.task_id = t.task_id
+WHERE e.dispatch_sync_status = 2 
+  AND e.legacy_dispatch_ord_id IS NOT NULL
+  AND t.task_status NOT IN ('COMPLETED', 'CANCELLED')
+  AND t.del_flag = '0';
+
+-- 3. 鏌ョ湅浠诲姟鐘舵�佸垎甯冭鎯�
+SELECT 
+    t.task_id,
+    t.task_code,
+    t.task_status,
+    e.legacy_service_ord_id,
+    e.legacy_dispatch_ord_id,
+    t.create_time,
+    t.update_time
+FROM sys_task_emergency e
+INNER JOIN sys_task t ON e.task_id = t.task_id
+WHERE e.dispatch_sync_status = 2 
+  AND e.legacy_dispatch_ord_id IS NOT NULL
+  AND t.task_status NOT IN ('COMPLETED', 'CANCELLED')
+  AND t.del_flag = '0'
+ORDER BY t.update_time DESC
+LIMIT 10;
+
+-- ==========================================
+-- 鐘舵�佹槧灏勮鍒欏弬鑰�
+-- ==========================================
+/*
+鏃х郴缁熺姸鎬佺爜 -> 鏂扮郴缁熺姸鎬�:
+0,1,2,3,11,12 -> PENDING (寰呭鐞�)
+4 -> DEPARTING (鍑哄彂涓�)
+5,14 -> ARRIVED (宸插埌杈�)
+6 -> IN_PROGRESS (浠诲姟涓�)
+7 -> RETURNING (杩旂▼涓�)
+8,9 -> COMPLETED (宸插畬鎴�)
+10,13 -> CANCELLED (宸插彇娑�)
+
+璇︾粏璇存槑瑙�: com.ruoyi.system.utils.TaskStatusConverter
+*/
+
+-- ==========================================
+-- 鎵嬪姩瑙﹀彂娴嬭瘯
+-- ==========================================
+/*
+-- 鍦ㄥ畾鏃朵换鍔$鐞嗛〉闈㈡墜鍔ㄦ墽琛屼竴娆′换鍔★紝鎴栬�呭湪浠g爜涓皟鐢�:
+-- legacySystemSyncTask.syncTaskStatusFromLegacy()
+
+-- 鏌ョ湅鍚屾鏃ュ織锛堥渶瑕佹煡鐪嬪簲鐢ㄦ棩蹇楁枃浠讹級
+*/
diff --git a/sql/task_status_push_job.sql b/sql/task_status_push_job.sql
new file mode 100644
index 0000000..1f2b710
--- /dev/null
+++ b/sql/task_status_push_job.sql
@@ -0,0 +1,7 @@
+-- ----------------------------
+-- 浠诲姟鐘舵�佹帹閫佸畾鏃朵换鍔¢厤缃紙浠庢柊绯荤粺鎺ㄩ�佸埌鏃х郴缁燂級
+-- ----------------------------
+INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark)
+VALUES 
+('浠诲姟鐘舵�佹帹閫�', 'DEFAULT', 'legacySystemSyncTask.pushTaskStatusToLegacy()', '0 0/3 * * * ?', '3', '1', '1', 'admin', sysdate(), 'admin', sysdate(), 
+'姣�3鍒嗛挓鎵ц涓�娆★紝灏嗘柊绯荤粺涓姸鎬佸凡鍙樺寲鐨勪换鍔℃帹閫佸埌鏃х郴缁熴�傛帹閫佽鍒欙細鍑哄彂涓�->4锛屼换鍔′腑->6锛岃繑绋嬩腑->7锛屽凡瀹屾垚->8锛屽凡鍙栨秷->10銆傛棫绯荤粺鐘舵��>=鐩爣鐘舵�佹椂涓嶆帹閫併��');
diff --git a/sql/update_task_status_dict.sql b/sql/update_task_status_dict.sql
new file mode 100644
index 0000000..3712173
--- /dev/null
+++ b/sql/update_task_status_dict.sql
@@ -0,0 +1,72 @@
+-- ===================================================================
+-- 鏇存柊浠诲姟鐘舵�佸瓧鍏歌〃
+-- 
+-- 璇存槑锛氭坊鍔犺浆杩愪换鍔$殑瀹屾暣鐘舵�佹祦绋�
+-- PENDING -> DEPARTING -> ARRIVED -> RETURNING -> COMPLETED/CANCELLED
+-- ===================================================================
+
+-- 1. 鍏堝垹闄ゆ棫鐨勪换鍔$姸鎬佸瓧鍏告暟鎹�
+DELETE FROM sys_dict_data WHERE dict_type = 'sys_task_status';
+
+-- 2. 閲嶆柊鎻掑叆瀹屾暣鐨勪换鍔$姸鎬佸瓧鍏告暟鎹�
+-- ----------------------------
+-- 浠诲姟鐘舵�佸瓧鍏告暟鎹紙鎸夌姸鎬佹祦绋嬫帓搴忥級
+-- ----------------------------
+
+-- 寰呭鐞嗭紙鍒濆鐘舵�侊級
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
+VALUES(1, '寰呭鐞�', 'PENDING', 'sys_task_status', '', 'warning', 'N', '0', 'admin', SYSDATE(), '', NULL, '浠诲姟宸插垱寤猴紝绛夊緟鍑哄彂');
+
+-- 鍑哄彂涓�
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
+VALUES(2, '鍑哄彂涓�', 'DEPARTING', 'sys_task_status', '', 'primary', 'N', '0', 'admin', SYSDATE(), '', NULL, '浠诲姟宸插嚭鍙戯紝鍓嶅線鐩殑鍦�');
+
+-- 宸插埌杈�
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
+VALUES(3, '宸插埌杈�', 'ARRIVED', 'sys_task_status', '', 'primary', 'N', '0', 'admin', SYSDATE(), '', NULL, '宸插埌杈剧洰鐨勫湴');
+
+-- 杩旂▼涓�
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
+VALUES(4, '杩旂▼涓�', 'RETURNING', 'sys_task_status', '', 'primary', 'N', '0', 'admin', SYSDATE(), '', NULL, '浠诲姟杩旂▼涓�');
+
+-- 宸插畬鎴愶紙缁撴潫鐘舵�侊級
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
+VALUES(5, '宸插畬鎴�', 'COMPLETED', 'sys_task_status', '', 'success', 'N', '0', 'admin', SYSDATE(), '', NULL, '浠诲姟宸插畬鎴�');
+
+-- 宸插彇娑堬紙缁撴潫鐘舵�侊級
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
+VALUES(6, '宸插彇娑�', 'CANCELLED', 'sys_task_status', '', 'danger', 'N', '0', 'admin', SYSDATE(), '', NULL, '浠诲姟宸插彇娑�');
+
+-- 浠诲姟涓紙鍏煎鏃ф暟鎹級
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
+VALUES(7, '浠诲姟涓�', 'IN_PROGRESS', 'sys_task_status', '', 'primary', 'N', '0', 'admin', SYSDATE(), '', NULL, '浠诲姟鎵ц涓紙鍏煎鏃ф暟鎹級');
+
+-- ===================================================================
+-- 楠岃瘉鏌ヨ
+-- ===================================================================
+
+-- 鏌ョ湅鏇存柊鍚庣殑浠诲姟鐘舵�佸瓧鍏告暟鎹�
+SELECT 
+    dict_sort AS '鎺掑簭',
+    dict_label AS '鐘舵�佸悕绉�',
+    dict_value AS '鐘舵�佸��',
+    list_class AS '鏍峰紡',
+    remark AS '璇存槑'
+FROM sys_dict_data 
+WHERE dict_type = 'sys_task_status' 
+ORDER BY dict_sort;
+
+-- ===================================================================
+-- 浠诲姟鐘舵�佹祦绋嬭鏄�
+-- ===================================================================
+-- 
+-- 姝e父娴佺▼锛�
+-- PENDING锛堝緟澶勭悊锛�-> DEPARTING锛堝嚭鍙戜腑锛�-> ARRIVED锛堝凡鍒拌揪锛�-> RETURNING锛堣繑绋嬩腑锛�-> COMPLETED锛堝凡瀹屾垚锛�
+-- 
+-- 鍙栨秷娴佺▼锛�
+-- 浠讳綍鐘舵�侊紙COMPLETED闄ゅ锛�-> CANCELLED锛堝凡鍙栨秷锛�
+-- 
+-- 鍏煎鏃ф暟鎹細
+-- IN_PROGRESS锛堜换鍔′腑锛夊彲浠ヨ浆鎹负 COMPLETED銆丆ANCELLED 鎴� PENDING
+-- 
+-- ===================================================================

--
Gitblit v1.9.1