From a5b842f1f6ab32f1af39f4bcb7e45217e94db761 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 25 十月 2025 18:14:44 +0800
Subject: [PATCH] fix:完成任务状态,任务同步,高度同步等工作

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/IDepartmentSyncService.java                 |    4 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/DepartmentSyncTask.java                        |   13 
 旧系统车辆同步-README.md                                                                               |  159 
 sql/legacy_dispatch_sync_job.sql                                                                |  114 
 ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleSyncService.java                    |   25 
 app/pages/task/create-emergency.vue                                                             |  451 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/HospDataMapper.java                          |    3 
 prd/旧系统车辆同步-快速开始.md                                                                             |  278 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java                     |   26 
 prd/任务车辆默认显示功能说明.md                                                                             |  294 
 prd/百度地图距离计算-文件变更清单.md                                                                          |  348 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskAssignee.java                         |  101 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTask.java                                 |   11 
 prd/CHANGELOG-部门编码同步.md                                                                         |  235 
 sql/create_sys_task_assignee.sql                                                                |   22 
 prd/百度地图距离计算接口实现总结.md                                                                           |  482 +
 prd/急救转运医院ID字段添加说明.md                                                                           |  345 
 ruoyi-ui/src/views/system/dept/index.vue                                                        |   26 
 prd/部门编码同步功能说明.md                                                                               |  343 
 ruoyi-admin/src/main/resources/application.yml                                                  |    5 
 prd/执行人员assignee_id字段填充功能说明.md                                                                  |  338 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacyVehicleSyncTask.java                     |   63 
 app/pages/task/create-normal.vue                                                                |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskEmergencyMapper.java                  |   15 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleInfo.java                             |   13 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskAssigneeMapper.java                   |   77 
 prd/旧系统同步更新说明-v1.1.md                                                                           |  264 
 ruoyi-admin/src/main/resources/application-legacy.yml                                           |   52 
 ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml                             |   10 
 prd/部门编码功能总结-最终版.md                                                                             |  421 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java                        |   57 
 ruoyi-admin/src/main/resources/application-dev.yml                                              |   25 
 prd/旧系统车辆同步功能说明.md                                                                              |  346 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java               |   10 
 sql/add_legacy_dispatch_ord_id.sql                                                              |   22 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java                         |  120 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/OaSyncTask.java                                |   19 
 app/pages/mine/index.vue                                                                        |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java         |  113 
 prd/首页任务列表样式统一说明.md                                                                             |  184 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacySystemSyncTask.java                      |   83 
 prd/急救转运任务类型优化说明.md                                                                             |  208 
 prd/旧系统调度单同步功能说明.md                                                                             |  345 
 prd/用户显示名称统一使用昵称功能说明.md                                                                         |  254 
 prd/用户手机号唯一性完善说明.md                                                                             |  249 
 ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleSyncDataService.java                |   21 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java                        |  165 
 prd/部门编码同步-快速开始.md                                                                              |  182 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java             |  129 
 旧系统车辆同步功能开发总结.md                                                                                |  490 +
 app/api/map.js                                                                                  |   66 
 prd/转运时间写入planned_start_time功能说明.md                                                             |  485 +
 sql/add_department_id_fields.sql                                                                |   21 
 prd/OA用户ID字段支持说明.md                                                                             |  438 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java       |  966 ++
 ruoyi-system/src/main/resources/mapper/system/VehicleSyncMapper.xml                             |   26 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.java               |   50 
 prd/急救转运任务必填项校验完善.md                                                                            |  212 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java                |   62 
 oldCode                                                                                         |    1 
 prd/部门编码编辑-快速参考.md                                                                              |  183 
 prd/部门编码同步功能实现总结.md                                                                             |  371 
 sql/update_sys_task_emergency_add_disease_ids.sql                                               |   10 
 prd/首页任务列表样式优化说明.md                                                                             |  245 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java         |  114 
 prd/医院地域过滤功能说明.md                                                                               |  489 +
 prd/急救转运任务出发地目的地自动填充功能说明.md                                                                     |  568 +
 prd/部门编码编辑功能说明.md                                                                               |  372 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java |  150 
 prd/急救转运任务归属机构字段传递功能说明.md                                                                       |  282 
 prd/调度单执行人员同步功能说明.md                                                                            |  417 +
 ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.java                      |  105 
 ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml                        |   90 
 sql/sys_task_emergency.sql                                                                      |    3 
 ruoyi-ui/src/views/system/user/index.vue                                                        |    2 
 app/store/modules/user.js                                                                       |   15 
 prd/执行人员角色存储功能实现总结.md                                                                           |  523 +
 sql/add_legacy_system_id.sql                                                                    |   17 
 app/api/system/dept.js                                                                          |   37 
 prd/adminID参数修正说明.md                                                                            |  293 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleSyncController.java            |   37 
 prd/旧系统同步功能实现总结.md                                                                              |  436 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java               |    1 
 prd/旧系统同步配置说明.md                                                                                |  331 
 prd/归属机构动态加载功能说明.md                                                                             |  470 +
 app/api/dictionary.js                                                                           |   51 
 app/pages/index.vue                                                                             |  250 
 prd/任务车辆car_id和dept_id过滤说明.md                                                                   |  342 
 sql/add_dept_order_class_fields.sql                                                             |   18 
 sql/legacy_system_sync_job.sql                                                                  |   64 
 prd/百度地图距离计算-快速开始.md                                                                            |  215 
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java       |   18 
 prd/旧系统同步-快速开始.md                                                                               |  211 
 prd/急救转运科室ID字段功能说明.md                                                                           |  395 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncDataServiceImpl.java        |   68 
 prd/用户手机号唯一性-快速参考.md                                                                            |  106 
 prd/急救转运单据类型功能说明.md                                                                             |  347 
 prd/任务类型和单据类型默认选中功能说明.md                                                                        |  461 +
 prd/用户登录支持手机号-快速参考.md                                                                           |   86 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleSyncDTO.java                          |   59 
 .gitignore                                                                                      |    2 
 ruoyi-common/src/main/java/com/ruoyi/common/config/BaiduMapConfig.java                          |   25 
 app/pages/task/create-welfare.vue                                                               |    2 
 app/utils/constant.js                                                                           |    4 
 prd/部门编码映射表.md                                                                                  |  303 
 prd/病情选择列表存储功能说明.md                                                                             |  324 
 ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml                                 |   12 
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java              |   22 
 ruoyi-system/src/main/resources/mapper/system/SysTaskAssigneeMapper.xml                         |  102 
 prd/旧系统同步ServiceOrdAreaType参数优化说明.md                                                            |  307 
 prd/旧系统同步参数映射表.md                                                                               |  302 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java                           |   73 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java                        |    8 
 prd/病情ID列表同步旧系统功能实现总结.md                                                                        |  399 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java            |  307 
 prd/联系人必填和归属机构默认选中功能说明.md                                                                       |  541 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java               |   20 
 ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java                 |   57 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleSyncMapper.java                       |   24 
 sql/add_hospital_id_fields.sql                                                                  |   21 
 prd/用户登录支持手机号功能说明.md                                                                            |  181 
 app/pages/message/index.vue                                                                     |   43 
 ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml                              |   54 
 sql/add_document_type_to_emergency.sql                                                          |   10 
 prd/百度地图距离计算接口说明.md                                                                             |  485 +
 ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml                                |   14 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java                |   90 
 /dev/null                                                                                       |   87 
 ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml                                 |    3 
 app/api/hospital.js                                                                             |    8 
 prd/急救转运科室ID保存与同步说明.md                                                                          |  315 
 sql/legacy_vehicle_sync.sql                                                                     |   41 
 prd/部门编码功能完整实现报告.md                                                                             |  484 +
 133 files changed, 22,461 insertions(+), 354 deletions(-)

diff --git a/.gitignore b/.gitignore
index fc72bc7..3b67aa7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,7 @@
 
 target/
 !.mvn/wrapper/maven-wrapper.jar
-
+oldCode/
 ######################################################################
 # IDE
 
diff --git a/app/api/dictionary.js b/app/api/dictionary.js
new file mode 100644
index 0000000..3e264de
--- /dev/null
+++ b/app/api/dictionary.js
@@ -0,0 +1,51 @@
+import request from '@/utils/request'
+
+/**
+ * 鏌ヨ鍗曟嵁绫诲瀷鍒楄〃锛圫erviceOrdAreaType锛�
+ */
+export function getServiceOrdAreaTypes() {
+  return request({
+    url: '/sqlserver/dictionary/serviceOrdAreaTypes',
+    method: 'get'
+  })
+}
+
+/**
+ * 鏌ヨ鏈嶅姟鍗曠紪鐮佸垪琛�
+ */
+export function getServiceOrderClass() {
+  return request({
+    url: '/sqlserver/dictionary/serviceOrderClass',
+    method: 'get'
+  })
+}
+
+/**
+ * 鏌ヨ璋冨害鍗曠紪鐮佸垪琛�
+ */
+export function getDispatchOrderClass() {
+  return request({
+    url: '/sqlserver/dictionary/dispatchOrderClass',
+    method: 'get'
+  })
+}
+
+/**
+ * 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鍒楄〃锛圫erviceOrderType锛�
+ */
+export function getServiceOrderTypes() {
+  return request({
+    url: '/sqlserver/dictionary/serviceOrderTypes',
+    method: 'get'
+  })
+}
+
+/**
+ * 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛�
+ */
+export function getHospitalDepartments() {
+  return request({
+    url: '/sqlserver/dictionary/hospitalDepartments',
+    method: 'get'
+  })
+}
diff --git a/app/api/hospital.js b/app/api/hospital.js
index 0607054..d962fe7 100644
--- a/app/api/hospital.js
+++ b/app/api/hospital.js
@@ -2,14 +2,16 @@
 
 /**
  * 鎼滅储鍖婚櫌
- * @param {string} keyword 鎼滅储鍏抽敭璇嶏紙鍖婚櫌鍚嶇О鎴栧湴鍧�锛�
+ * @param {string} keyword 鎼滅储鍏抽敭璇嶏紙鍖婚櫌鍚嶇О銆佸湴鍧�銆佺畝绉般�佺渷甯傚尯锛�
+ * @param {string} region 鍦板煙鍏抽敭璇嶏紙鐢ㄤ簬杩囨护鐪佸競鍖猴級
  */
-export function searchHospitals(keyword) {
+export function searchHospitals(keyword, region) {
   return request({
     url: '/system/hospital/search',
     method: 'get',
     params: {
-      keyword: keyword
+      keyword: keyword,
+      region: region
     }
   })
 }
diff --git a/app/api/map.js b/app/api/map.js
index df91db0..ed85e5b 100644
--- a/app/api/map.js
+++ b/app/api/map.js
@@ -46,12 +46,12 @@
       fromLng === undefined || fromLng === null ||
       toLat === undefined || toLat === null ||
       toLng === undefined || toLng === null) {
-    return Promise.reject(new Error('鍙傛暟涓嶅畬鏁达紝缂哄皯璧风偣鎴栫粓鐐瑰潗鏍�'))
+    return Promise.reject(new Error('鍙傛暟涓嶅畬鏁�,缂哄皯璧风偣鎴栫粓鐐瑰潗鏍�'))
   }
   
   // 妫�鏌ュ弬鏁版湁鏁堟��
   if (isNaN(fromLat) || isNaN(fromLng) || isNaN(toLat) || isNaN(toLng)) {
-    return Promise.reject(new Error('鍙傛暟鏃犳晥锛屽潗鏍囨牸寮忛敊璇�'))
+    return Promise.reject(new Error('鍙傛暟鏃犳晥,鍧愭爣鏍煎紡閿欒'))
   }
   
   return request({
@@ -64,4 +64,66 @@
       toLng: toLng
     }
   })
+}
+
+// ==================== 鐧惧害鍦板浘鎺ュ彛 ====================
+
+// 鐧惧害鍦板浘鍦扮悊缂栫爜API锛堝湴鍧�杞潗鏍囷級
+export function baiduGeocoding(address, city) {
+  // 鍙傛暟楠岃瘉
+  if (!address) {
+    return Promise.reject(new Error('鍙傛暟涓嶅畬鏁�,缂哄皯鍦板潃淇℃伅'))
+  }
+  
+  return request({
+    url: '/system/gps/baidu/geocoding',
+    method: 'get',
+    params: {
+      address: address,
+      city: city
+    }
+  })
+}
+
+// 鐧惧害鍦板浘璺嚎瑙勫垝API锛堣绠椾袱涓潗鏍囦箣闂寸殑椹捐溅璺濈锛�
+export function baiduRouteDriving(origin, destination) {
+  // 鍙傛暟楠岃瘉
+  if (!origin || !destination) {
+    return Promise.reject(new Error('鍙傛暟涓嶅畬鏁�,缂哄皯璧风偣鎴栫粓鐐瑰潗鏍�'))
+  }
+  
+  // 楠岃瘉鍧愭爣鏍煎紡锛堢含搴�,缁忓害锛�
+  const originParts = origin.split(',')
+  const destParts = destination.split(',')
+  if (originParts.length !== 2 || destParts.length !== 2) {
+    return Promise.reject(new Error('鍧愭爣鏍煎紡閿欒,搴斾负:绾害,缁忓害'))
+  }
+  
+  return request({
+    url: '/system/gps/baidu/route/driving',
+    method: 'get',
+    params: {
+      origin: origin,
+      destination: destination
+    }
+  })
+}
+
+// 鐧惧害鍦板浘璁$畻涓や釜鍦板潃涔嬮棿鐨勮窛绂伙紙缁勫悎鎺ュ彛锛氬湴鍧�杞潗鏍� + 璺嚎瑙勫垝锛�
+export function baiduDistanceByAddress(fromAddress, fromCity, toAddress, toCity) {
+  // 鍙傛暟楠岃瘉
+  if (!fromAddress || !toAddress) {
+    return Promise.reject(new Error('鍙傛暟涓嶅畬鏁�,缂哄皯璧风偣鎴栫粓鐐瑰湴鍧�'))
+  }
+  
+  return request({
+    url: '/system/gps/baidu/distance/byAddress',
+    method: 'get',
+    params: {
+      fromAddress: fromAddress,
+      fromCity: fromCity,
+      toAddress: toAddress,
+      toCity: toCity
+    }
+  })
 }
\ No newline at end of file
diff --git a/app/api/system/dept.js b/app/api/system/dept.js
new file mode 100644
index 0000000..0c63430
--- /dev/null
+++ b/app/api/system/dept.js
@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+
+/**
+ * 鏌ヨ閮ㄩ棬鍒楄〃
+ * @param {Object} query 鏌ヨ鍙傛暟
+ */
+export function listDept(query) {
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: query
+  })
+}
+
+/**
+ * 鏌ヨ鍒嗗叕鍙稿垪琛紙parent_id=100鐨勯儴闂級
+ */
+export function listBranchCompany() {
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: {
+      parentId: 100
+    }
+  })
+}
+
+/**
+ * 鏌ヨ閮ㄩ棬璇︾粏
+ * @param {Number} deptId 閮ㄩ棬ID
+ */
+export function getDept(deptId) {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'get'
+  })
+}
diff --git a/app/pages/index.vue b/app/pages/index.vue
index 82ed65a..16b1513 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -4,16 +4,27 @@
     <view class="user-info-section">
       <view class="user-info-content">
         <view class="user-details">
-          <view class="user-name">{{ userName || '鏈櫥褰�' }}</view>
-          <view class="vehicle-info" @click="goToBindVehicle">
-            <text v-if="boundVehicle">鍏宠仈杞︾墝鍙凤細{{ boundVehicle }}</text>
-            <text v-else>鏈粦瀹氳溅鐗屽彿</text>
-            <uni-icons 
-              :type="boundVehicle ? 'loop' : 'plus-filled'" 
-              size="18" 
-              :color="boundVehicle ? '#007AFF' : '#999'"
-              style="margin-left: 8rpx;"
-            ></uni-icons>
+          <view class="user-info-row">
+            <text class="user-name">{{ userName || '鏈櫥褰�' }}</text>
+            <text class="separator" v-if="currentUser.branchCompanyName">|</text>
+            <view class="branch-company" v-if="currentUser.branchCompanyName">
+              <uni-icons type="location" size="16" color="#666" style="margin-right: 4rpx;"></uni-icons>
+              <text>{{ currentUser.branchCompanyName }}</text>
+            </view>
+            <text class="separator" v-if="boundVehicle">|</text>
+            <view class="vehicle-info" @click.stop="goToBindVehicle" v-if="boundVehicle">
+              <text>{{ boundVehicle }}</text>
+              <uni-icons 
+                type="loop" 
+                size="16" 
+                color="#007AFF"
+                style="margin-left: 4rpx;"
+              ></uni-icons>
+            </view>
+          </view>
+          <view class="bind-vehicle-btn" v-if="!boundVehicle" @click="goToBindVehicle">
+            <uni-icons type="plus-filled" size="16" color="#007AFF" style="margin-right: 4rpx;"></uni-icons>
+            <text>缁戝畾杞︾墝</text>
           </view>
         </view>
       </view>
@@ -41,18 +52,21 @@
       <view class="task-list">
         <view class="task-item" v-for="task in runningTasks" :key="task.id">
           <view class="task-main" @click="viewTaskDetail(task)">
-            <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
-            <view class="task-info">
-              <view class="info-row">
-                <view class="info-item">
-                  <view class="label">浠诲姟缂栧彿:</view>
-                  <view class="value">{{ task.taskNo }}</view>
-                </view>
-                <view class="info-item">
-                  <view class="label">浠诲姟鐘舵��:</view>
-                  <view class="value">{{ getStatusText(task.status) }}</view>
-                </view>
+            <!-- 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵�佹爣绛� -->
+            <view class="task-header">
+              <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
+              <view class="task-status" :class="getStatusClass(task.taskStatus)">
+                {{ getStatusText(task.status) }}
               </view>
+            </view>
+            
+            <!-- 浠诲姟缂栧彿鍗曠嫭涓�琛� -->
+            <view class="task-code-row">
+              <text class="task-code">{{ task.taskNo }}</text>
+            </view>
+            
+            <!-- 浠诲姟璇︾粏淇℃伅 -->
+            <view class="task-info">
               <view class="info-row">
                 <view class="info-item">
                   <view class="label">鍑哄彂鍦�:</view>
@@ -157,48 +171,7 @@
         boundVehicleId: null,
         
         // 娑堟伅鏁版嵁
-        messages: [
-          {
-            id: 1,
-            type: 'create', // 鍒涘缓鎴愬姛
-            content: 'TD 1011 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20 浠诲姟鍒涘缓鎴愬姛',
-            time: '2023-05-15 13:20',
-            read: false,
-            taskId: 1
-          },
-          {
-            id: 2,
-            type: 'push', // 浠诲姟鎺ㄩ��
-            content: 'TD1021 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20 鍑哄彂锛岃鍙婃椂澶勭悊',
-            time: '2023-05-15 13:25',
-            read: false,
-            taskId: 2
-          },
-          {
-            id: 3,
-            type: 'status', // 浠诲姟鐘舵�佸彉鏇�
-            content: 'TD1021 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20锛屼换鍔℃鍦ㄨ浆杩愪腑',
-            time: '2023-05-15 14:30',
-            read: true,
-            taskId: 2
-          },
-          {
-            id: 4,
-            type: 'create', // 鍒涘缓鎴愬姛
-            content: 'TD 1022 娣卞湷鍗楀北->娣卞湷绂忕敯锛屾椂闂达細15锛�10 浠诲姟鍒涘缓鎴愬姛',
-            time: '2023-05-15 15:10',
-            read: false,
-            taskId: 3
-          },
-          {
-            id: 5,
-            type: 'push', // 浠诲姟鎺ㄩ��
-            content: 'TD1023 娣卞湷鍗楀北->娣卞湷绂忕敯锛屾椂闂达細16锛�00 鍑哄彂锛岃鍙婃椂澶勭悊',
-            time: '2023-05-15 16:00',
-            read: true,
-            taskId: 4
-          }
-        ],
+        messages: [],
         
         // 姝e湪杩愯鐨勪换鍔″垪琛�
         taskList: [],
@@ -207,7 +180,7 @@
     },
     computed: {
       ...mapState({
-        userName: state => state.user.name,
+        userName: state => state.user.nickName,
         currentUser: state => state.user
       }),
       
@@ -505,6 +478,20 @@
         })
       },
       
+      // 鑾峰彇鐘舵�佹牱寮忕被
+      getStatusClass(status) {
+        const statusClassMap = {
+          'PENDING': 'status-pending',
+          'DEPARTING': 'status-departing',
+          'ARRIVED': 'status-arrived',
+          'RETURNING': 'status-returning',
+          'COMPLETED': 'status-completed',
+          'CANCELLED': 'status-cancelled',
+          'IN_PROGRESS': 'status-in-progress'
+        }
+        return statusClassMap[status] || 'status-default'
+      },
+      
       getStatusText(status) {
         // 鏀寔鏂版棫涓ょ鐘舵�佹牸寮�
         const statusMap = {
@@ -588,19 +575,44 @@
       .user-details {
         flex: 1;
         
-        .user-name {
-          font-size: 36rpx;
-          font-weight: bold;
-          margin-bottom: 10rpx;
-          color: #333;
-        }
-        
-        .vehicle-info {
-          font-size: 28rpx;
-          color: #666;
+        .user-info-row {
           display: flex;
           align-items: center;
-          cursor: pointer;
+          flex-wrap: wrap;
+          margin-bottom: 12rpx;
+          
+          .user-name {
+            font-size: 32rpx;
+            font-weight: bold;
+            color: #333;
+          }
+          
+          .separator {
+            margin: 0 12rpx;
+            color: #ddd;
+            font-size: 28rpx;
+          }
+          
+          .branch-company {
+            font-size: 26rpx;
+            color: #666;
+            display: flex;
+            align-items: center;
+          }
+          
+          .vehicle-info {
+            font-size: 26rpx;
+            color: #007AFF;
+            display: flex;
+            align-items: center;
+          }
+        }
+        
+        .bind-vehicle-btn {
+          font-size: 26rpx;
+          color: #007AFF;
+          display: flex;
+          align-items: center;
           
           &:active {
             opacity: 0.7;
@@ -699,10 +711,90 @@
           padding: 30rpx;
           border-bottom: 1rpx solid #f0f0f0;
           
-          .task-title {
-            font-size: 32rpx;
-            font-weight: bold;
-            margin-bottom: 20rpx;
+          // 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵��
+          .task-header {
+            display: flex;
+            justify-content: space-between;
+            align-items: flex-start;
+            margin-bottom: 15rpx;
+            
+            .task-title {
+              flex: 1;
+              font-size: 32rpx;
+              font-weight: bold;
+              padding-right: 20rpx;
+              line-height: 1.4;
+            }
+            
+            .task-status {
+              padding: 8rpx 20rpx;
+              border-radius: 30rpx;
+              font-size: 24rpx;
+              white-space: nowrap;
+              flex-shrink: 0;
+              
+              // 寰呭鐞� - 姗欒壊
+              &.status-pending {
+                background-color: #fff3e0;
+                color: #ff9500;
+              }
+              
+              // 鍑哄彂涓� - 钃濊壊
+              &.status-departing {
+                background-color: #e3f2fd;
+                color: #007AFF;
+              }
+              
+              // 宸插埌杈� - 绱壊
+              &.status-arrived {
+                background-color: #f3e5f5;
+                color: #9c27b0;
+              }
+              
+              // 杩旂▼涓� - 闈掕壊
+              &.status-returning {
+                background-color: #e0f2f1;
+                color: #009688;
+              }
+              
+              // 宸插畬鎴� - 缁胯壊
+              &.status-completed {
+                background-color: #e8f5e9;
+                color: #34C759;
+              }
+              
+              // 宸插彇娑� - 鐏拌壊
+              &.status-cancelled {
+                background-color: #f5f5f5;
+                color: #999;
+              }
+              
+              // 澶勭悊涓� (鍏煎鏃ф暟鎹�) - 钃濊壊
+              &.status-in-progress {
+                background-color: #e3f2fd;
+                color: #007AFF;
+              }
+              
+              // 榛樿鏍峰紡
+              &.status-default {
+                background-color: #f5f5f5;
+                color: #666;
+              }
+            }
+          }
+          
+          // 浠诲姟缂栧彿鍗曠嫭涓�琛�
+          .task-code-row {
+            margin-bottom: 15rpx;
+            padding: 10rpx 0;
+            border-bottom: 1rpx dashed #e0e0e0;
+            
+            .task-code {
+              font-size: 28rpx;
+              color: #333;
+              font-weight: 500;
+              font-family: monospace;
+            }
           }
           
           .task-info {
diff --git a/app/pages/message/index.vue b/app/pages/message/index.vue
index 2aaa9e5..113b7f9 100644
--- a/app/pages/message/index.vue
+++ b/app/pages/message/index.vue
@@ -37,48 +37,7 @@
     data() {
       return {
         // 娑堟伅鍒楄〃
-        messages: [
-          {
-            id: 1,
-            type: 'create', // 鍒涘缓鎴愬姛
-            content: 'TD 1011 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20 浠诲姟鍒涘缓鎴愬姛',
-            time: '2023-05-15 13:20',
-            read: false,
-            taskId: 1
-          },
-          {
-            id: 2,
-            type: 'push', // 浠诲姟鎺ㄩ��
-            content: 'TD1021 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20 鍑哄彂锛岃鍙婃椂澶勭悊',
-            time: '2023-05-15 13:25',
-            read: false,
-            taskId: 2
-          },
-          {
-            id: 3,
-            type: 'status', // 浠诲姟鐘舵�佸彉鏇�
-            content: 'TD1021 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20锛屼换鍔℃鍦ㄨ浆杩愪腑',
-            time: '2023-05-15 14:30',
-            read: true,
-            taskId: 2
-          },
-          {
-            id: 4,
-            type: 'create', // 鍒涘缓鎴愬姛
-            content: 'TD 1022 娣卞湷鍗楀北->娣卞湷绂忕敯锛屾椂闂达細15锛�10 浠诲姟鍒涘缓鎴愬姛',
-            time: '2023-05-15 15:10',
-            read: false,
-            taskId: 3
-          },
-          {
-            id: 5,
-            type: 'push', // 浠诲姟鎺ㄩ��
-            content: 'TD1023 娣卞湷鍗楀北->娣卞湷绂忕敯锛屾椂闂达細16锛�00 鍑哄彂锛岃鍙婃椂澶勭悊',
-            time: '2023-05-15 16:00',
-            read: true,
-            taskId: 4
-          }
-        ]
+        messages: []
       }
     },
     computed: {
diff --git a/app/pages/mine/index.vue b/app/pages/mine/index.vue
index 6ee6073..a4d3aba 100644
--- a/app/pages/mine/index.vue
+++ b/app/pages/mine/index.vue
@@ -111,7 +111,7 @@
   export default {
     data() {
       return {
-        name: this.$store.state.user.name,
+        name: this.$store.state.user.nickName,
         phonenumber: '',
         boundVehicle: '', // 缁戝畾鐨勮溅杈嗕俊鎭�
         boundVehicleId: null, // 缁戝畾鐨勮溅杈咺D
@@ -141,7 +141,7 @@
           this.phonenumber = user.phonenumber
         }).catch(() => {
           // 鑾峰彇鐢ㄦ埛淇℃伅澶辫触鏃朵娇鐢ㄩ粯璁ゅ��
-          this.name = this.$store.state.user.name || '鏈櫥褰�'
+          this.name = this.$store.state.user.nickName || '鏈櫥褰�'
           this.phonenumber = '鏈粦瀹�'
         })
         
diff --git a/app/pages/task/create-emergency.vue b/app/pages/task/create-emergency.vue
index df6c704..1810257 100644
--- a/app/pages/task/create-emergency.vue
+++ b/app/pages/task/create-emergency.vue
@@ -9,22 +9,50 @@
     
     <view class="form-section">
       <view class="form-item">
-        <view class="form-label">浠诲姟杞﹁締</view>
-        <picker mode="selector" :range="vehicles" @change="onVehicleChange">
+        <view class="form-label required">浠诲姟杞﹁締</view>
+        <picker mode="selector" :range="vehicles" :value="selectedVehicleIndex" @change="onVehicleChange">
           <view class="form-input picker-input">
             {{ selectedVehicle || '璇烽�夋嫨浠诲姟杞﹁締' }}
             <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
           </view>
         </picker>
       </view>
+        <view class="form-item">
+        <view class="form-label">褰掑睘鏈烘瀯</view>
+        <picker mode="selector" :range="organizations" @change="onOrganizationChange">
+          <view class="form-input picker-input">
+            {{ selectedOrganization || '璇烽�夋嫨褰掑睘鏈烘瀯' }}
+            <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+          </view>
+        </picker>
+      </view>
       
+      <view class="form-item">
+        <view class="form-label required">浠诲姟绫诲瀷</view>
+        <picker mode="selector" :range="emergencyTaskTypeOptions" range-key="text" @change="onEmergencyTaskTypeChange">
+          <view class="form-input picker-input">
+            {{ selectedEmergencyTaskType || '璇烽�夋嫨浠诲姟绫诲瀷' }}
+            <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+          </view>
+        </picker>
+      </view>
+      
+      <view class="form-item">
+        <view class="form-label required">鍗曟嵁绫诲瀷</view>
+        <picker mode="selector" :range="documentTypeOptions" range-key="text" @change="onDocumentTypeChange">
+          <view class="form-input picker-input">
+            {{ selectedDocumentType || '璇烽�夋嫨鍗曟嵁绫诲瀷' }}
+            <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+          </view>
+        </picker>
+      </view>
       <view class="form-item">
         <view class="form-label">鎵ц浠诲姟浜哄憳</view>
         <view class="staff-list">
           <view class="staff-item" v-for="(staff, index) in selectedStaff" :key="staff.userId">
             <view class="staff-info">
               <text class="staff-name">{{ staff.nickName }}</text>
-              <text class="staff-role">({{ staff.postName || staff.roleName || '鏈煡鑱屼綅' }})</text>
+              <text class="staff-role">({{ getUserTypeName(staff.type) || '鏈煡鑱屼綅' }})</text>
             </view>
             <uni-icons 
               v-if="index > 0" 
@@ -47,25 +75,7 @@
         </view>
       </view>
       
-      <view class="form-item">
-        <view class="form-label">褰掑睘鏈烘瀯</view>
-        <picker mode="selector" :range="organizations" @change="onOrganizationChange">
-          <view class="form-input picker-input">
-            {{ selectedOrganization || '璇烽�夋嫨褰掑睘鏈烘瀯' }}
-            <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
-          </view>
-        </picker>
-      </view>
-      
-      <view class="form-item">
-        <view class="form-label">浠诲姟绫诲瀷</view>
-        <picker mode="selector" :range="emergencyTaskTypes" @change="onEmergencyTaskTypeChange">
-          <view class="form-input picker-input">
-            {{ selectedEmergencyTaskType || '璇烽�夋嫨浠诲姟绫诲瀷' }}
-            <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
-          </view>
-        </picker>
-      </view>
+    
       
       <view class="form-item">
         <view class="form-label">杞繍鏃堕棿</view>
@@ -79,7 +89,7 @@
       
       <view class="form-section-title">鎮h�呬俊鎭�</view>
       <view class="form-item">
-        <view class="form-label">鑱旂郴浜�</view>
+        <view class="form-label required">鑱旂郴浜�</view>
         <input 
           class="form-input" 
           placeholder="璇疯緭鍏ヨ仈绯讳汉" 
@@ -88,7 +98,7 @@
       </view>
       
       <view class="form-item">
-        <view class="form-label">鑱旂郴鐢佃瘽</view>
+        <view class="form-label required">鑱旂郴鐢佃瘽</view>
         <input 
           class="form-input" 
           type="number" 
@@ -98,7 +108,7 @@
       </view>
       
       <view class="form-item">
-        <view class="form-label">鎮h�呭鍚�</view>
+        <view class="form-label required">鎮h�呭鍚�</view>
         <input 
           class="form-input" 
           placeholder="璇疯緭鍏ユ偅鑰呭鍚�" 
@@ -163,7 +173,7 @@
       
       <view class="form-section-title">杞嚭鍖婚櫌淇℃伅</view>
       <view class="form-item">
-        <view class="form-label">鍖婚櫌鍚嶇О</view>
+        <view class="form-label required">鍖婚櫌鍚嶇О</view>
         <view class="hospital-search-container">
           <input 
             class="form-input" 
@@ -180,15 +190,15 @@
               @click="selectHospitalOut(hospital)"
             >
               <view class="hospital-name">{{ hospital.hospName }}</view>
-              <view class="hospital-address">{{ hospital.hospAddress }}</view>
+              <view class="hospital-address">{{ buildFullAddress(hospital) }}</view>
             </view>
           </view>
         </view>
       </view>
       
       <view class="form-item">
-        <view class="form-label">绉戝</view>
-        <picker mode="selector" :range="departmentOptions" range-key="dictLabel" @change="onHospitalOutDepartmentChange">
+        <view class="form-label required">绉戝</view>
+        <picker mode="selector" :range="departmentOptions" range-key="text" @change="onHospitalOutDepartmentChange">
           <view class="form-input picker-input">
             {{ taskForm.hospitalOut.department || '璇烽�夋嫨绉戝' }}
             <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
@@ -214,7 +224,7 @@
       
       <view class="form-section-title">杞叆鍖婚櫌淇℃伅</view>
       <view class="form-item">
-        <view class="form-label">鍖婚櫌鍚嶇О</view>
+        <view class="form-label required">鍖婚櫌鍚嶇О</view>
         <view class="hospital-search-container">
           <input 
             class="form-input" 
@@ -231,15 +241,15 @@
               @click="selectHospitalIn(hospital)"
             >
               <view class="hospital-name">{{ hospital.hospName }}</view>
-              <view class="hospital-address">{{ hospital.hospAddress }}</view>
+              <view class="hospital-address">{{ buildFullAddress(hospital) }}</view>
             </view>
           </view>
         </view>
       </view>
       
       <view class="form-item">
-        <view class="form-label">绉戝</view>
-        <picker mode="selector" :range="departmentOptions" range-key="dictLabel" @change="onHospitalInDepartmentChange">
+        <view class="form-label required">绉戝</view>
+        <picker mode="selector" :range="departmentOptions" range-key="text" @change="onHospitalInDepartmentChange">
           <view class="form-input picker-input">
             {{ taskForm.hospitalIn.department || '璇烽�夋嫨绉戝' }}
             <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
@@ -313,14 +323,14 @@
         <view class="staff-filter">
           <view 
             class="filter-item" 
-            :class="{ active: staffFilterType === 'all' }"
-            @click="filterStaff('all')"
-          >鍏ㄩ儴</view>
-          <view 
-            class="filter-item" 
             :class="{ active: staffFilterType === 'driver' }"
             @click="filterStaff('driver')"
           >鍙告満</view>
+          <view 
+            class="filter-item" 
+            :class="{ active: staffFilterType === 'doctor' }"
+            @click="filterStaff('doctor')"
+          >鍖荤敓</view>
           <view 
             class="filter-item" 
             :class="{ active: staffFilterType === 'nurse' }"
@@ -342,7 +352,7 @@
               </view>
               <view class="staff-detail-row">
                 <text class="staff-dept">{{ staff.deptName }}</text>
-                <text class="staff-post">{{ staff.postName || staff.roleName || '鏈煡鑱屼綅' }}</text>
+                <text class="staff-post">{{ staff.postName || staff.roleName  || '鏈煡鑱屼綅' }}</text>
               </view>
             </view>
             <uni-icons 
@@ -437,8 +447,10 @@
 import { searchHospitals } from "@/api/hospital"
 import { listUser } from "@/api/system/user"
 import { searchIcd10 } from "@/api/icd10"
-import { getUserProfile } from "@/api/system/user"
+
 import { getDicts } from "@/api/dict"
+import { getServiceOrdAreaTypes, getServiceOrderTypes, getHospitalDepartments } from "@/api/dictionary"
+import { listBranchCompany } from "@/api/system/dept"
 import MapSelector from '@/components/map-selector.vue'
 
 export default {
@@ -452,7 +464,12 @@
       selectedVehicle: '',
       selectedVehicleId: null,
       selectedOrganization: '',
-      selectedEmergencyTaskType: '',
+      selectedOrganizationId: null, // 褰掑睘鏈烘瀯ID锛堥儴闂↖D锛�
+      selectedRegion: '', // 浠庡綊灞炴満鏋勪腑鎻愬彇鐨勫湴鍩熶俊鎭紙濡傦細骞垮窞銆佹繁鍦崇瓑锛�
+      selectedEmergencyTaskType: '', // 閫変腑鐨勪换鍔$被鍨嬫枃鏈�
+      selectedEmergencyTaskTypeId: null, // 閫変腑鐨勪换鍔$被鍨婭D
+      selectedDocumentType: '', // 閫変腑鐨勫崟鎹被鍨嬫枃鏈�
+      selectedDocumentTypeId: null, // 閫変腑鐨勫崟鎹被鍨婭D
       mapSelectorType: '',
       // 鍖婚櫌鎼滅储鐩稿叧
       hospitalOutSearchKeyword: '',
@@ -468,7 +485,7 @@
       allStaffList: [], // 鎵�鏈変汉鍛樺垪琛�
       filteredStaffList: [], // 杩囨护鍚庣殑浜哄憳鍒楄〃
       staffSearchKeyword: '', // 浜哄憳鎼滅储鍏抽敭璇�
-      staffFilterType: 'all', // 浜哄憳绛涢�夌被鍨嬶細all/driver/nurse
+      staffFilterType: 'driver', // 浜哄憳绛涢�夌被鍨嬶細driver/doctor/nurse锛岄粯璁ら�変腑鍙告満
       // 鐥呮儏閫夋嫨鐩稿叧
       selectedDiseases: [], // 宸查�夋嫨鐨勭梾鎯呭垪琛�
       tempSelectedDiseases: [], // 涓存椂閫夋嫨鐨勭梾鎯呭垪琛紙鐢ㄤ簬寮圭獥锛�
@@ -486,14 +503,18 @@
           condition: ''
         },
         hospitalOut: {
+          id: null,  // 鍖婚櫌ID
           name: '',
           department: '',
+          departmentId: null,  // 绉戝ID
           bedNumber: '',
           address: ''
         },
         hospitalIn: {
+          id: null,  // 鍖婚櫌ID
           name: '',
           department: '',
+          departmentId: null,  // 绉戝ID
           bedNumber: '',
           address: ''
         },
@@ -502,8 +523,12 @@
       },
       vehicles: [],
       vehicleOptions: [],
-      organizations: ['骞垮窞鍒嗗叕鍙�', '娣卞湷鍒嗗叕鍙�', '鐝犳捣鍒嗗叕鍙�', '浣涘北鍒嗗叕鍙�'],
-      emergencyTaskTypes: ['鎬ユ晳杞繍', '鑸┖杞繍'],
+      organizations: [], // 褰掑睘鏈烘瀯鍒楄〃锛堜粠鍚庡彴鍔犺浇鍒嗗叕鍙告暟鎹級
+      organizationOptions: [], // 褰掑睘鏈烘瀯閫夐」锛堢敤浜巔icker鏄剧ず锛�
+      emergencyTaskTypes: [], // 浠诲姟绫诲瀷鍒楄〃锛堜粠 SQL Server 鍔ㄦ�佸姞杞斤級
+      emergencyTaskTypeOptions: [], // 浠诲姟绫诲瀷閫夐」锛堢敤浜巔icker鏄剧ず锛�
+      documentTypes: [], // 鍗曟嵁绫诲瀷鍒楄〃
+      documentTypeOptions: [], // 鍗曟嵁绫诲瀷閫夐」锛堢敤浜巔icker鏄剧ず锛�
       departmentOptions: [], // 绉戝瀛楀吀鏁版嵁
       loading: false,
       addressCoordinates: {
@@ -516,15 +541,23 @@
     ...mapState({
       currentUser: state => ({
         userId: state.user.userId,
-        name: state.user.name || '寮犱笁',
-        nickName: state.user.nickName || state.user.name || '寮犱笁',
+        name: state.user.nickName || '寮犱笁',
+        nickName: state.user.nickName || '寮犱笁',
         position: '鍙告満',
         deptId: state.user.deptId || 100,
         phonenumber: state.user.phonenumber || '',
         branchCompanyId: state.user.branchCompanyId,
         branchCompanyName: state.user.branchCompanyName
       })
-    })
+    }),
+    // 璁$畻杞﹁締鍦╬icker涓殑绱㈠紩锛岀敤浜庨粯璁ら�変腑
+    selectedVehicleIndex() {
+      if (!this.selectedVehicle || this.vehicles.length === 0) {
+        return 0
+      }
+      const index = this.vehicles.findIndex(v => v === this.selectedVehicle)
+      return index !== -1 ? index : 0
+    }
   },
   onLoad(options) {
     // 鍏堝姞杞借溅杈嗗垪琛紝鐒跺悗鍔犺浇缁戝畾杞﹁締淇℃伅
@@ -533,23 +566,32 @@
     })
     this.initSelectedStaff()
     this.loadDeptStaff()
-    // 璁剧疆榛樿褰掑睘鏈烘瀯
-    if (this.currentUser.branchCompanyName) {
-      this.selectedOrganization = this.currentUser.branchCompanyName
-    }
-    // 鍔犺浇榛樿鍖婚櫌鍒楄〃锛堝墠100鏉★級
-    this.loadDefaultHospitals()
+    // 鍔犺浇鍒嗗叕鍙告暟鎹紙浼氳嚜鍔ㄨ缃粯璁ゅ垎鍏徃骞跺姞杞藉尰闄㈠垪琛級
+    this.loadBranchCompanies()
     // 鍔犺浇绉戝瀛楀吀鏁版嵁
     this.loadDepartments()
+    // 鍔犺浇浠诲姟绫诲瀷鏁版嵁
+    this.loadEmergencyTaskTypes()
+    // 鍔犺浇鍗曟嵁绫诲瀷鏁版嵁
+    this.loadDocumentTypes()
   },
   methods: {
     // 鑾峰彇鐢ㄦ埛缁戝畾鐨勮溅杈嗕俊鎭�
     getUserBoundVehicleInfo() {
-      getUserProfile().then(response => {
-        const userInfo = response.data || response
-        if (userInfo.boundVehicle) {
-          const boundVehicleNo = userInfo.boundVehicle.vehicleNumber
-          const boundVehicleId = userInfo.boundVehicle.vehicleId
+      const userId = this.currentUser.userId
+      if (!userId) {
+        console.warn('鐢ㄦ埛ID涓嶅瓨鍦紝鏃犳硶鑾峰彇缁戝畾杞﹁締')
+        return
+      }
+      
+      getUserBoundVehicle(userId).then(response => {
+        const boundVehicle = response.data
+        
+        if (boundVehicle && boundVehicle.vehicleId) {
+          const boundVehicleNo = boundVehicle.vehicleNo
+          const boundVehicleId = boundVehicle.vehicleId
+          
+          console.log('鐢ㄦ埛缁戝畾鐨勮溅杈�:', boundVehicleNo, 'ID:', boundVehicleId)
           
           // 鍦ㄨ溅杈嗗垪琛ㄤ腑鏌ユ壘缁戝畾鐨勮溅杈�
           const vehicleIndex = this.vehicleOptions.findIndex(v => 
@@ -560,7 +602,12 @@
             // 璁剧疆榛樿閫変腑鐨勮溅杈�
             this.selectedVehicle = this.vehicleOptions[vehicleIndex].name
             this.selectedVehicleId = this.vehicleOptions[vehicleIndex].id
+            console.log('榛樿閫変腑杞﹁締:', this.selectedVehicle)
+          } else {
+            console.warn('缁戝畾鐨勮溅杈嗕笉鍦ㄥ彲鐢ㄨ溅杈嗗垪琛ㄤ腑')
           }
+        } else {
+          console.log('鐢ㄦ埛鏈粦瀹氳溅杈�')
         }
       }).catch(error => {
         console.error('鑾峰彇鐢ㄦ埛缁戝畾杞﹁締淇℃伅澶辫触:', error)
@@ -590,45 +637,164 @@
     },
     
     onOrganizationChange(e) {
-      this.selectedOrganization = this.organizations[e.detail.value]
+      const index = e.detail.value
+      const selected = this.organizationOptions[index]
+      this.selectedOrganization = selected.deptName
+      this.selectedOrganizationId = selected.deptId // 淇濆瓨閮ㄩ棬ID
+      // 浠庡綊灞炴満鏋勪腑鎻愬彇鍦板煙鍏抽敭璇嶏紙鍘婚櫎"鍒嗗叕鍙�"鍚庣紑锛�
+      // 渚嬪锛�"骞垮窞鍒嗗叕鍙�" -> "骞垮窞"
+      this.selectedRegion = selected.deptName.replace(/鍒嗗叕鍙�$/g, '').trim()
+      // 閲嶆柊鍔犺浇鍖婚櫌鍒楄〃锛堝甫鍦板煙杩囨护锛�
+      this.loadDefaultHospitals()
     },
     
-    onEmergencyTaskTypeChange(e) {
-      this.selectedEmergencyTaskType = this.emergencyTaskTypes[e.detail.value]
-    },
-    
-    // 鍔犺浇绉戝瀛楀吀鏁版嵁
-    loadDepartments() {
-      getDicts('hospital_department').then(response => {
-        this.departmentOptions = response.data || []
+    // 鍔犺浇鍒嗗叕鍙告暟鎹紙parent_id=100鐨勯儴闂級
+    loadBranchCompanies() {
+      listBranchCompany().then(response => {
+        const list = response.data || []
+        // 杩囨护鍑� parent_id = 100 鐨勯儴闂紙鍒嗗叕鍙革級
+        this.organizationOptions = list.filter(dept => dept.parentId === 100)
+        // 鐢熸垚picker鐨勬暟鎹簮锛堝彧鏄剧ず鍚嶇О锛�
+        this.organizations = this.organizationOptions.map(dept => dept.deptName)
+        
+        // 榛樿璁剧疆涓哄綋鍓嶇敤鎴风殑鍒嗗叕鍙�
+        if (this.currentUser.branchCompanyName) {
+          const index = this.organizationOptions.findIndex(
+            dept => dept.deptName === this.currentUser.branchCompanyName
+          )
+          if (index !== -1) {
+            this.selectedOrganization = this.currentUser.branchCompanyName
+            this.selectedOrganizationId = this.organizationOptions[index].deptId // 淇濆瓨閮ㄩ棬ID
+            // 鎻愬彇鍦板煙鍏抽敭璇�
+            this.selectedRegion = this.selectedOrganization.replace(/鍒嗗叕鍙�$/g, '').trim()
+            console.log('榛樿閫変腑褰掑睘鏈烘瀯:', this.selectedOrganization, '閮ㄩ棬ID:', this.selectedOrganizationId, '鍦板煙:', this.selectedRegion)
+            // 鍔犺浇鍖婚櫌鍒楄〃锛堝甫鍦板煙杩囨护锛�
+            this.loadDefaultHospitals()
+          }
+        }
       }).catch(error => {
-        console.error('鍔犺浇绉戝瀛楀吀澶辫触:', error)
+        console.error('鍔犺浇鍒嗗叕鍙告暟鎹け璐�:', error)
+        this.organizationOptions = []
+        this.organizations = []
+      })
+    },
+    
+    // 鍔犺浇绉戝鏁版嵁锛堜粠 SQL Server 鍔ㄦ�佸姞杞斤級
+    loadDepartments() {
+      getHospitalDepartments().then(response => {
+        const list = response.data || [];
+        this.departmentOptions = list.map(item => ({
+          id: item.vID,
+          text: item.vtext,
+          dictValue: item.vtext  // 涓轰簡淇濇寔鍏煎鎬э紝淇濈暀dictValue瀛楁
+        }));
+        // console.log('绉戝鏁版嵁鍔犺浇鎴愬姛:', this.departmentOptions);
+      }).catch(error => {
+        console.error('鍔犺浇绉戝鏁版嵁澶辫触:', error)
         this.departmentOptions = []
       })
+    },
+    
+    // 鍔犺浇浠诲姟绫诲瀷鏁版嵁锛堜粠 SQL Server锛�
+    loadEmergencyTaskTypes() {
+      getServiceOrderTypes().then(response => {
+        const list = response.data || []
+        this.emergencyTaskTypes = list
+        this.emergencyTaskTypeOptions = list.map(item => ({
+          id: item.vID,
+          text: item.vtext
+        }))
+        
+        // 榛樿閫変腑绗竴涓换鍔$被鍨�
+        if (this.emergencyTaskTypeOptions.length > 0) {
+          this.selectedEmergencyTaskType = this.emergencyTaskTypeOptions[0].text
+          this.selectedEmergencyTaskTypeId = this.emergencyTaskTypeOptions[0].id
+          console.log('榛樿閫変腑浠诲姟绫诲瀷:', this.selectedEmergencyTaskType)
+        }
+      }).catch(error => {
+        console.error('鍔犺浇浠诲姟绫诲瀷澶辫触:', error)
+        this.emergencyTaskTypes = []
+        this.emergencyTaskTypeOptions = []
+      })
+    },
+    
+    // 浠诲姟绫诲瀷閫夋嫨
+    onEmergencyTaskTypeChange(e) {
+      const index = e.detail.value
+      const selected = this.emergencyTaskTypeOptions[index]
+      this.selectedEmergencyTaskType = selected.text
+      this.selectedEmergencyTaskTypeId = selected.id
+    },
+    getUserTypeName(staffType){
+      switch(staffType){
+        case "nurse":
+          return "鎶ゅ+";
+        case "doctor":
+          return "鍖荤敓";
+        case "driver":
+          return "鍙告満";
+        default:
+          return "鍙告満";
+      }
+    },
+    
+    // 鍔犺浇鍗曟嵁绫诲瀷鏁版嵁
+    loadDocumentTypes() {
+      getServiceOrdAreaTypes().then(response => {
+        const list = response.data || []
+        this.documentTypes = list
+        this.documentTypeOptions = list.map(item => ({
+          id: item.vID,
+          text: item.vtext
+        }))
+        
+        // 榛樿閫変腑绗竴涓崟鎹被鍨�
+        if (this.documentTypeOptions.length > 0) {
+          this.selectedDocumentType = this.documentTypeOptions[0].text
+          this.selectedDocumentTypeId = this.documentTypeOptions[0].id
+          console.log('榛樿閫変腑鍗曟嵁绫诲瀷:', this.selectedDocumentType)
+        }
+      }).catch(error => {
+        console.error('鍔犺浇鍗曟嵁绫诲瀷澶辫触:', error)
+        this.documentTypes = []
+        this.documentTypeOptions = []
+      })
+    },
+    
+    // 鍗曟嵁绫诲瀷閫夋嫨
+    onDocumentTypeChange(e) {
+      const index = e.detail.value
+      const selected = this.documentTypeOptions[index]
+      this.selectedDocumentType = selected.text
+      this.selectedDocumentTypeId = selected.id
     },
     
     // 杞嚭鍖婚櫌绉戝閫夋嫨
     onHospitalOutDepartmentChange(e) {
       const index = e.detail.value
-      this.taskForm.hospitalOut.department = this.departmentOptions[index].dictValue
+      const selected = this.departmentOptions[index]
+      this.taskForm.hospitalOut.department = selected.text  // 淇濆瓨绉戝鍚嶇О
+      this.taskForm.hospitalOut.departmentId = selected.id  // 淇濆瓨绉戝ID
     },
     
     // 杞叆鍖婚櫌绉戝閫夋嫨
     onHospitalInDepartmentChange(e) {
       const index = e.detail.value
-      this.taskForm.hospitalIn.department = this.departmentOptions[index].dictValue
+      const selected = this.departmentOptions[index]
+      this.taskForm.hospitalIn.department = selected.text  // 淇濆瓨绉戝鍚嶇О
+      this.taskForm.hospitalIn.departmentId = selected.id  // 淇濆瓨绉戝ID
     },
     
-    // 鍔犺浇榛樿鍖婚櫌鍒楄〃锛堝墠100鏉★級
+    // 鍔犺浇榛樿鍖洪櫌鍒楄〃锛堝墠100鏉★級
     loadDefaultHospitals() {
-      // 浼犲叆绌哄瓧绗︿覆鎴栫壒娈婃爣璇嗚幏鍙栧墠100鏉�
-      searchHospitals('').then(response => {
+      // 浼犲叆绌哄瓧绗︿覆鎴栫壒娈婃爣璇嗚幏鍙栧墠100鏉★紝鍚屾椂浼犲叆鍦板煙杩囨护
+      searchHospitals('', this.selectedRegion).then(response => {
         this.defaultHospitals = response.data || []
         // 鍚屾椂鍒濆鍖栦袱涓悳绱㈢粨鏋滀负榛樿鏁版嵁
         this.hospitalOutResults = [...this.defaultHospitals]
         this.hospitalInResults = [...this.defaultHospitals]
       }).catch(error => {
-        console.error('鍔犺浇榛樿鍖婚櫌鍒楄〃澶辫触:', error)
+        console.error('鍔犺浇榛樿鍖洪櫌鍒楄〃澶辫触:', error)
         this.defaultHospitals = []
       })
     },
@@ -667,7 +833,8 @@
     
     // 鎼滅储杞嚭鍖婚櫌
     searchHospitalOut(keyword) {
-      searchHospitals(keyword).then(response => {
+      // 浼犲叆鍏抽敭璇嶅拰鍦板煙杩囨护
+      searchHospitals(keyword, this.selectedRegion).then(response => {
         this.hospitalOutResults = response.data || []
         this.showHospitalOutResults = true
       }).catch(error => {
@@ -678,8 +845,11 @@
     
     // 閫夋嫨杞嚭鍖婚櫌
     selectHospitalOut(hospital) {
+      this.taskForm.hospitalOut.id = hospital.hospId  // 淇濆瓨鍖婚櫌ID
       this.taskForm.hospitalOut.name = hospital.hospName
-      this.taskForm.hospitalOut.address = hospital.hospAddress
+      // 鍚堝苟鐪佸競鍖� + 璇︾粏鍦板潃
+      const fullAddress = this.buildFullAddress(hospital)
+      this.taskForm.hospitalOut.address = fullAddress
       this.hospitalOutSearchKeyword = hospital.hospName
       this.showHospitalOutResults = false
       this.hospitalOutResults = []
@@ -730,7 +900,8 @@
     
     // 鎼滅储杞叆鍖婚櫌
     searchHospitalIn(keyword) {
-      searchHospitals(keyword).then(response => {
+      // 浼犲叆鍏抽敭璇嶅拰鍦板煙杩囨护
+      searchHospitals(keyword, this.selectedRegion).then(response => {
         this.hospitalInResults = response.data || []
         this.showHospitalInResults = true
       }).catch(error => {
@@ -741,8 +912,11 @@
     
     // 閫夋嫨杞叆鍖婚櫌
     selectHospitalIn(hospital) {
+      this.taskForm.hospitalIn.id = hospital.hospId  // 淇濆瓨鍖婚櫌ID
       this.taskForm.hospitalIn.name = hospital.hospName
-      this.taskForm.hospitalIn.address = hospital.hospAddress
+      // 鍚堝苟鐪佸競鍖� + 璇︾粏鍦板潃
+      const fullAddress = this.buildFullAddress(hospital)
+      this.taskForm.hospitalIn.address = fullAddress
       this.hospitalInSearchKeyword = hospital.hospName
       this.showHospitalInResults = false
       this.hospitalInResults = []
@@ -759,13 +933,22 @@
     
     // 鍒濆鍖栭�変腑鐨勪汉鍛橈紙榛樿鍖呭惈褰撳墠鐢ㄦ埛锛�
     initSelectedStaff() {
-      this.selectedStaff = [{
+      // 鏋勫缓褰撳墠鐢ㄦ埛瀵硅薄锛屽寘鍚畬鏁寸殑瑙掕壊淇℃伅
+      const currentUserStaff = {
         userId: this.currentUser.userId,
         nickName: this.currentUser.nickName,
         phonenumber: this.currentUser.phonenumber,
         postName: this.currentUser.position,
-        deptId: this.currentUser.deptId
-      }]
+        deptId: this.currentUser.deptId,
+        posts: this.currentUser.posts || [],
+        roles: this.currentUser.roles || [],
+        dept: this.currentUser.dept || null
+      }
+      
+      // 涓哄綋鍓嶇敤鎴疯缃鑹茬被鍨�
+      currentUserStaff.type = this.getUserType(currentUserStaff)
+      
+      this.selectedStaff = [currentUserStaff]
     },
     
     // 鍔犺浇褰撳墠鐢ㄦ埛鎵�鍦ㄥ垎鍏徃鐨勬墍鏈変汉鍛�
@@ -811,17 +994,22 @@
     getUserType(user) {
       const postName = user.posts && user.posts.length > 0 ? user.posts[0].postName : ''
       const roleName = user.roles && user.roles.length > 0 ? user.roles[0].roleName : ''
-      
+      const deptName = user.dept?.deptName || ''
+      // console.log("鑾峰彇鐢ㄦ埛绫诲瀷:", postName, roleName,user)
       // 鍒ゆ柇鏄惁涓哄徃鏈�
-      if (postName.includes('鍙告満') || roleName.includes('鍙告満')) {
+      if (postName.includes('鍙告満') || roleName.includes('鍙告満') || deptName.includes('杞﹂槦') || deptName.includes('鍙告満')) {
         return 'driver'
       }
+      // 鍒ゆ柇鏄惁涓哄尰鐢�
+      if (postName.includes('鍖荤敓') || roleName.includes('鍖荤敓') || deptName.includes('鍖荤敓')) {
+        return 'doctor'
+      }
       // 鍒ゆ柇鏄惁涓烘姢澹�
-      if (postName.includes('鎶ゅ+') || roleName.includes('鎶ゅ+')) {
+      if (postName.includes('鎶ゅ+') || roleName.includes('鎶ゅ+') || deptName.includes('鎶ゅ+')) {
         return 'nurse'
       }
-      // 鍏朵粬绫诲瀷
-      return 'other'
+      // 鍏朵粬绫诲瀷锛岄粯璁や负鍙告満
+      return 'driver'
     },
     
     // 鏄剧ず浜哄憳閫夋嫨寮圭獥
@@ -834,7 +1022,7 @@
     closeStaffSelector() {
       this.$refs.staffPopup.close()
       this.staffSearchKeyword = ''
-      this.staffFilterType = 'all'
+      this.staffFilterType = 'driver' // 閲嶇疆涓洪粯璁ょ殑鍙告満绫诲瀷
     },
     
     // 浜哄憳鎼滅储
@@ -856,6 +1044,8 @@
       // 鎸夌被鍨嬭繃婊�
       if (this.staffFilterType === 'driver') {
         list = list.filter(staff => staff.type === 'driver')
+      } else if (this.staffFilterType === 'doctor') {
+        list = list.filter(staff => staff.type === 'doctor')
       } else if (this.staffFilterType === 'nurse') {
         list = list.filter(staff => staff.type === 'nurse')
       }
@@ -1022,6 +1212,21 @@
         return false
       }
       
+      if (!this.selectedEmergencyTaskType) {
+        this.$modal.showToast('璇烽�夋嫨浠诲姟绫诲瀷')
+        return false
+      }
+      
+      if (!this.selectedDocumentType) {
+        this.$modal.showToast('璇烽�夋嫨鍗曟嵁绫诲瀷')
+        return false
+      }
+      
+      if (!this.taskForm.patient.contact) {
+        this.$modal.showToast('璇疯緭鍏ヨ仈绯讳汉')
+        return false
+      }
+      
       if (!this.taskForm.patient.name) {
         this.$modal.showToast('璇疯緭鍏ユ偅鑰呭鍚�')
         return false
@@ -1037,8 +1242,18 @@
         return false
       }
       
+      if (!this.taskForm.hospitalOut.department) {
+        this.$modal.showToast('璇烽�夋嫨杞嚭鍖婚櫌绉戝')
+        return false
+      }
+      
       if (!this.taskForm.hospitalIn.name) {
         this.$modal.showToast('璇疯緭鍏ヨ浆鍏ュ尰闄㈠悕绉�')
+        return false
+      }
+      
+      if (!this.taskForm.hospitalIn.department) {
+        this.$modal.showToast('璇烽�夋嫨杞叆鍖婚櫌绉戝')
         return false
       }
       
@@ -1062,9 +1277,25 @@
       
       const submitData = {
         taskType: 'EMERGENCY_TRANSFER',
+        deptId: this.selectedOrganizationId, // 褰掑睘鏈烘瀯ID锛堥儴闂↖D锛�
         vehicleIds: this.selectedVehicleId ? [this.selectedVehicleId] : [],
-        assigneeIds: this.selectedStaff.map(staff => staff.userId), // 娣诲姞鎵ц浜哄憳ID鍒楄〃
-        transferTime: this.taskForm.transferTime,
+        assigneeIds: this.selectedStaff.map(staff => staff.userId), // 鎵ц浜哄憳ID鍒楄〃
+        assigneeId: this.selectedStaff.length > 0 ? this.selectedStaff[0].userId : null, // 涓昏鎵ц浜�
+        // 鎵ц浜哄憳璇︾粏淇℃伅锛堝寘鍚鑹茬被鍨嬶級
+        assignees: this.selectedStaff.map(staff => ({
+          userId: staff.userId,
+          userName: staff.nickName,
+          userType: staff.type // driver/doctor/nurse
+        })),
+        transferTime: this.taskForm.transferTime, // 杞繍鏃堕棿
+        plannedStartTime: this.taskForm.transferTime, // 璁″垝寮�濮嬫椂闂�
+        documentTypeId: this.selectedDocumentTypeId, // 鍗曟嵁绫诲瀷ID
+        taskTypeId: this.selectedEmergencyTaskTypeId, // 浠诲姟绫诲瀷ID
+        // 鐥呮儏ID鍒楄〃锛堢敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛�
+        diseaseIds: this.selectedDiseases.map(d => d.id),
+        // 灏嗚浆鍑哄尰闄㈠湴鍧�浣滀负鍑哄彂鍦帮紝杞叆鍖婚櫌鍦板潃浣滀负鐩殑鍦�
+        departureAddress: this.taskForm.hospitalOut.address || '',
+        destinationAddress: this.taskForm.hospitalIn.address || '',
         patient: {
           ...this.taskForm.patient,
           condition: conditionText, // 浣跨敤鍚堝苟鍚庣殑鐥呮儏淇℃伅
@@ -1074,22 +1305,33 @@
             icdName: d.icdName
           }))
         },
-        hospitalOut: this.taskForm.hospitalOut,
-        hospitalIn: this.taskForm.hospitalIn,
+        // 鍖婚櫌淇℃伅锛堝寘鍚尰闄D銆佺瀹ゅ悕绉般�佺瀹D绛夊畬鏁翠俊鎭級
+        hospitalOut: this.taskForm.hospitalOut,  // 鍖呭惈: id, name, department, departmentId, bedNumber, address
+        hospitalIn: this.taskForm.hospitalIn,    // 鍖呭惈: id, name, department, departmentId, bedNumber, address
         transferDistance: this.taskForm.transferDistance ? parseFloat(this.taskForm.transferDistance) : null,
         price: this.taskForm.price ? parseFloat(this.taskForm.price) : null
       }
       
       if (this.addressCoordinates.hospitalOutAddress) {
+        // 杞嚭鍖婚櫌GPS鍧愭爣鍐欏叆鎵╁睍琛�
         if (!submitData.hospitalOut) submitData.hospitalOut = {}
         submitData.hospitalOut.longitude = this.addressCoordinates.hospitalOutAddress.lng
         submitData.hospitalOut.latitude = this.addressCoordinates.hospitalOutAddress.lat
+        
+        // 鍚屾椂鍐欏叆涓讳换鍔¤〃鐨勫嚭鍙戝湴缁忕含搴�
+        submitData.departureLongitude = this.addressCoordinates.hospitalOutAddress.lng
+        submitData.departureLatitude = this.addressCoordinates.hospitalOutAddress.lat
       }
       
       if (this.addressCoordinates.hospitalInAddress) {
+        // 杞叆鍖婚櫌GPS鍧愭爣鍐欏叆鎵╁睍琛�
         if (!submitData.hospitalIn) submitData.hospitalIn = {}
         submitData.hospitalIn.longitude = this.addressCoordinates.hospitalInAddress.lng
         submitData.hospitalIn.latitude = this.addressCoordinates.hospitalInAddress.lat
+        
+        // 鍚屾椂鍐欏叆涓讳换鍔¤〃鐨勭洰鐨勫湴缁忕含搴�
+        submitData.destinationLongitude = this.addressCoordinates.hospitalInAddress.lng
+        submitData.destinationLatitude = this.addressCoordinates.hospitalInAddress.lat
       }
       
       return submitData
@@ -1108,7 +1350,7 @@
           this.loading = false
           this.$modal.showToast('浠诲姟鍒涘缓鎴愬姛')
           setTimeout(() => {
-            uni.redirectTo({
+            uni.switchTab({
               url: '/pages/task/index'
             })
           }, 1500)
@@ -1122,6 +1364,24 @@
     
     goBack() {
       uni.navigateBack()
+    },
+    
+    // 鍚堝苟鍖婚櫌鍦板潃锛堢渷 + 甯� + 鍖� + 璇︾粏鍦板潃锛�
+    buildFullAddress(hospital) {
+      const parts = []
+      if (hospital.hopsProvince) {
+        parts.push(hospital.hopsProvince)
+      }
+      if (hospital.hopsCity) {
+        parts.push(hospital.hopsCity)
+      }
+      if (hospital.hopsArea) {
+        parts.push(hospital.hopsArea)
+      }
+      if (hospital.hospAddress) {
+        parts.push(hospital.hospAddress)
+      }
+      return parts.join('')
     }
   }
 }
@@ -1178,6 +1438,13 @@
         font-size: 28rpx;
         margin-bottom: 15rpx;
         color: #333;
+        
+        &.required::before {
+          content: '*';
+          color: #ff4d4f;
+          margin-right: 4rpx;
+          font-weight: bold;
+        }
       }
       
       .hospital-search-container {
diff --git a/app/pages/task/create-normal.vue b/app/pages/task/create-normal.vue
index 9fe739c..f8a8a3d 100644
--- a/app/pages/task/create-normal.vue
+++ b/app/pages/task/create-normal.vue
@@ -181,7 +181,7 @@
   computed: {
     ...mapState({
       currentUser: state => ({
-        name: state.user.name || '寮犱笁',
+        name: state.user.nickName || '寮犱笁',
         position: '鍙告満',
         deptId: state.user.deptId || 100
       })
diff --git a/app/pages/task/create-welfare.vue b/app/pages/task/create-welfare.vue
index b90c6d6..9a5d4d9 100644
--- a/app/pages/task/create-welfare.vue
+++ b/app/pages/task/create-welfare.vue
@@ -188,7 +188,7 @@
   computed: {
     ...mapState({
       currentUser: state => ({
-        name: state.user.name || '寮犱笁',
+        name: state.user.nickName || '寮犱笁',
         position: '鍙告満',
         deptId: state.user.deptId || 100
       })
diff --git a/app/store/modules/user.js b/app/store/modules/user.js
index 9e25e89..ec289bf 100644
--- a/app/store/modules/user.js
+++ b/app/store/modules/user.js
@@ -12,12 +12,14 @@
     token: getToken(),
     userId: storage.get(constant.userId),
     name: storage.get(constant.name),
+    nickName: storage.get(constant.nickName),
     avatar: storage.get(constant.avatar),
     roles: storage.get(constant.roles),
     permissions: storage.get(constant.permissions),
     deptId: storage.get(constant.deptId),
     branchCompanyId: storage.get(constant.branchCompanyId),
-    branchCompanyName: storage.get(constant.branchCompanyName)
+    branchCompanyName: storage.get(constant.branchCompanyName),
+    oaUserId: storage.get(constant.oaUserId)
   },
 
   mutations: {
@@ -31,6 +33,10 @@
     SET_NAME: (state, name) => {
       state.name = name
       storage.set(constant.name, name)
+    },
+    SET_NICK_NAME: (state, nickName) => {
+      state.nickName = nickName
+      storage.set(constant.nickName, nickName)
     },
     SET_AVATAR: (state, avatar) => {
       state.avatar = avatar
@@ -55,6 +61,10 @@
     SET_BRANCH_COMPANY_NAME: (state, branchCompanyName) => {
       state.branchCompanyName = branchCompanyName
       storage.set(constant.branchCompanyName, branchCompanyName)
+    },
+    SET_OA_USER_ID: (state, oaUserId) => {
+      state.oaUserId = oaUserId
+      storage.set(constant.oaUserId, oaUserId)
     }
   },
 
@@ -96,6 +106,7 @@
           const user = res.user
           const avatar = (user == null || user.avatar == "" || user.avatar == null) ? require("@/static/images/profile.jpg") : baseUrl + user.avatar
           const username = (user == null || user.userName == "" || user.userName == null) ? "" : user.userName
+          const nickname = (user == null || user.nickName == "" || user.nickName == null) ? username : user.nickName
           const userId = (user == null || user.userId == null) ? null : user.userId
           const deptId = (user == null || user.deptId == null) ? null : user.deptId
           
@@ -107,10 +118,12 @@
           }
           commit('SET_USER_ID', userId)
           commit('SET_NAME', username)
+          commit('SET_NICK_NAME', nickname)
           commit('SET_AVATAR', avatar)
           commit('SET_DEPT_ID', deptId)
           commit('SET_BRANCH_COMPANY_ID', res.branchCompanyId)
           commit('SET_BRANCH_COMPANY_NAME', res.branchCompanyName)
+          commit('SET_OA_USER_ID', res.oaUserId)
           resolve(res)
         }).catch(error => {
           reject(error)
diff --git a/app/utils/constant.js b/app/utils/constant.js
index 9603733..b084c8c 100644
--- a/app/utils/constant.js
+++ b/app/utils/constant.js
@@ -2,11 +2,13 @@
    userId: 'vuex_userId',
    avatar: 'vuex_avatar',
    name: 'vuex_name',
+   nickName: 'vuex_nickName',
    roles: 'vuex_roles',
    permissions: 'vuex_permissions',
    deptId: 'vuex_deptId',
    branchCompanyId: 'vuex_branchCompanyId',
-   branchCompanyName: 'vuex_branchCompanyName'
+   branchCompanyName: 'vuex_branchCompanyName',
+   oaUserId: 'vuex_oaUserId'
  }
 
  export default constant
diff --git a/oldCode b/oldCode
new file mode 120000
index 0000000..0dab454
--- /dev/null
+++ b/oldCode
@@ -0,0 +1 @@
+D:/project/鎬ユ晳杞繍/code/璋冨害绯荤粺
\ No newline at end of file
diff --git "a/prd/CHANGELOG-\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245.md" "b/prd/CHANGELOG-\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245.md"
new file mode 100644
index 0000000..b512f35
--- /dev/null
+++ "b/prd/CHANGELOG-\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245.md"
@@ -0,0 +1,235 @@
+# 鍙樻洿鏃ュ織 - 閮ㄩ棬缂栫爜鍚屾鍔熻兘
+
+## [v1.0] - 2025-10-19
+
+### 鏂板鍔熻兘 鉁�
+
+#### 1. 閮ㄩ棬缂栫爜瀛楁
+- 鍦╜sys_dept`琛ㄦ坊鍔燻service_order_class`瀛楁锛堟湇鍔″崟缂栫爜锛�
+- 鍦╜sys_dept`琛ㄦ坊鍔燻dispatch_order_class`瀛楁锛堣皟搴﹀崟缂栫爜锛�
+- 娣诲姞瀵瑰簲鐨勭储寮曚互浼樺寲鏌ヨ鎬ц兘
+
+#### 2. SQL Server缂栫爜鏌ヨ
+- 鍒涘缓`OrderClassDTO`鐢ㄤ簬灏佽缂栫爜鏁版嵁
+- 鍒涘缓`OrderClassMapper`浠嶴QL Server鐨刣ictionary琛ㄦ煡璇㈢紪鐮�
+- 瀹炵幇鏈嶅姟鍗曠紪鐮佹煡璇紙vType=1锛�
+- 瀹炵幇璋冨害鍗曠紪鐮佹煡璇紙vType=2锛�
+
+#### 3. 缂栫爜鏁版嵁鏈嶅姟
+- 鍒涘缓`IOrderClassDataService`鎺ュ彛
+- 瀹炵幇`OrderClassDataServiceImpl`鏈嶅姟绫�
+- 浣跨敤`@DataSource(SQLSERVER)`娉ㄨВ鑷姩鍒囨崲鏁版嵁婧�
+
+#### 4. 鑷姩缂栫爜鍖归厤
+- 鍦ㄩ儴闂ㄥ悓姝ユ椂鑷姩鎻愬彇鍩庡競鍚嶇О
+- 鏅鸿兘鍖归厤SQL Server涓殑缂栫爜鏁版嵁
+- 鑷姩璁剧疆鍒嗗叕鍙哥殑鏈嶅姟鍗曞拰璋冨害鍗曠紪鐮�
+
+#### 5. 鍦板悕鍖归厤绠楁硶
+- 瀹炵幇`matchCityNameToCode()`鏂规硶
+- 鏀寔妯$硦鍖归厤锛坈ontains鏂瑰紡锛�
+- 瀹屾暣鐨勬棩蹇楄褰曞拰寮傚父澶勭悊
+
+### 淇敼鏂囦欢 馃摑
+
+#### SysDept.java
+**浣嶇疆**锛歚ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java`
+
+**鍙樻洿**锛�
+```java
+// 鏂板瀛楁
+private String serviceOrderClass;      // 鏈嶅姟鍗曠紪鐮�
+private String dispatchOrderClass;     // 璋冨害鍗曠紪鐮�
+
+// 鏂板getter/setter鏂规硶
+public String getServiceOrderClass() { ... }
+public void setServiceOrderClass(String serviceOrderClass) { ... }
+public String getDispatchOrderClass() { ... }
+public void setDispatchOrderClass(String dispatchOrderClass) { ... }
+```
+
+#### SysDeptMapper.xml
+**浣嶇疆**锛歚ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml`
+
+**鍙樻洿**锛�
+- `resultMap`涓坊鍔犳柊瀛楁鏄犲皠
+- `selectDeptVo`涓坊鍔犳柊瀛楁鏌ヨ
+- `selectDeptById`涓坊鍔犳柊瀛楁
+- `insertDept`涓坊鍔犳柊瀛楁鎻掑叆閫昏緫
+- `updateDept`涓坊鍔犳柊瀛楁鏇存柊閫昏緫
+
+#### DepartmentSyncServiceImpl.java
+**浣嶇疆**锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java`
+
+**鍙樻洿**锛�
+```java
+// 1. 娣诲姞渚濊禆娉ㄥ叆
+@Autowired
+private IOrderClassDataService orderClassDataService;
+
+// 2. 鍦ㄥ垱寤哄垎鍏徃鏃舵坊鍔犵紪鐮佸悓姝�
+syncOrderClassCodes(newBranch, parts[0].trim());
+
+// 3. 鏂板杈呭姪鏂规硶
+private void syncOrderClassCodes(SysDept dept, String cityName) { ... }
+private String matchCityNameToCode(String cityName, List<OrderClassDTO> orderClassList) { ... }
+```
+
+### 鏂板鏂囦欢 馃搧
+
+#### 鏁版嵁搴撹剼鏈�
+```
+sql/add_dept_order_class_fields.sql
+```
+
+#### Java绫伙紙6涓級
+```
+ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java
+ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java
+ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml
+ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java
+ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java
+```
+
+#### 鏂囨。锛�3涓級
+```
+prd/閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md
+prd/閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md
+prd/閮ㄩ棬缂栫爜鍚屾鍔熻兘瀹炵幇鎬荤粨.md
+```
+
+### 鎶�鏈粏鑺� 馃敡
+
+#### 鏁版嵁婧愬垏鎹�
+浣跨敤Spring鐨刞@DataSource`娉ㄨВ瀹炵幇澶氭暟鎹簮鍒囨崲锛�
+```java
+@DataSource(DataSourceType.SQLSERVER)
+public interface OrderClassMapper { ... }
+
+@Service
+@DataSource(DataSourceType.SQLSERVER)
+public class OrderClassDataServiceImpl { ... }
+```
+
+#### SQL鏌ヨ
+```sql
+-- 鏈嶅姟鍗曠紪鐮�
+SELECT vtext, vOrder2, vType
+FROM dictionary
+WHERE vtitle = 'OrderClass' AND vType = 1
+
+-- 璋冨害鍗曠紪鐮�
+SELECT vtext, vOrder2, vType
+FROM dictionary
+WHERE vtitle = 'OrderClass' AND vType = 2
+```
+
+#### 鍖归厤閫昏緫
+```java
+// 鎻愬彇鍩庡競鍚嶏細婀涙睙--鎶ゅ+ 鈫� 婀涙睙
+String cityName = parts[0].trim();
+
+// 妯$硦鍖归厤锛氭箾姹� 鈫� 婀涙睙鏈嶅姟鍗� 鈫� ZJ
+if (dto.getVtext() != null && dto.getVtext().contains(cityName)) {
+    return dto.getVOrder2();
+}
+```
+
+### 鍏煎鎬� 馃攧
+
+- 鉁� 瀹屽叏鍚戜笅鍏煎鍘熸湁閮ㄩ棬鍚屾鍔熻兘
+- 鉁� 缂栫爜瀛楁鍙负null锛屼笉褰卞搷鐜版湁娴佺▼
+- 鉁� 涓嶅奖鍝嶅叾浠栨ā鍧楃殑閮ㄩ棬鏌ヨ鍜屼娇鐢�
+
+### 鎬ц兘褰卞搷 鈿�
+
+- 鏂板2娆QL Server鏌ヨ锛堟湇鍔″崟鍜岃皟搴﹀崟缂栫爜锛�
+- 鏂板鍦板悕鍖归厤绠楁硶锛圤(n)澶嶆潅搴︼紝n涓虹紪鐮佹暟閲忥級
+- 棰勮瀵瑰悓姝ユ�ц兘褰卞搷<10%锛堢紪鐮佹暟閲忛�氬父<100锛�
+
+### 鏃ュ織绾у埆 馃搵
+
+- `INFO`锛氬尮閰嶆垚鍔熴�佸垱寤�/鏇存柊鍒嗗叕鍙�
+- `WARN`锛氭湭鍖归厤鍒扮紪鐮�
+- `ERROR`锛氭煡璇㈢紪鐮佸紓甯搞�佸悓姝ュけ璐�
+
+### 娴嬭瘯寤鸿 鉁�
+
+1. **鍔熻兘娴嬭瘯**
+   - [ ] 姝e父鍖归厤鍦烘櫙
+   - [ ] 鏈尮閰嶅満鏅�
+   - [ ] 鏇存柊宸插瓨鍦ㄥ垎鍏徃
+
+2. **鎬ц兘娴嬭瘯**
+   - [ ] 鍚屾100+鍒嗗叕鍙哥殑鑰楁椂
+   - [ ] SQL Server鏌ヨ鎬ц兘
+
+3. **寮傚父娴嬭瘯**
+   - [ ] SQL Server杩炴帴澶辫触
+   - [ ] dictionary琛ㄦ暟鎹己澶�
+   - [ ] 缂栫爜鏍煎紡寮傚父
+
+### 閮ㄧ讲璇存槑 馃殌
+
+#### 鏁版嵁搴撳崌绾�
+```bash
+mysql -u root -p ry-vue < sql/add_dept_order_class_fields.sql
+```
+
+#### 浠g爜缂栬瘧
+```bash
+mvn clean package -DskipTests
+```
+
+#### 鏈嶅姟閲嶅惎
+```bash
+cd ruoyi-admin
+java -jar target/ruoyi-admin.jar
+```
+
+### 鍥炴粴鏂规 鈴笍
+
+濡傞渶鍥炴粴姝ゅ姛鑳斤細
+
+#### 1. 鏁版嵁搴撳洖婊�
+```sql
+ALTER TABLE sys_dept DROP COLUMN service_order_class;
+ALTER TABLE sys_dept DROP COLUMN dispatch_order_class;
+ALTER TABLE sys_dept DROP INDEX idx_service_order_class;
+ALTER TABLE sys_dept DROP INDEX idx_dispatch_order_class;
+```
+
+#### 2. 浠g爜鍥炴粴
+- 鍒犻櫎鏂板鐨�6涓狫ava鏂囦欢
+- 鎭㈠`SysDept.java`銆乣SysDeptMapper.xml`銆乣DepartmentSyncServiceImpl.java`鍒颁慨鏀瑰墠鐗堟湰
+
+### 宸茬煡闂 鈿狅笍
+
+鏃�
+
+### 鍚庣画浼樺寲 馃搶
+
+1. 鑰冭檻娣诲姞缂撳瓨鏈哄埗鍑忓皯SQL Server鏌ヨ
+2. 鑰冭檻娣诲姞鎵嬪姩閰嶇疆缂栫爜鐨凴EST API
+3. 鑰冭檻鍗囩骇涓虹簿纭尮閰嶇畻娉�
+
+### 鐩稿叧閾炬帴 馃敆
+
+- [閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑](./閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md)
+- [閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮媇(./閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md)
+- [閮ㄩ棬缂栫爜鍚屾鍔熻兘瀹炵幇鎬荤粨](./閮ㄩ棬缂栫爜鍚屾鍔熻兘瀹炵幇鎬荤粨.md)
+
+---
+
+## 鐗堟湰鍘嗗彶
+
+### v1.0 (2025-10-19)
+- 鍒濆鐗堟湰
+- 瀹炵幇鍩虹鐨勭紪鐮佽嚜鍔ㄥ尮閰嶅姛鑳�
+- 瀹屾暣鐨勬枃妗e拰娴嬭瘯鐢ㄤ緥
+
+---
+
+**璐熻矗浜�**锛欰I Assistant  
+**瀹℃牳浜�**锛氬緟瀹�  
+**鍙戝竷鏃ユ湡**锛�2025-10-19
diff --git "a/prd/OA\347\224\250\346\210\267ID\345\255\227\346\256\265\346\224\257\346\214\201\350\257\264\346\230\216.md" "b/prd/OA\347\224\250\346\210\267ID\345\255\227\346\256\265\346\224\257\346\214\201\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..e0fa1a8
--- /dev/null
+++ "b/prd/OA\347\224\250\346\210\267ID\345\255\227\346\256\265\346\224\257\346\214\201\350\257\264\346\230\216.md"
@@ -0,0 +1,438 @@
+# OA鐢ㄦ埛ID瀛楁鏀寔璇存槑
+
+## 闇�姹傝儗鏅�
+
+涓轰簡涓嶰A绯荤粺杩涜鐢ㄦ埛鏁版嵁鍚屾鍜屽叧鑱旓紝闇�瑕佸湪绯荤粺涓敮鎸丱A_UserID瀛楁锛�
+1. 鐢ㄦ埛鐧诲綍鎴愬姛鍚庯紝鍦ㄧ敤鎴蜂俊鎭腑鍔犺浇OA_UserID
+2. 鍦ㄥ悗鍙板垱寤虹敤鎴锋椂锛屽彲浠ヨ緭鍏ュ苟淇濆瓨OA_UserID
+3. 鍦ㄥ悗鍙颁慨鏀圭敤鎴锋椂锛屽彲浠ヤ慨鏀筄A_UserID
+
+## 瀹炵幇鏂规
+
+### 涓�銆佸悗绔疄鐜�
+
+#### 1. 瀹炰綋绫伙紙宸插畬鎴愶級
+**鏂囦欢**: `ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java`
+
+SysUser瀹炰綋绫诲凡鍖呭惈oaUserId瀛楁锛�
+```java
+/** SQL Server涓殑OA鐢ㄦ埛ID */
+private Integer oaUserId;
+
+public Integer getOaUserId() {
+    return oaUserId;
+}
+
+public void setOaUserId(Integer oaUserId) {
+    this.oaUserId = oaUserId;
+}
+```
+
+#### 2. Mapper閰嶇疆锛堝凡瀹屾垚锛�
+**鏂囦欢**: `ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml`
+
+**ResultMap鏄犲皠锛�**
+```xml
+<resultMap type="SysUser" id="SysUserResult">
+    <!-- ... 鍏朵粬瀛楁 -->
+    <result property="oaUserId" column="oa_user_id" />
+</resultMap>
+```
+
+**鏌ヨSQL鍖呭惈oaUserId锛�**
+```xml
+<sql id="selectUserVo">
+    select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, 
+           u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, 
+           u.login_ip, u.login_date, u.oa_user_id, u.create_by, u.create_time, u.remark, 
+           <!-- ... -->
+    from sys_user u
+    <!-- ... -->
+</sql>
+```
+
+**鎻掑叆鎿嶄綔锛�**
+```xml
+<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
+    insert into sys_user(
+        <!-- ... 鍏朵粬瀛楁 -->
+        <if test="oaUserId != null">oa_user_id,</if>
+        <!-- ... -->
+    )values(
+        <!-- ... 鍏朵粬瀛楁鍊� -->
+        <if test="oaUserId != null">#{oaUserId},</if>
+        <!-- ... -->
+    )
+</insert>
+```
+
+**鏇存柊鎿嶄綔锛�**
+```xml
+<update id="updateUser" parameterType="SysUser">
+    update sys_user
+    <set>
+        <!-- ... 鍏朵粬瀛楁 -->
+        <if test="oaUserId != null">oa_user_id = #{oaUserId},</if>
+        <!-- ... -->
+    </set>
+    where user_id = #{userId}
+</update>
+```
+
+#### 3. 鐧诲綍鎺ュ彛鎵╁睍
+**鏂囦欢**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java`
+
+鍦╜getInfo()`鏂规硶涓繑鍥瀘aUserId锛�
+
+```java
+@GetMapping("getInfo")
+public AjaxResult getInfo()
+{
+    LoginUser loginUser = SecurityUtils.getLoginUser();
+    SysUser user = loginUser.getUser();
+    // ... 鍏朵粬浠g爜
+    
+    AjaxResult ajax = AjaxResult.success();
+    ajax.put("user", user);
+    ajax.put("roles", roles);
+    ajax.put("permissions", permissions);
+    ajax.put("branchCompanyId", branchCompanyId);
+    ajax.put("branchCompanyName", branchCompanyName);
+    ajax.put("oaUserId", user.getOaUserId()); // 鏂板锛氳繑鍥濷A鐢ㄦ埛ID
+    return ajax;
+}
+```
+
+### 浜屻�佸墠绔疄鐜�
+
+#### 1. 鍚庡彴绠$悊椤甸潰锛圴ue锛�
+**鏂囦欢**: `ruoyi-ui/src/views/system/user/index.vue`
+
+##### 鍒楄〃鏄剧ず
+鍦ㄧ敤鎴峰垪琛ㄤ腑鏄剧ずOA鐢ㄦ埛ID鍒楋細
+```html
+<el-table-column label="OA鐢ㄦ埛ID" align="center" key="oaUserId" prop="oaUserId" v-if="columns[1].visible" width="120">
+  <template slot-scope="scope">
+    <span v-if="scope.row.oaUserId">{{ scope.row.oaUserId }}</span>
+    <span v-else style="color: #909399;">-</span>
+  </template>
+</el-table-column>
+```
+
+##### 琛ㄥ崟缂栬緫
+鍦ㄦ柊澧�/淇敼鐢ㄦ埛瀵硅瘽妗嗕腑娣诲姞OA鐢ㄦ埛ID杈撳叆妗嗭細
+```html
+<el-row>
+  <el-col :span="12">
+    <el-form-item label="OA鐢ㄦ埛ID" prop="oaUserId">
+      <el-input v-model="form.oaUserId" placeholder="OA绯荤粺鐨勭敤鎴稩D" type="number" />
+    </el-form-item>
+  </el-col>
+</el-row>
+```
+
+**娉ㄦ剰**锛�
+- `type="number"` 纭繚鍙兘杈撳叆鏁板瓧
+- 绉婚櫎浜� `:disabled="true"` 灞炴�э紝鍏佽缂栬緫
+- 鍦ㄥ垱寤哄拰淇敼鏃堕兘鍙互杈撳叆OA鐢ㄦ埛ID
+
+##### 琛ㄥ崟鍒濆鍖�
+鍦╜reset()`鏂规硶涓寘鍚玱aUserId锛�
+```javascript
+reset() {
+  this.form = {
+    userId: undefined,
+    deptId: undefined,
+    userName: undefined,
+    nickName: undefined,
+    oaUserId: undefined, // 鍒濆鍖朞A鐢ㄦ埛ID
+    password: undefined,
+    phonenumber: undefined,
+    email: undefined,
+    sex: undefined,
+    status: "0",
+    remark: undefined,
+    postIds: [],
+    roleIds: []
+  };
+  this.resetForm("form");
+}
+```
+
+##### 鍒椾俊鎭厤缃�
+娣诲姞OA鐢ㄦ埛ID鍒楀埌columns閰嶇疆锛�
+```javascript
+columns: [
+  { key: 0, label: `鐢ㄦ埛缂栧彿`, visible: true },
+  { key: 1, label: `OA鐢ㄦ埛ID`, visible: true }, // 鏂板鍒�
+  { key: 2, label: `鐢ㄦ埛鍚嶇О`, visible: true },
+  { key: 3, label: `鐢ㄦ埛鏄电О`, visible: true },
+  { key: 4, label: `閮ㄩ棬`, visible: true },
+  { key: 5, label: `鎵嬫満鍙风爜`, visible: true },
+  { key: 6, label: `鐘舵�乣, visible: true },
+  { key: 7, label: `鍒涘缓鏃堕棿`, visible: true }
+]
+```
+
+#### 2. 绉诲姩绔紙UniApp锛�
+**鏂囦欢**: `app/store/modules/user.js`
+
+##### 甯搁噺瀹氫箟
+**鏂囦欢**: `app/utils/constant.js`
+
+娣诲姞oaUserId甯搁噺锛�
+```javascript
+const constant = {
+   userId: 'vuex_userId',
+   avatar: 'vuex_avatar',
+   name: 'vuex_name',
+   roles: 'vuex_roles',
+   permissions: 'vuex_permissions',
+   deptId: 'vuex_deptId',
+   branchCompanyId: 'vuex_branchCompanyId',
+   branchCompanyName: 'vuex_branchCompanyName',
+   oaUserId: 'vuex_oaUserId' // 鏂板
+}
+```
+
+##### State瀹氫箟
+鍦╯tore涓坊鍔爋aUserId鐘舵�侊細
+```javascript
+state: {
+  token: getToken(),
+  userId: storage.get(constant.userId),
+  name: storage.get(constant.name),
+  avatar: storage.get(constant.avatar),
+  roles: storage.get(constant.roles),
+  permissions: storage.get(constant.permissions),
+  deptId: storage.get(constant.deptId),
+  branchCompanyId: storage.get(constant.branchCompanyId),
+  branchCompanyName: storage.get(constant.branchCompanyName),
+  oaUserId: storage.get(constant.oaUserId) // 鏂板
+}
+```
+
+##### Mutation瀹氫箟
+娣诲姞SET_OA_USER_ID mutation锛�
+```javascript
+mutations: {
+  // ... 鍏朵粬mutations
+  SET_OA_USER_ID: (state, oaUserId) => {
+    state.oaUserId = oaUserId
+    storage.set(constant.oaUserId, oaUserId)
+  }
+}
+```
+
+##### Action瀹炵幇
+鍦℅etInfo action涓繚瀛榦aUserId锛�
+```javascript
+GetInfo({ commit, state }) {
+  return new Promise((resolve, reject) => {
+    getInfo().then(res => {
+      const user = res.user
+      // ... 鍏朵粬浠g爜
+      
+      commit('SET_USER_ID', userId)
+      commit('SET_NAME', username)
+      commit('SET_AVATAR', avatar)
+      commit('SET_DEPT_ID', deptId)
+      commit('SET_BRANCH_COMPANY_ID', res.branchCompanyId)
+      commit('SET_BRANCH_COMPANY_NAME', res.branchCompanyName)
+      commit('SET_OA_USER_ID', res.oaUserId) // 鏂板锛氫繚瀛極A鐢ㄦ埛ID
+      resolve(res)
+    }).catch(error => {
+      reject(error)
+    })
+  })
+}
+```
+
+### 涓夈�佹暟鎹祦绋�
+
+#### 1. 鐢ㄦ埛鐧诲綍娴佺▼
+```
+鐢ㄦ埛鐧诲綍
+    鈫�
+璋冪敤 /login 鎺ュ彛
+    鈫�
+杩斿洖 token
+    鈫�
+璋冪敤 /getInfo 鎺ュ彛
+    鈫�
+杩斿洖鐢ㄦ埛淇℃伅锛堝寘鍚玱aUserId锛�
+    鈫�
+淇濆瓨鍒� Vuex store
+    鈫�
+瀛樺偍鍒� localStorage
+    鈫�
+鍦ㄥ簲鐢ㄤ腑浣跨敤 this.$store.state.user.oaUserId 璁块棶
+```
+
+#### 2. 鍒涘缓鐢ㄦ埛娴佺▼
+```
+鐐瑰嚮"鏂板"鎸夐挳
+    鈫�
+鎵撳紑瀵硅瘽妗�
+    鈫�
+濉啓鐢ㄦ埛淇℃伅锛堝寘鎷琌A鐢ㄦ埛ID锛�
+    鈫�
+鐐瑰嚮"纭畾"鎻愪氦
+    鈫�
+璋冪敤 addUser() 鎺ュ彛
+    鈫�
+鍚庣淇濆瓨鍒版暟鎹簱锛坥a_user_id瀛楁锛�
+    鈫�
+杩斿洖鎴愬姛
+    鈫�
+鍒锋柊鐢ㄦ埛鍒楄〃
+```
+
+#### 3. 淇敼鐢ㄦ埛娴佺▼
+```
+鐐瑰嚮"淇敼"鎸夐挳
+    鈫�
+鍔犺浇鐢ㄦ埛淇℃伅锛堝寘鍚玂A鐢ㄦ埛ID锛�
+    鈫�
+淇敼OA鐢ㄦ埛ID
+    鈫�
+鐐瑰嚮"纭畾"鎻愪氦
+    鈫�
+璋冪敤 updateUser() 鎺ュ彛
+    鈫�
+鍚庣鏇存柊鏁版嵁搴擄紙oa_user_id瀛楁锛�
+    鈫�
+杩斿洖鎴愬姛
+    鈫�
+鍒锋柊鐢ㄦ埛鍒楄〃
+```
+
+### 鍥涖�佹暟鎹簱瀛楁
+
+**琛ㄥ悕**: `sys_user`
+
+**瀛楁**: `oa_user_id`
+- **绫诲瀷**: `INT`
+- **鍙┖**: `YES`
+- **榛樿鍊�**: `NULL`
+- **璇存槑**: 瀛樺偍OA绯荤粺涓殑鐢ㄦ埛ID锛岀敤浜庝笌澶栭儴OA绯荤粺杩涜鐢ㄦ埛鏁版嵁鍏宠仈
+
+SQL鍒涘缓璇彞锛堝凡瀛樺湪锛夛細
+```sql
+ALTER TABLE sys_user ADD COLUMN oa_user_id INT NULL COMMENT 'OA绯荤粺鐢ㄦ埛ID';
+```
+
+### 浜斻�佷娇鐢ㄧず渚�
+
+#### 1. 鍚庡彴绠$悊
+1. **鏌ョ湅鐢ㄦ埛鍒楄〃**
+   - 鍦ㄧ敤鎴风鐞嗛〉闈紝鍙互鐪嬪埌"OA鐢ㄦ埛ID"鍒�
+   - 濡傛灉鐢ㄦ埛鏈塐A鐢ㄦ埛ID锛屼細鏄剧ず鏁板瓧
+   - 濡傛灉娌℃湁锛屾樉绀�"-"
+
+2. **鍒涘缓鐢ㄦ埛**
+   - 鐐瑰嚮"鏂板"鎸夐挳
+   - 鍦ㄨ〃鍗曚腑濉啓"OA鐢ㄦ埛ID"锛堝彲閫夛級
+   - 鐐瑰嚮"纭畾"淇濆瓨
+
+3. **淇敼鐢ㄦ埛**
+   - 鐐瑰嚮鐢ㄦ埛鐨�"淇敼"鎸夐挳
+   - 鍙互淇敼"OA鐢ㄦ埛ID"
+   - 鐐瑰嚮"纭畾"淇濆瓨
+
+#### 2. 绉诲姩绔�
+鍦ㄧЩ鍔ㄧ搴旂敤涓闂甇A鐢ㄦ埛ID锛�
+```javascript
+// 鍦ㄧ粍浠朵腑
+export default {
+  computed: {
+    ...mapState({
+      oaUserId: state => state.user.oaUserId
+    })
+  },
+  mounted() {
+    console.log('褰撳墠鐢ㄦ埛鐨凮A鐢ㄦ埛ID:', this.oaUserId)
+  }
+}
+```
+
+### 鍏�佹祴璇曞缓璁�
+
+#### 鍔熻兘娴嬭瘯
+1. **鐧诲綍娴嬭瘯**
+   - 浣跨敤宸叉湁OA鐢ㄦ埛ID鐨勮处鍙风櫥褰�
+   - 妫�鏌ョ櫥褰曞悗鏄惁鑳芥纭幏鍙朞A鐢ㄦ埛ID
+   - 鍦ㄥ紑鍙戣�呭伐鍏蜂腑鏌ョ湅localStorage涓槸鍚︿繚瀛樹簡oaUserId
+
+2. **鍒涘缓鐢ㄦ埛娴嬭瘯**
+   - 鍒涘缓鏂扮敤鎴锋椂濉啓OA鐢ㄦ埛ID
+   - 淇濆瓨鍚庢煡鐪嬫暟鎹簱涓槸鍚︽纭繚瀛�
+   - 鍦ㄧ敤鎴峰垪琛ㄤ腑鏌ョ湅鏄惁姝g‘鏄剧ず
+
+3. **淇敼鐢ㄦ埛娴嬭瘯**
+   - 淇敼宸叉湁鐢ㄦ埛鐨凮A鐢ㄦ埛ID
+   - 淇濆瓨鍚庢煡鐪嬫暟鎹簱涓槸鍚︽纭洿鏂�
+   - 鍦ㄧ敤鎴峰垪琛ㄤ腑鏌ョ湅鏄惁姝g‘鏄剧ず
+
+4. **绌哄�兼祴璇�**
+   - 鍒涘缓鐢ㄦ埛鏃朵笉濉啓OA鐢ㄦ埛ID
+   - 纭绯荤粺鑳芥甯镐繚瀛橈紙oaUserId涓篘ULL锛�
+   - 鍦ㄥ垪琛ㄤ腑鏄剧ず涓�"-"
+
+#### 鏁版嵁涓�鑷存�ф祴璇�
+1. 妫�鏌ユ柊澧炵敤鎴峰悗锛宱aUserId鏄惁姝g‘淇濆瓨
+2. 妫�鏌ヤ慨鏀圭敤鎴峰悗锛宱aUserId鏄惁姝g‘鏇存柊
+3. 妫�鏌ョ櫥褰曞悗锛宱aUserId鏄惁姝g‘浠庢暟鎹簱鍔犺浇
+4. 妫�鏌ョЩ鍔ㄧ鍜孭C绔殑oaUserId鏄惁涓�鑷�
+
+### 涓冦�佺浉鍏虫枃浠�
+
+#### 鍚庣鏂囦欢
+- `ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java` - 鐢ㄦ埛瀹炰綋绫�
+- `ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml` - 鐢ㄦ埛Mapper閰嶇疆
+- `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java` - 鐧诲綍鎺у埗鍣�
+
+#### 鍓嶇鏂囦欢锛圥C绔級
+- `ruoyi-ui/src/views/system/user/index.vue` - 鐢ㄦ埛绠$悊椤甸潰
+
+#### 鍓嶇鏂囦欢锛堢Щ鍔ㄧ锛�
+- `app/utils/constant.js` - 甯搁噺瀹氫箟
+- `app/store/modules/user.js` - 鐢ㄦ埛鐘舵�佺鐞�
+
+#### 鏁版嵁搴�
+- `sys_user` 琛� - `oa_user_id` 瀛楁
+
+### 鍏�佹敞鎰忎簨椤�
+
+1. **鏁版嵁绫诲瀷**锛歄A鐢ㄦ埛ID浣跨敤Integer绫诲瀷锛屽搴旀暟鎹簱鐨処NT绫诲瀷
+2. **鍙┖鎬�**锛氬瓧娈靛厑璁镐负NULL锛岀敤鎴峰彲浠ヤ笉缁戝畾OA璐﹀彿
+3. **鍞竴鎬�**锛氱洰鍓嶆病鏈夊敮涓�鎬х害鏉燂紝濡傞渶瑕佸彲娣诲姞UNIQUE绱㈠紩
+4. **瀹夊叏鎬�**锛歄A鐢ㄦ埛ID涓嶅簲璇ユ毚闇茬粰鏅�氱敤鎴凤紝浠呭湪鍚庡彴绠$悊绯荤粺涓彲瑙�
+5. **鍚屾閫昏緫**锛氬鏋滃疄鐜颁簡OA鏁版嵁鍚屾鍔熻兘锛岄渶瑕佺‘淇漮aUserId鐨勪竴鑷存��
+
+### 涔濄�佸悗缁墿灞曞缓璁�
+
+1. **娣诲姞鍞竴鎬х害鏉�**
+   ```sql
+   ALTER TABLE sys_user ADD UNIQUE INDEX idx_oa_user_id (oa_user_id);
+   ```
+
+2. **娣诲姞OA鐢ㄦ埛ID楠岃瘉**
+   - 鍦ㄥ悗鍙版坊鍔犻獙璇佽鍒欙紝纭繚OA鐢ㄦ埛ID鐨勬湁鏁堟��
+   - 妫�鏌A鐢ㄦ埛ID鏄惁宸茶鍏朵粬鐢ㄦ埛浣跨敤
+
+3. **OA绯荤粺闆嗘垚**
+   - 瀹炵幇涓嶰A绯荤粺鐨勫崟鐐圭櫥褰曪紙SSO锛�
+   - 閫氳繃OA鐢ㄦ埛ID鑷姩鍚屾鐢ㄦ埛淇℃伅
+
+4. **鏁版嵁鍚屾鍔熻兘**
+   - 瀹氭椂浠嶰A绯荤粺鍚屾鐢ㄦ埛鏁版嵁
+   - 鏍规嵁OA鐢ㄦ埛ID鏇存柊鏈湴鐢ㄦ埛淇℃伅
+
+### 鍗併�佺増鏈巻鍙�
+
+- **v1.0** (2025-10-19): 鍒濆鐗堟湰锛屾敮鎸丱A鐢ㄦ埛ID鐨勬樉绀恒�佸垱寤哄拰淇敼
+  - 鍚庣getInfo鎺ュ彛杩斿洖oaUserId
+  - 鍓嶇store淇濆瓨oaUserId
+  - 鍚庡彴绠$悊鏀寔缂栬緫oaUserId
+  - 绉诲姩绔敮鎸佽闂畂aUserId
diff --git "a/prd/adminID\345\217\202\346\225\260\344\277\256\346\255\243\350\257\264\346\230\216.md" "b/prd/adminID\345\217\202\346\225\260\344\277\256\346\255\243\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..6620308
--- /dev/null
+++ "b/prd/adminID\345\217\202\346\225\260\344\277\256\346\255\243\350\257\264\346\230\216.md"
@@ -0,0 +1,293 @@
+# adminID 鍙傛暟淇璇存槑
+
+## 馃搵 闂鎻忚堪
+
+鍦ㄦ棫绯荤粺鍚屾鍔熻兘鐨勫垵濮嬪疄鐜颁腑锛宍adminID` 鍙傛暟浣跨敤鐨勬槸鏂扮郴缁熺殑 `creator_id`锛堢敤鎴稩D锛夛紝浣嗗疄闄呭簲璇ヤ娇鐢ㄨ鐢ㄦ埛瀵瑰簲鐨� **OA_UserID**銆�
+
+---
+
+## 鉁� 淇鏂规
+
+### 淇鍓� (v1.1)
+```java
+// 鐩存帴浣跨敤 creator_id
+params.put("adminID", task.getCreatorId() != null ? task.getCreatorId().toString() : "");
+```
+
+### 淇鍚� (v1.2)
+```java
+// 閫氳繃 creator_id 鏌ヨ鐢ㄦ埛琛紝鑾峰彇 oa_user_id
+String adminID = "";
+if (task.getCreatorId() != null) {
+    try {
+        SysUser creator = sysUserMapper.selectUserById(task.getCreatorId());
+        if (creator != null && creator.getOaUserId() != null) {
+            adminID = creator.getOaUserId().toString();
+            log.info("鑾峰彇鍒涘缓浜篛A_UserID鎴愬姛锛岀敤鎴稩D: {}, OA_UserID: {}", task.getCreatorId(), adminID);
+        } else {
+            log.warn("鍒涘缓浜烘湭閰嶇疆OA_UserID锛岀敤鎴稩D: {}", task.getCreatorId());
+        }
+    } catch (Exception e) {
+        log.error("鏌ヨ鍒涘缓浜篛A_UserID寮傚父锛岀敤鎴稩D: {}", task.getCreatorId(), e);
+    }
+}
+params.put("adminID", adminID);
+```
+
+---
+
+## 馃攽 鏁版嵁鏄犲皠鍏崇郴
+
+```
+鏂扮郴缁熶换鍔¤〃 (sys_task)
+    鈫�
+creator_id (鍒涘缓浜篒D锛屼緥濡�: 10)
+    鈫�
+鏌ヨ鐢ㄦ埛琛� (sys_user)
+    鈫�
+oa_user_id (OA绯荤粺鐢ㄦ埛ID锛屼緥濡�: 1001)
+    鈫�
+浼犻�掔粰鏃х郴缁�
+    鈫�
+adminID 鍙傛暟 (渚嬪: "1001")
+    鈫�
+鏃х郴缁� ServiceOrder 琛�
+    鈫�
+ServiceOrd_CC_ID 瀛楁
+```
+
+---
+
+## 馃搳 瀵规瘮琛�
+
+| 椤圭洰 | v1.1 (閿欒) | v1.2 (姝g‘) |
+|------|------------|------------|
+| **鍙傛暟鏉ユ簮** | `task.creator_id` | `user.oa_user_id` |
+| **绀轰緥鍊�** | `10` (鏂扮郴缁熺敤鎴稩D) | `1001` (OA绯荤粺鐢ㄦ埛ID) |
+| **鏌ヨ閫昏緫** | 鐩存帴鑾峰彇 | 鍏堟煡璇㈢敤鎴疯〃鍐嶈幏鍙� |
+| **鏃ュ織璁板綍** | 鏃� | 璇︾粏鐨勬垚鍔�/澶辫触鏃ュ織 |
+| **绌哄�煎鐞�** | 杩斿洖绌哄瓧绗︿覆 | 杩斿洖绌哄瓧绗︿覆 + 璀﹀憡鏃ュ織 |
+| **鏃х郴缁熷叧鑱�** | 鉂� 鏃犳硶姝g‘鍏宠仈 | 鉁� 姝g‘鍏宠仈鍒癘A绠$悊鍛� |
+
+---
+
+## 馃幆 涓轰粈涔堣浣跨敤 OA_UserID锛�
+
+### 1. 鏁版嵁涓�鑷存��
+- 鏂扮郴缁熺殑 `user_id` 鏄嚜澧炰富閿紝涓庢棫绯荤粺鐨勭鐞嗗憳ID涓嶅搴�
+- 鏃х郴缁熺殑绠$悊鍛業D灏辨槸OA绯荤粺鐨勭敤鎴稩D
+- 浣跨敤 `oa_user_id` 鎵嶈兘鍦ㄤ袱涓郴缁熼棿寤虹珛姝g‘鐨勬槧灏勫叧绯�
+
+### 2. 涓氬姟闇�姹�
+- 鏃х郴缁熶緷璧� OA_UserID 杩涜鏉冮檺鎺у埗
+- 鏃х郴缁熺殑鏁版嵁缁熻鍜屾姤琛ㄤ娇鐢� OA_UserID 浣滀负鍏抽敭瀛楁
+- 鏃х郴缁熺殑宸ヤ綔娴佸鎵瑰熀浜� OA_UserID
+
+### 3. 鏁版嵁杩芥函
+- 鍦ㄦ棫绯荤粺涓彲浠ラ�氳繃 ServiceOrd_CC_ID 鏌ユ壘鍒版纭殑鍒涘缓浜�
+- 渚夸簬璺ㄧ郴缁熺殑鏁版嵁鍒嗘瀽鍜屽璁�
+
+---
+
+## 馃敡 浠g爜淇敼鍐呭
+
+### 1. 娣诲姞渚濊禆娉ㄥ叆
+
+**鏂囦欢**: `LegacySystemSyncServiceImpl.java`
+
+```java
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.system.mapper.SysUserMapper;
+
+// ...
+
+@Autowired
+private SysUserMapper sysUserMapper;
+```
+
+### 2. 淇敼鍙傛暟鏋勫缓閫昏緫
+
+**鏂囦欢**: `LegacySystemSyncServiceImpl.java`  
+**鏂规硶**: `buildSyncParams()`  
+**浣嶇疆**: 绗�223-237琛�
+
+鏇挎崲浜嗗師鏉ョ畝鍗曠殑 `creator_id` 鑾峰彇閫昏緫锛屾敼涓洪�氳繃鐢ㄦ埛琛ㄦ煡璇� `oa_user_id`銆�
+
+---
+
+## 鈿狅笍 娉ㄦ剰浜嬮」
+
+### 1. 鐢ㄦ埛蹇呴』閰嶇疆 OA_UserID
+
+**鎿嶄綔璺緞**:
+```
+鍚庡彴绠$悊 鈫� 绯荤粺绠$悊 鈫� 鐢ㄦ埛绠$悊 鈫� 缂栬緫鐢ㄦ埛 鈫� OA鐢ㄦ埛ID
+```
+
+**濡傛灉鏈厤缃�**:
+- 鍚屾鏃朵細璁板綍璀﹀憡鏃ュ織
+- `adminID` 浼犻�掔┖瀛楃涓�
+- 鏃х郴缁熷彲鑳芥嫆缁濆垱寤鸿鍗曪紙鍙栧喅浜庢棫绯荤粺鐨勯獙璇佽鍒欙級
+
+### 2. 鏁版嵁搴撳瓧娈佃姹�
+
+纭繚 `sys_user` 琛ㄦ湁 `oa_user_id` 瀛楁锛�
+```sql
+-- 妫�鏌ュ瓧娈垫槸鍚﹀瓨鍦�
+SELECT COLUMN_NAME 
+FROM INFORMATION_SCHEMA.COLUMNS 
+WHERE TABLE_NAME = 'sys_user' 
+  AND COLUMN_NAME = 'oa_user_id';
+```
+
+濡傛灉涓嶅瓨鍦紝闇�瑕佹墽琛屼箣鍓嶇殑杩佺Щ鑴氭湰娣诲姞璇ュ瓧娈点��
+
+### 3. 鍘嗗彶鏁版嵁澶勭悊
+
+瀵逛簬宸茬粡鍚屾浣嗕娇鐢ㄩ敊璇� adminID 鐨勮鍗曪細
+- 闇�瑕佸湪鏃х郴缁熶腑鎵嬪姩淇锛堝鏋滃繀瑕侊級
+- 鎴栬�呮爣璁颁负鏃犳晥锛岄噸鏂板垱寤鸿鍗�
+
+---
+
+## 馃И 娴嬭瘯楠岃瘉
+
+### 娴嬭瘯姝ラ
+
+1. **鍑嗗娴嬭瘯鐢ㄦ埛**
+   ```sql
+   -- 涓烘祴璇曠敤鎴疯缃� oa_user_id
+   UPDATE sys_user 
+   SET oa_user_id = 1001 
+   WHERE user_id = 10;
+   ```
+
+2. **鍒涘缓娴嬭瘯浠诲姟**
+   - 浠ヨ鐢ㄦ埛韬唤鐧诲綍
+   - 鍒涘缓涓�涓�ユ晳杞繍浠诲姟
+
+3. **鏌ョ湅鍚屾鏃ュ織**
+   ```log
+   INFO  LegacySystemSyncServiceImpl - 鑾峰彇鍒涘缓浜篛A_UserID鎴愬姛锛岀敤鎴稩D: 10, OA_UserID: 1001
+   ```
+
+4. **楠岃瘉鏁版嵁搴�**
+   ```sql
+   -- 鏌ョ湅鏂扮郴缁熻褰�
+   SELECT 
+       t.task_id,
+       t.creator_id,
+       u.oa_user_id,
+       e.legacy_service_ord_id
+   FROM sys_task t
+   JOIN sys_user u ON t.creator_id = u.user_id
+   JOIN sys_task_emergency e ON t.task_id = e.task_id
+   WHERE t.task_id = <浠诲姟ID>;
+   ```
+
+5. **楠岃瘉鏃х郴缁�**
+   ```sql
+   -- 鍦ㄦ棫绯荤粺鏌ヨ
+   SELECT 
+       ServiceOrdID,
+       ServiceOrd_CC_ID
+   FROM ServiceOrder
+   WHERE ServiceOrdID = <legacy_service_ord_id>;
+   
+   -- ServiceOrd_CC_ID 搴旇绛変簬 1001
+   ```
+
+---
+
+## 馃摑 褰卞搷鑼冨洿
+
+### 鍙楀奖鍝嶇殑鍔熻兘
+- 鉁� 鎬ユ晳杞繍浠诲姟鍚屾鍒版棫绯荤粺
+
+### 涓嶅彈褰卞搷鐨勫姛鑳�
+- 鉁� 浠诲姟鍒涘缓
+- 鉁� 浠诲姟鏌ヨ
+- 鉁� 浠诲姟鐘舵�佸彉鏇�
+- 鉁� 鍏朵粬绫诲瀷浠诲姟锛堢绁夎溅绛夛級
+
+---
+
+## 馃殌 閮ㄧ讲寤鸿
+
+### 寮�鍙戠幆澧�
+1. 鏇存柊浠g爜
+2. 涓烘祴璇曠敤鎴烽厤缃� OA_UserID
+3. 鍒涘缓娴嬭瘯浠诲姟楠岃瘉
+
+### 鐢熶骇鐜
+1. **鏁版嵁鍑嗗**: 纭繚鎵�鏈夌敤鎴烽兘閰嶇疆浜� OA_UserID
+   ```sql
+   -- 鏌ヨ鏈厤缃� OA_UserID 鐨勭敤鎴�
+   SELECT user_id, user_name, nick_name
+   FROM sys_user
+   WHERE oa_user_id IS NULL
+     AND del_flag = '0'
+     AND status = '0';
+   ```
+
+2. **鎵归噺閰嶇疆** (濡傛灉闇�瑕�):
+   ```sql
+   -- 绀轰緥锛氫粠鏃х郴缁熷鍏ユ槧灏勫叧绯�
+   UPDATE sys_user u
+   JOIN old_system_user_mapping m ON u.user_name = m.username
+   SET u.oa_user_id = m.oa_user_id;
+   ```
+
+3. **閮ㄧ讲鏇存柊**
+4. **楠岃瘉鍔熻兘**
+
+---
+
+## 馃摎 鐩稿叧鏂囨。
+
+- [鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md](./鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md) - 瀹屾暣鐨�66涓弬鏁拌鏄�
+- [鏃х郴缁熷悓姝ユ洿鏂拌鏄�-v1.1.md](./鏃х郴缁熷悓姝ユ洿鏂拌鏄�-v1.1.md) - 璇︾粏鐨勬洿鏂拌鏄�
+- [鏃х郴缁熷悓姝ラ厤缃鏄�.md](./鏃х郴缁熷悓姝ラ厤缃鏄�.md) - 閰嶇疆鎸囧崡
+- [鏃х郴缁熷悓姝�-蹇�熷紑濮�.md](./鏃х郴缁熷悓姝�-蹇�熷紑濮�.md) - 蹇�熶笂鎵�
+
+---
+
+## 馃摓 FAQ
+
+### Q1: 濡傛灉鐢ㄦ埛娌℃湁閰嶇疆 OA_UserID 浼氭�庢牱锛�
+
+**A**: 
+- 鍚屾鏃朵細璁板綍璀﹀憡鏃ュ織
+- `adminID` 鍙傛暟浼犻�掔┖瀛楃涓�
+- 鏃х郴缁熷彲鑳芥嫆缁濆垱寤鸿鍗曪紝瀵艰嚧鍚屾澶辫触
+- **寤鸿**: 鎻愬墠涓烘墍鏈夌敤鎴烽厤缃� OA_UserID
+
+### Q2: 宸茬粡鍚屾鐨勯敊璇暟鎹�庝箞澶勭悊锛�
+
+**A**: 
+- 濡傛灉褰卞搷涓氬姟锛岄渶瑕佸湪鏃х郴缁熶腑鎵嬪姩淇
+- 鎴栬�呭垹闄ゆ棫绯荤粺涓殑閿欒璁㈠崟锛岄噸鏂板悓姝�
+- 鍙互閫氳繃 `legacy_service_ord_id` 瀛楁瀹氫綅鍒版棫绯荤粺璁㈠崟
+
+### Q3: 濡備綍鎵归噺涓虹敤鎴烽厤缃� OA_UserID锛�
+
+**A**: 
+```sql
+-- 鏂规硶1: 浠庢棫绯荤粺瀵煎叆
+-- 鍋囪鏃х郴缁熸湁鐢ㄦ埛鍚嶅拰OA_UserID鐨勬槧灏勮〃
+
+-- 鏂规硶2: 濡傛灉OA_UserID瑙勫垯鍥哄畾
+-- 渚嬪锛歄A_UserID = 1000 + user_id
+UPDATE sys_user 
+SET oa_user_id = 1000 + user_id
+WHERE oa_user_id IS NULL;
+
+-- 鏂规硶3: 閫氳繃Excel瀵煎叆
+-- 鍦ㄥ悗鍙扮敤鎴风鐞嗕腑浣跨敤瀵煎叆鍔熻兘
+```
+
+---
+
+**淇鏃堕棿**: 2025-01-20  
+**褰撳墠鐗堟湰**: v1.2  
+**鐘舵��**: 鉁� 宸蹭慨姝o紝寰呮祴璇�
diff --git "a/prd/\344\273\273\345\212\241\347\261\273\345\236\213\345\222\214\345\215\225\346\215\256\347\261\273\345\236\213\351\273\230\350\256\244\351\200\211\344\270\255\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\344\273\273\345\212\241\347\261\273\345\236\213\345\222\214\345\215\225\346\215\256\347\261\273\345\236\213\351\273\230\350\256\244\351\200\211\344\270\255\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..0aabccb
--- /dev/null
+++ "b/prd/\344\273\273\345\212\241\347\261\273\345\236\213\345\222\214\345\215\225\346\215\256\347\261\273\345\236\213\351\273\230\350\256\244\351\200\211\344\270\255\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,461 @@
+# 浠诲姟绫诲瀷鍜屽崟鎹被鍨嬮粯璁ら�変腑鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄥ垱寤烘�ユ晳杞繍浠诲姟椤甸潰涓紝**浠诲姟绫诲瀷**鍜�**鍗曟嵁绫诲瀷**瀛楁闇�瑕佸湪鏁版嵁鍔犺浇瀹屾垚鍚庤嚜鍔ㄩ�変腑绗竴涓�夐」锛屾彁鍗囩敤鎴蜂綋楠岋紝閬垮厤鐢ㄦ埛閬楁紡杩欎袱涓繀濉瓧娈点��
+
+## 瀹炵幇浣嶇疆
+
+**鍓嶇鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+## 涓氬姟鑳屾櫙
+
+鏍规嵁椤圭洰瑙勮寖锛�
+- 浠诲姟绫诲瀷鍜屽崟鎹被鍨嬮兘鏄�**蹇呭~瀛楁**
+- 鐢ㄦ埛鍦ㄥ垱寤轰换鍔℃椂鑻ユ湭閫夋嫨杩欎袱涓瓧娈碉紝浼氬鑷磋〃鍗曢獙璇佸け璐�
+- 榛樿閫変腑绗竴涓�夐」鍙互锛�
+  - 鍑忓皯鐢ㄦ埛鎿嶄綔姝ラ
+  - 闄嶄綆閬楁紡蹇呭~椤圭殑椋庨櫓
+  - 鎻愬崌琛ㄥ崟濉啓鏁堢巼
+
+## 鎶�鏈疄鐜�
+
+### 1. 浠诲姟绫诲瀷榛樿閫変腑
+
+淇敼 `loadEmergencyTaskTypes()` 鏂规硶锛屽湪鍔犺浇鏁版嵁鎴愬姛鍚庤嚜鍔ㄩ�変腑绗竴涓細
+
+```javascript
+loadEmergencyTaskTypes() {
+  getServiceOrderTypes().then(response => {
+    const list = response.data || []
+    this.emergencyTaskTypes = list
+    this.emergencyTaskTypeOptions = list.map(item => ({
+      id: item.vID,
+      text: item.vtext
+    }))
+    
+    // 榛樿閫変腑绗竴涓换鍔$被鍨�
+    if (this.emergencyTaskTypeOptions.length > 0) {
+      this.selectedEmergencyTaskType = this.emergencyTaskTypeOptions[0].text
+      this.selectedEmergencyTaskTypeId = this.emergencyTaskTypeOptions[0].id
+      console.log('榛樿閫変腑浠诲姟绫诲瀷:', this.selectedEmergencyTaskType)
+    }
+  }).catch(error => {
+    console.error('鍔犺浇浠诲姟绫诲瀷澶辫触:', error)
+    this.emergencyTaskTypes = []
+    this.emergencyTaskTypeOptions = []
+  })
+}
+```
+
+### 2. 鍗曟嵁绫诲瀷榛樿閫変腑
+
+淇敼 `loadDocumentTypes()` 鏂规硶锛屽湪鍔犺浇鏁版嵁鎴愬姛鍚庤嚜鍔ㄩ�変腑绗竴涓細
+
+```javascript
+loadDocumentTypes() {
+  getServiceOrdAreaTypes().then(response => {
+    const list = response.data || []
+    this.documentTypes = list
+    this.documentTypeOptions = list.map(item => ({
+      id: item.vID,
+      text: item.vtext
+    }))
+    
+    // 榛樿閫変腑绗竴涓崟鎹被鍨�
+    if (this.documentTypeOptions.length > 0) {
+      this.selectedDocumentType = this.documentTypeOptions[0].text
+      this.selectedDocumentTypeId = this.documentTypeOptions[0].id
+      console.log('榛樿閫変腑鍗曟嵁绫诲瀷:', this.selectedDocumentType)
+    }
+  }).catch(error => {
+    console.error('鍔犺浇鍗曟嵁绫诲瀷澶辫触:', error)
+    this.documentTypes = []
+    this.documentTypeOptions = []
+  })
+}
+```
+
+### 3. 妯℃澘閮ㄥ垎
+
+picker缁勪欢閫氳繃鍙屽悜缁戝畾鏄剧ず閫変腑鐨勫�硷細
+
+```vue
+<!-- 浠诲姟绫诲瀷 -->
+<view class="form-item">
+  <view class="form-label required">浠诲姟绫诲瀷</view>
+  <picker mode="selector" :range="emergencyTaskTypeOptions" range-key="text" @change="onEmergencyTaskTypeChange">
+    <view class="form-input picker-input">
+      {{ selectedEmergencyTaskType || '璇烽�夋嫨浠诲姟绫诲瀷' }}
+      <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+    </view>
+  </picker>
+</view>
+
+<!-- 鍗曟嵁绫诲瀷 -->
+<view class="form-item">
+  <view class="form-label required">鍗曟嵁绫诲瀷</view>
+  <picker mode="selector" :range="documentTypeOptions" range-key="text" @change="onDocumentTypeChange">
+    <view class="form-input picker-input">
+      {{ selectedDocumentType || '璇烽�夋嫨鍗曟嵁绫诲瀷' }}
+      <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+    </view>
+  </picker>
+</view>
+```
+
+## 宸ヤ綔娴佺▼
+
+### 椤甸潰鍔犺浇娴佺▼
+
+```
+椤甸潰鍔犺浇 (onLoad)
+    鈫�
+璋冪敤 loadEmergencyTaskTypes()
+    鈫�
+浠� SQL Server 鍔犺浇浠诲姟绫诲瀷鍒楄〃
+    鈫�
+鏁版嵁鍔犺浇鎴愬姛
+    鈫�
+妫�鏌ュ垪琛ㄩ暱搴� > 0
+    鈫�
+璁剧疆 selectedEmergencyTaskType = 绗竴椤圭殑text
+璁剧疆 selectedEmergencyTaskTypeId = 绗竴椤圭殑id
+    鈫�
+UI 鑷姩鏇存柊锛屾樉绀洪�変腑鐨勪换鍔$被鍨�
+```
+
+鍗曟嵁绫诲瀷鐨勬祦绋嬬浉鍚屻��
+
+### 鐢ㄦ埛浜や簰娴佺▼
+
+1. **椤甸潰鍒濆鍖�**锛�
+   - 浠诲姟绫诲瀷鍜屽崟鎹被鍨嬮兘鑷姩閫変腑绗竴涓�夐」
+   - 鐢ㄦ埛鍙互鐪嬪埌宸叉湁榛樿鍊�
+
+2. **鐢ㄦ埛淇敼**锛�
+   - 鐢ㄦ埛鐐瑰嚮picker锛屽彲浠ラ噸鏂伴�夋嫨鍏朵粬閫夐」
+   - 閫夋嫨鍚庤Е鍙� `onEmergencyTaskTypeChange` 鎴� `onDocumentTypeChange`
+   - 鏇存柊閫変腑鐨勫��
+
+3. **琛ㄥ崟鎻愪氦**锛�
+   - 鍥犱负宸叉湁榛樿鍊硷紝蹇呭~楠岃瘉鏇村鏄撻�氳繃
+   - 鎻愪氦鏃朵娇鐢� `selectedEmergencyTaskTypeId` 鍜� `selectedDocumentTypeId`
+
+## 鏁版嵁缁撴瀯
+
+### 浠诲姟绫诲瀷鏁版嵁锛堟潵鑷� SQL Server - dictionary 琛級
+
+**鏌ヨ鏉′欢**: `vtitle='ServiceOrderType' AND vType>=1`
+
+```javascript
+emergencyTaskTypeOptions: [
+  {
+    id: 1,          // vID - 浠诲姟绫诲瀷ID
+    text: "鎬ユ晳杞繍"  // vtext - 浠诲姟绫诲瀷鍚嶇О
+  },
+  {
+    id: 2,
+    text: "闄㈤棿杞繍"
+  }
+  // ...
+]
+
+// 閫変腑鐨勫��
+selectedEmergencyTaskType: "鎬ユ晳杞繍"  // 绗竴涓殑text
+selectedEmergencyTaskTypeId: 1        // 绗竴涓殑id
+```
+
+### 鍗曟嵁绫诲瀷鏁版嵁锛堟潵鑷� SQL Server - dictionary 琛級
+
+**鏌ヨ鏉′欢**: `vtitle='ServiceOrdAreaType' AND vType>=1`
+
+```javascript
+documentTypeOptions: [
+  {
+    id: 1,          // vID - 鍗曟嵁绫诲瀷ID
+    text: "鏈湴鍗�"   // vtext - 鍗曟嵁绫诲瀷鍚嶇О
+  },
+  {
+    id: 2,
+    text: "澶栧湴鍗�"
+  }
+  // ...
+]
+
+// 閫変腑鐨勫��
+selectedDocumentType: "鏈湴鍗�"       // 绗竴涓殑text
+selectedDocumentTypeId: 1           // 绗竴涓殑id
+```
+
+## 鐩稿叧鎺ュ彛
+
+### 浠诲姟绫诲瀷鎺ュ彛
+
+**API**: `GET /api/dictionary/service-order-types`
+
+**鍚庣鏂规硶**: `getServiceOrderTypes()`
+
+**鏁版嵁婧�**: SQL Server - `dictionary` 琛�
+
+**鏌ヨ鏉′欢**: 
+```sql
+SELECT vID, vtext 
+FROM dictionary 
+WHERE vtitle = 'ServiceOrderType' 
+  AND vType >= 1
+ORDER BY vID
+```
+
+### 鍗曟嵁绫诲瀷鎺ュ彛
+
+**API**: `GET /api/dictionary/service-ord-area-types`
+
+**鍚庣鏂规硶**: `getServiceOrdAreaTypes()`
+
+**鏁版嵁婧�**: SQL Server - `dictionary` 琛�
+
+**鏌ヨ鏉′欢**: 
+```sql
+SELECT vID, vtext 
+FROM dictionary 
+WHERE vtitle = 'ServiceOrdAreaType' 
+  AND vType >= 1
+ORDER BY vID
+```
+
+## 寮傚父澶勭悊
+
+### 1. 鏁版嵁鍔犺浇澶辫触
+
+```javascript
+.catch(error => {
+  console.error('鍔犺浇浠诲姟绫诲瀷澶辫触:', error)
+  this.emergencyTaskTypes = []
+  this.emergencyTaskTypeOptions = []
+})
+```
+
+**琛ㄧ幇**锛�
+- 閫夐」鍒楄〃涓虹┖
+- picker鏄剧ず"璇烽�夋嫨浠诲姟绫诲瀷"
+- 涓嶄細鑷姩閫変腑浠讳綍鍊�
+
+### 2. 鏁版嵁涓虹┖
+
+```javascript
+if (this.emergencyTaskTypeOptions.length > 0) {
+  // 鍙湁鍦ㄦ湁鏁版嵁鏃舵墠璁剧疆榛樿鍊�
+}
+```
+
+**琛ㄧ幇**锛�
+- 涓嶈缃粯璁ゅ��
+- picker淇濇寔绌虹姸鎬�
+- 鐢ㄦ埛闇�瑕佹墜鍔ㄩ�夋嫨锛堜絾娌℃湁鍙�夐」锛�
+
+### 3. 鐢ㄦ埛鎵嬪姩娓呯┖閫夋嫨
+
+铏界劧picker缁勪欢涓嶆敮鎸佹竻绌烘搷浣滐紝浣嗛�昏緫涓婅�冭檻锛�
+- 鐢ㄦ埛鍙互閲嶆柊閫夋嫨鍏朵粬閫夐」
+- 蹇呭~楠岃瘉浼氬湪鎻愪氦鏃舵鏌ユ槸鍚︽湁鍊�
+
+## 蹇呭~楠岃瘉
+
+鍦ㄨ〃鍗曟彁浜ゆ椂锛岄渶瑕侀獙璇佽繖涓や釜瀛楁锛�
+
+```javascript
+submitTask() {
+  // 楠岃瘉浠诲姟绫诲瀷
+  if (!this.selectedEmergencyTaskTypeId) {
+    uni.showToast({
+      title: '璇烽�夋嫨浠诲姟绫诲瀷',
+      icon: 'none'
+    })
+    return
+  }
+  
+  // 楠岃瘉鍗曟嵁绫诲瀷
+  if (!this.selectedDocumentTypeId) {
+    uni.showToast({
+      title: '璇烽�夋嫨鍗曟嵁绫诲瀷',
+      icon: 'none'
+    })
+    return
+  }
+  
+  // ... 缁х画鎻愪氦閫昏緫
+}
+```
+
+## 浼樺寲寤鸿
+
+### 1. 鏅鸿兘榛樿閫夋嫨
+
+鏍规嵁鍘嗗彶鏁版嵁鎴栦娇鐢ㄩ鐜囷紝閫夋嫨鏈�甯哥敤鐨勭被鍨嬩綔涓洪粯璁ゅ�硷細
+
+```javascript
+// 绀轰緥锛氫紭鍏堥�夋嫨"鎬ユ晳杞繍"
+if (this.emergencyTaskTypeOptions.length > 0) {
+  const defaultType = this.emergencyTaskTypeOptions.find(t => t.text === '鎬ユ晳杞繍')
+  if (defaultType) {
+    this.selectedEmergencyTaskType = defaultType.text
+    this.selectedEmergencyTaskTypeId = defaultType.id
+  } else {
+    // 濡傛灉娌℃湁鎵惧埌锛岄�夋嫨绗竴涓�
+    this.selectedEmergencyTaskType = this.emergencyTaskTypeOptions[0].text
+    this.selectedEmergencyTaskTypeId = this.emergencyTaskTypeOptions[0].id
+  }
+}
+```
+
+### 2. 鐢ㄦ埛鍋忓ソ璁板繂
+
+璁颁綇鐢ㄦ埛涓婃閫夋嫨鐨勭被鍨嬶紝涓嬫鑷姩閫変腑锛�
+
+```javascript
+// 鍔犺浇鐢ㄦ埛鍋忓ソ
+const lastTaskType = uni.getStorageSync('lastTaskType')
+if (lastTaskType && this.emergencyTaskTypeOptions.some(t => t.id === lastTaskType)) {
+  const selected = this.emergencyTaskTypeOptions.find(t => t.id === lastTaskType)
+  this.selectedEmergencyTaskType = selected.text
+  this.selectedEmergencyTaskTypeId = selected.id
+} else {
+  // 浣跨敤榛樿绗竴涓�
+  this.selectedEmergencyTaskType = this.emergencyTaskTypeOptions[0].text
+  this.selectedEmergencyTaskTypeId = this.emergencyTaskTypeOptions[0].id
+}
+
+// 淇濆瓨鐢ㄦ埛閫夋嫨
+onEmergencyTaskTypeChange(e) {
+  const index = e.detail.value
+  const selected = this.emergencyTaskTypeOptions[index]
+  this.selectedEmergencyTaskType = selected.text
+  this.selectedEmergencyTaskTypeId = selected.id
+  
+  // 璁颁綇鐢ㄦ埛鍋忓ソ
+  uni.setStorageSync('lastTaskType', selected.id)
+}
+```
+
+### 3. 鏍规嵁褰掑睘鏈烘瀯鑷姩閫夋嫨
+
+涓嶅悓鍒嗗叕鍙稿彲鑳芥湁涓嶅悓鐨勫父鐢ㄧ被鍨嬶細
+
+```javascript
+loadEmergencyTaskTypes() {
+  getServiceOrderTypes().then(response => {
+    const list = response.data || []
+    this.emergencyTaskTypeOptions = list.map(item => ({
+      id: item.vID,
+      text: item.vtext
+    }))
+    
+    // 鏍规嵁鍒嗗叕鍙歌缃粯璁ょ被鍨�
+    const branchDefaults = {
+      '骞垮窞鍒嗗叕鍙�': '闄㈤棿杞繍',
+      '娣卞湷鍒嗗叕鍙�': '鎬ユ晳杞繍'
+    }
+    
+    const defaultText = branchDefaults[this.currentUser.branchCompanyName]
+    if (defaultText) {
+      const defaultType = this.emergencyTaskTypeOptions.find(t => t.text === defaultText)
+      if (defaultType) {
+        this.selectedEmergencyTaskType = defaultType.text
+        this.selectedEmergencyTaskTypeId = defaultType.id
+        return
+      }
+    }
+    
+    // 濡傛灉娌℃湁閰嶇疆鎴栨壘涓嶅埌锛屼娇鐢ㄧ涓�涓�
+    if (this.emergencyTaskTypeOptions.length > 0) {
+      this.selectedEmergencyTaskType = this.emergencyTaskTypeOptions[0].text
+      this.selectedEmergencyTaskTypeId = this.emergencyTaskTypeOptions[0].id
+    }
+  })
+}
+```
+
+## 璋冭瘯鏃ュ織
+
+鍔熻兘鍖呭惈璋冭瘯鏃ュ織锛屼究浜庢帓鏌ラ棶棰橈細
+
+```javascript
+console.log('榛樿閫変腑浠诲姟绫诲瀷:', this.selectedEmergencyTaskType)
+console.log('榛樿閫変腑鍗曟嵁绫诲瀷:', this.selectedDocumentType)
+```
+
+鍦ㄥ紑鍙戠幆澧冨彲浠ョ湅鍒帮細
+```
+榛樿閫変腑浠诲姟绫诲瀷: 鎬ユ晳杞繍
+榛樿閫変腑鍗曟嵁绫诲瀷: 鏈湴鍗�
+```
+
+## 鐩稿叧瑙勮寖
+
+鏍规嵁椤圭洰瑙勮寖璁板繂锛�
+
+1. **浠诲姟绫诲瀷蹇呭~鏍¢獙**锛坢emory: 03ff216f锛夛細
+   - 鎬ユ晳杞繍浠诲姟鍒涘缓鏃讹紝浠诲姟绫诲瀷瀛楁蹇呴』杩涜闈炵┖鏍¢獙
+   - 鏈�夋嫨鏃跺簲闃绘琛ㄥ崟鎻愪氦骞舵彁绀虹敤鎴�
+   - 鉁� 榛樿閫変腑绗竴涓彲浠ラ檷浣庨仐婕忛闄�
+
+2. **鍗曟嵁绫诲瀷蹇呭~鏍¢獙**锛坢emory: d58c004f锛夛細
+   - 鎬ユ晳杞繍浠诲姟鍒涘缓鏃讹紝鍗曟嵁绫诲瀷瀛楁蹇呴』杩涜闈炵┖鏍¢獙
+   - 鏈�夋嫨鏃跺簲闃绘琛ㄥ崟鎻愪氦骞舵彁绀虹敤鎴�
+   - 鉁� 榛樿閫変腑绗竴涓彲浠ラ檷浣庨仐婕忛闄�
+
+## 娴嬭瘯寤鸿
+
+### 娴嬭瘯鍦烘櫙1锛氭甯稿姞杞�
+
+**鎿嶄綔**锛�
+1. 鎵撳紑鍒涘缓鎬ユ晳杞繍浠诲姟椤甸潰
+2. 绛夊緟鏁版嵁鍔犺浇瀹屾垚
+
+**棰勬湡缁撴灉**锛�
+- 浠诲姟绫诲瀷瀛楁鏄剧ず绗竴涓�夐」鐨勬枃鏈紙濡�"鎬ユ晳杞繍"锛�
+- 鍗曟嵁绫诲瀷瀛楁鏄剧ず绗竴涓�夐」鐨勬枃鏈紙濡�"鏈湴鍗�"锛�
+- 鎺у埗鍙拌緭鍑洪粯璁ら�変腑鏃ュ織
+
+### 娴嬭瘯鍦烘櫙2锛氭暟鎹负绌�
+
+**鎿嶄綔**锛�
+1. 妯℃嫙鍚庣杩斿洖绌烘暟缁�
+2. 鎵撳紑椤甸潰
+
+**棰勬湡缁撴灉**锛�
+- 浠诲姟绫诲瀷鍜屽崟鎹被鍨嬮兘鏄剧ず"璇烽�夋嫨..."
+- 涓嶄細鎶ラ敊
+- 鐢ㄦ埛鏃犳硶閫夋嫨锛堝洜涓烘病鏈夐�夐」锛�
+
+### 娴嬭瘯鍦烘櫙3锛氱敤鎴烽噸鏂伴�夋嫨
+
+**鎿嶄綔**锛�
+1. 椤甸潰鍔犺浇鍚庯紝榛樿閫変腑绗竴涓�
+2. 鐢ㄦ埛鐐瑰嚮picker锛岄�夋嫨鍏朵粬閫夐」
+
+**棰勬湡缁撴灉**锛�
+- 鏄剧ず鏇存柊涓虹敤鎴烽�夋嫨鐨勯�夐」
+- `selectedEmergencyTaskTypeId` 鏇存柊涓烘柊閫夐」鐨処D
+- 鎻愪氦鏃朵娇鐢ㄦ柊閫夋嫨鐨勫��
+
+### 娴嬭瘯鍦烘櫙4锛氳〃鍗曟彁浜ら獙璇�
+
+**鎿嶄綔**锛�
+1. 椤甸潰鍔犺浇鍚庢湁榛樿鍊�
+2. 濉啓鍏朵粬蹇呭~瀛楁
+3. 鐐瑰嚮鎻愪氦
+
+**棰勬湡缁撴灉**锛�
+- 浠诲姟绫诲瀷鍜屽崟鎹被鍨嬮獙璇侀�氳繃
+- 涓嶄細鎻愮ず"璇烽�夋嫨浠诲姟绫诲瀷"鎴�"璇烽�夋嫨鍗曟嵁绫诲瀷"
+- 浣跨敤榛樿閫変腑鐨処D鎻愪氦鏁版嵁
+
+## 鐗堟湰鍘嗗彶
+
+- **2025-01-25 v1**: 鍒濆鐗堟湰锛屽疄鐜颁换鍔$被鍨嬪拰鍗曟嵁绫诲瀷榛樿閫変腑鍔熻兘
+  - 鍦� `loadEmergencyTaskTypes()` 涓坊鍔犻粯璁ら�変腑閫昏緫
+  - 鍦� `loadDocumentTypes()` 涓坊鍔犻粯璁ら�変腑閫昏緫
+  - 娣诲姞璋冭瘯鏃ュ織杈撳嚭
+  - 娣诲姞鏁扮粍闀垮害妫�鏌ワ紝閬垮厤绌烘暟缁勯敊璇�
diff --git "a/prd/\344\273\273\345\212\241\350\275\246\350\276\206car_id\345\222\214dept_id\350\277\207\346\273\244\350\257\264\346\230\216.md" "b/prd/\344\273\273\345\212\241\350\275\246\350\276\206car_id\345\222\214dept_id\350\277\207\346\273\244\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..e432c7a
--- /dev/null
+++ "b/prd/\344\273\273\345\212\241\350\275\246\350\276\206car_id\345\222\214dept_id\350\277\207\346\273\244\350\257\264\346\230\216.md"
@@ -0,0 +1,342 @@
+# 浠诲姟杞﹁締car_id鍜宒ept_id杩囨护鍔熻兘璇存槑
+
+## 闇�姹傝儗鏅�
+
+鍦ㄦ�ユ晳杞繍浠诲姟鍒涘缓椤甸潰涓紝閫夋嫨浠诲姟杞﹁締鏃堕渶瑕佺‘淇濓細
+1. 鍙樉绀篳car_id`涓嶄负绌虹殑杞﹁締锛堝凡鍦ㄦ棫绯荤粺涓瓨鍦ㄧ殑杞﹁締锛�
+2. 鍙樉绀篳dept_id`涓嶄负绌虹殑杞﹁締锛堝凡鍒嗛厤缁欓儴闂ㄧ殑杞﹁締锛�
+3. 閬垮厤鐢ㄦ埛閫夋嫨鍒版棤鏁堟垨鏈畬鎴愰厤缃殑杞﹁締鏁版嵁
+
+## 鏁版嵁璇存槑
+
+### tb_vehicle_info琛ㄥ瓧娈�
+- **car_id**: 鏃х郴缁燂紙SQL Server锛変腑鐨勮溅杈咺D锛岀敤浜庡叧鑱旀棫绯荤粺鏁版嵁
+- **dept_id**: 杞﹁締鎵�灞為儴闂↖D锛屽叧鑱攕ys_dept琛�
+- **vehicle_no**: 杞︾墝鍙�
+- **status**: 杞﹁締鐘舵�侊紙0-姝e父锛�1-鍋滅敤锛�
+
+### 杩囨护瑙勫垯
+鍙湁鍚屾椂婊¤冻浠ヤ笅鏉′欢鐨勮溅杈嗘墠浼氬湪浠诲姟鍒涘缓鏃舵樉绀猴細
+- `car_id IS NOT NULL AND car_id != ''` - 杞﹁締宸插湪鏃х郴缁熶腑瀛樺湪
+- `dept_id IS NOT NULL` - 杞﹁締宸插垎閰嶇粰閮ㄩ棬
+- `status = '0'` - 杞﹁締鐘舵�佹甯革紙鐢辩幇鏈夐�昏緫淇濊瘉锛�
+
+## 瀹炵幇鏂规
+
+### 鍚庣SQL淇敼
+
+**鏂囦欢**: `ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml`
+
+**淇敼浣嶇疆**: `selectVehicleInfoList` 鏌ヨ璇彞
+
+**淇敼鍓�**:
+```xml
+<select id="selectVehicleInfoList" parameterType="VehicleInfo" resultMap="VehicleInfoResult">
+    <include refid="selectVehicleInfoVo"/>
+    <where>  
+        <if test="vehicleNo != null  and vehicleNo != ''"> and v.vehicle_no = #{vehicleNo}</if>
+        <if test="deviceId != null  and deviceId != ''"> and v.device_id = #{deviceId}</if>
+        <if test="vehicleType != null  and vehicleType != ''\"> and v.vehicle_type = #{vehicleType}</if>
+        <if test="vehicleBrand != null  and vehicleBrand != ''"> and v.vehicle_brand = #{vehicleBrand}</if>
+        <if test="vehicleModel != null  and vehicleModel != ''"> and v.vehicle_model = #{vehicleModel}</if>
+        <if test="status != null  and status != ''"> and v.status = #{status}</if>
+        <if test="platformCode != null  and platformCode != ''"> and v.platform_code = #{platformCode}</if>
+        <if test="deptId != null"> and v.dept_id = #{deptId}</if>
+    </where>
+</select>
+```
+
+**淇敼鍚�**:
+```xml
+<select id="selectVehicleInfoList" parameterType="VehicleInfo" resultMap="VehicleInfoResult">
+    <include refid="selectVehicleInfoVo"/>
+    <where>  
+        <if test="vehicleNo != null  and vehicleNo != ''"> and v.vehicle_no = #{vehicleNo}</if>
+        <if test="deviceId != null  and deviceId != ''"> and v.device_id = #{deviceId}</if>
+        <if test="vehicleType != null  and vehicleType != ''"> and v.vehicle_type = #{vehicleType}</if>
+        <if test="vehicleBrand != null  and vehicleBrand != ''"> and v.vehicle_brand = #{vehicleBrand}</if>
+        <if test="vehicleModel != null  and vehicleModel != ''"> and v.vehicle_model = #{vehicleModel}</if>
+        <if test="status != null  and status != ''"> and v.status = #{status}</if>
+        <if test="platformCode != null  and platformCode != ''"> and v.platform_code = #{platformCode}</if>
+        <if test="deptId != null"> and v.dept_id = #{deptId}</if>
+        <!-- 浠诲姟杞﹁締閫夋嫨蹇呴』杩囨护锛氬彧鏄剧ずcar_id鍜宒ept_id閮戒笉涓虹┖鐨勮溅杈� -->
+        and v.car_id is not null and v.car_id != ''
+        and v.dept_id is not null
+    </where>
+</select>
+```
+
+**鍏抽敭鍙樺寲**:
+- 鉁� 娣诲姞 `and v.car_id is not null and v.car_id != ''` - 杩囨护car_id涓虹┖鐨勮褰�
+- 鉁� 娣诲姞 `and v.dept_id is not null` - 杩囨护dept_id涓虹┖鐨勮褰�
+- 鉁� 杩欎簺鏉′欢鏄己鍒舵�х殑锛屼笉鍙楀姩鎬佸弬鏁版帶鍒讹紝濮嬬粓鐢熸晥
+
+## 褰卞搷鑼冨洿
+
+### 鐩存帴褰卞搷
+
+#### 1. 浠诲姟杞﹁締閫夋嫨
+**椤甸潰**: `app/pages/task/create-emergency.vue`
+
+**褰卞搷鏂规硶**: `getAvailableVehicles()`
+```javascript
+getAvailableVehicles() {
+  const deptId = this.currentUser.deptId
+  return listAvailableVehicles(deptId, 'EMERGENCY').then(response => {
+    const vehicleList = response.data || response.rows || []
+    // 杩斿洖鐨勫垪琛ㄥ凡鑷姩杩囨护锛氬彧鍖呭惈car_id鍜宒ept_id閮戒笉涓虹┖鐨勮溅杈�
+    this.vehicleOptions = vehicleList.map(vehicle => ({
+      id: vehicle.vehicleId,
+      name: vehicle.vehicleNo,
+      type: vehicle.vehicleType,
+      status: vehicle.status
+    }))
+    this.vehicles = this.vehicleOptions.map(v => v.name)
+  }).catch(() => {
+    this.vehicles = []
+  })
+}
+```
+
+**鏁堟灉**:
+- 鍙樉绀烘湁鏁堢殑銆佸凡閰嶇疆瀹屾暣鐨勮溅杈�
+- 鐢ㄦ埛鏃犳硶閫夋嫨鍒版棤鏁堣溅杈�
+- 鎻愬崌鏁版嵁璐ㄩ噺
+
+#### 2. 杞﹁締缁戝畾
+**椤甸潰**: `app/pages/bind-vehicle.vue`
+
+**褰卞搷**:
+- 鐢ㄦ埛缁戝畾杞﹁締鏃讹紝鍙兘鐪嬪埌鏈夋晥杞﹁締
+- 閬垮厤缁戝畾鍒版棤鏁堣溅杈�
+
+#### 3. 鍚庡彴杞﹁締绠$悊
+**璺緞**: 绯荤粺绠$悊 > 杞﹁締绠$悊
+
+**褰卞搷**:
+- 杞﹁締鍒楄〃鏌ヨ浼氳嚜鍔ㄨ繃婊ゆ棤鏁堣褰�
+- 绠$悊鍛橀渶瑕佺‘淇濇柊澧炶溅杈嗘椂濉啓car_id鍜宒ept_id
+
+### 闂存帴褰卞搷
+
+#### 1. 杞﹁締鍚屾
+**鏈嶅姟**: `VehicleSyncServiceImpl`
+
+**娉ㄦ剰浜嬮」**:
+- 浠嶴QL Server鍚屾杞﹁締鏃讹紝蹇呴』纭繚car_id鏈夊��
+- 寤鸿鍦ㄥ悓姝ユ椂鍚屾椂璁剧疆dept_id
+
+#### 2. 鏃х郴缁熸暟鎹叧鑱�
+**鍔熻兘**: 璋冨害鍗曞悓姝ャ�佹湇鍔″崟鍚屾
+
+**濂藉**:
+- 纭繚鏂扮郴缁熶腑鐨勮溅杈嗛兘鑳藉湪鏃х郴缁熶腑鎵惧埌瀵瑰簲璁板綍
+- 閬垮厤鍚屾鏃跺嚭鐜板叧鑱斿け璐�
+
+## 鏁版嵁淇寤鸿
+
+### 1. 妫�鏌ョ幇鏈夋暟鎹�
+
+鎵ц浠ヤ笅SQL鏌ヨ锛屾鏌ユ槸鍚︽湁car_id鎴杁ept_id涓虹┖鐨勮溅杈嗭細
+
+```sql
+-- 妫�鏌ar_id涓虹┖鐨勮溅杈�
+SELECT vehicle_id, vehicle_no, car_id, dept_id, status
+FROM tb_vehicle_info
+WHERE car_id IS NULL OR car_id = '';
+
+-- 妫�鏌ept_id涓虹┖鐨勮溅杈�
+SELECT vehicle_id, vehicle_no, car_id, dept_id, status
+FROM tb_vehicle_info
+WHERE dept_id IS NULL;
+
+-- 妫�鏌ヤ袱鑰呴兘涓虹┖鐨勮溅杈�
+SELECT vehicle_id, vehicle_no, car_id, dept_id, status
+FROM tb_vehicle_info
+WHERE (car_id IS NULL OR car_id = '') OR dept_id IS NULL;
+```
+
+### 2. 淇鏁版嵁
+
+#### 鏂规1锛氭墜鍔ㄨˉ鍏卌ar_id鍜宒ept_id
+
+```sql
+-- 绀轰緥锛氫负杞﹁締琛ュ厖car_id鍜宒ept_id
+UPDATE tb_vehicle_info
+SET car_id = '瀵瑰簲鐨勬棫绯荤粺杞﹁締ID',
+    dept_id = 瀵瑰簲鐨勯儴闂↖D
+WHERE vehicle_id = 鍏蜂綋鐨勮溅杈咺D;
+```
+
+#### 鏂规2锛氫粠鏃х郴缁熼噸鏂板悓姝�
+
+杩愯杞﹁締鍚屾瀹氭椂浠诲姟锛岀‘淇濇墍鏈夎溅杈嗛兘浠庢棫绯荤粺姝g‘鍚屾銆�
+
+#### 鏂规3锛氬垹闄ゆ棤鏁堟暟鎹�
+
+濡傛灉纭鏌愪簺杞﹁締纭疄鏃犳晥锛屽彲浠ュ垹闄わ細
+
+```sql
+-- 鍒犻櫎car_id鍜宒ept_id閮戒负绌虹殑杞﹁締
+DELETE FROM tb_vehicle_info
+WHERE (car_id IS NULL OR car_id = '') AND dept_id IS NULL;
+```
+
+**鈿狅笍 娉ㄦ剰**: 鍒犻櫎鍓嶈鍏堝浠芥暟鎹紒
+
+## 娴嬭瘯楠岃瘉
+
+### 娴嬭瘯鍦烘櫙1锛氭甯歌溅杈嗘樉绀�
+
+**鏁版嵁鍑嗗**:
+```sql
+INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status)
+VALUES ('绮12345', '1001', 100, '0');
+```
+
+**棰勬湡缁撴灉**: 杞﹁締鍦ㄤ换鍔″垱寤洪〉闈㈢殑涓嬫媺鍒楄〃涓樉绀�
+
+### 娴嬭瘯鍦烘櫙2锛歝ar_id涓虹┖鐨勮溅杈�
+
+**鏁版嵁鍑嗗**:
+```sql
+INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status)
+VALUES ('绮67890', NULL, 100, '0');
+```
+
+**棰勬湡缁撴灉**: 杞﹁締涓嶅湪浠诲姟鍒涘缓椤甸潰鐨勪笅鎷夊垪琛ㄤ腑鏄剧ず
+
+### 娴嬭瘯鍦烘櫙3锛歞ept_id涓虹┖鐨勮溅杈�
+
+**鏁版嵁鍑嗗**:
+```sql
+INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status)
+VALUES ('绮99999', '1002', NULL, '0');
+```
+
+**棰勬湡缁撴灉**: 杞﹁締涓嶅湪浠诲姟鍒涘缓椤甸潰鐨勪笅鎷夊垪琛ㄤ腑鏄剧ず
+
+### 娴嬭瘯鍦烘櫙4锛氫袱鑰呴兘涓虹┖鐨勮溅杈�
+
+**鏁版嵁鍑嗗**:
+```sql
+INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status)
+VALUES ('绮00000', NULL, NULL, '0');
+```
+
+**棰勬湡缁撴灉**: 杞﹁締涓嶅湪浠诲姟鍒涘缓椤甸潰鐨勪笅鎷夊垪琛ㄤ腑鏄剧ず
+
+### 娴嬭瘯鍦烘櫙5锛歝ar_id涓虹┖瀛楃涓�
+
+**鏁版嵁鍑嗗**:
+```sql
+INSERT INTO tb_vehicle_info (vehicle_no, car_id, dept_id, status)
+VALUES ('绮11111', '', 100, '0');
+```
+
+**棰勬湡缁撴灉**: 杞﹁締涓嶅湪浠诲姟鍒涘缓椤甸潰鐨勪笅鎷夊垪琛ㄤ腑鏄剧ず
+
+## 鏁版嵁娴佺▼
+
+```
+鍓嶇璋冪敤 getAvailableVehicles()
+    鈫�
+API: /task/vehicle/available
+    鈫�
+Service: SysTaskServiceImpl.getAvailableVehicles()
+    鈫�
+璁剧疆鏌ヨ鍙傛暟: status='0'
+    鈫�
+Mapper: VehicleInfoMapper.selectVehicleInfoList()
+    鈫�
+鎵цSQL鏌ヨ:
+  SELECT * FROM tb_vehicle_info v
+  WHERE v.status = '0'
+    AND v.car_id IS NOT NULL 
+    AND v.car_id != ''
+    AND v.dept_id IS NOT NULL
+    鈫�
+杩斿洖杩囨护鍚庣殑杞﹁締鍒楄〃
+    鈫�
+鍓嶇鏄剧ず杞﹁締涓嬫媺鍒楄〃
+```
+
+## 浼樺寲鏁堟灉
+
+### 1. 鏁版嵁璐ㄩ噺鎻愬崌
+- 鉁� 纭繚浠诲姟鍏宠仈鐨勮溅杈嗛兘鏄湁鏁堢殑
+- 鉁� 閬垮厤鍥犺溅杈嗘暟鎹笉瀹屾暣瀵艰嚧鐨勪笟鍔″紓甯�
+- 鉁� 鎻愰珮涓庢棫绯荤粺鐨勬暟鎹竴鑷存��
+
+### 2. 鐢ㄦ埛浣撻獙浼樺寲
+- 鉁� 鐢ㄦ埛鍙兘鐪嬪埌鍙敤鐨勮溅杈�
+- 鉁� 鍑忓皯閫夋嫨閿欒鐨勫彲鑳芥��
+- 鉁� 绠�鍖栬溅杈嗛�夋嫨娴佺▼
+
+### 3. 绯荤粺绋冲畾鎬�
+- 鉁� 閬垮厤鍥犲叧鑱旀暟鎹己澶卞鑷寸殑鍚屾澶辫触
+- 鉁� 闄嶄綆鏁版嵁寮傚父瀵逛笟鍔$殑褰卞搷
+- 鉁� 鎻愰珮绯荤粺鐨勫閿欐��
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 鏂板杞﹁締鏃剁殑瑕佹眰
+
+**鍚庡彴绠$悊绯荤粺**:
+- 绠$悊鍛樻柊澧炶溅杈嗘椂锛屽繀椤诲~鍐檆ar_id鍜宒ept_id
+- 寤鸿鍦ㄨ〃鍗曚腑璁剧疆涓哄繀濉」
+- 鍓嶇鏍¢獙锛氭彁浜ゅ墠楠岃瘉杩欎袱涓瓧娈典笉涓虹┖
+
+**杞﹁締鍚屾**:
+- 浠庢棫绯荤粺鍚屾杞﹁締鏃讹紝纭繚鑳借幏鍙栧埌car_id
+- 鍚屾鏃惰缃悎鐞嗙殑榛樿閮ㄩ棬锛坉ept_id锛�
+
+### 2. 鏁版嵁缁存姢
+
+**瀹氭湡妫�鏌�**:
+```sql
+-- 姣忔湀鎵ц涓�娆★紝妫�鏌ユ槸鍚︽湁鏂板鐨勬棤鏁堣溅杈�
+SELECT COUNT(*) as invalid_count
+FROM tb_vehicle_info
+WHERE (car_id IS NULL OR car_id = '') OR dept_id IS NULL;
+```
+
+**鏁版嵁鐩戞帶**:
+- 寤鸿鍦ㄥ悗鍙扮鐞嗙郴缁熶腑娣诲姞鏁版嵁璐ㄩ噺鐩戞帶
+- 褰撳彂鐜版棤鏁堣溅杈嗘椂锛屽強鏃堕�氱煡绠$悊鍛樺鐞�
+
+### 3. 杩佺Щ鍏煎鎬�
+
+**鍘嗗彶鏁版嵁澶勭悊**:
+- 瀵逛簬宸插垱寤虹殑浠诲姟锛屽叧鑱旂殑杞﹁締鍙兘鍖呭惈鏃犳晥鏁版嵁
+- 寤鸿鍦ㄤ换鍔¤鎯呴〉闈㈠仛瀹归敊澶勭悊
+- 鏄剧ず杞﹁締淇℃伅鏃讹紝濡傛灉car_id涓虹┖锛屾彁绀�"杞﹁締淇℃伅涓嶅畬鏁�"
+
+### 4. 涓氬姟閫昏緫褰卞搷
+
+**杞﹁締缁戝畾**:
+- 鐢ㄦ埛鍙兘缁戝畾鏈夋晥杞﹁締
+- 濡傛灉鐢ㄦ埛涔嬪墠缁戝畾浜嗘棤鏁堣溅杈嗭紝闇�瑕侀噸鏂扮粦瀹�
+
+**浠诲姟鍒嗛厤**:
+- 鍙兘灏嗕换鍔″垎閰嶇粰鏈夋晥杞﹁締
+- 閬垮厤鍒嗛厤鍒版棤鏁堣溅杈嗗鑷寸殑涓氬姟娴佽浆寮傚父
+
+## 鐩稿叧鏂囦欢
+
+### 鍚庣鏂囦欢
+- `ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml` - SQL鏌ヨ淇敼
+- `ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleInfoMapper.java` - Mapper鎺ュ彛
+- `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java` - 杞﹁締鏌ヨ鏈嶅姟
+
+### 鍓嶇鏂囦欢
+- `app/pages/task/create-emergency.vue` - 鎬ユ晳杞繍浠诲姟鍒涘缓椤甸潰
+- `app/pages/bind-vehicle.vue` - 杞﹁締缁戝畾椤甸潰
+- `app/api/vehicle.js` - 杞﹁締API鎺ュ彛
+
+### 鏂囨。鏂囦欢
+- `prd/浠诲姟杞﹁締car_id鍜宒ept_id杩囨护璇存槑.md`锛堟湰鏂囨。锛�
+
+## 鐗堟湰鍘嗗彶
+
+- **v1.0** (2025-10-25): 鍒濆鐗堟湰锛屽疄鐜癱ar_id鍜宒ept_id杩囨护鍔熻兘
diff --git "a/prd/\344\273\273\345\212\241\350\275\246\350\276\206\351\273\230\350\256\244\346\230\276\347\244\272\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\344\273\273\345\212\241\350\275\246\350\276\206\351\273\230\350\256\244\346\230\276\347\244\272\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..02255f1
--- /dev/null
+++ "b/prd/\344\273\273\345\212\241\350\275\246\350\276\206\351\273\230\350\256\244\346\230\276\347\244\272\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,294 @@
+# 浠诲姟杞﹁締榛樿鏄剧ず鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄥ垱寤烘�ユ晳杞繍浠诲姟椤甸潰涓紝浠诲姟杞﹁締瀛楁闇�瑕侀粯璁ゆ樉绀哄綋鍓嶇櫥褰曠敤鎴风粦瀹氱殑杞﹁締淇℃伅銆傚鏋滅敤鎴锋湭缁戝畾杞﹁締锛屽垯鏄剧ず涓虹┖骞跺厑璁哥敤鎴锋墜鍔ㄩ�夋嫨銆�
+
+## 瀹炵幇浣嶇疆
+
+**鍓嶇鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+## 鎶�鏈疄鐜�
+
+### 1. 妯℃澘閮ㄥ垎
+
+鍦ㄨ溅杈嗛�夋嫨鍣ㄤ腑娣诲姞`:value`缁戝畾锛屽叧鑱旇绠楀睘鎬selectedVehicleIndex`:
+
+```vue
+<picker mode="selector" :range="vehicles" :value="selectedVehicleIndex" @change="onVehicleChange">
+  <view class="form-input picker-input">
+    {{ selectedVehicle || '璇烽�夋嫨浠诲姟杞﹁締' }}
+    <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+  </view>
+</picker>
+```
+
+### 2. 璁$畻灞炴��
+
+娣诲姞`selectedVehicleIndex`璁$畻灞炴�э紝鍔ㄦ�佽绠楃粦瀹氳溅杈嗗湪杞﹁締鍒楄〃涓殑绱㈠紩锛�
+
+```javascript
+computed: {
+  // ...鍏朵粬璁$畻灞炴��
+  
+  // 璁$畻杞﹁締鍦╬icker涓殑绱㈠紩锛岀敤浜庨粯璁ら�変腑
+  selectedVehicleIndex() {
+    if (!this.selectedVehicle || this.vehicles.length === 0) {
+      return 0
+    }
+    const index = this.vehicles.findIndex(v => v === this.selectedVehicle)
+    return index !== -1 ? index : 0
+  }
+}
+```
+
+### 3. 椤甸潰鍔犺浇閫昏緫
+
+鍦╜onLoad`鐢熷懡鍛ㄦ湡涓紝鍏堝姞杞藉彲鐢ㄨ溅杈嗗垪琛紝鐒跺悗鑾峰彇骞惰缃敤鎴风粦瀹氱殑杞﹁締锛�
+
+```javascript
+onLoad(options) {
+  // 鍏堝姞杞借溅杈嗗垪琛紝鐒跺悗鍔犺浇缁戝畾杞﹁締淇℃伅
+  this.getAvailableVehicles().then(() => {
+    this.getUserBoundVehicleInfo()
+  })
+  // ...鍏朵粬鍒濆鍖�
+}
+```
+
+### 4. 鑾峰彇缁戝畾杞﹁締淇℃伅
+
+getUserBoundVehicleInfo()鏂规硶瀹炵幇杞﹁締缁戝畾閫昏緫锛�
+
+```javascript
+getUserBoundVehicleInfo() {
+  const userId = this.currentUser.userId
+  if (!userId) {
+    console.warn('鐢ㄦ埛ID涓嶅瓨鍦紝鏃犳硶鑾峰彇缁戝畾杞﹁締')
+    return
+  }
+  
+  getUserBoundVehicle(userId).then(response => {
+    const boundVehicle = response.data
+    
+    if (boundVehicle && boundVehicle.vehicleId) {
+      const boundVehicleNo = boundVehicle.vehicleNo
+      const boundVehicleId = boundVehicle.vehicleId
+      
+      console.log('鐢ㄦ埛缁戝畾鐨勮溅杈�:', boundVehicleNo, 'ID:', boundVehicleId)
+      
+      // 鍦ㄨ溅杈嗗垪琛ㄤ腑鏌ユ壘缁戝畾鐨勮溅杈�
+      const vehicleIndex = this.vehicleOptions.findIndex(v => 
+        v.id === boundVehicleId || v.name === boundVehicleNo
+      )
+      
+      if (vehicleIndex !== -1) {
+        // 璁剧疆榛樿閫変腑鐨勮溅杈�
+        this.selectedVehicle = this.vehicleOptions[vehicleIndex].name
+        this.selectedVehicleId = this.vehicleOptions[vehicleIndex].id
+        console.log('榛樿閫変腑杞﹁締:', this.selectedVehicle)
+      } else {
+        console.warn('缁戝畾鐨勮溅杈嗕笉鍦ㄥ彲鐢ㄨ溅杈嗗垪琛ㄤ腑')
+      }
+    } else {
+      console.log('鐢ㄦ埛鏈粦瀹氳溅杈�')
+    }
+  }).catch(error => {
+    console.error('鑾峰彇鐢ㄦ埛缁戝畾杞﹁締淇℃伅澶辫触:', error)
+  })
+}
+```
+
+## 宸ヤ綔娴佺▼
+
+1. **椤甸潰鍔犺浇鏃�**锛�
+   - 璋冪敤`getAvailableVehicles()`鍔犺浇褰撳墠閮ㄩ棬鐨勫彲鐢ㄨ溅杈嗗垪琛�
+   - 杞﹁締鍒楄〃鍔犺浇瀹屾垚鍚庯紝璋冪敤`getUserBoundVehicleInfo()`
+
+2. **鑾峰彇缁戝畾杞﹁締**锛�
+   - 璋冪敤`getUserProfile()` API鑾峰彇褰撳墠鐢ㄦ埛鐨勪釜浜轰俊鎭�
+   - 妫�鏌ョ敤鎴锋槸鍚︽湁缁戝畾杞﹁締锛坄userInfo.boundVehicle`锛�
+   - 濡傛灉鏈夌粦瀹氳溅杈嗭紝鎻愬彇杞﹁締缂栧彿鍜孖D
+
+3. **鍖归厤鍜岃缃�**锛�
+   - 鍦╜vehicleOptions`涓煡鎵惧尮閰嶇殑杞﹁締锛堟寜ID鎴栬溅杈嗙紪鍙峰尮閰嶏級
+   - 濡傛灉鎵惧埌锛岃缃甡selectedVehicle`鍜宍selectedVehicleId`
+   - 濡傛灉鏈壘鍒帮紝杈撳嚭璀﹀憡淇℃伅锛堝彲鑳借溅杈嗕笉鍦ㄥ彲鐢ㄥ垪琛ㄤ腑锛�
+
+4. **UI鏄剧ず**锛�
+   - 閫氳繃`selectedVehicleIndex`璁$畻灞炴�ц嚜鍔ㄨ绠楃储寮�
+   - picker缁勪欢閫氳繃`:value`缁戝畾绱㈠紩锛屾樉绀洪粯璁ら�変腑鐘舵��
+   - 鐢ㄦ埛鍙互鐪嬪埌宸茬粦瀹氱殑杞﹁締琚嚜鍔ㄩ�変腑
+
+## 鏁版嵁缁撴瀯
+
+### 鐢ㄦ埛缁戝畾杞﹁締淇℃伅锛堟潵鑷猤etUserBoundVehicle API锛�
+
+```javascript
+{
+  vehicleId: 123,           // 杞﹁締ID
+  vehicleNo: "绮12345",     // 杞﹁締缂栧彿
+  vehicleType: "鏁戞姢杞�",    // 杞﹁締绫诲瀷
+  deptId: 100,              // 鎵�灞為儴闂↖D
+  bindTime: "2025-01-25"     // 缁戝畾鏃堕棿
+}
+```
+
+### 杞﹁締閫夐」鏁版嵁
+
+```javascript
+vehicleOptions: [
+  {
+    id: 123,              // 杞﹁締ID
+    name: "绮12345",      // 杞﹁締缂栧彿
+    type: "鏁戞姢杞�",        // 杞﹁締绫诲瀷
+    status: "AVAILABLE"   // 杞﹁締鐘舵��
+  }
+]
+
+vehicles: ["绮12345", "绮67890", ...]  // picker鏄剧ず鐨勮溅杈嗙紪鍙锋暟缁�
+```
+
+## 寮傚父澶勭悊
+
+1. **鐢ㄦ埛鏈粦瀹氳溅杈�**锛�
+   - 杈撳嚭鏃ュ織锛�"鐢ㄦ埛鏈粦瀹氳溅杈�"
+   - 杞﹁締閫夋嫨鍣ㄤ繚鎸佷负绌猴紝鍏佽鐢ㄦ埛鎵嬪姩閫夋嫨
+
+2. **缁戝畾鐨勮溅杈嗕笉鍦ㄥ彲鐢ㄥ垪琛ㄤ腑**锛�
+   - 杈撳嚭璀﹀憡锛�"缁戝畾鐨勮溅杈嗕笉鍦ㄥ彲鐢ㄨ溅杈嗗垪琛ㄤ腑"
+   - 鍙兘鍘熷洜锛�
+     - 杞﹁締宸茶鍒犻櫎
+     - 杞﹁締鐨刞car_id`鎴朻dept_id`涓虹┖锛堣杩囨护锛�
+     - 杞﹁締鐘舵�佷笉鍙敤
+     - 杞﹁締涓嶅睘浜庡綋鍓嶉儴闂�
+
+3. **API璋冪敤澶辫触**锛�
+   - 鎹曡幏閿欒骞惰緭鍑猴細"鑾峰彇鐢ㄦ埛缁戝畾杞﹁締淇℃伅澶辫触"
+   - 涓嶅奖鍝嶉〉闈㈠叾浠栧姛鑳芥甯镐娇鐢�
+
+## 璋冭瘯鏃ュ織
+
+鍔熻兘鍖呭惈瀹屾暣鐨勬棩蹇楄緭鍑猴紝渚夸簬璋冭瘯锛�
+
+```javascript
+console.log('鐢ㄦ埛缁戝畾鐨勮溅杈�:', boundVehicleNo, 'ID:', boundVehicleId)
+console.log('榛樿閫変腑杞﹁締:', this.selectedVehicle)
+console.warn('缁戝畾鐨勮溅杈嗕笉鍦ㄥ彲鐢ㄨ溅杈嗗垪琛ㄤ腑')
+console.log('鐢ㄦ埛鏈粦瀹氳溅杈�')
+console.error('鑾峰彇鐢ㄦ埛缁戝畾杞﹁締淇℃伅澶辫触:', error)
+```
+
+## 鐩稿叧鎺ュ彛
+
+### GET /system/vehicle/user/bound/{userId}
+
+鑾峰彇鎸囧畾鐢ㄦ埛褰撳墠缁戝畾鐨勮溅杈嗕俊鎭��
+
+**璇锋眰鏂瑰紡**: GET
+
+**璇锋眰鍙傛暟**: 
+- `userId`: 鐢ㄦ埛ID锛堣矾寰勫弬鏁帮級
+
+**杩斿洖鏁版嵁绀轰緥**:
+```json
+{
+  "code": 200,
+  "msg": "鏌ヨ鎴愬姛",
+  "data": {
+    "vehicleId": 123,
+    "vehicleNo": "绮12345",
+    "vehicleType": "鏁戞姢杞�",
+    "deptId": 100,
+    "deptName": "骞垮窞鍒嗗叕鍙�",
+    "bindTime": "2025-01-25 10:30:00",
+    "userId": 1
+  }
+}
+```
+
+**寮傚父鎯呭喌**:
+```json
+{
+  "code": 200,
+  "msg": "鏌ヨ鎴愬姛",
+  "data": null  // 鐢ㄦ埛鏈粦瀹氳溅杈�
+}
+```
+
+## 渚濊禆璇存槑
+
+### API渚濊禆
+
+```javascript
+import { getUserBoundVehicle } from "@/api/vehicle"
+```
+
+### 鍓嶇API鏂囦欢
+
+**鏂囦欢**: `app/api/vehicle.js`
+
+```javascript
+export function getUserBoundVehicle(userId) {
+  return request({
+    url: '/system/vehicle/user/bound/' + userId,
+    method: 'get'
+  })
+}
+```
+
+## 娴嬭瘯寤鸿
+
+### 娴嬭瘯鍦烘櫙1锛氱敤鎴峰凡缁戝畾杞﹁締涓旇溅杈嗗湪鍙敤鍒楄〃涓�
+
+**棰勬湡缁撴灉**锛�
+- 椤甸潰鍔犺浇鍚庯紝浠诲姟杞﹁締瀛楁鑷姩鏄剧ず缁戝畾鐨勮溅杈嗙紪鍙�
+- picker閫変腑鐘舵�佹纭�
+- 鎺у埗鍙拌緭鍑烘垚鍔熸棩蹇�
+
+### 娴嬭瘯鍦烘櫙2锛氱敤鎴锋湭缁戝畾杞﹁締
+
+**棰勬湡缁撴灉**锛�
+- 椤甸潰鍔犺浇鍚庯紝浠诲姟杞﹁締瀛楁鏄剧ず"璇烽�夋嫨浠诲姟杞﹁締"
+- picker鏈�変腑浠讳綍椤�
+- 鎺у埗鍙拌緭鍑�"鐢ㄦ埛鏈粦瀹氳溅杈�"
+
+### 娴嬭瘯鍦烘櫙3锛氱敤鎴风粦瀹氱殑杞﹁締涓嶅湪鍙敤鍒楄〃涓�
+
+**棰勬湡缁撴灉**锛�
+- 椤甸潰鍔犺浇鍚庯紝浠诲姟杞﹁締瀛楁鏄剧ず"璇烽�夋嫨浠诲姟杞﹁締"
+- 鎺у埗鍙拌緭鍑鸿鍛婁俊鎭�
+- 鐢ㄦ埛鍙互鎵嬪姩閫夋嫨鍏朵粬杞﹁締
+
+### 娴嬭瘯鍦烘櫙4锛欰PI璋冪敤澶辫触
+
+**棰勬湡缁撴灉**锛�
+- 椤甸潰姝e父鏄剧ず锛屼笉褰卞搷鍏朵粬鍔熻兘
+- 鎺у埗鍙拌緭鍑洪敊璇俊鎭�
+- 浠诲姟杞﹁締瀛楁鏄剧ず"璇烽�夋嫨浠诲姟杞﹁締"
+
+## 浼樺寲寤鸿
+
+1. **鍔犺浇鎻愮ず**锛�
+   - 鍦ㄨ溅杈嗗垪琛ㄥ姞杞芥椂鏄剧ずloading鎻愮ず
+   - 鎻愬崌鐢ㄦ埛浣撻獙
+
+2. **杞﹁締涓嶅彲鐢ㄦ彁绀�**锛�
+   - 褰撶粦瀹氳溅杈嗕笉鍦ㄥ彲鐢ㄥ垪琛ㄦ椂锛屽彲浠ョ粰鐢ㄦ埛鍙嬪ソ鎻愮ず
+   - 渚嬪锛�"鎮ㄧ粦瀹氱殑杞﹁締褰撳墠涓嶅彲鐢紝璇烽�夋嫨鍏朵粬杞﹁締"
+
+3. **鑷姩鍒锋柊**锛�
+   - 褰撶敤鎴峰湪鍏朵粬椤甸潰鏇存柊缁戝畾杞﹁締鍚�
+   - 杩斿洖姝ら〉闈㈡椂鑷姩鍒锋柊杞﹁締閫夋嫨
+
+## 鐗堟湰鍘嗗彶
+
+- **2025-01-25 v2**锛氫慨姝PI璋冪敤锛屼娇鐢ㄤ笓鐢ㄧ殑getUserBoundVehicle鎺ュ彛
+  - 鏇存敼涓鸿皟鐢╜/system/vehicle/user/bound/{userId}`鎺ュ彛
+  - 娣诲姞userId楠岃瘉锛岀‘淇濈敤鎴稩D瀛樺湪
+  - 淇鍝嶅簲鏁版嵁缁撴瀯澶勭悊锛坴ehicleNo鑰岄潪vehicleNumber锛�
+  
+- **2025-01-25 v1**锛氬垵濮嬬増鏈紝瀹炵幇浠诲姟杞﹁締榛樿鏄剧ず鍔熻兘
+  - 娣诲姞picker鐨剉alue缁戝畾
+  - 鏂板selectedVehicleIndex璁$畻灞炴��
+  - 浼樺寲getUserBoundVehicleInfo鏂规硶锛屽鍔犺缁嗘棩蹇�
diff --git "a/prd/\345\214\273\351\231\242\345\234\260\345\237\237\350\277\207\346\273\244\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\345\214\273\351\231\242\345\234\260\345\237\237\350\277\207\346\273\244\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..7503c09
--- /dev/null
+++ "b/prd/\345\214\273\351\231\242\345\234\260\345\237\237\350\277\207\346\273\244\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,489 @@
+# 鍖婚櫌鍦板煙杩囨护鍔熻兘璇存槑
+
+## 闇�姹傝儗鏅�
+
+鍦ㄦ�ユ晳杞繍浠诲姟鍒涘缓椤甸潰涓紝闇�瑕佷紭鍖栧尰闄㈤�夋嫨鍔熻兘锛�
+1. 褰撳綊灞炴満鏋勯�夋嫨骞垮窞鍒嗗叕鍙哥瓑鍦板煙淇℃伅鍚庯紝闇�瑕佸皢"骞垮窞"杩欐牱鐨勫湴鍩熷叧閿瘝浼犲叆鍒板尰闄㈡悳绱㈡帴鍙d腑杩涜绛涢��
+2. 浣跨敤OR閫昏緫瀵笻ospData琛ㄤ腑鐨凥ospProvince銆丠ospCity銆丠ospArea绛夊瓧娈佃繘琛屾ā绯婂尮閰�
+3. 濡傛灉杈撳叆妗嗕腑鏈夋悳绱㈠叧閿瘝锛屼篃闇�瑕佸HospProvince銆丠ospCity銆丠ospArea銆丠ospAddress銆丠ospName銆丠ospShort杩涜妯$硦鍖归厤
+4. 鏈�缁堥�変腑鐨勫尰闄㈠湴鍧�闇�瑕佸悎骞禜ospProvince銆丠ospCity銆丠ospArea鍜孒ospAddress瀹屾暣鏄剧ず
+
+## 瀹炵幇鏂规
+
+### 1. 鍚庣Mapper鎺ュ彛淇敼
+
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/mapper/HospDataMapper.java`
+
+**淇敼鍐呭**:
+```java
+/**
+ * 鏍规嵁鍖婚櫌鍚嶇О鎴栧湴鍧�鎼滅储鍖婚櫌
+ * 
+ * @param keyword 鎼滅储鍏抽敭璇�
+ * @param region 鍦板煙鍏抽敭璇嶏紙鐢ㄤ簬杩囨护鐪佸競鍖猴級
+ * @return 鍖婚櫌鍒楄〃
+ */
+List<HospData> searchHospitals(@Param("keyword") String keyword, @Param("region") String region);
+```
+
+**璇存槑**: 
+- 鏂板`region`鍙傛暟锛岀敤浜庡湴鍩熻繃婊�
+- 鏀寔鍚屾椂浼犲叆鍏抽敭璇嶅拰鍦板煙淇℃伅
+
+### 2. 鍚庣SQL淇敼
+
+**鏂囦欢**: `ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml`
+
+**淇敼鍐呭**:
+```xml
+<select id="searchHospitals" resultMap="HospDataResult">
+    SELECT TOP 100
+        HospID, HospName, HospCityID, HospShort, 
+        HopsProvince, HopsCity, HopsArea, HospAddress, 
+        HospTEL, HospUnitID, HospState, HospOAID, 
+        HospIntroducerID, HospIntroducerDate, HospLevel
+    FROM HospData
+    WHERE 1=1
+    <!-- 鍦板煙杩囨护锛氬HospProvince, HospCity, HospArea杩涜OR鍖归厤 -->
+    <if test="region != null and region != ''">
+        AND (HopsProvince LIKE '%' + #{region} + '%' 
+             OR HopsCity LIKE '%' + #{region} + '%'
+             OR HopsArea LIKE '%' + #{region} + '%')
+    </if>
+    <!-- 鍏抽敭璇嶈繃婊わ細瀵瑰涓瓧娈佃繘琛孫R鍖归厤 -->
+    <if test="keyword != null and keyword != ''">
+        AND (HospProvince LIKE '%' + #{keyword} + '%'
+             OR HopsCity LIKE '%' + #{keyword} + '%'
+             OR HopsArea LIKE '%' + #{keyword} + '%'
+             OR HospAddress LIKE '%' + #{keyword} + '%'
+             OR HospName LIKE '%' + #{keyword} + '%'
+             OR HospShort LIKE '%' + #{keyword} + '%')
+    </if>
+    AND (HospState IS NULL OR HospState = 1)
+    ORDER BY HospName
+</select>
+```
+
+**璇存槑**:
+- 鍦板煙杩囨护锛氫娇鐢∣R閫昏緫瀵圭渷銆佸競銆佸尯杩涜妯$硦鍖归厤
+- 鍏抽敭璇嶈繃婊わ細鎵╁睍涓哄鐪併�佸競銆佸尯銆佸湴鍧�銆佸尰闄㈠悕绉般�佺畝绉拌繘琛屾ā绯婂尮閰�
+- 涓や釜鏉′欢浣跨敤AND杩炴帴锛屽疄鐜扮粍鍚堣繃婊�
+
+### 3. 鍚庣Controller淇敼
+
+**鏂囦欢**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java`
+
+**淇敼鍐呭**:
+```java
+/**
+ * 鎼滅储鍖婚櫌
+ * 鏀寔鏍规嵁鍖婚櫌鍚嶇О銆佸湴鍧�銆佸湴鍩熻繘琛屾ā绯婃悳绱�
+ * @param keyword 鎼滅储鍏抽敭璇嶏紙鍖婚櫌鍚嶇О銆佸湴鍧�銆佺畝绉般�佺渷甯傚尯锛�
+ * @param region 鍦板煙鍏抽敭璇嶏紙鐢ㄤ簬杩囨护鐪佸競鍖猴級
+ */
+@GetMapping("/search")
+public AjaxResult searchHospitals(
+        @RequestParam(value = "keyword", required = false) String keyword,
+        @RequestParam(value = "region", required = false) String region) {
+    List<HospData> list = hospDataMapper.searchHospitals(keyword, region);
+    return success(list);
+}
+```
+
+**璇存槑**:
+- 鏂板`region`璇锋眰鍙傛暟
+- 涓や釜鍙傛暟閮芥槸鍙�夌殑锛坮equired = false锛�
+
+### 4. 鍓嶇API淇敼
+
+**鏂囦欢**: `app/api/hospital.js`
+
+**淇敼鍐呭**:
+```javascript
+/**
+ * 鎼滅储鍖婚櫌
+ * @param {string} keyword 鎼滅储鍏抽敭璇嶏紙鍖婚櫌鍚嶇О銆佸湴鍧�銆佺畝绉般�佺渷甯傚尯锛�
+ * @param {string} region 鍦板煙鍏抽敭璇嶏紙鐢ㄤ簬杩囨护鐪佸競鍖猴級
+ */
+export function searchHospitals(keyword, region) {
+  return request({
+    url: '/system/hospital/search',
+    method: 'get',
+    params: {
+      keyword: keyword,
+      region: region
+    }
+  })
+}
+```
+
+**璇存槑**:
+- 鏂板`region`鍙傛暟
+- 淇濇寔鍚戝悗鍏煎锛氬鏋滀笉浼爎egion锛屽悗绔細蹇界暐鍦板煙杩囨护
+
+### 5. 鍓嶇椤甸潰淇敼
+
+**鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+#### 5.1 鏁版嵁瀛楁鏂板
+
+```javascript
+data() {
+  return {
+    selectedRegion: '', // 浠庡綊灞炴満鏋勪腑鎻愬彇鐨勫湴鍩熶俊鎭紙濡傦細骞垮窞銆佹繁鍦崇瓑锛�
+    // ... 鍏朵粬瀛楁
+  }
+}
+```
+
+#### 5.2 褰掑睘鏈烘瀯閫夋嫨鍙樻洿
+
+```javascript
+onOrganizationChange(e) {
+  this.selectedOrganization = this.organizations[e.detail.value]
+  // 浠庡綊灞炴満鏋勪腑鎻愬彇鍦板煙鍏抽敭璇嶏紙鍘婚櫎"鍒嗗叕鍙�"鍚庣紑锛�
+  // 渚嬪锛�"骞垮窞鍒嗗叕鍙�" -> "骞垮窞"
+  this.selectedRegion = this.selectedOrganization.replace(/鍒嗗叕鍙�$/g, '').trim()
+  // 閲嶆柊鍔犺浇鍖婚櫌鍒楄〃锛堝甫鍦板煙杩囨护锛�
+  this.loadDefaultHospitals()
+},
+```
+
+**璇存槑**:
+- 浠�"骞垮窞鍒嗗叕鍙�"涓彁鍙�"骞垮窞"浣滀负鍦板煙鍏抽敭璇�
+- 浣跨敤姝e垯琛ㄨ揪寮忓幓闄�"鍒嗗叕鍙�"鍚庣紑
+- 閫夋嫨褰掑睘鏈烘瀯鍚庣珛鍗抽噸鏂板姞杞藉尰闄㈠垪琛�
+
+#### 5.3 鍔犺浇榛樿鍖婚櫌鍒楄〃
+
+```javascript
+// 鍔犺浇榛樿鍖婚櫌鍒楄〃锛堝墠100鏉★級
+loadDefaultHospitals() {
+  // 浼犲叆绌哄瓧绗︿覆鎴栫壒娈婃爣璇嗚幏鍙栧墠100鏉★紝鍚屾椂浼犲叆鍦板煙杩囨护
+  searchHospitals('', this.selectedRegion).then(response => {
+    this.defaultHospitals = response.data || []
+    // 鍚屾椂鍒濆鍖栦袱涓悳绱㈢粨鏋滀负榛樿鏁版嵁
+    this.hospitalOutResults = [...this.defaultHospitals]
+    this.hospitalInResults = [...this.defaultHospitals]
+  }).catch(error => {
+    console.error('鍔犺浇榛樿鍖婚櫌鍒楄〃澶辫触:', error)
+    this.defaultHospitals = []
+  })
+},
+```
+
+**璇存槑**:
+- 浼犲叆鍦板煙鍙傛暟`this.selectedRegion`
+- 濡傛灉鏈�夋嫨褰掑睘鏈烘瀯锛屽湴鍩熶负绌猴紝鍚庣浼氬拷鐣ュ湴鍩熻繃婊�
+
+#### 5.4 鍖婚櫌鎼滅储鏂规硶
+
+```javascript
+// 鎼滅储杞嚭鍖婚櫌
+searchHospitalOut(keyword) {
+  // 浼犲叆鍏抽敭璇嶅拰鍦板煙杩囨护
+  searchHospitals(keyword, this.selectedRegion).then(response => {
+    this.hospitalOutResults = response.data || []
+    this.showHospitalOutResults = true
+  }).catch(error => {
+    console.error('鎼滅储鍖婚櫌澶辫触:', error)
+    this.hospitalOutResults = []
+  })
+},
+
+// 鎼滅储杞叆鍖婚櫌
+searchHospitalIn(keyword) {
+  // 浼犲叆鍏抽敭璇嶅拰鍦板煙杩囨护
+  searchHospitals(keyword, this.selectedRegion).then(response => {
+    this.hospitalInResults = response.data || []
+    this.showHospitalInResults = true
+  }).catch(error => {
+    console.error('鎼滅储鍖婚櫌澶辫触:', error)
+    this.hospitalInResults = []
+  })
+},
+```
+
+**璇存槑**:
+- 鍚屾椂浼犲叆鍏抽敭璇嶅拰鍦板煙鍙傛暟
+- 瀹炵幇鍏抽敭璇� + 鍦板煙鐨勭粍鍚堣繃婊�
+
+#### 5.5 鍚堝苟鍦板潃鏄剧ず
+
+**鏂板鏂规硶**:
+```javascript
+// 鍚堝苟鍖婚櫌鍦板潃锛堢渷 + 甯� + 鍖� + 璇︾粏鍦板潃锛�
+buildFullAddress(hospital) {
+  const parts = []
+  if (hospital.hopsProvince) {
+    parts.push(hospital.hopsProvince)
+  }
+  if (hospital.hopsCity) {
+    parts.push(hospital.hopsCity)
+  }
+  if (hospital.hopsArea) {
+    parts.push(hospital.hopsArea)
+  }
+  if (hospital.hospAddress) {
+    parts.push(hospital.hospAddress)
+  }
+  return parts.join('')
+}
+```
+
+**閫夋嫨鍖婚櫌鏃朵娇鐢ㄥ畬鏁村湴鍧�**:
+```javascript
+// 閫夋嫨杞嚭鍖婚櫌
+selectHospitalOut(hospital) {
+  this.taskForm.hospitalOut.id = hospital.hospId
+  this.taskForm.hospitalOut.name = hospital.hospName
+  // 鍚堝苟鐪佸競鍖� + 璇︾粏鍦板潃
+  const fullAddress = this.buildFullAddress(hospital)
+  this.taskForm.hospitalOut.address = fullAddress
+  // ... 鍏朵粬閫昏緫
+},
+
+// 閫夋嫨杞叆鍖婚櫌
+selectHospitalIn(hospital) {
+  this.taskForm.hospitalIn.id = hospital.hospId
+  this.taskForm.hospitalIn.name = hospital.hospName
+  // 鍚堝苟鐪佸競鍖� + 璇︾粏鍦板潃
+  const fullAddress = this.buildFullAddress(hospital)
+  this.taskForm.hospitalIn.address = fullAddress
+  // ... 鍏朵粬閫昏緫
+},
+```
+
+**鎼滅储缁撴灉鍒楄〃鏄剧ず瀹屾暣鍦板潃**:
+```html
+<!-- 杞嚭鍖婚櫌鎼滅储缁撴灉 -->
+<view class="search-results" v-if="showHospitalOutResults && hospitalOutResults.length > 0">
+  <view 
+    class="search-result-item" 
+    v-for="hospital in hospitalOutResults" 
+    :key="hospital.hospId"
+    @click="selectHospitalOut(hospital)"
+  >
+    <view class="hospital-name">{{ hospital.hospName }}</view>
+    <view class="hospital-address">{{ buildFullAddress(hospital) }}</view>
+  </view>
+</view>
+
+<!-- 杞叆鍖婚櫌鎼滅储缁撴灉 -->
+<view class="search-results" v-if="showHospitalInResults && hospitalInResults.length > 0">
+  <view 
+    class="search-result-item" 
+    v-for="hospital in hospitalInResults" 
+    :key="hospital.hospId"
+    @click="selectHospitalIn(hospital)"
+  >
+    <view class="hospital-name">{{ hospital.hospName }}</view>
+    <view class="hospital-address">{{ buildFullAddress(hospital) }}</view>
+  </view>
+</view>
+```
+
+## 鍔熻兘娴佺▼
+
+### 1. 閫夋嫨褰掑睘鏈烘瀯鍚庣殑杩囨护娴佺▼
+
+```
+鐢ㄦ埛閫夋嫨"骞垮窞鍒嗗叕鍙�"
+    鈫�
+鎻愬彇鍦板煙鍏抽敭璇嶏細"骞垮窞"
+    鈫�
+閲嶆柊鍔犺浇榛樿鍖婚櫌鍒楄〃
+    鈫�
+鍚庣SQL鎵ц鍦板煙杩囨护锛�
+  WHERE (HopsProvince LIKE '%骞垮窞%' 
+         OR HopsCity LIKE '%骞垮窞%'
+         OR HopsArea LIKE '%骞垮窞%')
+    鈫�
+杩斿洖骞垮窞鐩稿叧鐨勫尰闄㈠垪琛紙鍓�100鏉★級
+    鈫�
+鍓嶇鏄剧ず杩囨护鍚庣殑鍖婚櫌
+```
+
+### 2. 杈撳叆鎼滅储鍏抽敭璇嶅悗鐨勭粍鍚堣繃婊ゆ祦绋�
+
+```
+鐢ㄦ埛杈撳叆鍏抽敭璇嶏細"浜烘皯"
+褰撳墠鍦板煙锛�"骞垮窞"
+    鈫�
+鍚庣SQL鎵ц缁勫悎杩囨护锛�
+  WHERE (HopsProvince LIKE '%骞垮窞%' 
+         OR HopsCity LIKE '%骞垮窞%'
+         OR HopsArea LIKE '%骞垮窞%')
+  AND (HospProvince LIKE '%浜烘皯%'
+       OR HopsCity LIKE '%浜烘皯%'
+       OR HopsArea LIKE '%浜烘皯%'
+       OR HospAddress LIKE '%浜烘皯%'
+       OR HospName LIKE '%浜烘皯%'
+       OR HospShort LIKE '%浜烘皯%')
+    鈫�
+杩斿洖鍚屾椂婊¤冻鍦板煙鍜屽叧閿瘝鐨勫尰闄�
+    鈫�
+鍓嶇鏄剧ず杩囨护鍚庣殑鍖婚櫌
+```
+
+### 3. 鍦板潃鏄剧ず娴佺▼
+
+```
+鐢ㄦ埛閫夋嫨鍖婚櫌
+    鈫�
+璋冪敤buildFullAddress(hospital)
+    鈫�
+鍚堝苟鍦板潃瀛楁锛�
+  HopsProvince + HopsCity + HopsArea + HospAddress
+  渚嬪锛�"骞夸笢鐪�" + "骞垮窞甯�" + "澶╂渤鍖�" + "澶╂渤璺�123鍙�"
+    鈫�
+鏄剧ず瀹屾暣鍦板潃锛�
+  "骞夸笢鐪佸箍宸炲競澶╂渤鍖哄ぉ娌宠矾123鍙�"
+```
+
+## 浼樺寲鏁堟灉
+
+### 1. 鏁版嵁杩囨护鏇寸簿鍑�
+- 鉁� 鏍规嵁褰掑睘鏈烘瀯鑷姩杩囨护鍚屽湴鍩熷尰闄�
+- 鉁� 鍑忓皯涓嶇浉鍏冲尰闄㈡暟鎹紝鎻愬崌閫夋嫨鏁堢巼
+- 鉁� 鏀寔鐪併�佸競銆佸尯涓夌骇鍦板煙杩囨护
+
+### 2. 鎼滅储鍔熻兘鏇村己澶�
+- 鉁� 鍏抽敭璇嶆悳绱㈣寖鍥存墿澶э紙鐪佸競鍖恒�佸湴鍧�銆佸尰闄㈠悕绉般�佺畝绉帮級
+- 鉁� 鍦板煙 + 鍏抽敭璇嶇粍鍚堣繃婊�
+- 鉁� OR閫昏緫鍖归厤锛屾彁楂樺懡涓巼
+
+### 3. 鍦板潃鏄剧ず鏇村畬鏁�
+- 鉁� 鏄剧ず瀹屾暣鐨勭渷甯傚尯鍦板潃
+- 鉁� 渚夸簬鐢ㄦ埛纭鍖婚櫌浣嶇疆
+- 鉁� 缁熶竴鍦板潃鏍煎紡锛屼究浜庡悗缁鐞�
+
+### 4. 鐢ㄦ埛浣撻獙浼樺寲
+- 鉁� 閫夋嫨褰掑睘鏈烘瀯鍚庤嚜鍔ㄥ埛鏂板尰闄㈠垪琛�
+- 鉁� 鎼滅储缁撴灉鏇磋创鍚堝疄闄呴渶姹�
+- 鉁� 鍦板潃淇℃伅鏇存竻鏅版槑浜�
+
+## 鏁版嵁绀轰緥
+
+### 绀轰緥1锛氶�夋嫨骞垮窞鍒嗗叕鍙�
+
+**褰掑睘鏈烘瀯**: 骞垮窞鍒嗗叕鍙�  
+**鎻愬彇鍦板煙**: 骞垮窞  
+**SQL杩囨护鏉′欢**:
+```sql
+WHERE (HopsProvince LIKE '%骞垮窞%' 
+       OR HopsCity LIKE '%骞垮窞%'
+       OR HopsArea LIKE '%骞垮窞%')
+```
+
+**杩斿洖缁撴灉绀轰緥**:
+- 骞夸笢鐪佷汉姘戝尰闄紙鐪侊細骞夸笢鐪侊紝甯傦細骞垮窞甯傦級
+- 骞垮窞甯傜涓�浜烘皯鍖婚櫌锛堝競锛氬箍宸炲競锛�
+- 骞垮窞鍖荤澶у闄勫睘绗竴鍖婚櫌锛堝競锛氬箍宸炲競锛�
+
+### 绀轰緥2锛氬箍宸炲垎鍏徃 + 鎼滅储"涓北"
+
+**褰掑睘鏈烘瀯**: 骞垮窞鍒嗗叕鍙�  
+**鎻愬彇鍦板煙**: 骞垮窞  
+**鎼滅储鍏抽敭璇�**: 涓北  
+**SQL杩囨护鏉′欢**:
+```sql
+WHERE (HopsProvince LIKE '%骞垮窞%' 
+       OR HopsCity LIKE '%骞垮窞%'
+       OR HopsArea LIKE '%骞垮窞%')
+AND (HospProvince LIKE '%涓北%'
+     OR HopsCity LIKE '%涓北%'
+     OR HopsArea LIKE '%涓北%'
+     OR HospAddress LIKE '%涓北%'
+     OR HospName LIKE '%涓北%'
+     OR HospShort LIKE '%涓北%')
+```
+
+**杩斿洖缁撴灉绀轰緥**:
+- 涓北澶у闄勫睘绗竴鍖婚櫌锛堝競锛氬箍宸炲競锛屽悕绉板寘鍚�"涓北"锛�
+- 涓北澶у瀛欓�镐粰绾康鍖婚櫌锛堝競锛氬箍宸炲競锛屽悕绉板寘鍚�"涓北"锛�
+
+### 绀轰緥3锛氬湴鍧�鍚堝苟鏄剧ず
+
+**鍘熷鏁版嵁**:
+- HopsProvince: 骞夸笢鐪�
+- HopsCity: 骞垮窞甯�
+- HopsArea: 澶╂渤鍖�
+- HospAddress: 澶╂渤璺�123鍙�
+
+**鍚堝苟鍚庡湴鍧�**:
+```
+骞夸笢鐪佸箍宸炲競澶╂渤鍖哄ぉ娌宠矾123鍙�
+```
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 鍦板煙鍏抽敭璇嶆彁鍙�
+- 鐩墠閫氳繃鍘婚櫎"鍒嗗叕鍙�"鍚庣紑瀹炵幇
+- 濡傛灉褰掑睘鏈烘瀯鍛藉悕涓嶈鑼冿紝闇�瑕佽皟鏁存彁鍙栭�昏緫
+- 寤鸿褰掑睘鏈烘瀯缁熶竴鍛藉悕鏍煎紡锛歿鍦板煙}鍒嗗叕鍙�
+
+### 2. SQL鎬ц兘浼樺寲
+- 澶氫釜LIKE鏌ヨ鍙兘褰卞搷鎬ц兘
+- 寤鸿鍦℉opsProvince銆丠opsCity銆丠opsArea瀛楁涓婂缓绔嬬储寮�
+- 鎺у埗杩斿洖鏁版嵁閲忥紙TOP 100锛�
+
+### 3. 鍦板潃涓虹┖鎯呭喌
+- buildFullAddress鏂规硶浼氳嚜鍔ㄨ烦杩囩┖鍊煎瓧娈�
+- 鍙悎骞舵湁鍊肩殑瀛楁
+- 纭繚鑷冲皯鏈変竴涓湴鍧�瀛楁鏈夊��
+
+### 4. 鍚戝悗鍏煎
+- region鍙傛暟涓哄彲閫夊弬鏁�
+- 濡傛灉涓嶄紶region锛屽姛鑳介��鍖栦负鍘熸湁鐨勫叧閿瘝鎼滅储
+- 纭繚鏃х増鏈墠绔篃鑳芥甯镐娇鐢�
+
+## 閮ㄧ讲璇存槑
+
+### 1. 鍚庣閮ㄧ讲
+
+閲嶅惎鍚庣鏈嶅姟锛�
+```bash
+# Windows
+bin\run.bat
+
+# Linux
+./ry.sh restart
+```
+
+### 2. 鍓嶇閮ㄧ讲
+
+閲嶆柊缂栬瘧鍓嶇锛�
+```bash
+# H5鐗堟湰
+npm run build:h5
+
+# 寰俊灏忕▼搴忕増鏈�
+npm run build:mp-weixin
+```
+
+### 3. 娴嬭瘯楠岃瘉
+
+娴嬭瘯姝ラ锛�
+1. 閫夋嫨褰掑睘鏈烘瀯"骞垮窞鍒嗗叕鍙�"
+2. 瑙傚療鍖婚櫌鍒楄〃鏄惁鑷姩杩囨护涓哄箍宸炵浉鍏冲尰闄�
+3. 杈撳叆鎼滅储鍏抽敭璇嶏紝楠岃瘉缁勫悎杩囨护鏁堟灉
+4. 閫夋嫨鍖婚櫌鍚庯紝鏌ョ湅鍦板潃鏄惁瀹屾暣鏄剧ず鐪佸競鍖轰俊鎭�
+
+## 鏂囦欢娓呭崟
+
+### 鍚庣鏂囦欢
+- `ruoyi-system/src/main/java/com/ruoyi/system/mapper/HospDataMapper.java`
+- `ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml`
+- `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java`
+
+### 鍓嶇鏂囦欢
+- `app/api/hospital.js`
+- `app/pages/task/create-emergency.vue`
+
+### 鏂囨。鏂囦欢
+- `prd/鍖婚櫌鍦板煙杩囨护鍔熻兘璇存槑.md`锛堟湰鏂囨。锛�
+
+## 鐗堟湰鍘嗗彶
+
+- **v1.0** (2025-10-25): 鍒濆鐗堟湰锛屽疄鐜板尰闄㈠湴鍩熻繃婊ゅ拰鍦板潃鍚堝苟鏄剧ず鍔熻兘
diff --git "a/prd/\345\275\222\345\261\236\346\234\272\346\236\204\345\212\250\346\200\201\345\212\240\350\275\275\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\345\275\222\345\261\236\346\234\272\346\236\204\345\212\250\346\200\201\345\212\240\350\275\275\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..76a2eab
--- /dev/null
+++ "b/prd/\345\275\222\345\261\236\346\234\272\346\236\204\345\212\250\346\200\201\345\212\240\350\275\275\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,470 @@
+# 褰掑睘鏈烘瀯鍔ㄦ�佸姞杞藉姛鑳借鏄�
+
+## 闇�姹傝儗鏅�
+
+鍦ㄦ�ユ晳杞繍浠诲姟鍒涘缓椤甸潰涓紝褰掑睘鏈烘瀯涓嬫媺鍒楄〃鍘熸潵鏄啓姝荤殑闈欐�佹暟鎹紝闇�瑕佹敼涓轰粠鍚庡彴鏁版嵁搴撳姩鎬佸姞杞藉垎鍏徃鏁版嵁銆�
+
+**鍘熸湁闂**:
+- 褰掑睘鏈烘瀯鏁版嵁纭紪鐮侊細`['骞垮窞鍒嗗叕鍙�', '娣卞湷鍒嗗叕鍙�', '鐝犳捣鍒嗗叕鍙�', '浣涘北鍒嗗叕鍙�']`
+- 鏃犳硶鍚屾鍚庡彴鏁版嵁鍙樺寲
+- 鏂板鍒嗗叕鍙稿悗鍓嶇鏃犳硶鑷姩鏄剧ず
+
+## 瀹炵幇鏂规
+
+### 1. 鍒涘缓閮ㄩ棬API
+
+**鏂板缓鏂囦欢**: `app/api/system/dept.js`
+
+```javascript
+import request from '@/utils/request'
+
+/**
+ * 鏌ヨ閮ㄩ棬鍒楄〃
+ * @param {Object} query 鏌ヨ鍙傛暟
+ */
+export function listDept(query) {
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: query
+  })
+}
+
+/**
+ * 鏌ヨ鍒嗗叕鍙稿垪琛紙parent_id=100鐨勯儴闂級
+ */
+export function listBranchCompany() {
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: {
+      parentId: 100
+    }
+  })
+}
+
+/**
+ * 鏌ヨ閮ㄩ棬璇︾粏
+ * @param {Number} deptId 閮ㄩ棬ID
+ */
+export function getDept(deptId) {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'get'
+  })
+}
+```
+
+**璇存槑**:
+- `listBranchCompany()` - 涓撻棬鐢ㄤ簬鏌ヨ鍒嗗叕鍙告暟鎹紙parent_id=100锛�
+- `listDept(query)` - 閫氱敤閮ㄩ棬鏌ヨ鎺ュ彛
+- `getDept(deptId)` - 鏌ヨ鍗曚釜閮ㄩ棬璇︽儏
+
+### 2. 淇敼椤甸潰鏁版嵁缁撴瀯
+
+**鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+**淇敼鍓�**:
+```javascript
+data() {
+  return {
+    organizations: ['骞垮窞鍒嗗叕鍙�', '娣卞湷鍒嗗叕鍙�', '鐝犳捣鍒嗗叕鍙�', '浣涘北鍒嗗叕鍙�'],
+  }
+}
+```
+
+**淇敼鍚�**:
+```javascript
+data() {
+  return {
+    organizations: [], // 褰掑睘鏈烘瀯鍒楄〃锛堜粠鍚庡彴鍔犺浇鍒嗗叕鍙告暟鎹級
+    organizationOptions: [], // 褰掑睘鏈烘瀯閫夐」锛堢敤浜巔icker鏄剧ず锛�
+  }
+}
+```
+
+**鍏抽敭鍙樺寲**:
+- 鉁� `organizations` - 鏀逛负绌烘暟缁勶紝浠庡悗鍙板姩鎬佸姞杞�
+- 鉁� `organizationOptions` - 鏂板瀛楁锛屽瓨鍌ㄥ畬鏁寸殑閮ㄩ棬瀵硅薄淇℃伅
+
+### 3. 娣诲姞鍔犺浇鍒嗗叕鍙告柟娉�
+
+**鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+```javascript
+// 鍔犺浇鍒嗗叕鍙告暟鎹紙parent_id=100鐨勯儴闂級
+loadBranchCompanies() {
+  listBranchCompany().then(response => {
+    const list = response.data || []
+    // 杩囨护鍑� parent_id = 100 鐨勯儴闂紙鍒嗗叕鍙革級
+    this.organizationOptions = list.filter(dept => dept.parentId === 100)
+    // 鐢熸垚picker鐨勬暟鎹簮锛堝彧鏄剧ず鍚嶇О锛�
+    this.organizations = this.organizationOptions.map(dept => dept.deptName)
+    
+    // 濡傛灉褰撳墠鐢ㄦ埛鏈夐粯璁ゅ垎鍏徃锛岃缃负閫変腑椤�
+    if (this.currentUser.branchCompanyName) {
+      const index = this.organizationOptions.findIndex(
+        dept => dept.deptName === this.currentUser.branchCompanyName
+      )
+      if (index !== -1) {
+        this.selectedOrganization = this.currentUser.branchCompanyName
+        // 鎻愬彇鍦板煙鍏抽敭璇�
+        this.selectedRegion = this.selectedOrganization.replace(/鍒嗗叕鍙�$/g, '').trim()
+      }
+    }
+  }).catch(error => {
+    console.error('鍔犺浇鍒嗗叕鍙告暟鎹け璐�:', error)
+    this.organizationOptions = []
+    this.organizations = []
+  })
+},
+```
+
+**璇存槑**:
+- 璋冪敤`listBranchCompany()`鏌ヨ鍒嗗叕鍙�
+- 鍙岄噸杩囨护纭繚鍙樉绀簆arent_id=100鐨勯儴闂�
+- 鑷姩鍖归厤褰撳墠鐢ㄦ埛鐨勯粯璁ゅ垎鍏徃
+- 鎻愬彇鍦板煙鍏抽敭璇嶇敤浜庡尰闄㈣繃婊�
+
+### 4. 淇敼閫夋嫨浜嬩欢
+
+**鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+**淇敼鍓�**:
+```javascript
+onOrganizationChange(e) {
+  this.selectedOrganization = this.organizations[e.detail.value]
+  // ...
+}
+```
+
+**淇敼鍚�**:
+```javascript
+onOrganizationChange(e) {
+  const index = e.detail.value
+  const selected = this.organizationOptions[index]
+  this.selectedOrganization = selected.deptName
+  // 浠庡綊灞炴満鏋勪腑鎻愬彇鍦板煙鍏抽敭璇嶏紙鍘婚櫎"鍒嗗叕鍙�"鍚庣紑锛�
+  // 渚嬪锛�"骞垮窞鍒嗗叕鍙�" -> "骞垮窞"
+  this.selectedRegion = selected.deptName.replace(/鍒嗗叕鍙�$/g, '').trim()
+  // 閲嶆柊鍔犺浇鍖婚櫌鍒楄〃锛堝甫鍦板煙杩囨护锛�
+  this.loadDefaultHospitals()
+},
+```
+
+**鍏抽敭鍙樺寲**:
+- 鉁� 浠巂organizationOptions`鑾峰彇瀹屾暣鐨勯儴闂ㄥ璞�
+- 鉁� 閫氳繃`selected.deptName`鑾峰彇閮ㄩ棬鍚嶇О
+- 鉁� 淇濇寔鍦板煙鍏抽敭璇嶆彁鍙栭�昏緫
+
+### 5. 椤甸潰鍔犺浇鍒濆鍖�
+
+**鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+```javascript
+onLoad(options) {
+  // ... 鍏朵粬鍒濆鍖栦唬鐮�
+  
+  // 鍔犺浇鍒嗗叕鍙告暟鎹�
+  this.loadBranchCompanies()
+  
+  // 璁剧疆榛樿褰掑睘鏈烘瀯
+  if (this.currentUser.branchCompanyName) {
+    this.selectedOrganization = this.currentUser.branchCompanyName
+  }
+  
+  // ... 鍏朵粬鍒濆鍖栦唬鐮�
+}
+```
+
+**璇存槑**:
+- 鍦ㄩ〉闈㈠姞杞芥椂鑷姩璋冪敤`loadBranchCompanies()`
+- 浼樺厛璁剧疆鐢ㄦ埛鐨勯粯璁ゅ垎鍏徃
+- 纭繚鏁版嵁鍔犺浇椤哄簭姝g‘
+
+### 6. 瀵煎叆渚濊禆
+
+**鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+```javascript
+import { listBranchCompany } from "@/api/system/dept"
+```
+
+## 鏁版嵁娴佺▼
+
+```
+椤甸潰鍔犺浇 (onLoad)
+    鈫�
+璋冪敤 loadBranchCompanies()
+    鈫�
+璇锋眰 /system/dept/list?parentId=100
+    鈫�
+鍚庣杩斿洖鍒嗗叕鍙稿垪琛�
+    鈫�
+鍓嶇杩囨护 parentId === 100
+    鈫�
+鐢熸垚 organizations 鍜� organizationOptions
+    鈫�
+鍖归厤鐢ㄦ埛榛樿鍒嗗叕鍙�
+    鈫�
+鏄剧ず鍦ㄤ笅鎷夊垪琛ㄤ腑
+    鈫�
+鐢ㄦ埛閫夋嫨褰掑睘鏈烘瀯
+    鈫�
+瑙﹀彂 onOrganizationChange
+    鈫�
+鎻愬彇鍦板煙鍏抽敭璇�
+    鈫�
+閲嶆柊鍔犺浇鍖婚櫌鍒楄〃锛堝甫鍦板煙杩囨护锛�
+```
+
+## 鍒嗗叕鍙告暟鎹粨鏋�
+
+### 鍚庣杩斿洖鏁版嵁
+
+```json
+{
+  "code": 200,
+  "data": [
+    {
+      "deptId": 101,
+      "parentId": 100,
+      "deptName": "骞垮窞鍒嗗叕鍙�",
+      "ancestors": "0,100",
+      "orderNum": 1,
+      "status": "0"
+    },
+    {
+      "deptId": 102,
+      "parentId": 100,
+      "deptName": "娣卞湷鍒嗗叕鍙�",
+      "ancestors": "0,100",
+      "orderNum": 2,
+      "status": "0"
+    },
+    {
+      "deptId": 103,
+      "parentId": 100,
+      "deptName": "鐝犳捣鍒嗗叕鍙�",
+      "ancestors": "0,100",
+      "orderNum": 3,
+      "status": "0"
+    }
+  ]
+}
+```
+
+### 鍓嶇鏁版嵁杞崲
+
+```javascript
+// organizationOptions - 瀹屾暣瀵硅薄鍒楄〃
+[
+  {
+    deptId: 101,
+    parentId: 100,
+    deptName: '骞垮窞鍒嗗叕鍙�',
+    ...
+  },
+  {
+    deptId: 102,
+    parentId: 100,
+    deptName: '娣卞湷鍒嗗叕鍙�',
+    ...
+  }
+]
+
+// organizations - 鍙寘鍚悕绉扮殑鏁扮粍锛堢敤浜巔icker鏄剧ず锛�
+['骞垮窞鍒嗗叕鍙�', '娣卞湷鍒嗗叕鍙�', '鐝犳捣鍒嗗叕鍙�']
+```
+
+## 浼樺寲鏁堟灉
+
+### 1. 鏁版嵁鍚屾
+- 鉁� 鑷姩鍚屾鍚庡彴鍒嗗叕鍙告暟鎹�
+- 鉁� 鏂板鍒嗗叕鍙稿悗鏃犻渶淇敼鍓嶇浠g爜
+- 鉁� 鍒犻櫎鍒嗗叕鍙稿悗鑷姩浠庡垪琛ㄤ腑绉婚櫎
+
+### 2. 鐢ㄦ埛浣撻獙
+- 鉁� 鑷姩鏄剧ず褰撳墠鐢ㄦ埛鎵�鍦ㄥ垎鍏徃
+- 鉁� 涓嬫媺鍒楄〃瀹炴椂鍙嶆槧鍚庡彴鏁版嵁
+- 鉁� 閫夋嫨鍚庤嚜鍔ㄨ繃婊ょ浉鍏冲尰闄�
+
+### 3. 绯荤粺缁存姢
+- 鉁� 鍓嶇浠g爜鏃犻渶纭紪鐮�
+- 鉁� 闆嗕腑绠$悊鍒嗗叕鍙告暟鎹�
+- 鉁� 渚夸簬鎵╁睍鍜岀淮鎶�
+
+## 鍚庣鏀寔璇存槑
+
+### API鎺ュ彛
+
+**鎺ュ彛鍦板潃**: `GET /system/dept/list`
+
+**璇锋眰鍙傛暟**:
+```javascript
+{
+  parentId: 100  // 鏌ヨparent_id=100鐨勯儴闂紙鍒嗗叕鍙革級
+}
+```
+
+**杩斿洖鏁版嵁**:
+```json
+{
+  "code": 200,
+  "msg": "鏌ヨ鎴愬姛",
+  "data": [
+    {
+      "deptId": 101,
+      "parentId": 100,
+      "deptName": "骞垮窞鍒嗗叕鍙�",
+      "ancestors": "0,100",
+      "orderNum": 1,
+      "leader": "寮犱笁",
+      "phone": "13800138000",
+      "status": "0"
+    }
+  ]
+}
+```
+
+### SQL鏌ヨ
+
+**Mapper**: `SysDeptMapper.xml`
+
+```xml
+<select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult">
+    select d.dept_id, d.parent_id, d.dept_name, ...
+    from sys_dept d
+    where d.del_flag = '0'
+    <if test="parentId != null and parentId != 0">
+        AND parent_id = #{parentId}
+    </if>
+    order by d.parent_id, d.order_num
+</select>
+```
+
+**璇存槑**:
+- 閫氳繃`parentId`鍙傛暟杩囨护
+- 鍙繑鍥炴湭鍒犻櫎鐨勯儴闂紙del_flag='0'锛�
+- 鎸夋帓搴忓彿鎺掑簭
+
+## 娴嬭瘯楠岃瘉
+
+### 娴嬭瘯鍦烘櫙1锛氭甯稿姞杞藉垎鍏徃
+
+**鍓嶆彁鏉′欢**:
+```sql
+-- 鏁版嵁搴撲腑瀛樺湪鍒嗗叕鍙�
+SELECT * FROM sys_dept WHERE parent_id = 100 AND del_flag = '0';
+```
+
+**棰勬湡缁撴灉**:
+- 椤甸潰鍔犺浇鏃惰嚜鍔ㄦ樉绀哄垎鍏徃鍒楄〃
+- 涓嬫媺妗嗗寘鍚墍鏈夊垎鍏徃
+- 鐢ㄦ埛榛樿鍒嗗叕鍙歌嚜鍔ㄩ�変腑
+
+### 娴嬭瘯鍦烘櫙2锛氭棤鍒嗗叕鍙告暟鎹�
+
+**鍓嶆彁鏉′欢**:
+```sql
+-- 鏁版嵁搴撲腑娌℃湁鍒嗗叕鍙�
+DELETE FROM sys_dept WHERE parent_id = 100;
+```
+
+**棰勬湡缁撴灉**:
+- 涓嬫媺妗嗘樉绀轰负绌�
+- 涓嶄細鎶ラ敊
+- 鎻愮ず鐢ㄦ埛"璇烽�夋嫨褰掑睘鏈烘瀯"
+
+### 娴嬭瘯鍦烘櫙3锛氭柊澧炲垎鍏徃
+
+**鎿嶄綔姝ラ**:
+1. 鍦ㄥ悗鍙扮鐞嗙郴缁熶腑鏂板鍒嗗叕鍙�
+2. 鍒锋柊浠诲姟鍒涘缓椤甸潰
+3. 鏌ョ湅褰掑睘鏈烘瀯涓嬫媺鍒楄〃
+
+**棰勬湡缁撴灉**:
+- 鏂板鐨勫垎鍏徃鑷姩鍑虹幇鍦ㄥ垪琛ㄤ腑
+- 鏃犻渶淇敼鍓嶇浠g爜
+
+### 娴嬭瘯鍦烘櫙4锛氶�夋嫨褰掑睘鏈烘瀯鍚庤繃婊ゅ尰闄�
+
+**鎿嶄綔姝ラ**:
+1. 閫夋嫨"骞垮窞鍒嗗叕鍙�"
+2. 鐐瑰嚮鍖婚櫌鎼滅储妗�
+3. 鏌ョ湅鍖婚櫌鍒楄〃
+
+**棰勬湡缁撴灉**:
+- 鍖婚櫌鍒楄〃鑷姩杩囨护鍑哄箍宸炵浉鍏崇殑鍖婚櫌
+- 鍦板煙鍏抽敭璇嶆纭彁鍙栵紙"骞垮窞"锛�
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 閮ㄩ棬灞傜骇缁撴瀯
+
+**鍒嗗叕鍙稿畾涔�**:
+- `parent_id = 100` - 鏍囪瘑鍒嗗叕鍙�
+- `ancestors = "0,100"` - 绁栫骇鍒楄〃
+- `del_flag = '0'` - 鏈垹闄ょ姸鎬�
+
+**瀛愰儴闂�**:
+- `parent_id != 100` - 涓嶆槸鍒嗗叕鍙�
+- 涓嶄細鍑虹幇鍦ㄥ綊灞炴満鏋勫垪琛ㄤ腑
+
+### 2. 鏁版嵁杩囨护绛栫暐
+
+閲囩敤**鍙岄噸杩囨护**纭繚鏁版嵁鍑嗙‘:
+
+```javascript
+// 1. 鍚庣杩囨护锛氶�氳繃parentId鍙傛暟
+listBranchCompany() // parentId: 100
+
+// 2. 鍓嶇杩囨护锛氱‘淇漰arentId === 100
+this.organizationOptions = list.filter(dept => dept.parentId === 100)
+```
+
+### 3. 榛樿鍊煎鐞�
+
+```javascript
+// 鐢ㄦ埛鏈夐粯璁ゅ垎鍏徃
+if (this.currentUser.branchCompanyName) {
+  this.selectedOrganization = this.currentUser.branchCompanyName
+}
+
+// 鍔犺浇鏁版嵁鍚庡尮閰嶉粯璁ゅ��
+const index = this.organizationOptions.findIndex(
+  dept => dept.deptName === this.currentUser.branchCompanyName
+)
+```
+
+### 4. 閿欒澶勭悊
+
+```javascript
+.catch(error => {
+  console.error('鍔犺浇鍒嗗叕鍙告暟鎹け璐�:', error)
+  this.organizationOptions = []
+  this.organizations = []
+})
+```
+
+- 澶辫触鏃惰缃负绌烘暟缁�
+- 涓嶅奖鍝嶉〉闈㈠叾浠栧姛鑳�
+- 璁板綍閿欒鏃ュ織渚夸簬鎺掓煡
+
+## 鐩稿叧鏂囦欢
+
+### 鍓嶇鏂囦欢
+- `app/api/system/dept.js` - 閮ㄩ棬API鎺ュ彛锛堟柊寤猴級
+- `app/pages/task/create-emergency.vue` - 浠诲姟鍒涘缓椤甸潰锛堜慨鏀癸級
+
+### 鍚庣鏂囦欢
+- `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java` - 閮ㄩ棬Controller
+- `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java` - 閮ㄩ棬Service
+- `ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml` - 閮ㄩ棬Mapper
+
+### 鏂囨。鏂囦欢
+- `prd/褰掑睘鏈烘瀯鍔ㄦ�佸姞杞藉姛鑳借鏄�.md`锛堟湰鏂囨。锛�
+
+## 鐗堟湰鍘嗗彶
+
+- **v1.0** (2025-10-25): 鍒濆鐗堟湰锛屽疄鐜板綊灞炴満鏋勫姩鎬佸姞杞藉姛鑳�
diff --git "a/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\345\207\272\345\217\221\345\234\260\347\233\256\347\232\204\345\234\260\350\207\252\345\212\250\345\241\253\345\205\205\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\345\207\272\345\217\221\345\234\260\347\233\256\347\232\204\345\234\260\350\207\252\345\212\250\345\241\253\345\205\205\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..0483519
--- /dev/null
+++ "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\345\207\272\345\217\221\345\234\260\347\233\256\347\232\204\345\234\260\350\207\252\345\212\250\345\241\253\345\205\205\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,568 @@
+# 鎬ユ晳杞繍浠诲姟鍑哄彂鍦扮洰鐨勫湴鑷姩濉厖鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄥ垱寤烘�ユ晳杞繍浠诲姟鏃讹紝鑷姩灏�**杞嚭鍖婚櫌鍦板潃**浣滀负**鍑哄彂鍦�**锛屽皢**杞叆鍖婚櫌鍦板潃**浣滀负**鐩殑鍦�**锛屽啓鍏ヤ富浠诲姟琛紙`sys_task`锛夌殑鐩稿簲瀛楁锛屼究浜庝换鍔¤皟搴︺�佽矾寰勮鍒掑拰缁熻鍒嗘瀽銆�
+
+## 涓氬姟鑳屾櫙
+
+鎬ユ晳杞繍浠诲姟鐨勬牳蹇冨氨鏄皢鎮h�呬粠涓�涓尰闄㈣浆杩愬埌鍙︿竴涓尰闄細
+- **杞嚭鍖婚櫌** = 浠诲姟鐨勮捣鐐癸紙鍑哄彂鍦帮級
+- **杞叆鍖婚櫌** = 浠诲姟鐨勭粓鐐癸紙鐩殑鍦帮級
+
+灏嗚繖浜涗俊鎭啓鍏ヤ富浠诲姟琛ㄧ殑濂藉锛�
+1. **缁熶竴鏁版嵁缁撴瀯**锛氭墍鏈夌被鍨嬩换鍔★紙鎬ユ晳杞繍銆佺绁夎溅銆佷繚鍏荤瓑锛夐兘鏈夊嚭鍙戝湴鍜岀洰鐨勫湴
+2. **渚夸簬璺緞瑙勫垝**锛欸PS瀵艰埅鍙互鐩存帴浣跨敤鍑哄彂鍦板拰鐩殑鍦板潗鏍�
+3. **缁熻鍒嗘瀽**锛氬彲浠ョ粺璁″悇鍖哄煙鐨勪换鍔¢噺銆佽椹惰窛绂荤瓑
+4. **浠诲姟璋冨害**锛氳皟搴︾郴缁熷彲浠ユ牴鎹湴鐞嗕綅缃垎閰嶆渶杩戠殑杞﹁締鍜屼汉鍛�
+5. **鏃х郴缁熷吋瀹�**锛氫究浜庝笌鏃х郴缁熺殑鏁版嵁鍚屾
+
+## 瀹炵幇浣嶇疆
+
+**鍓嶇鏂囦欢**: `app/pages/task/create-emergency.vue`
+**鍚庣瀹炰綋**: `com.ruoyi.system.domain.SysTask`
+
+## 鎶�鏈疄鐜�
+
+### 1. 鍓嶇鏁版嵁鎻愪氦
+
+鍦� `buildSubmitData()` 鏂规硶涓紝娣诲姞鍑哄彂鍦板拰鐩殑鍦板瓧娈碉細
+
+```javascript
+const submitData = {
+  taskType: 'EMERGENCY_TRANSFER',
+  vehicleIds: this.selectedVehicleId ? [this.selectedVehicleId] : [],
+  assigneeIds: this.selectedStaff.map(staff => staff.userId),
+  transferTime: this.taskForm.transferTime,
+  documentTypeId: this.selectedDocumentTypeId,
+  taskTypeId: this.selectedEmergencyTaskTypeId,
+  
+  // 灏嗚浆鍑哄尰闄㈠湴鍧�浣滀负鍑哄彂鍦帮紝杞叆鍖婚櫌鍦板潃浣滀负鐩殑鍦�
+  departureAddress: this.taskForm.hospitalOut.address || '',
+  destinationAddress: this.taskForm.hospitalIn.address || '',
+  
+  patient: { ... },
+  hospitalOut: this.taskForm.hospitalOut,
+  hospitalIn: this.taskForm.hospitalIn,
+  transferDistance: this.taskForm.transferDistance ? parseFloat(this.taskForm.transferDistance) : null,
+  price: this.taskForm.price ? parseFloat(this.taskForm.price) : null
+}
+```
+
+### 2. GPS鍧愭爣鍚屾
+
+濡傛灉鏈塆PS鍧愭爣淇℃伅锛屽悓鏃跺啓鍏ュ嚭鍙戝湴鍜岀洰鐨勫湴鐨勭粡绾害锛�
+
+```javascript
+if (this.addressCoordinates.hospitalOutAddress) {
+  // 杞嚭鍖婚櫌GPS鍧愭爣鍐欏叆鎵╁睍琛�
+  if (!submitData.hospitalOut) submitData.hospitalOut = {}
+  submitData.hospitalOut.longitude = this.addressCoordinates.hospitalOutAddress.lng
+  submitData.hospitalOut.latitude = this.addressCoordinates.hospitalOutAddress.lat
+  
+  // 鍚屾椂鍐欏叆涓讳换鍔¤〃鐨勫嚭鍙戝湴缁忕含搴�
+  submitData.departureLongitude = this.addressCoordinates.hospitalOutAddress.lng
+  submitData.departureLatitude = this.addressCoordinates.hospitalOutAddress.lat
+}
+
+if (this.addressCoordinates.hospitalInAddress) {
+  // 杞叆鍖婚櫌GPS鍧愭爣鍐欏叆鎵╁睍琛�
+  if (!submitData.hospitalIn) submitData.hospitalIn = {}
+  submitData.hospitalIn.longitude = this.addressCoordinates.hospitalInAddress.lng
+  submitData.hospitalIn.latitude = this.addressCoordinates.hospitalInAddress.lat
+  
+  // 鍚屾椂鍐欏叆涓讳换鍔¤〃鐨勭洰鐨勫湴缁忕含搴�
+  submitData.destinationLongitude = this.addressCoordinates.hospitalInAddress.lng
+  submitData.destinationLatitude = this.addressCoordinates.hospitalInAddress.lat
+}
+```
+
+### 3. 鍚庣鏁版嵁鎺ユ敹
+
+涓讳换鍔¤〃锛坄sys_task`锛夌浉鍏冲瓧娈碉細
+
+```sql
+-- 鍑哄彂鍦板潃
+departure_address VARCHAR(500)
+
+-- 鐩殑鍦板潃
+destination_address VARCHAR(500)
+
+-- 鍑哄彂鍦扮粡搴�
+departure_longitude DECIMAL(10,7)
+
+-- 鍑哄彂鍦扮含搴�
+departure_latitude DECIMAL(10,7)
+
+-- 鐩殑鍦扮粡搴�
+destination_longitude DECIMAL(10,7)
+
+-- 鐩殑鍦扮含搴�
+destination_latitude DECIMAL(10,7)
+```
+
+瀵瑰簲鐨凧ava瀹炰綋瀛楁锛�
+
+```java
+public class SysTask extends BaseEntity {
+    /** 鍑哄彂鍦板潃 */
+    private String departureAddress;
+    
+    /** 鐩殑鍦板潃 */
+    private String destinationAddress;
+    
+    /** 鍑哄彂鍦扮粡搴� */
+    private java.math.BigDecimal departureLongitude;
+    
+    /** 鍑哄彂鍦扮含搴� */
+    private java.math.BigDecimal departureLatitude;
+    
+    /** 鐩殑鍦扮粡搴� */
+    private java.math.BigDecimal destinationLongitude;
+    
+    /** 鐩殑鍦扮含搴� */
+    private java.math.BigDecimal destinationLatitude;
+    
+    // ... getters and setters
+}
+```
+
+## 鏁版嵁娴佺▼
+
+### 鏁版嵁娴佽浆鍥�
+
+```
+鐢ㄦ埛閫夋嫨杞嚭鍖婚櫌
+    鈫�
+閫夋嫨鍖婚櫌鍚庯紝鑷姩濉厖 taskForm.hospitalOut.address
+锛堜緥濡傦細"骞夸笢鐪佸箍宸炲競澶╂渤鍖轰腑灞卞ぇ閬�123鍙�"锛�
+    鈫�
+鐢ㄦ埛閫夋嫨杞叆鍖婚櫌
+    鈫�
+閫夋嫨鍖婚櫌鍚庯紝鑷姩濉厖 taskForm.hospitalIn.address
+锛堜緥濡傦細"骞夸笢鐪佸箍宸炲競瓒婄鍖鸿В鏀捐矾456鍙�"锛�
+    鈫�
+鐢ㄦ埛鐐瑰嚮"淇濆瓨"
+    鈫�
+璋冪敤 buildSubmitData()
+    鈫�
+璁剧疆 departureAddress = taskForm.hospitalOut.address
+璁剧疆 destinationAddress = taskForm.hospitalIn.address
+    鈫�
+濡傛灉鏈塆PS鍧愭爣锛屽悓鏃惰缃粡绾害瀛楁
+    鈫�
+鎻愪氦鍒板悗绔�
+    鈫�
+淇濆瓨鍒� sys_task 琛�
+```
+
+## 鏁版嵁缁撴瀯
+
+### 鍓嶇琛ㄥ崟鏁版嵁
+
+```javascript
+taskForm: {
+  hospitalOut: {
+    id: 123,                    // 鍖婚櫌ID
+    name: "骞垮窞甯傜涓�浜烘皯鍖婚櫌",  // 鍖婚櫌鍚嶇О
+    department: "鎬ヨ瘖绉�",         // 绉戝
+    departmentId: 10,            // 绉戝ID
+    bedNumber: "A101",           // 搴婂彿
+    address: "骞夸笢鐪佸箍宸炲競澶╂渤鍖轰腑灞卞ぇ閬�123鍙�",  // 瀹屾暣鍦板潃
+    longitude: 113.3245,         // 缁忓害锛堝鏋滄湁GPS锛�
+    latitude: 23.1291            // 绾害锛堝鏋滄湁GPS锛�
+  },
+  hospitalIn: {
+    id: 456,
+    name: "骞垮窞甯備腑鍖诲尰闄�",
+    department: "楠ㄧ",
+    departmentId: 15,
+    bedNumber: "B205",
+    address: "骞夸笢鐪佸箍宸炲競瓒婄鍖鸿В鏀捐矾456鍙�",
+    longitude: 113.2654,
+    latitude: 23.1389
+  }
+}
+```
+
+### 鎻愪氦鏁版嵁缁撴瀯
+
+```javascript
+{
+  taskType: "EMERGENCY_TRANSFER",
+  vehicleIds: [101],
+  assigneeIds: [1, 2, 3],
+  
+  // 涓讳换鍔¤〃瀛楁
+  departureAddress: "骞夸笢鐪佸箍宸炲競澶╂渤鍖轰腑灞卞ぇ閬�123鍙�",
+  destinationAddress: "骞夸笢鐪佸箍宸炲競瓒婄鍖鸿В鏀捐矾456鍙�",
+  departureLongitude: 113.3245,
+  departureLatitude: 23.1291,
+  destinationLongitude: 113.2654,
+  destinationLatitude: 23.1389,
+  
+  // 鎵╁睍淇℃伅
+  hospitalOut: {
+    id: 123,
+    name: "骞垮窞甯傜涓�浜烘皯鍖婚櫌",
+    department: "鎬ヨ瘖绉�",
+    departmentId: 10,
+    bedNumber: "A101",
+    address: "骞夸笢鐪佸箍宸炲競澶╂渤鍖轰腑灞卞ぇ閬�123鍙�",
+    longitude: 113.3245,
+    latitude: 23.1291
+  },
+  hospitalIn: {
+    id: 456,
+    name: "骞垮窞甯備腑鍖诲尰闄�",
+    department: "楠ㄧ",
+    departmentId: 15,
+    bedNumber: "B205",
+    address: "骞夸笢鐪佸箍宸炲競瓒婄鍖鸿В鏀捐矾456鍙�",
+    longitude: 113.2654,
+    latitude: 23.1389
+  },
+  
+  patient: { ... },
+  transferDistance: 15.5,
+  price: 300.00
+}
+```
+
+### 鏁版嵁搴撳瓨鍌�
+
+**涓讳换鍔¤〃锛坰ys_task锛�**锛�
+
+| 瀛楁 | 鍊� | 璇存槑 |
+|------|-----|------|
+| task_id | 10001 | 浠诲姟ID |
+| task_type | EMERGENCY_TRANSFER | 浠诲姟绫诲瀷 |
+| departure_address | 骞夸笢鐪佸箍宸炲競澶╂渤鍖轰腑灞卞ぇ閬�123鍙� | 鍑哄彂鍦板潃锛堣浆鍑哄尰闄級 |
+| destination_address | 骞夸笢鐪佸箍宸炲競瓒婄鍖鸿В鏀捐矾456鍙� | 鐩殑鍦板潃锛堣浆鍏ュ尰闄級 |
+| departure_longitude | 113.3245 | 鍑哄彂鍦扮粡搴� |
+| departure_latitude | 23.1291 | 鍑哄彂鍦扮含搴� |
+| destination_longitude | 113.2654 | 鐩殑鍦扮粡搴� |
+| destination_latitude | 23.1389 | 鐩殑鍦扮含搴� |
+
+**鎵╁睍淇℃伅琛紙sys_task_emergency锛�**锛�
+
+| 瀛楁 | 鍊� | 璇存槑 |
+|------|-----|------|
+| emergency_id | 20001 | 鎵╁睍淇℃伅ID |
+| task_id | 10001 | 鍏宠仈浠诲姟ID |
+| hospital_out_id | 123 | 杞嚭鍖婚櫌ID |
+| hospital_out_name | 骞垮窞甯傜涓�浜烘皯鍖婚櫌 | 杞嚭鍖婚櫌鍚嶇О |
+| hospital_out_department_id | 10 | 杞嚭绉戝ID |
+| hospital_out_department | 鎬ヨ瘖绉� | 杞嚭绉戝 |
+| hospital_out_address | 骞夸笢鐪佸箍宸炲競澶╂渤鍖轰腑灞卞ぇ閬�123鍙� | 杞嚭鍖婚櫌鍦板潃 |
+| hospital_in_id | 456 | 杞叆鍖婚櫌ID |
+| hospital_in_name | 骞垮窞甯備腑鍖诲尰闄� | 杞叆鍖婚櫌鍚嶇О |
+| hospital_in_department_id | 15 | 杞叆绉戝ID |
+| hospital_in_department | 楠ㄧ | 杞叆绉戝 |
+| hospital_in_address | 骞夸笢鐪佸箍宸炲競瓒婄鍖鸿В鏀捐矾456鍙� | 杞叆鍖婚櫌鍦板潃 |
+
+## 搴旂敤鍦烘櫙
+
+### 1. 浠诲姟璋冨害
+
+璋冨害绯荤粺鍙互鏍规嵁鍑哄彂鍦板潗鏍囷紝璁$畻璺濈鏈�杩戠殑鍙敤杞﹁締锛�
+
+```javascript
+// 鏌ヨ绂诲嚭鍙戝湴鏈�杩戠殑杞﹁締
+SELECT v.*, 
+  SQRT(POW(v.current_longitude - task.departure_longitude, 2) + 
+       POW(v.current_latitude - task.departure_latitude, 2)) AS distance
+FROM tb_vehicle_info v
+JOIN sys_task task ON task.task_id = ?
+WHERE v.status = 'AVAILABLE'
+ORDER BY distance
+LIMIT 5
+```
+
+### 2. 璺緞瑙勫垝
+
+GPS瀵艰埅鍙互鐩存帴浣跨敤鍑哄彂鍦板拰鐩殑鍦板潗鏍囷細
+
+```javascript
+// 璋冪敤鍦板浘API瑙勫垝璺嚎
+const route = await mapAPI.planRoute({
+  origin: {
+    longitude: task.departureLongitude,
+    latitude: task.departureLatitude
+  },
+  destination: {
+    longitude: task.destinationLongitude,
+    latitude: task.destinationLatitude
+  }
+})
+
+// 鏄剧ず棰勮鏃堕棿鍜岃窛绂�
+console.log('棰勮琛岄┒鏃堕棿:', route.duration, '鍒嗛挓')
+console.log('棰勮琛岄┒璺濈:', route.distance, '鍏噷')
+```
+
+### 3. 缁熻鍒嗘瀽
+
+鎸夊尯鍩熺粺璁′换鍔¢噺锛�
+
+```sql
+-- 缁熻鍚勫尯鍩熺殑浠诲姟鏁伴噺
+SELECT 
+  SUBSTRING(departure_address, 1, CHARINDEX('甯�', departure_address)) AS region,
+  COUNT(*) AS task_count,
+  AVG(estimated_distance) AS avg_distance
+FROM sys_task
+WHERE task_type = 'EMERGENCY_TRANSFER'
+  AND create_time >= '2025-01-01'
+GROUP BY SUBSTRING(departure_address, 1, CHARINDEX('甯�', departure_address))
+ORDER BY task_count DESC
+```
+
+### 4. 浠诲姟鍒楄〃灞曠ず
+
+鍦ㄤ换鍔″垪琛ㄤ腑鏄剧ず鍑哄彂鍦板拰鐩殑鍦帮細
+
+```vue
+<view class="task-item">
+  <view class="task-info">
+    <text class="task-code">{{ task.taskCode }}</text>
+    <text class="task-type">鎬ユ晳杞繍</text>
+  </view>
+  <view class="task-location">
+    <view class="location-item">
+      <uni-icons type="location" size="16" color="#007AFF"></uni-icons>
+      <text class="departure">{{ task.departureAddress }}</text>
+    </view>
+    <view class="arrow">鈫�</view>
+    <view class="location-item">
+      <uni-icons type="location-filled" size="16" color="#ff4d4f"></uni-icons>
+      <text class="destination">{{ task.destinationAddress }}</text>
+    </view>
+  </view>
+</view>
+```
+
+## 寮傚父澶勭悊
+
+### 1. 鍖婚櫌鍦板潃涓虹┖
+
+**鍦烘櫙**: 鐢ㄦ埛閫夋嫨浜嗗尰闄絾鍦板潃鏈兘鑾峰彇
+
+**澶勭悊**:
+```javascript
+departureAddress: this.taskForm.hospitalOut.address || '',
+destinationAddress: this.taskForm.hospitalIn.address || '',
+```
+
+**缁撴灉**: 浣跨敤绌哄瓧绗︿覆锛屼笉褰卞搷浠诲姟鍒涘缓
+
+### 2. GPS鍧愭爣缂哄け
+
+**鍦烘櫙**: 鍖婚櫌鏁版嵁涓病鏈塆PS鍧愭爣淇℃伅
+
+**澶勭悊**:
+```javascript
+if (this.addressCoordinates.hospitalOutAddress) {
+  // 鍙湪鏈夊潗鏍囨椂鎵嶈缃�
+  submitData.departureLongitude = ...
+  submitData.departureLatitude = ...
+}
+```
+
+**缁撴灉**: 缁忕含搴﹀瓧娈典负 NULL锛屼笉褰卞搷浠诲姟鍒涘缓
+
+### 3. 鍦板潃杩囬暱
+
+**鍦烘櫙**: 瀹屾暣鍦板潃瓒呰繃鏁版嵁搴撳瓧娈甸暱搴﹂檺鍒讹紙500瀛楃锛�
+
+**澶勭悊**: 鏁版嵁搴撳瓧娈靛畾涔変负 `VARCHAR(500)`锛岄�氬父瓒冲
+
+**澶囬�夋柟妗�**: 濡傛灉纭疄瓒呴暱锛屽彲浠ュ湪鍓嶇鎴彇锛�
+```javascript
+departureAddress: (this.taskForm.hospitalOut.address || '').substring(0, 500),
+destinationAddress: (this.taskForm.hospitalIn.address || '').substring(0, 500),
+```
+
+## 鏁版嵁涓�鑷存��
+
+### 鍙岄噸瀛樺偍绛栫暐
+
+鍑哄彂鍦板拰鐩殑鍦颁俊鎭湪涓や釜鍦版柟瀛樺偍锛�
+
+1. **涓讳换鍔¤〃锛坰ys_task锛�**
+   - `departure_address` / `destination_address`
+   - `departure_longitude` / `departure_latitude`
+   - `destination_longitude` / `destination_latitude`
+   
+2. **鎵╁睍淇℃伅琛紙sys_task_emergency锛�**
+   - `hospital_out_address` / `hospital_in_address`
+   - `hospital_out_longitude` / `hospital_out_latitude`
+   - `hospital_in_longitude` / `hospital_in_latitude`
+
+### 涓轰粈涔堣鍙岄噸瀛樺偍锛�
+
+1. **涓讳换鍔¤〃**: 渚涢�氱敤浠诲姟璋冨害銆佺粺璁′娇鐢紝鎵�鏈変换鍔$被鍨嬬粺涓�
+2. **鎵╁睍琛�**: 淇濈暀瀹屾暣鐨勫尰闄俊鎭紝鍖呮嫭鍖婚櫌ID銆佸悕绉般�佺瀹ょ瓑
+
+### 鏁版嵁鍚屾淇濊瘉
+
+鍓嶇浠g爜纭繚鏁版嵁涓�鑷达細
+```javascript
+// 鍦板潃涓�鑷�
+departureAddress: this.taskForm.hospitalOut.address
+hospitalOut.address: this.taskForm.hospitalOut.address
+
+// GPS鍧愭爣涓�鑷�
+departureLongitude: this.addressCoordinates.hospitalOutAddress.lng
+hospitalOut.longitude: this.addressCoordinates.hospitalOutAddress.lng
+```
+
+## 鐩稿叧瑙勮寖
+
+鏍规嵁椤圭洰璁板繂锛�
+
+1. **鎬ユ晳杞繍鎵╁睍淇℃伅瀛樺偍鏂规**锛坢emory: 5b8a95d1锛�:
+   - 鉁� 鎬ユ晳杞繍浠诲姟鐨勬墿灞曚俊鎭噰鐢ㄧ嫭绔嬬殑 sys_task_emergency 琛�
+   - 鉁� 涓庝富浠诲姟琛ㄩ�氳繃浠诲姟ID鍏宠仈
+   - 鉁� 鏈淇敼纭繚浜嗕富浠诲姟琛ㄥ拰鎵╁睍琛ㄧ殑鏁版嵁鍚屾
+
+2. **鏃х郴缁熷悓姝ュ弬鏁版墿灞曡鍒�**锛坢emory: cabfc07d锛�:
+   - 鉁� 闇�瑕佷紶閫掑尰闄D鍜岀瀹D
+   - 鉁� 鍦板潃淇℃伅渚夸簬鏃х郴缁熷睍绀哄拰璋冨害
+
+## 娴嬭瘯寤鸿
+
+### 娴嬭瘯鍦烘櫙1锛氭甯稿垱寤轰换鍔�
+
+**鎿嶄綔**:
+1. 閫夋嫨杞嚭鍖婚櫌锛�"骞垮窞甯傜涓�浜烘皯鍖婚櫌"
+2. 鍦板潃鑷姩濉厖锛�"骞夸笢鐪佸箍宸炲競澶╂渤鍖轰腑灞卞ぇ閬�123鍙�"
+3. 閫夋嫨杞叆鍖婚櫌锛�"骞垮窞甯備腑鍖诲尰闄�"
+4. 鍦板潃鑷姩濉厖锛�"骞夸笢鐪佸箍宸炲競瓒婄鍖鸿В鏀捐矾456鍙�"
+5. 濉啓鍏朵粬淇℃伅骞朵繚瀛�
+
+**楠岃瘉**:
+```sql
+SELECT 
+  task_id,
+  departure_address,
+  destination_address,
+  departure_longitude,
+  departure_latitude,
+  destination_longitude,
+  destination_latitude
+FROM sys_task
+WHERE task_id = ?
+```
+
+**棰勬湡缁撴灉**:
+- `departure_address` = "骞夸笢鐪佸箍宸炲競澶╂渤鍖轰腑灞卞ぇ閬�123鍙�"
+- `destination_address` = "骞夸笢鐪佸箍宸炲競瓒婄鍖鸿В鏀捐矾456鍙�"
+- 濡傛灉鏈塆PS鍧愭爣锛岀粡绾害瀛楁鏈夊��
+- 濡傛灉鏃燝PS鍧愭爣锛岀粡绾害瀛楁涓� NULL
+
+### 娴嬭瘯鍦烘櫙2锛氬尰闄㈠湴鍧�涓虹┖
+
+**鎿嶄綔**:
+1. 閫夋嫨鐨勫尰闄㈡暟鎹腑娌℃湁鍦板潃淇℃伅
+2. 淇濆瓨浠诲姟
+
+**棰勬湡缁撴灉**:
+- `departure_address` = ""锛堢┖瀛楃涓诧級
+- `destination_address` = ""锛堢┖瀛楃涓诧級
+- 浠诲姟鍒涘缓鎴愬姛锛屼笉鎶ラ敊
+
+### 娴嬭瘯鍦烘櫙3锛氬湴鍧�鍙樻洿
+
+**鎿嶄綔**:
+1. 鍏堥�夋嫨鍖婚櫌A锛屽湴鍧�鑷姩濉厖
+2. 鍙堥�夋嫨鍖婚櫌B锛屽湴鍧�搴旇鏇存柊
+3. 淇濆瓨浠诲姟
+
+**棰勬湡缁撴灉**:
+- 淇濆瓨鐨勫湴鍧�鏄渶鍚庨�夋嫨鐨勫尰闄鐨勫湴鍧�
+- 涓嶄細娈嬬暀鍖婚櫌A鐨勫湴鍧�
+
+### 娴嬭瘯鍦烘櫙4锛氫换鍔″垪琛ㄦ樉绀�
+
+**鎿嶄綔**:
+1. 鍒涘缓浠诲姟鍚�
+2. 鍦ㄤ换鍔″垪琛ㄦ煡鐪�
+
+**棰勬湡缁撴灉**:
+- 浠诲姟鍒楄〃姝g‘鏄剧ず鍑哄彂鍦板拰鐩殑鍦�
+- GPS鍦板浘鑳芥纭畾浣嶄袱涓綅缃�
+
+## 浼樺寲寤鸿
+
+### 1. 鍦板潃绠�鍖栨樉绀�
+
+瀹屾暣鍦板潃鍙兘杩囬暱锛屽彲浠ユ彁渚涚畝鍖栫増鏈細
+
+```javascript
+// 鎻愬彇鍏抽敭淇℃伅锛氬競 + 鍖� + 涓昏閬撹矾
+function simplifyAddress(fullAddress) {
+  // "骞夸笢鐪佸箍宸炲競澶╂渤鍖轰腑灞卞ぇ閬�123鍙�" 鈫� "澶╂渤鍖轰腑灞卞ぇ閬�"
+  const match = fullAddress.match(/(.+?甯�)?(.+?鍖�)(.+?)(\d+鍙�)?/)
+  if (match) {
+    return (match[2] || '') + (match[3] || '')
+  }
+  return fullAddress
+}
+
+// 鍦ㄤ换鍔″垪琛ㄤ腑浣跨敤绠�鍖栧湴鍧�
+const displayAddress = simplifyAddress(task.departureAddress)
+```
+
+### 2. 鍦板潃楠岃瘉
+
+纭繚鍦板潃鏍煎紡姝g‘锛�
+
+```javascript
+function validateAddress(address) {
+  if (!address || address.length < 5) {
+    return false
+  }
+  // 妫�鏌ユ槸鍚﹀寘鍚叧閿瘝
+  const keywords = ['鐪�', '甯�', '鍖�', '鍘�', '璺�', '琛�', '閬�', '鍙�']
+  return keywords.some(keyword => address.includes(keyword))
+}
+```
+
+### 3. 鑷姩璁$畻璺濈
+
+濡傛灉鏈塆PS鍧愭爣锛岃嚜鍔ㄨ绠椾袱鐐硅窛绂伙細
+
+```javascript
+function calculateDistance(lat1, lng1, lat2, lng2) {
+  const R = 6371 // 鍦扮悆鍗婂緞锛堝叕閲岋級
+  const dLat = (lat2 - lat1) * Math.PI / 180
+  const dLng = (lng2 - lng1) * Math.PI / 180
+  const a = Math.sin(dLat/2) * Math.sin(dLat/2) +
+            Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
+            Math.sin(dLng/2) * Math.sin(dLng/2)
+  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a))
+  return R * c
+}
+
+// 鑷姩濉厖杞繍璺濈
+if (this.addressCoordinates.hospitalOutAddress && 
+    this.addressCoordinates.hospitalInAddress) {
+  const distance = calculateDistance(
+    this.addressCoordinates.hospitalOutAddress.lat,
+    this.addressCoordinates.hospitalOutAddress.lng,
+    this.addressCoordinates.hospitalInAddress.lat,
+    this.addressCoordinates.hospitalInAddress.lng
+  )
+  this.taskForm.transferDistance = distance.toFixed(2)
+}
+```
+
+## 鐗堟湰鍘嗗彶
+
+- **2025-01-25 v1**: 鍒濆鐗堟湰
+  - 鉁� 灏嗚浆鍑哄尰闄㈠湴鍧�鍐欏叆 departure_address
+  - 鉁� 灏嗚浆鍏ュ尰闄㈠湴鍧�鍐欏叆 destination_address
+  - 鉁� 鍚屾椂鍐欏叆GPS鍧愭爣鍒� departure/destination longitude/latitude
+  - 鉁� 纭繚涓讳换鍔¤〃鍜屾墿灞曡〃鏁版嵁涓�鑷�
+  - 鉁� 娣诲姞寮傚父澶勭悊锛堝湴鍧�涓虹┖鐨勬儏鍐碉級
diff --git "a/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\345\275\222\345\261\236\346\234\272\346\236\204\345\255\227\346\256\265\344\274\240\351\200\222\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\345\275\222\345\261\236\346\234\272\346\236\204\345\255\227\346\256\265\344\274\240\351\200\222\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..762e7a9
--- /dev/null
+++ "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\345\275\222\345\261\236\346\234\272\346\236\204\345\255\227\346\256\265\344\274\240\351\200\222\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,282 @@
+# 鎬ユ晳杞繍浠诲姟褰掑睘鏈烘瀯瀛楁浼犻�掑姛鑳借鏄�
+
+## 鍔熻兘姒傝堪
+鍦ㄥ垱寤烘�ユ晳杞繍浠诲姟鏃讹紝灏嗗墠绔�夋嫨鐨勫綊灞炴満鏋勶紙鍒嗗叕鍙革級鐨勯儴闂↖D浼犻�掑埌鍚庣锛屽苟淇濆瓨鍒� `sys_task` 琛ㄧ殑 `dept_id` 瀛楁涓��
+
+## 淇敼鍐呭
+
+### 1. 鍚庣 VO 绫绘墿灞�
+**鏂囦欢**锛歚ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java`
+
+#### 娣诲姞瀛楁
+```java
+/** 鎵ц浜哄憳ID鍒楄〃 */
+private List<Long> assigneeIds;
+
+/** 褰掑睘閮ㄩ棬ID */
+private Long deptId;
+```
+
+#### 娣诲姞 Getter 鍜� Setter
+```java
+public List<Long> getAssigneeIds() {
+    return assigneeIds;
+}
+
+public void setAssigneeIds(List<Long> assigneeIds) {
+    this.assigneeIds = assigneeIds;
+}
+
+public Long getDeptId() {
+    return deptId;
+}
+
+public void setDeptId(Long deptId) {
+    this.deptId = deptId;
+}
+```
+
+### 2. 鍚庣鏈嶅姟灞備慨鏀�
+**鏂囦欢**锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java`
+
+**淇敼 insertSysTask 鏂规硶**锛�
+
+```java
+// 淇敼鍓�
+task.setDeptId(SecurityUtils.getDeptId());
+
+// 淇敼鍚�
+// 浼樺厛浣跨敤鍓嶇浼犲叆鐨勯儴闂↖D锛屽鏋滄病鏈夊垯浣跨敤褰撳墠鐢ㄦ埛鐨勯儴闂↖D
+task.setDeptId(createVO.getDeptId() != null ? createVO.getDeptId() : SecurityUtils.getDeptId());
+```
+
+**閫昏緫璇存槑**锛�
+- 濡傛灉鍓嶇浼犲叆浜� `deptId`锛屼紭鍏堜娇鐢ㄥ墠绔紶鍏ョ殑鍊�
+- 濡傛灉鍓嶇娌℃湁浼犲叆 `deptId`锛堜负 null锛夛紝鍒欎娇鐢ㄥ綋鍓嶇櫥褰曠敤鎴风殑閮ㄩ棬ID浣滀负鍥為��
+- 纭繚鍚戝悗鍏煎鎬э細鏃х殑浠诲姟鍒涘缓娴佺▼涓嶅彈褰卞搷
+
+### 3. 鍓嶇鏁版嵁浼犻��
+**鏂囦欢**锛歚app/pages/task/create-emergency.vue`
+
+#### 鏁版嵁瀛楁瀹氫箟
+```javascript
+data() {
+  return {
+    selectedOrganization: '',
+    selectedOrganizationId: null, // 褰掑睘鏈烘瀯ID锛堥儴闂↖D锛�
+    selectedRegion: '', // 浠庡綊灞炴満鏋勪腑鎻愬彇鐨勫湴鍩熶俊鎭�
+    // ...
+  }
+}
+```
+
+#### 褰掑睘鏈烘瀯閫夋嫨澶勭悊
+```javascript
+onOrganizationChange(e) {
+  const index = e.detail.value
+  const selected = this.organizationOptions[index]
+  this.selectedOrganization = selected.deptName
+  this.selectedOrganizationId = selected.deptId // 淇濆瓨閮ㄩ棬ID
+  this.selectedRegion = selected.deptName.replace(/鍒嗗叕鍙�$/g, '').trim()
+  this.loadDefaultHospitals()
+}
+```
+
+#### 榛樿鍒嗗叕鍙稿姞杞�
+```javascript
+loadBranchCompanies() {
+  listBranchCompany().then(response => {
+    const list = response.data || []
+    this.organizationOptions = list.filter(dept => dept.parentId === 100)
+    this.organizations = this.organizationOptions.map(dept => dept.deptName)
+    
+    // 榛樿閫変腑褰撳墠鐢ㄦ埛鐨勫垎鍏徃
+    if (this.currentUser.branchCompanyName) {
+      const index = this.organizationOptions.findIndex(
+        dept => dept.deptName === this.currentUser.branchCompanyName
+      )
+      if (index !== -1) {
+        this.selectedOrganization = this.currentUser.branchCompanyName
+        this.selectedOrganizationId = this.organizationOptions[index].deptId // 淇濆瓨閮ㄩ棬ID
+        this.selectedRegion = this.selectedOrganization.replace(/鍒嗗叕鍙�$/g, '').trim()
+        this.loadDefaultHospitals()
+      }
+    }
+  })
+}
+```
+
+#### 鎻愪氦鏁版嵁鏋勫缓
+```javascript
+buildSubmitData() {
+  const submitData = {
+    taskType: 'EMERGENCY_TRANSFER',
+    deptId: this.selectedOrganizationId, // 褰掑睘鏈烘瀯ID锛堥儴闂↖D锛�
+    vehicleIds: this.selectedVehicleId ? [this.selectedVehicleId] : [],
+    assigneeIds: this.selectedStaff.map(staff => staff.userId),
+    assigneeId: this.selectedStaff.length > 0 ? this.selectedStaff[0].userId : null,
+    transferTime: this.taskForm.transferTime,
+    plannedStartTime: this.taskForm.transferTime,
+    documentTypeId: this.selectedDocumentTypeId,
+    taskTypeId: this.selectedEmergencyTaskTypeId,
+    departureAddress: this.taskForm.hospitalOut.address || '',
+    destinationAddress: this.taskForm.hospitalIn.address || '',
+    // ... 鍏朵粬瀛楁
+  }
+  return submitData
+}
+```
+
+## 鏁版嵁娴佺▼鍥�
+
+```mermaid
+graph LR
+    A[鐢ㄦ埛閫夋嫨褰掑睘鏈烘瀯] --> B[淇濆瓨selectedOrganizationId]
+    B --> C[鏋勫缓鎻愪氦鏁版嵁]
+    C --> D[deptId瀛楁浼犲叆鍚庣]
+    D --> E[鍚庣鎺ユ敹TaskCreateVO]
+    E --> F{deptId鏄惁涓簄ull?}
+    F -->|鍚 G[浣跨敤鍓嶇浼犲叆鐨刣eptId]
+    F -->|鏄瘄 H[浣跨敤褰撳墠鐢ㄦ埛鐨刣eptId]
+    G --> I[淇濆瓨鍒皊ys_task琛╙
+    H --> I
+```
+
+## 鏁版嵁搴撳瓧娈垫槧灏�
+
+| 鍓嶇瀛楁 | VO 瀛楁 | 瀹炰綋瀛楁 | 鏁版嵁搴撳瓧娈� | 璇存槑 |
+|---------|---------|----------|-----------|------|
+| selectedOrganizationId | deptId | deptId | dept_id | 褰掑睘閮ㄩ棬ID锛堝垎鍏徃ID锛� |
+
+## 涓氬姟鍦烘櫙
+
+### 鍦烘櫙 1锛氱敤鎴烽�夋嫨鍒嗗叕鍙稿垱寤轰换鍔�
+1. 鐢ㄦ埛鍦ㄥ垱寤轰换鍔¢〉闈㈤�夋嫨褰掑睘鏈烘瀯锛堝垎鍏徃锛�
+2. 鍓嶇淇濆瓨閫変腑鐨勫垎鍏徃鐨勯儴闂↖D鍒� `selectedOrganizationId`
+3. 鎻愪氦浠诲姟鏃讹紝灏� `selectedOrganizationId` 浣滀负 `deptId` 浼犵粰鍚庣
+4. 鍚庣淇濆瓨鍒� `sys_task` 琛ㄧ殑 `dept_id` 瀛楁
+
+### 鍦烘櫙 2锛氶粯璁ら�変腑鐢ㄦ埛鎵�鍦ㄥ垎鍏徃
+1. 椤甸潰鍔犺浇鏃讹紝鑷姩閫変腑褰撳墠鐢ㄦ埛鎵�鍦ㄧ殑鍒嗗叕鍙�
+2. 鍚屾椂淇濆瓨璇ュ垎鍏徃鐨勯儴闂↖D
+3. 鐢ㄦ埛鍙互鍒囨崲鍒板叾浠栧垎鍏徃
+4. 鎻愪氦鏃朵娇鐢ㄧ敤鎴烽�夋嫨鐨勫垎鍏徃ID
+
+### 鍦烘櫙 3锛氬悜鍚庡吋瀹癸紙鏈紶鍏eptId锛�
+1. 濡傛灉鍓嶇娌℃湁浼犲叆 `deptId`锛堟棫鐗堟湰鎴栧叾浠栧垱寤烘柟寮忥級
+2. 鍚庣鑷姩浣跨敤褰撳墠鐧诲綍鐢ㄦ埛鐨勯儴闂↖D
+3. 纭繚绯荤粺姝e父杩愯
+
+## 鍚庣鏁版嵁瀛樺偍
+
+### sys_task 琛�
+```sql
+CREATE TABLE sys_task (
+  task_id BIGINT PRIMARY KEY AUTO_INCREMENT,
+  task_code VARCHAR(50) NOT NULL COMMENT '浠诲姟缂栧彿',
+  task_type VARCHAR(50) NOT NULL COMMENT '浠诲姟绫诲瀷',
+  dept_id BIGINT COMMENT '褰掑睘閮ㄩ棬ID',
+  creator_id BIGINT COMMENT '鍒涘缓浜篒D',
+  assignee_id BIGINT COMMENT '鎵ц浜篒D',
+  -- ... 鍏朵粬瀛楁
+)
+```
+
+**dept_id 瀛楁璇存槑**锛�
+- 瀛樺偍浠诲姟鎵�灞炵殑閮ㄩ棬ID锛堥�氬父鏄垎鍏徃鐨勯儴闂↖D锛�
+- 鐢ㄤ簬鏁版嵁鏉冮檺鎺у埗銆佷换鍔℃煡璇㈣繃婊�
+- 涓� sys_dept 琛ㄧ殑 dept_id 瀛楁鍏宠仈
+- 鏀寔 NULL锛堜负浜嗗吋瀹规棫鏁版嵁锛�
+
+## 鏉冮檺鎺у埗
+
+### 鏁版嵁鏉冮檺
+閫氳繃 `dept_id` 瀛楁瀹炵幇閮ㄩ棬绾у埆鐨勬暟鎹潈闄愭帶鍒讹細
+1. 鐢ㄦ埛鍙兘鏌ョ湅鑷繁閮ㄩ棬鍙婂瓙閮ㄩ棬鐨勪换鍔�
+2. 绠$悊鍛樺彲浠ユ煡鐪嬫墍鏈夐儴闂ㄧ殑浠诲姟
+3. 浠诲姟缁熻鎸夐儴闂ㄥ垎缁�
+
+### 涓氬姟瑙勫垯
+1. 鍒涘缓浠诲姟鏃讹紝`dept_id` 浼樺厛浣跨敤鍓嶇閫夋嫨鐨勫綊灞炴満鏋処D
+2. 濡傛灉鍓嶇鏈彁渚涳紝浣跨敤鍒涘缓浜烘墍鍦ㄩ儴闂↖D
+3. 浠诲姟鍒涘缓鍚庯紝`dept_id` 涓嶅彲淇敼锛堜繚璇佹暟鎹竴鑷存�э級
+
+## 娴嬭瘯瑕佺偣
+
+### 鍔熻兘娴嬭瘯
+1. 鉁� 鐢ㄦ埛閫夋嫨褰掑睘鏈烘瀯鍚庯紝dept_id姝g‘淇濆瓨
+2. 鉁� 榛樿閫変腑鐢ㄦ埛鎵�鍦ㄥ垎鍏徃锛宒ept_id姝g‘璁剧疆
+3. 鉁� 鍒囨崲褰掑睘鏈烘瀯锛宒ept_id闅忎箣鏇存柊
+4. 鉁� 鎻愪氦浠诲姟鍚庯紝鏁版嵁搴揹ept_id瀛楁姝g‘瀛樺偍
+
+### 鍏煎鎬ф祴璇�
+1. 鉁� 涓嶄紶鍏eptId鏃讹紝浣跨敤鐢ㄦ埛閮ㄩ棬ID
+2. 鉁� 鏃х増鏈墠绔皟鐢ㄤ粛鐒舵甯�
+3. 鉁� 鍏朵粬浠诲姟绫诲瀷锛堢绁夎溅銆佹櫘閫氫换鍔★級涓嶅彈褰卞搷
+
+### 鏉冮檺娴嬭瘯
+1. 鉁� 鐢ㄦ埛鍙兘鐪嬪埌鑷繁閮ㄩ棬鐨勪换鍔�
+2. 鉁� 璺ㄩ儴闂ㄤ换鍔″垱寤哄拰鏌ヨ姝e父
+3. 鉁� 绠$悊鍛樻潈闄愭甯�
+
+## 鐩稿叧閰嶇疆
+
+### 鍒嗗叕鍙告暟鎹姞杞�
+鍓嶇閫氳繃浠ヤ笅鎺ュ彛鍔犺浇鍒嗗叕鍙稿垪琛細
+```javascript
+// API: /system/dept/list?parentId=100
+listBranchCompany()
+```
+
+**杩斿洖鏁版嵁缁撴瀯**锛�
+```json
+{
+  "code": 200,
+  "data": [
+    {
+      "deptId": 101,
+      "deptName": "骞垮窞鍒嗗叕鍙�",
+      "parentId": 100,
+      "ancestors": "0,100"
+    },
+    {
+      "deptId": 102,
+      "deptName": "娣卞湷鍒嗗叕鍙�",
+      "parentId": 100,
+      "ancestors": "0,100"
+    }
+  ]
+}
+```
+
+## 娉ㄦ剰浜嬮」
+
+1. **閮ㄩ棬ID涓庣敤鎴烽儴闂↖D鐨勫尯鍒�**锛�
+   - `dept_id`锛氫换鍔℃墍灞炵殑閮ㄩ棬锛堥�氬父鏄垎鍏徃锛�
+   - `creator_id`锛氫换鍔″垱寤轰汉锛堜釜浜猴級
+   - 涓よ�呭彲浠ヤ笉鍚岋紙渚嬪锛氭�婚儴浜哄憳涓哄垎鍏徃鍒涘缓浠诲姟锛�
+
+2. **鏁版嵁涓�鑷存��**锛�
+   - 閫夋嫨褰掑睘鏈烘瀯鍚庯紝鍚屾椂鎻愬彇鍦板煙鍏抽敭璇嶇敤浜庡尰闄㈣繃婊�
+   - 纭繚褰掑睘鏈烘瀯銆佸湴鍩熴�佸尰闄㈡暟鎹殑涓�鑷存��
+
+3. **榛樿鍊煎鐞�**锛�
+   - 浼樺厛浣跨敤鍓嶇浼犲叆鐨勫��
+   - 鍥為��浣跨敤褰撳墠鐢ㄦ埛鐨勯儴闂↖D
+   - 閬垮厤鏁版嵁涓虹┖瀵艰嚧鐨勫紓甯�
+
+4. **鏃х郴缁熷悓姝�**锛�
+   - dept_id 鐢ㄤ簬鐢熸垚鏃х郴缁熷悓姝ュ弬鏁�
+   - ServiceOrdClass 鍙傛暟浣跨敤 dept.department_id
+   - ServiceOrdAreaType 鍙傛暟浣跨敤 dept.serviceOrderClass
+
+## 鎬荤粨
+
+鏈淇敼瀹炵幇浜嗘�ユ晳杞繍浠诲姟鍒涘缓鏃跺綊灞炴満鏋勫瓧娈电殑瀹屾暣浼犻�掗摼璺細
+
+1. 鉁� **鍓嶇**锛氱敤鎴烽�夋嫨褰掑睘鏈烘瀯锛屼繚瀛橀儴闂↖D
+2. 鉁� **VO 绫�**锛氭坊鍔� deptId 瀛楁鎺ユ敹鍓嶇鏁版嵁
+3. 鉁� **鏈嶅姟灞�**锛氫紭鍏堜娇鐢ㄥ墠绔紶鍏ョ殑 deptId
+4. 鉁� **鏁版嵁搴�**锛氭纭繚瀛樺埌 sys_task.dept_id 瀛楁
+
+纭繚浜嗘暟鎹殑瀹屾暣鎬у拰涓氬姟閫昏緫鐨勬纭�э紝鍚屾椂淇濇寔浜嗗悜鍚庡吋瀹规�с��
diff --git "a/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\345\277\205\345\241\253\351\241\271\346\240\241\351\252\214\345\256\214\345\226\204.md" "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\345\277\205\345\241\253\351\241\271\346\240\241\351\252\214\345\256\214\345\226\204.md"
new file mode 100644
index 0000000..b7e8f07
--- /dev/null
+++ "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\345\277\205\345\241\253\351\241\271\346\240\241\351\252\214\345\256\214\345\226\204.md"
@@ -0,0 +1,212 @@
+# 鎬ユ晳杞繍浠诲姟蹇呭~椤规牎楠屽畬鍠勮鏄�
+
+## 馃搵 淇敼姒傝堪
+
+涓烘�ユ晳杞繍浠诲姟鍒涘缓椤甸潰娣诲姞瀹屾暣鐨勫繀濉」鏍¢獙锛屽苟涓烘墍鏈夊繀濉瓧娈垫坊鍔犵孩鑹叉槦鍙凤紙*锛夋爣璇嗭紝鎻愬崌鐢ㄦ埛浣撻獙鍜屾暟鎹畬鏁存�с��
+
+## 鉁� 鏂板蹇呭~椤规牎楠�
+
+### 1. 浠诲姟绫诲瀷锛堝繀濉級
+- **瀛楁**: `selectedEmergencyTaskType`
+- **鎻愮ず**: "璇烽�夋嫨浠诲姟绫诲瀷"
+- **鏁版嵁婧�**: SQL Server `dictionary` 琛紙`vtitle='ServiceOrderType'`锛�
+- **淇濆瓨瀛楁**: `task_type_id`
+
+### 2. 鍗曟嵁绫诲瀷锛堝繀濉級
+- **瀛楁**: `selectedDocumentType`
+- **鎻愮ず**: "璇烽�夋嫨鍗曟嵁绫诲瀷"
+- **鏁版嵁婧�**: SQL Server `dictionary` 琛紙`vtitle='ServiceOrdAreaType'`锛�
+- **淇濆瓨瀛楁**: `document_type_id`
+
+## 馃摑 瀹屾暣鐨勫繀濉」鍒楄〃
+
+| # | 瀛楁鍚嶇О | 瀛楁鏍囪瘑 | 鏍¢獙鎻愮ず | 绾㈣壊鏄熷彿 |
+|---|---------|---------|---------|---------|
+| 1 | 浠诲姟杞﹁締 | `selectedVehicleId` | 璇烽�夋嫨浠诲姟杞﹁締 | 鉁� |
+| 2 | 浠诲姟绫诲瀷 | `selectedEmergencyTaskType` | 璇烽�夋嫨浠诲姟绫诲瀷 | 鉁� |
+| 3 | 鍗曟嵁绫诲瀷 | `selectedDocumentType` | 璇烽�夋嫨鍗曟嵁绫诲瀷 | 鉁� |
+| 4 | 鎮h�呭鍚� | `taskForm.patient.name` | 璇疯緭鍏ユ偅鑰呭鍚� | 鉁� |
+| 5 | 鑱旂郴鐢佃瘽 | `taskForm.patient.phone` | 璇疯緭鍏ユ偅鑰呰仈绯荤數璇� | 鉁� |
+| 6 | 杞嚭鍖婚櫌鍚嶇О | `taskForm.hospitalOut.name` | 璇疯緭鍏ヨ浆鍑哄尰闄㈠悕绉� | 鉁� |
+| 7 | 杞嚭鍖婚櫌绉戝 | `taskForm.hospitalOut.department` | 璇烽�夋嫨杞嚭鍖婚櫌绉戝 | 鉁� |
+| 8 | 杞叆鍖婚櫌鍚嶇О | `taskForm.hospitalIn.name` | 璇疯緭鍏ヨ浆鍏ュ尰闄㈠悕绉� | 鉁� |
+| 9 | 杞叆鍖婚櫌绉戝 | `taskForm.hospitalIn.department` | 璇烽�夋嫨杞叆鍖婚櫌绉戝 | 鉁� |
+
+## 馃帹 瑙嗚鏍囪瘑
+
+### 绾㈣壊鏄熷彿鏍峰紡
+```scss
+.form-label {
+  font-size: 28rpx;
+  margin-bottom: 15rpx;
+  color: #333;
+  
+  &.required::before {
+    content: '*';
+    color: #ff4d4f;  // 绾㈣壊
+    margin-right: 4rpx;
+    font-weight: bold;
+  }
+}
+```
+
+### 鏄剧ず鏁堟灉
+```
+* 浠诲姟杞﹁締
+* 浠诲姟绫诲瀷
+* 鍗曟嵁绫诲瀷
+  杞繍鏃堕棿
+* 鎮h�呭鍚�
+* 鑱旂郴鐢佃瘽
+```
+
+## 馃攳 鏍¢獙閫昏緫
+
+### 鏍¢獙椤哄簭
+```javascript
+validateForm() {
+  // 1. 浠诲姟杞﹁締
+  if (!this.selectedVehicleId) {
+    this.$modal.showToast('璇烽�夋嫨浠诲姟杞﹁締')
+    return false
+  }
+  
+  // 2. 浠诲姟绫诲瀷锛堟柊澧烇級
+  if (!this.selectedEmergencyTaskType) {
+    this.$modal.showToast('璇烽�夋嫨浠诲姟绫诲瀷')
+    return false
+  }
+  
+  // 3. 鍗曟嵁绫诲瀷锛堟柊澧烇級
+  if (!this.selectedDocumentType) {
+    this.$modal.showToast('璇烽�夋嫨鍗曟嵁绫诲瀷')
+    return false
+  }
+  
+  // 4. 鎮h�呭鍚�
+  if (!this.taskForm.patient.name) {
+    this.$modal.showToast('璇疯緭鍏ユ偅鑰呭鍚�')
+    return false
+  }
+  
+  // 5. 鑱旂郴鐢佃瘽
+  if (!this.taskForm.patient.phone) {
+    this.$modal.showToast('璇疯緭鍏ユ偅鑰呰仈绯荤數璇�')
+    return false
+  }
+  
+  // 6. 杞嚭鍖婚櫌鍚嶇О
+  if (!this.taskForm.hospitalOut.name) {
+    this.$modal.showToast('璇疯緭鍏ヨ浆鍑哄尰闄㈠悕绉�')
+    return false
+  }
+  
+  // 7. 杞嚭鍖婚櫌绉戝
+  if (!this.taskForm.hospitalOut.department) {
+    this.$modal.showToast('璇烽�夋嫨杞嚭鍖婚櫌绉戝')
+    return false
+  }
+  
+  // 8. 杞叆鍖婚櫌鍚嶇О
+  if (!this.taskForm.hospitalIn.name) {
+    this.$modal.showToast('璇疯緭鍏ヨ浆鍏ュ尰闄㈠悕绉�')
+    return false
+  }
+  
+  // 9. 杞叆鍖婚櫌绉戝
+  if (!this.taskForm.hospitalIn.department) {
+    this.$modal.showToast('璇烽�夋嫨杞叆鍖婚櫌绉戝')
+    return false
+  }
+  
+  return true
+}
+```
+
+## 馃搳 淇敼鏂囦欢
+
+| 鏂囦欢 | 淇敼鍐呭 | 琛屾暟鍙樺寲 |
+|------|---------|---------|
+| `create-emergency.vue` | 鏂板鏍¢獙閫昏緫 + 娣诲姞绾㈣壊鏄熷彿 | +26/-9 |
+
+## 馃幆 涓氬姟瑙勫垯
+
+### 浠诲姟绫诲瀷
+- **蹇呭~鍘熷洜**: 鐢ㄤ簬鍚屾鍒版棫绯荤粺鐨� `ServiceOrdType` 鍙傛暟
+- **鍏宠仈瀛楁**: `sys_task_emergency.task_type_id`
+- **鏃х郴缁熸槧灏�**: `ServiceOrdType`
+
+### 鍗曟嵁绫诲瀷
+- **蹇呭~鍘熷洜**: 鐢ㄤ簬鍚屾鍒版棫绯荤粺鐨� `ServiceOrdAreaType` 鍙傛暟
+- **鍏宠仈瀛楁**: `sys_task_emergency.document_type_id`
+- **鏃х郴缁熸槧灏�**: `ServiceOrdAreaType`
+
+### 绉戝淇℃伅
+- **蹇呭~鍘熷洜**: 
+  1. 涓氬姟蹇呴渶淇℃伅锛堝尰闄㈣浆杩愬繀椤绘槑纭瀹わ級
+  2. 鐢ㄤ簬鍚屾鍒版棫绯荤粺鐨� `ServiceOrdPtServicesID` 鍜� `ServiceOrdPtInServicesID` 鍙傛暟
+- **鍏宠仈瀛楁**: 
+  - `sys_task_emergency.hospital_out_department_id`
+  - `sys_task_emergency.hospital_in_department_id`
+- **鏃х郴缁熸槧灏�**: 
+  - `ServiceOrdPtServicesID` (杞嚭绉戝ID)
+  - `ServiceOrdPtInServicesID` (杞叆绉戝ID)
+
+## 鉁� 娴嬭瘯鍦烘櫙
+
+### 鍦烘櫙1: 鏈�夋嫨浠诲姟绫诲瀷
+1. 濉啓鍏朵粬蹇呭~椤�
+2. 涓嶉�夋嫨浠诲姟绫诲瀷
+3. 鐐瑰嚮淇濆瓨
+4. **棰勬湡**: 鎻愮ず"璇烽�夋嫨浠诲姟绫诲瀷"
+
+### 鍦烘櫙2: 鏈�夋嫨鍗曟嵁绫诲瀷
+1. 濉啓鍏朵粬蹇呭~椤�
+2. 涓嶉�夋嫨鍗曟嵁绫诲瀷
+3. 鐐瑰嚮淇濆瓨
+4. **棰勬湡**: 鎻愮ず"璇烽�夋嫨鍗曟嵁绫诲瀷"
+
+### 鍦烘櫙3: 鏈�夋嫨杞嚭绉戝
+1. 濉啓鍏朵粬蹇呭~椤�
+2. 閫夋嫨杞嚭鍖婚櫌浣嗕笉閫夋嫨绉戝
+3. 鐐瑰嚮淇濆瓨
+4. **棰勬湡**: 鎻愮ず"璇烽�夋嫨杞嚭鍖婚櫌绉戝"
+
+### 鍦烘櫙4: 鏈�夋嫨杞叆绉戝
+1. 濉啓鍏朵粬蹇呭~椤�
+2. 閫夋嫨杞叆鍖婚櫌浣嗕笉閫夋嫨绉戝
+3. 鐐瑰嚮淇濆瓨
+4. **棰勬湡**: 鎻愮ず"璇烽�夋嫨杞叆鍖婚櫌绉戝"
+
+### 鍦烘櫙5: 鍏ㄩ儴濉啓瀹屾暣
+1. 濉啓鎵�鏈夊繀濉」
+2. 鐐瑰嚮淇濆瓨
+3. **棰勬湡**: 姝e父淇濆瓨骞惰烦杞埌浠诲姟鍒楄〃
+
+## 馃敆 鐩稿叧鏂囨。
+
+- [鎬ユ晳杞繍绉戝鏁版嵁婧愬強瀛樺偍瑙勮寖](../README.md#绉戝鏁版嵁瑙勮寖)
+- [浠诲姟绫诲瀷鍔ㄦ�佸姞杞介厤缃甝(../README.md#浠诲姟绫诲瀷閰嶇疆)
+- [鏃х郴缁熷悓姝ュ弬鏁版槧灏刔(../prd/鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md)
+
+## 馃挕 鐢ㄦ埛浣撻獙浼樺寲
+
+### Before锛堜慨鏀瑰墠锛�
+- 鉂� 鏃犳硶鍖哄垎鍝簺瀛楁蹇呭~
+- 鉂� 鐢ㄦ埛鍙兘閬楁紡閲嶈淇℃伅
+- 鉂� 鎻愪氦澶辫触鍚庢墠鐭ラ亾缂哄皯鍝簺瀛楁
+
+### After锛堜慨鏀瑰悗锛�
+- 鉁� 绾㈣壊鏄熷彿娓呮櫚鏍囪瘑蹇呭~椤�
+- 鉁� 淇濆瓨鍓嶉�愰」鏍¢獙锛屽強鏃舵彁绀�
+- 鉁� 鍑忓皯鏃犳晥鎻愪氦锛屾彁鍗囧~鍐欐晥鐜�
+
+## 馃帄 鎬荤粨
+
+鏈瀹屽杽锛�
+1. 鉁� 鏂板浠诲姟绫诲瀷鍜屽崟鎹被鍨嬬殑蹇呭~鏍¢獙
+2. 鉁� 涓哄叏閮�9涓繀濉瓧娈垫坊鍔犵孩鑹叉槦鍙锋爣璇�
+3. 鉁� 瀹屽杽鏍¢獙鎻愮ず淇℃伅锛屽紩瀵肩敤鎴锋纭~鍐�
+4. 鉁� 纭繚鎻愪氦鏁版嵁鐨勫畬鏁存�э紝婊¤冻鏃х郴缁熷悓姝ラ渶姹�
+
+鐜板湪鐢ㄦ埛鍙互娓呮櫚鍦扮湅鍒板摢浜涘瓧娈垫槸蹇呭~鐨勶紝鎻愪氦鏃朵篃浼氬緱鍒版槑纭殑鎻愮ず锛侌煄�
diff --git "a/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\347\261\273\345\236\213\344\274\230\345\214\226\350\257\264\346\230\216.md" "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\347\261\273\345\236\213\344\274\230\345\214\226\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..d1b4085
--- /dev/null
+++ "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\347\261\273\345\236\213\344\274\230\345\214\226\350\257\264\346\230\216.md"
@@ -0,0 +1,208 @@
+# 鎬ユ晳杞繍浠诲姟绫诲瀷浼樺寲璇存槑
+
+## 浼樺寲姒傝堪
+
+灏嗘�ユ晳杞繍浠诲姟鐨�"浠诲姟绫诲瀷"瀛楁浠庣‖缂栫爜鏀逛负浠嶴QL Server鏁版嵁搴撳姩鎬佸姞杞斤紝鎻愬崌绯荤粺鐨勭伒娲绘�у拰鍙淮鎶ゆ�с��
+
+## 淇敼瀵规瘮
+
+### 浼樺寲鍓�
+```javascript
+// 纭紪鐮佺殑浠诲姟绫诲瀷鍒楄〃
+emergencyTaskTypes: ['鎬ユ晳杞繍', '鑸┖杞繍']
+```
+
+### 浼樺寲鍚�
+```javascript
+// 浠嶴QL Server鍔ㄦ�佸姞杞�
+emergencyTaskTypes: []  // 杩愯鏃朵粠鏁版嵁搴撳姞杞�
+emergencyTaskTypeOptions: []  // 杞崲涓簆icker缁勪欢鎵�闇�鏍煎紡
+
+// 鏁版嵁婧怱QL
+SELECT vID, vtext 
+FROM dictionary 
+WHERE vtitle='ServiceOrderType' AND vType>=1 
+ORDER BY vOrder
+```
+
+## 鎶�鏈疄鐜�
+
+### 1. 鍚庣鏂板鎺ュ彛
+
+**Service灞傦細** `IOrderClassDataService.java`
+```java
+/**
+ * 浠� SQL Server 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鍒楄〃锛圫erviceOrderType锛�
+ * 
+ * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrderType' AND vType>=1 ORDER BY vOrder
+ * 
+ * @return 鏈嶅姟璁㈠崟绫诲瀷鍒楄〃
+ */
+List<OrderClassDTO> getServiceOrderTypes();
+```
+
+**Mapper灞傦細** `OrderClassMapper.xml`
+```xml
+<!-- 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鍒楄〃锛圫erviceOrderType锛� -->
+<select id="selectServiceOrderTypes" resultMap="OrderClassResult">
+    SELECT vID, vtext
+    FROM dictionary
+    WHERE vtitle = 'ServiceOrderType' AND vType >= 1
+    ORDER BY vOrder
+</select>
+```
+
+**Controller灞傦細** `SqlServerDictionaryController.java`
+```java
+@GetMapping("/serviceOrderTypes")
+public AjaxResult getServiceOrderTypes() {
+    List<OrderClassDTO> list = orderClassDataService.getServiceOrderTypes();
+    return AjaxResult.success("鏌ヨ鎴愬姛", list);
+}
+```
+
+### 2. 鍓嶇璋冪敤
+
+**API鎺ュ彛锛�** `app/api/dictionary.js`
+```javascript
+export function getServiceOrderTypes() {
+  return request({
+    url: '/sqlserver/dictionary/serviceOrderTypes',
+    method: 'get'
+  })
+}
+```
+
+**椤甸潰瀹炵幇锛�** `create-emergency.vue`
+```javascript
+import { getServiceOrderTypes } from "@/api/dictionary"
+
+// 鍔犺浇浠诲姟绫诲瀷鏁版嵁锛堜粠 SQL Server锛�
+loadEmergencyTaskTypes() {
+  getServiceOrderTypes().then(response => {
+    const list = response.data || []
+    this.emergencyTaskTypes = list
+    this.emergencyTaskTypeOptions = list.map(item => ({
+      id: item.vID,
+      text: item.vtext
+    }))
+  }).catch(error => {
+    console.error('鍔犺浇浠诲姟绫诲瀷澶辫触:', error)
+    this.emergencyTaskTypes = []
+    this.emergencyTaskTypeOptions = []
+  })
+}
+
+// 浠诲姟绫诲瀷閫夋嫨
+onEmergencyTaskTypeChange(e) {
+  const index = e.detail.value
+  const selected = this.emergencyTaskTypeOptions[index]
+  this.selectedEmergencyTaskType = selected.text
+  this.selectedEmergencyTaskTypeId = selected.id
+}
+```
+
+**UI缁勪欢锛�**
+```vue
+<view class="form-item">
+  <view class="form-label">浠诲姟绫诲瀷</view>
+  <picker mode="selector" :range="emergencyTaskTypeOptions" range-key="text" @change="onEmergencyTaskTypeChange">
+    <view class="form-input picker-input">
+      {{ selectedEmergencyTaskType || '璇烽�夋嫨浠诲姟绫诲瀷' }}
+      <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+    </view>
+  </picker>
+</view>
+```
+
+### 3. 鏁版嵁搴撳瓧娈�
+
+**瀹炰綋绫伙細** `SysTaskEmergency.java`
+```java
+/** 浠诲姟绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛� */
+private String taskTypeId;
+```
+
+**鏁版嵁搴撹〃锛�** `sys_task_emergency`
+```sql
+ALTER TABLE sys_task_emergency 
+ADD COLUMN task_type_id VARCHAR(50) COMMENT '浠诲姟绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛寁title=ServiceOrderType锛�';
+
+CREATE INDEX idx_task_type_id ON sys_task_emergency(task_type_id);
+```
+
+**Service淇濆瓨锛�** `SysTaskServiceImpl.saveEmergencyInfo()`
+```java
+// 璁剧疆浠诲姟绫诲瀷ID
+emergencyInfo.setTaskTypeId(createVO.getTaskTypeId());
+```
+
+## 浼樺寲浼樺娍
+
+1. **鏁版嵁闆嗕腑绠$悊**锛氫换鍔$被鍨嬫暟鎹粺涓�瀛樺偍鍦⊿QL Server鐨刣ictionary琛ㄤ腑锛屼究浜庣淮鎶�
+2. **鍔ㄦ�佸彲閰嶇疆**锛氭棤闇�淇敼浠g爜锛岄�氳繃淇敼鏁版嵁搴撳嵆鍙皟鏁翠换鍔$被鍨嬮�夐」
+3. **鏁版嵁涓�鑷存��**锛氫笌鏃х郴缁熶繚鎸佹暟鎹粨鏋勪竴鑷达紝渚夸簬鍚庣画鏁版嵁杩佺Щ鍜屽悓姝�
+4. **鎵╁睍鎬у己**锛氭湭鏉ユ坊鍔犳柊鐨勪换鍔$被鍨嬪彧闇�鍦ㄦ暟鎹簱涓彃鍏ユ暟鎹紝鍓嶇鑷姩璇嗗埆
+5. **鐢ㄦ埛浣撻獙濂�**锛氫笅鎷夐�夋嫨鍣ㄨ嚜鍔ㄦ寜vOrder瀛楁鎺掑簭锛屾樉绀烘洿鍔犲弸濂�
+
+## SQL鏌ヨ鏉′欢璇存槑
+
+**ServiceOrderType (浠诲姟绫诲瀷):**
+- 鏌ヨ鏉′欢锛歚vtitle='ServiceOrderType' AND vType>=1`
+- 璇存槑锛歷Type >= 1 琛ㄧず鑾峰彇鎵�鏈夌被鍨嬪�煎ぇ浜庣瓑浜�1鐨勮褰曪紝鑼冨洿鍖归厤
+
+**ServiceOrdAreaType (鍗曟嵁绫诲瀷):**
+- 鏌ヨ鏉′欢锛歚vtitle='ServiceOrdAreaType' AND vType=1`
+- 璇存槑锛歷Type = 1 琛ㄧず绮剧‘鍖归厤绫诲瀷鍊间负1鐨勮褰�
+
+## 鏁版嵁娴佸悜
+
+```
+SQL Server dictionary琛� (ServiceOrderType)
+  鈫� (閫氳繃OrderClassMapper鏌ヨ)
+OrderClassDataService
+  鈫� (杩斿洖List<OrderClassDTO>)
+SqlServerDictionaryController
+  鈫� (API鎺ュ彛 /sqlserver/dictionary/serviceOrderTypes)
+鍓嶇 getServiceOrderTypes()
+  鈫� (杞崲涓簆icker缁勪欢鏍煎紡)
+emergencyTaskTypeOptions: [{id: vID, text: vtext}]
+  鈫� (鐢ㄦ埛閫夋嫨)
+selectedEmergencyTaskTypeId
+  鈫� (鎻愪氦鍒板悗绔�)
+TaskCreateVO.taskTypeId
+  鈫� (淇濆瓨鍒版暟鎹簱)
+sys_task_emergency.task_type_id
+```
+
+## 娴嬭瘯楠岃瘉
+
+1. 鍚姩鍚庣鏈嶅姟锛岃闂帴鍙o細`GET /sqlserver/dictionary/serviceOrderTypes`
+2. 楠岃瘉杩斿洖鏁版嵁鏍煎紡锛歚[{vID: "1", vtext: "鎬ユ晳杞繍"}, ...]`
+3. 鎵撳紑鍓嶇浠诲姟鍒涘缓椤甸潰锛屾鏌ヤ换鍔$被鍨嬩笅鎷夋鏄惁姝e父鍔犺浇
+4. 閫夋嫨浠诲姟绫诲瀷鍚庢彁浜わ紝楠岃瘉task_type_id瀛楁姝g‘淇濆瓨
+
+## 鐩稿叧鏂囦欢娓呭崟
+
+### 鍚庣鏂囦欢
+- `ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java`
+- `ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml`
+- `ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml`
+- `ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java`
+
+### 鍓嶇鏂囦欢
+- `app/api/dictionary.js`
+- `app/pages/task/create-emergency.vue`
+
+### SQL鏂囦欢
+- `sql/add_document_type_to_emergency.sql`
+
+## 鐗堟湰淇℃伅
+- 浼樺寲鏃堕棿锛�2025-10-19
+- 浼樺寲鍐呭锛氫换鍔$被鍨嬪瓧娈典粠纭紪鐮佹敼涓哄姩鎬佸姞杞�
+- 鐗堟湰锛歷1.1
diff --git "a/prd/\346\200\245\346\225\221\350\275\254\350\277\220\345\214\273\351\231\242ID\345\255\227\346\256\265\346\267\273\345\212\240\350\257\264\346\230\216.md" "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\345\214\273\351\231\242ID\345\255\227\346\256\265\346\267\273\345\212\240\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..4318b42
--- /dev/null
+++ "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\345\214\273\351\231\242ID\345\255\227\346\256\265\346\267\273\345\212\240\350\257\264\346\230\216.md"
@@ -0,0 +1,345 @@
+# 鎬ユ晳杞繍浠诲姟鍖婚櫌ID瀛楁娣诲姞璇存槑
+
+## 馃搵 闇�姹傝儗鏅�
+
+鎬ユ晳杞繍浠诲姟涓殑鍖婚櫌淇℃伅鏉ヨ嚜 SQL Server 鐨� `hosp_data` 琛紝鍓嶇閫氳繃鎼滅储閫夋嫨鍖婚櫌銆備负浜嗕究浜庢暟鎹叧鑱旀煡璇㈠拰鍒嗘瀽锛岄渶瑕佸湪 `sys_task_emergency` 琛ㄤ腑涓嶄粎淇濆瓨鍖婚櫌鍚嶇О锛岃繕闇�瑕佷繚瀛樺尰闄D銆�
+
+## 馃幆 瀹炵幇鐩爣
+
+- 鉁� 鍦� `sys_task_emergency` 琛ㄤ腑娣诲姞 `hospital_out_id` 鍜� `hospital_in_id` 瀛楁
+- 鉁� 鍓嶇閫夋嫨鍖婚櫌鏃跺悓鏃朵繚瀛樺尰闄D鍜屽尰闄㈠悕绉�
+- 鉁� 鍚庣鎺ユ敹骞朵繚瀛樺尰闄D
+- 鉁� 鏀寔閫氳繃鍖婚櫌ID杩涜鍏宠仈鏌ヨ
+
+## 馃搳 鏁版嵁搴撳彉鏇�
+
+### SQL 鑴氭湰
+
+鏂囦欢璺緞锛歚sql/add_hospital_id_fields.sql`
+
+```sql
+-- 1. 娣诲姞杞嚭鍖婚櫌ID瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN hospital_out_id BIGINT COMMENT '杞嚭鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛�' AFTER hospital_out_name;
+
+-- 2. 娣诲姞杞叆鍖婚櫌ID瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN hospital_in_id BIGINT COMMENT '杞叆鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛�' AFTER hospital_in_name;
+
+-- 3. 鍒涘缓绱㈠紩浠ユ彁鍗囨煡璇㈡�ц兘
+CREATE INDEX idx_hospital_out_id ON sys_task_emergency(hospital_out_id);
+CREATE INDEX idx_hospital_in_id ON sys_task_emergency(hospital_in_id);
+```
+
+### 瀛楁璇存槑
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 | 鍏佽NULL |
+|--------|------|------|---------|
+| hospital_out_id | BIGINT | 杞嚭鍖婚櫌ID锛屽叧鑱� hosp_data.HospID | 鏄� |
+| hospital_in_id | BIGINT | 杞叆鍖婚櫌ID锛屽叧鑱� hosp_data.HospID | 鏄� |
+
+**涓轰粈涔堝厑璁� NULL锛�**
+- 鍘嗗彶鏁版嵁鍙兘鍙湁鍖婚櫌鍚嶇О娌℃湁ID
+- 鐢ㄦ埛鍙兘鎵嬪姩杈撳叆鍖婚櫌鍚嶇О鑰屼笉鏄粠鍒楄〃閫夋嫨
+- 淇濇寔鏁版嵁鍏煎鎬�
+
+## 馃敡 浠g爜鍙樻洿
+
+### 1. 瀹炰綋绫绘洿鏂�
+
+**鏂囦欢**锛歚ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java`
+
+```java
+/** 杞嚭鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛� */
+private Long hospitalOutId;
+
+/** 杞叆鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛� */
+private Long hospitalInId;
+
+// 娣诲姞瀵瑰簲鐨� getter 鍜� setter 鏂规硶
+```
+
+### 2. Mapper XML 鏇存柊
+
+**鏂囦欢**锛歚ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml`
+
+**ResultMap 娣诲姞鏄犲皠**锛�
+```xml
+<result property="hospitalOutId" column="hospital_out_id" />
+<result property="hospitalInId" column="hospital_in_id" />
+```
+
+**SQL 鏌ヨ娣诲姞瀛楁**锛�
+```xml
+hospital_out_id, hospital_in_id
+```
+
+**Insert 鍜� Update 娣诲姞瀛楁澶勭悊**锛�
+```xml
+<if test="hospitalOutId != null">hospital_out_id,</if>
+<if test="hospitalInId != null">hospital_in_id,</if>
+```
+
+### 3. VO 绫绘洿鏂�
+
+**鏂囦欢**锛歚ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java`
+
+**HospitalInfo 鍐呴儴绫绘坊鍔犲瓧娈�**锛�
+```java
+public static class HospitalInfo {
+    private Long id;  // 鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛�
+    private String name;
+    private String department;
+    // ... 鍏朵粬瀛楁
+    
+    public Long getId() {
+        return id;
+    }
+    
+    public void setId(Long id) {
+        this.id = id;
+    }
+}
+```
+
+### 4. Service 灞傛洿鏂�
+
+**鏂囦欢**锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java`
+
+**saveEmergencyInfo 鏂规硶**锛�
+```java
+// 璁剧疆杞嚭鍖婚櫌淇℃伅
+if (createVO.getHospitalOut() != null) {
+    emergencyInfo.setHospitalOutId(createVO.getHospitalOut().getId());
+    emergencyInfo.setHospitalOutName(createVO.getHospitalOut().getName());
+    // ... 鍏朵粬瀛楁
+}
+
+// 璁剧疆杞叆鍖婚櫌淇℃伅
+if (createVO.getHospitalIn() != null) {
+    emergencyInfo.setHospitalInId(createVO.getHospitalIn().getId());
+    emergencyInfo.setHospitalInName(createVO.getHospitalIn().getName());
+    // ... 鍏朵粬瀛楁
+}
+```
+
+### 5. 鍓嶇鏇存柊
+
+**鏂囦欢**锛歚app/pages/task/create-emergency.vue`
+
+**taskForm 鍒濆鍖�**锛�
+```javascript
+hospitalOut: {
+  id: null,  // 鍖婚櫌ID
+  name: '',
+  department: '',
+  bedNumber: '',
+  address: ''
+},
+hospitalIn: {
+  id: null,  // 鍖婚櫌ID
+  name: '',
+  department: '',
+  bedNumber: '',
+  address: ''
+},
+```
+
+**鍖婚櫌閫夋嫨鏂规硶**锛�
+```javascript
+// 閫夋嫨杞嚭鍖婚櫌
+selectHospitalOut(hospital) {
+  this.taskForm.hospitalOut.id = hospital.hospId  // 淇濆瓨鍖婚櫌ID
+  this.taskForm.hospitalOut.name = hospital.hospName
+  this.taskForm.hospitalOut.address = hospital.hospAddress
+  // ... 鍏朵粬閫昏緫
+}
+
+// 閫夋嫨杞叆鍖婚櫌
+selectHospitalIn(hospital) {
+  this.taskForm.hospitalIn.id = hospital.hospId  // 淇濆瓨鍖婚櫌ID
+  this.taskForm.hospitalIn.name = hospital.hospName
+  this.taskForm.hospitalIn.address = hospital.hospAddress
+  // ... 鍏朵粬閫昏緫
+}
+```
+
+## 馃摑 閮ㄧ讲姝ラ
+
+### 1. 鏁版嵁搴撳崌绾�
+
+```bash
+# 鏂瑰紡1锛氬懡浠よ鎵ц
+mysql -u root -p ruoyi < sql/add_hospital_id_fields.sql
+
+# 鏂瑰紡2锛氭暟鎹簱瀹㈡埛绔�
+source d:/project/鎬ユ晳杞繍/code/Api/RuoYi-Vue-master/sql/add_hospital_id_fields.sql
+```
+
+### 2. 鍚庣浠g爜閮ㄧ讲
+
+1. 纭繚鎵�鏈� Java 鏂囦欢宸叉洿鏂�
+2. 閲嶆柊缂栬瘧椤圭洰
+3. 閲嶅惎搴旂敤鏈嶅姟
+
+### 3. 鍓嶇浠g爜閮ㄧ讲
+
+1. 纭繚 Vue 鏂囦欢宸叉洿鏂�
+2. 閲嶆柊缂栬瘧鍓嶇椤圭洰锛�
+   ```bash
+   # H5鐗堟湰
+   npm run build:h5
+   
+   # 寰俊灏忕▼搴忕増鏈�
+   npm run build:mp-weixin
+   ```
+3. 閮ㄧ讲鍒版湇鍔″櫒
+
+## 鉁� 楠岃瘉娴嬭瘯
+
+### 娴嬭瘯姝ラ
+
+1. **鍒涘缓鏂颁换鍔�**
+   - 鍦ㄥ墠绔垱寤轰竴涓�ユ晳杞繍浠诲姟
+   - 浠庡尰闄㈠垪琛ㄤ腑閫夋嫨杞嚭鍖婚櫌鍜岃浆鍏ュ尰闄�
+   - 鎻愪氦浠诲姟
+
+2. **楠岃瘉鏁版嵁搴�**
+   ```sql
+   SELECT 
+       task_id,
+       hospital_out_id,
+       hospital_out_name,
+       hospital_in_id,
+       hospital_in_name
+   FROM sys_task_emergency
+   ORDER BY id DESC
+   LIMIT 10;
+   ```
+
+3. **棰勬湡缁撴灉**
+   - `hospital_out_id` 鍜� `hospital_in_id` 搴旇鏈夊��
+   - 鍊煎簲璇ュ搴� `hosp_data` 琛ㄤ腑鐨� `HospID`
+
+### 鍏宠仈鏌ヨ娴嬭瘯
+
+```sql
+-- 鏌ヨ浠诲姟鍙婂叾鍏宠仈鐨勫尰闄㈣缁嗕俊鎭�
+SELECT 
+    e.task_id,
+    e.hospital_out_id,
+    ho.HospName AS hospital_out_name,
+    ho.HospAddress AS hospital_out_address,
+    e.hospital_in_id,
+    hi.HospName AS hospital_in_name,
+    hi.HospAddress AS hospital_in_address
+FROM sys_task_emergency e
+LEFT JOIN hosp_data ho ON e.hospital_out_id = ho.HospID
+LEFT JOIN hosp_data hi ON e.hospital_in_id = hi.HospID
+WHERE e.task_id = <浠诲姟ID>;
+```
+
+## 馃攳 鏁版嵁鍒嗘瀽搴旂敤
+
+鏈変簡鍖婚櫌ID鍚庯紝鍙互杩涜鏇存繁鍏ョ殑鏁版嵁鍒嗘瀽锛�
+
+### 1. 缁熻鍚勫尰闄㈢殑杞繍閲�
+
+```sql
+-- 杞嚭鍖婚櫌杞繍閲忕粺璁�
+SELECT 
+    e.hospital_out_id,
+    h.HospName,
+    COUNT(*) AS transfer_count
+FROM sys_task_emergency e
+LEFT JOIN hosp_data h ON e.hospital_out_id = h.HospID
+WHERE e.hospital_out_id IS NOT NULL
+GROUP BY e.hospital_out_id, h.HospName
+ORDER BY transfer_count DESC
+LIMIT 20;
+
+-- 杞叆鍖婚櫌杞繍閲忕粺璁�
+SELECT 
+    e.hospital_in_id,
+    h.HospName,
+    COUNT(*) AS transfer_count
+FROM sys_task_emergency e
+LEFT JOIN hosp_data h ON e.hospital_in_id = h.HospID
+WHERE e.hospital_in_id IS NOT NULL
+GROUP BY e.hospital_in_id, h.HospName
+ORDER BY transfer_count DESC
+LIMIT 20;
+```
+
+### 2. 鍖婚櫌闂磋浆杩愯矾绾垮垎鏋�
+
+```sql
+-- 鏈�甯歌鐨勮浆杩愯矾绾�
+SELECT 
+    e.hospital_out_id,
+    ho.HospName AS from_hospital,
+    e.hospital_in_id,
+    hi.HospName AS to_hospital,
+    COUNT(*) AS route_count,
+    AVG(e.transfer_distance) AS avg_distance,
+    AVG(e.transfer_price) AS avg_price
+FROM sys_task_emergency e
+LEFT JOIN hosp_data ho ON e.hospital_out_id = ho.HospID
+LEFT JOIN hosp_data hi ON e.hospital_in_id = hi.HospID
+WHERE e.hospital_out_id IS NOT NULL 
+  AND e.hospital_in_id IS NOT NULL
+GROUP BY e.hospital_out_id, ho.HospName, e.hospital_in_id, hi.HospName
+HAVING route_count > 5
+ORDER BY route_count DESC
+LIMIT 50;
+```
+
+### 3. 鍖婚櫌鍖哄煙鍒嗗竷鍒嗘瀽
+
+```sql
+-- 鎸夊尰闄㈠尯鍩熺粺璁¤浆杩愰噺
+SELECT 
+    h.HospCity AS city,
+    h.HospCounty AS district,
+    COUNT(*) AS total_count,
+    SUM(CASE WHEN e.hospital_out_id = h.HospID THEN 1 ELSE 0 END) AS out_count,
+    SUM(CASE WHEN e.hospital_in_id = h.HospID THEN 1 ELSE 0 END) AS in_count
+FROM hosp_data h
+LEFT JOIN sys_task_emergency e ON h.HospID IN (e.hospital_out_id, e.hospital_in_id)
+GROUP BY h.HospCity, h.HospCounty
+ORDER BY total_count DESC;
+```
+
+## 馃搶 娉ㄦ剰浜嬮」
+
+### 1. 鏁版嵁鍏煎鎬�
+- 鍘嗗彶鏁版嵁鐨勫尰闄D瀛楁涓篘ULL鏄甯哥殑
+- 涓嶅奖鍝嶅巻鍙叉暟鎹殑灞曠ず鍜屼娇鐢�
+- 鏂板垱寤虹殑浠诲姟搴旇閮藉寘鍚尰闄D
+
+### 2. 鏁版嵁涓�鑷存��
+- 鍖婚櫌鍚嶇О浠嶇劧淇濈暀锛岀敤浜庢樉绀哄拰鍚屾鏃х郴缁�
+- 鍖婚櫌ID鐢ㄤ簬鍏宠仈鏌ヨ鍜屾暟鎹垎鏋�
+- 濡傛灉浠庡尰闄㈠垪琛ㄩ�夋嫨锛孖D鍜屽悕绉板簲璇ヤ竴鑷�
+- 濡傛灉鎵嬪姩杈撳叆锛屽彧鏈夊悕绉版病鏈塈D
+
+### 3. 鎬ц兘浼樺寲
+- 宸蹭负鍖婚櫌ID瀛楁鍒涘缓绱㈠紩
+- 鍏宠仈鏌ヨ鏃朵紭鍏堜娇鐢ㄥ尰闄D
+- 瀹氭湡妫�鏌ョ储寮曟湁鏁堟��
+
+### 4. 鏃х郴缁熷悓姝�
+- 鏃х郴缁熶粛鐒朵娇鐢ㄥ尰闄㈠悕绉板瓧娈�
+- 鍖婚櫌ID瀛楁涓嶉渶瑕佸悓姝ュ埌鏃х郴缁�
+- 淇濇寔鐜版湁鍚屾閫昏緫涓嶅彉
+
+## 馃帀 鎬荤粨
+
+鏈鏇存柊涓� `sys_task_emergency` 琛ㄦ坊鍔犱簡鍖婚櫌ID瀛楁锛屽疄鐜颁簡锛�
+
+1. 鉁� **鏁版嵁鍏宠仈**锛氬彲浠ラ�氳繃鍖婚櫌ID鍏宠仈鏌ヨ鍖婚櫌璇︾粏淇℃伅
+2. 鉁� **鏁版嵁鍒嗘瀽**锛氭敮鎸佹寜鍖婚櫌銆佽矾绾跨瓑缁村害杩涜缁熻鍒嗘瀽
+3. 鉁� **鍚戝悗鍏煎**锛氫笉褰卞搷鍘嗗彶鏁版嵁锛屼繚鎸佺郴缁熺ǔ瀹氭��
+4. 鉁� **鍓嶅悗绔仈鍔�**锛氬墠绔�夋嫨鍖婚櫌鏃惰嚜鍔ㄤ繚瀛業D锛屽悗绔纭瓨鍌�
+
+鎵�鏈変唬鐮佸彉鏇村凡瀹屾垚锛屾墽琛屾暟鎹簱鑴氭湰鍚庡嵆鍙娇鐢ㄦ柊鍔熻兘锛侌煔�
diff --git "a/prd/\346\200\245\346\225\221\350\275\254\350\277\220\345\215\225\346\215\256\347\261\273\345\236\213\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\345\215\225\346\215\256\347\261\273\345\236\213\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..7bcae10
--- /dev/null
+++ "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\345\215\225\346\215\256\347\261\273\345\236\213\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,347 @@
+# 鎬ユ晳杞繍浠诲姟鍗曟嵁绫诲瀷鍜屼换鍔$被鍨嬪姛鑳借鏄�
+
+## 鍔熻兘姒傝堪
+
+涓烘�ユ晳杞繍浠诲姟娣诲姞浜嗕袱涓瓧娈碉細
+1. **鍗曟嵁绫诲瀷**锛氭暟鎹簮鏉ヨ嚜SQL Server鏁版嵁搴撶殑`dictionary`琛紝鏌ヨ鏉′欢涓篳vtitle='ServiceOrdAreaType' AND vType=1`
+2. **浠诲姟绫诲瀷**锛氭暟鎹簮鏉ヨ嚜SQL Server鏁版嵁搴撶殑`dictionary`琛紝鏌ヨ鏉′欢涓篳vtitle='ServiceOrderType' AND vType>=1`
+
+## 鎶�鏈疄鐜�
+
+### 1. 鏁版嵁搴撳眰
+
+#### 1.1 SQL Server鏌ヨ
+**鍗曟嵁绫诲瀷锛�**
+```sql
+SELECT vID, vtext 
+FROM dictionary 
+WHERE vtitle='ServiceOrdAreaType' AND vType=1 
+ORDER BY vOrder
+```
+
+**浠诲姟绫诲瀷锛�**
+```sql
+SELECT vID, vtext 
+FROM dictionary 
+WHERE vtitle='ServiceOrderType' AND vType>=1 
+ORDER BY vOrder
+```
+
+#### 1.2 MySQL琛ㄧ粨鏋勪慨鏀�
+鏂囦欢锛歚sql/add_document_type_to_emergency.sql`
+```sql
+ALTER TABLE sys_task_emergency 
+ADD COLUMN document_type_id VARCHAR(50) COMMENT '鍗曟嵁绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛寁title=ServiceOrdAreaType锛�';
+
+ALTER TABLE sys_task_emergency 
+ADD COLUMN task_type_id VARCHAR(50) COMMENT '浠诲姟绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛寁title=ServiceOrderType锛�';
+
+CREATE INDEX idx_document_type_id ON sys_task_emergency(document_type_id);
+CREATE INDEX idx_task_type_id ON sys_task_emergency(task_type_id);
+```
+
+### 2. 鍚庣瀹炵幇
+
+#### 2.1 瀹炰綋绫绘墿灞�
+**鏂囦欢锛�** `SysTaskEmergency.java`
+- 鏂板瀛楁锛歚private String documentTypeId;`锛堝崟鎹被鍨嬶級
+- 鏂板瀛楁锛歚private String taskTypeId;`锛堜换鍔$被鍨嬶級
+- 鏂板getter/setter鏂规硶
+
+**鏂囦欢锛�** `TaskCreateVO.java`
+- 鏂板瀛楁锛歚private String documentTypeId;`锛堝崟鎹被鍨嬶級
+- 鏂板瀛楁锛歚private String taskTypeId;`锛堜换鍔$被鍨嬶級
+- 鏂板getter/setter鏂规硶
+
+**鏂囦欢锛�** `OrderClassDTO.java`
+- 鏂板瀛楁锛歚private String vID;` 锛堢敤浜庡瓨鍌ㄥ崟鎹被鍨婭D锛�
+- 鏂板getter/setter鏂规硶
+
+#### 2.2 Mapper灞�
+**鏂囦欢锛�** `OrderClassMapper.java`
+- 鏂板鏂规硶锛歚List<OrderClassDTO> selectServiceOrdAreaTypes();`
+
+**鏂囦欢锛�** `OrderClassMapper.xml`
+```xml
+<select id="selectServiceOrdAreaTypes" resultMap="OrderClassResult">
+    SELECT vID, vtext
+    FROM dictionary
+    WHERE vtitle = 'ServiceOrdAreaType' AND vType = 1
+    ORDER BY vOrder
+</select>
+```
+
+**鏂囦欢锛�** `SysTaskEmergencyMapper.xml`
+- 鍦╮esultMap涓坊鍔狅細`<result property="documentTypeId" column="document_type_id" />`
+- 鍦╥nsert銆乽pdate銆乻elect璇彞涓坊鍔燿ocument_type_id瀛楁
+
+#### 2.3 Service灞�
+**鏂囦欢锛�** `IOrderClassDataService.java`
+- 鏂板鏂规硶锛歚List<OrderClassDTO> getServiceOrdAreaTypes();`锛堟煡璇㈠崟鎹被鍨嬶級
+- 鏂板鏂规硶锛歚List<OrderClassDTO> getServiceOrderTypes();`锛堟煡璇换鍔$被鍨嬶級
+
+**鏂囦欢锛�** `OrderClassDataServiceImpl.java`
+```java
+// 鏌ヨ鍗曟嵁绫诲瀷
+@Override
+public List<OrderClassDTO> getServiceOrdAreaTypes() {
+    log.info("寮�濮嬩粠 SQL Server 鏌ヨ鍗曟嵁绫诲瀷鏁版嵁...");
+    List<OrderClassDTO> list = orderClassMapper.selectServiceOrdAreaTypes();
+    log.info("鎴愬姛鏌ヨ鍒� {} 鏉″崟鎹被鍨嬫暟鎹�", list != null ? list.size() : 0);
+    return list;
+}
+
+// 鏌ヨ浠诲姟绫诲瀷
+@Override
+public List<OrderClassDTO> getServiceOrderTypes() {
+    log.info("寮�濮嬩粠 SQL Server 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鏁版嵁...");
+    List<OrderClassDTO> list = orderClassMapper.selectServiceOrderTypes();
+    log.info("鎴愬姛鏌ヨ鍒� {} 鏉℃湇鍔¤鍗曠被鍨嬫暟鎹�", list != null ? list.size() : 0);
+    return list;
+}
+```
+
+**鏂囦欢锛�** `SysTaskServiceImpl.java`
+- 淇敼`saveEmergencyInfo`鏂规硶锛屾坊鍔犲崟鎹被鍨婭D鍜屼换鍔$被鍨婭D鐨勪繚瀛橈細
+```java
+emergencyInfo.setDocumentTypeId(createVO.getDocumentTypeId());
+emergencyInfo.setTaskTypeId(createVO.getTaskTypeId());
+```
+
+#### 2.4 Controller灞�
+**鏂板鏂囦欢锛�** `SqlServerDictionaryController.java`
+```java
+// 鏌ヨ鍗曟嵁绫诲瀷
+@GetMapping("/serviceOrdAreaTypes")
+public AjaxResult getServiceOrdAreaTypes() {
+    List<OrderClassDTO> list = orderClassDataService.getServiceOrdAreaTypes();
+    return AjaxResult.success("鏌ヨ鎴愬姛", list);
+}
+
+// 鏌ヨ浠诲姟绫诲瀷
+@GetMapping("/serviceOrderTypes")
+public AjaxResult getServiceOrderTypes() {
+    List<OrderClassDTO> list = orderClassDataService.getServiceOrderTypes();
+    return AjaxResult.success("鏌ヨ鎴愬姛", list);
+}
+```
+
+### 3. 鍓嶇瀹炵幇
+
+#### 3.1 API鎺ュ彛
+**鏂板鏂囦欢锛�** `app/api/dictionary.js`
+```javascript
+// 鏌ヨ鍗曟嵁绫诲瀷
+export function getServiceOrdAreaTypes() {
+  return request({
+    url: '/sqlserver/dictionary/serviceOrdAreaTypes',
+    method: 'get'
+  })
+}
+
+// 鏌ヨ浠诲姟绫诲瀷
+export function getServiceOrderTypes() {
+  return request({
+    url: '/sqlserver/dictionary/serviceOrderTypes',
+    method: 'get'
+  })
+}
+```
+
+#### 3.2 椤甸潰缁勪欢
+**鏂囦欢锛�** `app/pages/task/create-emergency.vue`
+
+**鏁版嵁妯″瀷锛�**
+```javascript
+data() {
+  return {
+    selectedEmergencyTaskType: '',      // 閫変腑鐨勪换鍔$被鍨嬫枃鏈�
+    selectedEmergencyTaskTypeId: null,  // 閫変腑鐨勪换鍔$被鍨婭D
+    emergencyTaskTypes: [],             // 浠诲姟绫诲瀷鍒楄〃
+    emergencyTaskTypeOptions: [],       // 浠诲姟绫诲瀷閫夐」锛堢敤浜巔icker鏄剧ず锛�
+    
+    selectedDocumentType: '',           // 閫変腑鐨勫崟鎹被鍨嬫枃鏈�
+    selectedDocumentTypeId: null,       // 閫変腑鐨勫崟鎹被鍨婭D
+    documentTypes: [],                  // 鍗曟嵁绫诲瀷鍒楄〃
+    documentTypeOptions: [],            // 鍗曟嵁绫诲瀷閫夐」锛堢敤浜巔icker鏄剧ず锛�
+  }
+}
+```
+
+**鍔犺浇鏂规硶锛�**
+```javascript
+import { getServiceOrdAreaTypes, getServiceOrderTypes } from "@/api/dictionary"
+
+// 鍔犺浇浠诲姟绫诲瀷
+loadEmergencyTaskTypes() {
+  getServiceOrderTypes().then(response => {
+    const list = response.data || []
+    this.emergencyTaskTypes = list
+    this.emergencyTaskTypeOptions = list.map(item => ({
+      id: item.vID,
+      text: item.vtext
+    }))
+  }).catch(error => {
+    console.error('鍔犺浇浠诲姟绫诲瀷澶辫触:', error)
+    this.emergencyTaskTypes = []
+    this.emergencyTaskTypeOptions = []
+  })
+}
+
+// 鍔犺浇鍗曟嵁绫诲瀷
+loadDocumentTypes() {
+  getServiceOrdAreaTypes().then(response => {
+    const list = response.data || []
+    this.documentTypes = list
+    this.documentTypeOptions = list.map(item => ({
+      id: item.vID,
+      text: item.vtext
+    }))
+  }).catch(error => {
+    console.error('鍔犺浇鍗曟嵁绫诲瀷澶辫触:', error)
+    this.documentTypes = []
+    this.documentTypeOptions = []
+  })
+}
+```
+
+**UI缁勪欢锛�**
+```vue
+<!-- 浠诲姟绫诲瀷 -->
+<view class="form-item">
+  <view class="form-label">浠诲姟绫诲瀷</view>
+  <picker mode="selector" :range="emergencyTaskTypeOptions" range-key="text" @change="onEmergencyTaskTypeChange">
+    <view class="form-input picker-input">
+      {{ selectedEmergencyTaskType || '璇烽�夋嫨浠诲姟绫诲瀷' }}
+      <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+    </view>
+  </picker>
+</view>
+
+<!-- 鍗曟嵁绫诲瀷 -->
+<view class="form-item">
+  <view class="form-label">鍗曟嵁绫诲瀷</view>
+  <picker mode="selector" :range="documentTypeOptions" range-key="text" @change="onDocumentTypeChange">
+    <view class="form-input picker-input">
+      {{ selectedDocumentType || '璇烽�夋嫨鍗曟嵁绫诲瀷' }}
+      <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+    </view>
+  </picker>
+</view>
+```
+
+**閫夋嫨澶勭悊锛�**
+```javascript
+// 浠诲姟绫诲瀷閫夋嫨
+onEmergencyTaskTypeChange(e) {
+  const index = e.detail.value
+  const selected = this.emergencyTaskTypeOptions[index]
+  this.selectedEmergencyTaskType = selected.text
+  this.selectedEmergencyTaskTypeId = selected.id
+}
+
+// 鍗曟嵁绫诲瀷閫夋嫨
+onDocumentTypeChange(e) {
+  const index = e.detail.value
+  const selected = this.documentTypeOptions[index]
+  this.selectedDocumentType = selected.text
+  this.selectedDocumentTypeId = selected.id
+}
+```
+
+**鎻愪氦鏁版嵁锛�**
+```javascript
+buildSubmitData() {
+  const submitData = {
+    taskType: 'EMERGENCY_TRANSFER',
+    vehicleIds: this.selectedVehicleId ? [this.selectedVehicleId] : [],
+    assigneeIds: this.selectedStaff.map(staff => staff.userId),
+    transferTime: this.taskForm.transferTime,
+    documentTypeId: this.selectedDocumentTypeId, // 娣诲姞鍗曟嵁绫诲瀷ID
+    taskTypeId: this.selectedEmergencyTaskTypeId, // 娣诲姞浠诲姟绫诲瀷ID
+    patient: { ... },
+    hospitalOut: { ... },
+    hospitalIn: { ... },
+    transferDistance: ...,
+    price: ...
+  }
+  return submitData
+}
+```
+
+## 鏁版嵁娴佸悜
+
+```
+鍓嶇閫夋嫨浠诲姟绫诲瀷/鍗曟嵁绫诲瀷
+  鈫�
+鍙戦�� taskTypeId/documentTypeId 鍒板悗绔�
+  鈫�
+TaskCreateVO 鎺ユ敹鍙傛暟
+  鈫�
+SysTaskServiceImpl.saveEmergencyInfo() 澶勭悊
+  鈫�
+SysTaskEmergency 瀹炰綋淇濆瓨
+  鈫�
+SysTaskEmergencyMapper 鎻掑叆鏁版嵁搴�
+  鈫�
+sys_task_emergency.task_type_id/document_type_id 瀛楁瀛樺偍
+```
+
+## 浣跨敤璇存槑
+
+### 1. 鎵ц鏁版嵁搴撹縼绉�
+```bash
+mysql -u root -p your_database < sql/add_document_type_to_emergency.sql
+```
+
+### 2. 閲嶅惎鍚庣鏈嶅姟
+纭繚鏂板鐨凷ervice鍜孋ontroller琚姞杞�
+
+### 3. 娴嬭瘯鎺ュ彛
+```bash
+# 娴嬭瘯鏌ヨ鍗曟嵁绫诲瀷鎺ュ彛
+GET /sqlserver/dictionary/serviceOrdAreaTypes
+```
+
+### 4. 鍓嶇娴嬭瘯
+1. 鎵撳紑鎬ユ晳杞繍浠诲姟鍒涘缓椤甸潰
+2. 楠岃瘉鍗曟嵁绫诲瀷涓嬫媺妗嗘甯稿姞杞芥暟鎹�
+3. 閫夋嫨鍗曟嵁绫诲瀷鍚庡垱寤轰换鍔�
+4. 妫�鏌ユ暟鎹簱涓璬ocument_type_id瀛楁鏄惁姝g‘淇濆瓨
+
+## 娉ㄦ剰浜嬮」
+
+1. **鏁版嵁搴撳瓧娈电被鍨�**锛歞ocument_type_id鍜宼ask_type_id浣跨敤VARCHAR(50)锛屼笌SQL Server鐨剉ID瀛楁淇濇寔鍏煎
+2. **绱㈠紩浼樺寲**锛氫负document_type_id鍜宼ask_type_id娣诲姞浜嗙储寮曪紝鎻愰珮鏌ヨ鎬ц兘
+3. **澶氭暟鎹簮鍒囨崲**锛氭煡璇㈠崟鎹被鍨嬪拰浠诲姟绫诲瀷鏃朵娇鐢ˊDataSource(DataSourceType.SQLSERVER)娉ㄨВ鍒囨崲鍒癝QL Server鏁版嵁婧�
+4. **鍓嶇鏁版嵁缁撴瀯**锛氫娇鐢▄id, text}鏍煎紡鐨勬暟缁勪究浜巙ni-app鐨刾icker缁勪欢浣跨敤
+5. **瀛楁闈炲繀濉�**锛氫换鍔$被鍨嬪拰鍗曟嵁绫诲瀷瀛楁涓哄彲閫夊瓧娈碉紝涓嶄細褰卞搷宸叉湁浠诲姟鐨勫垱寤哄拰鏌ヨ
+6. **SQL鏌ヨ鍖哄埆**锛�
+   - ServiceOrdAreaType: `vType = 1`锛堢簿纭尮閰嶏級
+   - ServiceOrderType: `vType >= 1`锛堣寖鍥村尮閰嶏級
+
+## 鐩稿叧鏂囦欢娓呭崟
+
+### 鍚庣鏂囦欢
+- `ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java`
+- `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java`
+- `ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml`
+- `ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml`
+- `ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java`
+
+### 鍓嶇鏂囦欢
+- `app/api/dictionary.js`
+- `app/pages/task/create-emergency.vue`
+
+### SQL鏂囦欢
+- `sql/add_document_type_to_emergency.sql`
+
+## 鐗堟湰淇℃伅
+- 鍒涘缓鏃堕棿锛�2025-10-19
+- 浣滆�咃細System
+- 鐗堟湰锛歷1.0
diff --git "a/prd/\346\200\245\346\225\221\350\275\254\350\277\220\347\247\221\345\256\244ID\344\277\235\345\255\230\344\270\216\345\220\214\346\255\245\350\257\264\346\230\216.md" "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\347\247\221\345\256\244ID\344\277\235\345\255\230\344\270\216\345\220\214\346\255\245\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..315b39d
--- /dev/null
+++ "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\347\247\221\345\256\244ID\344\277\235\345\255\230\344\270\216\345\220\214\346\255\245\350\257\264\346\230\216.md"
@@ -0,0 +1,315 @@
+# 鎬ユ晳杞繍浠诲姟绉戝ID淇濆瓨涓庡悓姝ヨ鏄�
+
+## 馃搵 鍔熻兘姒傝堪
+
+鎬ユ晳杞繍浠诲姟鍒涘缓鏃讹紝闇�瑕佷繚瀛樿浆鍑�/杞叆鍖婚櫌鐨勭瀹D锛屽苟鍦ㄥ悓姝ュ埌鏃х郴缁熸椂灏嗚繖浜汭D浼犻�掔粰 `admin_save_19.gds` 鎺ュ彛銆�
+
+## 馃攧 瀹屾暣鏁版嵁娴佺▼
+
+### 1. 鍓嶇鏁版嵁閲囬泦
+
+**鏂囦欢**锛歚app/pages/task/create-emergency.vue`
+
+#### 绉戝鏁版嵁鍔犺浇
+```javascript
+// 浠� SQL Server 鍔ㄦ�佸姞杞界瀹ゆ暟鎹�
+loadDepartments() {
+  getHospitalDepartments().then(response => {
+    const list = response.data || [];
+    this.departmentOptions = list.map(item => ({
+      id: item.vID,      // 绉戝ID锛堟潵鑷猄QL Server dictionary琛級
+      text: item.vtext   // 绉戝鍚嶇О
+    }));
+  })
+}
+```
+
+**鏁版嵁婧怱QL**锛�
+```sql
+SELECT vID, vtext 
+FROM dictionary 
+WHERE vtitle='HospitalDepartment' AND vType=1 
+ORDER BY vOrder
+```
+
+#### 绉戝閫夋嫨浜嬩欢
+```javascript
+// 杞嚭鍖婚櫌绉戝閫夋嫨
+onHospitalOutDepartmentChange(e) {
+  const index = e.detail.value
+  const selected = this.departmentOptions[index]
+  this.taskForm.hospitalOut.department = selected.text    // 绉戝鍚嶇О
+  this.taskForm.hospitalOut.departmentId = selected.id    // 绉戝ID 鉁�
+}
+
+// 杞叆鍖婚櫌绉戝閫夋嫨
+onHospitalInDepartmentChange(e) {
+  const index = e.detail.value
+  const selected = this.departmentOptions[index]
+  this.taskForm.hospitalIn.department = selected.text     // 绉戝鍚嶇О
+  this.taskForm.hospitalIn.departmentId = selected.id     // 绉戝ID 鉁�
+}
+```
+
+#### 鏁版嵁鎻愪氦
+```javascript
+buildSubmitData() {
+  const submitData = {
+    taskType: 'EMERGENCY_TRANSFER',
+    // ... 鍏朵粬瀛楁
+    
+    // 鍖婚櫌淇℃伅锛堝寘鍚尰闄D銆佺瀹ゅ悕绉般�佺瀹D绛夊畬鏁翠俊鎭級
+    hospitalOut: this.taskForm.hospitalOut,  // 鍖呭惈: id, name, department, departmentId, bedNumber, address
+    hospitalIn: this.taskForm.hospitalIn,    // 鍖呭惈: id, name, department, departmentId, bedNumber, address
+  }
+  
+  return submitData
+}
+```
+
+**鎻愪氦鐨勬暟鎹粨鏋�**锛�
+```json
+{
+  "taskType": "EMERGENCY_TRANSFER",
+  "hospitalOut": {
+    "id": 123,                    // 鍖婚櫌ID锛坔osp_data.HospID锛�
+    "name": "涓北澶у闄勫睘绗竴鍖婚櫌",
+    "department": "鎬ヨ瘖绉�",
+    "departmentId": "45",         // 绉戝ID锛坉ictionary.vID锛夆渽
+    "bedNumber": "12",
+    "address": "骞垮窞甯備腑灞变簩璺�58鍙�"
+  },
+  "hospitalIn": {
+    "id": 456,                    // 鍖婚櫌ID
+    "name": "骞夸笢鐪佷汉姘戝尰闄�",
+    "department": "蹇冨唴绉�",
+    "departmentId": "78",         // 绉戝ID锛坉ictionary.vID锛夆渽
+    "bedNumber": "5",
+    "address": "骞垮窞甯備腑灞变簩璺�106鍙�"
+  }
+}
+```
+
+### 2. 鍚庣鏁版嵁鎺ユ敹涓庝繚瀛�
+
+**鏂囦欢**锛歚SysTaskServiceImpl.java`
+
+#### VO绫诲畾涔�
+```java
+// TaskCreateVO.java
+public static class HospitalInfo {
+    private Long id;              // 鍖婚櫌ID
+    private String name;          // 鍖婚櫌鍚嶇О
+    private String department;    // 绉戝鍚嶇О
+    private String departmentId;  // 绉戝ID 鉁�
+    private String bedNumber;     // 搴婂彿
+    private String address;       // 鍦板潃
+    private BigDecimal longitude; // 缁忓害
+    private BigDecimal latitude;  // 绾害
+}
+```
+
+#### 鏁版嵁淇濆瓨
+```java
+// 璁剧疆杞嚭鍖婚櫌淇℃伅
+if (createVO.getHospitalOut() != null) {
+    emergencyInfo.setHospitalOutId(createVO.getHospitalOut().getId());
+    emergencyInfo.setHospitalOutName(createVO.getHospitalOut().getName());
+    emergencyInfo.setHospitalOutDepartment(createVO.getHospitalOut().getDepartment());
+    emergencyInfo.setHospitalOutDepartmentId(createVO.getHospitalOut().getDepartmentId()); // 鉁�
+    emergencyInfo.setHospitalOutBedNumber(createVO.getHospitalOut().getBedNumber());
+    emergencyInfo.setHospitalOutAddress(createVO.getHospitalOut().getAddress());
+    emergencyInfo.setHospitalOutLongitude(createVO.getHospitalOut().getLongitude());
+    emergencyInfo.setHospitalOutLatitude(createVO.getHospitalOut().getLatitude());
+}
+
+// 璁剧疆杞叆鍖婚櫌淇℃伅
+if (createVO.getHospitalIn() != null) {
+    emergencyInfo.setHospitalInId(createVO.getHospitalIn().getId());
+    emergencyInfo.setHospitalInName(createVO.getHospitalIn().getName());
+    emergencyInfo.setHospitalInDepartment(createVO.getHospitalIn().getDepartment());
+    emergencyInfo.setHospitalInDepartmentId(createVO.getHospitalIn().getDepartmentId()); // 鉁�
+    emergencyInfo.setHospitalInBedNumber(createVO.getHospitalIn().getBedNumber());
+    emergencyInfo.setHospitalInAddress(createVO.getHospitalIn().getAddress());
+    emergencyInfo.setHospitalInLongitude(createVO.getHospitalIn().getLongitude());
+    emergencyInfo.setHospitalInLatitude(createVO.getHospitalIn().getLatitude());
+}
+```
+
+**淇濆瓨鍒版暟鎹簱**锛�
+```sql
+INSERT INTO sys_task_emergency (
+    task_id,
+    hospital_out_id,
+    hospital_out_name,
+    hospital_out_department,
+    hospital_out_department_id,    -- 鉁�
+    hospital_in_id,
+    hospital_in_name,
+    hospital_in_department,
+    hospital_in_department_id,     -- 鉁�
+    -- ... 鍏朵粬瀛楁
+) VALUES (
+    #{taskId},
+    #{hospitalOutId},
+    #{hospitalOutName},
+    #{hospitalOutDepartment},
+    #{hospitalOutDepartmentId},    -- 鉁�
+    #{hospitalInId},
+    #{hospitalInName},
+    #{hospitalInDepartment},
+    #{hospitalInDepartmentId},     -- 鉁�
+    -- ... 鍏朵粬鍊�
+)
+```
+
+### 3. 鍚屾鍒版棫绯荤粺
+
+**鏂囦欢**锛歚LegacySystemSyncService.java` 鎴� `LegacySystemSyncTask.java`
+
+#### 鍙傛暟鏄犲皠
+
+| 鏂扮郴缁熷瓧娈� | 鏃х郴缁熷弬鏁� | 鏁版嵁婧� | 璇存槑 |
+|-----------|-----------|--------|------|
+| `hospital_out_id` | `ServiceOrdPtOutHospID` | hosp_data.HospID | 杞嚭鍖婚櫌ID |
+| `hospital_out_name` | `ServiceOrdPtOutHosp` | hosp_data.hospName | 杞嚭鍖婚櫌鍚嶇О |
+| `hospital_out_department_id` | `ServiceOrdPtServicesID` | dictionary.vID | 杞嚭绉戝ID 鉁� |
+| `hospital_out_department` | `ServiceOrdPtServices` | dictionary.vtext | 杞嚭绉戝鍚嶇О |
+| `hospital_in_id` | `ServiceOrdPtInHospID` | hosp_data.HospID | 杞叆鍖婚櫌ID |
+| `hospital_in_name` | `ServiceOrdPtInHosp` | hosp_data.hospName | 杞叆鍖婚櫌鍚嶇О |
+| `hospital_in_department_id` | `ServiceOrdPtInServicesID` | dictionary.vID | 杞叆绉戝ID 鉁� |
+| `hospital_in_department` | `ServiceOrdPtInServices` | dictionary.vtext | 杞叆绉戝鍚嶇О |
+
+#### 鍚屾浠g爜绀轰緥
+```java
+// 鏋勫缓鏃х郴缁熷悓姝ュ弬鏁�
+Map<String, Object> params = new HashMap<>();
+params.put("adminID", task.getCreatorOaUserId());
+
+// 杞嚭鍖婚櫌淇℃伅
+params.put("ServiceOrdPtOutHospID", emergencyInfo.getHospitalOutId());
+params.put("ServiceOrdPtOutHosp", emergencyInfo.getHospitalOutName());
+params.put("ServiceOrdPtServicesID", emergencyInfo.getHospitalOutDepartmentId());  // 鉁�
+params.put("ServiceOrdPtServices", emergencyInfo.getHospitalOutDepartment());
+
+// 杞叆鍖婚櫌淇℃伅
+params.put("ServiceOrdPtInHospID", emergencyInfo.getHospitalInId());
+params.put("ServiceOrdPtInHosp", emergencyInfo.getHospitalInName());
+params.put("ServiceOrdPtInServicesID", emergencyInfo.getHospitalInDepartmentId()); // 鉁�
+params.put("ServiceOrdPtInServices", emergencyInfo.getHospitalInDepartment());
+
+// ... 鍏朵粬鍙傛暟
+
+// 璋冪敤鏃х郴缁熸帴鍙�
+String response = httpClient.post(legacySystemUrl + "/admin_save_19.gds", params);
+```
+
+## 馃搳 鏁版嵁搴撹〃缁撴瀯
+
+**琛ㄥ悕**锛歚sys_task_emergency`
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 | 鍏佽NULL |
+|--------|------|------|---------|
+| `hospital_out_id` | BIGINT | 杞嚭鍖婚櫌ID锛坔osp_data.HospID锛� | 鏄� |
+| `hospital_out_name` | VARCHAR(200) | 杞嚭鍖婚櫌鍚嶇О | 鏄� |
+| `hospital_out_department` | VARCHAR(100) | 杞嚭绉戝鍚嶇О | 鏄� |
+| `hospital_out_department_id` | VARCHAR(50) | 杞嚭绉戝ID锛坉ictionary.vID锛夆渽 | 鏄� |
+| `hospital_in_id` | BIGINT | 杞叆鍖婚櫌ID锛坔osp_data.HospID锛� | 鏄� |
+| `hospital_in_name` | VARCHAR(200) | 杞叆鍖婚櫌鍚嶇О | 鏄� |
+| `hospital_in_department` | VARCHAR(100) | 杞叆绉戝鍚嶇О | 鏄� |
+| `hospital_in_department_id` | VARCHAR(50) | 杞叆绉戝ID锛坉ictionary.vID锛夆渽 | 鏄� |
+
+## 馃攳 楠岃瘉鏂规硶
+
+### 1. 鍓嶇楠岃瘉
+```javascript
+// 鍦ㄦ彁浜ゅ墠鎵撳嵃鏁版嵁
+console.log('鎻愪氦鏁版嵁:', submitData)
+console.log('杞嚭绉戝ID:', submitData.hospitalOut.departmentId)
+console.log('杞叆绉戝ID:', submitData.hospitalIn.departmentId)
+```
+
+### 2. 鍚庣楠岃瘉
+```java
+// 鍦ㄤ繚瀛樺墠鎵撳嵃鏁版嵁
+log.info("杞嚭鍖婚櫌淇℃伅: ID={}, 鍚嶇О={}, 绉戝={}, 绉戝ID={}", 
+    createVO.getHospitalOut().getId(),
+    createVO.getHospitalOut().getName(),
+    createVO.getHospitalOut().getDepartment(),
+    createVO.getHospitalOut().getDepartmentId());
+
+log.info("杞叆鍖婚櫌淇℃伅: ID={}, 鍚嶇О={}, 绉戝={}, 绉戝ID={}", 
+    createVO.getHospitalIn().getId(),
+    createVO.getHospitalIn().getName(),
+    createVO.getHospitalIn().getDepartment(),
+    createVO.getHospitalIn().getDepartmentId());
+```
+
+### 3. 鏁版嵁搴撻獙璇�
+```sql
+-- 鏌ヨ鏈�杩戝垱寤虹殑浠诲姟锛屾鏌ョ瀹D鏄惁淇濆瓨
+SELECT 
+    task_id,
+    hospital_out_name,
+    hospital_out_department,
+    hospital_out_department_id,  -- 搴旇鏈夊��
+    hospital_in_name,
+    hospital_in_department,
+    hospital_in_department_id,   -- 搴旇鏈夊��
+    create_time
+FROM sys_task_emergency
+ORDER BY create_time DESC
+LIMIT 10;
+```
+
+### 4. 鏃х郴缁熷悓姝ラ獙璇�
+```sql
+-- 妫�鏌ュ悓姝ョ姸鎬�
+SELECT 
+    task_id,
+    legacy_service_ord_id,
+    sync_status,
+    sync_error_msg,
+    sync_time
+FROM sys_task_emergency
+WHERE sync_status = 2  -- 鍚屾鎴愬姛
+ORDER BY sync_time DESC
+LIMIT 10;
+```
+
+## 鈿狅笍 娉ㄦ剰浜嬮」
+
+1. **绉戝ID绫诲瀷**锛氱瀹D浣跨敤 VARCHAR(50) 绫诲瀷锛屽洜涓烘潵鑷� SQL Server dictionary 琛ㄧ殑 vID 鍙兘鏄瓧绗︿覆
+2. **鍏佽NULL**锛氱瀹D瀛楁鍏佽涓篘ULL锛屼互鍏煎鍘嗗彶鏁版嵁鍜屾墜鍔ㄨ緭鍏ュ満鏅�
+3. **鏁版嵁涓�鑷存��**锛氱瀹ゅ悕绉板拰绉戝ID搴旇淇濇寔涓�鑷达紝閮芥潵鑷悓涓�涓瀹ら�夋嫨
+4. **鍚屾閲嶈瘯**锛氬鏋滃悓姝ュけ璐ワ紝瀹氭椂浠诲姟浼氶噸璇曪紝纭繚绉戝ID鏈�缁堜紶閫掑埌鏃х郴缁�
+5. **鏁版嵁楠岃瘉**锛氬墠绔簲楠岃瘉绉戝閫夋嫨锛岀‘淇濈敤鎴蜂粠涓嬫媺妗嗛�夋嫨鑰屼笉鏄墜鍔ㄨ緭鍏�
+
+## 馃摑 鐩稿叧鏂囦欢
+
+### 鍓嶇鏂囦欢
+- `app/pages/task/create-emergency.vue` - 浠诲姟鍒涘缓椤甸潰
+- `app/api/dictionary.js` - 绉戝鏁版嵁API
+
+### 鍚庣鏂囦欢
+- `ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java` - 瀹炰綋绫�
+- `ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java` - VO绫�
+- `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java` - 浠诲姟鏈嶅姟
+- `ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml` - Mapper XML
+
+### SQL鏂囦欢
+- `sql/add_department_id_fields.sql` - 绉戝ID瀛楁娣诲姞鑴氭湰
+
+## 鉁� 鎬荤粨
+
+绉戝ID鐨勫畬鏁存祦绋嬪凡缁忓疄鐜帮細
+
+1. 鉁� 鍓嶇浠� SQL Server 鍔ㄦ�佸姞杞界瀹ゆ暟鎹紙鍖呭惈ID锛�
+2. 鉁� 鍓嶇閫夋嫨绉戝鏃朵繚瀛樼瀹ゅ悕绉板拰绉戝ID
+3. 鉁� 鍓嶇鎻愪氦鏃跺寘鍚畬鏁寸殑鍖婚櫌鍜岀瀹や俊鎭�
+4. 鉁� 鍚庣鎺ユ敹骞朵繚瀛樼瀹D鍒版暟鎹簱
+5. 鉁� 鍚庣鍑嗗鍚屾鍒版棫绯荤粺锛堥渶鍦ㄥ悓姝ユ湇鍔′腑娣诲姞鍙傛暟鏄犲皠锛�
+
+**涓嬩竴姝ュ伐浣�**锛�
+- 鍦ㄦ棫绯荤粺鍚屾鏈嶅姟涓坊鍔犵瀹D鍙傛暟锛坄ServiceOrdPtServicesID` 鍜� `ServiceOrdPtInServicesID`锛�
+- 娴嬭瘯瀹屾暣娴佺▼锛岀‘淇濇暟鎹纭紶閫�
diff --git "a/prd/\346\200\245\346\225\221\350\275\254\350\277\220\347\247\221\345\256\244ID\345\255\227\346\256\265\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\347\247\221\345\256\244ID\345\255\227\346\256\265\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..c598495
--- /dev/null
+++ "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\347\247\221\345\256\244ID\345\255\227\346\256\265\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,395 @@
+# 鎬ユ晳杞繍浠诲姟绉戝ID瀛楁鍔熻兘璇存槑
+
+## 馃搵 闇�姹傝儗鏅�
+
+鍘熷厛绉戝鏁版嵁浠庢湰鍦癕ySQL瀛楀吀琛紙dict_type='hospital_department'锛夎鍙栵紝鐜版敼涓轰粠SQL Server鐨刣ictionary琛ㄥ姩鎬佸姞杞斤紝骞朵笖闇�瑕佸湪浠诲姟琛ㄤ腑瀛樺偍绉戝ID锛屽悓姝ユ棫绯荤粺鏃朵篃瑕佷紶閫掑尰闄D鍜岀瀹D銆�
+
+## 馃幆 瀹炵幇鐩爣
+
+1. 鉁� 绉戝鏁版嵁婧愪粠鏈湴瀛楀吀鏀逛负SQL Server鍔ㄦ�佸姞杞�
+2. 鉁� 鍦� `sys_task_emergency` 琛ㄤ腑娣诲姞绉戝ID瀛楁
+3. 鉁� 鍓嶇閫夋嫨绉戝鏃跺悓鏃朵繚瀛樼瀹D鍜岀瀹ゅ悕绉�
+4. 鉁� 鍚庣鎺ユ敹骞朵繚瀛樼瀹D
+5. 鉁� 鍚屾鏃х郴缁熸椂浼犻�掑尰闄D鍜岀瀹D
+
+## 馃搳 鏁版嵁搴撳彉鏇�
+
+### SQL 鑴氭湰
+
+鏂囦欢璺緞锛歚sql/add_department_id_fields.sql`
+
+```sql
+-- 1. 娣诲姞杞嚭鍖婚櫌绉戝ID瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN hospital_out_department_id VARCHAR(50) COMMENT '杞嚭鍖婚櫌绉戝ID锛堝搴擲QL Server dictionary琛ㄧ殑vID锛�' AFTER hospital_out_department;
+
+-- 2. 娣诲姞杞叆鍖婚櫌绉戝ID瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN hospital_in_department_id VARCHAR(50) COMMENT '杞叆鍖婚櫌绉戝ID锛堝搴擲QL Server dictionary琛ㄧ殑vID锛�' AFTER hospital_in_department;
+
+-- 3. 鍒涘缓绱㈠紩浠ユ彁鍗囨煡璇㈡�ц兘
+CREATE INDEX idx_hospital_out_dept_id ON sys_task_emergency(hospital_out_department_id);
+CREATE INDEX idx_hospital_in_dept_id ON sys_task_emergency(hospital_in_department_id);
+```
+
+### 瀛楁璇存槑
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 | 鏁版嵁鏉ユ簮 | 鍏佽NULL |
+|--------|------|------|---------|---------|
+| hospital_out_department_id | VARCHAR(50) | 杞嚭鍖婚櫌绉戝ID | SQL Server dictionary.vID | 鏄� |
+| hospital_in_department_id | VARCHAR(50) | 杞叆鍖婚櫌绉戝ID | SQL Server dictionary.vID | 鏄� |
+
+**鏁版嵁婧怱QL**锛�
+```sql
+SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
+```
+
+## 馃敡 浠g爜鍙樻洿
+
+### 1. 鍚庣 - 瀹炰綋绫�
+
+**鏂囦欢**锛歚SysTaskEmergency.java`
+
+```java
+/** 杞嚭鍖婚櫌绉戝ID锛堝搴擲QL Server dictionary琛ㄧ殑vID锛� */
+private String hospitalOutDepartmentId;
+
+/** 杞叆鍖婚櫌绉戝ID锛堝搴擲QL Server dictionary琛ㄧ殑vID锛� */
+private String hospitalInDepartmentId;
+```
+
+### 2. 鍚庣 - Service灞�
+
+**鏂囦欢**锛歚IOrderClassDataService.java`
+
+```java
+/**
+ * 浠� SQL Server 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛�
+ * 
+ * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
+ * 
+ * @return 鍖婚櫌绉戝鍒楄〃
+ */
+List<OrderClassDTO> getHospitalDepartments();
+```
+
+**鏂囦欢**锛歚OrderClassDataServiceImpl.java`
+
+```java
+@Override
+public List<OrderClassDTO> getHospitalDepartments()
+{
+    log.info("寮�濮嬩粠 SQL Server 鏌ヨ鍖婚櫌绉戝鏁版嵁...");
+    List<OrderClassDTO> list = orderClassMapper.selectHospitalDepartments();
+    log.info("鎴愬姛鏌ヨ鍒� {} 鏉″尰闄㈢瀹ゆ暟鎹�", list != null ? list.size() : 0);
+    return list;
+}
+```
+
+### 3. 鍚庣 - Mapper
+
+**鏂囦欢**锛歚OrderClassMapper.xml`
+
+```xml
+<!-- 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛� -->
+<select id="selectHospitalDepartments" resultMap="OrderClassResult">
+    SELECT vID, vtext
+    FROM dictionary
+    WHERE vtitle = 'HospitalDepartment' AND vType = 1
+    ORDER BY vOrder
+</select>
+```
+
+### 4. 鍚庣 - Controller
+
+**鏂囦欢**锛歚SqlServerDictionaryController.java`
+
+```java
+/**
+ * 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛�
+ * 
+ * 鏁版嵁婧愶細SQL Server (dictionary琛�)
+ * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
+ * 
+ * @return 鍖婚櫌绉戝鍒楄〃
+ */
+@PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
+@GetMapping("/hospitalDepartments")
+public AjaxResult getHospitalDepartments()
+{
+    try
+    {
+        List<OrderClassDTO> list = orderClassDataService.getHospitalDepartments();
+        return AjaxResult.success("鏌ヨ鎴愬姛", list);
+    }
+    catch (Exception e)
+    {
+        logger.error("鏌ヨ鍖婚櫌绉戝鏁版嵁澶辫触", e);
+        return AjaxResult.error("鏌ヨ鍖婚櫌绉戝鏁版嵁澶辫触锛�" + e.getMessage());
+    }
+}
+```
+
+### 5. 鍚庣 - 浠诲姟淇濆瓨
+
+**鏂囦欢**锛歚SysTaskServiceImpl.java`
+
+```java
+// 璁剧疆杞嚭鍖婚櫌淇℃伅
+if (createVO.getHospitalOut() != null) {
+    emergencyInfo.setHospitalOutId(createVO.getHospitalOut().getId());
+    emergencyInfo.setHospitalOutName(createVO.getHospitalOut().getName());
+    emergencyInfo.setHospitalOutDepartment(createVO.getHospitalOut().getDepartment());
+    emergencyInfo.setHospitalOutDepartmentId(createVO.getHospitalOut().getDepartmentId()); // 绉戝ID
+    // ... 鍏朵粬瀛楁
+}
+
+// 璁剧疆杞叆鍖婚櫌淇℃伅
+if (createVO.getHospitalIn() != null) {
+    emergencyInfo.setHospitalInId(createVO.getHospitalIn().getId());
+    emergencyInfo.setHospitalInName(createVO.getHospitalIn().getName());
+    emergencyInfo.setHospitalInDepartment(createVO.getHospitalIn().getDepartment());
+    emergencyInfo.setHospitalInDepartmentId(createVO.getHospitalIn().getDepartmentId()); // 绉戝ID
+    // ... 鍏朵粬瀛楁
+}
+```
+
+### 6. 鍚庣 - 鏃х郴缁熷悓姝�
+
+**鏂囦欢**锛歚LegacySystemSyncServiceImpl.java`
+
+```java
+// 鍖婚櫌淇℃伅
+params.put("ServiceOrdPtOutHosp", StringUtils.nvl(emergency.getHospitalOutName(), ""));
+params.put("ServiceOrdPtOutHospID", emergency.getHospitalOutId() != null ? emergency.getHospitalOutId().toString() : "0"); // 杞嚭鍖婚櫌ID
+params.put("ServiceOrdPtInHosp", StringUtils.nvl(emergency.getHospitalInName(), ""));
+params.put("ServiceOrdPtInHospID", emergency.getHospitalInId() != null ? emergency.getHospitalInId().toString() : "0"); // 杞叆鍖婚櫌ID
+
+// 绉戝淇℃伅
+params.put("ServiceOrdPtServices", StringUtils.nvl(emergency.getHospitalOutDepartment(), ""));
+params.put("ServiceOrdPtServicesID", StringUtils.nvl(emergency.getHospitalOutDepartmentId(), "0")); // 杞嚭绉戝ID
+params.put("ServiceOrdPtInServices", StringUtils.nvl(emergency.getHospitalInDepartment(), ""));
+params.put("ServiceOrdPtInServicesID", StringUtils.nvl(emergency.getHospitalInDepartmentId(), "0")); // 杞叆绉戝ID
+```
+
+### 7. 鍓嶇 - API鎺ュ彛
+
+**鏂囦欢**锛歚app/api/dictionary.js`
+
+```javascript
+/**
+ * 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛�
+ */
+export function getHospitalDepartments() {
+  return request({
+    url: '/sqlserver/dictionary/hospitalDepartments',
+    method: 'get'
+  })
+}
+```
+
+### 8. 鍓嶇 - 椤甸潰浠g爜
+
+**鏂囦欢**锛歚app/pages/task/create-emergency.vue`
+
+**瀵煎叆API**锛�
+```javascript
+import { getServiceOrdAreaTypes, getServiceOrderTypes, getHospitalDepartments } from "@/api/dictionary"
+```
+
+**鏁版嵁缁撴瀯**锛�
+```javascript
+hospitalOut: {
+  id: null,  // 鍖婚櫌ID
+  name: '',
+  department: '',
+  departmentId: null,  // 绉戝ID
+  bedNumber: '',
+  address: ''
+},
+hospitalIn: {
+  id: null,  // 鍖婚櫌ID
+  name: '',
+  department: '',
+  departmentId: null,  // 绉戝ID
+  bedNumber: '',
+  address: ''
+},
+```
+
+**鍔犺浇绉戝鏁版嵁**锛�
+```javascript
+// 鍔犺浇绉戝鏁版嵁锛堜粠 SQL Server 鍔ㄦ�佸姞杞斤級
+loadDepartments() {
+  getHospitalDepartments().then(response => {
+    const list = response.data || []
+    this.departmentOptions = list.map(item => ({
+      id: item.vID,
+      text: item.vtext,
+      dictValue: item.vtext  // 涓轰簡淇濇寔鍏煎鎬э紝淇濈暀dictValue瀛楁
+    }))
+  }).catch(error => {
+    console.error('鍔犺浇绉戝鏁版嵁澶辫触:', error)
+    this.departmentOptions = []
+  })
+},
+```
+
+**绉戝閫夋嫨浜嬩欢**锛�
+```javascript
+// 杞嚭鍖婚櫌绉戝閫夋嫨
+onHospitalOutDepartmentChange(e) {
+  const index = e.detail.value
+  const selected = this.departmentOptions[index]
+  this.taskForm.hospitalOut.department = selected.text  // 淇濆瓨绉戝鍚嶇О
+  this.taskForm.hospitalOut.departmentId = selected.id  // 淇濆瓨绉戝ID
+},
+
+// 杞叆鍖婚櫌绉戝閫夋嫨
+onHospitalInDepartmentChange(e) {
+  const index = e.detail.value
+  const selected = this.departmentOptions[index]
+  this.taskForm.hospitalIn.department = selected.text  // 淇濆瓨绉戝鍚嶇О
+  this.taskForm.hospitalIn.departmentId = selected.id  // 淇濆瓨绉戝ID
+},
+```
+
+## 馃摑 閮ㄧ讲姝ラ
+
+### 1. 鎵ц鏁版嵁搴撹剼鏈�
+
+```bash
+mysql -u root -p ruoyi < sql/add_department_id_fields.sql
+```
+
+### 2. 閲嶅惎鍚庣鏈嶅姟
+
+纭繚鏂颁唬鐮佺敓鏁�
+
+### 3. 閲嶆柊缂栬瘧鍓嶇
+
+```bash
+# H5鐗堟湰
+npm run build:h5
+
+# 寰俊灏忕▼搴忕増鏈�
+npm run build:mp-weixin
+```
+
+## 鉁� 娴嬭瘯楠岃瘉
+
+### 1. 娴嬭瘯绉戝鏁版嵁鍔犺浇
+
+璁块棶API鎺ュ彛锛�
+```
+GET /sqlserver/dictionary/hospitalDepartments
+```
+
+棰勬湡鍝嶅簲锛�
+```json
+{
+  "code": 200,
+  "msg": "鏌ヨ鎴愬姛",
+  "data": [
+    {
+      "vID": "1",
+      "vtext": "鎬ヨ瘖绉�"
+    },
+    {
+      "vID": "2",
+      "vtext": "蹇冨唴绉�"
+    }
+    // ... 鏇村绉戝
+  ]
+}
+```
+
+### 2. 娴嬭瘯浠诲姟鍒涘缓
+
+1. 鍦ㄥ墠绔垱寤烘�ユ晳杞繍浠诲姟
+2. 閫夋嫨鍖婚櫌鍜岀瀹�
+3. 鎻愪氦浠诲姟
+
+### 3. 楠岃瘉鏁版嵁搴�
+
+```sql
+SELECT 
+    task_id,
+    hospital_out_id,
+    hospital_out_name,
+    hospital_out_department,
+    hospital_out_department_id,
+    hospital_in_id,
+    hospital_in_name,
+    hospital_in_department,
+    hospital_in_department_id
+FROM sys_task_emergency
+ORDER BY id DESC
+LIMIT 10;
+```
+
+### 4. 楠岃瘉鏃х郴缁熷悓姝�
+
+鍒涘缓浠诲姟鍚庯紝鏌ョ湅鍚屾鏃ュ織锛岀‘璁や互涓嬪弬鏁板凡姝g‘浼犻�掞細
+- `ServiceOrdPtOutHospID`锛氳浆鍑哄尰闄D
+- `ServiceOrdPtInHospID`锛氳浆鍏ュ尰闄D
+- `ServiceOrdPtServicesID`锛氳浆鍑虹瀹D
+- `ServiceOrdPtInServicesID`锛氳浆鍏ョ瀹D
+
+## 馃攳 鏁版嵁瀵圭収琛�
+
+### 鏂版棫绯荤粺瀛楁鏄犲皠
+
+| 鏂扮郴缁熷瓧娈� | 鏃х郴缁熷弬鏁� | 璇存槑 |
+|-----------|-----------|------|
+| hospital_out_id | ServiceOrdPtOutHospID | 杞嚭鍖婚櫌ID |
+| hospital_out_name | ServiceOrdPtOutHosp | 杞嚭鍖婚櫌鍚嶇О |
+| hospital_out_department_id | ServiceOrdPtServicesID | 杞嚭绉戝ID |
+| hospital_out_department | ServiceOrdPtServices | 杞嚭绉戝鍚嶇О |
+| hospital_in_id | ServiceOrdPtInHospID | 杞叆鍖婚櫌ID |
+| hospital_in_name | ServiceOrdPtInHosp | 杞叆鍖婚櫌鍚嶇О |
+| hospital_in_department_id | ServiceOrdPtInServicesID | 杞叆绉戝ID |
+| hospital_in_department | ServiceOrdPtInServices | 杞叆绉戝鍚嶇О |
+
+### SQL Server 鏁版嵁婧�
+
+| 鏁版嵁绫诲瀷 | SQL鏌ヨ | 鐢ㄩ�� |
+|---------|--------|------|
+| 鍖婚櫌绉戝 | `SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder` | 绉戝閫夋嫨涓嬫媺妗� |
+| 鍗曟嵁绫诲瀷 | `SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrdAreaType' AND vType=1 ORDER BY vOrder` | 鍗曟嵁绫诲瀷閫夋嫨 |
+| 浠诲姟绫诲瀷 | `SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrderType' AND vType>=1 ORDER BY vOrder` | 浠诲姟绫诲瀷閫夋嫨 |
+
+## 馃搶 娉ㄦ剰浜嬮」
+
+### 1. 鏁版嵁鍏煎鎬�
+- 绉戝ID瀛楁涓篤ARCHAR(50)锛屽洜涓篠QL Server鐨剉ID鍙兘鏄瓧绗︿覆
+- 鍏佽NULL锛屽吋瀹瑰巻鍙叉暟鎹拰鎵嬪姩杈撳叆鍦烘櫙
+- 淇濈暀绉戝鍚嶇О瀛楁锛岀敤浜庢樉绀哄拰鍏煎
+
+### 2. 鏁版嵁涓�鑷存��
+- 浠嶴QL Server閫夋嫨鏃讹紝ID鍜屽悕绉板簲璇ヤ竴鑷�
+- 濡傛灉鎵嬪姩杈撳叆绉戝鍚嶇О锛屽彧鏈夊悕绉版病鏈塈D锛圛D涓篘ULL锛�
+- 鍚屾鏃х郴缁熸椂锛屽鏋淚D涓篘ULL鍒欎紶"0"
+
+### 3. 鏃х郴缁熷吋瀹�
+- 鏃х郴缁熼渶瑕佸悓鏃舵帴鏀跺尰闄D鍜屽尰闄㈠悕绉�
+- 鏃х郴缁熼渶瑕佸悓鏃舵帴鏀剁瀹D鍜岀瀹ゅ悕绉�
+- 濡傛灉ID涓虹┖锛屼紶"0"浣滀负榛樿鍊�
+
+### 4. 鎬ц兘浼樺寲
+- 宸蹭负绉戝ID瀛楁鍒涘缓绱㈠紩
+- 鍓嶇鍔犺浇鏃剁紦瀛樼瀹ゆ暟鎹紝閬垮厤閲嶅璇锋眰
+- SQL Server鏌ヨ宸叉坊鍔燨RDER BY浼樺寲
+
+## 馃帀 鍔熻兘鎬荤粨
+
+鏈鏇存柊瀹炵幇浜嗭細
+
+1. 鉁� **鏁版嵁婧愬垏鎹�**锛氱瀹ゆ暟鎹粠鏈湴瀛楀吀鏀逛负SQL Server鍔ㄦ�佸姞杞�
+2. 鉁� **鏁版嵁瀛樺偍**锛氬湪sys_task_emergency琛ㄤ腑娣诲姞绉戝ID瀛楁
+3. 鉁� **鍓嶇闆嗘垚**锛氬墠绔�夋嫨绉戝鏃跺悓鏃朵繚瀛業D鍜屽悕绉�
+4. 鉁� **鍚庣澶勭悊**锛氬悗绔纭帴鏀跺拰淇濆瓨绉戝ID
+5. 鉁� **绯荤粺鍚屾**锛氬悓姝ユ棫绯荤粺鏃朵紶閫掑尰闄D鍜岀瀹D
+6. 鉁� **鍚戝悗鍏煎**锛氫笉褰卞搷鍘嗗彶鏁版嵁锛屾敮鎸佹墜鍔ㄨ緭鍏ュ満鏅�
+
+鎵�鏈変唬鐮佸彉鏇村凡瀹屾垚锛屾墽琛屾暟鎹簱鑴氭湰鍚庡嵆鍙娇鐢ㄦ柊鍔熻兘锛侌煔�
diff --git "a/prd/\346\211\247\350\241\214\344\272\272\345\221\230assignee_id\345\255\227\346\256\265\345\241\253\345\205\205\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\346\211\247\350\241\214\344\272\272\345\221\230assignee_id\345\255\227\346\256\265\345\241\253\345\205\205\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..6e1cfd4
--- /dev/null
+++ "b/prd/\346\211\247\350\241\214\344\272\272\345\221\230assignee_id\345\255\227\346\256\265\345\241\253\345\205\205\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,338 @@
+# 鎵ц浜哄憳assignee_id瀛楁濉厖鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄥ垱寤烘�ユ晳杞繍浠诲姟鏃讹紝灏嗙涓�涓墽琛屼汉鍛樼殑ID鍐欏叆涓讳换鍔¤〃鐨� `assignee_id` 瀛楁锛屼綔涓轰富瑕佹墽琛屼汉锛堣礋璐d汉锛夈��
+
+## 涓氬姟鑳屾櫙
+
+鎬ユ晳杞繍浠诲姟閫氬父鐢卞涓汉鍛樺崗鍚屾墽琛岋紙鍙告満銆佹姢澹�佸尰鐢熺瓑锛夛紝浣嗙郴缁熼渶瑕佹槑纭竴涓富瑕佽礋璐d汉锛�
+- **assignee_id**锛氫富瑕佹墽琛屼汉锛堥�氬父鏄涓�涓�夋嫨鐨勪汉鍛橈級
+- **assigneeIds**锛氭墍鏈夋墽琛屼汉鍛業D鍒楄〃锛堝叧鑱旇〃 sys_task_assignee锛�
+
+## 鎶�鏈疄鐜�
+
+### 鍓嶇鏁版嵁鎻愪氦
+
+鍦� `buildSubmitData()` 鏂规硶涓坊鍔� `assigneeId` 瀛楁锛�
+
+```javascript
+const submitData = {
+  taskType: 'EMERGENCY_TRANSFER',
+  vehicleIds: this.selectedVehicleId ? [this.selectedVehicleId] : [],
+  assigneeIds: this.selectedStaff.map(staff => staff.userId), // 鎵�鏈夋墽琛屼汉鍛業D鍒楄〃
+  assigneeId: this.selectedStaff.length > 0 ? this.selectedStaff[0].userId : null, // 涓昏鎵ц浜猴紙绗竴涓汉鍛橈級
+  // ... 鍏朵粬瀛楁
+}
+```
+
+### 鏁版嵁搴撳瓧娈�
+
+**涓讳换鍔¤〃锛坰ys_task锛�**锛�
+
+```sql
+-- 涓昏鎵ц浜篒D锛堝崟涓級
+assignee_id BIGINT
+
+-- 涓昏鎵ц浜哄鍚嶏紙鍐椾綑瀛楁锛屼究浜庢煡璇㈡樉绀猴級
+assignee_name VARCHAR(100)
+```
+
+**鍏宠仈琛紙sys_task_assignee锛�**锛�
+
+```sql
+-- 浠诲姟涓庢墽琛屼汉鍛樼殑澶氬澶氬叧鑱旇〃
+CREATE TABLE sys_task_assignee (
+  id BIGINT PRIMARY KEY,
+  task_id BIGINT NOT NULL,      -- 浠诲姟ID
+  user_id BIGINT NOT NULL,       -- 鎵ц浜哄憳ID
+  user_name VARCHAR(100),        -- 鎵ц浜哄憳濮撳悕
+  is_primary CHAR(1) DEFAULT '0' -- 鏄惁涓昏鎵ц浜猴細0-鍚︼紝1-鏄�
+)
+```
+
+## 鏁版嵁缁撴瀯
+
+### 鍓嶇鎵ц浜哄憳鏁版嵁
+
+```javascript
+selectedStaff: [
+  {
+    userId: 1,
+    nickName: "寮犱笁",
+    phonenumber: "13800138000",
+    deptName: "骞垮窞鍒嗗叕鍙�",
+    postName: "鍙告満",
+    roleName: "鏅�氬憳宸�"
+  },
+  {
+    userId: 2,
+    nickName: "鏉庡洓",
+    phonenumber: "13800138001",
+    deptName: "骞垮窞鍒嗗叕鍙�",
+    postName: "鎶ゅ+",
+    roleName: "鏅�氬憳宸�"
+  },
+  {
+    userId: 3,
+    nickName: "鐜嬩簲",
+    phonenumber: "13800138002",
+    deptName: "骞垮窞鍒嗗叕鍙�",
+    postName: "鍖荤敓",
+    roleName: "鏅�氬憳宸�"
+  }
+]
+```
+
+### 鎻愪氦鏁版嵁
+
+```javascript
+{
+  taskType: "EMERGENCY_TRANSFER",
+  assigneeId: 1,              // 涓昏鎵ц浜猴紙寮犱笁锛�
+  assigneeIds: [1, 2, 3],     // 鎵�鏈夋墽琛屼汉鍛�
+  // ... 鍏朵粬瀛楁
+}
+```
+
+### 鏁版嵁搴撳瓨鍌�
+
+**涓讳换鍔¤〃锛坰ys_task锛�**锛�
+
+| 瀛楁 | 鍊� | 璇存槑 |
+|------|-----|------|
+| task_id | 10001 | 浠诲姟ID |
+| assignee_id | 1 | 涓昏鎵ц浜篒D锛堝紶涓夛級 |
+| assignee_name | 寮犱笁 | 涓昏鎵ц浜哄鍚� |
+
+**鍏宠仈琛紙sys_task_assignee锛�**锛�
+
+| id | task_id | user_id | user_name | is_primary |
+|----|---------|---------|-----------|------------|
+| 1 | 10001 | 1 | 寮犱笁 | 1 |
+| 2 | 10001 | 2 | 鏉庡洓 | 0 |
+| 3 | 10001 | 3 | 鐜嬩簲 | 0 |
+
+## 涓氬姟閫昏緫
+
+### 涓昏鎵ц浜洪�夋嫨瑙勫垯
+
+1. **榛樿绗竴涓汉鍛�**锛歚selectedStaff[0]` 鑷姩鎴愪负涓昏鎵ц浜�
+2. **鐢ㄦ埛鍙皟鏁撮『搴�**锛氱敤鎴峰彲浠ラ�氳繃鎷栧姩鎴栧垹闄ら噸鏂版帓搴忥紝绗竴涓缁堟槸涓昏鎵ц浜�
+3. **鏃犳墽琛屼汉鍛樻椂**锛歚assigneeId = null`
+
+### 鐢ㄦ埛鐣岄潰灞曠ず
+
+```vue
+<view class="staff-list">
+  <view class="staff-item" v-for="(staff, index) in selectedStaff" :key="staff.userId">
+    <view class="staff-info">
+      <text class="staff-name">{{ staff.nickName }}</text>
+      <text class="staff-role">({{ staff.postName || staff.roleName }})</text>
+      <!-- 绗竴涓汉鍛樻樉绀�"璐熻矗浜�"鏍囪瘑 -->
+      <text v-if="index === 0" class="primary-badge">璐熻矗浜�</text>
+    </view>
+    <!-- 绗竴涓汉鍛樹笉鑳藉垹闄� -->
+    <uni-icons 
+      v-if="index > 0" 
+      type="closeempty" 
+      @click="removeStaff(index)"
+    ></uni-icons>
+    <uni-icons 
+      v-else
+      type="checkmarkempty" 
+      color="#007AFF"
+    ></uni-icons>
+  </view>
+</view>
+```
+
+## 搴旂敤鍦烘櫙
+
+### 1. 浠诲姟鍒嗛厤閫氱煡
+
+绯荤粺鍙戦�佷换鍔¢�氱煡鏃讹紝涓昏鎵ц浜烘敹鍒拌缁嗕俊鎭紝鍏朵粬浜哄憳鏀跺埌鍗忓姪閫氱煡锛�
+
+```javascript
+// 閫氱煡涓昏鎵ц浜�
+sendNotification({
+  userId: task.assigneeId,
+  title: '鎮ㄦ湁鏂扮殑杞繍浠诲姟',
+  content: `浠诲姟缂栧彿锛�${task.taskCode}锛屾偍鏄湰娆′换鍔$殑璐熻矗浜篳,
+  type: 'PRIMARY_ASSIGNEE'
+})
+
+// 閫氱煡鍏朵粬鎵ц浜哄憳
+task.assigneeIds.filter(id => id !== task.assigneeId).forEach(userId => {
+  sendNotification({
+    userId,
+    title: '鎮ㄦ湁鏂扮殑鍗忓姪浠诲姟',
+    content: `浠诲姟缂栧彿锛�${task.taskCode}锛岃鍗忓姪瀹屾垚`,
+    type: 'ASSIST_ASSIGNEE'
+  })
+})
+```
+
+### 2. 浠诲姟鍒楄〃鏄剧ず
+
+浠诲姟鍒楄〃涓昏鏄剧ず璐熻矗浜轰俊鎭細
+
+```vue
+<view class="task-item">
+  <text class="task-code">{{ task.taskCode }}</text>
+  <text class="assignee">璐熻矗浜猴細{{ task.assigneeName }}</text>
+  <text class="staff-count" v-if="task.assigneeIds.length > 1">
+    +{{ task.assigneeIds.length - 1 }}浜哄崗鍔�
+  </text>
+</view>
+```
+
+### 3. 鏉冮檺鎺у埗
+
+涓昏鎵ц浜烘嫢鏈夋洿澶氭搷浣滄潈闄愶細
+
+```javascript
+// 鍒ゆ柇褰撳墠鐢ㄦ埛鏄惁鏄富瑕佹墽琛屼汉
+const isPrimaryAssignee = currentUser.userId === task.assigneeId
+
+// 涓昏鎵ц浜哄彲浠ユ搷浣滅殑鍔熻兘
+if (isPrimaryAssignee) {
+  // 鍙互淇敼浠诲姟鐘舵��
+  // 鍙互娣诲姞/绉婚櫎鍏朵粬鎵ц浜哄憳
+  // 鍙互濉啓浠诲姟鎶ュ憡
+}
+```
+
+### 4. 缁熻鎶ヨ〃
+
+鎸変富瑕佹墽琛屼汉缁熻浠诲姟瀹屾垚鎯呭喌锛�
+
+```sql
+SELECT 
+  u.user_name,
+  COUNT(*) AS total_tasks,
+  SUM(CASE WHEN t.task_status = 'COMPLETED' THEN 1 ELSE 0 END) AS completed_tasks,
+  AVG(TIMESTAMPDIFF(MINUTE, t.actual_start_time, t.actual_end_time)) AS avg_duration
+FROM sys_task t
+JOIN sys_user u ON t.assignee_id = u.user_id
+WHERE t.task_type = 'EMERGENCY_TRANSFER'
+  AND t.create_time >= '2025-01-01'
+GROUP BY u.user_name
+ORDER BY completed_tasks DESC
+```
+
+## 寮傚父澶勭悊
+
+### 1. 鏃犳墽琛屼汉鍛�
+
+**鍦烘櫙**锛氱敤鎴锋湭閫夋嫨浠讳綍鎵ц浜哄憳
+
+**澶勭悊**锛�
+```javascript
+assigneeId: this.selectedStaff.length > 0 ? this.selectedStaff[0].userId : null
+```
+
+**缁撴灉**锛歛ssignee_id 涓� NULL锛屽厑璁稿悗缁ˉ鍏�
+
+### 2. 鎵ц浜哄憳鍙樻洿
+
+**鍦烘櫙**锛氱敤鎴峰厛閫夋嫨浜咥锛屽悗鏉ュ垹闄骞堕�夋嫨浜咮
+
+**澶勭悊**锛�
+- 濮嬬粓浠� `selectedStaff[0]` 涓哄噯
+- 鍒犻櫎绗竴涓汉鍛樺悗锛屽師鏉ョ殑绗簩涓汉鍛樿嚜鍔ㄦ垚涓鸿礋璐d汉
+
+### 3. 鍚庣楠岃瘉
+
+寤鸿鍚庣杩涜楠岃瘉锛�
+
+```java
+// Service灞傞獙璇�
+if (taskCreateVO.getAssigneeIds() != null && !taskCreateVO.getAssigneeIds().isEmpty()) {
+    // assigneeId 蹇呴』鍦� assigneeIds 鍒楄〃涓�
+    if (taskCreateVO.getAssigneeId() != null) {
+        if (!taskCreateVO.getAssigneeIds().contains(taskCreateVO.getAssigneeId())) {
+            throw new ServiceException("涓昏鎵ц浜哄繀椤诲湪鎵ц浜哄憳鍒楄〃涓�");
+        }
+    } else {
+        // 濡傛灉娌℃湁鎸囧畾 assigneeId锛岄粯璁や娇鐢ㄧ涓�涓�
+        taskCreateVO.setAssigneeId(taskCreateVO.getAssigneeIds().get(0));
+    }
+}
+```
+
+## 鏁版嵁涓�鑷存��
+
+### 淇濊瘉瑙勫垯
+
+1. **assigneeId 蹇呴』鍦� assigneeIds 涓�**锛�
+   - 鍓嶇锛歚assigneeId = selectedStaff[0].userId`
+   - 鍚庣锛氶獙璇佸苟鑷姩绾犳
+
+2. **鍏宠仈琛ㄦ爣璁�**锛�
+   - sys_task_assignee 琛ㄤ腑锛屼富瑕佹墽琛屼汉鐨� is_primary = '1'
+   - 鍏朵粬浜哄憳鐨� is_primary = '0'
+
+3. **濮撳悕鍐椾綑鍚屾**锛�
+   - 淇濆瓨鏃跺悓鏃舵洿鏂� assignee_name 瀛楁
+   - 閬垮厤姣忔鏌ヨ閮借 JOIN user 琛�
+
+## 娴嬭瘯寤鸿
+
+### 娴嬭瘯鍦烘櫙1锛氭甯搁�夋嫨澶氫釜浜哄憳
+
+**鎿嶄綔**锛�
+1. 閫夋嫨鎵ц浜哄憳锛氬紶涓夈�佹潕鍥涖�佺帇浜�
+2. 淇濆瓨浠诲姟
+
+**楠岃瘉**锛�
+```sql
+-- 妫�鏌ヤ富浠诲姟琛�
+SELECT assignee_id, assignee_name FROM sys_task WHERE task_id = ?
+-- 棰勬湡锛歛ssignee_id = 1锛堝紶涓夌殑ID锛夛紝assignee_name = '寮犱笁'
+
+-- 妫�鏌ュ叧鑱旇〃
+SELECT * FROM sys_task_assignee WHERE task_id = ? ORDER BY user_id
+-- 棰勬湡锛�3鏉¤褰曪紝寮犱笁鐨� is_primary = '1'锛屽叾浠栦负 '0'
+```
+
+### 娴嬭瘯鍦烘櫙2锛氬彧閫夋嫨涓�涓汉鍛�
+
+**鎿嶄綔**锛�
+1. 鍙�夋嫨寮犱笁
+2. 淇濆瓨浠诲姟
+
+**楠岃瘉**锛�
+- assignee_id = 1
+- assigneeIds = [1]
+- 鍏宠仈琛ㄥ彧鏈�1鏉¤褰�
+
+### 娴嬭瘯鍦烘櫙3锛氭湭閫夋嫨浜哄憳
+
+**鎿嶄綔**锛�
+1. 涓嶉�夋嫨浠讳綍鎵ц浜哄憳
+2. 淇濆瓨浠诲姟
+
+**楠岃瘉**锛�
+- assignee_id = NULL
+- assigneeIds = []
+- 鍏宠仈琛ㄦ棤璁板綍
+
+### 娴嬭瘯鍦烘櫙4锛氫汉鍛橀『搴忚皟鏁�
+
+**鎿嶄綔**锛�
+1. 閫夋嫨寮犱笁銆佹潕鍥�
+2. 鍒犻櫎寮犱笁
+3. 鐜板湪鏉庡洓鏄涓�涓�
+4. 淇濆瓨浠诲姟
+
+**楠岃瘉**锛�
+- assignee_id = 2锛堟潕鍥涚殑ID锛�
+- assignee_name = '鏉庡洓'
+
+## 鐗堟湰鍘嗗彶
+
+- **2025-01-25 v1**: 鍒濆鐗堟湰
+  - 鉁� 娣诲姞 assigneeId 瀛楁
+  - 鉁� 鑷姩鍙栫涓�涓墽琛屼汉鍛樹綔涓轰富瑕佹墽琛屼汉
+  - 鉁� 鍏煎鏃犳墽琛屼汉鍛樼殑鎯呭喌锛坅ssigneeId = null锛�
diff --git "a/prd/\346\211\247\350\241\214\344\272\272\345\221\230\350\247\222\350\211\262\345\255\230\345\202\250\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md" "b/prd/\346\211\247\350\241\214\344\272\272\345\221\230\350\247\222\350\211\262\345\255\230\345\202\250\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md"
new file mode 100644
index 0000000..298a6dd
--- /dev/null
+++ "b/prd/\346\211\247\350\241\214\344\272\272\345\221\230\350\247\222\350\211\262\345\255\230\345\202\250\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md"
@@ -0,0 +1,523 @@
+# 鎵ц浜哄憳瑙掕壊瀛樺偍鍔熻兘瀹炵幇鎬荤粨
+
+## 涓�銆佸姛鑳介渶姹�
+
+鍦ㄦ�ユ晳杞繍浠诲姟鍒涘缓鏃讹紝闇�瑕佸尯鍒嗗瓨鍌ㄦ墽琛屼汉鍛樼殑瑙掕壊绫诲瀷锛堝徃鏈恒�佸尰鐢熴�佹姢澹級锛屼互渚垮湪鍚屾璋冨害鍗曞埌鏃х郴缁熸椂鑳藉噯纭搴斿埌鐩稿簲鐨勯殢琛屼汉鍛樺弬鏁帮細
+- 鍙告満 鈫� Entourage_1
+- 鍖荤敓 鈫� Entourage_3
+- 鎶ゅ+ 鈫� Entourage_4
+- 绗竴涓墽琛屼汉鍛樿嚜鍔ㄦ垚涓洪闃燂紙EntourageLeadID璁句负1/3/4锛�
+
+## 浜屻�佸疄鐜版柟妗�
+
+### 1. 鏁版嵁搴撳眰
+
+#### 1.1 鍒涘缓鎵ц浜哄憳鍏宠仈琛�
+
+**鏂囦欢**: `sql/create_sys_task_assignee.sql`
+
+```sql
+CREATE TABLE `sys_task_assignee` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭ID',
+  `task_id` bigint(20) NOT NULL COMMENT '浠诲姟ID',
+  `user_id` bigint(20) NOT NULL COMMENT '鐢ㄦ埛ID',
+  `user_name` varchar(50) DEFAULT NULL COMMENT '鐢ㄦ埛濮撳悕',
+  `user_type` varchar(20) NOT NULL COMMENT '鐢ㄦ埛绫诲瀷锛歞river-鍙告満锛宒octor-鍖荤敓锛宯urse-鎶ゅ+',
+  `is_primary` char(1) DEFAULT '0' COMMENT '鏄惁涓轰富瑕佹墽琛屼汉锛�0-鍚︼紝1-鏄�',
+  `sort_order` int(11) DEFAULT 0 COMMENT '鎺掑簭椤哄簭锛堢敤浜庣‘瀹氶闃燂級',
+  `create_time` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+  `create_by` varchar(64) DEFAULT '' COMMENT '鍒涘缓鑰�',
+  `update_time` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+  `update_by` varchar(64) DEFAULT '' COMMENT '鏇存柊鑰�',
+  PRIMARY KEY (`id`),
+  KEY `idx_task_id` (`task_id`),
+  KEY `idx_user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='浠诲姟鎵ц浜哄憳鍏宠仈琛�';
+```
+
+**瀛楁璇存槑**锛�
+- `task_id`: 鍏宠仈鐨勪换鍔D
+- `user_id`: 鎵ц浜哄憳鐨勭敤鎴稩D
+- `user_name`: 鐢ㄦ埛濮撳悕锛堝啑浣欏瓧娈碉紝鏂逛究鏌ヨ锛�
+- `user_type`: 鐢ㄦ埛瑙掕壊绫诲瀷锛坉river/doctor/nurse锛夛紝鐢卞墠绔瘑鍒苟鎻愪氦
+- `is_primary`: 鏄惁涓轰富瑕佹墽琛屼汉锛堢涓�涓墽琛屼汉鍛橈級
+- `sort_order`: 鎺掑簭椤哄簭锛岀敤浜庣‘瀹氶闃燂紙绗竴涓墽琛屼汉鍛樹负棰嗛槦锛�
+
+### 2. 鍓嶇瀹炵幇
+
+#### 2.1 鐢ㄦ埛瑙掕壊璇嗗埆
+
+**鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+鍓嶇宸茬粡瀹炵幇浜嗘牴鎹敤鎴风殑宀椾綅鍚嶇О锛坧ostName锛夋垨瑙掕壊鍚嶇О锛坮oleName锛夎嚜鍔ㄨ瘑鍒敤鎴风被鍨嬶細
+
+```javascript
+// 鏍规嵁鐢ㄦ埛鐨勫矖浣嶆垨瑙掕壊鍒ゆ柇绫诲瀷
+getUserType(user) {
+  const postName = user.posts && user.posts.length > 0 ? user.posts[0].postName : ''
+  const roleName = user.roles && user.roles.length > 0 ? user.roles[0].roleName : ''
+  
+  // 鍒ゆ柇鏄惁涓哄徃鏈�
+  if (postName.includes('鍙告満') || roleName.includes('鍙告満')) {
+    return 'driver'
+  }
+  // 鍒ゆ柇鏄惁涓哄尰鐢�
+  if (postName.includes('鍖荤敓') || roleName.includes('鍖荤敓')) {
+    return 'doctor'
+  }
+  // 鍒ゆ柇鏄惁涓烘姢澹�
+  if (postName.includes('鎶ゅ+') || roleName.includes('鎶ゅ+')) {
+    return 'nurse'
+  }
+  // 鍏朵粬绫诲瀷锛岄粯璁や负鍙告満
+  return 'driver'
+}
+```
+
+#### 2.2 浜哄憳绛涢�夊姛鑳�
+
+鍓嶇鎻愪緵浜嗘寜瑙掕壊绛涢�変汉鍛樼殑鍔熻兘锛�
+
+```vue
+<view class="staff-filter">
+  <view class="filter-item" :class="{ active: staffFilterType === 'all' }" @click="filterStaff('all')">鍏ㄩ儴</view>
+  <view class="filter-item" :class="{ active: staffFilterType === 'driver' }" @click="filterStaff('driver')">鍙告満</view>
+  <view class="filter-item" :class="{ active: staffFilterType === 'doctor' }" @click="filterStaff('doctor')">鍖荤敓</view>
+  <view class="filter-item" :class="{ active: staffFilterType === 'nurse' }" @click="filterStaff('nurse')">鎶ゅ+</view>
+</view>
+```
+
+#### 2.3 鏁版嵁鎻愪氦
+
+鍦╜buildSubmitData`鏂规硶涓紝灏嗘墽琛屼汉鍛樼殑璇︾粏淇℃伅锛堝寘鍚鑹茬被鍨嬶級涓�璧锋彁浜わ細
+
+```javascript
+const submitData = {
+  taskType: 'EMERGENCY_TRANSFER',
+  // ...鍏朵粬瀛楁
+  assigneeIds: this.selectedStaff.map(staff => staff.userId),
+  assigneeId: this.selectedStaff.length > 0 ? this.selectedStaff[0].userId : null,
+  // 鎵ц浜哄憳璇︾粏淇℃伅锛堝寘鍚鑹茬被鍨嬶級
+  assignees: this.selectedStaff.map(staff => ({
+    userId: staff.userId,
+    userName: staff.nickName,
+    userType: staff.type // driver/doctor/nurse
+  }))
+}
+```
+
+### 3. 鍚庣瀹炵幇
+
+#### 3.1 瀹炰綋绫�
+
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskAssignee.java`
+
+鍒涘缓浜哷SysTaskAssignee`瀹炰綋绫伙紝瀵瑰簲鏁版嵁搴撹〃锛�
+
+```java
+public class SysTaskAssignee extends BaseEntity {
+    private Long id;
+    private Long taskId;
+    private Long userId;
+    private String userName;
+    private String userType;      // driver/doctor/nurse
+    private String isPrimary;     // 鏄惁涓轰富瑕佹墽琛屼汉
+    private Integer sortOrder;    // 鎺掑簭椤哄簭
+    // ... getters and setters
+}
+```
+
+#### 3.2 Mapper鎺ュ彛
+
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskAssigneeMapper.java`
+
+鎻愪緵浜咰RUD鎿嶄綔鎺ュ彛锛�
+
+```java
+public interface SysTaskAssigneeMapper {
+    // 鏌ヨ浠诲姟鐨勬墽琛屼汉鍛樺垪琛�
+    public List<SysTaskAssignee> selectSysTaskAssigneeByTaskId(Long taskId);
+    
+    // 鎵归噺鏂板浠诲姟鎵ц浜哄憳鍏宠仈
+    public int batchInsertSysTaskAssignee(List<SysTaskAssignee> assignees);
+    
+    // 鍒犻櫎浠诲姟鐨勬墍鏈夋墽琛屼汉鍛樺叧鑱�
+    public int deleteSysTaskAssigneeByTaskId(Long taskId);
+    
+    // ... 鍏朵粬鏂规硶
+}
+```
+
+#### 3.3 Mapper XML
+
+**鏂囦欢**: `ruoyi-system/src/main/resources/mapper/system/SysTaskAssigneeMapper.xml`
+
+瀹炵幇浜嗘壒閲忔彃鍏ュ拰鏌ヨ锛堟寜鎺掑簭椤哄簭锛夛細
+
+```xml
+<insert id="batchInsertSysTaskAssignee" parameterType="java.util.List">
+    insert into sys_task_assignee(task_id, user_id, user_name, user_type, is_primary, sort_order, create_time, create_by, update_time, update_by)
+    values
+    <foreach collection="list" item="item" separator=",">
+        (#{item.taskId}, #{item.userId}, #{item.userName}, #{item.userType}, #{item.isPrimary}, #{item.sortOrder}, #{item.createTime}, #{item.createBy}, #{item.updateTime}, #{item.updateBy})
+    </foreach>
+</insert>
+
+<select id="selectSysTaskAssigneeByTaskId" parameterType="Long" resultMap="SysTaskAssigneeResult">
+    select id, task_id, user_id, user_name, user_type, is_primary, sort_order, create_time, create_by, update_time, update_by
+    from sys_task_assignee
+    where task_id = #{taskId}
+    order by sort_order asc
+</select>
+```
+
+#### 3.4 鏈嶅姟灞� - 淇濆瓨鎵ц浜哄憳淇℃伅
+
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java`
+
+鍦╜insertSysTask`鏂规硶涓坊鍔犱簡淇濆瓨鎵ц浜哄憳淇℃伅鐨勯�昏緫锛�
+
+```java
+@Override
+@Transactional
+public int insertSysTask(TaskCreateVO createVO) {
+    // ... 淇濆瓨浠诲姟涓讳俊鎭�
+    
+    int result = sysTaskMapper.insertSysTask(task);
+    
+    // 淇濆瓨杞﹁締鍏宠仈淇℃伅
+    // ...
+    
+    // 淇濆瓨鎵ц浜哄憳淇℃伅锛堝寘鍚鑹茬被鍨嬶級
+    if (result > 0 && createVO.getAssignees() != null && !createVO.getAssignees().isEmpty()) {
+        saveTaskAssignees(task.getTaskId(), createVO.getAssignees());
+    }
+    
+    // ... 鍏朵粬閫昏緫
+}
+
+/**
+ * 淇濆瓨浠诲姟鎵ц浜哄憳淇℃伅锛堝寘鍚鑹茬被鍨嬶級
+ */
+private void saveTaskAssignees(Long taskId, List<TaskCreateVO.AssigneeInfo> assignees) {
+    if (assignees == null || assignees.isEmpty()) {
+        return;
+    }
+    
+    List<SysTaskAssignee> taskAssignees = new ArrayList<>();
+    Date now = DateUtils.getNowDate();
+    String currentUser = SecurityUtils.getUsername();
+    
+    for (int i = 0; i < assignees.size(); i++) {
+        TaskCreateVO.AssigneeInfo assigneeInfo = assignees.get(i);
+        
+        SysTaskAssignee taskAssignee = new SysTaskAssignee();
+        taskAssignee.setTaskId(taskId);
+        taskAssignee.setUserId(assigneeInfo.getUserId());
+        taskAssignee.setUserName(assigneeInfo.getUserName());
+        taskAssignee.setUserType(assigneeInfo.getUserType());
+        // 绗竴涓墽琛屼汉鍛樹负涓昏鎵ц浜�
+        taskAssignee.setIsPrimary(i == 0 ? "1" : "0");
+        taskAssignee.setSortOrder(i);
+        taskAssignee.setCreateTime(now);
+        taskAssignee.setCreateBy(currentUser);
+        taskAssignee.setUpdateTime(now);
+        taskAssignee.setUpdateBy(currentUser);
+        
+        taskAssignees.add(taskAssignee);
+    }
+    
+    // 鎵归噺淇濆瓨
+    if (!taskAssignees.isEmpty()) {
+        sysTaskAssigneeMapper.batchInsertSysTaskAssignee(taskAssignees);
+    }
+}
+```
+
+#### 3.5 鏃х郴缁熷悓姝� - 璇诲彇鎵ц浜哄憳淇℃伅
+
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java`
+
+淇敼浜哷getTaskAssignees`鏂规硶锛屼紭鍏堜粠鏁版嵁搴撹鍙栨墽琛屼汉鍛樹俊鎭細
+
+```java
+/**
+ * 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛�
+ */
+private List<TaskCreateVO.AssigneeInfo> getTaskAssignees(Long taskId) {
+    List<TaskCreateVO.AssigneeInfo> assignees = new ArrayList<>();
+    
+    try {
+        // 浠庢暟鎹簱鏌ヨ鎵ц浜哄憳淇℃伅锛堟寜鎺掑簭椤哄簭锛�
+        List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
+        
+        if (taskAssignees != null && !taskAssignees.isEmpty()) {
+            // 灏嗘暟鎹簱涓殑鎵ц浜哄憳杞崲涓篈ssigneeInfo瀵硅薄
+            for (SysTaskAssignee taskAssignee : taskAssignees) {
+                TaskCreateVO.AssigneeInfo assignee = new TaskCreateVO.AssigneeInfo();
+                assignee.setUserId(taskAssignee.getUserId());
+                assignee.setUserName(taskAssignee.getUserName());
+                assignee.setUserType(taskAssignee.getUserType());
+                assignees.add(assignee);
+            }
+            
+            log.info("浠庢暟鎹簱鑾峰彇鎵ц浜哄憳淇℃伅鎴愬姛锛屼换鍔D: {}, 浜哄憳鏁伴噺: {}", taskId, assignees.size());
+            return assignees;
+        }
+        
+        // 濡傛灉鏁版嵁搴撲腑娌℃湁鎵ц浜哄憳淇℃伅锛屽皾璇曚粠浠诲姟鐨勪富瑕佹墽琛屼汉鑾峰彇
+        log.warn("鏁版嵁搴撲腑鏈壘鍒版墽琛屼汉鍛樹俊鎭紝灏濊瘯浠庝换鍔′富瑕佹墽琛屼汉鑾峰彇锛屼换鍔D: {}", taskId);
+        SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+        if (task != null && task.getAssigneeId() != null) {
+            SysUser user = sysUserMapper.selectUserById(task.getAssigneeId());
+            if (user != null) {
+                TaskCreateVO.AssigneeInfo assignee = new TaskCreateVO.AssigneeInfo();
+                assignee.setUserId(user.getUserId());
+                assignee.setUserName(user.getNickName());
+                assignee.setUserType(getUserType(user)); // 閫氳繃瑙掕壊鍒ゆ柇绫诲瀷
+                assignees.add(assignee);
+            }
+        }
+    } catch (Exception e) {
+        log.error("鑾峰彇浠诲姟鎵ц浜哄憳淇℃伅寮傚父锛屼换鍔D: {}", taskId, e);
+    }
+    
+    return assignees;
+}
+```
+
+鍚屾閫昏緫`syncTaskAssignees`鏂规硶淇濇寔涓嶅彉锛岀洿鎺ヤ娇鐢╜getTaskAssignees`杩斿洖鐨勮鑹蹭俊鎭細
+
+```java
+private void syncTaskAssignees(SysTask task, Map<String, String> params) {
+    try {
+        // 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛�
+        List<TaskCreateVO.AssigneeInfo> assignees = getTaskAssignees(task.getTaskId());
+        
+        // ... 鍏朵粬閫昏緫
+        
+        // 閬嶅巻鎵ц浜哄憳锛屾牴鎹鑹茬被鍨嬪垎閰嶅埌瀵瑰簲鐨凟ntourage鍙傛暟
+        for (int i = 0; i < assignees.size(); i++) {
+            TaskCreateVO.AssigneeInfo assignee = assignees.get(i);
+            Long userId = assignee.getUserId();
+            String userType = assignee.getUserType(); // 鐩存帴浣跨敤鍓嶇浼犻�掔殑瑙掕壊绫诲瀷
+            
+            // ... 鏍规嵁userType鍒嗛厤鍒癊ntourage_1/3/4
+        }
+        
+        params.put("EntourageLeadID", leadEntourageId);
+        params.put("Entourage_1", driverOaId);  // 鍙告満
+        params.put("Entourage_3", doctorOaId);  // 鍖荤敓
+        params.put("Entourage_4", nurseOaId);   // 鎶ゅ+
+        
+    } catch (Exception e) {
+        log.error("鍚屾浠诲姟鎵ц浜哄憳寮傚父锛屼换鍔D: {}", task.getTaskId(), e);
+    }
+}
+```
+
+## 涓夈�佹暟鎹祦绋�
+
+### 3.1 鍒涘缓浠诲姟鏃剁殑鏁版嵁娴佺▼
+
+```
+鍓嶇閫夋嫨浜哄憳
+    鈫�
+getUserType璇嗗埆瑙掕壊锛堟牴鎹矖浣嶅悕绉版垨瑙掕壊鍚嶇О锛�
+    鈫�
+娣诲姞鍒皊electedStaff锛堝寘鍚玹ype灞炴�э細driver/doctor/nurse锛�
+    鈫�
+buildSubmitData鐢熸垚assignees鏁扮粍
+    [{userId, userName, userType}, ...]
+    鈫�
+鍚庣鎺ユ敹TaskCreateVO锛堝寘鍚玜ssignees瀛楁锛�
+    鈫�
+insertSysTask淇濆瓨浠诲姟涓讳俊鎭�
+    鈫�
+saveTaskAssignees淇濆瓨鎵ц浜哄憳淇℃伅鍒皊ys_task_assignee琛�
+    鈫�
+鍚屾鍒版棫绯荤粺锛堝紓姝ユ墽琛岋級
+```
+
+### 3.2 鍚屾鍒版棫绯荤粺鏃剁殑鏁版嵁娴佺▼
+
+```
+syncEmergencyTaskToLegacy
+    鈫�
+buildDispatchOrderParams
+    鈫�
+syncTaskAssignees鑾峰彇鎵ц浜哄憳淇℃伅
+    鈫�
+getTaskAssignees浠庢暟鎹簱鏌ヨ锛堟寜sort_order鎺掑簭锛�
+    鈫�
+杩斿洖List<AssigneeInfo>锛堝寘鍚玼serId, userName, userType锛�
+    鈫�
+閬嶅巻鎵ц浜哄憳锛屾牴鎹畊serType鍒嗛厤
+    - driver 鈫� Entourage_1
+    - doctor 鈫� Entourage_3
+    - nurse 鈫� Entourage_4
+    - 绗竴涓汉鍛� 鈫� EntourageLeadID璁句负1/3/4
+    鈫�
+鍙戦�丠TTP璇锋眰鍒版棫绯荤粺
+```
+
+## 鍥涖�佸叧閿妧鏈偣
+
+### 4.1 鍓嶇瑙掕壊璇嗗埆
+
+閫氳繃鍒ゆ柇宀椾綅鍚嶇О鎴栬鑹插悕绉颁腑鏄惁鍖呭惈鍏抽敭璇嶏細
+- "鍙告満" 鈫� driver
+- "鍖荤敓" 鈫� doctor
+- "鎶ゅ+" 鈫� nurse
+- 鍏朵粬 鈫� 榛樿涓篸river
+
+### 4.2 鏁版嵁瀛樺偍璁捐
+
+鍒涘缓鐙珛鐨勫叧鑱旇〃`sys_task_assignee`锛�
+- 浼樼偣锛氭敮鎸佸涓墽琛屼汉鍛橈紝姣忎釜浜哄憳閮芥湁鏄庣‘鐨勮鑹茬被鍨�
+- 浼樼偣锛氶�氳繃sort_order瀛楁纭畾棰嗛槦椤哄簭
+- 浼樼偣锛歩s_primary瀛楁鏍囪瘑涓昏鎵ц浜�
+- 浼樼偣锛氫究浜庡悗缁墿灞曪紙濡傛坊鍔犲垎宸ャ�佷换鍔″垎閰嶇瓑锛�
+
+### 4.3 鎵归噺鎻掑叆浼樺寲
+
+浣跨敤MyBatis鐨勬壒閲忔彃鍏ワ紝涓�娆℃�т繚瀛樻墍鏈夋墽琛屼汉鍛樹俊鎭紝鎻愰珮鎬ц兘銆�
+
+### 4.4 鍚戝悗鍏煎
+
+`getTaskAssignees`鏂规硶鍏锋湁鍚戝悗鍏煎鎬э細
+1. 浼樺厛浠庢柊琛╜sys_task_assignee`鏌ヨ鎵ц浜哄憳淇℃伅
+2. 濡傛灉鏌ヨ涓嶅埌锛屽垯浠庝换鍔′富琛ㄧ殑`assignee_id`瀛楁鑾峰彇涓昏鎵ц浜�
+3. 瀵逛簬鏃ф暟鎹紝閫氳繃`getUserType`鏂规硶鍒ゆ柇瑙掕壊绫诲瀷
+
+## 浜斻�佹枃浠舵竻鍗�
+
+### 5.1 鏂板缓鏂囦欢
+
+1. **鏁版嵁搴撹剼鏈�**
+   - `sql/create_sys_task_assignee.sql` - 鍒涘缓鎵ц浜哄憳鍏宠仈琛�
+
+2. **Java瀹炰綋绫�**
+   - `ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskAssignee.java` - 鎵ц浜哄憳瀹炰綋绫�
+
+3. **Mapper鎺ュ彛**
+   - `ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskAssigneeMapper.java` - 鎵ц浜哄憳Mapper鎺ュ彛
+
+4. **Mapper XML**
+   - `ruoyi-system/src/main/resources/mapper/system/SysTaskAssigneeMapper.xml` - 鎵ц浜哄憳Mapper XML
+
+5. **鏂囨。**
+   - `prd/鎵ц浜哄憳瑙掕壊瀛樺偍鍔熻兘瀹炵幇鎬荤粨.md` - 鏈枃妗�
+
+### 5.2 淇敼鏂囦欢
+
+1. **鍓嶇**
+   - `app/pages/task/create-emergency.vue` - 宸插湪涔嬪墠淇敼锛屾湰娆℃棤鏂颁慨鏀�
+
+2. **鍚庣VO**
+   - `ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java` - 宸插湪涔嬪墠娣诲姞AssigneeInfo鍐呴儴绫诲拰assignees瀛楁
+
+3. **鏈嶅姟灞�**
+   - `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java`
+     - 娣诲姞SysTaskAssigneeMapper娉ㄥ叆
+     - 鍦╥nsertSysTask鏂规硶涓皟鐢╯aveTaskAssignees
+     - 鏂板saveTaskAssignees鏂规硶淇濆瓨鎵ц浜哄憳淇℃伅
+
+4. **鍚屾鏈嶅姟**
+   - `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java`
+     - 娣诲姞SysTaskAssigneeMapper娉ㄥ叆
+     - 淇敼getTaskAssignees鏂规硶锛屼紭鍏堜粠鏁版嵁搴撹鍙栨墽琛屼汉鍛樹俊鎭�
+
+## 鍏�侀儴缃叉楠�
+
+1. **鎵ц鏁版嵁搴撹剼鏈�**
+   ```bash
+   # 鍦∕ySQL鏁版嵁搴撲腑鎵ц
+   mysql -u root -p < sql/create_sys_task_assignee.sql
+   ```
+
+2. **缂栬瘧鍚庣浠g爜**
+   ```bash
+   mvn clean install
+   ```
+
+3. **閲嶅惎鍚庣鏈嶅姟**
+   ```bash
+   java -jar ruoyi-admin.jar
+   ```
+
+4. **鍓嶇浠g爜宸插湪涔嬪墠閮ㄧ讲锛屾棤闇�閲嶆柊閮ㄧ讲**
+
+## 涓冦�佹祴璇曢獙璇�
+
+### 7.1 鍒涘缓浠诲姟娴嬭瘯
+
+1. 鎵撳紑APP锛岃繘鍏�"鍒涘缓鎬ユ晳杞繍浠诲姟"椤甸潰
+2. 閫夋嫨澶氫釜鎵ц浜哄憳锛堝寘鍚徃鏈恒�佸尰鐢熴�佹姢澹級
+3. 瑙傚療浜哄憳绛涢�夊姛鑳芥槸鍚︽甯稿伐浣�
+4. 鎻愪氦浠诲姟锛屾鏌ユ暟鎹簱`sys_task_assignee`琛ㄤ腑鏄惁姝g‘淇濆瓨浜嗘墽琛屼汉鍛樹俊鎭�
+5. 楠岃瘉瀛楁鍊硷細
+   - `user_type`鏄惁涓篸river/doctor/nurse
+   - `is_primary`绗竴涓槸鍚︿负"1"锛屽叾浠栦负"0"
+   - `sort_order`鏄惁浠�0寮�濮嬮�掑
+
+### 7.2 鍚屾娴嬭瘯
+
+1. 鍒涘缓浠诲姟鍚庯紝绛夊緟2绉掕鍚屾鏈嶅姟寮傛鎵ц
+2. 鏌ョ湅鏃ュ織锛岀‘璁ゆ槸鍚︿粠鏁版嵁搴撴纭鍙栦簡鎵ц浜哄憳淇℃伅
+3. 妫�鏌ユ棫绯荤粺鐨勮皟搴﹀崟琛紝楠岃瘉锛�
+   - `EntourageLeadID`鏄惁姝g‘璁剧疆涓�1/3/4
+   - `Entourage_1`鏄惁涓哄徃鏈虹殑OA_UserID
+   - `Entourage_3`鏄惁涓哄尰鐢熺殑OA_UserID
+   - `Entourage_4`鏄惁涓烘姢澹殑OA_UserID
+
+### 7.3 鍚戝悗鍏煎娴嬭瘯
+
+1. 鏌ヨ涓�涓棫浠诲姟锛堟病鏈夋墽琛屼汉鍛樺叧鑱旇褰曪級
+2. 灏濊瘯鍚屾璇ヤ换鍔″埌鏃х郴缁�
+3. 楠岃瘉鏄惁鑳戒粠浠诲姟涓昏〃鐨刞assignee_id`瀛楁鑾峰彇鎵ц浜哄憳
+4. 楠岃瘉鏄惁鑳芥纭垽鏂鎵ц浜哄憳鐨勮鑹茬被鍨�
+
+## 鍏�佹敞鎰忎簨椤�
+
+1. **鏁版嵁涓�鑷存��**锛�
+   - 鎵ц浜哄憳淇℃伅瀛樺偍鍦ㄤ袱涓湴鏂癸細浠诲姟涓昏〃鐨刞assignee_id`锛堜富瑕佹墽琛屼汉锛夊拰`sys_task_assignee`琛紙鎵�鏈夋墽琛屼汉鍛橈級
+   - 闇�瑕佷繚鎸佷袱鑰呯殑涓�鑷存�э紝`assignee_id`搴旇绛変簬`sys_task_assignee`琛ㄤ腑`is_primary='1'`鐨勮褰�
+
+2. **瑙掕壊璇嗗埆鍑嗙‘鎬�**锛�
+   - 鍓嶇閫氳繃宀椾綅鍚嶇О鎴栬鑹插悕绉板寘鍚叧閿瘝鏉ュ垽鏂鑹�
+   - 闇�瑕佺‘淇濈郴缁熶腑鐨勫矖浣嶅拰瑙掕壊鍛藉悕瑙勮寖锛屽寘鍚�"鍙告満"銆�"鍖荤敓"銆�"鎶ゅ+"绛夊叧閿瘝
+   - 瀵逛簬鏃犳硶璇嗗埆鐨勭敤鎴凤紝榛樿涓哄徃鏈虹被鍨�
+
+3. **鍚屾椤哄簭**锛�
+   - 鎵ц浜哄憳鐨勯『搴忓緢閲嶈锛岀涓�涓墽琛屼汉鍛樿嚜鍔ㄦ垚涓洪闃�
+   - 閫氳繃`sort_order`瀛楁淇濊瘉椤哄簭鐨勬纭��
+
+4. **鍚戝悗鍏煎**锛�
+   - 瀵逛簬鏃ф暟鎹紝`getTaskAssignees`鏂规硶浼氳嚜鍔ㄤ粠浠诲姟涓昏〃鑾峰彇鎵ц浜哄憳
+   - 寤鸿瀵规棫鏁版嵁杩涜鏁版嵁杩佺Щ锛屽皢鎵ц浜哄憳淇℃伅鍐欏叆`sys_task_assignee`琛�
+
+5. **鎬ц兘浼樺寲**锛�
+   - 浣跨敤鎵归噺鎻掑叆鍑忓皯鏁版嵁搴撲氦浜掓鏁�
+   - 鏌ヨ鏃舵寜`sort_order`鎺掑簭锛岀‘淇濋『搴忔纭�
+
+## 涔濄�佷紭鍔挎�荤粨
+
+1. **鏁版嵁瀹屾暣鎬�**锛氭墽琛屼汉鍛樺強鍏惰鑹蹭俊鎭畬鏁村瓨鍌ㄥ湪鏁版嵁搴撲腑
+2. **鍓嶇鏄庣‘**锛氱敤鎴烽�夋嫨鏃跺氨鑳界湅鍒颁汉鍛樼被鍨嬶紙鍙告満/鍖荤敓/鎶ゅ+锛�
+3. **鍚庣绠�鍖�**锛氫笉闇�瑕佸湪鍚屾鏃堕噸澶嶆煡璇㈠拰鍒ゆ柇瑙掕壊
+4. **鍚屾鍙潬**锛氱洿鎺ヤ娇鐢ㄥ瓨鍌ㄧ殑瑙掕壊绫诲瀷锛岄伩鍏嶅垽鏂敊璇�
+5. **鏄撲簬鎵╁睍**锛氱嫭绔嬬殑鍏宠仈琛ㄨ璁★紝渚夸簬鍚庣画鍔熻兘鎵╁睍
+6. **鍚戝悗鍏煎**锛氬吋瀹规棫鏁版嵁锛屼笉褰卞搷宸叉湁鍔熻兘
+
+## 鍗併�佹湭鏉ユ墿灞曞缓璁�
+
+1. **鎵ц浜哄憳浠诲姟鍒嗗伐**锛氬湪`sys_task_assignee`琛ㄤ腑娣诲姞`task_role`瀛楁锛岃褰曟墽琛屼汉鍛樺湪浠诲姟涓殑鍏蜂綋鑱岃矗
+
+2. **鎵ц浜哄憳鐘舵�佽拷韪�**锛氭坊鍔燻status`瀛楁锛岃褰曟墽琛屼汉鍛樼殑浠诲姟鐘舵�侊紙宸插垎閰嶃�佸凡纭銆佹墽琛屼腑銆佸凡瀹屾垚绛夛級
+
+3. **鎵ц浜哄憳鍙樻洿璁板綍**锛氭坊鍔犲巻鍙茶褰曡〃锛岃褰曟墽琛屼汉鍛樼殑鍙樻洿鍘嗗彶
+
+4. **鎵ц浜哄憳缁╂晥缁熻**锛氬熀浜庢墽琛屼汉鍛樺叧鑱旇〃锛岀粺璁℃瘡涓汉鍛樼殑浠诲姟鎵ц鎯呭喌
+
+5. **鏅鸿兘鎺ㄨ崘**锛氬熀浜庡巻鍙叉暟鎹紝鏅鸿兘鎺ㄨ崘鍚堥�傜殑鎵ц浜哄憳缁勫悎
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245-\345\277\253\351\200\237\345\274\200\345\247\213.md" "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245-\345\277\253\351\200\237\345\274\200\345\247\213.md"
new file mode 100644
index 0000000..bfc1919
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245-\345\277\253\351\200\237\345\274\200\345\247\213.md"
@@ -0,0 +1,211 @@
+# 鏃х郴缁熷悓姝ュ姛鑳� - 蹇�熷紑濮嬫寚鍗�
+
+## 馃殌 5鍒嗛挓蹇�熼厤缃�
+
+### 姝ラ1: 鎵ц鏁版嵁搴撹剼鏈� (1鍒嗛挓)
+
+```bash
+cd d:/project/鎬ユ晳杞繍/code/Api/RuoYi-Vue-master
+mysql -u root -p ruoyi < sql/add_legacy_system_id.sql
+```
+
+鎴栬�呭湪MySQL瀹㈡埛绔腑鎵ц:
+```sql
+source d:/project/鎬ユ晳杞繍/code/Api/RuoYi-Vue-master/sql/add_legacy_system_id.sql
+```
+
+### 姝ラ2: 閰嶇疆鏃х郴缁烾RL (1鍒嗛挓)
+
+缂栬緫 `ruoyi-admin/src/main/resources/application.yml`锛屾坊鍔�:
+
+```yaml
+# 鏃х郴缁熼厤缃�
+legacy:
+  system:
+    base-url: http://your-legacy-system-url  # 淇敼涓哄疄闄呯殑鏃х郴缁熷湴鍧�
+    enabled: true
+```
+
+**绀轰緥**:
+```yaml
+# 鏃х郴缁熼厤缃�
+legacy:
+  system:
+    base-url: http://192.168.1.100:8080
+    enabled: true
+```
+
+### 姝ラ3: 閲嶅惎搴旂敤 (1鍒嗛挓)
+
+```bash
+# 鍋滄搴旂敤
+# ... (鏍规嵁浣犵殑鍚姩鏂瑰紡鍋滄)
+
+# 閲嶆柊鍚姩搴旂敤
+cd ruoyi-admin
+mvn spring-boot:run
+
+# 鎴栬��
+java -jar ruoyi-admin.jar
+```
+
+### 姝ラ4: 閰嶇疆瀹氭椂浠诲姟 (2鍒嗛挓)
+
+1. 鐧诲綍鍚庡彴绠$悊绯荤粺
+2. 杩涘叆 `绯荤粺绠$悊` -> `瀹氭椂浠诲姟`
+3. 鐐瑰嚮 `鏂板` 鎸夐挳
+4. 濉啓浠ヤ笅淇℃伅:
+
+```
+浠诲姟鍚嶇О: 鏃х郴缁熶换鍔″悓姝�
+浠诲姟缁勫悕: DEFAULT
+璋冪敤鐩爣瀛楃涓�: legacySystemSyncTask.syncPendingTasks()
+cron琛ㄨ揪寮�: 0 0/10 * * * ?
+```
+
+5. 鐐瑰嚮 `纭畾` 淇濆瓨
+6. 鍦ㄤ换鍔″垪琛ㄤ腑鎵惧埌鍒氬垱寤虹殑浠诲姟锛岀偣鍑� `鎵ц涓�娆 娴嬭瘯
+
+### 姝ラ5: 楠岃瘉鍚屾 (1鍒嗛挓)
+
+#### 鏂规硶1: 鍒涘缓娴嬭瘯浠诲姟
+
+1. 鍦ㄧЩ鍔ㄧ鎴栫鐞嗗悗鍙板垱寤轰竴涓�ユ晳杞繍浠诲姟
+2. 绛夊緟2-3绉�
+3. 鍦ㄦ暟鎹簱涓煡璇�:
+
+```sql
+SELECT 
+    t.task_id,
+    t.task_code,
+    e.sync_status,
+    e.legacy_service_ord_id,
+    e.sync_error_msg
+FROM sys_task t
+JOIN sys_task_emergency e ON t.task_id = e.task_id
+WHERE t.task_type = 'EMERGENCY_TRANSFER'
+ORDER BY t.create_time DESC
+LIMIT 1;
+```
+
+#### 鏂规硶2: 鏌ョ湅鏃ュ織
+
+```bash
+# Linux
+tail -f logs/sys-info.log | grep "LegacySystemSync"
+
+# Windows (鍦ㄦ棩蹇楁枃浠朵腑鎼滅储)
+# 鎼滅储鍏抽敭璇�: LegacySystemSyncServiceImpl
+```
+
+### 鍚屾鐘舵�佽鏄�
+
+| sync_status | 璇存槑 | 鏄惁姝e父 |
+|------------|------|---------|
+| 0 | 鏈悓姝� | 鈴� 绛夊緟鍚屾 |
+| 1 | 鍚屾涓� | 鈴� 姝e湪鍚屾 |
+| 2 | 鍚屾鎴愬姛 | 鉁� 姝e父 |
+| 3 | 鍚屾澶辫触 | 鉂� 闇�澶勭悊 |
+
+---
+
+## 馃敡 甯歌闂
+
+### Q1: 鍚屾鐘舵�佷竴鐩存槸0
+
+**鍘熷洜**: 鑷姩鍚屾鏈Е鍙戞垨瀹氭椂浠诲姟鏈惎鍔�
+
+**瑙e喅**:
+1. 妫�鏌� `legacy.system.enabled` 鏄惁涓� `true`
+2. 鍦ㄥ畾鏃朵换鍔′腑鐐瑰嚮"鎵ц涓�娆�"
+3. 鏌ョ湅鏃ュ織鏄惁鏈夊紓甯�
+
+### Q2: 鍚屾澶辫触 (status=3)
+
+**鍘熷洜**: 鏃х郴缁烾RL閿欒鎴栫綉缁滀笉閫�
+
+**瑙e喅**:
+1. 妫�鏌� `legacy.system.base-url` 閰嶇疆
+2. 鏌ョ湅 `sync_error_msg` 瀛楁鐨勯敊璇俊鎭�
+3. 娴嬭瘯缃戠粶: `curl http://鏃х郴缁熷湴鍧�/admin_save_19.gds`
+
+### Q3: 濡備綍鎵嬪姩閲嶆柊鍚屾
+
+```sql
+-- 灏嗗悓姝ョ姸鎬侀噸缃负0
+UPDATE sys_task_emergency 
+SET sync_status = 0, 
+    sync_error_msg = NULL
+WHERE task_id = <浠诲姟ID>;
+
+-- 鐒跺悗鎵ц瀹氭椂浠诲姟鎴栫瓑寰呰嚜鍔ㄥ悓姝�
+```
+
+### Q4: 濡備綍涓存椂绂佺敤鍚屾
+
+鏂规硶1 - 淇敼閰嶇疆 (鎺ㄨ崘):
+```yaml
+legacy:
+  system:
+    enabled: false
+```
+
+鏂规硶2 - 鍋滄瀹氭椂浠诲姟:
+鍦� `绯荤粺绠$悊` -> `瀹氭椂浠诲姟` 涓紝灏嗕换鍔$姸鎬佹敼涓�"鏆傚仠"
+
+---
+
+## 馃搳 鐩戞帶鏌ヨ
+
+### 鏌ョ湅鍚屾缁熻
+
+```sql
+SELECT 
+    CASE sync_status
+        WHEN 0 THEN '鏈悓姝�'
+        WHEN 1 THEN '鍚屾涓�'
+        WHEN 2 THEN '鍚屾鎴愬姛'
+        WHEN 3 THEN '鍚屾澶辫触'
+    END AS 鐘舵��,
+    COUNT(*) AS 鏁伴噺
+FROM sys_task_emergency
+GROUP BY sync_status;
+```
+
+### 鏌ョ湅鏈�杩�10娆″悓姝ヨ褰�
+
+```sql
+SELECT 
+    t.task_code AS 浠诲姟缂栧彿,
+    e.sync_status AS 鍚屾鐘舵��,
+    e.legacy_service_ord_id AS 鏃х郴缁烮D,
+    e.sync_time AS 鍚屾鏃堕棿,
+    e.sync_error_msg AS 閿欒淇℃伅
+FROM sys_task t
+JOIN sys_task_emergency e ON t.task_id = e.task_id
+ORDER BY e.sync_time DESC
+LIMIT 10;
+```
+
+---
+
+## 馃摓 鑾峰彇甯姪
+
+濡傛灉閬囧埌闂:
+1. 鏌ョ湅璇︾粏鏂囨。: [鏃х郴缁熷悓姝ラ厤缃鏄�.md](./鏃х郴缁熷悓姝ラ厤缃鏄�.md)
+2. 妫�鏌ユ棩蹇楁枃浠�: `logs/sys-info.log`
+3. 鑱旂郴绯荤粺绠$悊鍛�
+
+---
+
+## 鉁� 閰嶇疆妫�鏌ユ竻鍗�
+
+- [ ] 鏁版嵁搴撹剼鏈凡鎵ц
+- [ ] `application.yml` 宸查厤缃� `legacy.system.base-url`
+- [ ] `legacy.system.enabled` 璁剧疆涓� `true`
+- [ ] 搴旂敤宸查噸鍚�
+- [ ] 瀹氭椂浠诲姟宸插垱寤轰笖鐘舵�佷负"姝e父"
+- [ ] 宸叉祴璇曞垱寤轰换鍔″苟楠岃瘉鍚屾
+- [ ] 鏃ュ織涓棤閿欒淇℃伅
+
+鍏ㄩ儴瀹屾垚鍚庯紝鏃х郴缁熷悓姝ュ姛鑳藉嵆鍙甯歌繍琛岋紒馃帀
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245ServiceOrdAreaType\345\217\202\346\225\260\344\274\230\345\214\226\350\257\264\346\230\216.md" "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245ServiceOrdAreaType\345\217\202\346\225\260\344\274\230\345\214\226\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..5e709ac
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245ServiceOrdAreaType\345\217\202\346\225\260\344\274\230\345\214\226\350\257\264\346\230\216.md"
@@ -0,0 +1,307 @@
+# 鏃х郴缁熷悓姝erviceOrdAreaType鍙傛暟浼樺寲璇存槑
+
+## 淇敼鏃ユ湡
+2025-10-19
+
+## 淇敼鍐呭
+
+### 闂鎻忚堪
+
+涔嬪墠鐨勫疄鐜颁腑锛宍ServiceOrdAreaType`鍙傛暟鍥哄畾浼犲叆"1"锛屾病鏈変娇鐢ㄤ换鍔℃墍灞炲垎鍏徃鐨勫疄闄呮湇鍔″崟缂栫爜銆�
+
+**鍘熶唬鐮�**锛�
+```java
+params.put("ServiceOrdAreaType", "1"); // 鏈嶅姟鍗曟墽琛屽尯鍩燂紙榛樿1锛�
+```
+
+### 浼樺寲鏂规
+
+淇敼涓轰粠浠诲姟鎵�灞為儴闂ㄦ煡璇㈡湇鍔″崟缂栫爜锛岃嚜鍔ㄤ紶鍏ュ搴旂殑缂栫爜鍊笺��
+
+**鏂颁唬鐮�**锛�
+```java
+// 鏈嶅姟鍗曟墽琛屽尯鍩燂紙浣跨敤浠诲姟鎵�灞炲垎鍏徃鐨勬湇鍔″崟缂栫爜锛�
+String serviceOrdAreaType = "1"; // 榛樿鍊�
+if (task.getDeptId() != null) {
+    try {
+        SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
+        if (dept != null && StringUtils.isNotEmpty(dept.getServiceOrderClass())) {
+            serviceOrdAreaType = dept.getServiceOrderClass();
+            log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 閮ㄩ棬鍚嶇О: {}, 鏈嶅姟鍗曠紪鐮�: {}", 
+                task.getDeptId(), dept.getDeptName(), serviceOrdAreaType);
+        } else {
+            log.warn("浠诲姟鎵�灞為儴闂ㄦ湭閰嶇疆鏈嶅姟鍗曠紪鐮侊紝閮ㄩ棬ID: {}銆侀儴闂ㄥ悕绉�: {}锛屼娇鐢ㄩ粯璁ゅ��", 
+                task.getDeptId(), dept != null ? dept.getDeptName() : "null");
+        }
+    } catch (Exception e) {
+        log.error("鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: {}", task.getDeptId(), e);
+    }
+} else {
+    log.warn("浠诲姟鏈叧鑱旈儴闂紝浣跨敤榛樿鏈嶅姟鍗曠紪鐮�");
+}
+
+params.put("ServiceOrdAreaType", serviceOrdAreaType);
+```
+
+## 鎶�鏈疄鐜�
+
+### 1. 渚濊禆娉ㄥ叆
+
+鏂板`SysDeptMapper`渚濊禆锛�
+
+```java
+@Autowired
+private SysDeptMapper sysDeptMapper;
+```
+
+### 2. 瀵煎叆閮ㄩ棬瀹炰綋
+
+```java
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.system.mapper.SysDeptMapper;
+```
+
+### 3. 鏌ヨ閫昏緫
+
+1. **妫�鏌ヤ换鍔℃槸鍚︽湁閮ㄩ棬ID**
+   - 鏈夛細缁х画鏌ヨ閮ㄩ棬淇℃伅
+   - 鏃狅細浣跨敤榛樿鍊�"1"锛岃褰曡鍛婃棩蹇�
+
+2. **鏌ヨ閮ㄩ棬淇℃伅**
+   - 鎴愬姛锛氳幏鍙栭儴闂ㄧ殑`serviceOrderClass`瀛楁
+   - 澶辫触锛氫娇鐢ㄩ粯璁ゅ��"1"锛岃褰曢敊璇棩蹇�
+
+3. **妫�鏌ョ紪鐮佹槸鍚﹀瓨鍦�**
+   - 瀛樺湪锛氫娇鐢ㄨ缂栫爜鍊�
+   - 涓嶅瓨鍦細浣跨敤榛樿鍊�"1"锛岃褰曡鍛婃棩蹇�
+
+4. **寮傚父澶勭悊**
+   - 鎹曡幏鎵�鏈夊紓甯革紝浣跨敤榛樿鍊�"1"
+   - 璁板綍閿欒鏃ュ織锛屼笉褰卞搷鍚屾娴佺▼
+
+## 鏁版嵁娴佽浆
+
+```
+鍒涘缓鎬ユ晳杞繍浠诲姟
+    鈫�
+璁剧疆褰掑睘閮ㄩ棬锛坉eptId锛�
+    鈫�
+閮ㄩ棬鑷姩鍚屾鏃惰幏鍙栨湇鍔″崟缂栫爜
+    鈹溾攢 浠嶴QL Server鏌ヨ缂栫爜
+    鈹斺攢 鏍规嵁鍦板悕鑷姩鍖归厤
+    鈫�
+淇濆瓨鍒皊ys_dept.service_order_class
+    鈫�
+鍚屾浠诲姟鍒版棫绯荤粺鏃�
+    鈫�
+鏍规嵁task.deptId鏌ヨ閮ㄩ棬
+    鈫�
+鑾峰彇dept.serviceOrderClass
+    鈫�
+浼犲叆ServiceOrdAreaType鍙傛暟
+```
+
+## 绀轰緥鍦烘櫙
+
+### 鍦烘櫙1锛氭甯告儏鍐�
+
+**浠诲姟鏁版嵁**锛�
+- taskId: 1001
+- deptId: 200锛堜腑灞卞垎鍏徃锛�
+- taskType: EMERGENCY_TRANSFER
+
+**閮ㄩ棬鏁版嵁**锛�
+- deptId: 200
+- deptName: "涓北鍒嗗叕鍙�"
+- serviceOrderClass: "JA"
+
+**鍚屾鍙傛暟**锛�
+```
+ServiceOrdAreaType = "JA"
+```
+
+**鏃ュ織**锛�
+```
+INFO - 鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: 200, 閮ㄩ棬鍚嶇О: 涓北鍒嗗叕鍙�, 鏈嶅姟鍗曠紪鐮�: JA
+```
+
+### 鍦烘櫙2锛氶儴闂ㄦ湭閰嶇疆缂栫爜
+
+**浠诲姟鏁版嵁**锛�
+- taskId: 1002
+- deptId: 203锛堟繁鍦冲垎鍏徃锛�
+
+**閮ㄩ棬鏁版嵁**锛�
+- deptId: 203
+- deptName: "娣卞湷鍒嗗叕鍙�"
+- serviceOrderClass: null
+
+**鍚屾鍙傛暟**锛�
+```
+ServiceOrdAreaType = "1"  锛堜娇鐢ㄩ粯璁ゅ�硷級
+```
+
+**鏃ュ織**锛�
+```
+WARN - 浠诲姟鎵�灞為儴闂ㄦ湭閰嶇疆鏈嶅姟鍗曠紪鐮侊紝閮ㄩ棬ID: 203銆侀儴闂ㄥ悕绉�: 娣卞湷鍒嗗叕鍙革紝浣跨敤榛樿鍊�
+```
+
+### 鍦烘櫙3锛氫换鍔℃湭鍏宠仈閮ㄩ棬
+
+**浠诲姟鏁版嵁**锛�
+- taskId: 1003
+- deptId: null
+
+**鍚屾鍙傛暟**锛�
+```
+ServiceOrdAreaType = "1"  锛堜娇鐢ㄩ粯璁ゅ�硷級
+```
+
+**鏃ュ織**锛�
+```
+WARN - 浠诲姟鏈叧鑱旈儴闂紝浣跨敤榛樿鏈嶅姟鍗曠紪鐮�
+```
+
+### 鍦烘櫙4锛氭煡璇㈠紓甯�
+
+**浠诲姟鏁版嵁**锛�
+- taskId: 1004
+- deptId: 999锛堜笉瀛樺湪鐨勯儴闂級
+
+**鍚屾鍙傛暟**锛�
+```
+ServiceOrdAreaType = "1"  锛堜娇鐢ㄩ粯璁ゅ�硷級
+```
+
+**鏃ュ織**锛�
+```
+ERROR - 鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: 999
+```
+
+## 鍙傛暟鏄犲皠
+
+| 鍒嗗叕鍙� | 閮ㄩ棬ID | 鏈嶅姟鍗曠紪鐮� | ServiceOrdAreaType |
+|--------|--------|-----------|-------------------|
+| 涓北鍒嗗叕鍙� | 200 | JA | JA |
+| 骞垮窞鍒嗗叕鍙� | 201 | GZ | GZ |
+| 婀涙睙鍒嗗叕鍙� | 202 | ZJ | ZJ |
+| 鐝犳捣鍒嗗叕鍙� | 203 | ZH | ZH |
+| 鏈厤缃� | 204 | null | 1锛堥粯璁ゅ�硷級 |
+| 鏈叧鑱� | null | - | 1锛堥粯璁ゅ�硷級 |
+
+## 浼樺娍
+
+### 1. 鑷姩鍖�
+
+鉁� 鏃犻渶鎵嬪姩閰嶇疆姣忎釜鍒嗗叕鍙哥殑缂栫爜  
+鉁� 閮ㄩ棬鍚屾鏃惰嚜鍔ㄨ幏鍙栫紪鐮�  
+鉁� 鍒涘缓浠诲姟鏃惰嚜鍔ㄤ娇鐢ㄥ搴旂紪鐮�
+
+### 2. 瀹归敊鎬�
+
+鉁� 澶氬眰寮傚父澶勭悊  
+鉁� 榛樿鍊间繚搴�  
+鉁� 涓嶅奖鍝嶅悓姝ユ祦绋�
+
+### 3. 鍙淮鎶ゆ��
+
+鉁� 璇︾粏鐨勬棩蹇楄褰�  
+鉁� 娓呮櫚鐨勯�昏緫娴佺▼  
+鉁� 渚夸簬闂鎺掓煡
+
+### 4. 鎵╁睍鎬�
+
+鉁� 鏀寔鏈潵娣诲姞鏂板垎鍏徃  
+鉁� 鏀寔缂栫爜鍔ㄦ�佹洿鏂�  
+鉁� 鏀寔鎵嬪姩淇缂栫爜
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 閮ㄩ棬缂栫爜閰嶇疆
+
+纭繚姣忎釜鍒嗗叕鍙搁兘閰嶇疆浜嗘湇鍔″崟缂栫爜锛�
+
+**妫�鏌QL**锛�
+```sql
+SELECT 
+    dept_id,
+    dept_name,
+    service_order_class
+FROM sys_dept 
+WHERE parent_id = 100 
+  AND dept_name LIKE '%鍒嗗叕鍙�';
+```
+
+**閰嶇疆鏂规硶**锛�
+- 鑷姩鍚屾锛氭墽琛岄儴闂ㄥ悓姝ヤ换鍔�
+- 鎵嬪姩閰嶇疆锛氬悗鍙伴儴闂ㄧ鐞嗙晫闈㈢紪杈�
+
+### 2. 浠诲姟褰掑睘閮ㄩ棬
+
+鍒涘缓浠诲姟鏃剁‘淇濊缃簡姝g‘鐨勫綊灞為儴闂細
+
+```java
+SysTask task = new SysTask();
+task.setDeptId(200L); // 璁剧疆褰掑睘閮ㄩ棬
+```
+
+### 3. 榛樿鍊煎厹搴�
+
+鍗充娇閮ㄩ棬鏈厤缃紪鐮侊紝绯荤粺涔熶細浣跨敤榛樿鍊�"1"锛岀‘淇濆悓姝ヤ笉浼氬け璐ャ��
+
+### 4. 鏃ュ織鐩戞帶
+
+瀹氭湡妫�鏌ユ棩蹇楋紝鍏虫敞浠ヤ笅璀﹀憡锛�
+- "浠诲姟鎵�灞為儴闂ㄦ湭閰嶇疆鏈嶅姟鍗曠紪鐮�"
+- "浠诲姟鏈叧鑱旈儴闂�"
+
+## 娴嬭瘯寤鸿
+
+### 娴嬭瘯鐢ㄤ緥1锛氭甯稿悓姝�
+
+1. 鍒涘缓浠诲姟锛屽綊灞炰腑灞卞垎鍏徃
+2. 鍚屾鍒版棫绯荤粺
+3. 妫�鏌ユ棩蹇楀拰鍙傛暟
+
+**棰勬湡缁撴灉**锛�
+- ServiceOrdAreaType = "JA"
+- 鏃ュ織鏄剧ず鎴愬姛鑾峰彇缂栫爜
+
+### 娴嬭瘯鐢ㄤ緥2锛氭湭閰嶇疆缂栫爜
+
+1. 鍒涘缓浠诲姟锛屽綊灞炴湭閰嶇疆缂栫爜鐨勫垎鍏徃
+2. 鍚屾鍒版棫绯荤粺
+3. 妫�鏌ユ棩蹇楀拰鍙傛暟
+
+**棰勬湡缁撴灉**锛�
+- ServiceOrdAreaType = "1"
+- 鏃ュ織鏄剧ず浣跨敤榛樿鍊�
+
+### 娴嬭瘯鐢ㄤ緥3锛氭湭鍏宠仈閮ㄩ棬
+
+1. 鍒涘缓浠诲姟锛屼笉璁剧疆褰掑睘閮ㄩ棬
+2. 鍚屾鍒版棫绯荤粺
+3. 妫�鏌ユ棩蹇楀拰鍙傛暟
+
+**棰勬湡缁撴灉**锛�
+- ServiceOrdAreaType = "1"
+- 鏃ュ織鏄剧ず鏈叧鑱旈儴闂ㄨ鍛�
+
+## 鐩稿叧鏂囨。
+
+- [鏃х郴缁熷悓姝ュ姛鑳藉疄鐜版�荤粨](./鏃х郴缁熷悓姝ュ姛鑳藉疄鐜版�荤粨.md)
+- [鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃](./鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md)
+- [閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑](./閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md)
+- [閮ㄩ棬缂栫爜鏄犲皠琛╙(./閮ㄩ棬缂栫爜鏄犲皠琛�.md)
+
+## 鍙樻洿鍘嗗彶
+
+| 鐗堟湰 | 鏃ユ湡 | 璇存槑 |
+|------|------|------|
+| v1.0 | 2025-10-19 | 鍒濆瀹炵幇锛屽浐瀹氫紶"1" |
+| v1.1 | 2025-10-19 | 浼樺寲涓轰粠閮ㄩ棬鑾峰彇鏈嶅姟鍗曠紪鐮� |
+
+---
+
+**缁存姢浜�**锛氱郴缁熷紑鍙戝洟闃�  
+**鏈�鍚庢洿鏂�**锛�2025-10-19
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md" "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md"
new file mode 100644
index 0000000..14f4b7c
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md"
@@ -0,0 +1,436 @@
+# 鏃х郴缁熷悓姝ュ姛鑳藉疄鐜版�荤粨
+
+## 馃搵 鍔熻兘姒傝堪
+
+瀹炵幇浜嗘柊绯荤粺鐨勬�ユ晳杞繍浠诲姟鑷姩鍚屾鍒版棫ASP绯荤粺(`admin_save_19.gds`)鐨勫畬鏁村姛鑳斤紝鍖呮嫭:
+- 鉁� 浠诲姟鍒涘缓鍚庤嚜鍔ㄥ紓姝ュ悓姝ュ埌鏃х郴缁�
+- 鉁� 瀹氭椂浠诲姟鎵归噺鍚屾鏈悓姝ユ垚鍔熺殑浠诲姟
+- 鉁� 瀹屾暣鐨勫悓姝ョ姸鎬佽窡韪拰閿欒璁板綍
+- 鉁� 鎵嬪姩閲嶈瘯澶辫触浠诲姟鐨勮兘鍔�
+
+---
+
+## 馃梻锔� 鏂囦欢娓呭崟
+
+### 1. 鏁版嵁搴撶浉鍏� (1涓枃浠�)
+
+#### `sql/add_legacy_system_id.sql`
+- 鍦� `sys_task_emergency` 琛ㄦ坊鍔犳棫绯荤粺ID瀛楁
+- 娣诲姞鍚屾鐘舵�併�佸悓姝ユ椂闂淬�侀敊璇俊鎭瓧娈�
+- 鍦� `sys_task` 琛ㄦ坊鍔犲悓姝ユ爣璁板瓧娈�
+
+### 2. 閰嶇疆绫� (1涓枃浠�)
+
+#### `ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.java`
+- 鏃х郴缁熼厤缃被
+- 鏀寔浠� `application.yml` 璇诲彇閰嶇疆
+- 鍖呭惈: baseUrl, enabled, timeout绛夐厤缃」
+
+### 3. 鏈嶅姟灞� (2涓枃浠�)
+
+#### `ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.java`
+- 鏃х郴缁熷悓姝ユ湇鍔℃帴鍙�
+- 瀹氫箟涓変釜鏍稿績鏂规硶:
+  - `syncEmergencyTaskToLegacy()` - 鍚屾鍗曚釜浠诲姟
+  - `batchSyncPendingTasks()` - 鎵归噺鍚屾
+  - `retrySyncTask()` - 閲嶈瘯澶辫触浠诲姟
+
+#### `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java`
+- 鏃х郴缁熷悓姝ユ湇鍔″疄鐜扮被 (392琛�)
+- 鏍稿績鍔熻兘:
+  - HTTP POST璇锋眰灏佽
+  - 鍙傛暟鏄犲皠鍜岃浆鎹�
+  - 鍝嶅簲瑙f瀽 (OK:ServiceOrdID鏍煎紡)
+  - 鍚屾鐘舵�佺鐞�
+  - 寮傚父澶勭悊鍜岄噸璇曟満鍒�
+
+### 4. 瀹氭椂浠诲姟 (1涓枃浠�)
+
+#### `ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacySystemSyncTask.java`
+- 瀹氭椂浠诲姟绫�
+- 鎻愪緵涓や釜鏂规硶:
+  - `syncPendingTasks()` - 鎵归噺鍚屾寰呭鐞嗕换鍔�
+  - `syncTask(taskId)` - 鍚屾鎸囧畾浠诲姟
+
+### 5. 瀹炰綋绫讳慨鏀� (2涓枃浠�)
+
+#### `ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java`
+娣诲姞瀛楁:
+- `legacyServiceOrdId` - 鏃х郴缁烻erviceOrdID
+- `syncStatus` - 鍚屾鐘舵��
+- `syncTime` - 鍚屾鏃堕棿
+- `syncErrorMsg` - 鍚屾閿欒淇℃伅
+
+#### `ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTask.java`
+娣诲姞瀛楁:
+- `legacySynced` - 鏃х郴缁熷悓姝ユ爣璁�
+
+### 6. Mapper淇敼 (3涓枃浠�)
+
+#### `ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskEmergencyMapper.java`
+娣诲姞鏂规硶:
+- `selectPendingSyncTasks()` - 鏌ヨ寰呭悓姝ヤ换鍔″垪琛�
+
+#### `ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml`
+- 娣诲姞鏂板瓧娈垫槧灏�
+- 瀹炵幇 `selectPendingSyncTasks` 鏌ヨ
+
+#### `ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml`
+- 娣诲姞 `legacy_synced` 瀛楁鏄犲皠
+
+### 7. 涓氬姟閫昏緫淇敼 (1涓枃浠�)
+
+#### `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java`
+- 娉ㄥ叆 `ILegacySystemSyncService`
+- 鍦ㄤ换鍔″垱寤哄悗寮傛璋冪敤鍚屾鏈嶅姟
+
+### 8. 閰嶇疆鏂囦欢 (1涓枃浠�)
+
+#### `ruoyi-admin/src/main/resources/application-legacy.yml`
+- 閰嶇疆绀轰緥鏂囦欢
+- 鍖呭惈鎵�鏈夊彲閰嶇疆椤瑰拰璇存槑
+
+### 9. 鏂囨。 (3涓枃浠�)
+
+#### `prd/鏃х郴缁熷悓姝ラ厤缃鏄�.md`
+- 璇︾粏鐨勯厤缃拰浣跨敤鏂囨。 (332琛�)
+- 鍖呭惈: 鍔熻兘璇存槑銆侀厤缃楠ゃ�佺洃鎺ф煡璇€�佹晠闅滄帓鏌�
+
+#### `prd/鏃х郴缁熷悓姝�-蹇�熷紑濮�.md`
+- 蹇�熼厤缃寚鍗� (212琛�)
+- 5鍒嗛挓蹇�熶笂鎵�
+
+#### `prd/鏃х郴缁熷悓姝ュ姛鑳藉疄鐜版�荤粨.md`
+- 鏈枃妗o紝鎬荤粨鎵�鏈夊疄鐜板唴瀹�
+
+#### `prd/鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md`
+- 瀹屾暣鐨勫弬鏁版槧灏勮鏄� (277琛�)
+- 鍖呭惈66涓弬鏁扮殑璇︾粏鏄犲皠鍏崇郴
+- adminID鍙傛暟浣跨敤璇存槑
+
+---
+
+## 馃彈锔� 鏋舵瀯璁捐
+
+### 鍚屾娴佺▼鍥�
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�  鍒涘缓鎬ユ晳浠诲姟    鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+         鈹�
+         鈻�
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�  淇濆瓨鍒版暟鎹簱    鈹�
+鈹�  (sync_status=0) 鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+         鈹�
+         鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+         鈹�                        鈹�
+         鈻�                        鈻�
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�      鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�   鑷姩寮傛鍚屾   鈹�      鈹�   瀹氭椂浠诲姟    鈹�
+鈹�   (2绉掑欢杩�)     鈹�      鈹�  (姣�10鍒嗛挓)   鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�      鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+         鈹�                      鈹�
+         鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+                    鈻�
+         鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+         鈹�  璋冪敤鏃х郴缁烝PI       鈹�
+         鈹�  POST admin_save_19  鈹�
+         鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+                    鈹�
+         鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹粹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+         鈻�                     鈻�
+    鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�          鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+    鈹�  鎴愬姛   鈹�          鈹�  澶辫触   鈹�
+    鈹� (鐘舵��2) 鈹�          鈹� (鐘舵��3) 鈹�
+    鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�          鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�
+         鈹�                    鈹�
+         鈻�                    鈻�
+    鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�          鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+    鈹備繚瀛業D   鈹�          鈹傝褰曢敊璇� 鈹�
+    鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�          鈹傜瓑寰呴噸璇� 鈹�
+                         鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+### 鏁版嵁娴佽浆
+
+```
+SysTask (浠诲姟涓昏〃)
+    鈫� (task_id)
+SysTaskEmergency (鎬ユ晳鎵╁睍琛�)
+    鈹溾攢 legacy_service_ord_id (鏃х郴缁烮D)
+    鈹溾攢 sync_status (0/1/2/3)
+    鈹溾攢 sync_time
+    鈹斺攢 sync_error_msg
+    鈫�
+LegacySystemSyncService
+    鈫� (HTTP POST)
+鏃х郴缁� admin_save_19.gds
+    鈫� (杩斿洖: OK:ServiceOrdID)
+鏇存柊 legacy_service_ord_id
+```
+
+---
+
+## 馃攽 鏍稿績鎶�鏈偣
+
+### 1. HTTP閫氫俊
+
+```java
+// 浣跨敤 HttpURLConnection 鍙戦�丳OST璇锋眰
+// 鏀寔鑷畾涔夎秴鏃躲�佺紪鐮併�佽〃鍗曟彁浜�
+conn.setRequestMethod("POST");
+conn.setConnectTimeout(30000);
+conn.setReadTimeout(30000);
+conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
+```
+
+### 2. 寮傛澶勭悊
+
+```java
+// 鍒涘缓浠诲姟鍚庡紓姝ュ悓姝ワ紝閬垮厤闃诲涓绘祦绋�
+new Thread(() -> {
+    Thread.sleep(2000); // 绛夊緟浜嬪姟鎻愪氦
+    legacySystemSyncService.syncEmergencyTaskToLegacy(taskId);
+}).start();
+```
+
+### 3. 鐘舵�佹満绠$悊
+
+```
+0 (鏈悓姝�) 鈫� 1 (鍚屾涓�) 鈫� 2 (鎴愬姛) / 3 (澶辫触)
+                              鈫�
+                         绛夊緟瀹氭椂浠诲姟閲嶈瘯
+```
+
+### 4. 鏁版嵁鏄犲皠
+
+- **adminID**: 浣跨敤浠诲姟鍒涘缓浜篒D (`task.getCreatorId()`)
+- 鏂扮郴缁熷瓧娈� 鈫� 鏃х郴缁熷瓧娈佃嚜鍔ㄦ槧灏� (鍏�66涓弬鏁�)
+- 鎬у埆杞崲: 0鈫掔敺, 1鈫掑コ
+- 鍥哄畾鍊兼敞鍏�: ServiceOrdClass=JJ, ServiceOrdSource=10
+- 璇︾粏鍙傛暟鏄犲皠璇锋煡鐪�: [鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md](./鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md)
+
+### 5. 瀹归敊鏈哄埗
+
+- 鍚屾澶辫触涓嶅奖鍝嶄富涓氬姟
+- 璁板綍璇︾粏閿欒淇℃伅
+- 鏀寔鑷姩閲嶈瘯
+- 闃叉閲嶅鍚屾
+
+---
+
+## 馃搳 鏁版嵁搴撳彉鏇�
+
+### sys_task_emergency 琛�
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 |
+|--------|------|------|
+| legacy_service_ord_id | BIGINT | 鏃х郴缁烻erviceOrdID |
+| sync_status | TINYINT | 0-鏈悓姝�, 1-鍚屾涓�, 2-鎴愬姛, 3-澶辫触 |
+| sync_time | DATETIME | 鍚屾鏃堕棿 |
+| sync_error_msg | VARCHAR(500) | 閿欒淇℃伅 |
+
+### sys_task 琛�
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 |
+|--------|------|------|
+| legacy_synced | TINYINT | 0-鏈悓姝�, 1-宸插悓姝� |
+
+### 绱㈠紩
+
+```sql
+-- 鍔犻�熷悓姝ョ姸鎬佹煡璇�
+ALTER TABLE sys_task_emergency ADD INDEX idx_sync_status (sync_status);
+
+-- 鍔犻�熸棫绯荤粺ID鏌ヨ
+ALTER TABLE sys_task_emergency ADD INDEX idx_legacy_service_ord_id (legacy_service_ord_id);
+
+-- 鍔犻�熶富琛ㄥ悓姝ユ爣璁版煡璇�
+ALTER TABLE sys_task ADD INDEX idx_legacy_synced (legacy_synced);
+```
+
+---
+
+## 鈿欙笍 閰嶇疆椤硅鏄�
+
+| 閰嶇疆椤� | 蹇呭~ | 榛樿鍊� | 璇存槑 |
+|--------|------|--------|------|
+| `legacy.system.base-url` | 鉁� | 鏃� | 鏃х郴缁熷熀纭�URL |
+| `legacy.system.emergency-create-path` | 鉂� | /admin_save_19.gds | 鎺ュ彛璺緞 |
+| `legacy.system.connect-timeout` | 鉂� | 30000 | 杩炴帴瓒呮椂(姣) |
+| `legacy.system.read-timeout` | 鉂� | 30000 | 璇诲彇瓒呮椂(姣) |
+| `legacy.system.enabled` | 鉂� | true | 鏄惁鍚敤 |
+| `legacy.system.charset` | 鉂� | UTF-8 | 瀛楃缂栫爜 |
+
+---
+
+## 馃И 娴嬭瘯寤鸿
+
+### 鍗曞厓娴嬭瘯
+
+```java
+@Test
+public void testSyncEmergencyTask() {
+    Long taskId = 123L;
+    Long serviceOrdId = legacySystemSyncService.syncEmergencyTaskToLegacy(taskId);
+    assertNotNull(serviceOrdId);
+    assertTrue(serviceOrdId > 0);
+}
+```
+
+### 闆嗘垚娴嬭瘯
+
+1. 鍒涘缓娴嬭瘯浠诲姟
+2. 绛夊緟2-3绉�
+3. 鏌ヨ鍚屾鐘舵��
+4. 楠岃瘉鏃х郴缁熸槸鍚︽敹鍒版暟鎹�
+
+### 鍘嬪姏娴嬭瘯
+
+- 鎵归噺鍒涘缓100涓换鍔�
+- 瑙傚療鍚屾鎴愬姛鐜�
+- 鐩戞帶绯荤粺璧勬簮鍗犵敤
+
+---
+
+## 馃搱 鐩戞帶鎸囨爣
+
+### 鍏抽敭鎸囨爣
+
+1. **鍚屾鎴愬姛鐜�**: 鎴愬姛鏁� / 鎬绘暟 * 100%
+2. **骞冲潎鍚屾鑰楁椂**: 浠庡垱寤哄埌鍚屾鎴愬姛鐨勬椂闂�
+3. **鍚屾澶辫触鐜�**: 澶辫触鏁� / 鎬绘暟 * 100%
+4. **寰呭悓姝ヤ换鍔″爢绉暟**: sync_status=0鐨勪换鍔℃暟
+
+### SQL鐩戞帶
+
+```sql
+-- 浠婃棩鍚屾缁熻
+SELECT 
+    COUNT(*) AS 鎬绘暟,
+    SUM(CASE WHEN sync_status = 2 THEN 1 ELSE 0 END) AS 鎴愬姛鏁�,
+    SUM(CASE WHEN sync_status = 3 THEN 1 ELSE 0 END) AS 澶辫触鏁�,
+    CONCAT(ROUND(SUM(CASE WHEN sync_status = 2 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2), '%') AS 鎴愬姛鐜�
+FROM sys_task_emergency
+WHERE DATE(create_time) = CURDATE();
+```
+
+---
+
+## 馃敀 瀹夊叏鑰冭檻
+
+### 宸插疄鐜�
+
+- 鉁� 闃叉SQL娉ㄥ叆 (浣跨敤MyBatis鍙傛暟鍖栨煡璇�)
+- 鉁� 闃叉閲嶅鍚屾 (妫�鏌egacy_service_ord_id)
+- 鉁� 寮傚父闅旂 (鍚屾澶辫触涓嶅奖鍝嶄富涓氬姟)
+- 鉁� 閰嶇疆寮�鍏� (鍙殢鏃剁鐢�)
+
+### 寰呭姞寮�
+
+- 鈿狅笍 HTTPS閫氫俊 (寤鸿鐢熶骇鐜浣跨敤)
+- 鈿狅笍 鏁版嵁鍔犲瘑 (鎮h�呮晱鎰熶俊鎭�)
+- 鈿狅笍 璁块棶浠ょ墝 (濡傛棫绯荤粺鏀寔)
+- 鈿狅笍 IP鐧藉悕鍗� (闄愬埗璁块棶鏉ユ簮)
+
+---
+
+## 馃殌 鎬ц兘浼樺寲
+
+### 褰撳墠璁捐
+
+- 寮傛鍚屾: 涓嶉樆濉炰富娴佺▼
+- 鎵归噺闄愬埗: 姣忔鏈�澶�100涓�
+- 璇锋眰闂撮殧: 姣忎釜浠诲姟闂撮殧1绉�
+- 瓒呮椂鎺у埗: 30绉掕秴鏃�
+
+### 鍙紭鍖栫偣
+
+1. **杩炴帴姹�**: 澶嶇敤HTTP杩炴帴
+2. **鎵归噺鎺ュ彛**: 濡傛棫绯荤粺鏀寔鎵归噺鍒涘缓
+3. **娑堟伅闃熷垪**: 浣跨敤RabbitMQ/Kafka寮傛澶勭悊
+4. **缂撳瓨鏈哄埗**: 缂撳瓨鍖婚櫌銆佺瀹ょ瓑瀛楀吀鏁版嵁
+
+---
+
+## 馃摑 閮ㄧ讲娓呭崟
+
+### 寮�鍙戠幆澧�
+
+- [x] 鎵ц鏁版嵁搴撹剼鏈�
+- [x] 閰嶇疆 `application-dev.yml`
+- [x] 閲嶅惎搴旂敤
+- [x] 鍒涘缓瀹氭椂浠诲姟
+- [x] 娴嬭瘯鍚屾鍔熻兘
+
+### 鐢熶骇鐜
+
+- [ ] 澶囦唤鏁版嵁搴�
+- [ ] 鎵ц鏁版嵁搴撹剼鏈�
+- [ ] 閰嶇疆 `application-prod.yml`
+- [ ] 閲嶅惎搴旂敤 (閫夋嫨浣庡嘲鏈�)
+- [ ] 鍒涘缓瀹氭椂浠诲姟
+- [ ] 鐩戞帶鍚屾鐘舵��
+- [ ] 鍑嗗鍥炴粴鏂规
+
+---
+
+## 馃幆 鍚庣画浼樺寲寤鸿
+
+1. **绠$悊鐣岄潰**
+   - 鍦ㄥ悗鍙版坊鍔犲悓姝ョ姸鎬佹煡鐪嬮〉闈�
+   - 鎻愪緵鎵嬪姩閲嶈瘯鎸夐挳
+   - 灞曠ず鍚屾缁熻鍥捐〃
+
+2. **鍛婅閫氱煡**
+   - 鍚屾澶辫触瓒呰繃闃堝�兼椂鍙戦�侀偖浠�/鐭俊
+   - 鎺ュ叆浼佷笟寰俊/閽夐拤鏈哄櫒浜�
+
+3. **鍙屽悜鍚屾**
+   - 鏃х郴缁熺姸鎬佸彉鏇村悓姝ュ洖鏂扮郴缁�
+   - 瀹炵幇鏁版嵁涓�鑷存�ф牎楠�
+
+4. **鍘嗗彶鏁版嵁鍚屾**
+   - 鎻愪緵鎵归噺鍚屾鍘嗗彶浠诲姟鐨勫伐鍏�
+   - 鏀寔鎸囧畾鏃ユ湡鑼冨洿鍚屾
+
+---
+
+## 馃懆鈥嶐煉� 寮�鍙戣�呭娉�
+
+### 鍏抽敭绫昏鏄�
+
+1. **LegacySystemConfig**: 閰嶇疆绠$悊锛孲pring鑷姩娉ㄥ叆
+2. **LegacySystemSyncServiceImpl**: 鏍稿績鍚屾閫昏緫锛孒TTP閫氫俊
+3. **LegacySystemSyncTask**: 瀹氭椂浠诲姟鍏ュ彛锛屼緵Quartz璋冪敤
+4. **SysTaskServiceImpl**: 浠诲姟鍒涘缓鍚庤Е鍙戝紓姝ュ悓姝�
+
+### 鏃ュ織绾у埆
+
+- INFO: 鍚屾鎴愬姛銆佹壒閲忓悓姝ュ畬鎴�
+- WARN: 閰嶇疆鏈惎鐢ㄣ�佷换鍔″凡鍚屾
+- ERROR: 鍚屾澶辫触銆佺綉缁滃紓甯�
+
+### 寮傚父澶勭悊
+
+- 鎵�鏈夊紓甯镐笉鍚戜笂鎶涘嚭
+- 璁板綍鍒� sync_error_msg
+- 鏇存柊 sync_status = 3
+- 绛夊緟瀹氭椂浠诲姟閲嶈瘯
+
+---
+
+## 馃摓 鑱旂郴淇℃伅
+
+- **椤圭洰浣嶇疆**: `d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master`
+- **鏂囨。浣嶇疆**: `prd/` 鐩綍
+- **鎶�鏈爤**: Spring Boot + MyBatis + Quartz + HttpURLConnection
+
+---
+
+**瀹屾垚鏃堕棿**: 2025-01-20  
+**鐗堟湰**: v1.0  
+**鐘舵��**: 鉁� 宸插畬鎴愶紝寰呮祴璇�
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\345\217\202\346\225\260\346\230\240\345\260\204\350\241\250.md" "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\345\217\202\346\225\260\346\230\240\345\260\204\350\241\250.md"
new file mode 100644
index 0000000..1759ce9
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\345\217\202\346\225\260\346\230\240\345\260\204\350\241\250.md"
@@ -0,0 +1,302 @@
+# 鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃
+
+## 鍙傛暟浼犻�掕鏄�
+
+璋冪敤鏃х郴缁烝SP鎺ュ彛 `admin_save_19.gds` 鏃讹紝闇�瑕佷紶閫掍互涓嬫墍鏈夊弬鏁般��
+
+---
+
+## 鏍稿績鍙傛暟
+
+| 鍙傛暟鍚� | 鏂扮郴缁熸潵婧� | 璇存槑 | 绀轰緥鍊� |
+|--------|-----------|------|--------|
+| **adminID** | `creator.oaUserId` | 鍒涘缓浠诲姟鐨勭敤鎴峰搴旂殑OA绯荤粺鐢ㄦ埛ID | `1001` |
+
+> **閲嶈**: `adminID` 閫氳繃浠诲姟鍒涘缓浜篒D (`creator_id`) 鏌ヨ鐢ㄦ埛琛� (`sys_user`)锛岃幏鍙栬鐢ㄦ埛鐨� `oa_user_id` 瀛楁鍊�
+
+> **閫昏緫**:
+> 1. 浠庝换鍔′富琛ㄨ幏鍙� `creator_id`
+> 2. 鏍规嵁 `creator_id` 鏌ヨ `sys_user` 琛�
+> 3. 鑾峰彇璇ョ敤鎴风殑 `oa_user_id` 瀛楁
+> 4. 灏� `oa_user_id` 浣滀负 `adminID` 浼犻�掔粰鏃х郴缁�
+
+---
+
+## 瀹屾暣鍙傛暟鏄犲皠琛�
+
+### 1. 鍗曟嵁鍩虹淇℃伅
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鍥哄畾鍊�/鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|----------------|------|
+| ServiceOrdClass | - | 鍥哄畾鍊� `"JJ"` (鎬ユ晳) | 鉁� |
+| ServiceOrdAreaType | `dept.serviceOrderClass` | **浠诲姟鎵�灞炲垎鍏徃鐨勬湇鍔″崟缂栫爜**<br/>榛樿鍊�: `"1"` | 鉁� |
+| ServiceOrdType | - | 鍥哄畾鍊� `"1"` | 鉁� |
+| ServiceOrdState | - | 鍥哄畾鍊� `"2"` (姝e紡鍗�) | 鉁� |
+| ServiceOrdStartDate | `task.createTime` | 鏍煎紡: yyyy-MM-dd | 鉁� |
+| ServiceOrdApptDate | `task.plannedStartTime` | 鏍煎紡: yyyy-MM-dd HH:mm:ss | 鉂� |
+
+### 2. 鑱旂郴浜轰俊鎭�
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| ServiceOrdCoName | `emergency.patientContact` | 鎮h�呰仈绯讳汉濮撳悕 | 鉁� |
+| ServiceOrdCoPhone | `emergency.patientPhone` | 鑱旂郴浜虹數璇� | 鉁� |
+| ServiceOrdCoTies | - | 绌哄瓧绗︿覆 (鑱旂郴浜轰笌鎮h�呭叧绯�) | 鉂� |
+
+### 3. 鎮h�呬俊鎭�
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| ServiceOrdPtName | `emergency.patientName` | 鎮h�呭鍚� | 鉁� |
+| ServiceOrdPtAge | - | 绌哄瓧绗︿覆 (骞撮緞) | 鉂� |
+| ServiceOrdPtKG | - | 绌哄瓧绗︿覆 (浣撻噸) | 鉂� |
+| ServiceOrdPtSex | `emergency.patientGender` | 0鈫�"鐢�", 1鈫�"濂�" | 鉂� |
+| ServiceOrdPtNat | - | 绌哄瓧绗︿覆 (鍥界睄) | 鉂� |
+| ServiceOrdPtIDCard | `emergency.patientIdCard` | 鎮h�呰韩浠借瘉 | 鉂� |
+
+### 4. 杞嚭鍖婚櫌淇℃伅
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| ServiceOrdPtOutHosp | `emergency.hospitalOutName` | 杞嚭鍖婚櫌鍚嶇О | 鉁� |
+| ServiceOrdPtOutHospID | - | 鍥哄畾鍊� `"0"` (鏂板尰闄㈣嚜鍔ㄥ垱寤�) | 鉂� |
+| ServiceOrdPtServices | `emergency.hospitalOutDepartment` | 杞嚭绉戝 | 鉁� |
+| ServiceOrdPtServicesID | - | 鍥哄畾鍊� `"0"` | 鉂� |
+
+### 5. 杞叆鍖婚櫌淇℃伅
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| ServiceOrdPtInHosp | `emergency.hospitalInName` | 杞叆鍖婚櫌鍚嶇О | 鉁� |
+| ServiceOrdPtInHospID | - | 鍥哄畾鍊� `"0"` (鏂板尰闄㈣嚜鍔ㄥ垱寤�) | 鉂� |
+| ServiceOrdPtInServices | `emergency.hospitalInDepartment` | 杞叆绉戝 | 鉁� |
+| ServiceOrdPtInServicesID | - | 鍥哄畾鍊� `"0"` | 鉂� |
+
+### 6. 鐥呮儏淇℃伅
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| ServiceOrdPtDiagnosis | - | 绌哄瓧绗︿覆 (璇婃柇) | 鉂� |
+| ServiceOrdPtCondition | `emergency.patientCondition` | 鐥呮儏鎻忚堪 | 鉂� |
+| ServiceOrdTaskRemarks | `task.taskDescription` | 鍖绘姢鍙稿娉� | 鉂� |
+| ServiceOrdPtDoctor | - | 绌哄瓧绗︿覆 (鎮h�呭尰鐢�) | 鉂� |
+| ServiceOrdPtDoctorPhone | - | 绌哄瓧绗︿覆 (鍖荤敓鐢佃瘽) | 鉂� |
+
+### 7. 鍦板潃鍜屽潗鏍囦俊鎭�
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| province | - | 绌哄瓧绗︿覆 (鍑哄彂鍦扮渷浠�) | 鉂� |
+| city | - | 绌哄瓧绗︿覆 (鍑哄彂鍦板煄甯�) | 鉂� |
+| ServiceOrdTraStreet | `task.departureAddress` 鎴� `emergency.hospitalOutAddress` | 鍑哄彂鍦板湴鍧� | 鉁� |
+| ServiceOrdTraStreetCoo | - | 绌哄瓧绗︿覆 (鍑哄彂鍦板潗鏍�) | 鉂� |
+| ServiceOrdTraEnd | `task.destinationAddress` 鎴� `emergency.hospitalInAddress` | 鐩殑鍦板湴鍧� | 鉁� |
+| ServiceOrdTraEndCoo | - | 绌哄瓧绗︿覆 (鐩殑鍦板潗鏍�) | 鉂� |
+| ServiceOrdTraVia | - | 绌哄瓧绗︿覆 (閫旂粡鍦�) | 鉂� |
+
+### 8. 璺濈鍜屼环鏍间俊鎭�
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| ServiceOrdViaDistance | - | 鍥哄畾鍊� `"0"` (涓�旇窛绂�) | 鉂� |
+| ServiceOrdTraDistance | `emergency.transferDistance` | 杞繍璺濈(鍏噷) | 鉁� |
+| ServiceOrdTraDuration | - | 绌哄瓧绗︿覆 (棰勮琛岀▼鏃堕棿) | 鉂� |
+| ServiceOrdTraUnitPrice | - | 鍥哄畾鍊� `"0"` (鍗曚环/鍏噷) | 鉂� |
+| ServiceOrdTraOfferPrice | `emergency.transferPrice` | 鏍囧噯鎶ヤ环 | 鉂� |
+| ServiceOrdTraTxnPrice | `emergency.transferPrice` | 鎴愪氦浠� | 鉁� |
+| ServiceOrdTraPrePayment | - | 鍥哄畾鍊� `"0"` (闇�棰勪粯娆�) | 鉂� |
+| SettlementPrice | - | 鍥哄畾鍊� `"0"` (缁撶畻浠�) | 鉂� |
+| ServiceOrdTraPriceReason | - | 绌哄瓧绗︿覆 (宸环鍘熷洜) | 鉂� |
+
+### 9. 鐢佃瘽璁板綍淇℃伅
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| Phone | `emergency.patientPhone` | 鏉ョ數鐢佃瘽 | 鉂� |
+| TEL_Time | 褰撳墠鏃堕棿 | 鏍煎紡: yyyy-MM-dd HH:mm:ss | 鉂� |
+| TEL_Remarks | - | 鍥哄畾鍊� `"鏂扮郴缁熷悓姝�"` | 鉂� |
+
+### 10. 杞繍鏂瑰紡鍜屽鏈嶄俊鎭�
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| TransferModeID | - | 绌哄瓧绗︿覆 (杞繍鏂瑰紡) | 鉂� |
+| ServiceOrdVIP | - | 鍥哄畾鍊� `"0"` (闈濾IP) | 鉂� |
+| ServiceOrd_CC_ID | - | 绌哄瓧绗︿覆 (瀹㈡湇浜哄憳ID) | 鉂� |
+| ServiceOrd_Sale_ID | - | 绌哄瓧绗︿覆 (閿�鍞汉鍛業D) | 鉂� |
+| ServiceOrdIntroducer | - | 绌哄瓧绗︿覆 (浠嬬粛浜�) | 鉂� |
+| ServiceOrd_work_ID | - | 绌哄瓧绗︿覆 (浼佸井瀹㈡湇ID) | 鉂� |
+| ServiceOrd_work_IDs | - | 绌哄瓧绗︿覆 (鍏朵粬浼佸井瀹㈡湇ID) | 鉂� |
+| ServiceOrd_work_is | - | 鍥哄畾鍊� `"0"` (闈炰紒寰垚浜�) | 鉂� |
+| CommissionScenarioID | - | 鍥哄畾鍊� `"0"` (缁╂晥鏂规) | 鉂� |
+
+### 11. 鎿嶄綔鍜屾潵婧愪俊鎭�
+
+| 鏃х郴缁熷弬鏁� | 鏂扮郴缁熷瓧娈� | 鏄犲皠閫昏緫 | 蹇呭~ |
+|-----------|-----------|---------|------|
+| ServiceOrdOperationRemarks | - | 鍥哄畾鍊� `"鏂扮郴缁熷悓姝ュ垱寤�"` | 鉂� |
+| ServiceOrdEstimatedOrderDate | - | 绌哄瓧绗︿覆 (棰勮娲惧崟鏃堕棿) | 鉂� |
+| ServiceOrdSource | - | 鍥哄畾鍊� `"10"` (璁㈠崟鏉ユ簮=鏂扮郴缁�) | 鉁� |
+| OrderLevel | - | 鍥哄畾鍊� `"2"` (鏌ョ湅绛夌骇) | 鉂� |
+| ServiceOrdDepartureType | - | 鍥哄畾鍊� `"1"` (棰勭害绫诲瀷) | 鉂� |
+| ConditionLevel | - | 鍥哄畾鍊� `"0"` (鐥呴噸绾у埆) | 鉂� |
+| DirectionType | - | 鍥哄畾鍊� `"0"` (杞繍鍘诲悜) | 鉂� |
+| ServiceOrd_m | - | 鍥哄畾鍊� `"0"` (鏉ユ簮鍏ュ彛) | 鉂� |
+| FromHQ2_is | - | 鍥哄畾鍊� `"0"` (闈炴�婚儴鎺ㄩ��) | 鉂� |
+| OrderPrice_Auto | - | 鍥哄畾鍊� `"0"` (鑷姩鎶ヤ环鍙傝�冨��) | 鉂� |
+
+---
+
+## 鍙傛暟缁熻
+
+- **鎬诲弬鏁版暟閲�**: 66涓�
+- **蹇呭~鍙傛暟**: 11涓�
+- **鏂扮郴缁熸槧灏�**: 15涓�
+- **鍥哄畾鍊�**: 28涓�
+- **绌哄瓧绗︿覆**: 23涓�
+
+---
+
+## 鍏抽敭鍙傛暟璇存槑
+
+### adminID
+- **鏉ユ簮**: `sys_user.oa_user_id` (閫氳繃 `sys_task.creator_id` 鏌ヨ鑾峰彇)
+- **鏌ヨ閫昏緫**: 
+  1. 浠庝换鍔¤〃鑾峰彇 `creator_id`
+  2. 鏌ヨ `sys_user` 琛�: `SELECT oa_user_id FROM sys_user WHERE user_id = creator_id`
+  3. 鑾峰彇 `oa_user_id` 鐨勫��
+- **鐢ㄩ��**: 鏍囪瘑鍦ㄦ棫绯荤粺涓垱寤鸿璁㈠崟鐨勭鐞嗗憳(浣跨敤OA绯荤粺鐨勭敤鎴稩D)
+- **绫诲瀷**: 鏁板瓧瀛楃涓�
+- **绀轰緥**: `"1001"`
+- **娉ㄦ剰**: 濡傛灉鐢ㄦ埛鏈厤缃甇A_UserID锛屽垯浼犻�掔┖瀛楃涓�
+
+### ServiceOrdAreaType
+- **鏉ユ簮**: `sys_dept.service_order_class` (閫氳繃 `sys_task.dept_id` 鏌ヨ鑾峰彇)
+- **鏌ヨ閫昏緫**: 
+  1. 浠庝换鍔¤〃鑾峰彇 `dept_id` (褰掑睘閮ㄩ棬ID)
+  2. 鏌ヨ `sys_dept` 琛�: `SELECT service_order_class FROM sys_dept WHERE dept_id = dept_id`
+  3. 鑾峰彇 `service_order_class` 鐨勫��
+- **鐢ㄩ��**: 鏍囪瘑鏈嶅姟鍗曟墽琛屽尯鍩�(鍒嗗叕鍙哥殑鏈嶅姟鍗曠紪鐮�)
+- **榛樿鍊�**: `"1"` (褰撲换鍔℃湭鍏宠仈閮ㄩ棬鎴栭儴闂ㄦ湭閰嶇疆缂栫爜鏃�)
+- **绫诲瀷**: 瀛楃涓�
+- **绀轰緥**: `"JA"` (涓北), `"GZ"` (骞垮窞), `"ZJ"` (婀涙睙)
+- **娉ㄦ剰**: 
+  - 纭繚鍒涘缓浠诲姟鏃惰缃簡姝g‘鐨勫綊灞為儴闂�
+  - 纭繚鍒嗗叕鍙搁厤缃簡鏈嶅姟鍗曠紪鐮�(鍙�氳繃閮ㄩ棬鍚屾鑷姩鑾峰彇)
+
+### ServiceOrdSource = "10"
+- **鍚箟**: 鏍囪瘑璁㈠崟鏉ユ簮涓烘柊绯荤粺
+- **鐢ㄩ��**: 鍦ㄦ棫绯荤粺涓尯鍒嗚鍗曟潵婧�
+
+### ServiceOrdState = "2"
+- **鍚箟**: 姝e紡鍗�
+- **璇存槑**: 鏂扮郴缁熷悓姝ョ殑璁㈠崟鐩存帴鍒涘缓涓烘寮忓崟锛岃烦杩囧挩璇㈠崟闃舵
+
+---
+
+## 鎬у埆鏄犲皠瑙勫垯
+
+```javascript
+鏂扮郴缁� emergency.patientGender 鈫� 鏃х郴缁� ServiceOrdPtSex
+"0"  鈫� "鐢�"
+"1"  鈫� "濂�"
+鍏朵粬 鈫� ""
+```
+
+---
+
+## 鏃ユ湡鏃堕棿鏍煎紡
+
+| 瀛楁 | 鏍煎紡 | 绀轰緥 |
+|------|------|------|
+| ServiceOrdStartDate | yyyy-MM-dd | 2025-01-20 |
+| ServiceOrdApptDate | yyyy-MM-dd HH:mm:ss | 2025-01-20 14:30:00 |
+| TEL_Time | yyyy-MM-dd HH:mm:ss | 2025-01-20 14:30:00 |
+
+---
+
+## 鏁版嵁浼樺厛绾�
+
+褰撳涓瓧娈靛彲鎻愪緵鍚屼竴鏁版嵁鏃讹紝浼樺厛绾у涓嬶細
+
+**鍑哄彂鍦板湴鍧�**:
+1. `task.departureAddress`
+2. `emergency.hospitalOutAddress`
+
+**鐩殑鍦板湴鍧�**:
+1. `task.destinationAddress`
+2. `emergency.hospitalInAddress`
+
+---
+
+## 浠g爜瀹炵幇浣嶇疆
+
+**鏂囦欢**: `LegacySystemSyncServiceImpl.java`  
+**鏂规硶**: `buildSyncParams(SysTask task, SysTaskEmergency emergency)`  
+**琛屽彿**: 绾�210-305琛�
+
+---
+
+## HTTP璇锋眰绀轰緥
+
+### 璇锋眰鏂规硶
+```
+POST http://legacy-system.com/admin_save_19.gds
+Content-Type: application/x-www-form-urlencoded;charset=UTF-8
+```
+
+### 璇锋眰浣撶ず渚� (閮ㄥ垎鍙傛暟)
+```
+adminID=123&
+ServiceOrdClass=JJ&
+ServiceOrdAreaType=1&
+ServiceOrdType=1&
+ServiceOrdState=2&
+ServiceOrdCoName=%E5%BC%A0%E4%B8%89&
+ServiceOrdCoPhone=13800138000&
+ServiceOrdPtName=%E6%9D%8E%E5%9B%9B&
+ServiceOrdPtOutHosp=%E4%BA%BA%E6%B0%91%E5%8C%BB%E9%99%A2&
+ServiceOrdPtInHosp=%E4%B8%AD%E5%BF%83%E5%8C%BB%E9%99%A2&
+ServiceOrdSource=10
+```
+
+### 鎴愬姛鍝嶅簲
+```
+OK:1016003256
+```
+
+### 澶辫触鍝嶅簲绀轰緥
+```
+data not complete
+data error ServiceOrdCoPhone,ServiceOrdPtName,
+repeat submit
+```
+
+---
+
+## 楠岃瘉娓呭崟
+
+鍦ㄥ悓姝ュ墠锛岀‘淇濅互涓嬪繀濉弬鏁版湁鍊硷細
+
+- [ ] adminID (鍒涘缓浜篒D)
+- [ ] ServiceOrdCoName (鑱旂郴浜哄鍚�)
+- [ ] ServiceOrdCoPhone (鑱旂郴浜虹數璇�)
+- [ ] ServiceOrdPtName (鎮h�呭鍚�)
+- [ ] ServiceOrdPtOutHosp (杞嚭鍖婚櫌)
+- [ ] ServiceOrdPtServices (杞嚭绉戝)
+- [ ] ServiceOrdPtInHosp (杞叆鍖婚櫌)
+- [ ] ServiceOrdPtInServices (杞叆绉戝)
+- [ ] ServiceOrdTraStreet (鍑哄彂鍦�)
+- [ ] ServiceOrdTraEnd (鐩殑鍦�)
+- [ ] ServiceOrdTraDistance (璺濈)
+- [ ] ServiceOrdTraTxnPrice (鎴愪氦浠�)
+
+---
+
+## 鏇存柊璁板綍
+
+| 鏃ユ湡 | 鐗堟湰 | 鏇存柊鍐呭 |
+|------|------|----------|
+| 2025-10-19 | v1.2 | 浼樺寲 ServiceOrdAreaType 鍙傛暟锛屼娇鐢ㄤ换鍔℃墍灞炲垎鍏徃鐨勬湇鍔″崟缂栫爜 |
+| 2025-01-20 | v1.1 | 娣诲姞 adminID 鍙傛暟鏄犲皠 |
+| 2025-01-20 | v1.0 | 鍒濆鐗堟湰 |
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\346\233\264\346\226\260\350\257\264\346\230\216-v1.1.md" "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\346\233\264\346\226\260\350\257\264\346\230\216-v1.1.md"
new file mode 100644
index 0000000..d784a03
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\346\233\264\346\226\260\350\257\264\346\230\216-v1.1.md"
@@ -0,0 +1,264 @@
+# 鏃х郴缁熷悓姝ュ姛鑳芥洿鏂拌鏄� v1.2
+
+## 鏇存柊鏃堕棿
+2025-01-20 (v1.2 鏇存柊)
+
+## 鏇存柊鍐呭
+
+### 馃攧 淇 adminID 鍙傛暟閫昏緫
+
+鏍规嵁鏃х郴缁熺殑瀹為檯闇�姹傦紝**adminID** 搴旇浣跨敤鍒涘缓浜哄搴旂殑 **OA_UserID**锛岃�屼笉鏄柊绯荤粺鐨� `creator_id`銆�
+
+---
+
+## 淇璇︽儏
+
+### v1.2 鍙樻洿 (褰撳墠鐗堟湰)
+
+**鏂囦欢**: `LegacySystemSyncServiceImpl.java`  
+**鏂规硶**: `buildSyncParams()`  
+**浣嶇疆**: 绗�223-237琛�
+
+```java
+// 绠$悊鍛業D锛堝垱寤轰汉ID瀵瑰簲鐨凮A_UserID锛�
+String adminID = "";
+if (task.getCreatorId() != null) {
+    try {
+        SysUser creator = sysUserMapper.selectUserById(task.getCreatorId());
+        if (creator != null && creator.getOaUserId() != null) {
+            adminID = creator.getOaUserId().toString();
+            log.info("鑾峰彇鍒涘缓浜篛A_UserID鎴愬姛锛岀敤鎴稩D: {}, OA_UserID: {}", task.getCreatorId(), adminID);
+        } else {
+            log.warn("鍒涘缓浜烘湭閰嶇疆OA_UserID锛岀敤鎴稩D: {}", task.getCreatorId());
+        }
+    } catch (Exception e) {
+        log.error("鏌ヨ鍒涘缓浜篛A_UserID寮傚父锛岀敤鎴稩D: {}", task.getCreatorId(), e);
+    }
+}
+params.put("adminID", adminID);
+```
+
+**鍙傛暟璇存槑**:
+- **鍙傛暟鍚�**: `adminID`
+- **鏁版嵁鏉ユ簮**: `sys_user.oa_user_id` (閫氳繃 `creator_id` 鏌ヨ)
+- **鏌ヨ閫昏緫**: 
+  1. 浠庝换鍔¤〃鑾峰彇 `creator_id`
+  2. 鏌ヨ鐢ㄦ埛琛�: `SELECT * FROM sys_user WHERE user_id = creator_id`
+  3. 鑾峰彇鐢ㄦ埛鐨� `oa_user_id` 瀛楁
+  4. 灏� `oa_user_id` 浣滀负 `adminID` 浼犻��
+- **鏁版嵁绫诲瀷**: 瀛楃涓� (鏁板瓧瀛楃涓�)
+- **鐢ㄩ��**: 鍏宠仈鏃х郴缁烵A绠$悊鍛樿处鍙�
+
+**绀轰緥鍊�**:
+```
+adminID=1001
+```
+
+---
+
+## 瀹屾暣鍙傛暟鍒楄〃
+
+鐜板湪鍚屾鍒版棫绯荤粺鐨勫弬鏁板叡 **66涓�**锛屽寘鎷�:
+
+### 鏍稿績鍙傛暟
+- 鉁� `adminID` - **鏂板** (鍒涘缓浜篒D)
+- `ServiceOrdClass` - 鍗曟嵁绫诲瀷
+- `ServiceOrdCoName` - 鑱旂郴浜哄鍚�
+- `ServiceOrdCoPhone` - 鑱旂郴浜虹數璇�
+- `ServiceOrdPtName` - 鎮h�呭鍚�
+- ... (鍏朵粬62涓弬鏁�)
+
+瀹屾暣鍙傛暟鏄犲皠璇锋煡鐪�: [鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md](./鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md)
+
+---
+
+## 鏁版嵁娴佽浆
+
+```
+鐢ㄦ埛鍒涘缓鎬ユ晳杞繍浠诲姟
+    鈫�
+淇濆瓨鍒� sys_task 琛� (creator_id = 褰撳墠鐧诲綍鐢ㄦ埛ID)
+    鈫�
+寮傛璋冪敤鍚屾鏈嶅姟
+    鈫�
+鏍规嵁 task.creator_id 鏌ヨ sys_user 琛�
+    鈫�
+鑾峰彇 user.oa_user_id 浣滀负 adminID
+    鈫�
+鏋勫缓66涓弬鏁� (鍖呮嫭 adminID)
+    鈫�
+HTTP POST 鍒版棫绯荤粺 admin_save_19.gds
+    鈫�
+鏃х郴缁熻繑鍥�: OK:ServiceOrdID
+    鈫�
+淇濆瓨鍒� sys_task_emergency.legacy_service_ord_id
+```
+
+---
+
+## 閲嶈鍙樻洿
+
+### v1.2 vs v1.1
+
+| 椤圭洰 | v1.1 | v1.2 (褰撳墠) |
+|------|------|---------------|
+| adminID 鏉ユ簮 | `task.creator_id` | `user.oa_user_id` |
+| 鏌ヨ閫昏緫 | 鐩存帴浣跨敤 | 閫氳繃 creator_id 鏌ヨ鐢ㄦ埛琛� |
+| 绌哄�煎鐞� | 杩斿洖绌哄瓧绗︿覆 | 杩斿洖绌哄瓧绗︿覆 + 鏃ュ織璀﹀憡 |
+| 鏃ュ織璁板綍 | 鏃� | 璇︾粏鐨勬垚鍔�/澶辫触鏃ュ織 |
+
+### 涓轰粈涔堣浣跨敤 OA_UserID锛�
+
+1. **鏁版嵁涓�鑷存��**: 鏂扮郴缁熺殑 `user_id` 鍜屾棫绯荤粺鐨勭鐞嗗憳ID涓嶄竴鑷�
+2. **绯荤粺鍏宠仈**: 鏃х郴缁熶腑鐨勭鐞嗗憳ID灏辨槸OA绯荤粺鐨勭敤鎴稩D
+3. **鏁版嵁杩芥函**: 鍙互鍦ㄦ棫绯荤粺涓纭叧鑱斿埌鍒涘缓浜�
+4. **涓氬姟闇�姹�**: 鏃х郴缁熶緷璧朞A_UserID杩涜鏉冮檺鎺у埗鍜屾暟鎹粺璁�
+
+---
+
+## 棰勭疆鏉′欢
+
+### 蹇呴』婊¤冻鐨勬潯浠�
+
+1. **鐢ㄦ埛蹇呴』閰嶇疆 OA_UserID**
+   - 鍦ㄥ悗鍙扮敤鎴风鐞嗕腑锛屼负姣忎釜鐢ㄦ埛閰嶇疆瀵瑰簲鐨� `OA鐢ㄦ埛ID`
+   - 璺緞: `绯荤粺绠$悊` 鈫� `鐢ㄦ埛绠$悊` 鈫� `缂栬緫鐢ㄦ埛` 鈫� `OA鐢ㄦ埛ID`
+
+2. **鏁版嵁搴撳瓧娈�**
+   - `sys_user.oa_user_id` 瀛楁蹇呴』瀛樺湪
+   - 璇ュ瓧娈靛凡鍦ㄤ箣鍓嶇殑鐗堟湰涓坊鍔�
+
+3. **鏄犲皠鍏崇郴**
+   - 鏂扮郴缁熺殑 `user_id` 鈫� `oa_user_id` 鈫� 鏃х郴缁熺殑 `adminID`
+
+### 濡傛灉鐢ㄦ埛鏈厤缃� OA_UserID
+
+- 鍚屾鏃朵細璁板綍璀﹀憡鏃ュ織: `鍒涘缓浜烘湭閰嶇疆OA_UserID锛岀敤鎴稩D: xxx`
+- `adminID` 浼犻�掔┖瀛楃涓�
+- 鏃х郴缁熷彲鑳芥嫆缁濆垱寤鸿鍗� (鍙栧喅浜庢棫绯荤粺鐨勯獙璇佽鍒�)
+- **寤鸿**: 鍦ㄤ换鍔″垱寤哄墠纭繚鎵�鏈夌敤鎴峰凡閰嶇疆 OA_UserID
+
+---
+
+## 楠岃瘉鏂规硶
+
+### 1. 鏌ョ湅鏃ュ織杈撳嚭
+
+鍚屾鏃朵細杈撳嚭璇︾粏鏃ュ織锛�
+
+```log
+# 鎴愬姛鎯呭喌
+INFO  LegacySystemSyncServiceImpl - 鑾峰彇鍒涘缓浜篛A_UserID鎴愬姛锛岀敤鎴稩D: 10, OA_UserID: 1001
+
+# 鏈厤缃儏鍐�
+WARN  LegacySystemSyncServiceImpl - 鍒涘缓浜烘湭閰嶇疆OA_UserID锛岀敤鎴稩D: 10
+
+# 寮傚父鎯呭喌
+ERROR LegacySystemSyncServiceImpl - 鏌ヨ鍒涘缓浜篛A_UserID寮傚父锛岀敤鎴稩D: 10
+```
+
+### 2. 鏁版嵁搴撻獙璇�
+
+```sql
+-- 鏌ョ湅浠诲姟鍒涘缓浜虹殑 OA_UserID
+SELECT 
+    t.task_id,
+    t.task_code,
+    t.creator_id,
+    u.user_name,
+    u.oa_user_id AS adminID,
+    e.legacy_service_ord_id,
+    e.sync_status
+FROM sys_task t
+LEFT JOIN sys_user u ON t.creator_id = u.user_id
+LEFT JOIN sys_task_emergency e ON t.task_id = e.task_id
+WHERE t.task_type = 'EMERGENCY_TRANSFER'
+ORDER BY t.create_time DESC
+LIMIT 10;
+```
+
+### 3. 鏃х郴缁熼獙璇�
+
+鍦ㄦ棫绯荤粺鐨凷erviceOrder琛ㄤ腑鏌ヨ:
+```sql
+SELECT TOP 10
+    ServiceOrdID,
+    ServiceOrd_CC_ID,  -- 搴旇绛変簬鏂扮郴缁熺敤鎴风殑 oa_user_id
+    ServiceOrdCoName,
+    ServiceOrdPtName,
+    ServiceOrd_CC_Time
+FROM ServiceOrder
+WHERE ServiceOrdSource = 10  -- 鏂扮郴缁熸潵婧�
+ORDER BY ServiceOrd_CC_Time DESC
+```
+
+---
+
+## 鍏煎鎬ц鏄�
+
+### 鍚戝悗鍏煎
+鉁� 瀹屽叏鍏煎锛屾棫鐗堟湰鍚屾鐨勪换鍔′笉鍙楀奖鍝�
+
+### 鏂颁换鍔¤姹�
+- 鎵�鏈夋柊鍒涘缓鐨勪换鍔″繀椤绘湁 `creator_id`
+- `creator_id` 浼氳嚜鍔ㄥ~鍏呬负褰撳墠鐧诲綍鐢ㄦ埛ID
+
+---
+
+## 娉ㄦ剰浜嬮」
+
+1. **adminID 涓哄繀浼犲弬鏁�**
+   - 铏界劧浠g爜涓仛浜嗙┖鍊煎鐞嗭紝浣嗘棫绯荤粺鍙兘瑕佹眰璇ュ瓧娈典笉涓虹┖
+   - 纭繚浠诲姟鍒涘缓鏃� `creator_id` 宸叉纭缃�
+
+2. **鐢ㄦ埛ID鏄犲皠**
+   - 鏂扮郴缁熺殑鐢ㄦ埛ID鍙兘涓庢棫绯荤粺鐨勭鐞嗗憳ID涓嶄竴鑷�
+   - 濡傞渶鏄犲皠锛屽彲鍦ㄥ悗缁増鏈腑娣诲姞鏄犲皠琛�
+
+3. **鏃ュ織璁板綍**
+   - 寤鸿鍦ㄥ悓姝ユ椂璁板綍 adminID 鐨勫�硷紝渚夸簬鎺掓煡闂
+
+---
+
+## 鐩稿叧鏂囨。
+
+- [鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md](./鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md) - **鏂板**锛屽寘鍚墍鏈�66涓弬鏁扮殑璇︾粏璇存槑
+- [鏃х郴缁熷悓姝ラ厤缃鏄�.md](./鏃х郴缁熷悓姝ラ厤缃鏄�.md) - 瀹屾暣閰嶇疆鏂囨。
+- [鏃х郴缁熷悓姝�-蹇�熷紑濮�.md](./鏃х郴缁熷悓姝�-蹇�熷紑濮�.md) - 蹇�熼厤缃寚鍗�
+- [鏃х郴缁熷悓姝ュ姛鑳藉疄鐜版�荤粨.md](./鏃х郴缁熷悓姝ュ姛鑳藉疄鐜版�荤粨.md) - 瀹炵幇鎬荤粨
+
+---
+
+## 鐗堟湰鍘嗗彶
+
+| 鐗堟湰 | 鏃ユ湡 | 璇存槑 |
+|------|------|------|
+| v1.2 | 2025-01-20 | 淇 adminID 涓轰娇鐢� OA_UserID锛屽鍔犳棩蹇楄褰� |
+| v1.1 | 2025-01-20 | 鏂板 adminID 鍙傛暟锛屽垱寤哄弬鏁版槧灏勮〃 |
+| v1.0 | 2025-01-20 | 鍒濆鐗堟湰锛屽疄鐜板熀纭�鍚屾鍔熻兘 |
+
+---
+
+## 寮�鍙戣�呭娉�
+
+### 浠g爜浣嶇疆
+- **鏂囦欢**: `d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\service\impl\LegacySystemSyncServiceImpl.java`
+- **琛屽彿**: 223-237 (adminID 鍙傛暟鑾峰彇閫昏緫)
+
+### 鐩稿叧瀛楁
+- 鏂扮郴缁熶换鍔¤〃: `sys_task.creator_id`
+- 鏂扮郴缁熺敤鎴疯〃: `sys_user.oa_user_id`
+- 鏃х郴缁熻姹傚弬鏁�: `adminID`
+- 鏃х郴缁熸暟鎹簱: `ServiceOrder.ServiceOrd_CC_ID`
+
+### 娴嬭瘯寤鸿
+1. **纭繚鐢ㄦ埛閰嶇疆OA_UserID**: 鍦ㄥ悗鍙扮敤鎴风鐞嗕腑涓烘祴璇曠敤鎴烽厤缃� `OA鐢ㄦ埛ID`
+2. **鍒涘缓娴嬭瘯浠诲姟**: 鏌ョ湅鏃ュ織涓殑 OA_UserID 鑾峰彇鎯呭喌
+3. **楠岃瘉鏃х郴缁�**: 鍦ㄦ棫绯荤粺涓煡璇㈣鍗曪紝楠岃瘉 ServiceOrd_CC_ID 鏄惁涓� OA_UserID
+4. **娴嬭瘯杈圭晫鎯呭喌**: 鍒涘缓浠诲姟鏃剁敤鎴锋湭閰嶇疆OA_UserID锛屾煡鐪嬭鍛婃棩蹇�
+
+---
+
+**瀹屾垚鏃堕棿**: 2025-01-20  
+**褰撳墠鐗堟湰**: v1.2  
+**鐘舵��**: 鉁� 宸插畬鎴愶紝寰呮祴璇�
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\351\205\215\347\275\256\350\257\264\346\230\216.md" "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\351\205\215\347\275\256\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..553b531
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\351\205\215\347\275\256\350\257\264\346\230\216.md"
@@ -0,0 +1,331 @@
+# 鏃х郴缁熷悓姝ュ姛鑳介厤缃鏄�
+
+## 涓�銆佸姛鑳芥杩�
+
+鏈姛鑳藉疄鐜颁簡鏂扮郴缁熺殑鎬ユ晳杞繍浠诲姟鑷姩鍚屾鍒版棫ASP绯荤粺鐨勮兘鍔涖�備富瑕佸寘鎷�:
+
+1. **鑷姩鍚屾**: 鍒涘缓鎬ユ晳杞繍浠诲姟鍚庯紝鑷姩寮傛璋冪敤鏃х郴缁熸帴鍙�
+2. **瀹氭椂鍚屾**: 閫氳繃瀹氭椂浠诲姟鎵归噺鍚屾鏈悓姝ユ垚鍔熺殑浠诲姟
+3. **鎵嬪姩閲嶈瘯**: 鏀寔鎵嬪姩閲嶆柊鍚屾澶辫触鐨勪换鍔�
+4. **鐘舵�佽窡韪�**: 璁板綍姣忎釜浠诲姟鐨勫悓姝ョ姸鎬佸拰閿欒淇℃伅
+
+## 浜屻�佹暟鎹簱閰嶇疆
+
+### 1. 鎵цSQL鑴氭湰
+
+```bash
+mysql -u root -p ruoyi < sql/add_legacy_system_id.sql
+```
+
+璇ヨ剼鏈細鍦� `sys_task_emergency` 琛ㄤ腑娣诲姞浠ヤ笅瀛楁:
+- `legacy_service_ord_id`: 鏃х郴缁烻erviceOrdID
+- `sync_status`: 鍚屾鐘舵�� (0-鏈悓姝�, 1-鍚屾涓�, 2-鍚屾鎴愬姛, 3-鍚屾澶辫触)
+- `sync_time`: 鍚屾鏃堕棿
+- `sync_error_msg`: 鍚屾閿欒淇℃伅
+
+鍦� `sys_task` 琛ㄤ腑娣诲姞:
+- `legacy_synced`: 鏃х郴缁熷悓姝ユ爣璁� (0-鏈悓姝�, 1-宸插悓姝�)
+
+## 涓夈�佸簲鐢ㄩ厤缃�
+
+### 1. 鍦� `application.yml` 涓坊鍔犻厤缃�
+
+```yaml
+# 鏃х郴缁熼厤缃�
+legacy:
+  system:
+    # 鏃х郴缁熷熀纭�URL (蹇呴』閰嶇疆)
+    base-url: http://old-system.example.com
+    
+    # 鎬ユ晳杞繍鍒涘缓鎺ュ彛璺緞 (榛樿鍊硷紝鍙笉閰嶇疆)
+    emergency-create-path: /admin_save_19.gds
+    
+    # 杩炴帴瓒呮椂鏃堕棿(姣) (榛樿30绉�)
+    connect-timeout: 30000
+    
+    # 璇诲彇瓒呮椂鏃堕棿(姣) (榛樿30绉�)
+    read-timeout: 30000
+    
+    # 鏄惁鍚敤鍚屾 (true=鍚敤, false=绂佺敤)
+    enabled: true
+    
+    # 瀛楃缂栫爜 (榛樿UTF-8)
+    charset: UTF-8
+```
+
+### 2. 閰嶇疆绀轰緥
+
+**寮�鍙戠幆澧�** (`application-dev.yml`):
+```yaml
+legacy:
+  system:
+    base-url: http://192.168.1.100:8080
+    enabled: true
+```
+
+**鐢熶骇鐜** (`application-prod.yml`):
+```yaml
+legacy:
+  system:
+    base-url: http://legacy.yourdomain.com
+    enabled: true
+```
+
+**娴嬭瘯鐜** (绂佺敤鍚屾):
+```yaml
+legacy:
+  system:
+    enabled: false
+```
+
+## 鍥涖�佸畾鏃朵换鍔¢厤缃�
+
+### 1. 鐧诲綍鍚庡彴绠$悊绯荤粺
+
+璁块棶: `绯荤粺绠$悊` -> `瀹氭椂浠诲姟` -> `鏂板`
+
+### 2. 娣诲姞瀹氭椂浠诲姟
+
+濉啓浠ヤ笅淇℃伅:
+
+| 瀛楁 | 鍊� |
+|-----|-----|
+| 浠诲姟鍚嶇О | 鏃х郴缁熶换鍔″悓姝� |
+| 浠诲姟缁勫悕 | DEFAULT |
+| 璋冪敤鐩爣瀛楃涓� | `legacySystemSyncTask.syncPendingTasks()` |
+| cron琛ㄨ揪寮� | `0 0/10 * * * ?` (姣�10鍒嗛挓鎵ц涓�娆�) |
+| 鎵ц绛栫暐 | 绔嬪嵆鎵ц |
+| 鏄惁骞跺彂 | 鍚� |
+| 鐘舵�� | 姝e父 |
+
+### 3. cron琛ㄨ揪寮忓弬鑰�
+
+| 璇存槑 | cron琛ㄨ揪寮� |
+|------|-----------|
+| 姣�5鍒嗛挓 | `0 0/5 * * * ?` |
+| 姣�10鍒嗛挓 | `0 0/10 * * * ?` |
+| 姣�30鍒嗛挓 | `0 0/30 * * * ?` |
+| 姣忓皬鏃� | `0 0 * * * ?` |
+| 姣忓ぉ鍑屾櫒2鐐� | `0 0 2 * * ?` |
+
+## 浜斻�佸悓姝ユ満鍒惰鏄�
+
+### 1. 鑷姩鍚屾娴佺▼
+
+```
+鍒涘缓鎬ユ晳杞繍浠诲姟
+    鈫�
+淇濆瓨鍒版暟鎹簱
+    鈫�
+寮傛璋冪敤鏃х郴缁熸帴鍙� (2绉掑欢杩�)
+    鈫�
+鏇存柊sync_status鐘舵��
+    鈫�
+淇濆瓨杩斿洖鐨凷erviceOrdID
+```
+
+### 2. 瀹氭椂鍚屾娴佺▼
+
+```
+瀹氭椂浠诲姟瑙﹀彂
+    鈫�
+鏌ヨ鏈悓姝�/鍚屾澶辫触鐨勪换鍔� (sync_status = 0 or 3)
+    鈫�
+閫愪釜璋冪敤鏃х郴缁熸帴鍙� (闂撮殧1绉�)
+    鈫�
+鏇存柊鍚屾鐘舵��
+    鈫�
+璁板綍鏃ュ織
+```
+
+### 3. 鍚屾鐘舵�佽鏄�
+
+| sync_status | 璇存槑 | 澶勭悊鏂瑰紡 |
+|------------|------|---------|
+| 0 | 鏈悓姝� | 绛夊緟鑷姩鍚屾鎴栧畾鏃朵换鍔″鐞� |
+| 1 | 鍚屾涓� | 姝e湪璋冪敤鏃х郴缁熸帴鍙� |
+| 2 | 鍚屾鎴愬姛 | 宸茶幏寰桽erviceOrdID锛屼笉鍐嶉噸澶嶅悓姝� |
+| 3 | 鍚屾澶辫触 | 璁板綍閿欒淇℃伅锛岀瓑寰呭畾鏃朵换鍔¢噸璇� |
+
+## 鍏�佹暟鎹槧灏勫叧绯�
+
+### 鏂扮郴缁� -> 鏃х郴缁熷瓧娈垫槧灏�
+
+| 鏂扮郴缁熷瓧娈� | 鏃х郴缁熷瓧娈� | 璇存槑 |
+|----------|-----------|------|
+| taskId | - | 鏂扮郴缁熶换鍔D |
+| patientName | ServiceOrdPtName | 鎮h�呭鍚� |
+| patientContact | ServiceOrdCoName | 鑱旂郴浜哄鍚� |
+| patientPhone | ServiceOrdCoPhone | 鑱旂郴浜虹數璇� |
+| patientGender | ServiceOrdPtSex | 鎮h�呮�у埆 (0=鐢�, 1=濂�) |
+| patientIdCard | ServiceOrdPtIDCard | 鎮h�呰韩浠借瘉 |
+| patientCondition | ServiceOrdPtCondition | 鐥呮儏鎻忚堪 |
+| hospitalOutName | ServiceOrdPtOutHosp | 杞嚭鍖婚櫌 |
+| hospitalOutDepartment | ServiceOrdPtServices | 杞嚭绉戝 |
+| hospitalOutAddress | ServiceOrdTraStreet | 鍑哄彂鍦板潃 |
+| hospitalInName | ServiceOrdPtInHosp | 杞叆鍖婚櫌 |
+| hospitalInDepartment | ServiceOrdPtInServices | 杞叆绉戝 |
+| hospitalInAddress | ServiceOrdTraEnd | 鐩殑鍦板潃 |
+| transferDistance | ServiceOrdTraDistance | 杞繍璺濈 |
+| transferPrice | ServiceOrdTraTxnPrice | 鎴愪氦浠� |
+| taskDescription | ServiceOrdTaskRemarks | 浠诲姟澶囨敞 |
+| plannedStartTime | ServiceOrdApptDate | 棰勭害鏃堕棿 |
+
+### 鍥哄畾鍊兼槧灏�
+
+| 鏃х郴缁熷瓧娈� | 鍥哄畾鍊� | 璇存槑 |
+|----------|--------|------|
+| ServiceOrdClass | JJ | 鎬ユ晳绫诲瀷 |
+| ServiceOrdState | 2 | 姝e紡鍗� |
+| ServiceOrdSource | 10 | 璁㈠崟鏉ユ簮(鏂扮郴缁�) |
+| ServiceOrdAreaType | 1 | 鏈嶅姟鍖哄煙 |
+| ServiceOrdType | 1 | 鏈嶅姟绫诲瀷 |
+| OrderLevel | 2 | 鏌ョ湅绛夌骇 |
+
+## 涓冦�佺洃鎺т笌鏃ュ織
+
+### 1. 鏌ョ湅鍚屾鐘舵��
+
+```sql
+-- 鏌ョ湅鎵�鏈変换鍔$殑鍚屾鐘舵��
+SELECT 
+    t.task_id,
+    t.task_code,
+    e.sync_status,
+    e.legacy_service_ord_id,
+    e.sync_time,
+    e.sync_error_msg
+FROM sys_task t
+LEFT JOIN sys_task_emergency e ON t.task_id = e.task_id
+WHERE t.task_type = 'EMERGENCY_TRANSFER'
+ORDER BY t.create_time DESC;
+
+-- 缁熻鍚屾鐘舵��
+SELECT 
+    sync_status,
+    CASE sync_status
+        WHEN 0 THEN '鏈悓姝�'
+        WHEN 1 THEN '鍚屾涓�'
+        WHEN 2 THEN '鍚屾鎴愬姛'
+        WHEN 3 THEN '鍚屾澶辫触'
+    END AS status_name,
+    COUNT(*) AS count
+FROM sys_task_emergency
+GROUP BY sync_status;
+
+-- 鏌ョ湅鍚屾澶辫触鐨勪换鍔�
+SELECT 
+    t.task_id,
+    t.task_code,
+    e.sync_error_msg,
+    e.sync_time
+FROM sys_task t
+JOIN sys_task_emergency e ON t.task_id = e.task_id
+WHERE e.sync_status = 3
+ORDER BY e.sync_time DESC;
+```
+
+### 2. 鏃ュ織鏂囦欢浣嶇疆
+
+- 搴旂敤鏃ュ織: `logs/sys-info.log`
+- 閿欒鏃ュ織: `logs/sys-error.log`
+
+鍏抽敭鏃ュ織鏍囪瘑:
+```
+[LegacySystemSyncServiceImpl] 浠诲姟鍚屾鎴愬姛
+[LegacySystemSyncServiceImpl] 浠诲姟鍚屾澶辫触
+[LegacySystemSyncTask] 鏃х郴缁熶换鍔″悓姝ュ畬鎴�
+```
+
+## 鍏�佹晠闅滄帓鏌�
+
+### 1. 浠诲姟涓�鐩存湭鍚屾 (sync_status = 0)
+
+**鍙兘鍘熷洜**:
+- 鑷姩鍚屾绾跨▼寮傚父
+- 瀹氭椂浠诲姟鏈惎鍔�
+- 閰嶇疆鐨� `enabled` 涓� false
+
+**瑙e喅鏂规**:
+1. 妫�鏌ラ厤缃�: `legacy.system.enabled = true`
+2. 妫�鏌ュ畾鏃朵换鍔$姸鎬佹槸鍚︿负"姝e父"
+3. 鎵嬪姩瑙﹀彂瀹氭椂浠诲姟: 鍦ㄥ畾鏃朵换鍔″垪琛ㄤ腑鐐瑰嚮"鎵ц涓�娆�"
+4. 鏌ョ湅搴旂敤鏃ュ織鏄惁鏈夊紓甯�
+
+### 2. 鍚屾澶辫触 (sync_status = 3)
+
+**鍙兘鍘熷洜**:
+- 鏃х郴缁烾RL閰嶇疆閿欒
+- 缃戠粶涓嶉��
+- 鏃х郴缁熸帴鍙e紓甯�
+- 鏁版嵁楠岃瘉澶辫触
+
+**瑙e喅鏂规**:
+1. 鏌ョ湅 `sync_error_msg` 瀛楁鐨勯敊璇俊鎭�
+2. 妫�鏌ユ棫绯荤粺URL鏄惁姝g‘: `legacy.system.base-url`
+3. 娴嬭瘯缃戠粶杩炴帴: `curl http://鏃х郴缁熷湴鍧�/admin_save_19.gds`
+4. 鏌ョ湅鏃х郴缁熸棩蹇�
+5. 鎵嬪姩閲嶆柊鍚屾: 灏� `sync_status` 鏀逛负 0锛岀瓑寰呭畾鏃朵换鍔¢噸璇�
+
+### 3. 閲嶅鍚屾
+
+**闃叉鏈哄埗**:
+- 宸插悓姝ユ垚鍔熺殑浠诲姟 (sync_status = 2) 涓嶄細鍐嶆鍚屾
+- 鏈� `legacy_service_ord_id` 鐨勪换鍔′細璺宠繃
+
+**鎵嬪姩閲嶆柊鍚屾鏂规硶**:
+```sql
+-- 閲嶇疆鍚屾鐘舵�侊紙璋ㄦ厧鎿嶄綔锛�
+UPDATE sys_task_emergency 
+SET sync_status = 0, 
+    legacy_service_ord_id = NULL,
+    sync_error_msg = NULL
+WHERE task_id = <浠诲姟ID>;
+```
+
+## 涔濄�佹�ц兘浼樺寲寤鸿
+
+### 1. 鎵归噺鍚屾闄愬埗
+
+- 姣忔瀹氭椂浠诲姟鏈�澶氬悓姝�100涓换鍔�
+- 姣忎釜浠诲姟闂撮殧1绉掞紝閬垮厤杩囦簬棰戠箒璇锋眰
+- 寤鸿瀹氭椂浠诲姟闂撮殧: 10-30鍒嗛挓
+
+### 2. 瓒呮椂閰嶇疆
+
+鏍规嵁缃戠粶鎯呭喌璋冩暣瓒呮椂鏃堕棿:
+- 灞�鍩熺綉: 10-15绉�
+- 浜掕仈缃�: 30-60绉�
+
+### 3. 鐩戞帶鍛婅
+
+寤鸿閰嶇疆浠ヤ笅鐩戞帶:
+- 鍚屾澶辫触鐜囪秴杩�20%鏃跺憡璀�
+- 杩炵画3娆″悓姝ュ叏閮ㄥけ璐ユ椂鍛婅
+- 鏈悓姝ヤ换鍔$疮绉秴杩�50涓椂鍛婅
+
+## 鍗併�佸畨鍏ㄦ敞鎰忎簨椤�
+
+1. **缃戠粶瀹夊叏**:
+   - 浣跨敤HTTPS鍗忚 (濡傛棫绯荤粺鏀寔)
+   - 閰嶇疆IP鐧藉悕鍗�
+   - 浣跨敤VPN鎴栦笓绾胯繛鎺�
+
+2. **鏁版嵁瀹夊叏**:
+   - 鎮h�呬俊鎭姞瀵嗕紶杈�
+   - 鏁忔劅瀛楁鑴辨晱澶勭悊
+   - 瀹氭湡娓呯悊鍘嗗彶鍚屾鏃ュ織
+
+3. **鏉冮檺鎺у埗**:
+   - 闄愬埗鏃х郴缁烝PI璁块棶鏉冮檺
+   - 瀹氭湡鏇存崲璁よ瘉鍑瘉 (濡傛湁)
+
+## 鍗佷竴銆佽仈绯讳笌鏀寔
+
+濡傞亣鍒伴棶棰橈紝璇锋彁渚涗互涓嬩俊鎭�:
+1. 浠诲姟ID
+2. sync_error_msg 鍐呭
+3. 鐩稿叧鏃ュ織鎴浘
+4. 鏃х郴缁熻繑鍥炲唴瀹�
+
+鎶�鏈敮鎸�: 绯荤粺绠$悊鍛�
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\350\260\203\345\272\246\345\215\225\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\350\260\203\345\272\246\345\215\225\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..c66c559
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\350\260\203\345\272\246\345\215\225\345\220\214\346\255\245\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,345 @@
+# 鏃х郴缁熻皟搴﹀崟鍚屾鍔熻兘璇存槑
+
+## 涓�銆佸姛鑳芥杩�
+
+鍦ㄦ�ユ晳杞繍浠诲姟鎴愬姛鍚屾鍒版棫绯荤粺锛堝垱寤篠erviceOrder锛夊悗锛屽啀灏嗕换鍔″悓姝ヤ负璋冨害鍗曪紙DispatchOrder锛夛紝灏嗚繑鍥炵殑DispatchOrdID淇濆瓨鍒癭sys_task_emergency`琛ㄤ腑銆�
+
+### 鍚屾娴佺▼
+
+```
+鍒涘缓鎬ユ晳杞繍浠诲姟
+    鈫�
+鍚屾鍒版棫绯荤粺锛坅dmin_save_19.gds锛�
+    鈫�
+鑾峰緱ServiceOrdID锛屼繚瀛樺埌legacy_service_ord_id
+    鈫�
+鍚屾璋冨害鍗曪紙admin_save_24.asp锛�
+    鈫�
+鑾峰緱DispatchOrdID锛屼繚瀛樺埌legacy_dispatch_ord_id
+```
+
+## 浜屻�佹暟鎹簱鍙樻洿
+
+### 鏂板瀛楁
+
+鍦╜sys_task_emergency`琛ㄤ腑娣诲姞浠ヤ笅瀛楁锛�
+
+```sql
+-- 鏃х郴缁熻皟搴﹀崟ID
+ALTER TABLE sys_task_emergency 
+ADD COLUMN legacy_dispatch_ord_id BIGINT NULL COMMENT '鏃х郴缁熻皟搴﹀崟ID(DispatchOrdID)';
+
+-- 璋冨害鍗曞悓姝ョ姸鎬�
+ALTER TABLE sys_task_emergency 
+ADD COLUMN dispatch_sync_status TINYINT DEFAULT 0 COMMENT '璋冨害鍗曞悓姝ョ姸鎬侊細0-鏈悓姝ワ紝1-鍚屾涓紝2-鍚屾鎴愬姛锛�3-鍚屾澶辫触';
+
+-- 璋冨害鍗曞悓姝ユ椂闂�
+ALTER TABLE sys_task_emergency 
+ADD COLUMN dispatch_sync_time DATETIME NULL COMMENT '璋冨害鍗曞悓姝ユ椂闂�';
+
+-- 璋冨害鍗曞悓姝ラ敊璇俊鎭�
+ALTER TABLE sys_task_emergency 
+ADD COLUMN dispatch_sync_error_msg VARCHAR(500) NULL COMMENT '璋冨害鍗曞悓姝ラ敊璇俊鎭�';
+```
+
+## 涓夈�佹帴鍙e弬鏁版槧灏�
+
+### admin_save_24.asp 鎺ュ彛鍙傛暟
+
+鏍规嵁ASP浠g爜鍒嗘瀽锛屼富瑕佸弬鏁板寘鎷細
+
+| ASP鍙傛暟 | 璇存槑 | 鏁版嵁鏉ユ簮 |
+|---------|------|---------|
+| DispatchOrdClass | 璋冨害鍗曠被鍨� | sys_dept.dispatch_order_class |
+| ServiceOrdID | 鏈嶅姟鍗旾D | sys_task_emergency.legacy_service_ord_id |
+| DispatchOrdTraSDTime | 鎷熷嚭鍙戞椂闂� | sys_task.planned_start_time |
+| DispatchOrdCarID | 娲鹃仯杞﹁締ID | sys_task_vehicle 鈫� tb_vehicle_info.car_id |
+| DispatchOrdCoName | 璋冨害鑱旂郴浜哄鍚� | sys_task_emergency.patient_contact |
+| DispatchOrdCoPhone | 璋冨害鑱旂郴浜虹數璇� | sys_task_emergency.patient_phone |
+| DispatchOrdTraStreet | 瀹為檯鍑哄彂鍦� | sys_task.departure_address |
+| DispatchOrdTraEnd | 瀹為檯鐩殑鍦� | sys_task.destination_address |
+| DispatchOrd_Check | 鎿嶄綔鍛戒护 | 鍥哄畾鍊�"3"锛堢洿鎺ュ己鍒跺畬鎴愶級 |
+| DispatchOrdPerfomance | 璁㈠崟缁╂晥 | sys_task_emergency.transfer_price |
+| DispatchOrd_NS_ID | 璋冨害浜哄憳ID | sys_user.oa_user_id |
+| DispatchOrd_NS_Time | 寮�鍗曟椂闂� | sys_task.create_time |
+
+## 鍥涖�佹妧鏈疄鐜�
+
+### 4.1 鏍稿績绫昏鏄�
+
+#### 1. SysTaskEmergency瀹炰綋绫�
+**鏂板瀛楁**锛�
+- `legacyDispatchOrdId` - 鏃х郴缁熻皟搴﹀崟ID
+- `dispatchSyncStatus` - 璋冨害鍗曞悓姝ョ姸鎬�
+- `dispatchSyncTime` - 璋冨害鍗曞悓姝ユ椂闂�
+- `dispatchSyncErrorMsg` - 璋冨害鍗曞悓姝ラ敊璇俊鎭�
+
+#### 2. ILegacySystemSyncService鎺ュ彛
+**鏂板鏂规硶**锛�
+```java
+/**
+ * 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛�
+ */
+Long syncDispatchOrderToLegacy(Long taskId);
+
+/**
+ * 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
+ */
+int batchSyncPendingDispatchOrders();
+```
+
+#### 3. LegacySystemSyncServiceImpl瀹炵幇绫�
+**鏍稿績鏂规硶**锛�
+- `syncDispatchOrderToLegacy()` - 鍚屾鍗曚釜璋冨害鍗�
+- `buildDispatchOrderParams()` - 鏋勫缓璋冨害鍗曞弬鏁�
+- `batchSyncPendingDispatchOrders()` - 鎵归噺鍚屾
+
+**鍚屾閫昏緫**锛�
+1. 妫�鏌ユ湇鍔″崟鏄惁宸插悓姝ワ紙蹇呴』鍏堟湁ServiceOrdID锛�
+2. 妫�鏌ヨ皟搴﹀崟鏄惁宸插悓姝ワ紙閬垮厤閲嶅锛�
+3. 鏋勫缓璇锋眰鍙傛暟
+4. 鍙戦�丠TTP POST璇锋眰
+5. 瑙f瀽鍝嶅簲锛堟牸寮忥細`OK:DispatchOrdID`锛�
+6. 淇濆瓨DispatchOrdID鍒版暟鎹簱
+
+#### 4. LegacySystemConfig閰嶇疆绫�
+**鏂板閰嶇疆**锛�
+```java
+private String dispatchCreatePath = "/oldCode/admin_save_24.asp";
+
+public String getDispatchCreateUrl() {
+    return baseUrl + dispatchCreatePath;
+}
+```
+
+#### 5. LegacySystemSyncTask瀹氭椂浠诲姟
+**鏂板鏂规硶**锛�
+```java
+public void syncPendingDispatchOrders() {
+    // 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
+}
+```
+
+### 4.2 鍚屾鐘舵�佺鐞�
+
+**dispatch_sync_status鐘舵�佸��**锛�
+- `0` - 鏈悓姝�
+- `1` - 鍚屾涓�
+- `2` - 鍚屾鎴愬姛
+- `3` - 鍚屾澶辫触
+
+**鏌ヨ鏉′欢**锛�
+```sql
+-- 鏌ヨ寰呭悓姝ヨ皟搴﹀崟鐨勪换鍔�
+SELECT * FROM sys_task_emergency
+WHERE sync_status = 2  -- 鏈嶅姟鍗曞凡鍚屾
+  AND legacy_service_ord_id IS NOT NULL
+  AND (dispatch_sync_status = 0 OR dispatch_sync_status = 3)
+LIMIT 100;
+```
+
+## 浜斻�佷娇鐢ㄨ鏄�
+
+### 5.1 鑷姩鍚屾
+
+**閰嶇疆瀹氭椂浠诲姟**锛�
+1. 杩涘叆銆岀郴缁熺洃鎺с�嶁啋銆屽畾鏃朵换鍔°��
+2. 娣诲姞鏂颁换鍔★細
+   - 浠诲姟鍚嶇О锛氭棫绯荤粺璋冨害鍗曞悓姝�
+   - 浠诲姟缁勫悕锛欴EFAULT
+   - 璋冪敤鐩爣锛歚legacySystemSyncTask.syncPendingDispatchOrders()`
+   - cron琛ㄨ揪寮忥細`0 0/10 * * * ?`锛堟瘡10鍒嗛挓鎵ц锛�
+
+### 5.2 鎵嬪姩鍚屾
+
+**閫氳繃Service璋冪敤**锛�
+```java
+@Autowired
+private ILegacySystemSyncService legacySystemSyncService;
+
+// 鍚屾鍗曚釜璋冨害鍗�
+Long dispatchOrdId = legacySystemSyncService.syncDispatchOrderToLegacy(taskId);
+
+// 鎵归噺鍚屾
+int successCount = legacySystemSyncService.batchSyncPendingDispatchOrders();
+```
+
+### 5.3 鏌ョ湅鍚屾缁撴灉
+
+```sql
+-- 鏌ヨ璋冨害鍗曞悓姝ョ粨鏋�
+SELECT 
+    task_id,
+    legacy_service_ord_id,
+    legacy_dispatch_ord_id,
+    dispatch_sync_status,
+    dispatch_sync_time,
+    dispatch_sync_error_msg
+FROM sys_task_emergency
+WHERE dispatch_sync_status IS NOT NULL
+ORDER BY id DESC;
+
+-- 缁熻鍚屾鎯呭喌
+SELECT 
+    dispatch_sync_status,
+    COUNT(*) as count
+FROM sys_task_emergency
+WHERE legacy_service_ord_id IS NOT NULL
+GROUP BY dispatch_sync_status;
+```
+
+## 鍏�佸畬鏁村悓姝ユ祦绋�
+
+### 6.1 鍒涘缓浠诲姟鍚庣殑鑷姩鍚屾
+
+```java
+// 1. 鍒涘缓鎬ユ晳杞繍浠诲姟
+SysTask task = createEmergencyTask(...);
+
+// 2. 鍚屾鏈嶅姟鍗曞埌鏃х郴缁�
+Long serviceOrdId = legacySystemSyncService.syncEmergencyTaskToLegacy(task.getTaskId());
+
+// 3. 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙闇�瑕佸湪鏈嶅姟鍗曞悓姝ユ垚鍔熷悗锛�
+if (serviceOrdId != null && serviceOrdId > 0) {
+    Long dispatchOrdId = legacySystemSyncService.syncDispatchOrderToLegacy(task.getTaskId());
+}
+```
+
+### 6.2 瀹氭椂浠诲姟鑷姩閲嶈瘯
+
+**瀹氭椂浠诲姟1锛氬悓姝ユ湇鍔″崟**
+- 璋冪敤锛歚legacySystemSyncTask.syncPendingTasks()`
+- 棰戠巼锛氭瘡10鍒嗛挓
+- 澶勭悊锛氭湭鍚屾鎴栧悓姝ュけ璐ョ殑鏈嶅姟鍗�
+
+**瀹氭椂浠诲姟2锛氬悓姝ヨ皟搴﹀崟**
+- 璋冪敤锛歚legacySystemSyncTask.syncPendingDispatchOrders()`
+- 棰戠巼锛氭瘡10鍒嗛挓
+- 澶勭悊锛氬凡鍚屾鏈嶅姟鍗曚絾鏈悓姝ヨ皟搴﹀崟鐨勪换鍔�
+
+## 涓冦�侀敊璇鐞�
+
+### 7.1 甯歌閿欒
+
+**閿欒1锛氭湇鍔″崟鏈悓姝�**
+```
+閿欒淇℃伅锛氭湇鍔″崟鏈悓姝ワ紝鏃犳硶鍚屾璋冨害鍗�
+瑙e喅鏂规锛氬厛纭繚鏈嶅姟鍗曞悓姝ユ垚鍔�
+```
+
+**閿欒2锛氶噸澶嶅悓姝�**
+```
+澶勭悊閫昏緫锛氳嚜鍔ㄨ烦杩囧凡鍚屾鐨勮皟搴﹀崟
+鏃ュ織锛氳皟搴﹀崟宸插悓姝ヨ繃锛屼换鍔D: xxx, DispatchOrdID: xxx
+```
+
+**閿欒3锛欰SP鎺ュ彛杩斿洖閿欒**
+```
+閿欒淇℃伅锛氭棫绯荤粺杩斿洖鏃犳晥鐨凞ispatchOrdID: {response}
+瑙e喅鏂规锛氭鏌SP鎺ュ彛鏃ュ織锛屾煡鐪嬪叿浣撻敊璇師鍥�
+```
+
+### 7.2 閿欒鏃ュ織鏌ョ湅
+
+```bash
+# 鏌ョ湅鍚屾鏃ュ織
+tail -f logs/sys-info.log | grep "璋冨害鍗曞悓姝�"
+
+# 鏌ョ湅閿欒鏃ュ織
+tail -f logs/sys-error.log | grep "syncDispatchOrderToLegacy"
+```
+
+## 鍏�佹敞鎰忎簨椤�
+
+### 8.1 鍚屾椤哄簭
+
+鈿狅笍 **蹇呴』鍏堝悓姝ユ湇鍔″崟锛屽啀鍚屾璋冨害鍗�**
+
+鍘熷洜锛氳皟搴﹀崟闇�瑕佸叧鑱擲erviceOrdID鍙傛暟
+
+### 8.2 鏁版嵁渚濊禆
+
+**蹇呴渶瀛楁**锛�
+- `legacy_service_ord_id` - 蹇呴』瀛樺湪涓斿ぇ浜�0
+- `patient_contact` - 鑱旂郴浜哄鍚嶏紙DispatchOrd_Check鈮�3鏃跺繀濉級
+- `patient_phone` - 鑱旂郴浜虹數璇濓紙DispatchOrd_Check鈮�3鏃跺繀濉級
+
+**鍙�夊瓧娈�**锛�
+- `planned_start_time` - 鎷熷嚭鍙戞椂闂�
+- `transfer_price` - 璁㈠崟缁╂晥
+
+### 8.3 鎬ц兘浼樺寲
+
+1. **鎵归噺鍚屾闄愬埗**锛氭瘡娆℃渶澶氬悓姝�100鏉¤褰�
+2. **璇锋眰闂撮殧**锛氭瘡涓姹傞棿闅�1绉掞紝閬垮厤杩囦簬棰戠箒
+3. **瓒呮椂璁剧疆**锛氳繛鎺ヨ秴鏃�30绉掞紝璇诲彇瓒呮椂30绉�
+
+## 涔濄�佹祴璇曢獙璇�
+
+### 9.1 娴嬭瘯姝ラ
+
+**姝ラ1锛氬垱寤烘祴璇曚换鍔�**
+```sql
+-- 纭繚浠诲姟宸插悓姝ユ湇鍔″崟
+SELECT task_id, legacy_service_ord_id, sync_status
+FROM sys_task_emergency
+WHERE sync_status = 2
+LIMIT 1;
+```
+
+**姝ラ2锛氭墜鍔ㄨЕ鍙戝悓姝�**
+```java
+Long dispatchOrdId = legacySystemSyncService.syncDispatchOrderToLegacy(taskId);
+```
+
+**姝ラ3锛氶獙璇佺粨鏋�**
+```sql
+SELECT 
+    task_id,
+    legacy_service_ord_id,
+    legacy_dispatch_ord_id,
+    dispatch_sync_status,
+    dispatch_sync_error_msg
+FROM sys_task_emergency
+WHERE task_id = {taskId};
+```
+
+### 9.2 棰勬湡缁撴灉
+
+| 瀛楁 | 棰勬湡鍊� |
+|------|--------|
+| legacy_dispatch_ord_id | > 0 |
+| dispatch_sync_status | 2锛堝悓姝ユ垚鍔燂級 |
+| dispatch_sync_time | 褰撳墠鏃堕棿 |
+| dispatch_sync_error_msg | NULL |
+
+## 鍗併�佺浉鍏虫枃浠舵竻鍗�
+
+### 淇敼鏂囦欢
+1. `SysTaskEmergency.java` - 鏂板瀛楁
+2. `SysTaskEmergencyMapper.java` - 鏂板鏌ヨ鏂规硶
+3. `SysTaskEmergencyMapper.xml` - 鏂板SQL璇彞
+4. `ILegacySystemSyncService.java` - 鏂板鎺ュ彛鏂规硶
+5. `LegacySystemSyncServiceImpl.java` - 瀹炵幇璋冨害鍗曞悓姝ラ�昏緫
+6. `LegacySystemConfig.java` - 鏂板閰嶇疆椤�
+7. `LegacySystemSyncTask.java` - 鏂板瀹氭椂浠诲姟鏂规硶
+
+### SQL鏂囦欢
+8. `add_legacy_dispatch_ord_id.sql` - 鏁版嵁搴撳彉鏇磋剼鏈�
+
+### 鏂囨。
+9. `鏃х郴缁熻皟搴﹀崟鍚屾鍔熻兘璇存槑.md` - 鏈枃妗�
+
+## 鍗佷竴銆佸悗缁紭鍖栧缓璁�
+
+1. **杞﹁締鍏宠仈**锛氫粠`sys_task_vehicle`琛ㄦ煡璇㈣溅杈嗭紝鑾峰彇`car_id`濉厖`DispatchOrdCarID`鍙傛暟
+2. **浜哄憳鍏宠仈**锛氭敮鎸侀殢琛屼汉鍛橈紙EntourageID锛夌殑鍚屾
+3. **閲嶈瘯鏈哄埗**锛氬鍔犳寚鏁伴��閬跨殑閲嶈瘯绛栫暐
+4. **鐩戞帶鍛婅**锛氬悓姝ュけ璐ユ椂鍙戦�侀�氱煡
+5. **鏁版嵁鏍¢獙**锛氬悓姝ュ墠鏍¢獙蹇呭~瀛楁瀹屾暣鎬�
+
+---
+
+**鐗堟湰**锛歷1.0  
+**鏃ユ湡**锛�2025-10-20  
+**浣滆��**锛歈oder AI
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245-\345\277\253\351\200\237\345\274\200\345\247\213.md" "b/prd/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245-\345\277\253\351\200\237\345\274\200\345\247\213.md"
new file mode 100644
index 0000000..3f5cdc7
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245-\345\277\253\351\200\237\345\274\200\345\247\213.md"
@@ -0,0 +1,278 @@
+# 鏃х郴缁熻溅杈嗗悓姝� - 蹇�熷紑濮�
+
+## 涓�銆佸揩閫熼儴缃诧紙5鍒嗛挓锛�
+
+### 1. 鎵ц鏁版嵁搴撹剼鏈�
+
+```sql
+-- 鏂囦欢锛歴ql/legacy_vehicle_sync.sql
+-- 鎵ц浠ヤ笅SQL璇彞
+
+-- 娣诲姞car_id瀛楁
+ALTER TABLE tb_vehicle_info 
+ADD COLUMN car_id INT NULL COMMENT '鏃х郴缁熻溅杈咺D(SQL Server CarID)' AFTER vehicle_id;
+
+ALTER TABLE tb_vehicle_info ADD INDEX idx_car_id (car_id);
+
+-- 娉ㄥ唽瀹氭椂浠诲姟
+INSERT INTO sys_job (
+    job_name, job_group, invoke_target, cron_expression, 
+    misfire_policy, concurrent, status, create_by, create_time, remark
+) VALUES (
+    '鏃х郴缁熻溅杈嗗悓姝�', 'DEFAULT', 'legacyVehicleSyncTask.syncVehicles()', 
+    '0 0 2 * * ?', '3', '1', '0', 'admin', sysdate(),
+    '浠嶴QL Server鐨凜arData琛ㄥ悓姝ヨ溅杈嗘暟鎹埌MySQL'
+);
+```
+
+### 2. 閲嶅惎搴旂敤
+
+```bash
+# Windows
+.\ry.bat
+
+# Linux
+./ry.sh
+```
+
+### 3. 楠岃瘉閮ㄧ讲
+
+**妫�鏌�1锛氳闂畾鏃朵换鍔$鐞�**
+1. 鐧诲綍鍚庡彴锛歨ttp://localhost/login
+2. 杩涘叆銆岀郴缁熺洃鎺с�嶁啋銆屽畾鏃朵换鍔°��
+3. 鎵惧埌銆屾棫绯荤粺杞﹁締鍚屾銆嶄换鍔�
+
+**妫�鏌�2锛氱珛鍗虫墽琛屾祴璇�**
+1. 鐐瑰嚮銆屾棫绯荤粺杞﹁締鍚屾銆嶇殑銆屾墽琛屼竴娆°�嶆寜閽�
+2. 鐐瑰嚮銆屾棩蹇椼�嶆煡鐪嬫墽琛岀粨鏋�
+3. 纭鏃犻敊璇俊鎭�
+
+## 浜屻�佸姛鑳介獙璇�
+
+### 娴嬭瘯1锛氭煡鐪嬪悓姝ョ粨鏋�
+
+```sql
+-- 鏌ヨ宸插悓姝ョ殑杞﹁締
+SELECT 
+    vehicle_id,
+    car_id,
+    vehicle_no,
+    dept_id,
+    platform_code,
+    remark
+FROM tb_vehicle_info
+WHERE platform_code = 'LEGACY'
+ORDER BY create_time DESC
+LIMIT 10;
+```
+
+### 娴嬭瘯2锛氶獙璇侀儴闂ㄥ叧鑱�
+
+```sql
+-- 鏌ヨ杞﹁締涓庨儴闂ㄧ殑鍏宠仈鎯呭喌
+SELECT 
+    v.vehicle_no,
+    v.car_id,
+    d.dept_name,
+    d.dispatch_order_class
+FROM tb_vehicle_info v
+LEFT JOIN sys_dept d ON v.dept_id = d.dept_id
+WHERE v.platform_code = 'LEGACY'
+ORDER BY v.create_time DESC;
+```
+
+### 娴嬭瘯3锛氭墜鍔ㄨЕ鍙戝悓姝�
+
+**鏂瑰紡1锛氶�氳繃瀹氭椂浠诲姟**
+1. 绯荤粺鐩戞帶 鈫� 瀹氭椂浠诲姟
+2. 鎵惧埌銆屾棫绯荤粺杞﹁締鍚屾銆�
+3. 鐐瑰嚮銆屾墽琛屼竴娆°��
+
+**鏂瑰紡2锛氶�氳繃API**
+```bash
+curl -X POST http://localhost:8080/system/vehicle/sync/legacy \
+  -H "Authorization: Bearer YOUR_TOKEN"
+```
+
+## 涓夈�佹暟鎹噯澶囷紙棣栨鍚屾鍓嶏級
+
+### 1. 纭繚閮ㄩ棬缂栫爜宸查厤缃�
+
+```sql
+-- 鏌ヨ閮ㄩ棬鐨刣ispatch_order_class閰嶇疆
+SELECT dept_id, dept_name, dispatch_order_class
+FROM sys_dept
+WHERE dispatch_order_class IS NOT NULL;
+```
+
+**濡傛灉鏈厤缃紝闇�瑕佸厛閰嶇疆閮ㄩ棬缂栫爜锛�**
+
+```sql
+-- 绀轰緥锛氶厤缃儴闂ㄧ紪鐮�
+UPDATE sys_dept SET dispatch_order_class = 'HB' WHERE dept_name = '杞繍闃�';
+UPDATE sys_dept SET dispatch_order_class = 'TI' WHERE dept_name = '璋冨害涓績';
+UPDATE sys_dept SET dispatch_order_class = 'ZB' WHERE dept_name = '鎬婚儴璋冨害';
+```
+
+### 2. 妫�鏌QL Server鏁版嵁
+
+```sql
+-- 鍦⊿QL Server涓鏌ヨ溅杈嗘暟鎹�
+SELECT TOP 10 
+    CarId, 
+    CarLicense, 
+    CarOrdClass, 
+    CarState
+FROM CarData
+WHERE CarState = 1
+ORDER BY CarId;
+```
+
+## 鍥涖�佸父瑙侀棶棰�
+
+### Q1: 鍚屾鍚庤溅杈嗙殑dept_id涓篘ULL锛�
+
+**鍘熷洜**锛欳arOrdClass鏃犳硶鍖归厤鍒皊ys_dept鐨刣ispatch_order_class
+
+**瑙e喅**锛�
+1. 妫�鏌arOrdClass鐨勫��
+2. 鍦╯ys_dept涓厤缃搴旂殑dispatch_order_class
+3. 閲嶆柊鎵ц鍚屾
+
+### Q2: 杞﹁締閲嶅鍚屾锛�
+
+**璇存槑**锛氱郴缁熸敮鎸侀噸澶嶅悓姝ワ紝宸插瓨鍦ㄧ殑杞﹁締浼氳鏇存柊鑰屼笉鏄噸澶嶆彃鍏�
+
+**楠岃瘉**锛�
+```sql
+-- 妫�鏌ユ槸鍚︽湁閲嶅杞︾墝
+SELECT vehicle_no, COUNT(*) as count
+FROM tb_vehicle_info
+GROUP BY vehicle_no
+HAVING COUNT(*) > 1;
+```
+
+### Q3: 濡備綍鏌ョ湅鍚屾鏃ュ織锛�
+
+**鏂瑰紡1锛氬畾鏃朵换鍔℃棩蹇�**
+- 绯荤粺鐩戞帶 鈫� 瀹氭椂浠诲姟 鈫� 鏃х郴缁熻溅杈嗗悓姝� 鈫� 鏃ュ織
+
+**鏂瑰紡2锛氱郴缁熸棩蹇楁枃浠�**
+```bash
+tail -f logs/sys-info.log | grep "杞﹁締鍚屾"
+```
+
+### Q4: 瀹氭椂浠诲姟涓嶆墽琛岋紵
+
+**妫�鏌�**锛�
+1. 浠诲姟鐘舵�佹槸鍚︿负銆屾甯搞��
+2. cron琛ㄨ揪寮忔槸鍚︽纭�
+3. 绯荤粺鏃堕棿鏄惁姝g‘
+
+## 浜斻�佹牳蹇冩祦绋嬭鏄�
+
+### 鍚屾閫昏緫
+```
+1. 浠嶴QL Server鏌ヨ CarState=1 鐨勮溅杈�
+   鈫�
+2. 鎻愬彇杞︾墝鍙凤紙鍘婚櫎鎷彿鍐呭锛�
+   鈫�
+3. 鍦∕ySQL涓煡鎵惧尮閰嶇殑杞﹁締锛堟敮鎸佹ā绯婂尮閰嶏級
+   鈫�
+4. 瑙f瀽CarOrdClass锛屽尮閰峝ispatch_order_class
+   鈫�
+5. 鏇存柊鎴栨柊澧炶溅杈嗚褰曪紙淇濆瓨car_id鍜宒ept_id锛�
+```
+
+### 杞︾墝鍖归厤瑙勫垯
+
+| SQL Server | MySQL | 鍖归厤缁撴灉 |
+|-----------|-------|---------|
+| 娴橝12345 | 娴橝12345 | 鉁� 绮剧‘鍖归厤 |
+| 娴橝12345锛堝椹帮級 | 娴橝12345 | 鉁� 鎻愬彇鍚庡尮閰� |
+| 娴橝12345 | 娴橝12345锛堝椹癎LE锛� | 鉁� 妯$硦鍖归厤 |
+
+### 閮ㄩ棬鍖归厤瑙勫垯
+
+| CarOrdClass | 瑙f瀽缁撴灉 | 鍖归厤閫昏緫 |
+|------------|---------|----------|
+| HB | ['HB'] | 鏌ユ壘dispatch_order_class='HB' |
+| HB.TI | ['HB', 'TI'] | 鏌ユ壘绗竴涓尮閰嶇殑锛圚B鎴朤I锛� |
+| ZB,TI | ['ZB', 'TI'] | 鏌ユ壘绗竴涓尮閰嶇殑锛圸B鎴朤I锛� |
+
+## 鍏�佺洃鎺т笌缁存姢
+
+### 鏃ュ父妫�鏌ラ」
+
+**姣忔棩妫�鏌�**锛�
+- 鏌ョ湅瀹氭椂浠诲姟鎵ц鏃ュ織
+- 妫�鏌ユ槸鍚︽湁澶辫触璁板綍
+
+**姣忓懆妫�鏌�**锛�
+- 缁熻鍚屾鐨勮溅杈嗘暟閲�
+- 妫�鏌ユ湭鍏宠仈閮ㄩ棬鐨勮溅杈�
+
+### 缁熻SQL
+
+```sql
+-- 缁熻鍚屾杞﹁締鏁伴噺
+SELECT 
+    platform_code,
+    COUNT(*) as total,
+    COUNT(dept_id) as with_dept,
+    COUNT(*) - COUNT(dept_id) as without_dept
+FROM tb_vehicle_info
+GROUP BY platform_code;
+
+-- 鏌ヨ鏈叧鑱旈儴闂ㄧ殑杞﹁締
+SELECT vehicle_no, car_id, remark
+FROM tb_vehicle_info
+WHERE platform_code = 'LEGACY' AND dept_id IS NULL;
+```
+
+## 涓冦�佽皟鏁村畾鏃朵换鍔�
+
+### 淇敼鎵ц鏃堕棿
+
+```sql
+-- 鏀逛负姣忓ぉ鏃╀笂6鐐规墽琛�
+UPDATE sys_job 
+SET cron_expression = '0 0 6 * * ?' 
+WHERE job_name = '鏃х郴缁熻溅杈嗗悓姝�';
+
+-- 鏀逛负姣忓皬鏃舵墽琛屼竴娆�
+UPDATE sys_job 
+SET cron_expression = '0 0 * * * ?' 
+WHERE job_name = '鏃х郴缁熻溅杈嗗悓姝�';
+
+-- 鏀逛负姣�30鍒嗛挓鎵ц涓�娆�
+UPDATE sys_job 
+SET cron_expression = '0 0/30 * * * ?' 
+WHERE job_name = '鏃х郴缁熻溅杈嗗悓姝�';
+```
+
+### 鏆傚仠/鍚姩浠诲姟
+
+**閫氳繃绠$悊鐣岄潰**锛�
+- 绯荤粺鐩戞帶 鈫� 瀹氭椂浠诲姟 鈫� 鏃х郴缁熻溅杈嗗悓姝� 鈫� 鐘舵�侊紙寮�鍚�/鍏抽棴锛�
+
+**閫氳繃SQL**锛�
+```sql
+-- 鏆傚仠浠诲姟
+UPDATE sys_job SET status = '1' WHERE job_name = '鏃х郴缁熻溅杈嗗悓姝�';
+
+-- 鍚姩浠诲姟
+UPDATE sys_job SET status = '0' WHERE job_name = '鏃х郴缁熻溅杈嗗悓姝�';
+```
+
+## 鍏�佺浉鍏虫枃妗�
+
+- 璇︾粏璇存槑锛歚鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�.md`
+- SQL鑴氭湰锛歚sql/legacy_vehicle_sync.sql`
+
+## 涔濄�佹妧鏈敮鎸�
+
+濡傛湁闂锛岃鏌ョ湅锛�
+1. 绯荤粺鏃ュ織锛歚logs/sys-info.log`
+2. 瀹氭椂浠诲姟鏃ュ織锛氱郴缁熺洃鎺� 鈫� 瀹氭椂浠诲姟 鈫� 鏃ュ織
+3. 璇︾粏鏂囨。锛歚prd/鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�.md`
diff --git "a/prd/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\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\350\275\246\350\276\206\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..0591fcc
--- /dev/null
+++ "b/prd/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,346 @@
+# 鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�
+
+## 涓�銆佸姛鑳芥杩�
+
+浠嶴QL Server鏃х郴缁熺殑`CarData`琛ㄥ悓姝ヨ溅杈嗘暟鎹埌MySQL鐨刞tb_vehicle_info`琛紝瀹炵幇杞﹁締淇℃伅鐨勮嚜鍔ㄥ悓姝ュ拰閮ㄩ棬鍏宠仈銆�
+
+### 鏍稿績鍔熻兘
+1. 浠嶴QL Server鐨凜arData琛ㄦ煡璇㈡甯哥姸鎬佺殑杞﹁締锛圕arState=1锛�
+2. 鎻愬彇杞︾墝鍙峰苟鍖归厤tb_vehicle_info涓殑璁板綍锛堟敮鎸佹ā绯婂尮閰嶏級
+3. 瑙f瀽CarOrdClass瀛楁锛岄�氳繃dispatch_order_class鍖归厤閮ㄩ棬
+4. 鍚屾CarID鍜宒ept_id鍒皌b_vehicle_info琛�
+
+## 浜屻�佹暟鎹槧灏勫叧绯�
+
+### 2.1 SQL Server 鈫� MySQL 瀛楁鏄犲皠
+
+| SQL Server (CarData) | MySQL (tb_vehicle_info) | 璇存槑 |
+|---------------------|------------------------|------|
+| CarId               | car_id                 | 鏃х郴缁熻溅杈咺D |
+| CarLicense          | vehicle_no             | 杞︾墝鍙凤紙鍘婚櫎鎷彿鍐呭锛� |
+| CarOrdClass         | dept_id                | 閫氳繃鍖归厤dispatch_order_class杞崲涓洪儴闂↖D |
+
+### 2.2 CarOrdClass 瑙f瀽瑙勫垯
+
+**鏍煎紡绀轰緥**锛�
+- `ZB` 鈫� 鍗曚釜缂栫爜
+- `HB.TI` 鈫� 澶氫釜缂栫爜鐢╜.`鍒嗛殧
+- `HB,TI` 鈫� 澶氫釜缂栫爜鐢╜,`鍒嗛殧
+
+**瑙f瀽娴佺▼**锛�
+1. 鎸夊垎闅旂锛坄.`, `,`, 绌烘牸锛夋媶鍒咰arOrdClass
+2. 閬嶅巻姣忎釜缂栫爜锛屽湪sys_dept琛ㄤ腑鏌ヨdispatch_order_class瀛楁
+3. 杩斿洖绗竴涓尮閰嶇殑閮ㄩ棬ID
+
+### 2.3 杞︾墝鍙峰尮閰嶈鍒�
+
+**鍦烘櫙1锛氱簿纭尮閰�**
+```
+SQL Server: 娴橝12345
+MySQL: 娴橝12345
+鈫� 绮剧‘鍖归厤鎴愬姛
+```
+
+**鍦烘櫙2锛氬甫鍝佺墝淇℃伅**
+```
+SQL Server: 娴橝12345锛堝椹帮級
+MySQL: 娴橝12345
+鈫� 鎻愬彇鎷彿鍓嶉儴鍒嗗尮閰�
+```
+
+**鍦烘櫙3锛氭ā绯婂尮閰�**
+```
+SQL Server: 娴橝12345
+MySQL: 娴橝12345锛堝椹癎LE锛�
+鈫� 鍖呭惈鍏崇郴鍖归厤鎴愬姛
+```
+
+## 涓夈�佹暟鎹簱鍙樻洿
+
+### 3.1 琛ㄧ粨鏋勫彉鏇�
+
+```sql
+-- 鍦╰b_vehicle_info琛ㄤ腑娣诲姞car_id瀛楁
+ALTER TABLE tb_vehicle_info 
+ADD COLUMN car_id INT NULL COMMENT '鏃х郴缁熻溅杈咺D(SQL Server CarID)' AFTER vehicle_id;
+
+-- 娣诲姞绱㈠紩
+ALTER TABLE tb_vehicle_info ADD INDEX idx_car_id (car_id);
+```
+
+### 3.2 瀹氭椂浠诲姟閰嶇疆
+
+```sql
+INSERT INTO sys_job (
+    job_name, 
+    job_group, 
+    invoke_target, 
+    cron_expression, 
+    misfire_policy, 
+    concurrent, 
+    status, 
+    create_by, 
+    create_time, 
+    remark
+) VALUES (
+    '鏃х郴缁熻溅杈嗗悓姝�',
+    'DEFAULT',
+    'legacyVehicleSyncTask.syncVehicles()',
+    '0 0 2 * * ?',  -- 姣忓ぉ鍑屾櫒2鐐规墽琛�
+    '3',
+    '1',
+    '0',
+    'admin',
+    sysdate(),
+    '浠嶴QL Server鐨凜arData琛ㄥ悓姝ヨ溅杈嗘暟鎹埌MySQL'
+);
+```
+
+## 鍥涖�佹妧鏈疄鐜�
+
+### 4.1 鏍稿績绫昏鏄�
+
+#### 1. VehicleSyncDTO
+**璺緞**: `ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleSyncDTO.java`
+
+**浣滅敤**: 灏佽浠嶴QL Server鏌ヨ鐨勮溅杈嗘暟鎹�
+
+**瀛楁**:
+- `carId`: 杞﹁締ID
+- `carLicense`: 杞︾墝鍙�
+- `carOrdClass`: 鍗曟嵁绫诲瀷缂栫爜
+
+#### 2. VehicleSyncMapper
+**璺緞**: `ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleSyncMapper.java`
+
+**浣滅敤**: SQL Server鏁版嵁婧愭煡璇㈡帴鍙�
+
+**娉ㄨВ**: `@DataSource(DataSourceType.SQLSERVER)`
+
+**SQL**:
+```sql
+SELECT CarId, CarLicense, CarOrdClass
+FROM CarData 
+WHERE CarState = 1
+ORDER BY CarId
+```
+
+#### 3. VehicleSyncDataServiceImpl
+**璺緞**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncDataServiceImpl.java`
+
+**鑱岃矗**: 涓撻棬璐熻矗浠嶴QL Server鏌ヨ杞﹁締鏁版嵁
+
+**鏁版嵁娴佸悜**: SQL Server 鈫� 杩斿洖DTO鍒楄〃
+
+#### 4. VehicleSyncServiceImpl
+**璺緞**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java`
+
+**鑱岃矗**: 灏嗘煡璇㈠埌鐨勬暟鎹悓姝ュ埌MySQL
+
+**鏍稿績鏂规硶**:
+- `syncVehicles()`: 鍚屾杞﹁締鏁版嵁
+- `extractPlateNumber()`: 鎻愬彇杞︾墝鍙�
+- `parseDeptIdFromCarOrdClass()`: 瑙f瀽閮ㄩ棬ID
+- `findVehicleByPlateNumber()`: 鏌ユ壘杞﹁締锛堟敮鎸佹ā绯婂尮閰嶏級
+
+#### 5. LegacyVehicleSyncTask
+**璺緞**: `ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacyVehicleSyncTask.java`
+
+**浣滅敤**: 瀹氭椂浠诲姟鎵ц绫�
+
+**璋冪敤鐩爣**: `legacyVehicleSyncTask.syncVehicles()`
+
+### 4.2 鍚屾娴佺▼
+
+```mermaid
+graph TD
+    A[瀹氭椂浠诲姟瑙﹀彂] --> B[鏌ヨSQL Server CarData琛╙
+    B --> C[閬嶅巻杞﹁締鏁版嵁]
+    C --> D[鎻愬彇杞︾墝鍙穄
+    D --> E{杞﹁締鏄惁瀛樺湪?}
+    E -->|瀛樺湪| F[鏇存柊杞﹁締淇℃伅]
+    E -->|涓嶅瓨鍦▅ G[鏂板杞﹁締]
+    F --> H[瑙f瀽CarOrdClass]
+    G --> H
+    H --> I[鍖归厤閮ㄩ棬dispatch_order_class]
+    I --> J[鏇存柊dept_id]
+    J --> K[淇濆瓨CarID鍒癱ar_id瀛楁]
+    K --> L[璁板綍鍚屾缁撴灉]
+```
+
+### 4.3 閿欒澶勭悊
+
+**绾у埆1锛氳褰曠骇閿欒**
+- 鍗曟潯杞﹁締鍚屾澶辫触涓嶅奖鍝嶅叾浠栬溅杈�
+- 閿欒淇℃伅璁板綍鍒扮粨鏋滀腑
+- 缁х画澶勭悊涓嬩竴鏉¤褰�
+
+**绾у埆2锛氭暣浣撻敊璇�**
+- 鏌ヨSQL Server澶辫触锛氱洿鎺ヨ繑鍥為敊璇�
+- 浜嬪姟鍥炴粴锛氱‘淇濇暟鎹竴鑷存��
+
+## 浜斻�丄PI鎺ュ彛
+
+### 5.1 鎵嬪姩鍚屾鎺ュ彛
+
+**鎺ュ彛鍦板潃**: `POST /system/vehicle/sync/legacy`
+
+**鏉冮檺鏍囪瘑**: `system:vehicle:sync`
+
+**璇锋眰鍙傛暟**: 鏃�
+
+**鍝嶅簲绀轰緥**:
+```json
+{
+  "code": 200,
+  "msg": "杞﹁締鍚屾瀹屾垚 - 鏂板: 5, 鏇存柊: 10, 璺宠繃: 2, 澶辫触: 0",
+  "data": {
+    "insertCount": 5,
+    "updateCount": 10,
+    "skipCount": 2,
+    "errorCount": 0,
+    "errors": {}
+  }
+}
+```
+
+## 鍏�佷娇鐢ㄨ鏄�
+
+### 6.1 瀹氭椂浠诲姟閰嶇疆
+
+1. 鐧诲綍鑻ヤ緷鍚庡彴绠$悊绯荤粺
+2. 杩涘叆銆岀郴缁熺洃鎺с�嶁啋銆屽畾鏃朵换鍔°��
+3. 鎵惧埌銆屾棫绯荤粺杞﹁締鍚屾銆嶄换鍔�
+4. 鍙互鎵ц浠ヤ笅鎿嶄綔锛�
+   - **鍚姩/鍋滄**: 鎺у埗浠诲姟鏄惁瀹氭椂鎵ц
+   - **绔嬪嵆鎵ц**: 鎵嬪姩瑙﹀彂涓�娆″悓姝�
+   - **淇敼**: 璋冩暣鎵ц鏃堕棿锛坈ron琛ㄨ揪寮忥級
+
+### 6.2 鎵嬪姩鍚屾
+
+閫氳繃API鎺ュ彛鎵嬪姩瑙﹀彂鍚屾锛�
+
+```bash
+curl -X POST http://localhost:8080/system/vehicle/sync/legacy \
+  -H "Authorization: Bearer YOUR_TOKEN"
+```
+
+### 6.3 鏌ョ湅鍚屾鏃ュ織
+
+**鏂瑰紡1锛氱郴缁熸棩蹇�**
+```bash
+tail -f logs/sys-info.log | grep "杞﹁締鍚屾"
+```
+
+**鏂瑰紡2锛氬畾鏃朵换鍔℃棩蹇�**
+1. 杩涘叆銆岀郴缁熺洃鎺с�嶁啋銆屽畾鏃朵换鍔°��
+2. 鐐瑰嚮銆屾棫绯荤粺杞﹁締鍚屾銆嶇殑銆屾棩蹇椼�嶆寜閽�
+3. 鏌ョ湅鎵ц鍘嗗彶鍜岀粨鏋�
+
+## 涓冦�佹祴璇曢獙璇�
+
+### 7.1 娴嬭瘯鍓嶅噯澶�
+
+1. 纭繚SQL Server鏁版嵁婧愰厤缃纭�
+2. 纭繚CarData琛ㄦ湁娴嬭瘯鏁版嵁
+3. 纭繚sys_dept琛ㄤ腑鏈夊搴旂殑dispatch_order_class鏁版嵁
+
+### 7.2 娴嬭瘯姝ラ
+
+**姝ラ1锛氬噯澶囨祴璇曟暟鎹�**
+```sql
+-- SQL Server 涓噯澶囨祴璇曟暟鎹�
+INSERT INTO CarData (CarLicense, CarOrdClass, CarState)
+VALUES 
+    ('娴橝12345', 'HB', 1),
+    ('娴橞67890锛堝椹帮級', 'TI.ZB', 1);
+
+-- MySQL 涓噯澶囬儴闂ㄦ暟鎹�
+UPDATE sys_dept SET dispatch_order_class = 'HB' WHERE dept_name = '杞繍闃�';
+UPDATE sys_dept SET dispatch_order_class = 'TI' WHERE dept_name = '璋冨害涓績';
+```
+
+**姝ラ2锛氭墽琛屽悓姝�**
+- 鏂瑰紡1锛氶�氳繃瀹氭椂浠诲姟銆岀珛鍗虫墽琛屻��
+- 鏂瑰紡2锛氳皟鐢ˋPI鎺ュ彛
+
+**姝ラ3锛氶獙璇佺粨鏋�**
+```sql
+-- 鏌ヨ鍚屾缁撴灉
+SELECT vehicle_id, car_id, vehicle_no, dept_id, platform_code, remark
+FROM tb_vehicle_info
+WHERE platform_code = 'LEGACY';
+
+-- 楠岃瘉閮ㄩ棬鍏宠仈
+SELECT v.vehicle_no, v.car_id, d.dept_name, d.dispatch_order_class
+FROM tb_vehicle_info v
+LEFT JOIN sys_dept d ON v.dept_id = d.dept_id
+WHERE v.platform_code = 'LEGACY';
+```
+
+### 7.3 棰勬湡缁撴灉
+
+| 娴嬭瘯鍦烘櫙 | 杈撳叆 | 棰勬湡杈撳嚭 |
+|---------|------|---------|
+| 鏂拌溅杈嗗悓姝� | CarLicense='娴橝12345', CarOrdClass='HB' | 鏂板璁板綍锛宒ept_id鍖归厤鍒�'杞繍闃�' |
+| 鏇存柊杞﹁締 | 杞︾墝宸插瓨鍦紝CarOrdClass鍙樻洿 | 鏇存柊dept_id |
+| 澶氱紪鐮佽В鏋� | CarOrdClass='TI.ZB' | 鍖归厤绗竴涓紪鐮乀I瀵瑰簲鐨勯儴闂� |
+| 杞︾墝鎻愬彇 | CarLicense='娴橞67890锛堝椹帮級' | vehicle_no='娴橞67890' |
+
+## 鍏�佹敞鎰忎簨椤�
+
+### 8.1 鏁版嵁涓�鑷存��
+
+1. **CarID鍞竴鎬�**: car_id瀛楁璁板綍SQL Server鐨勫師濮婭D锛屼究浜庤拷婧�
+2. **杞︾墝鍖归厤**: 鏀寔妯$硦鍖归厤锛屼絾浼樺厛绮剧‘鍖归厤
+3. **閮ㄩ棬鍏宠仈**: 濡傛灉CarOrdClass鏃犳硶鍖归厤閮ㄩ棬锛宒ept_id涓篘ULL
+
+### 8.2 鎬ц兘浼樺寲
+
+1. **鎵归噺鏌ヨ**: 涓�娆℃�ф煡璇㈡墍鏈夎溅杈嗭紝閬垮厤澶氭鏁版嵁搴撹繛鎺�
+2. **绱㈠紩浼樺寲**: car_id瀛楁宸插缓绔嬬储寮�
+3. **浜嬪姟鎺у埗**: 鏁翠綋浜嬪姟锛岀‘淇濇暟鎹竴鑷存��
+
+### 8.3 閿欒鎺掓煡
+
+**闂1锛氳溅杈嗘湭鍚屾**
+- 妫�鏌arState鏄惁涓�1
+- 妫�鏌ヨ溅鐗屽彿鏄惁涓虹┖
+- 鏌ョ湅閿欒鏃ュ織
+
+**闂2锛氶儴闂ㄦ湭鍏宠仈**
+- 妫�鏌ys_dept琛ㄤ腑鏄惁鏈夊搴旂殑dispatch_order_class
+- 妫�鏌arOrdClass鏍煎紡鏄惁姝g‘
+- 鏌ョ湅鏃ュ織涓殑瑙f瀽杩囩▼
+
+**闂3锛氭暟鎹簮杩炴帴澶辫触**
+- 妫�鏌pplication-dev.yml涓殑SQL Server閰嶇疆
+- 楠岃瘉缃戠粶杩炴帴鍜屾潈闄�
+
+## 涔濄�佸悗缁紭鍖栧缓璁�
+
+1. **澧為噺鍚屾**: 娣诲姞鍚屾鏃堕棿瀛楁锛屽彧鍚屾鍙樻洿鐨勬暟鎹�
+2. **鍐茬獊澶勭悊**: 褰揷ar_id閲嶅鏃剁殑澶勭悊绛栫暐
+3. **鏁版嵁鏍¢獙**: 鍚屾鍓嶅悗鐨勬暟鎹竴鑷存�ф牎楠�
+4. **鍚屾鎶ュ憡**: 鐢熸垚璇︾粏鐨勫悓姝ユ姤鍛婂苟鍙戦�侀�氱煡
+
+## 鍗併�佺浉鍏虫枃浠舵竻鍗�
+
+### 鍚庣鏂囦欢
+- `VehicleSyncDTO.java` - 鏁版嵁浼犺緭瀵硅薄
+- `VehicleSyncMapper.java` - 鏁版嵁鏌ヨMapper
+- `VehicleSyncMapper.xml` - SQL鏄犲皠鏂囦欢
+- `IVehicleSyncDataService.java` - 鏁版嵁鏌ヨ鏈嶅姟鎺ュ彛
+- `VehicleSyncDataServiceImpl.java` - 鏁版嵁鏌ヨ鏈嶅姟瀹炵幇
+- `IVehicleSyncService.java` - 鍚屾鏈嶅姟鎺ュ彛
+- `VehicleSyncServiceImpl.java` - 鍚屾鏈嶅姟瀹炵幇
+- `LegacyVehicleSyncTask.java` - 瀹氭椂浠诲姟
+- `VehicleSyncController.java` - 鎺у埗鍣�
+- `VehicleInfo.java` - 杞﹁締瀹炰綋锛堟柊澧瀋ar_id瀛楁锛�
+- `VehicleInfoMapper.xml` - 杞﹁締Mapper锛堟柊澧瀋ar_id鏄犲皠锛�
+
+### SQL鏂囦欢
+- `legacy_vehicle_sync.sql` - 鏁版嵁搴撳彉鏇村拰浠诲姟閰嶇疆
+
+### 鏂囨。
+- 鏈枃妗o細`鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�.md`
diff --git "a/prd/\347\224\250\346\210\267\346\211\213\346\234\272\345\217\267\345\224\257\344\270\200\346\200\247-\345\277\253\351\200\237\345\217\202\350\200\203.md" "b/prd/\347\224\250\346\210\267\346\211\213\346\234\272\345\217\267\345\224\257\344\270\200\346\200\247-\345\277\253\351\200\237\345\217\202\350\200\203.md"
new file mode 100644
index 0000000..9aa0a4c
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\346\211\213\346\234\272\345\217\267\345\224\257\344\270\200\346\200\247-\345\277\253\351\200\237\345\217\202\350\200\203.md"
@@ -0,0 +1,106 @@
+# 鐢ㄦ埛鎵嬫満鍙峰敮涓�鎬� - 蹇�熷弬鑰�
+
+## 馃幆 鏍稿績鐩爣
+
+**纭繚鎵嬫満鍙峰湪绯荤粺涓殑鍏ㄥ眬鍞竴鎬э紝閬垮厤鐧诲綍鍐茬獊**
+
+## 馃搵 瑕嗙洊鍔熻兘
+
+| 鍔熻兘 | 鏍¢獙鐘舵�� | 璇存槑 |
+|------|---------|------|
+| 鉁� 鐢ㄦ埛娣诲姞 | 宸叉湁 | Controller灞傛牎楠� |
+| 鉁� 鐢ㄦ埛淇敼 | 宸叉湁 | Controller灞傛牎楠� |
+| 鉁� 鐢ㄦ埛瀵煎叆 | **鏂板** | Service灞傛牎楠� |
+| 鉁� 鐢ㄦ埛鍚屾(鏂板) | **鏂板** | Service灞傛牎楠� |
+| 鉁� 鐢ㄦ埛鍚屾(鏇存柊) | **鏂板** | Service灞傛牎楠� |
+
+## 馃敡 淇敼鏂囦欢
+
+### 1. SysUserServiceImpl.java
+**鏂规硶**: `importUser`
+
+```java
+// 鏂板鐢ㄦ埛锛氭牎楠屾墜鏈哄彿鍞竴鎬�
+if (StringUtils.isNotEmpty(user.getPhonenumber())) {
+    SysUser phoneCheck = userMapper.checkPhoneUnique(user.getPhonenumber());
+    if (StringUtils.isNotNull(phoneCheck)) {
+        // 鎷掔粷瀵煎叆锛岃褰曢敊璇�
+    }
+}
+
+// 鏇存柊鐢ㄦ埛锛氭牎楠屾墜鏈哄彿鍞竴鎬э紙鎺掗櫎鑷繁锛�
+if (StringUtils.isNotEmpty(user.getPhonenumber())) {
+    SysUser phoneCheck = userMapper.checkPhoneUnique(user.getPhonenumber());
+    if (StringUtils.isNotNull(phoneCheck) && !phoneCheck.getUserId().equals(u.getUserId())) {
+        // 鎷掔粷鏇存柊锛岃褰曢敊璇�
+    }
+}
+```
+
+### 2. UserSyncServiceImpl.java
+
+#### createNewUser
+```java
+// 鍒涘缓鍓嶆鏌�
+SysUser phoneCheck = sysUserMapper.checkPhoneUnique(dto.getPhonenumber());
+if (StringUtils.isNotNull(phoneCheck)) {
+    log.warn("鎵嬫満鍙烽噸澶嶏紝璺宠繃鍒涘缓");
+    return; // 璺宠繃
+}
+```
+
+#### updateExistingUser
+```java
+// 鏇存柊鍓嶆鏌ワ紙鎺掗櫎鑷繁锛�
+SysUser phoneCheck = sysUserMapper.checkPhoneUnique(dto.getPhonenumber());
+if (StringUtils.isNotNull(phoneCheck) && !phoneCheck.getUserId().equals(existingUser.getUserId())) {
+    log.warn("鎵嬫満鍙疯鍗犵敤锛岃烦杩囨墜鏈哄彿鏇存柊");
+    // 缁х画鏇存柊鍏朵粬瀛楁
+}
+```
+
+## 馃帹 澶勭悊绛栫暐
+
+### 鐢ㄦ埛瀵煎叆
+- **绛栫暐**: 涓ユ牸鎷掔粷
+- **琛屼负**: 缁堟瀵煎叆璇ヨ褰曪紝鏄剧ず閿欒淇℃伅
+
+### 鐢ㄦ埛鍚屾
+- **绛栫暐**: 瀹归敊澶勭悊  
+- **琛屼负**: 璺宠繃鍐茬獊瀛楁锛岀户缁叾浠栧瓧娈碉紝璁板綍璀﹀憡
+
+## 馃摑 閿欒鎻愮ず
+
+### 瀵煎叆
+```
+璐﹀彿 zhangsan 瀵煎叆澶辫触锛氭墜鏈哄彿鐮� 13800138000 宸茶鐢ㄦ埛 lisi 浣跨敤
+```
+
+### 鍚屾
+```log
+鍒涘缓鐢ㄦ埛澶辫触锛屾墜鏈哄彿 13800138000 宸茶鐢ㄦ埛 lisi 浣跨敤锛岃烦杩囩敤鎴� zhangsan
+```
+
+## 鉁� 娴嬭瘯娓呭崟
+
+- [ ] 瀵煎叆鏂扮敤鎴凤紝鎵嬫満鍙烽噸澶� 鈫� 鎷掔粷
+- [ ] 瀵煎叆鏂扮敤鎴凤紝鎵嬫満鍙峰敮涓� 鈫� 鎴愬姛
+- [ ] 鏇存柊鐢ㄦ埛锛屾墜鏈哄彿鏀逛负宸插崰鐢� 鈫� 鎷掔粷
+- [ ] 鏇存柊鐢ㄦ埛锛屾墜鏈哄彿涓嶅彉 鈫� 鎴愬姛
+- [ ] 鍚屾鏂扮敤鎴凤紝鎵嬫満鍙烽噸澶� 鈫� 璺宠繃鍒涘缓
+- [ ] 鍚屾鏇存柊锛屾墜鏈哄彿琚崰鐢� 鈫� 璺宠繃璇ュ瓧娈�
+
+## 馃挕 鏁版嵁搴撶害鏉燂紙鍙�夛級
+
+```sql
+CREATE UNIQUE INDEX idx_sys_user_phonenumber 
+ON sys_user(phonenumber) 
+WHERE phonenumber IS NOT NULL 
+  AND phonenumber != '' 
+  AND del_flag = '0';
+```
+
+## 馃敆 鐩稿叧鏂囨。
+
+- [璇︾粏璇存槑](./鐢ㄦ埛鎵嬫満鍙峰敮涓�鎬у畬鍠勮鏄�.md)
+- [鐧诲綍鏀寔鎵嬫満鍙穄(./鐢ㄦ埛鐧诲綍鏀寔鎵嬫満鍙峰姛鑳借鏄�.md)
diff --git "a/prd/\347\224\250\346\210\267\346\211\213\346\234\272\345\217\267\345\224\257\344\270\200\346\200\247\345\256\214\345\226\204\350\257\264\346\230\216.md" "b/prd/\347\224\250\346\210\267\346\211\213\346\234\272\345\217\267\345\224\257\344\270\200\346\200\247\345\256\214\345\226\204\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..f260ed9
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\346\211\213\346\234\272\345\217\267\345\224\257\344\270\200\346\200\247\345\256\214\345\226\204\350\257\264\346\230\216.md"
@@ -0,0 +1,249 @@
+# 鐢ㄦ埛鎵嬫満鍙峰敮涓�鎬у畬鍠勮鏄�
+
+## 馃搵 闂鑳屾櫙
+
+鍦ㄦ敮鎸佹墜鏈哄彿鐧诲綍鍚庯紝鎵嬫満鍙锋垚涓轰簡鐢ㄦ埛鐧诲綍鐨勯噸瑕佸嚟璇併�備絾缁忚繃妫�鏌ュ彂鐜帮紝铏界劧**鐢ㄦ埛娣诲姞/淇敼**鍔熻兘宸叉湁鎵嬫満鍙峰敮涓�鎬ф牎楠岋紝浣嗗湪**鐢ㄦ埛瀵煎叆**鍜�**鐢ㄦ埛鍚屾**鍔熻兘涓己灏戣鏍¢獙锛屽彲鑳藉鑷存墜鏈哄彿閲嶅锛岄�犳垚鐧诲綍娣蜂贡銆�
+
+## 鈿狅笍 瀛樺湪鐨勯闄�
+
+### 1. 鐧诲綍鍐茬獊
+- 澶氫釜鐢ㄦ埛浣跨敤鐩稿悓鎵嬫満鍙凤紝瀵艰嚧鎵嬫満鍙风櫥褰曟椂鏃犳硶纭畾鐧诲綍鐨勬槸鍝釜鐢ㄦ埛
+- 鍙兘閫犳垚鐢ㄦ埛鐧诲綍鍒伴敊璇殑璐︽埛
+
+### 2. 鏁版嵁涓�鑷存�ч棶棰�
+- 鎵嬫満鍙蜂綔涓哄敮涓�鏍囪瘑锛屽嚭鐜伴噸澶嶈繚鑳屼簡鏁版嵁璁捐鍘熷垯
+- 褰卞搷鍩轰簬鎵嬫満鍙风殑涓氬姟閫昏緫
+
+### 3. 瀹夊叏闅愭偅
+- 鎵嬫満鍙烽噸澶嶅彲鑳借鍒╃敤杩涜韬唤鍐掔敤
+- 鐭俊楠岃瘉鐮佺瓑鍔熻兘鍙兘鍙戦�佸埌閿欒鐨勭敤鎴�
+
+## 馃敡 瀹屽杽鏂规
+
+### 1. 鐢ㄦ埛瀵煎叆鍔熻兘澧炲己
+
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java`
+
+**鏂规硶**: `importUser`
+
+#### 鏂板鍔熻兘
+- 鉁� 瀵煎叆鏂扮敤鎴峰墠锛屾牎楠屾墜鏈哄彿鏄惁宸茶鍏朵粬鐢ㄦ埛浣跨敤
+- 鉁� 鏇存柊鐢ㄦ埛鏃讹紝鏍¢獙鎵嬫満鍙锋槸鍚﹁鍏朵粬鐢ㄦ埛锛堟帓闄よ嚜宸憋級鍗犵敤
+- 鉁� 鍚屾椂鏍¢獙閭鍞竴鎬�
+- 鉁� 璇︾粏鐨勯敊璇彁绀猴紝鍖呭惈鍐茬獊鐨勭敤鎴峰悕
+
+#### 瀹炵幇浠g爜
+
+```java
+// 鏂板鐢ㄦ埛鏃�
+if (StringUtils.isNotEmpty(user.getPhonenumber()))
+{
+    SysUser phoneCheck = userMapper.checkPhoneUnique(user.getPhonenumber());
+    if (StringUtils.isNotNull(phoneCheck))
+    {
+        failureNum++;
+        failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() 
+            + " 瀵煎叆澶辫触锛氭墜鏈哄彿鐮� " + user.getPhonenumber() 
+            + " 宸茶鐢ㄦ埛 " + phoneCheck.getUserName() + " 浣跨敤");
+        continue;
+    }
+}
+
+// 鏇存柊鐢ㄦ埛鏃�
+if (StringUtils.isNotEmpty(user.getPhonenumber()))
+{
+    SysUser phoneCheck = userMapper.checkPhoneUnique(user.getPhonenumber());
+    if (StringUtils.isNotNull(phoneCheck) && !phoneCheck.getUserId().equals(u.getUserId()))
+    {
+        failureNum++;
+        failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() 
+            + " 鏇存柊澶辫触锛氭墜鏈哄彿鐮� " + user.getPhonenumber() 
+            + " 宸茶鐢ㄦ埛 " + phoneCheck.getUserName() + " 浣跨敤");
+        continue;
+    }
+}
+```
+
+### 2. 鐢ㄦ埛鍚屾鍔熻兘澧炲己
+
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java`
+
+#### 2.1 鍒涘缓鏂扮敤鎴� (`createNewUser`)
+
+**澧炲己鐐�**:
+- 鉁� 鍒涘缓鍓嶆牎楠屾墜鏈哄彿鍞竴鎬�
+- 鉁� 濡傛墜鏈哄彿閲嶅锛岃褰曡鍛婃棩蹇楀苟璺宠繃鍒涘缓
+- 鉁� 閬垮厤鍥犳墜鏈哄彿鍐茬獊瀵艰嚧鍚屾澶辫触
+
+```java
+if (StringUtils.isNotEmpty(dto.getPhonenumber()))
+{
+    // 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡琚叾浠栫敤鎴蜂娇鐢�
+    SysUser phoneCheck = sysUserMapper.checkPhoneUnique(dto.getPhonenumber());
+    if (StringUtils.isNotNull(phoneCheck))
+    {
+        log.warn("鍒涘缓鐢ㄦ埛澶辫触锛屾墜鏈哄彿 {} 宸茶鐢ㄦ埛 {} 浣跨敤锛岃烦杩囩敤鎴� {}", 
+            dto.getPhonenumber(), phoneCheck.getUserName(), dto.getUserName());
+        return; // 璺宠繃鍒涘缓
+    }
+    newUser.setPhonenumber(dto.getPhonenumber());
+}
+```
+
+#### 2.2 鏇存柊鐜版湁鐢ㄦ埛 (`updateExistingUser`)
+
+**澧炲己鐐�**:
+- 鉁� 鏇存柊鍓嶆牎楠屾墜鏈哄彿鍞竴鎬э紙鎺掗櫎鑷繁锛�
+- 鉁� 濡傛墜鏈哄彿琚崰鐢紝璁板綍璀﹀憡鏃ュ織骞惰烦杩囨墜鏈哄彿鏇存柊
+- 鉁� 缁х画鏇存柊鍏朵粬瀛楁锛屼笉褰卞搷鏁翠綋鍚屾娴佺▼
+
+```java
+if (StringUtils.isNotEmpty(dto.getPhonenumber()))
+{
+    // 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡琚叾浠栫敤鎴蜂娇鐢紙鎺掗櫎鑷繁锛�
+    SysUser phoneCheck = sysUserMapper.checkPhoneUnique(dto.getPhonenumber());
+    if (StringUtils.isNotNull(phoneCheck) && !phoneCheck.getUserId().equals(existingUser.getUserId()))
+    {
+        log.warn("鏇存柊鐢ㄦ埛 {} 澶辫触锛屾墜鏈哄彿 {} 宸茶鐢ㄦ埛 {} 浣跨敤锛岃烦杩囨墜鏈哄彿鏇存柊", 
+            existingUser.getUserName(), dto.getPhonenumber(), phoneCheck.getUserName());
+    }
+    else
+    {
+        existingUser.setPhonenumber(dto.getPhonenumber());
+    }
+}
+```
+
+## 馃搳 瀹屽杽瑕嗙洊鑼冨洿
+
+| 鍔熻兘妯″潡 | 鍘熺姸鎬� | 瀹屽杽鍚庣姸鎬� | 璇存槑 |
+|---------|--------|-----------|------|
+| 鐢ㄦ埛娣诲姞 | 鉁� 宸叉湁鏍¢獙 | 鉁� 淇濇寔 | Controller灞傚凡瀹炵幇 |
+| 鐢ㄦ埛淇敼 | 鉁� 宸叉湁鏍¢獙 | 鉁� 淇濇寔 | Controller灞傚凡瀹炵幇 |
+| 鐢ㄦ埛瀵煎叆 | 鉂� 缂哄皯鏍¢獙 | 鉁� 宸插畬鍠� | 鏂板+鏇存柊鍧囨牎楠� |
+| 鐢ㄦ埛鍚屾(鏂板) | 鉂� 缂哄皯鏍¢獙 | 鉁� 宸插畬鍠� | 鍒涘缓鍓嶆牎楠� |
+| 鐢ㄦ埛鍚屾(鏇存柊) | 鉂� 缂哄皯鏍¢獙 | 鉁� 宸插畬鍠� | 鏇存柊鍓嶆牎楠� |
+
+## 馃攳 鏍¢獙绛栫暐
+
+### 鏂板鐢ㄦ埛
+```
+妫�鏌ユ墜鏈哄彿 鈫� 宸插瓨鍦�? 鈫� 鏄� 鈫� 鎷掔粷鍒涘缓锛岃褰曢敊璇�
+                    鈫� 鍚� 鈫� 鍏佽鍒涘缓
+```
+
+### 鏇存柊鐢ㄦ埛
+```
+妫�鏌ユ墜鏈哄彿 鈫� 宸插瓨鍦�? 鈫� 鏄� 鈫� 鏄嚜宸�? 鈫� 鏄� 鈫� 鍏佽鏇存柊
+                              鈫� 鍚� 鈫� 鎷掔粷鏇存柊锛岃褰曢敊璇�
+                    鈫� 鍚� 鈫� 鍏佽鏇存柊
+```
+
+## 馃摑 淇敼鏂囦欢娓呭崟
+
+| # | 鏂囦欢 | 淇敼鍐呭 | 琛屾暟鍙樺寲 |
+|---|------|---------|---------|
+| 1 | `SysUserServiceImpl.java` | 鐢ㄦ埛瀵煎叆澧炲姞鎵嬫満鍙�/閭鍞竴鎬ф牎楠� | +50 |
+| 2 | `UserSyncServiceImpl.java` | 鐢ㄦ埛鍚屾澧炲姞鎵嬫満鍙峰敮涓�鎬ф牎楠� | +19 |
+
+**鎬昏**: +69 琛�
+
+## 鈿� 澶勭悊绛栫暐宸紓
+
+### 鐢ㄦ埛瀵煎叆
+- **绛栫暐**: 涓ユ牸鎷掔粷
+- **鍘熷洜**: 瀵煎叆鏄壒閲忔搷浣滐紝闇�瑕佷繚璇佹暟鎹川閲�
+- **琛屼负**: 璁板綍璇︾粏閿欒淇℃伅锛岀粓姝㈣鏉¤褰曞鍏�
+
+### 鐢ㄦ埛鍚屾
+- **绛栫暐**: 瀹归敊澶勭悊
+- **鍘熷洜**: 鍚屾鏄嚜鍔ㄥ寲鎿嶄綔锛屼笉搴斿洜涓埆瀛楁鍐茬獊褰卞搷鏁翠綋
+- **琛屼负**: 璁板綍璀﹀憡鏃ュ織锛岃烦杩囧啿绐佸瓧娈碉紝缁х画鍏朵粬瀛楁鍚屾
+
+## 馃幆 閿欒鎻愮ず绀轰緥
+
+### 鐢ㄦ埛瀵煎叆
+```
+寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 2 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細
+1銆佽处鍙� zhangsan 瀵煎叆澶辫触锛氭墜鏈哄彿鐮� 13800138000 宸茶鐢ㄦ埛 lisi 浣跨敤
+2銆佽处鍙� wangwu 瀵煎叆澶辫触锛氶偖绠� test@example.com 宸茶鐢ㄦ埛 zhaoliu 浣跨敤
+```
+
+### 鐢ㄦ埛鍚屾
+```log
+2025-10-23 10:30:45 WARN  鍒涘缓鐢ㄦ埛澶辫触锛屾墜鏈哄彿 13800138000 宸茶鐢ㄦ埛 lisi 浣跨敤锛岃烦杩囩敤鎴� zhangsan
+2025-10-23 10:30:46 WARN  鏇存柊鐢ㄦ埛 wangwu 澶辫触锛屾墜鏈哄彿 13900139000 宸茶鐢ㄦ埛 zhaoliu 浣跨敤锛岃烦杩囨墜鏈哄彿鏇存柊
+```
+
+## 鉁� 娴嬭瘯鍦烘櫙
+
+### 1. 鐢ㄦ埛瀵煎叆娴嬭瘯
+
+#### 鍦烘櫙1.1: 瀵煎叆鏂扮敤鎴凤紝鎵嬫満鍙烽噸澶�
+```
+杈撳叆: 鐢ㄦ埛鍚�=test001, 鎵嬫満鍙�=13800138000锛堝凡琚玜dmin浣跨敤锛�
+棰勬湡: 瀵煎叆澶辫触锛屾彁绀�"鎵嬫満鍙风爜 13800138000 宸茶鐢ㄦ埛 admin 浣跨敤"
+```
+
+#### 鍦烘櫙1.2: 瀵煎叆鏂扮敤鎴凤紝鎵嬫満鍙峰敮涓�
+```
+杈撳叆: 鐢ㄦ埛鍚�=test001, 鎵嬫満鍙�=13900139999锛堟湭浣跨敤锛�
+棰勬湡: 瀵煎叆鎴愬姛
+```
+
+#### 鍦烘櫙1.3: 鏇存柊鐢ㄦ埛锛屾墜鏈哄彿鏀逛负鍏朵粬浜虹殑
+```
+杈撳叆: 鐢ㄦ埛鍚�=test001锛堝凡瀛樺湪锛�, 鎵嬫満鍙�=13800138000锛堣admin浣跨敤锛�
+棰勬湡: 鏇存柊澶辫触锛屾彁绀�"鎵嬫満鍙风爜 13800138000 宸茶鐢ㄦ埛 admin 浣跨敤"
+```
+
+#### 鍦烘櫙1.4: 鏇存柊鐢ㄦ埛锛屾墜鏈哄彿涓嶅彉
+```
+杈撳叆: 鐢ㄦ埛鍚�=test001锛堝凡瀛樺湪锛屾墜鏈哄彿=13900139999锛�, 鎵嬫満鍙�=13900139999
+棰勬湡: 鏇存柊鎴愬姛
+```
+
+### 2. 鐢ㄦ埛鍚屾娴嬭瘯
+
+#### 鍦烘櫙2.1: 鍚屾鏂扮敤鎴凤紝鎵嬫満鍙烽噸澶�
+```
+杈撳叆: OA鐢ㄦ埛锛堟墜鏈哄彿=13800138000锛屽凡琚郴缁熺敤鎴蜂娇鐢級
+棰勬湡: 璺宠繃鍒涘缓锛岃褰曡鍛婃棩蹇�
+```
+
+#### 鍦烘櫙2.2: 鍚屾鏇存柊鐢ㄦ埛锛屾墜鏈哄彿鏀逛负鍏朵粬浜虹殑
+```
+杈撳叆: 鏇存柊鐢ㄦ埛鎵嬫満鍙蜂负宸茶鍗犵敤鐨勫彿鐮�
+棰勬湡: 璺宠繃鎵嬫満鍙锋洿鏂帮紝鍏朵粬瀛楁姝e父鏇存柊锛岃褰曡鍛婃棩蹇�
+```
+
+## 馃敀 鏁版嵁搴撶害鏉熷缓璁�
+
+铏界劧浠g爜灞傞潰宸插畬鍠勬牎楠岋紝浣嗗缓璁湪鏁版嵁搴撳眰闈篃娣诲姞绾︽潫锛�
+
+```sql
+-- 涓烘墜鏈哄彿瀛楁娣诲姞鍞竴绱㈠紩
+CREATE UNIQUE INDEX idx_sys_user_phonenumber 
+ON sys_user(phonenumber) 
+WHERE phonenumber IS NOT NULL AND phonenumber != '' AND del_flag = '0';
+```
+
+**娉ㄦ剰**: 
+- 浠呭闈炵┖銆侀潪绌哄瓧绗︿覆銆佹湭鍒犻櫎鐨勮褰曞缓绔嬪敮涓�绾︽潫
+- 鍏佽澶氭潯璁板綍鐨勬墜鏈哄彿涓篘ULL鎴栫┖瀛楃涓�
+
+## 馃摎 鐩稿叧鏂囨。
+
+- [鐢ㄦ埛鐧诲綍鏀寔鎵嬫満鍙峰姛鑳借鏄嶿(./鐢ㄦ埛鐧诲綍鏀寔鎵嬫満鍙峰姛鑳借鏄�.md)
+- [鐢ㄦ埛鍚屾鍔熻兘璇存槑](./鐢ㄦ埛鍚屾鍔熻兘璇存槑.md)
+
+## 馃帀 鎬荤粨
+
+閫氳繃鏈瀹屽杽锛�
+1. 鉁� 鍏ㄩ潰瑕嗙洊浜嗘墍鏈夌敤鎴峰垱寤�/鏇存柊鍏ュ彛鐨勬墜鏈哄彿鍞竴鎬ф牎楠�
+2. 鉁� 閬垮厤浜嗘墜鏈哄彿閲嶅瀵艰嚧鐨勭櫥褰曟贩涔�
+3. 鉁� 鎻愬崌浜嗘暟鎹竴鑷存�у拰绯荤粺瀹夊叏鎬�
+4. 鉁� 鎻愪緵浜嗘竻鏅扮殑閿欒鎻愮ず鍜屾棩蹇楄褰�
+5. 鉁� 閲囩敤浜嗗悎鐞嗙殑瀹归敊绛栫暐锛屼繚璇佽嚜鍔ㄥ寲鍚屾鐨勭ǔ瀹氭��
+
+鐜板湪绯荤粺鍙互瀹夊叏鍦颁娇鐢ㄦ墜鏈哄彿浣滀负鐧诲綍鍑瘉锛侌煄�
diff --git "a/prd/\347\224\250\346\210\267\346\230\276\347\244\272\345\220\215\347\247\260\347\273\237\344\270\200\344\275\277\347\224\250\346\230\265\347\247\260\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\347\224\250\346\210\267\346\230\276\347\244\272\345\220\215\347\247\260\347\273\237\344\270\200\344\275\277\347\224\250\346\230\265\347\247\260\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..470de34
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\346\230\276\347\244\272\345\220\215\347\247\260\347\273\237\344\270\200\344\275\277\347\224\250\346\230\265\347\247\260\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,254 @@
+# 鐢ㄦ埛鏄剧ず鍚嶇О缁熶竴浣跨敤鏄电О鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+灏嗗墠绔墍鏈夋樉绀虹敤鎴峰悕绉扮殑鍦版柟缁熶竴鏀逛负鏄剧ず **nickName锛堟樀绉帮級**锛岃�屼笉鏄� userName锛堢櫥褰曡处鍙凤級銆�
+
+## 涓氬姟鑳屾櫙
+- **userName**锛氱敤鎴风櫥褰曡处鍙凤紝閫氬父鏄伐鍙锋垨鑻辨枃璐﹀彿锛屼笉閫傚悎鍦ㄧ晫闈笂鏄剧ず
+- **nickName**锛氱敤鎴锋樀绉帮紝閫氬父鏄腑鏂囧鍚嶏紝鏇村弸濂姐�佹洿閫傚悎鐣岄潰鏄剧ず
+
+## 瀹炵幇鏂规
+
+### 1. 瀛樺偍灞傛墿灞曪紙constant.js锛�
+**鏂囦欢璺緞**锛歚app/utils/constant.js`
+
+**淇敼鍐呭**锛�
+```javascript
+const constant = {
+   userId: 'vuex_userId',
+   avatar: 'vuex_avatar',
+   name: 'vuex_name',          // 淇濈暀锛氬瓨鍌� userName锛堢櫥褰曡处鍙凤級
+   nickName: 'vuex_nickName',   // 鏂板锛氬瓨鍌� nickName锛堟樀绉帮級
+   roles: 'vuex_roles',
+   permissions: 'vuex_permissions',
+   deptId: 'vuex_deptId',
+   branchCompanyId: 'vuex_branchCompanyId',
+   branchCompanyName: 'vuex_branchCompanyName',
+   oaUserId: 'vuex_oaUserId'
+}
+```
+
+**璇存槑**锛氭坊鍔� `nickName` 甯搁噺锛岀敤浜� localStorage 鎸佷箙鍖栧瓨鍌�
+
+### 2. Vuex Store 鐘舵�佺鐞嗭紙user.js锛�
+**鏂囦欢璺緞**锛歚app/store/modules/user.js`
+
+#### 2.1 State 鎵╁睍
+```javascript
+state: {
+  token: getToken(),
+  userId: storage.get(constant.userId),
+  name: storage.get(constant.name),           // userName锛堢櫥褰曡处鍙凤級
+  nickName: storage.get(constant.nickName),   // nickName锛堟樀绉帮級- 鏂板
+  avatar: storage.get(constant.avatar),
+  // ... 鍏朵粬鐘舵��
+}
+```
+
+#### 2.2 Mutations 鎵╁睍
+```javascript
+SET_NICK_NAME: (state, nickName) => {
+  state.nickName = nickName
+  storage.set(constant.nickName, nickName)
+}
+```
+
+#### 2.3 GetInfo Action 淇敼
+```javascript
+getInfo().then(res => {
+  const user = res.user
+  const username = (user == null || user.userName == "" || user.userName == null) ? "" : user.userName
+  const nickname = (user == null || user.nickName == "" || user.nickName == null) ? username : user.nickName
+  
+  // 淇濆瓨涓や釜瀛楁
+  commit('SET_NAME', username)      // 淇濆瓨 userName
+  commit('SET_NICK_NAME', nickname) // 淇濆瓨 nickName锛屽鏋滀负绌哄垯浣跨敤 userName
+  // ...
+})
+```
+
+**閫昏緫璇存槑**锛�
+- 浼樺厛浣跨敤 `user.nickName`
+- 濡傛灉 nickName 涓虹┖锛屽垯鍥為��浣跨敤 `userName`
+- 纭繚鏄剧ず鍚嶇О濮嬬粓鏈夊��
+
+### 3. 椤甸潰鏄剧ず淇敼
+
+#### 3.1 棣栭〉锛坕ndex.vue锛�
+**鏂囦欢璺緞**锛歚app/pages/index.vue`
+
+**淇敼鍐呭**锛�
+```javascript
+computed: {
+  ...mapState({
+    userName: state => state.user.nickName,  // 鏀逛负浣跨敤 nickName
+    currentUser: state => state.user
+  }),
+  // ...
+}
+```
+
+**鏄剧ず鍐呭**锛�
+- 鐢ㄦ埛鏄电О锛坣ickName锛�
+- 鎵�鍦ㄥ垎鍏徃锛坆ranchCompanyName锛�
+- 鍏宠仈杞︾墝鍙凤紙boundVehicle锛�
+
+#### 3.2 涓汉涓績椤碉紙mine/index.vue锛�
+**鏂囦欢璺緞**锛歚app/pages/mine/index.vue`
+
+**淇敼鍐呭**锛�
+```javascript
+// data 鍒濆鍖�
+name: this.$store.state.user.nickName,
+
+// onShow 鏂规硶
+this.name = this.$store.state.user.nickName || '鏈櫥褰�'
+```
+
+#### 3.3 鎬ユ晳杞繍浠诲姟鍒涘缓椤碉紙create-emergency.vue锛�
+**鏂囦欢璺緞**锛歚app/pages/task/create-emergency.vue`
+
+**淇敼鍐呭**锛�
+```javascript
+computed: {
+  ...mapState({
+    name: state => state.user.nickName || '寮犱笁',
+    nickName: state => state.user.nickName || '寮犱笁',
+    // ...
+  })
+}
+```
+
+#### 3.4 鏅�氫换鍔″垱寤洪〉锛坈reate-normal.vue锛�
+**鏂囦欢璺緞**锛歚app/pages/task/create-normal.vue`
+
+**淇敼鍐呭**锛�
+```javascript
+computed: {
+  ...mapState({
+    name: state => state.user.nickName || '寮犱笁',
+    // ...
+  })
+}
+```
+
+#### 3.5 绂忕杞︿换鍔″垱寤洪〉锛坈reate-welfare.vue锛�
+**鏂囦欢璺緞**锛歚app/pages/task/create-welfare.vue`
+
+**淇敼鍐呭**锛�
+```javascript
+computed: {
+  ...mapState({
+    name: state => state.user.nickName || '寮犱笁',
+    // ...
+  })
+}
+```
+
+## 鏁版嵁娴佺▼
+
+```mermaid
+graph LR
+    A[鐢ㄦ埛鐧诲綍] --> B[璋冪敤getInfo鎺ュ彛]
+    B --> C[鑾峰彇user.userName鍜寀ser.nickName]
+    C --> D[瀛樺偍鍒癡uex State]
+    D --> E[鎸佷箙鍖栧埌localStorage]
+    E --> F[椤甸潰浠巗tate.user.nickName璇诲彇]
+    F --> G[鐣岄潰鏄剧ず鏄电О]
+```
+
+## 鍚庣鎺ュ彛瑕佹眰
+
+### getInfo 鎺ュ彛杩斿洖鏁版嵁缁撴瀯
+```json
+{
+  "code": 200,
+  "user": {
+    "userId": 1,
+    "userName": "admin",          // 鐧诲綍璐﹀彿
+    "nickName": "绠$悊鍛�",          // 鏄电О锛堝繀椤昏繑鍥烇級
+    "avatar": "/profile/avatar.jpg",
+    "deptId": 103,
+    "branchCompanyId": 100,
+    "branchCompanyName": "骞垮窞鍒嗗叕鍙�"
+  },
+  "roles": ["admin"],
+  "permissions": ["*:*:*"]
+}
+```
+
+**閲嶈璇存槑**锛�
+- `userName`锛氱敤鎴风櫥褰曡处鍙凤紝鐢ㄤ簬绯荤粺璁よ瘉
+- `nickName`锛氱敤鎴锋樀绉帮紝鐢ㄤ簬鐣岄潰鏄剧ず
+- 濡傛灉鍚庣鏈缃� nickName锛屽墠绔細鑷姩浣跨敤 userName 浣滀负鏄剧ず鍚嶇О
+
+## 淇敼鏂囦欢娓呭崟
+
+| 鏂囦欢璺緞 | 淇敼绫诲瀷 | 璇存槑 |
+|---------|---------|------|
+| `app/utils/constant.js` | 鏂板 | 娣诲姞 nickName 甯搁噺 |
+| `app/store/modules/user.js` | 鎵╁睍 | 娣诲姞 nickName 鐘舵�佺鐞� |
+| `app/pages/index.vue` | 淇敼 | 棣栭〉鏄剧ず鏄电О |
+| `app/pages/mine/index.vue` | 淇敼 | 涓汉涓績鏄剧ず鏄电О |
+| `app/pages/task/create-emergency.vue` | 淇敼 | 浠诲姟鍒涘缓椤典娇鐢ㄦ樀绉� |
+| `app/pages/task/create-normal.vue` | 淇敼 | 浠诲姟鍒涘缓椤典娇鐢ㄦ樀绉� |
+| `app/pages/task/create-welfare.vue` | 淇敼 | 浠诲姟鍒涘缓椤典娇鐢ㄦ樀绉� |
+
+## 鍏煎鎬ц鏄�
+
+### 鏁版嵁鍏煎
+- 鉁� 濡傛灉鍚庣杩斿洖 nickName锛屼紭鍏堜娇鐢�
+- 鉁� 濡傛灉鍚庣鏈繑鍥� nickName锛岃嚜鍔ㄥ洖閫�浣跨敤 userName
+- 鉁� 纭繚鐣岄潰鏄剧ず濮嬬粓鏈夊��
+
+### 鍔熻兘鍏煎
+- 鉁� 涓嶅奖鍝嶇櫥褰曞姛鑳斤紙鐧诲綍浠嶄娇鐢� userName锛�
+- 鉁� 涓嶅奖鍝嶆潈闄愰獙璇�
+- 鉁� 淇濈暀 state.user.name 瀛楁锛岄伩鍏嶅叾浠栨ā鍧楀紩鐢ㄦ姤閿�
+
+### 瀛樺偍鍏煎
+- 鉁� 鏂板瀛楁涓嶅奖鍝嶇幇鏈夊瓨鍌�
+- 鉁� localStorage 澧為噺鏇存柊
+
+## 娴嬭瘯瑕佺偣
+
+### 鍔熻兘娴嬭瘯
+1. 鉁� 鐢ㄦ埛鐧诲綍鍚庯紝棣栭〉姝g‘鏄剧ず鏄电О
+2. 鉁� 涓汉涓績姝g‘鏄剧ず鏄电О
+3. 鉁� 鍚勪换鍔″垱寤洪〉闈㈡纭樉绀烘樀绉�
+4. 鉁� 鎵�鍦ㄥ垎鍏徃淇℃伅姝g‘鏄剧ず
+
+### 杈圭晫娴嬭瘯
+1. 鉁� 鏄电О涓虹┖鏃讹紝鏄剧ず鐧诲綍璐﹀彿
+2. 鉁� 鏈櫥褰曟椂锛屾樉绀�"鏈櫥褰�"
+3. 鉁� 鐧诲綍璐﹀彿鍒囨崲鍚庯紝鏄电О姝g‘鏇存柊
+
+### 鍏煎鎬ф祴璇�
+1. 鉁� 鏃х増鏈暟鎹縼绉绘甯�
+2. 鉁� 閫�鍑虹櫥褰曞悗鏁版嵁姝g‘娓呴櫎
+3. 鉁� 涓嬫鐧诲綍鏁版嵁姝g‘鍔犺浇
+
+## 鐢ㄦ埛浣撻獙鏀硅繘
+
+### 鏀硅繘鍓�
+- 鏄剧ず锛歚admin`銆乣u001`銆乣zhangsan` 绛夌櫥褰曡处鍙�
+- 闂锛氫笉鍙嬪ソ锛屼笉鐩磋
+
+### 鏀硅繘鍚�
+- 鏄剧ず锛歚绠$悊鍛榒銆乣寮犱笁`銆乣鏉庡洓` 绛変腑鏂囧鍚�
+- 浼樼偣锛氬弸濂姐�佺洿瑙傘�佺鍚堜腑鏂囦娇鐢ㄤ範鎯�
+
+## 娉ㄦ剰浜嬮」
+
+1. **鍚庣閰嶇疆**锛氱‘淇� getInfo 鎺ュ彛杩斿洖 nickName 瀛楁
+2. **鏁版嵁濉厖**锛氬缓璁湪鐢ㄦ埛绠$悊鍚庡彴琛ュ厖鎵�鏈夌敤鎴风殑鏄电О
+3. **鏄剧ず瑙勫垯**锛氭樀绉� > 鐧诲綍璐﹀彿 > "鏈櫥褰�"
+4. **涓�鑷存��**锛氭墍鏈夐〉闈㈢粺涓�浣跨敤 `state.user.nickName`
+
+## 鎬荤粨
+
+鏈淇敼瀹炵幇浜嗗墠绔敤鎴锋樉绀哄悕绉扮殑缁熶竴瑙勮寖锛�
+- 鉁� 鎵�鏈夌晫闈㈢粺涓�鏄剧ず鏄电О锛坣ickName锛�
+- 鉁� 鐧诲綍璐﹀彿锛坲serName锛変粎鐢ㄤ簬绯荤粺璁よ瘉
+- 鉁� 瀹屽杽鐨勬暟鎹洖閫�鏈哄埗
+- 鉁� 鑹ソ鐨勫吋瀹规�у拰鐢ㄦ埛浣撻獙
diff --git "a/prd/\347\224\250\346\210\267\347\231\273\345\275\225\346\224\257\346\214\201\346\211\213\346\234\272\345\217\267-\345\277\253\351\200\237\345\217\202\350\200\203.md" "b/prd/\347\224\250\346\210\267\347\231\273\345\275\225\346\224\257\346\214\201\346\211\213\346\234\272\345\217\267-\345\277\253\351\200\237\345\217\202\350\200\203.md"
new file mode 100644
index 0000000..22f18a4
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\347\231\273\345\275\225\346\224\257\346\214\201\346\211\213\346\234\272\345\217\267-\345\277\253\351\200\237\345\217\202\350\200\203.md"
@@ -0,0 +1,86 @@
+# 鐢ㄦ埛鐧诲綍鏀寔鎵嬫満鍙� - 蹇�熷弬鑰�
+
+## 馃摫 鍔熻兘鐗规��
+
+鏀寔涓ょ鐧诲綍鏂瑰紡锛�
+- 鉁� **璐﹀彿 + 瀵嗙爜**
+- 鉁� **鎵嬫満鍙� + 瀵嗙爜**
+
+## 馃敡 鏍稿績鏀瑰姩
+
+### 1锔忊儯 鏂板鎺ュ彛鏂规硶
+
+**ISysUserService.java**
+```java
+public SysUser selectUserByPhonenumber(String phonenumber);
+```
+
+### 2锔忊儯 鑷姩璇嗗埆閫昏緫
+
+**UserDetailsServiceImpl.java** - `loadUserByUsername` 鏂规硶
+```java
+// 鎵嬫満鍙锋牸寮忥細1[3-9]\d{9}
+if (username.matches("^1[3-9]\\d{9}$")) {
+    user = userService.selectUserByPhonenumber(username);
+} else {
+    user = userService.selectUserByUserName(username);
+}
+```
+
+### 3锔忊儯 浼樺寲鏍¢獙瑙勫垯
+
+**SysLoginService.java** - `loginPreCheck` 鏂规硶
+```java
+boolean isPhoneLogin = username.matches("^1[3-9]\\d{9}$");
+// 浠呭闈炴墜鏈哄彿鐧诲綍鏍¢獙鐢ㄦ埛鍚嶉暱搴�
+if (!isPhoneLogin) {
+    // 鏍¢獙鐢ㄦ埛鍚嶉暱搴�
+}
+```
+
+## 馃搵 淇敼鏂囦欢鍒楄〃
+
+| 鏂囦欢 | 淇敼鍐呭 |
+|------|---------|
+| `ISysUserService.java` | 鏂板 selectUserByPhonenumber 鎺ュ彛 |
+| `SysUserServiceImpl.java` | 瀹炵幇 selectUserByPhonenumber 鏂规硶 |
+| `UserDetailsServiceImpl.java` | 澧炲姞鎵嬫満鍙�/璐﹀彿鑷姩璇嗗埆 |
+| `SysLoginService.java` | 浼樺寲鐧诲綍鍓嶇疆鏍¢獙 |
+
+## 馃幆 浣跨敤鏂瑰紡
+
+鍓嶇鏃犻渶淇敼锛岀洿鎺ヤ紶閫掔敤鎴疯緭鍏ワ細
+
+```javascript
+// 璐﹀彿鐧诲綍
+login({ username: "admin", password: "admin123" })
+
+// 鎵嬫満鍙风櫥褰�
+login({ username: "13800138000", password: "password123" })
+```
+
+## 鈿狅笍 娉ㄦ剰浜嬮」
+
+1. **鎵嬫満鍙锋牸寮�**锛氬繀椤绘槸1寮�澶达紝绗簩浣�3-9锛屽叡11浣�
+2. **鍞竴鎬�**锛氭墜鏈哄彿鍦ㄧ郴缁熶腑蹇呴』鍞竴
+3. **鍏煎鎬�**锛氬畬鍏ㄥ悜鍚庡吋瀹癸紝鍘熸湁鍔熻兘涓嶅彈褰卞搷
+
+## 馃搳 璇嗗埆瑙勫垯
+
+| 杈撳叆绀轰緥 | 璇嗗埆涓� | 鏌ヨ鏂瑰紡 |
+|---------|--------|---------|
+| admin | 璐﹀彿 | selectUserByUserName |
+| 13800138000 | 鎵嬫満鍙� | selectUserByPhonenumber |
+| test001 | 璐﹀彿 | selectUserByUserName |
+| 19912345678 | 鎵嬫満鍙� | selectUserByPhonenumber |
+
+## 鉁� 娴嬭瘯娓呭崟
+
+- [ ] 浣跨敤璐﹀彿鐧诲綍鎴愬姛
+- [ ] 浣跨敤鎵嬫満鍙风櫥褰曟垚鍔�
+- [ ] 璐﹀彿涓嶅瓨鍦ㄦ彁绀烘纭�
+- [ ] 鎵嬫満鍙蜂笉瀛樺湪鎻愮ず姝g‘
+- [ ] 瀵嗙爜閿欒鎻愮ず姝g‘
+- [ ] 瀵嗙爜閲嶈瘯闄愬埗鐢熸晥
+- [ ] 楠岃瘉鐮佹満鍒舵甯�
+- [ ] IP榛戝悕鍗曟満鍒舵甯�
diff --git "a/prd/\347\224\250\346\210\267\347\231\273\345\275\225\346\224\257\346\214\201\346\211\213\346\234\272\345\217\267\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\347\224\250\346\210\267\347\231\273\345\275\225\346\224\257\346\214\201\346\211\213\346\234\272\345\217\267\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..08abcce
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\347\231\273\345\275\225\346\224\257\346\214\201\346\211\213\346\234\272\345\217\267\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,181 @@
+# 鐢ㄦ埛鐧诲綍鏀寔鎵嬫満鍙峰姛鑳借鏄�
+
+## 鍔熻兘姒傝堪
+
+绯荤粺鐧诲綍鎺ュ彛宸插崌绾э紝鐜板湪鏀寔涓ょ鐧诲綍鏂瑰紡锛�
+1. **璐﹀彿瀵嗙爜鐧诲綍**锛氫娇鐢ㄧ敤鎴峰悕 + 瀵嗙爜
+2. **鎵嬫満鍙峰瘑鐮佺櫥褰�**锛氫娇鐢ㄦ墜鏈哄彿 + 瀵嗙爜
+
+绯荤粺浼氳嚜鍔ㄨ瘑鍒敤鎴疯緭鍏ョ殑鏄墜鏈哄彿杩樻槸璐﹀彿锛屾棤闇�棰濆鎸囧畾鐧诲綍绫诲瀷銆�
+
+## 瀹炵幇鍘熺悊
+
+### 1. 鍒ゆ柇閫昏緫
+
+绯荤粺閫氳繃姝e垯琛ㄨ揪寮忚嚜鍔ㄨ瘑鍒緭鍏ョ被鍨嬶細
+- **鎵嬫満鍙锋牸寮�**锛氬尮閰� `^1[3-9]\d{9}$`锛�1寮�澶达紝绗簩浣�3-9锛屽叡11浣嶆暟瀛楋級
+- **鐢ㄦ埛鍚嶆牸寮�**锛氫笉绗﹀悎鎵嬫満鍙锋牸寮忕殑瑙嗕负鐢ㄦ埛鍚�
+
+### 2. 鏌ヨ绛栫暐
+
+```java
+// 鍒ゆ柇鏄惁涓烘墜鏈哄彿
+if (username.matches("^1[3-9]\\d{9}$")) {
+    // 閫氳繃鎵嬫満鍙锋煡璇㈢敤鎴�
+    user = userService.selectUserByPhonenumber(username);
+} else {
+    // 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴�
+    user = userService.selectUserByUserName(username);
+}
+```
+
+## 淇敼鏂囦欢娓呭崟
+
+### 1. Service 鎺ュ彛灞�
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java`
+
+鏂板鏂规硶锛�
+```java
+/**
+ * 閫氳繃鎵嬫満鍙锋煡璇㈢敤鎴�
+ * 
+ * @param phonenumber 鎵嬫満鍙�
+ * @return 鐢ㄦ埛瀵硅薄淇℃伅
+ */
+public SysUser selectUserByPhonenumber(String phonenumber);
+```
+
+### 2. Service 瀹炵幇灞�
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java`
+
+瀹炵幇鏂规硶锛�
+```java
+@Override
+public SysUser selectUserByPhonenumber(String phonenumber) {
+    return userMapper.checkPhoneUnique(phonenumber);
+}
+```
+
+### 3. 鐢ㄦ埛璁よ瘉鏈嶅姟
+**鏂囦欢**: `ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java`
+
+淇敼 `loadUserByUsername` 鏂规硶锛�
+- 澧炲姞鎵嬫満鍙疯瘑鍒�昏緫
+- 鏍规嵁杈撳叆绫诲瀷璋冪敤涓嶅悓鐨勬煡璇㈡柟娉�
+- 澧炲姞璇︾粏鐨勬棩蹇楄褰�
+
+### 4. 鐧诲綍鏍¢獙鏈嶅姟
+**鏂囦欢**: `ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java`
+
+淇敼 `loginPreCheck` 鏂规硶锛�
+- 浼樺寲鐢ㄦ埛鍚嶉暱搴︽牎楠岋紙鎵嬫満鍙风櫥褰曟椂涓嶆牎楠岀敤鎴峰悕闀垮害锛�
+- 鏇存柊娉ㄩ噴璇存槑鏀寔鎵嬫満鍙风櫥褰�
+
+## 浣跨敤绀轰緥
+
+### 鍦烘櫙1锛氫娇鐢ㄨ处鍙风櫥褰�
+
+**璇锋眰**锛�
+```json
+POST /login
+{
+  "username": "admin",
+  "password": "admin123",
+  "code": "1234",
+  "uuid": "xxx-xxx-xxx"
+}
+```
+
+**澶勭悊娴佺▼**锛�
+1. 绯荤粺璇嗗埆 "admin" 涓嶆槸鎵嬫満鍙锋牸寮�
+2. 璋冪敤 `selectUserByUserName("admin")` 鏌ヨ鐢ㄦ埛
+3. 楠岃瘉瀵嗙爜锛岀敓鎴� Token
+
+### 鍦烘櫙2锛氫娇鐢ㄦ墜鏈哄彿鐧诲綍
+
+**璇锋眰**锛�
+```json
+POST /login
+{
+  "username": "13800138000",
+  "password": "password123",
+  "code": "1234",
+  "uuid": "xxx-xxx-xxx"
+}
+```
+
+**澶勭悊娴佺▼**锛�
+1. 绯荤粺璇嗗埆 "13800138000" 鏄墜鏈哄彿鏍煎紡
+2. 璋冪敤 `selectUserByPhonenumber("13800138000")` 鏌ヨ鐢ㄦ埛
+3. 楠岃瘉瀵嗙爜锛岀敓鎴� Token
+
+## 鏃ュ織璁板綍
+
+绯荤粺浼氳褰曡缁嗙殑鐧诲綍鏃ュ織锛屼究浜庤拷韪拰鎺掓煡闂锛�
+
+```
+灏濊瘯浣跨敤鐢ㄦ埛鍚嶇櫥褰曪細admin
+灏濊瘯浣跨敤鎵嬫満鍙风櫥褰曪細13800138000
+```
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 鎵嬫満鍙峰敮涓�鎬�
+- 绯荤粺涓瘡涓墜鏈哄彿蹇呴』鍞竴
+- 鎵嬫満鍙峰凡鍦ㄧ敤鎴风鐞嗕腑閰嶇疆鍞竴鎬ф牎楠�
+
+### 2. 瀵嗙爜鏍¢獙
+- 鏃犺浣跨敤鍝鏂瑰紡鐧诲綍锛屽瘑鐮佹牎楠岃鍒欑浉鍚�
+- 瀵嗙爜闀垮害闄愬埗锛�5-20浣�
+
+### 3. 鐢ㄦ埛鐘舵�佹鏌�
+- 璐﹀彿宸插垹闄ゃ�佸凡鍋滅敤鐨勭敤鎴锋棤娉曠櫥褰�
+- 鎵嬫満鍙峰拰璐﹀彿鐧诲綍鐨勭姸鎬佹鏌ラ�昏緫涓�鑷�
+
+### 4. 瀹夊叏鏈哄埗
+- IP 榛戝悕鍗曟満鍒剁户缁敓鏁�
+- 瀵嗙爜閿欒娆℃暟闄愬埗缁х画鐢熸晥
+- 楠岃瘉鐮佹満鍒剁户缁敓鏁�
+
+## 鍏煎鎬ц鏄�
+
+### 鍚戝悗鍏煎
+- 鉁� 鍘熸湁璐﹀彿鐧诲綍鏂瑰紡瀹屽叏鍏煎
+- 鉁� 鐜版湁鐢ㄦ埛鏃犻渶浠讳綍淇敼鍗冲彲缁х画浣跨敤
+- 鉁� API 鎺ュ彛鏈彂鐢熷彉鍖�
+
+### 鍓嶇閫傞厤
+鍓嶇鏃犻渶淇敼锛岀洿鎺ュ皢鐢ㄦ埛杈撳叆鐨勮处鍙锋垨鎵嬫満鍙蜂紶缁� `username` 瀛楁鍗冲彲锛�
+
+```javascript
+// 鍘熸湁浠g爜鏃犻渶淇敼
+login({
+  username: this.loginForm.username,  // 鍙互鏄处鍙锋垨鎵嬫満鍙�
+  password: this.loginForm.password,
+  code: this.loginForm.code,
+  uuid: this.loginForm.uuid
+})
+```
+
+## 娴嬭瘯寤鸿
+
+### 1. 鍔熻兘娴嬭瘯
+- [x] 浣跨敤璐﹀彿鐧诲綍鎴愬姛
+- [x] 浣跨敤鎵嬫満鍙风櫥褰曟垚鍔�
+- [x] 浣跨敤涓嶅瓨鍦ㄧ殑璐﹀彿鐧诲綍澶辫触
+- [x] 浣跨敤涓嶅瓨鍦ㄧ殑鎵嬫満鍙风櫥褰曞け璐�
+- [x] 浣跨敤閿欒瀵嗙爜鐧诲綍澶辫触
+
+### 2. 杈圭晫娴嬭瘯
+- [x] 鎵嬫満鍙锋牸寮忔牎楠岋紙闈�11浣嶃�侀潪1寮�澶寸瓑锛�
+- [x] 璐﹀彿闀垮害鏍¢獙
+- [x] 瀵嗙爜闀垮害鏍¢獙
+
+### 3. 瀹夊叏娴嬭瘯
+- [x] 瀵嗙爜閲嶈瘯娆℃暟闄愬埗
+- [x] IP 榛戝悕鍗曟満鍒�
+- [x] 楠岃瘉鐮佹満鍒�
+
+## 鎬荤粨
+
+姝ゆ鏀归�犲疄鐜颁簡鐢ㄦ埛鐧诲綍鏂瑰紡鐨勭伒娲诲寲锛岀敤鎴峰彲浠ユ牴鎹嚜宸辩殑涔犳儻閫夋嫨浣跨敤璐﹀彿鎴栨墜鏈哄彿鐧诲綍锛屾彁鍗囦簡鐢ㄦ埛浣撻獙銆傚悓鏃朵繚鎸佷簡绯荤粺鐨勫畨鍏ㄦ�у拰绋冲畾鎬э紝瀵圭幇鏈夊姛鑳藉畬鍏ㄥ吋瀹广��
diff --git "a/prd/\347\227\205\346\203\205ID\345\210\227\350\241\250\345\220\214\346\255\245\346\227\247\347\263\273\347\273\237\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md" "b/prd/\347\227\205\346\203\205ID\345\210\227\350\241\250\345\220\214\346\255\245\346\227\247\347\263\273\347\273\237\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md"
new file mode 100644
index 0000000..04632f9
--- /dev/null
+++ "b/prd/\347\227\205\346\203\205ID\345\210\227\350\241\250\345\220\214\346\255\245\346\227\247\347\263\273\347\273\237\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md"
@@ -0,0 +1,399 @@
+# 鐥呮儏ID鍒楄〃鍚屾鏃х郴缁熷姛鑳藉疄鐜版�荤粨
+
+## 瀹炵幇鏃堕棿
+2025-10-25
+
+## 鍔熻兘姒傝堪
+瀹屾垚浜嗙梾鎯匢D鍒楄〃锛坉iseaseIds锛変粠鍓嶇鎻愪氦鍒板悗绔瓨鍌紝鍐嶅埌鏃х郴缁熷悓姝ョ殑瀹屾暣鏁版嵁娴佺▼锛岀敤浜庡湪璋冨害鍗曞悓姝ユ椂浼犻�扥rdICD_ID鍙傛暟銆�
+
+## 瀹屾暣鏁版嵁娴佺▼
+
+```
+鍓嶇閫夋嫨鐥呮儏
+    鈫�
+[{ id: 1, icdCode: "A00.0", icdName: "闇嶄贡寮ц弻鎵�鑷寸殑闇嶄贡" }, ...]
+    鈫�
+鍓嶇鎻愪氦: diseaseIds: [1, 2, 3]
+    鈫�
+鍚庣VO鎺ユ敹: List<Long> diseaseIds
+    鈫�
+鏈嶅姟灞傝浆鎹�: String "1,2,3"
+    鈫�
+鏁版嵁搴撳瓨鍌�: disease_ids = "1,2,3"
+    鈫�
+鍚屾璇诲彇: getDiseaseIds() = "1,2,3"
+    鈫�
+鏍煎紡杞崲: ",1,2,3,"
+    鈫�
+鏃х郴缁熸帴鏀�: OrdICD_ID = ",1,2,3,"
+    鈫�
+鏃х郴缁熻В鏋�: SPLIT(OrdICD_ID, ",")
+    鈫�
+鍐欏叆鏃х郴缁�: ServiceOrder_ICD 琛�
+```
+
+## 宸插畬鎴愮殑淇敼
+
+### 1. 鍓嶇锛坈reate-emergency.vue锛�
+
+```javascript
+// 绗�1260琛�
+diseaseIds: this.selectedDiseases.map(d => d.id)
+```
+
+### 2. 鍚庣VO锛圱askCreateVO.java锛�
+
+```java
+/** 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛� */
+private List<Long> diseaseIds;
+
+public List<Long> getDiseaseIds() {
+    return diseaseIds;
+}
+
+public void setDiseaseIds(List<Long> diseaseIds) {
+    this.diseaseIds = diseaseIds;
+}
+```
+
+### 3. 瀹炰綋绫伙紙SysTaskEmergency.java锛�
+
+```java
+/** 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岄�楀彿鍒嗛殧锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛� */
+private String diseaseIds;
+
+public String getDiseaseIds() {
+    return diseaseIds;
+}
+
+public void setDiseaseIds(String diseaseIds) {
+    this.diseaseIds = diseaseIds;
+}
+```
+
+### 4. 鏈嶅姟灞傦紙SysTaskServiceImpl.java锛�
+
+```java
+// 瀵煎叆
+import java.util.stream.Collectors;
+
+// saveEmergencyInfo鏂规硶涓�
+// 璁剧疆鐥呮儏ID鍒楄〃锛堝皢List<Long>杞崲涓洪�楀彿鍒嗛殧鐨勫瓧绗︿覆锛�
+if (createVO.getDiseaseIds() != null && !createVO.getDiseaseIds().isEmpty()) {
+    String diseaseIdsStr = createVO.getDiseaseIds().stream()
+        .map(String::valueOf)
+        .collect(Collectors.joining(","));
+    emergencyInfo.setDiseaseIds(diseaseIdsStr);
+}
+```
+
+### 5. Mapper XML锛圫ysTaskEmergencyMapper.xml锛�
+
+```xml
+<!-- ResultMap -->
+<result property="diseaseIds" column="disease_ids" />
+
+<!-- selectSysTaskEmergencyVo -->
+select ..., disease_ids, ...
+
+<!-- insertSysTaskEmergency -->
+<if test="diseaseIds != null">disease_ids,</if>
+...
+<if test="diseaseIds != null">#{diseaseIds},</if>
+
+<!-- updateSysTaskEmergency -->
+<if test="diseaseIds != null">disease_ids = #{diseaseIds},</if>
+```
+
+### 6. 鏁版嵁搴撹〃
+
+```sql
+ALTER TABLE sys_task_emergency 
+ADD COLUMN IF NOT EXISTS disease_ids VARCHAR(500) 
+COMMENT '鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岄�楀彿鍒嗛殧锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛�' 
+AFTER passenger_phone;
+```
+
+### 7. 鏃х郴缁熷悓姝ワ紙LegacySystemSyncServiceImpl.java锛�
+
+```java
+// buildDispatchOrderParams鏂规硶涓坊鍔�
+// 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID锛岀敤浜庤瘖鏂璉CD锛�
+// 鏍煎紡锛氶�楀彿鍒嗛殧鐨処D鍒楄〃锛屽 ",1,2,3,"
+String ordIcdId = "";
+if (StringUtils.isNotEmpty(emergency.getDiseaseIds())) {
+    // 灏嗗瓨鍌ㄧ殑 "1,2,3" 鏍煎紡杞崲涓烘棫绯荤粺瑕佹眰鐨� ",1,2,3," 鏍煎紡
+    ordIcdId = "," + emergency.getDiseaseIds() + ",";
+    log.info("鐥呮儏ID鍒楄〃宸茶缃紝浠诲姟ID: {}, OrdICD_ID: {}", task.getTaskId(), ordIcdId);
+}
+params.put("OrdICD_ID", ordIcdId);
+params.put("OrdICD_ID_old", ""); // 鏃х梾鎯匢D鍒楄〃锛堢敤浜庡姣旀槸鍚﹂渶瑕佹洿鏂帮級
+```
+
+## 鏃х郴缁熷鐞嗛�昏緫
+
+鏃х郴缁燂紙admin_save_24.gds锛夋帴鏀跺埌OrdICD_ID鍙傛暟鍚庣殑澶勭悊娴佺▼锛�
+
+```vbscript
+'鍐欏叆璇婃柇ICD锛堢340-353琛岋級
+OrdICD_ID = SafeRequest(Request.form("OrdICD_ID"))
+OrdICD_ID_old = SafeRequest(Request.form("OrdICD_ID_old"))
+If OrdICD_ID <> OrdICD_ID_old Then
+    sql="delete from ServiceOrder_ICD where ServiceOrdIDDt="&ServiceOrdID
+    objConn.Execute sql
+    If OrdICD_ID<>"" then
+        OrdICD_IDSP = SPLIT(OrdICD_ID,",")
+        for i=1 to ubound(OrdICD_IDSP)-1
+            If OrdICD_IDSP(i)<>"" Then
+                sql="insert into ServiceOrder_ICD (ServiceOrdIDDt,icd_id) values ("&ServiceOrdID&","&OrdICD_IDSP(i)&")"
+                objConn.Execute sql
+            End If
+        Next
+    End If
+End If
+```
+
+**澶勭悊璇存槑**锛�
+1. 鎺ユ敹鏍煎紡涓� `,1,2,3,` 鐨勫瓧绗︿覆
+2. 浣跨敤閫楀彿鍒嗗壊瀛楃涓�
+3. 閬嶅巻鍒嗗壊鍚庣殑鏁扮粍锛堣烦杩囬灏剧┖鍏冪礌锛�
+4. 灏嗘瘡涓湁鏁堢殑鐥呮儏ID鍐欏叆 `ServiceOrder_ICD` 琛�
+
+## 鏁版嵁鏍煎紡璇存槑
+
+### 鍓嶇鍒板悗绔�
+- **鍓嶇閫夋嫨**锛歚selectedDiseases` 鏁扮粍锛屾瘡涓璞″寘鍚� `{ id, icdCode, icdName, sm }`
+- **鍓嶇鎻愪氦**锛歚diseaseIds: [1, 2, 3]` 锛圠ong鏁扮粍锛�
+- **鍚庣鎺ユ敹**锛歚List<Long> diseaseIds`
+
+### 鍚庣瀛樺偍
+- **鏈嶅姟灞傝浆鎹�**锛歚"1,2,3"` 锛堥�楀彿鍒嗛殧瀛楃涓诧級
+- **鏁版嵁搴撳瓨鍌�**锛歚disease_ids = "1,2,3"` 锛圴ARCHAR(500)锛�
+
+### 鍚屾鍒版棫绯荤粺
+- **璇诲彇鏍煎紡**锛歚"1,2,3"`
+- **杞崲鏍煎紡**锛歚,1,2,3,` 锛堥灏炬坊鍔犻�楀彿锛�
+- **鍙傛暟鍚嶇О**锛歚OrdICD_ID`
+- **鏃х郴缁熸帴鏀�**锛歏BScript閫氳繃SPLIT鍑芥暟鍒嗗壊骞跺啓鍏ユ暟鎹簱
+
+## 鏂囦欢娓呭崟
+
+### 宸蹭慨鏀规枃浠�
+1. `app/pages/task/create-emergency.vue` - 鍓嶇浠诲姟鍒涘缓椤甸潰
+2. `ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java` - 浠诲姟鍒涘缓VO
+3. `ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java` - 鎬ユ晳杞繍瀹炰綋绫�
+4. `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java` - 浠诲姟鏈嶅姟瀹炵幇绫�
+5. `ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml` - MyBatis鏄犲皠鏂囦欢
+6. `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java` - 鏃х郴缁熷悓姝ユ湇鍔�
+
+### 鏂板鏂囦欢
+1. `sql/update_sys_task_emergency_add_disease_ids.sql` - 鏁版嵁搴撹〃缁撴瀯鏇存柊鑴氭湰
+2. `sql/sys_task_emergency.sql` - 鏇存柊鍚庣殑寤鸿〃鑴氭湰
+3. `prd/鐥呮儏閫夋嫨鍒楄〃瀛樺偍鍔熻兘璇存槑.md` - 璇︾粏鍔熻兘璇存槑鏂囨。
+4. `prd/鐥呮儏ID鍒楄〃鍚屾鏃х郴缁熷姛鑳藉疄鐜版�荤粨.md` - 鏈枃妗�
+
+## 閮ㄧ讲姝ラ
+
+### 1. 鏁版嵁搴撳崌绾�
+
+```bash
+# 鍦∕ySQL涓墽琛�
+mysql -u root -p your_database < sql/update_sys_task_emergency_add_disease_ids.sql
+```
+
+鎴栨墜鍔ㄦ墽琛岋細
+```sql
+ALTER TABLE sys_task_emergency 
+ADD COLUMN IF NOT EXISTS disease_ids VARCHAR(500) 
+COMMENT '鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岄�楀彿鍒嗛殧锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛�' 
+AFTER passenger_phone;
+```
+
+### 2. 鍚庣缂栬瘧閮ㄧ讲
+
+```bash
+# 閲嶆柊缂栬瘧鍚庣椤圭洰
+mvn clean package
+
+# 閲嶅惎鍚庣鏈嶅姟
+# 鏍规嵁瀹為檯閮ㄧ讲鏂瑰紡閲嶅惎
+```
+
+### 3. 鍓嶇缂栬瘧閮ㄧ讲
+
+```bash
+# 缂栬瘧H5鐗堟湰
+npm run build:h5
+
+# 鎴栫紪璇戝井淇″皬绋嬪簭鐗堟湰
+npm run build:mp-weixin
+```
+
+## 娴嬭瘯楠岃瘉
+
+### 1. 鍔熻兘娴嬭瘯
+
+#### 娴嬭瘯姝ラ锛�
+1. 鎵撳紑鎬ユ晳杞繍浠诲姟鍒涘缓椤甸潰
+2. 濉啓鎮h�呬俊鎭�佸尰闄俊鎭瓑蹇呭~瀛楁
+3. 閫夋嫨涓�涓垨澶氫釜鐥呮儏锛圛CD-10鐤剧梾锛�
+4. 淇濆瓨浠诲姟
+
+#### 楠岃瘉鐐癸細
+- [ ] 鍓嶇鑳芥甯搁�夋嫨鐥呮儏
+- [ ] 鎻愪氦鏃剁梾鎯匢D姝g‘浼犻�掑埌鍚庣
+- [ ] 鍚庣姝g‘淇濆瓨鍒版暟鎹簱
+- [ ] disease_ids瀛楁鏍煎紡姝g‘锛堝锛�"1,2,3"锛�
+
+### 2. 鏁版嵁搴撻獙璇�
+
+```sql
+-- 鏌ヨ鏈�鏂板垱寤虹殑浠诲姟
+SELECT 
+    t.task_id,
+    t.task_code,
+    e.disease_ids,
+    e.patient_name
+FROM sys_task t
+LEFT JOIN sys_task_emergency e ON t.task_id = e.task_id
+WHERE t.task_type = 'EMERGENCY_TRANSFER'
+ORDER BY t.create_time DESC
+LIMIT 10;
+```
+
+**棰勬湡缁撴灉**锛�
+- disease_ids 瀛楁鍖呭惈閫楀彿鍒嗛殧鐨処D鍒楄〃
+- 鏍煎紡濡傦細"1,2,3" 鎴� "5,10,15"
+
+### 3. 鏃х郴缁熷悓姝ラ獙璇�
+
+#### 娴嬭瘯姝ラ锛�
+1. 鍒涘缓鍖呭惈鐥呮儏鐨勬�ユ晳杞繍浠诲姟
+2. 绛夊緟瀹氭椂浠诲姟鑷姩鍚屾锛屾垨鎵嬪姩瑙﹀彂鍚屾
+3. 妫�鏌ュ悓姝ユ棩蹇�
+
+#### 楠岃瘉鐐癸細
+- [ ] 鍚屾鏃ュ織涓寘鍚� "鐥呮儏ID鍒楄〃宸茶缃�" 淇℃伅
+- [ ] OrdICD_ID鍙傛暟鏍煎紡姝g‘锛堝锛�",1,2,3,"锛�
+- [ ] 鏃х郴缁� ServiceOrder_ICD 琛ㄤ腑姝g‘鍐欏叆璁板綍
+
+#### 鏃ュ織鏌ョ湅锛�
+```bash
+# 鏌ョ湅鍚庣鏃ュ織
+tail -f logs/sys-info.log | grep "鐥呮儏ID"
+```
+
+**棰勬湡鏃ュ織**锛�
+```
+鐥呮儏ID鍒楄〃宸茶缃紝浠诲姟ID: 123, OrdICD_ID: ,1,2,3,
+```
+
+#### 鏃х郴缁熸暟鎹獙璇侊細
+```sql
+-- 鍦ㄦ棫绯荤粺鏁版嵁搴撲腑鏌ヨ
+SELECT 
+    ServiceOrdID,
+    icd_id
+FROM ServiceOrder_ICD
+WHERE ServiceOrdIDDt = [瀵瑰簲鐨凷erviceOrdID]
+```
+
+**棰勬湡缁撴灉**锛�
+- 姣忎釜鐥呮儏ID鏈変竴鏉¤褰�
+- icd_id 鍊间笌鏂扮郴缁熼�夋嫨鐨勭梾鎯匢D涓�鑷�
+
+### 4. 杈圭晫娴嬭瘯
+
+#### 娴嬭瘯鍦烘櫙锛�
+1. **涓嶉�夋嫨鐥呮儏**锛�
+   - disease_ids 搴斾负 NULL
+   - OrdICD_ID 搴斾负绌哄瓧绗︿覆 ""
+   - 鏃х郴缁熶笉搴斿啓鍏� ServiceOrder_ICD 琛�
+
+2. **閫夋嫨鍗曚釜鐥呮儏**锛�
+   - disease_ids = "1"
+   - OrdICD_ID = ",1,"
+
+3. **閫夋嫨澶氫釜鐥呮儏**锛�
+   - disease_ids = "1,2,3,4,5"
+   - OrdICD_ID = ",1,2,3,4,5,"
+
+4. **鐥呮儏ID鍖呭惈鐗规畩瀛楃**锛堢悊璁轰笂涓嶅簲鍑虹幇锛夛細
+   - 楠岃瘉绯荤粺鏄惁姝g‘澶勭悊
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 鏁版嵁鏍煎紡涓�鑷存��
+- 鏂扮郴缁熷瓨鍌細`"1,2,3"` 锛堟棤棣栧熬閫楀彿锛�
+- 鏃х郴缁熸帴鏀讹細`,1,2,3,` 锛堟湁棣栧熬閫楀彿锛�
+- 杞崲閫昏緫锛歚"," + diseaseIds + ","`
+
+### 2. 瀛楁闀垮害闄愬埗
+- VARCHAR(500) 绾﹀彲瀛樺偍100涓梾鎯匢D
+- 骞冲潎姣忎釜ID鍗犵敤5涓瓧绗︼紙鍖呮嫭閫楀彿锛�
+- 濡傞渶瀛樺偍鏇村锛岄渶璋冩暣瀛楁闀垮害
+
+### 3. NULL鍊煎鐞�
+- 鏈�夋嫨鐥呮儏鏃讹紝disease_ids 涓� NULL
+- 鍚屾鏃跺垽鏂細`if (StringUtils.isNotEmpty(emergency.getDiseaseIds()))`
+- 纭繚涓嶄紶閫� null 缁欐棫绯荤粺
+
+### 4. 鍏煎鎬ц�冭檻
+- 鍘嗗彶鏁版嵁鐨� disease_ids 瀛楁涓� NULL
+- 鏃х郴缁熻兘姝g‘澶勭悊绌虹殑 OrdICD_ID 鍙傛暟
+- 涓嶅奖鍝嶇幇鏈夊姛鑳界殑姝e父杩愯
+
+### 5. 鍚屾鏃舵満
+- 璋冨害鍗曞悓姝ユ椂鎵嶄娇鐢� disease_ids
+- 鏈嶅姟鍗曞悓姝ヤ笉鍙楀奖鍝�
+- 纭繚鍏堝悓姝ユ湇鍔″崟锛屽啀鍚屾璋冨害鍗�
+
+## 甯歌闂澶勭悊
+
+### Q1: 鏁版嵁搴撴坊鍔犲瓧娈靛け璐�
+**鐥囩姸**锛氭墽琛孉LTER TABLE璇彞鎶ラ敊
+
+**瑙e喅鏂规**锛�
+1. 妫�鏌ヨ〃鏄惁瀛樺湪锛歚SHOW TABLES LIKE 'sys_task_emergency';`
+2. 妫�鏌ュ瓧娈垫槸鍚﹀凡瀛樺湪锛歚DESC sys_task_emergency;`
+3. 濡傛灉宸插瓨鍦紝璺宠繃姝ゆ楠�
+
+### Q2: 鍚屾鏃禣rdICD_ID涓虹┖
+**鐥囩姸**锛氭棩蹇楁樉绀� "OrdICD_ID: "
+
+**鍙兘鍘熷洜**锛�
+1. 鍒涘缓浠诲姟鏃舵湭閫夋嫨鐥呮儏
+2. disease_ids 瀛楁鏈纭繚瀛�
+
+**鎺掓煡姝ラ**锛�
+```sql
+-- 鏌ヨ浠诲姟鐨刣isease_ids瀛楁
+SELECT disease_ids FROM sys_task_emergency WHERE task_id = [浠诲姟ID];
+```
+
+### Q3: 鏃х郴缁熸湭鍐欏叆ServiceOrder_ICD琛�
+**鐥囩姸**锛歋erviceOrder_ICD琛ㄤ腑鏃犺褰�
+
+**鍙兘鍘熷洜**锛�
+1. OrdICD_ID 鏍煎紡閿欒
+2. ServiceOrdID 涓嶅瓨鍦�
+3. 鏃х郴缁熻剼鏈墽琛屽け璐�
+
+**鎺掓煡姝ラ**锛�
+1. 妫�鏌ュ悓姝ユ棩蹇椾腑鐨凮rdICD_ID鍊�
+2. 纭鏍煎紡涓� `,1,2,3,`
+3. 妫�鏌ユ棫绯荤粺鏁版嵁搴撴棩蹇�
+
+## 鐩稿叧鍙傝��
+
+- [鐥呮儏閫夋嫨鍒楄〃瀛樺偍鍔熻兘璇存槑.md](./鐥呮儏閫夋嫨鍒楄〃瀛樺偍鍔熻兘璇存槑.md)
+- [鎬ユ晳杞繍浠诲姟鍒涘缓娴佺▼](../README.md)
+- [鏃х郴缁熷悓姝ユ満鍒惰鏄嶿(../oldCode/README.md)
+
+## 鏇存柊鍘嗗彶
+
+- 2025-10-25锛氬畬鎴愮梾鎯匢D鍒楄〃浠庡墠绔埌鏃х郴缁熺殑瀹屾暣鏁版嵁娴佺▼
+  - 鍓嶇鎻愪氦鐥呮儏ID鍒楄〃
+  - 鍚庣瀛樺偍鍒版暟鎹簱
+  - 鏃х郴缁熷悓姝ュ疄鐜�
+  - 鏂囨。缂栧啓瀹屾垚
diff --git "a/prd/\347\227\205\346\203\205\351\200\211\346\213\251\345\210\227\350\241\250\345\255\230\345\202\250\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\347\227\205\346\203\205\351\200\211\346\213\251\345\210\227\350\241\250\345\255\230\345\202\250\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..7805249
--- /dev/null
+++ "b/prd/\347\227\205\346\203\205\351\200\211\346\213\251\345\210\227\350\241\250\345\255\230\345\202\250\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,324 @@
+# 鐥呮儏閫夋嫨鍒楄〃瀛樺偍鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+鍦ㄦ�ユ晳杞繍浠诲姟鍒涘缓椤甸潰鐨勭梾鎯呴�夋嫨鍔熻兘涓紝娣诲姞浜嗙梾鎯匢D鍒楄〃锛坉iseaseIds锛夊瓧娈电殑瀛樺偍鍔熻兘锛岀敤浜庡湪鍚屾璋冨害鍗曞埌鏃х郴缁熸椂浼犻�扥rdICD_ID鍙傛暟銆�
+
+## 瀹炵幇鏃堕棿
+2025-10-25
+
+## 闇�姹傝儗鏅�
+- 鍦ㄥ垱寤烘�ユ晳杞繍浠诲姟鏃讹紝鐢ㄦ埛鍙互閫夋嫨澶氫釜鐥呮儏锛圛CD-10鐤剧梾鍒嗙被锛�
+- 闇�瑕佸皢閫変腑鐨勭梾鎯匢D鍒楄〃淇濆瓨鍒版暟鎹簱
+- 鍦ㄥ悓姝ヨ皟搴﹀崟鍒版棫绯荤粺鏃讹紝闇�瑕佷娇鐢ㄨ繖浜涚梾鎯匢D浣滀负OrdICD_ID鍙傛暟
+
+## 鏁版嵁娴佽浆
+
+### 鍓嶇 鈫� 鍚庣
+1. 鐢ㄦ埛鍦ㄧ梾鎯呴�夋嫨鍣ㄤ腑閫夋嫨涓�涓垨澶氫釜鐥呮儏
+2. 鍓嶇灏嗛�変腑鐨勭梾鎯呭璞℃暟缁� `selectedDiseases` 杞崲涓篒D鏁扮粍
+3. 鍦ㄦ彁浜や换鍔℃椂锛屽皢 `diseaseIds` 浣滀负鍙傛暟浼犻�掔粰鍚庣
+
+### 鍚庣瀛樺偍
+1. 鍚庣鎺ユ敹 `List<Long> diseaseIds`
+2. 灏咺D鍒楄〃杞崲涓洪�楀彿鍒嗛殧鐨勫瓧绗︿覆锛堝锛�"1,2,3"锛�
+3. 淇濆瓨鍒� `sys_task_emergency` 琛ㄧ殑 `disease_ids` 瀛楁
+
+### 鏃х郴缁熷悓姝�
+1. 浠庢暟鎹簱璇诲彇 `disease_ids` 瀛楁
+2. 灏嗛�楀彿鍒嗛殧鐨勫瓧绗︿覆瑙f瀽涓篒D鍒楄〃
+3. 浣滀负 `OrdICD_ID` 鍙傛暟浼犻�掔粰鏃х郴缁熻皟搴﹀崟鎺ュ彛
+
+## 鎶�鏈疄鐜�
+
+### 1. 鍓嶇淇敼锛坈reate-emergency.vue锛�
+
+#### buildSubmitData 鏂规硶娣诲姞
+```javascript
+const submitData = {
+  // ... 鍏朵粬瀛楁
+  
+  // 鐥呮儏ID鍒楄〃锛堢敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛�
+  diseaseIds: this.selectedDiseases.map(d => d.id),
+  
+  // ... 鍏朵粬瀛楁
+}
+```
+
+#### 鏁版嵁绀轰緥
+```javascript
+// selectedDiseases 鏁扮粍缁撴瀯
+[
+  {
+    id: 1,
+    icdCode: "A00.0",
+    icdName: "闇嶄贡寮ц弻鎵�鑷寸殑闇嶄贡",
+    sm: "闇嶄贡"
+  },
+  {
+    id: 2,
+    icdCode: "A00.1",
+    icdName: "鍩冨皵鎵樺姬鑿屾墍鑷寸殑闇嶄贡",
+    sm: "闇嶄贡"
+  }
+]
+
+// 杞崲鍚庣殑 diseaseIds
+[1, 2]
+```
+
+### 2. 鍚庣VO淇敼锛圱askCreateVO.java锛�
+
+```java
+/** 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛� */
+private List<Long> diseaseIds;
+
+public List<Long> getDiseaseIds() {
+    return diseaseIds;
+}
+
+public void setDiseaseIds(List<Long> diseaseIds) {
+    this.diseaseIds = diseaseIds;
+}
+```
+
+### 3. 瀹炰綋绫讳慨鏀癸紙SysTaskEmergency.java锛�
+
+```java
+/** 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岄�楀彿鍒嗛殧锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛� */
+private String diseaseIds;
+
+public String getDiseaseIds() {
+    return diseaseIds;
+}
+
+public void setDiseaseIds(String diseaseIds) {
+    this.diseaseIds = diseaseIds;
+}
+```
+
+### 4. 鏈嶅姟灞備慨鏀癸紙SysTaskServiceImpl.java锛�
+
+#### 瀵煎叆渚濊禆
+```java
+import java.util.stream.Collectors;
+```
+
+#### saveEmergencyInfo 鏂规硶娣诲姞
+```java
+private void saveEmergencyInfo(Long taskId, TaskCreateVO createVO) {
+    // ... 鍏朵粬浠g爜
+    
+    // 璁剧疆鐥呮儏ID鍒楄〃锛堝皢List<Long>杞崲涓洪�楀彿鍒嗛殧鐨勫瓧绗︿覆锛�
+    if (createVO.getDiseaseIds() != null && !createVO.getDiseaseIds().isEmpty()) {
+        String diseaseIdsStr = createVO.getDiseaseIds().stream()
+            .map(String::valueOf)
+            .collect(Collectors.joining(","));
+        emergencyInfo.setDiseaseIds(diseaseIdsStr);
+    }
+    
+    // ... 鍏朵粬浠g爜
+}
+```
+
+### 5. Mapper XML淇敼锛圫ysTaskEmergencyMapper.xml锛�
+
+#### ResultMap娣诲姞
+```xml
+<result property="diseaseIds" column="disease_ids" />
+```
+
+#### selectSysTaskEmergencyVo娣诲姞
+```xml
+select id, task_id, ..., passenger_phone, disease_ids, document_type_id, ...
+```
+
+#### insertSysTaskEmergency娣诲姞
+```xml
+<if test="diseaseIds != null">disease_ids,</if>
+<!-- values閮ㄥ垎 -->
+<if test="diseaseIds != null">#{diseaseIds},</if>
+```
+
+#### updateSysTaskEmergency娣诲姞
+```xml
+<if test="diseaseIds != null">disease_ids = #{diseaseIds},</if>
+```
+
+### 6. 鏁版嵁搴撹〃淇敼
+
+#### 鏂板瀛楁
+```sql
+ALTER TABLE sys_task_emergency 
+ADD COLUMN IF NOT EXISTS disease_ids VARCHAR(500) 
+COMMENT '鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岄�楀彿鍒嗛殧锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛�' 
+AFTER passenger_phone;
+```
+
+#### 瀛楁璇存槑
+- 瀛楁鍚嶏細`disease_ids`
+- 绫诲瀷锛歚VARCHAR(500)`
+- 鍙┖锛氭槸
+- 浣嶇疆锛氬湪 `passenger_phone` 瀛楁涔嬪悗
+- 瀛樺偍鏍煎紡锛氶�楀彿鍒嗛殧鐨処D鍒楄〃锛屽 "1,2,3"
+
+## 鏁版嵁瀛樺偍绀轰緥
+
+### 鍓嶇鎻愪氦鏁版嵁
+```json
+{
+  "taskType": "EMERGENCY_TRANSFER",
+  "diseaseIds": [1, 2, 3],
+  "patient": { ... },
+  "hospitalOut": { ... },
+  ...
+}
+```
+
+### 鍚庣澶勭悊
+```java
+// List<Long> -> String
+[1, 2, 3] -> "1,2,3"
+```
+
+### 鏁版嵁搴撳瓨鍌�
+```
+disease_ids: "1,2,3"
+```
+
+### 鍚屾鍒版棫绯荤粺锛堝緟瀹炵幇锛�
+```java
+// String -> List<Long>
+"1,2,3" -> [1, 2, 3]
+
+// 浼犻�掔粰鏃х郴缁�
+OrdICD_ID = 鐥呮儏ID鍒楄〃鐨勭涓�涓狪D锛堟垨鎷兼帴鐨勫瓧绗︿覆锛屽叿浣撴牴鎹棫绯荤粺鎺ュ彛瑕佹眰锛�
+```
+
+## 鏂囦欢娓呭崟
+
+### 宸蹭慨鏀规枃浠�
+1. `app/pages/task/create-emergency.vue` - 鍓嶇浠诲姟鍒涘缓椤甸潰
+2. `ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java` - 浠诲姟鍒涘缓VO
+3. `ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java` - 鎬ユ晳杞繍瀹炰綋绫�
+4. `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java` - 浠诲姟鏈嶅姟瀹炵幇绫�
+5. `ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml` - MyBatis鏄犲皠鏂囦欢
+
+### 鏂板鏂囦欢
+1. `sql/update_sys_task_emergency_add_disease_ids.sql` - 鏁版嵁搴撹〃缁撴瀯鏇存柊鑴氭湰
+2. `prd/鐥呮儏閫夋嫨鍒楄〃瀛樺偍鍔熻兘璇存槑.md` - 鏈枃妗�
+
+## 鏁版嵁搴撳崌绾ф楠�
+
+1. 鎵цSQL鑴氭湰娣诲姞瀛楁锛�
+   ```bash
+   mysql -u root -p your_database < sql/update_sys_task_emergency_add_disease_ids.sql
+   ```
+
+2. 楠岃瘉瀛楁鏄惁娣诲姞鎴愬姛锛�
+   ```sql
+   DESC sys_task_emergency;
+   ```
+
+3. 纭 `disease_ids` 瀛楁瀛樺湪涓旂被鍨嬫纭�
+
+## 娴嬭瘯瑕佺偣
+
+### 1. 鍔熻兘娴嬭瘯
+- [ ] 鍒涘缓浠诲姟鏃堕�夋嫨鍗曚釜鐥呮儏锛岄獙璇佹槸鍚︽纭繚瀛�
+- [ ] 鍒涘缓浠诲姟鏃堕�夋嫨澶氫釜鐥呮儏锛岄獙璇佹槸鍚︽纭繚瀛樹负閫楀彿鍒嗛殧鐨勫瓧绗︿覆
+- [ ] 鍒涘缓浠诲姟鏃朵笉閫夋嫨鐥呮儏锛岄獙璇佸瓧娈典负NULL
+- [ ] 鏌ヨ浠诲姟璇︽儏锛岄獙璇佺梾鎯匢D鍒楄〃鏄惁姝g‘杩斿洖
+
+### 2. 鏁版嵁楠岃瘉
+- [ ] 妫�鏌ユ暟鎹簱涓� `disease_ids` 瀛楁鐨勫�兼牸寮忔槸鍚︽纭�
+- [ ] 楠岃瘉ID鍒楄〃鐨勯『搴忔槸鍚︿笌鍓嶇閫夋嫨椤哄簭涓�鑷�
+
+### 3. 杈圭晫娴嬭瘯
+- [ ] 閫夋嫨澶ч噺鐥呮儏锛堟帴杩慥ARCHAR(500)闄愬埗锛�
+- [ ] 鍖呭惈鐗规畩ID锛堝0銆佽礋鏁般�佽秴澶ф暟瀛楋級
+
+## 鍚庣画宸ヤ綔
+
+### 宸插疄鐜板姛鑳�
+
+1. **鏃х郴缁熷悓姝ラ�昏緫**锛堚渽 宸插畬鎴愶級锛�
+   - 鍦� `LegacySystemSyncServiceImpl.buildDispatchOrderParams` 鏂规硶涓疄鐜颁簡璋冨害鍗曞悓姝�
+   - 浠� `disease_ids` 瀛楁璇诲彇鐥呮儏ID鍒楄〃
+   - 灏嗘牸寮忎粠 "1,2,3" 杞崲涓� ",1,2,3," 鍚庝紶閫掔粰鏃х郴缁熺殑 `OrdICD_ID` 鍙傛暟
+   - 鏃х郴缁熶細灏嗚繖浜汭D鍐欏叆 `ServiceOrder_ICD` 琛紝鐢ㄤ簬鐥呮儏璇婃柇
+
+#### 瀹炵幇浠g爜锛�
+```java
+// LegacySystemSyncServiceImpl.buildDispatchOrderParams鏂规硶涓坊鍔�
+
+// 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID锛岀敤浜庤瘖鏂璉CD锛�
+// 鏍煎紡锛氶�楀彿鍒嗛殧鐨処D鍒楄〃锛屽 ",1,2,3,"
+String ordIcdId = "";
+if (StringUtils.isNotEmpty(emergency.getDiseaseIds())) {
+    // 灏嗗瓨鍌ㄧ殑 "1,2,3" 鏍煎紡杞崲涓烘棫绯荤粺瑕佹眰鐨� ",1,2,3," 鏍煎紡
+    ordIcdId = "," + emergency.getDiseaseIds() + ",";
+    log.info("鐥呮儏ID鍒楄〃宸茶缃紝浠诲姟ID: {}, OrdICD_ID: {}", task.getTaskId(), ordIcdId);
+}
+params.put("OrdICD_ID", ordIcdId);
+params.put("OrdICD_ID_old", ""); // 鏃х梾鎯匢D鍒楄〃锛堢敤浜庡姣旀槸鍚﹂渶瑕佹洿鏂帮級
+```
+
+#### 鏃х郴缁熷鐞嗛�昏緫锛坅dmin_save_24.gds 绗�340-353琛岋級锛�
+```vbscript
+'鍐欏叆璇婃柇ICD
+OrdICD_ID = SafeRequest(Request.form("OrdICD_ID"))
+OrdICD_ID_old = SafeRequest(Request.form("OrdICD_ID_old"))
+If OrdICD_ID <> OrdICD_ID_old Then
+    sql="delete from ServiceOrder_ICD where ServiceOrdIDDt="&ServiceOrdID
+    objConn.Execute sql
+    If OrdICD_ID<>"" then
+        OrdICD_IDSP = SPLIT(OrdICD_ID,",")
+        for i=1 to ubound(OrdICD_IDSP)-1
+            If OrdICD_IDSP(i)<>"" Then
+                sql="insert into ServiceOrder_ICD (ServiceOrdIDDt,icd_id) values ("&ServiceOrdID&","&OrdICD_IDSP(i)&")"
+                objConn.Execute sql
+            End If
+        Next
+    End If
+End If
+```
+
+### 寰呭疄鐜板姛鑳�
+
+1. **浠诲姟璇︽儏椤甸潰鏄剧ず**锛�
+   - 鍦ㄤ换鍔¤鎯呴〉闈㈡樉绀洪�変腑鐨勭梾鎯呭垪琛�
+   - 鏍规嵁 `disease_ids` 鏌ヨ鐥呮儏璇︾粏淇℃伅
+
+2. **浠诲姟缂栬緫鍔熻兘**锛�
+   - 鏀寔鍦ㄧ紪杈戜换鍔℃椂淇敼鐥呮儏閫夋嫨
+   - 鏇存柊 `disease_ids` 瀛楁
+
+## 娉ㄦ剰浜嬮」
+
+1. **鏁版嵁鏍煎紡**锛�
+   - 鍓嶇浼犻�掞細`List<Long>` 绫诲瀷
+   - 鏁版嵁搴撳瓨鍌細`String` 绫诲瀷锛堥�楀彿鍒嗛殧锛�
+   - 纭繚杞崲閫昏緫姝g‘锛岄伩鍏嶆暟鎹涪澶�
+
+2. **瀛楁闀垮害**锛�
+   - VARCHAR(500) 鍙瓨鍌ㄧ害100涓狪D锛堝亣璁炬瘡涓狪D骞冲潎5涓瓧绗︼級
+   - 濡傛灉闇�瑕佸瓨鍌ㄦ洿澶氱梾鎯咃紝闇�瑕佽皟鏁村瓧娈甸暱搴�
+
+3. **鍏煎鎬�**锛�
+   - 鏃ф暟鎹殑 `disease_ids` 瀛楁涓篘ULL
+   - 鏌ヨ鍜屽睍绀烘椂闇�瑕佸鐞哊ULL鍊�
+
+4. **鍚屾鏃舵満**锛�
+   - 鐥呮儏ID鍒楄〃涓昏鐢ㄤ簬璋冨害鍗曞悓姝�
+   - 涓嶅奖鍝嶆湇鍔″崟鐨勫垱寤哄拰鍚屾
+
+## 鐩稿叧璧勬枡
+
+- ICD-10鍥介檯鐤剧梾鍒嗙被鏍囧噯
+- 鏃х郴缁熻皟搴﹀崟鎺ュ彛鏂囨。锛歛dmin_save_24.gds
+- OrdICD_ID鍙傛暟璇存槑锛氭牸寮忎负 ",1,2,3,"锛岀敤閫楀彿鍒嗛殧锛屾棫绯荤粺浼氳В鏋愬悗鍐欏叆 ServiceOrder_ICD 琛�
+
+## 鏇存柊璁板綍
+
+- 2025-10-25锛氬垵濮嬬増鏈紝瀹炵幇鍓嶇銆佸悗绔拰鏁版嵁搴撳瓨鍌�
+- 2025-10-25锛氬畬鎴愭棫绯荤粺鍚屾閫昏緫锛屽疄鐜癘rdICD_ID鍙傛暟浼犻��
diff --git "a/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227-\345\277\253\351\200\237\345\274\200\345\247\213.md" "b/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227-\345\277\253\351\200\237\345\274\200\345\247\213.md"
new file mode 100644
index 0000000..8dc78fc
--- /dev/null
+++ "b/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227-\345\277\253\351\200\237\345\274\200\345\247\213.md"
@@ -0,0 +1,215 @@
+# 鐧惧害鍦板浘璺濈璁$畻 - 蹇�熷紑濮�
+
+## 馃殌 蹇�熼厤缃�(3姝�)
+
+### 1锔忊儯 閰嶇疆鐧惧害鍦板浘API Key
+
+鍦� `ruoyi-admin/src/main/resources/application.yml` 涓厤缃�:
+
+```yaml
+# 鐧惧害鍦板浘閰嶇疆
+baidu:
+  map:
+    ak: YOUR_BAIDU_MAP_AK_HERE  # 鏇挎崲涓烘偍鐨勭櫨搴﹀湴鍥続K
+```
+
+**鑾峰彇AK**: https://lbsyun.baidu.com/ 鈫� 鎺у埗鍙� 鈫� 搴旂敤绠$悊 鈫� 鍒涘缓搴旂敤
+
+### 2锔忊儯 閲嶅惎鍚庣鏈嶅姟
+
+閰嶇疆瀹屾垚鍚庨噸鍚� Spring Boot 搴旂敤鍗冲彲銆�
+
+### 3锔忊儯 璋冪敤鎺ュ彛
+
+## 馃搶 涓や釜鏍稿績鎺ュ彛
+
+### 鎺ュ彛1: 璁$畻涓や釜鍧愭爣涔嬮棿鐨勮窛绂�
+
+**鎺ュ彛**: `GET /system/gps/baidu/route/driving`
+
+**鍙傛暟**:
+- `origin`: 璧风偣鍧愭爣 (绾害,缁忓害)
+- `destination`: 缁堢偣鍧愭爣 (绾害,缁忓害)
+
+**绀轰緥**:
+```
+GET /system/gps/baidu/route/driving?origin=40.056878,116.30815&destination=31.222965,121.505821
+```
+
+**鍓嶇璋冪敤**:
+```javascript
+import { baiduRouteDriving } from '@/api/map'
+
+baiduRouteDriving('40.056878,116.30815', '31.222965,121.505821')
+  .then(res => {
+    const result = JSON.parse(res.data)
+    const distanceKm = (result.result.routes[0].distance / 1000).toFixed(2)
+    console.log('璺濈:', distanceKm + ' 鍏噷')
+  })
+```
+
+### 鎺ュ彛2: 璁$畻涓や釜鍦板潃涔嬮棿鐨勮窛绂�
+
+**涓ゆ璧�**:
+
+**姝ラ1**: 鍦板潃杞潗鏍�
+
+```javascript
+import { baiduGeocoding } from '@/api/map'
+
+// 璧风偣鍦板潃杞潗鏍�
+baiduGeocoding('骞垮窞甯傚ぉ娌冲尯澶╂渤璺�', '骞垮窞甯�')
+  .then(res => {
+    const result = JSON.parse(res.data)
+    const lat = result.result.location.lat
+    const lng = result.result.location.lng
+    console.log('璧风偣鍧愭爣:', lat + ',' + lng)
+  })
+```
+
+**姝ラ2**: 鍧愭爣璁$畻璺濈 (鍚屾帴鍙�1)
+
+**鎴栦娇鐢ㄧ粍鍚堟帴鍙�**:
+
+```javascript
+import { baiduDistanceByAddress, baiduRouteDriving } from '@/api/map'
+
+async function calcDistance() {
+  // 绗�1姝�: 鑾峰彇鍧愭爣
+  const geocode = await baiduDistanceByAddress(
+    '骞垮窞甯傚ぉ娌冲尯澶╂渤璺�', '骞垮窞甯�',
+    '骞垮窞甯傝秺绉�鍖轰腑灞辫矾', '骞垮窞甯�'
+  )
+  
+  const fromGeo = JSON.parse(geocode.data.fromGeocoding)
+  const toGeo = JSON.parse(geocode.data.toGeocoding)
+  
+  const origin = fromGeo.result.location.lat + ',' + fromGeo.result.location.lng
+  const dest = toGeo.result.location.lat + ',' + toGeo.result.location.lng
+  
+  // 绗�2姝�: 璁$畻璺濈
+  const route = await baiduRouteDriving(origin, dest)
+  const result = JSON.parse(route.data)
+  const distanceKm = (result.result.routes[0].distance / 1000).toFixed(2)
+  
+  console.log('璺濈:', distanceKm + ' 鍏噷')
+  return distanceKm
+}
+```
+
+## 馃挕 瀹炴垬鍦烘櫙
+
+### 鍦烘櫙: 浠诲姟鍒涘缓鏃惰嚜鍔ㄨ绠楄窛绂�
+
+```javascript
+// 鍦ㄤ换鍔¤〃鍗曠粍浠朵腑
+data() {
+  return {
+    form: {
+      startAddress: '',
+      endAddress: '',
+      distance: ''
+    }
+  }
+},
+
+watch: {
+  // 鐩戝惉璧风偣鍜岀粓鐐瑰彉鍖�
+  'form.startAddress': 'autoCalculateDistance',
+  'form.endAddress': 'autoCalculateDistance'
+},
+
+methods: {
+  async autoCalculateDistance() {
+    if (!this.form.startAddress || !this.form.endAddress) {
+      return
+    }
+    
+    try {
+      // 1. 璧风偣鍦板潃杞潗鏍�
+      const fromRes = await baiduGeocoding(this.form.startAddress, '骞垮窞甯�')
+      const fromGeo = JSON.parse(fromRes.data)
+      const fromLat = fromGeo.result.location.lat
+      const fromLng = fromGeo.result.location.lng
+      
+      // 2. 缁堢偣鍦板潃杞潗鏍�
+      const toRes = await baiduGeocoding(this.form.endAddress, '骞垮窞甯�')
+      const toGeo = JSON.parse(toRes.data)
+      const toLat = toGeo.result.location.lat
+      const toLng = toGeo.result.location.lng
+      
+      // 3. 璁$畻璺濈
+      const routeRes = await baiduRouteDriving(
+        fromLat + ',' + fromLng,
+        toLat + ',' + toLng
+      )
+      const route = JSON.parse(routeRes.data)
+      const distanceKm = (route.result.routes[0].distance / 1000).toFixed(2)
+      
+      // 4. 鑷姩濉厖璺濈瀛楁
+      this.form.distance = distanceKm
+      this.$message.success('璺濈鑷姩璁$畻鎴愬姛: ' + distanceKm + ' 鍏噷')
+      
+    } catch (error) {
+      console.error('璺濈璁$畻澶辫触:', error)
+      this.$message.warning('璺濈鑷姩璁$畻澶辫触,璇锋墜鍔ㄥ~鍐�')
+    }
+  }
+}
+```
+
+## 鈿狅笍 娉ㄦ剰浜嬮」
+
+### 1. 鍧愭爣鏍煎紡
+
+- 鐧惧害鍦板浘: `绾害,缁忓害` (lat,lng)
+- 绀轰緥: `40.056878,116.30815`
+
+### 2. 鍧愭爣绯荤粺
+
+- 鐧惧害鍦板浘浣跨敤 BD-09 鍧愭爣绯�
+- 濡傛灉鎮ㄧ殑鍧愭爣鏄� GPS 鎴栭珮寰峰潗鏍�,闇�瑕佸厛杞崲
+
+### 3. 璺濈鍗曚綅
+
+- API 杩斿洖鐨勬槸 **绫�(m)**
+- 杞崲涓哄叕閲�: `distanceKm = distance / 1000`
+
+### 4. 閿欒澶勭悊
+
+杩斿洖鐘舵�佺爜璇存槑:
+- `status: 0` - 鎴愬姛
+- `status: 1` - 鏈嶅姟鍣ㄥ唴閮ㄩ敊璇�  
+- `status: 2` - 鍙傛暟闈炴硶
+- `status: 3` - 鏉冮檺鏍¢獙澶辫触 (妫�鏌K閰嶇疆)
+- `status: 4` - 閰嶉涓嶈冻
+
+## 馃摑 瀹屾暣绀轰緥浠g爜
+
+瑙� `prd/鐧惧害鍦板浘璺濈璁$畻鎺ュ彛璇存槑.md` 鑾峰彇璇︾粏鏂囨。銆�
+
+## 馃敆 鐩稿叧鏂囦欢
+
+- **鍚庣閰嶇疆**: `ruoyi-common/src/main/java/com/ruoyi/common/config/BaiduMapConfig.java`
+- **鍚庣鎺ュ彛**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java`
+- **鍓嶇API**: `app/api/map.js`
+- **閰嶇疆鏂囦欢**: `ruoyi-admin/src/main/resources/application.yml`
+
+## 鉂� 甯歌闂
+
+**Q: 杩斿洖 status: 3 鎬庝箞鍔�?**
+
+A: 妫�鏌� application.yml 涓殑 AK 鏄惁姝g‘閰嶇疆銆�
+
+**Q: 璁$畻鐨勮窛绂讳笉鍑嗙‘?**
+
+A: 纭鍧愭爣绯绘槸 BD-09,濡傛灉鏄叾浠栧潗鏍囩郴闇�瑕佽浆鎹€��
+
+**Q: 鑳芥敮鎸佹琛屻�侀獞琛岃窛绂诲悧?**
+
+A: 鍙互,淇敼鎺ュ彛璺緞涓� `/walking` 鎴� `/riding` 鍗冲彲銆�
+
+---
+
+**寮�鍙戝畬鎴愭椂闂�**: 2025-10-21  
+**鏂囨。鐗堟湰**: v1.0
diff --git "a/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227-\346\226\207\344\273\266\345\217\230\346\233\264\346\270\205\345\215\225.md" "b/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227-\346\226\207\344\273\266\345\217\230\346\233\264\346\270\205\345\215\225.md"
new file mode 100644
index 0000000..e8ff01d
--- /dev/null
+++ "b/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227-\346\226\207\344\273\266\345\217\230\346\233\264\346\270\205\345\215\225.md"
@@ -0,0 +1,348 @@
+# 鐧惧害鍦板浘璺濈璁$畻鍔熻兘 - 鏂囦欢鍙樻洿娓呭崟
+
+## 馃搮 瀹炵幇鏃堕棿
+
+2025-10-21
+
+## 馃摑 鍙樻洿姒傝堪
+
+涓烘�ユ晳杞繍绯荤粺瀹炵幇鐧惧害鍦板浘璺濈璁$畻鍔熻兘,鏀寔閫氳繃鍧愭爣鎴栧湴鍧�璁$畻涓ょ偣闂寸殑椹捐溅璺濈銆�
+
+## 馃搧 鏂板鏂囦欢 (4涓�)
+
+### 1. 鍚庣閰嶇疆绫�
+
+**鏂囦欢璺緞**: `ruoyi-common/src/main/java/com/ruoyi/common/config/BaiduMapConfig.java`
+
+**鏂囦欢浣滅敤**: 鐧惧害鍦板浘閰嶇疆绫�,鐢ㄤ簬璇诲彇 application.yml 涓殑鐧惧害鍦板浘 AK 閰嶇疆
+
+**鍏抽敭浠g爜**:
+```java
+@Configuration
+@ConfigurationProperties(prefix = "baidu.map")
+public class BaiduMapConfig {
+    private String ak;  // 鐧惧害鍦板浘API Key
+}
+```
+
+---
+
+### 2. 璇︾粏鎺ュ彛鏂囨。
+
+**鏂囦欢璺緞**: `prd/鐧惧害鍦板浘璺濈璁$畻鎺ュ彛璇存槑.md`
+
+**鏂囦欢浣滅敤**: 瀹屾暣鐨勬帴鍙d娇鐢ㄦ枃妗�,鍖呭惈:
+- 鎺ュ彛璇︾粏璇存槑
+- 璇锋眰/鍝嶅簲绀轰緥
+- 鍓嶇璋冪敤绀轰緥
+- 浣跨敤鍦烘櫙
+- 甯歌闂
+- 娉ㄦ剰浜嬮」
+
+**鏂囦欢澶у皬**: 13.0KB (486琛�)
+
+---
+
+### 3. 蹇�熷紑濮嬫寚鍗�
+
+**鏂囦欢璺緞**: `prd/鐧惧害鍦板浘璺濈璁$畻-蹇�熷紑濮�.md`
+
+**鏂囦欢浣滅敤**: 蹇�熶笂鎵嬫寚鍗�,鍖呭惈:
+- 3姝ュ揩閫熼厤缃�
+- 鏍稿績鎺ュ彛璇存槑
+- 瀹炴垬鍦烘櫙绀轰緥
+- 甯歌闂
+
+**鏂囦欢澶у皬**: 5.6KB (216琛�)
+
+---
+
+### 4. 瀹炵幇鎬荤粨鏂囨。
+
+**鏂囦欢璺緞**: `prd/鐧惧害鍦板浘璺濈璁$畻鎺ュ彛瀹炵幇鎬荤粨.md`
+
+**鏂囦欢浣滅敤**: 瀹屾暣鐨勫疄鐜版�荤粨,鍖呭惈:
+- 鎶�鏈疄鐜扮粏鑺�
+- 鎺ュ彛瀵规瘮
+- 浣跨敤绀轰緥
+- 鍔熻兘鐗规��
+- 鎬ц兘浼樺寲寤鸿
+- 鍚庣画鎵╁睍寤鸿
+
+**鏂囦欢澶у皬**: 12.3KB (483琛�)
+
+---
+
+## 馃摑 淇敼鏂囦欢 (3涓�)
+
+### 1. VehicleGpsController.java (閲嶈)
+
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java`
+
+**淇敼鍐呭**:
+
+#### 鏂板瀵煎叆
+```java
+import com.ruoyi.common.config.BaiduMapConfig;
+```
+
+#### 鏂板渚濊禆娉ㄥ叆
+```java
+@Autowired
+private BaiduMapConfig baiduMapConfig;
+```
+
+#### 鏂板3涓帴鍙f柟娉�
+
+1. **鐧惧害鍦板浘鍦扮悊缂栫爜鎺ュ彛** (鍦板潃杞潗鏍�)
+   - 璺緞: `/system/gps/baidu/geocoding`
+   - 鏂规硶: `baiduGeocoding(String address, String city)`
+   - 鍔熻兘: 灏嗗湴鍧�杞崲涓虹粡绾害鍧愭爣
+
+2. **鐧惧害鍦板浘璺嚎瑙勫垝鎺ュ彛** (鍧愭爣璁$畻璺濈)
+   - 璺緞: `/system/gps/baidu/route/driving`
+   - 鏂规硶: `baiduRouteDriving(String origin, String destination)`
+   - 鍔熻兘: 璁$畻涓や釜鍧愭爣涔嬮棿鐨勯┚杞﹁窛绂�
+
+3. **鐧惧害鍦板浘鍦板潃璺濈璁$畻鎺ュ彛** (缁勫悎鎺ュ彛)
+   - 璺緞: `/system/gps/baidu/distance/byAddress`
+   - 鏂规硶: `baiduDistanceByAddress(String fromAddress, String fromCity, String toAddress, String toCity)`
+   - 鍔熻兘: 鍒嗗埆灏嗚捣鐐瑰拰缁堢偣鍦板潃杞崲涓哄潗鏍�,杩斿洖鍦扮悊缂栫爜缁撴灉
+
+**浠g爜琛屾暟**: +129琛�
+
+---
+
+### 2. map.js (閲嶈)
+
+**鏂囦欢璺緞**: `app/api/map.js`
+
+**淇敼鍐呭**:
+
+#### 鏂板3涓狝PI璋冪敤鏂规硶
+
+1. **鐧惧害鍦板浘鍦扮悊缂栫爜API**
+   ```javascript
+   export function baiduGeocoding(address, city)
+   ```
+
+2. **鐧惧害鍦板浘璺嚎瑙勫垝API**
+   ```javascript
+   export function baiduRouteDriving(origin, destination)
+   ```
+
+3. **鐧惧害鍦板浘鍦板潃璺濈璁$畻API**
+   ```javascript
+   export function baiduDistanceByAddress(fromAddress, fromCity, toAddress, toCity)
+   ```
+
+**鐗圭偣**:
+- 瀹屾暣鐨勫弬鏁伴獙璇�
+- 鍙嬪ソ鐨勯敊璇彁绀�
+- Promise 灏佽
+
+**浠g爜琛屾暟**: +64琛�
+
+---
+
+### 3. application.yml
+
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/resources/application.yml`
+
+**淇敼鍐呭**:
+
+#### 鏂板鐧惧害鍦板浘閰嶇疆
+```yaml
+# 鐧惧害鍦板浘閰嶇疆
+baidu:
+  map:
+    ak: YOUR_BAIDU_MAP_AK_HERE  # 璇锋浛鎹负鎮ㄧ殑鐧惧害鍦板浘API Key
+```
+
+**浣嶇疆**: 鍦ㄨ吘璁湴鍥鹃厤缃悗闈�
+
+**浠g爜琛屾暟**: +5琛�
+
+---
+
+## 馃搳 缁熻淇℃伅
+
+### 鏂囦欢缁熻
+
+| 绫诲瀷 | 鏁伴噺 | 璇存槑 |
+|------|------|------|
+| 鏂板鏂囦欢 | 4 | 1涓狫ava绫� + 3涓狹arkdown鏂囨。 |
+| 淇敼鏂囦欢 | 3 | 1涓狫ava绫� + 1涓狫S鏂囦欢 + 1涓猋AML閰嶇疆 |
+| **鎬昏** | **7** | |
+
+### 浠g爜琛屾暟缁熻
+
+| 鏂囦欢 | 鏂板琛屾暟 | 鍒犻櫎琛屾暟 | 鍑�澧炶鏁� |
+|------|---------|---------|---------|
+| BaiduMapConfig.java | 26 | 0 | +26 |
+| VehicleGpsController.java | 129 | 0 | +129 |
+| map.js | 64 | 2 | +62 |
+| application.yml | 5 | 0 | +5 |
+| **浠g爜鍚堣** | **224** | **2** | **+222** |
+| 鐧惧害鍦板浘璺濈璁$畻鎺ュ彛璇存槑.md | 486 | 0 | +486 |
+| 鐧惧害鍦板浘璺濈璁$畻-蹇�熷紑濮�.md | 216 | 0 | +216 |
+| 鐧惧害鍦板浘璺濈璁$畻鎺ュ彛瀹炵幇鎬荤粨.md | 483 | 0 | +483 |
+| **鏂囨。鍚堣** | **1185** | **0** | **+1185** |
+| **鎬昏** | **1409** | **2** | **+1407** |
+
+---
+
+## 馃幆 鏍稿績鍔熻兘鐐�
+
+### 1. 鍧愭爣璁$畻璺濈
+
+鉁� 鍚庣鎺ュ彛: `/system/gps/baidu/route/driving`  
+鉁� 鍓嶇鏂规硶: `baiduRouteDriving(origin, destination)`  
+鉁� 鐧惧害API: `https://api.map.baidu.com/directionlite/v1/driving`
+
+### 2. 鍦板潃杞潗鏍�
+
+鉁� 鍚庣鎺ュ彛: `/system/gps/baidu/geocoding`  
+鉁� 鍓嶇鏂规硶: `baiduGeocoding(address, city)`  
+鉁� 鐧惧害API: `https://api.map.baidu.com/geocoding/v3/`
+
+### 3. 鍦板潃璁$畻璺濈
+
+鉁� 鍚庣鎺ュ彛: `/system/gps/baidu/distance/byAddress`  
+鉁� 鍓嶇鏂规硶: `baiduDistanceByAddress(fromAddress, fromCity, toAddress, toCity)`  
+鉁� 瀹炵幇鏂瑰紡: 缁勫悎璋冪敤鍦扮悊缂栫爜 + 璺嚎瑙勫垝
+
+---
+
+## 鉁� 楠岃瘉娓呭崟
+
+### 浠g爜灞傞潰
+
+- [x] 鍚庣閰嶇疆绫诲垱寤烘垚鍔�
+- [x] Controller 鏂板3涓帴鍙�
+- [x] 鍓嶇 API 灏佽瀹屾垚
+- [x] 閰嶇疆鏂囦欢鏇存柊瀹屾垚
+- [x] 鏃犵紪璇戦敊璇�
+- [x] 鏃犺娉曢敊璇�
+
+### 鏂囨。灞傞潰
+
+- [x] 璇︾粏鎺ュ彛鏂囨。缂栧啓瀹屾垚
+- [x] 蹇�熷紑濮嬫寚鍗楃紪鍐欏畬鎴�
+- [x] 瀹炵幇鎬荤粨鏂囨。缂栧啓瀹屾垚
+- [x] 鏂囦欢鍙樻洿娓呭崟缂栧啓瀹屾垚
+
+---
+
+## 馃殌 浣跨敤鍓嶅噯澶�
+
+### 蹇呴』閰嶇疆
+
+1. **鑾峰彇鐧惧害鍦板浘 AK**
+   - 璁块棶: https://lbsyun.baidu.com/
+   - 娉ㄥ唽/鐧诲綍璐﹀彿
+   - 鍒涘缓搴旂敤(閫夋嫨"鏈嶅姟绔�"绫诲瀷)
+   - 鑾峰彇 AK (Access Key)
+
+2. **閰嶇疆 AK 鍒伴」鐩�**
+   - 缂栬緫: `ruoyi-admin/src/main/resources/application.yml`
+   - 鏇挎崲: `YOUR_BAIDU_MAP_AK_HERE` 涓烘偍鐨勭湡瀹� AK
+
+3. **閲嶅惎鍚庣鏈嶅姟**
+   - 閲嶅惎 Spring Boot 搴旂敤
+
+### 鍙�夐厤缃�
+
+- IP鐧藉悕鍗曡缃�(寤鸿鐢熶骇鐜閰嶇疆)
+- 鍚敤SN鏍¢獙(鎻愬崌瀹夊叏鎬�)
+
+---
+
+## 馃摉 鏂囨。绱㈠紩
+
+### 蹇�熶笂鎵�
+
+馃憠 [鐧惧害鍦板浘璺濈璁$畻-蹇�熷紑濮�.md](./鐧惧害鍦板浘璺濈璁$畻-蹇�熷紑濮�.md)
+
+### 璇︾粏鏂囨。
+
+馃憠 [鐧惧害鍦板浘璺濈璁$畻鎺ュ彛璇存槑.md](./鐧惧害鍦板浘璺濈璁$畻鎺ュ彛璇存槑.md)
+
+### 瀹炵幇鎬荤粨
+
+馃憠 [鐧惧害鍦板浘璺濈璁$畻鎺ュ彛瀹炵幇鎬荤粨.md](./鐧惧害鍦板浘璺濈璁$畻鎺ュ彛瀹炵幇鎬荤粨.md)
+
+---
+
+## 鈿狅笍 閲嶈鎻愮ず
+
+### 鍧愭爣绯荤粺
+
+- 鐧惧害鍦板浘浣跨敤 **BD-09** 鍧愭爣绯�
+- 濡傛灉鎮ㄧ殑鍧愭爣鏄� GPS 鎴栭珮寰�(GCJ-02),蹇呴』鍏堣浆鎹㈠潗鏍囩郴
+
+### 鍧愭爣鏍煎紡
+
+- 鏍煎紡: `绾害,缁忓害` (lat,lng)
+- 绀轰緥: `40.056878,116.30815`
+
+### API 閰嶉
+
+- 鍏嶈垂鐗�: **10涓囨/澶�**
+- 瓒呭嚭閰嶉浼氳繑鍥為敊璇爜 `status: 4`
+- 寤鸿鍋氬ソ缂撳瓨浼樺寲
+
+### 閿欒澶勭悊
+
+杩斿洖鐘舵�佺爜:
+- `0` - 鎴愬姛
+- `1` - 鏈嶅姟鍣ㄥ唴閮ㄩ敊璇�
+- `2` - 鍙傛暟闈炴硶
+- `3` - 鏉冮檺鏍¢獙澶辫触(妫�鏌K)
+- `4` - 閰嶉涓嶈冻
+- `5` - AK涓嶅瓨鍦�
+
+---
+
+## 馃帀 瀹屾垚鎯呭喌
+
+鉁� **鍚庣瀹炵幇** - 100%  
+鉁� **鍓嶇灏佽** - 100%  
+鉁� **閰嶇疆鏂囦欢** - 100%  
+鉁� **鎺ュ彛鏂囨。** - 100%  
+鉁� **浣跨敤鎸囧崡** - 100%  
+鉁� **瀹炵幇鎬荤粨** - 100%  
+
+**鎬讳綋瀹屾垚搴�**: 馃幆 **100%**
+
+---
+
+## 馃敆 鐩稿叧璧勬簮
+
+### 鐧惧害鍦板浘瀹樻柟鏂囨。
+
+- [鐧惧害鍦板浘寮�鏀惧钩鍙癩(https://lbsyun.baidu.com/)
+- [Web鏈嶅姟API](https://lbsyun.baidu.com/index.php?title=webapi)
+- [璺嚎瑙勫垝API](https://lbsyun.baidu.com/index.php?title=webapi/direction-api-v2)
+- [鍦扮悊缂栫爜API](https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding)
+
+### 椤圭洰鐩稿叧鏂囨。
+
+- [鍦板浘鍔熻兘閰嶇疆涓嶢PI璋冪敤](./鍦板浘鍔熻兘閰嶇疆涓嶢PI璋冪敤.md) (濡傚瓨鍦�)
+- [鍦板浘閫夋嫨涓庤窛绂昏绠楀姛鑳絔(./鍦板浘閫夋嫨涓庤窛绂昏绠楀姛鑳�.md) (濡傚瓨鍦�)
+
+---
+
+**鍙樻洿瀹屾垚鏃堕棿**: 2025-10-21  
+**鏂囨。鐗堟湰**: v1.0  
+**鏁寸悊浜�**: AI Assistant
+
+---
+
+## 馃搶 涓嬩竴姝ュ缓璁�
+
+1. **閰嶇疆鐧惧害鍦板浘AK** - 鏇挎崲閰嶇疆鏂囦欢涓殑鍗犱綅绗�
+2. **娴嬭瘯鎺ュ彛鍔熻兘** - 浣跨敤 Postman 鎴栧墠绔祴璇曟帴鍙�
+3. **闆嗘垚鍒颁笟鍔�** - 鍦ㄤ换鍔″垱寤虹瓑鍦烘櫙涓娇鐢ㄨ窛绂昏绠楀姛鑳�
+4. **鎬ц兘浼樺寲** - 娣诲姞缂撳瓨鏈哄埗,鍑忓皯API璋冪敤娆℃暟
+5. **鐩戞帶閰嶉** - 鍏虫敞鐧惧害鍦板浘API璋冪敤娆℃暟,閬垮厤瓒呭嚭閰嶉
diff --git "a/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227\346\216\245\345\217\243\345\256\236\347\216\260\346\200\273\347\273\223.md" "b/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227\346\216\245\345\217\243\345\256\236\347\216\260\346\200\273\347\273\223.md"
new file mode 100644
index 0000000..9ca4158
--- /dev/null
+++ "b/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227\346\216\245\345\217\243\345\256\236\347\216\260\346\200\273\347\273\223.md"
@@ -0,0 +1,482 @@
+# 鐧惧害鍦板浘璺濈璁$畻鎺ュ彛瀹炵幇鎬荤粨
+
+## 馃搵 瀹炵幇姒傝堪
+
+鎴愬姛涓烘�ユ晳杞繍绯荤粺鍚庡彴瀹炵幇浜嗙櫨搴﹀湴鍥剧殑璺濈璁$畻鍔熻兘,鍖呮嫭:
+1. 鉁� 璁$畻涓や釜鍧愭爣涔嬮棿鐨勯┚杞﹁窛绂�
+2. 鉁� 鍦板潃杞潗鏍�(鍦扮悊缂栫爜)
+3. 鉁� 璁$畻涓や釜鍦板潃涔嬮棿鐨勮窛绂�(缁勫悎鎺ュ彛)
+
+## 馃敡 鎶�鏈疄鐜�
+
+### 鍚庣瀹炵幇
+
+#### 1. 閰嶇疆绫�
+
+**鏂囦欢**: `ruoyi-common/src/main/java/com/ruoyi/common/config/BaiduMapConfig.java`
+
+```java
+@Configuration
+@ConfigurationProperties(prefix = "baidu.map")
+public class BaiduMapConfig {
+    private String ak;  // 鐧惧害鍦板浘API Key
+    // getter/setter
+}
+```
+
+#### 2. Controller 鎺ュ彛
+
+**鏂囦欢**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java`
+
+鏂板3涓帴鍙�:
+
+| 鎺ュ彛璺緞 | 鏂规硶 | 鍔熻兘 | 鍙傛暟 |
+|---------|------|------|------|
+| `/system/gps/baidu/geocoding` | GET | 鍦板潃杞潗鏍� | address, city |
+| `/system/gps/baidu/route/driving` | GET | 璁$畻鍧愭爣璺濈 | origin, destination |
+| `/system/gps/baidu/distance/byAddress` | GET | 鍦板潃璺濈璁$畻 | fromAddress, fromCity, toAddress, toCity |
+
+**鍏抽敭浠g爜**:
+
+```java
+@Autowired
+private BaiduMapConfig baiduMapConfig;
+
+@Anonymous()
+@GetMapping("/baidu/route/driving")
+public AjaxResult baiduRouteDriving(String origin, String destination) {
+    String url = "https://api.map.baidu.com/directionlite/v1/driving";
+    String params = "origin=" + origin + 
+                   "&destination=" + destination +
+                   "&ak=" + baiduMapConfig.getAk();
+    String response = HttpUtils.sendGet(url, params);
+    return AjaxResult.success("璁$畻鎴愬姛", response);
+}
+```
+
+#### 3. 閰嶇疆鏂囦欢
+
+**鏂囦欢**: `ruoyi-admin/src/main/resources/application.yml`
+
+```yaml
+# 鐧惧害鍦板浘閰嶇疆
+baidu:
+  map:
+    ak: YOUR_BAIDU_MAP_AK_HERE
+```
+
+### 鍓嶇瀹炵幇
+
+**鏂囦欢**: `app/api/map.js`
+
+鏂板3涓狝PI璋冪敤鏂规硶:
+
+```javascript
+// 1. 鍦扮悊缂栫爜(鍦板潃杞潗鏍�)
+export function baiduGeocoding(address, city)
+
+// 2. 璺嚎瑙勫垝(鍧愭爣璁$畻璺濈)
+export function baiduRouteDriving(origin, destination)
+
+// 3. 缁勫悎鎺ュ彛(鍦板潃璺濈璁$畻)
+export function baiduDistanceByAddress(fromAddress, fromCity, toAddress, toCity)
+```
+
+**鐗圭偣**:
+- 鉁� 瀹屾暣鐨勫弬鏁伴獙璇�
+- 鉁� 鍙嬪ソ鐨勯敊璇彁绀�
+- 鉁� Promise 灏佽,鏀寔 async/await
+
+## 馃搳 鎺ュ彛瀵规瘮
+
+### 鐧惧害鍦板浘 API 璇存槑
+
+| API | 鐢ㄩ�� | 璇锋眰鍙傛暟 | 杩斿洖鏁版嵁 |
+|-----|------|---------|---------|
+| Geocoding API | 鍦板潃杞潗鏍� | address(鍦板潃), city(鍩庡競) | lng(缁忓害), lat(绾害) |
+| Direction API | 璺嚎瑙勫垝 | origin(璧风偣鍧愭爣), destination(缁堢偣鍧愭爣) | distance(璺濈/绫�), duration(鏃堕暱/绉�) |
+
+### 涓ょ璺濈璁$畻鏂瑰紡瀵规瘮
+
+| 鏂瑰紡 | 杈撳叆 | 姝ラ | 閫傜敤鍦烘櫙 |
+|------|------|------|---------|
+| 鍧愭爣璁$畻 | 缁忕含搴﹀潗鏍� | 1姝�(鐩存帴璁$畻) | 宸茬煡绮剧‘鍧愭爣 |
+| 鍦板潃璁$畻 | 鏂囧瓧鍦板潃 | 2姝�(鍦板潃杞潗鏍団啋璁$畻璺濈) | 鐢ㄦ埛杈撳叆鍦板潃 |
+
+## 馃幆 鏍稿績鍔熻兘
+
+### 鍔熻兘1: 鍧愭爣璁$畻璺濈
+
+**鐧惧害鍦板浘鎺ュ彛**: `https://api.map.baidu.com/directionlite/v1/driving`
+
+**涓昏鍙傛暟**:
+- `origin`: 璧风偣鍧愭爣 (鏍煎紡: `绾害,缁忓害`)
+- `destination`: 缁堢偣鍧愭爣 (鏍煎紡: `绾害,缁忓害`)
+- `ak`: 鐧惧害鍦板浘API瀵嗛挜
+
+**杩斿洖缁撴灉**:
+```json
+{
+  "status": 0,
+  "result": {
+    "routes": [{
+      "distance": 1213000,  // 璺濈(绫�)
+      "duration": 43920     // 鏃堕暱(绉�)
+    }]
+  }
+}
+```
+
+### 鍔熻兘2: 鍦板潃杞潗鏍�
+
+**鐧惧害鍦板浘鎺ュ彛**: `https://api.map.baidu.com/geocoding/v3/`
+
+**涓昏鍙傛暟**:
+- `address`: 寰呰В鏋愮殑鍦板潃
+- `city`: 鍦板潃鎵�鍦ㄥ煄甯� (鍙��,浣嗗缓璁~鍐�)
+- `ak`: 鐧惧害鍦板浘API瀵嗛挜
+
+**杩斿洖缁撴灉**:
+```json
+{
+  "status": 0,
+  "result": {
+    "location": {
+      "lng": 113.331053,  // 缁忓害
+      "lat": 23.137883    // 绾害
+    }
+  }
+}
+```
+
+### 鍔熻兘3: 鍦板潃璁$畻璺濈
+
+**瀹炵幇鏂瑰紡**: 缁勫悎璋冪敤
+
+```
+鍦板潃1 鈫� Geocoding API 鈫� 鍧愭爣1 鈹�
+                              鈹溾啋 Direction API 鈫� 璺濈
+鍦板潃2 鈫� Geocoding API 鈫� 鍧愭爣2 鈹�
+```
+
+## 馃捇 浣跨敤绀轰緥
+
+### 绀轰緥1: 鍓嶇璋冪敤鍧愭爣璁$畻璺濈
+
+```javascript
+import { baiduRouteDriving } from '@/api/map'
+
+// 鍖椾含鍒颁笂娴风殑璺濈
+baiduRouteDriving('40.056878,116.30815', '31.222965,121.505821')
+  .then(response => {
+    const result = JSON.parse(response.data)
+    if (result.status === 0) {
+      const distanceKm = (result.result.routes[0].distance / 1000).toFixed(2)
+      console.log('椹捐溅璺濈:', distanceKm + ' 鍏噷')
+    }
+  })
+```
+
+### 绀轰緥2: 鍓嶇璋冪敤鍦板潃璁$畻璺濈
+
+```javascript
+import { baiduGeocoding, baiduRouteDriving } from '@/api/map'
+
+async function calculateAddressDistance(fromAddr, toAddr) {
+  // Step 1: 璧风偣鍦板潃杞潗鏍�
+  const fromRes = await baiduGeocoding(fromAddr, '骞垮窞甯�')
+  const fromGeo = JSON.parse(fromRes.data)
+  const fromCoord = fromGeo.result.location.lat + ',' + fromGeo.result.location.lng
+  
+  // Step 2: 缁堢偣鍦板潃杞潗鏍�
+  const toRes = await baiduGeocoding(toAddr, '骞垮窞甯�')
+  const toGeo = JSON.parse(toRes.data)
+  const toCoord = toGeo.result.location.lat + ',' + toGeo.result.location.lng
+  
+  // Step 3: 璁$畻璺濈
+  const routeRes = await baiduRouteDriving(fromCoord, toCoord)
+  const route = JSON.parse(routeRes.data)
+  const distanceKm = (route.result.routes[0].distance / 1000).toFixed(2)
+  
+  return distanceKm
+}
+
+// 浣跨敤
+calculateAddressDistance('骞垮窞甯傚ぉ娌冲尯澶╂渤璺�', '骞垮窞甯傝秺绉�鍖轰腑灞辫矾')
+  .then(distance => console.log('璺濈:', distance + ' 鍏噷'))
+```
+
+### 绀轰緥3: 浠诲姟鍒涘缓鑷姩璁$畻璺濈
+
+```javascript
+// 鍦ㄤ换鍔¤〃鍗曠粍浠朵腑
+export default {
+  data() {
+    return {
+      taskForm: {
+        startAddress: '',
+        endAddress: '',
+        distance: null
+      }
+    }
+  },
+  
+  watch: {
+    'taskForm.startAddress': 'autoCalcDistance',
+    'taskForm.endAddress': 'autoCalcDistance'
+  },
+  
+  methods: {
+    async autoCalcDistance() {
+      if (!this.taskForm.startAddress || !this.taskForm.endAddress) {
+        return
+      }
+      
+      try {
+        uni.showLoading({ title: '璁$畻璺濈涓�...' })
+        
+        // 璋冪敤鍦板潃璁$畻璺濈
+        const distance = await this.calculateDistance(
+          this.taskForm.startAddress,
+          this.taskForm.endAddress
+        )
+        
+        // 鑷姩濉厖璺濈瀛楁
+        this.taskForm.distance = distance
+        
+        uni.hideLoading()
+        uni.showToast({
+          title: '璺濈: ' + distance + ' 鍏噷',
+          icon: 'success'
+        })
+      } catch (error) {
+        uni.hideLoading()
+        console.error('璺濈璁$畻澶辫触:', error)
+      }
+    },
+    
+    async calculateDistance(fromAddr, toAddr) {
+      // 瀹炵幇鍚岀ず渚�2
+      // ...
+    }
+  }
+}
+```
+
+## 馃搧 鏂囦欢娓呭崟
+
+### 鏂板鏂囦欢
+
+| 鏂囦欢 | 璇存槑 |
+|------|------|
+| `ruoyi-common/src/main/java/com/ruoyi/common/config/BaiduMapConfig.java` | 鐧惧害鍦板浘閰嶇疆绫� |
+| `prd/鐧惧害鍦板浘璺濈璁$畻鎺ュ彛璇存槑.md` | 璇︾粏鎺ュ彛鏂囨。 |
+| `prd/鐧惧害鍦板浘璺濈璁$畻-蹇�熷紑濮�.md` | 蹇�熷紑濮嬫寚鍗� |
+| `prd/鐧惧害鍦板浘璺濈璁$畻鎺ュ彛瀹炵幇鎬荤粨.md` | 鏈枃妗� |
+
+### 淇敼鏂囦欢
+
+| 鏂囦欢 | 淇敼鍐呭 |
+|------|---------|
+| `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java` | 鏂板3涓櫨搴﹀湴鍥炬帴鍙� |
+| `app/api/map.js` | 鏂板3涓狝PI璋冪敤鏂规硶 |
+| `ruoyi-admin/src/main/resources/application.yml` | 鏂板鐧惧害鍦板浘AK閰嶇疆 |
+
+## 鉁� 鍔熻兘鐗规��
+
+### 1. 瀹屾暣鐨勫弬鏁伴獙璇�
+
+- 鉁� 蹇呭~鍙傛暟妫�鏌�
+- 鉁� 鍙傛暟鏍煎紡楠岃瘉
+- 鉁� 鍧愭爣鏈夋晥鎬ч獙璇�
+
+### 2. 鍙嬪ソ鐨勯敊璇鐞�
+
+- 鉁� 璇︾粏鐨勯敊璇棩蹇�
+- 鉁� 鍙嬪ソ鐨勯敊璇彁绀�
+- 鉁� 寮傚父鎹曡幏鍜屽鐞�
+
+### 3. 鐏垫椿鐨勯厤缃鐞�
+
+- 鉁� 鏀寔鍔ㄦ�侀厤缃� API Key
+- 鉁� 閰嶇疆鏂囦欢缁熶竴绠$悊
+- 鉁� 鏀寔澶氬湴鍥炬湇鍔″晢骞跺瓨
+
+### 4. 瀹屽杽鐨勬枃妗�
+
+- 鉁� API 鎺ュ彛鏂囨。
+- 鉁� 蹇�熷紑濮嬫寚鍗�
+- 鉁� 浣跨敤绀轰緥浠g爜
+- 鉁� 甯歌闂瑙g瓟
+
+## 馃敀 瀹夊叏鑰冭檻
+
+### 1. API Key 淇濇姢
+
+- 鉁� API Key 瀛樺偍鍦ㄥ悗绔厤缃枃浠�
+- 鉁� 鍓嶇涓嶇洿鎺ユ毚闇� API Key
+- 鉁� 閫氳繃鍚庣浠g悊璋冪敤绗笁鏂规帴鍙�
+
+### 2. 鎺ュ彛鏉冮檺
+
+- 鉁� 浣跨敤 `@Anonymous()` 娉ㄨВ鎺у埗璁块棶鏉冮檺
+- 鉁� 鏀寔鍚庣画娣诲姞鏉冮檺鎺у埗
+
+### 3. 鍙傛暟瀹夊叏
+
+- 鉁� 鍙傛暟 URL 缂栫爜
+- 鉁� 闃叉娉ㄥ叆鏀诲嚮
+
+## 馃搱 鎬ц兘浼樺寲寤鸿
+
+### 1. 缂撳瓨浼樺寲
+
+寤鸿瀵圭浉鍚屽湴鍧�鐨勫湴鐞嗙紪鐮佺粨鏋滆繘琛岀紦瀛�:
+
+```java
+// 浣跨敤 Redis 缂撳瓨鍦扮悊缂栫爜缁撴灉
+@Cacheable(value = "geocoding", key = "#address + '_' + #city")
+public String getGeocodingResult(String address, String city) {
+    // 璋冪敤鐧惧害鍦板浘API
+}
+```
+
+### 2. 鎵归噺璁$畻
+
+濡傞渶璁$畻澶氫釜璺濈,寤鸿浣跨敤鎵归噺鎺ュ彛鍑忓皯璇锋眰娆℃暟銆�
+
+### 3. 寮傛澶勭悊
+
+瀵逛簬闈炲疄鏃堕渶姹�,鍙互浣跨敤寮傛鏂瑰紡璁$畻璺濈:
+
+```java
+@Async
+public CompletableFuture<Double> calculateDistanceAsync(String origin, String dest) {
+    // 寮傛璁$畻璺濈
+}
+```
+
+## 鈿狅笍 娉ㄦ剰浜嬮」
+
+### 1. 鍧愭爣绯荤粺
+
+- **鐧惧害鍦板浘**: BD-09 鍧愭爣绯�
+- **鑵捐鍦板浘**: GCJ-02 鍧愭爣绯�  
+- **GPS**: WGS-84 鍧愭爣绯�
+
+鈿狅笍 濡傛灉鎮ㄧ殑鍧愭爣鏉ヨ嚜鍏朵粬鍦板浘鏈嶅姟,蹇呴』杩涜鍧愭爣杞崲!
+
+### 2. 鍧愭爣鏍煎紡
+
+鐧惧害鍦板浘瑕佹眰鏍煎紡: `绾害,缁忓害` (lat,lng)
+
+绀轰緥: `40.056878,116.30815`
+
+### 3. API 閰嶉
+
+- 鍏嶈垂鐗�: 10涓囨/澶�
+- 瓒呭嚭閰嶉浼氳繑鍥� `status: 4`
+- 寤鸿鍋氬ソ缂撳瓨鍜岄敊璇鐞�
+
+### 4. 閿欒鐮�
+
+| status | 璇存槑 | 澶勭悊寤鸿 |
+|--------|------|---------|
+| 0 | 鎴愬姛 | 姝e父澶勭悊 |
+| 1 | 鏈嶅姟鍣ㄥ唴閮ㄩ敊璇� | 閲嶈瘯 |
+| 2 | 鍙傛暟闈炴硶 | 妫�鏌ュ弬鏁版牸寮� |
+| 3 | 鏉冮檺鏍¢獙澶辫触 | 妫�鏌� AK 閰嶇疆 |
+| 4 | 閰嶉涓嶈冻 | 鍗囩骇濂楅鎴栫瓑寰呴厤棰濇仮澶� |
+| 5 | AK 涓嶅瓨鍦� | 妫�鏌� AK 鏄惁姝g‘ |
+
+## 馃殌 鍚庣画鎵╁睍寤鸿
+
+### 1. 鏀寔澶氱鍑鸿鏂瑰紡
+
+```java
+// 姝ヨ
+@GetMapping("/baidu/route/walking")
+
+// 楠戣
+@GetMapping("/baidu/route/riding")
+
+// 鍏氦
+@GetMapping("/baidu/route/transit")
+```
+
+### 2. 杩斿洖璇︾粏璺緞
+
+```java
+// 杩斿洖閫旂粡鐐广�佽矾娈佃鎯呯瓑
+public AjaxResult getRouteDetail(String origin, String destination) {
+    // 杩斿洖瀹屾暣璺緞淇℃伅
+}
+```
+
+### 3. 鍧愭爣杞崲鍔熻兘
+
+```java
+// BD-09 鈫� GCJ-02
+@GetMapping("/coordinate/bd09ToGcj02")
+
+// GCJ-02 鈫� BD-09
+@GetMapping("/coordinate/gcj02ToBd09")
+```
+
+### 4. 鍦板潃鏅鸿兘琛ュ叏
+
+```java
+// 鍦板潃杈撳叆鎻愮ず
+@GetMapping("/baidu/place/suggestion")
+public AjaxResult placeSuggestion(String query, String region) {
+    // 璋冪敤鐧惧害鍦板浘POI鎼滅储API
+}
+```
+
+## 馃摎 鍙傝�冭祫鏂�
+
+### 鐧惧害鍦板浘瀹樻柟鏂囨。
+
+- [鐧惧害鍦板浘寮�鏀惧钩鍙癩(https://lbsyun.baidu.com/)
+- [Web鏈嶅姟API](https://lbsyun.baidu.com/index.php?title=webapi)
+- [璺嚎瑙勫垝API v2](https://lbsyun.baidu.com/index.php?title=webapi/direction-api-v2)
+- [鍦扮悊缂栫爜API](https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding)
+
+### 椤圭洰鐩稿叧鏂囨。
+
+- [鐧惧害鍦板浘璺濈璁$畻鎺ュ彛璇存槑.md](./鐧惧害鍦板浘璺濈璁$畻鎺ュ彛璇存槑.md)
+- [鐧惧害鍦板浘璺濈璁$畻-蹇�熷紑濮�.md](./鐧惧害鍦板浘璺濈璁$畻-蹇�熷紑濮�.md)
+
+## 鉁� 浜偣鎬荤粨
+
+1. **瀹屾暣瀹炵幇**: 娑电洊浜嗗潗鏍囪绠椼�佸湴鍧�璁$畻绛夊绉嶅満鏅�
+2. **鏄撲簬浣跨敤**: 鎻愪緵浜嗙畝娲佺殑 API 鍜岃缁嗙殑浣跨敤鏂囨。
+3. **瀹夊叏鍙潬**: API Key 鍚庣绠$悊,瀹屽杽鐨勫弬鏁伴獙璇�
+4. **鎵╁睍鎬у己**: 鏀寔鍚庣画娣诲姞鏇村鍦板浘鍔熻兘
+5. **鏂囨。榻愬叏**: 鎺ュ彛鏂囨。銆佸揩閫熸寚鍗椼�佷娇鐢ㄧず渚嬩竴搴斾勘鍏�
+
+## 馃帀 鎬荤粨
+
+鏈瀹炵幇鎴愬姛涓烘�ユ晳杞繍绯荤粺娣诲姞浜嗙櫨搴﹀湴鍥捐窛绂昏绠楀姛鑳�,涓昏瀹屾垚浜�:
+
+鉁� **鍚庣**:
+- 鍒涘缓鐧惧害鍦板浘閰嶇疆绫� `BaiduMapConfig`
+- 鍦� `VehicleGpsController` 涓柊澧� 3 涓帴鍙�
+- 閰嶇疆鏂囦欢涓坊鍔犵櫨搴﹀湴鍥� AK
+
+鉁� **鍓嶇**:
+- 鍦� `map.js` 涓皝瑁� 3 涓� API 璋冪敤鏂规硶
+- 瀹屾暣鐨勫弬鏁伴獙璇佸拰閿欒澶勭悊
+
+鉁� **鏂囨。**:
+- 璇︾粏鐨勬帴鍙h鏄庢枃妗�
+- 蹇�熷紑濮嬫寚鍗�
+- 瀹炵幇鎬荤粨鏂囨。
+
+鐜板湪鎮ㄥ彲浠ュ湪浠诲姟鍒涘缓銆佽窛绂荤粺璁$瓑鍦烘櫙涓娇鐢ㄨ繖浜涙帴鍙�,瀹炵幇鑷姩璁$畻璺濈鐨勫姛鑳�! 馃帄
+
+---
+
+**瀹炵幇瀹屾垚鏃堕棿**: 2025-10-21  
+**鏂囨。鐗堟湰**: v1.0  
+**寮�鍙戣��**: AI Assistant
diff --git "a/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227\346\216\245\345\217\243\350\257\264\346\230\216.md" "b/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227\346\216\245\345\217\243\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..b628218
--- /dev/null
+++ "b/prd/\347\231\276\345\272\246\345\234\260\345\233\276\350\267\235\347\246\273\350\256\241\347\256\227\346\216\245\345\217\243\350\257\264\346\230\216.md"
@@ -0,0 +1,485 @@
+# 鐧惧害鍦板浘璺濈璁$畻鎺ュ彛璇存槑
+
+## 鍔熻兘姒傝堪
+
+瀹炵幇浜嗙櫨搴﹀湴鍥剧殑涓や釜鏍稿績璺濈璁$畻鍔熻兘:
+1. **璁$畻涓や釜鍧愭爣涔嬮棿鐨勮窛绂�** - 鐩存帴浣跨敤缁忕含搴﹀潗鏍囪绠楅┚杞﹁窛绂�
+2. **璁$畻涓や釜鍦板潃涔嬮棿鐨勮窛绂�** - 鍏堝皢鍦板潃杞崲涓哄潗鏍�,鍐嶈绠楄窛绂�
+
+## 鎶�鏈灦鏋�
+
+- **鍚庣**: Spring Boot + 鐧惧害鍦板浘API
+- **鍓嶇**: Uniapp + 灏佽鐨凙PI璋冪敤鏂规硶
+- **閰嶇疆**: 鏀寔鍔ㄦ�侀厤缃櫨搴﹀湴鍥続PI Key
+
+## 閰嶇疆璇存槑
+
+### 1. 閰嶇疆鐧惧害鍦板浘API Key
+
+鍦� `ruoyi-admin/src/main/resources/application.yml` 涓厤缃�:
+
+```yaml
+# 鐧惧害鍦板浘閰嶇疆
+baidu:
+  map:
+    ak: YOUR_BAIDU_MAP_AK_HERE  # 璇锋浛鎹负鎮ㄧ殑鐧惧害鍦板浘API Key
+```
+
+**鑾峰彇API Key姝ラ**:
+1. 璁块棶鐧惧害鍦板浘寮�鏀惧钩鍙�: https://lbsyun.baidu.com/
+2. 娉ㄥ唽/鐧诲綍璐﹀彿
+3. 杩涘叆鎺у埗鍙� -> 搴旂敤绠$悊 -> 鎴戠殑搴旂敤
+4. 鍒涘缓搴旂敤,閫夋嫨"鏈嶅姟绔�"绫诲瀷
+5. 鑾峰彇 AK (Access Key)
+
+### 2. 閰嶇疆鏂囦欢璇存槑
+
+- **閰嶇疆绫�**: `com.ruoyi.common.config.BaiduMapConfig`
+- **Controller**: `com.ruoyi.web.controller.system.VehicleGpsController`
+- **鍓嶇API**: `app/api/map.js`
+
+## 鎺ュ彛璇︽儏
+
+### 鎺ュ彛涓�: 璁$畻涓や釜鍧愭爣涔嬮棿鐨勮窛绂�
+
+#### 鍚庣鎺ュ彛
+
+**鎺ュ彛鍦板潃**: `/system/gps/baidu/route/driving`
+
+**璇锋眰鏂瑰紡**: GET
+
+**璇锋眰鍙傛暟**:
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 | 绀轰緥 |
+|--------|------|------|------|------|
+| origin | String | 鏄� | 璧风偣鍧愭爣(绾害,缁忓害) | 40.056878,116.30815 |
+| destination | String | 鏄� | 缁堢偣鍧愭爣(绾害,缁忓害) | 31.222965,121.505821 |
+
+**璇锋眰绀轰緥**:
+```
+GET /system/gps/baidu/route/driving?origin=40.056878,116.30815&destination=31.222965,121.505821
+```
+
+**鍝嶅簲绀轰緥**:
+```json
+{
+  "code": 200,
+  "msg": "璁$畻鎴愬姛",
+  "data": {
+    "status": 0,
+    "message": "ok",
+    "result": {
+      "routes": [{
+        "distance": 1213000,  // 璺濈(绫�)
+        "duration": 43920,     // 鏃堕棿(绉�)
+        "steps": [...]
+      }]
+    }
+  }
+}
+```
+
+#### 鍓嶇璋冪敤
+
+```javascript
+import { baiduRouteDriving } from '@/api/map'
+
+// 璋冪敤绀轰緥
+baiduRouteDriving('40.056878,116.30815', '31.222965,121.505821')
+  .then(response => {
+    console.log('璺濈璁$畻缁撴灉:', response)
+    // 瑙f瀽杩斿洖鏁版嵁
+    const result = JSON.parse(response.data)
+    if (result.status === 0) {
+      const distance = result.result.routes[0].distance // 璺濈(绫�)
+      const distanceKm = (distance / 1000).toFixed(2) // 杞崲涓哄叕閲�
+      console.log('琛岄┒璺濈:', distanceKm + ' 鍏噷')
+    }
+  })
+  .catch(error => {
+    console.error('璺濈璁$畻澶辫触:', error)
+  })
+```
+
+### 鎺ュ彛浜�: 鍦扮悊缂栫爜 (鍦板潃杞潗鏍�)
+
+#### 鍚庣鎺ュ彛
+
+**鎺ュ彛鍦板潃**: `/system/gps/baidu/geocoding`
+
+**璇锋眰鏂瑰紡**: GET
+
+**璇锋眰鍙傛暟**:
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 | 绀轰緥 |
+|--------|------|------|------|------|
+| address | String | 鏄� | 寰呰В鏋愮殑鍦板潃 | 骞垮窞甯傚ぉ娌冲尯澶╂渤璺� |
+| city | String | 鍚� | 鍦板潃鎵�鍦ㄥ煄甯� | 骞垮窞甯� |
+
+**璇锋眰绀轰緥**:
+```
+GET /system/gps/baidu/geocoding?address=骞垮窞甯傚ぉ娌冲尯澶╂渤璺�&city=骞垮窞甯�
+```
+
+**鍝嶅簲绀轰緥**:
+```json
+{
+  "code": 200,
+  "msg": "鏌ヨ鎴愬姛",
+  "data": {
+    "status": 0,
+    "result": {
+      "location": {
+        "lng": 113.331053,  // 缁忓害
+        "lat": 23.137883    // 绾害
+      },
+      "precise": 1,
+      "confidence": 80,
+      "comprehension": 100,
+      "level": "閬撹矾"
+    }
+  }
+}
+```
+
+#### 鍓嶇璋冪敤
+
+```javascript
+import { baiduGeocoding } from '@/api/map'
+
+// 璋冪敤绀轰緥
+baiduGeocoding('骞垮窞甯傚ぉ娌冲尯澶╂渤璺�', '骞垮窞甯�')
+  .then(response => {
+    console.log('鍦扮悊缂栫爜缁撴灉:', response)
+    const result = JSON.parse(response.data)
+    if (result.status === 0) {
+      const lng = result.result.location.lng // 缁忓害
+      const lat = result.result.location.lat // 绾害
+      console.log('鍧愭爣:', lat + ',' + lng)
+    }
+  })
+  .catch(error => {
+    console.error('鍦扮悊缂栫爜澶辫触:', error)
+  })
+```
+
+### 鎺ュ彛涓�: 璁$畻涓や釜鍦板潃涔嬮棿鐨勮窛绂� (缁勫悎鎺ュ彛)
+
+#### 鍚庣鎺ュ彛
+
+**鎺ュ彛鍦板潃**: `/system/gps/baidu/distance/byAddress`
+
+**璇锋眰鏂瑰紡**: GET
+
+**璇锋眰鍙傛暟**:
+| 鍙傛暟鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 | 绀轰緥 |
+|--------|------|------|------|------|
+| fromAddress | String | 鏄� | 璧风偣鍦板潃 | 骞垮窞甯傚ぉ娌冲尯澶╂渤璺� |
+| fromCity | String | 鍚� | 璧风偣鎵�鍦ㄥ煄甯� | 骞垮窞甯� |
+| toAddress | String | 鏄� | 缁堢偣鍦板潃 | 骞垮窞甯傝秺绉�鍖轰腑灞辫矾 |
+| toCity | String | 鍚� | 缁堢偣鎵�鍦ㄥ煄甯� | 骞垮窞甯� |
+
+**璇锋眰绀轰緥**:
+```
+GET /system/gps/baidu/distance/byAddress?fromAddress=骞垮窞甯傚ぉ娌冲尯澶╂渤璺�&fromCity=骞垮窞甯�&toAddress=骞垮窞甯傝秺绉�鍖轰腑灞辫矾&toCity=骞垮窞甯�
+```
+
+**鍝嶅簲绀轰緥**:
+```json
+{
+  "code": 200,
+  "msg": "鍦扮悊缂栫爜鎴愬姛",
+  "data": {
+    "fromGeocoding": "{...}",  // 璧风偣鍦扮悊缂栫爜缁撴灉
+    "toGeocoding": "{...}",    // 缁堢偣鍦扮悊缂栫爜缁撴灉
+    "message": "璇疯В鏋愬潗鏍囧悗璋冪敤 /baidu/route/driving 鎺ュ彛璁$畻璺濈"
+  }
+}
+```
+
+#### 鍓嶇璋冪敤 (瀹屾暣娴佺▼)
+
+```javascript
+import { baiduDistanceByAddress, baiduRouteDriving } from '@/api/map'
+
+/**
+ * 璁$畻涓や釜鍦板潃涔嬮棿鐨勯┚杞﹁窛绂�
+ */
+async function calculateAddressDistance(fromAddr, fromCity, toAddr, toCity) {
+  try {
+    // 绗竴姝�: 鑾峰彇涓や釜鍦板潃鐨勫潗鏍�
+    const geocodingResult = await baiduDistanceByAddress(fromAddr, fromCity, toAddr, toCity)
+    
+    // 瑙f瀽璧风偣鍧愭爣
+    const fromGeo = JSON.parse(geocodingResult.data.fromGeocoding)
+    if (fromGeo.status !== 0) {
+      throw new Error('璧风偣鍦板潃瑙f瀽澶辫触')
+    }
+    const fromLat = fromGeo.result.location.lat
+    const fromLng = fromGeo.result.location.lng
+    
+    // 瑙f瀽缁堢偣鍧愭爣
+    const toGeo = JSON.parse(geocodingResult.data.toGeocoding)
+    if (toGeo.status !== 0) {
+      throw new Error('缁堢偣鍦板潃瑙f瀽澶辫触')
+    }
+    const toLat = toGeo.result.location.lat
+    const toLng = toGeo.result.location.lng
+    
+    // 绗簩姝�: 璁$畻涓ょ偣闂磋窛绂�
+    const origin = fromLat + ',' + fromLng
+    const destination = toLat + ',' + toLng
+    const routeResult = await baiduRouteDriving(origin, destination)
+    
+    // 瑙f瀽璺濈
+    const route = JSON.parse(routeResult.data)
+    if (route.status === 0) {
+      const distance = route.result.routes[0].distance // 璺濈(绫�)
+      const distanceKm = (distance / 1000).toFixed(2)  // 杞崲涓哄叕閲�
+      console.log('琛岄┒璺濈:', distanceKm + ' 鍏噷')
+      return distanceKm
+    } else {
+      throw new Error('璺濈璁$畻澶辫触')
+    }
+  } catch (error) {
+    console.error('璁$畻鍦板潃璺濈澶辫触:', error)
+    throw error
+  }
+}
+
+// 浣跨敤绀轰緥
+calculateAddressDistance(
+  '骞垮窞甯傚ぉ娌冲尯澶╂渤璺�', '骞垮窞甯�',
+  '骞垮窞甯傝秺绉�鍖轰腑灞辫矾', '骞垮窞甯�'
+).then(distance => {
+  console.log('鏈�缁堣窛绂�:', distance + ' 鍏噷')
+})
+```
+
+## 浣跨敤鍦烘櫙
+
+### 鍦烘櫙涓�: 浠诲姟鍒涘缓鏃惰嚜鍔ㄨ绠楄窛绂�
+
+鍦ㄥ垱寤烘�ユ晳杞繍浠诲姟鏃�,鏍规嵁璧风偣鍜岀粓鐐瑰湴鍧�鑷姩璁$畻琛岄┒璺濈:
+
+```javascript
+// 鍦ㄤ换鍔¤〃鍗曚腑鐩戝惉鍦板潃鍙樺寲
+watch(['startAddress', 'endAddress'], async () => {
+  if (startAddress && endAddress) {
+    try {
+      const distance = await calculateAddressDistance(
+        startAddress, startCity,
+        endAddress, endCity
+      )
+      // 鑷姩濉厖璺濈瀛楁
+      form.distance = distance
+    } catch (error) {
+      console.error('鑷姩璁$畻璺濈澶辫触', error)
+    }
+  }
+})
+```
+
+### 鍦烘櫙浜�: 鍦板浘閫夌偣鍚庤绠楄窛绂�
+
+鐢ㄦ埛鍦ㄥ湴鍥句笂閫夋嫨璧风偣鍜岀粓鐐瑰悗,鑷姩璁$畻璺濈:
+
+```javascript
+// 鍦板浘閫夌偣鍥炶皟
+onMapPointSelected(point) {
+  if (point.type === 'start') {
+    this.startLat = point.lat
+    this.startLng = point.lng
+  } else {
+    this.endLat = point.lat
+    this.endLng = point.lng
+  }
+  
+  // 涓や釜鐐归兘閫夋嫨鍚庤绠楄窛绂�
+  if (this.startLat && this.endLat) {
+    const origin = this.startLat + ',' + this.startLng
+    const destination = this.endLat + ',' + this.endLng
+    
+    baiduRouteDriving(origin, destination).then(res => {
+      const result = JSON.parse(res.data)
+      if (result.status === 0) {
+        const distance = (result.result.routes[0].distance / 1000).toFixed(2)
+        this.form.distance = distance
+      }
+    })
+  }
+}
+```
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 鍧愭爣绯荤粺
+
+- 鐧惧害鍦板浘浣跨敤 **BD-09 鍧愭爣绯�** (鐧惧害鍧愭爣)
+- 濡傛灉鎮ㄧ殑鏁版嵁鏄叾浠栧潗鏍囩郴(濡� GPS銆侀珮寰�),闇�瑕佽繘琛屽潗鏍囪浆鎹�
+- 鑵捐鍦板浘浣跨敤 GCJ-02 鍧愭爣绯�(鐏槦鍧愭爣)
+
+### 2. 鍧愭爣鏍煎紡
+
+- **鐧惧害鍦板浘**: 绾害鍦ㄥ墠,缁忓害鍦ㄥ悗 (lat,lng)
+- **鑵捐鍦板浘**: 绾害鍦ㄥ墠,缁忓害鍦ㄥ悗 (lat,lng)
+- 璇锋眰鏃舵敞鎰忛『搴�: `"绾害,缁忓害"`
+
+### 3. 閿欒澶勭悊
+
+鐧惧害鍦板浘API杩斿洖鐨勭姸鎬佺爜璇存槑:
+- `status: 0` - 鎴愬姛
+- `status: 1` - 鏈嶅姟鍣ㄥ唴閮ㄩ敊璇�
+- `status: 2` - 璇锋眰鍙傛暟闈炴硶
+- `status: 3` - 鏉冮檺鏍¢獙澶辫触
+- `status: 4` - 閰嶉鏍¢獙澶辫触
+- `status: 5` - AK涓嶅瓨鍦ㄦ垨闈炴硶
+
+### 4. API閰嶉闄愬埗
+
+- 鐧惧害鍦板浘API鏈夋瘡鏃ヨ皟鐢ㄦ鏁伴檺鍒�
+- 鍏嶈垂鐗堥�氬父涓� 10涓囨/澶�
+- 寤鸿鍋氬ソ缂撳瓨,閬垮厤閲嶅璁$畻鐩稿悓璺嚎
+
+### 5. 璺濈鍗曚綅
+
+- API杩斿洖鐨勮窛绂诲崟浣嶆槸 **绫�(m)**
+- 鍓嶇鏄剧ず鏃跺缓璁浆鎹负 **鍏噷(km)**
+- 杞崲鍏紡: `distanceKm = distance / 1000`
+
+## 瀵规瘮: 鐧惧害鍦板浘 vs 鑵捐鍦板浘
+
+| 鍔熻兘 | 鐧惧害鍦板浘 | 鑵捐鍦板浘 |
+|------|----------|----------|
+| 鍧愭爣绯� | BD-09 | GCJ-02 |
+| 鍦扮悊缂栫爜 | /geocoding/v3/ | /geocoder/v1/ |
+| 璺嚎瑙勫垝 | /directionlite/v1/driving | /distance/v1/ |
+| 鍙傛暟鏍煎紡 | origin=lat,lng | from=lat,lng |
+| 鍏嶈垂閰嶉 | 10涓囨/澶� | 10涓囨/澶� |
+
+## 娴嬭瘯寤鸿
+
+### 1. 鍗曞厓娴嬭瘯
+
+寤鸿鍒涘缓娴嬭瘯鐢ㄤ緥楠岃瘉鎺ュ彛鍔熻兘:
+
+```java
+@Test
+public void testBaiduRouteDriving() {
+    // 鍖椾含鍒颁笂娴风殑璺濈
+    String origin = "40.056878,116.30815";
+    String destination = "31.222965,121.505821";
+    
+    AjaxResult result = controller.baiduRouteDriving(origin, destination);
+    assertEquals(200, result.get("code"));
+}
+```
+
+### 2. 鎺ュ彛娴嬭瘯
+
+浣跨敤 Postman 鎴栨祻瑙堝櫒娴嬭瘯:
+
+```
+GET http://localhost:8080/system/gps/baidu/route/driving?origin=40.056878,116.30815&destination=31.222965,121.505821
+```
+
+### 3. 鍓嶇娴嬭瘯
+
+鍦ㄦ祻瑙堝櫒鎺у埗鍙版祴璇�:
+
+```javascript
+import { baiduRouteDriving } from '@/api/map'
+
+baiduRouteDriving('40.056878,116.30815', '31.222965,121.505821')
+  .then(res => console.log(res))
+  .catch(err => console.error(err))
+```
+
+## 甯歌闂
+
+### Q1: API杩斿洖 status: 3 (鏉冮檺鏍¢獙澶辫触)
+
+**鍘熷洜**: API Key 閰嶇疆閿欒鎴栨湭鎺堟潈璇ユ帴鍙�
+
+**瑙e喅鏂规**:
+1. 妫�鏌� application.yml 涓殑 AK 鏄惁姝g‘
+2. 鐧诲綍鐧惧害鍦板浘鎺у埗鍙�,妫�鏌ュ簲鐢ㄦ槸鍚﹀惎鐢ㄤ簡瀵瑰簲鏈嶅姟
+3. 纭IP鐧藉悕鍗曡缃�(濡傛湁)
+
+### Q2: 璁$畻鐨勮窛绂讳笌瀹為檯涓嶇
+
+**鍘熷洜**: 鍙兘鏄潗鏍囩郴涓嶅尮閰�
+
+**瑙e喅鏂规**:
+1. 纭杈撳叆鍧愭爣鏄櫨搴﹀潗鏍囩郴(BD-09)
+2. 濡傛槸鍏朵粬鍧愭爣绯�,闇�鍏堣繘琛屽潗鏍囪浆鎹�
+3. 妫�鏌ュ潗鏍囬『搴忔槸鍚︽纭�(绾害,缁忓害)
+
+### Q3: 鍦板潃瑙f瀽澶辫触
+
+**鍘熷洜**: 鍦板潃涓嶅鍑嗙‘鎴栨牸寮忎笉瑙勮寖
+
+**瑙e喅鏂规**:
+1. 鎻愪緵鏇磋缁嗙殑鍦板潃淇℃伅
+2. 鎸囧畾鎵�鍦ㄥ煄甯傚弬鏁�
+3. 浣跨敤鏍囧噯鍦板潃鏍煎紡
+
+## 鎵╁睍鍔熻兘
+
+### 1. 鏀寔澶氱鍑鸿鏂瑰紡
+
+鍙互鎵╁睍鎺ュ彛鏀寔姝ヨ銆侀獞琛屻�佸叕浜ょ瓑:
+
+```java
+@GetMapping("/baidu/route/{mode}")
+public AjaxResult baiduRoute(@PathVariable String mode, String origin, String destination) {
+    // mode: driving(椹捐溅), walking(姝ヨ), riding(楠戣), transit(鍏氦)
+    String url = "https://api.map.baidu.com/directionlite/v1/" + mode;
+    // ...
+}
+```
+
+### 2. 杩斿洖璇︾粏璺緞淇℃伅
+
+闄や簡璺濈,杩樺彲浠ヨ繑鍥炶矾寰勮鎯呫�侀�旂粡鐐圭瓑:
+
+```javascript
+// 瑙f瀽瀹屾暣璺嚎淇℃伅
+const route = result.result.routes[0]
+console.log('璺濈:', route.distance, '绫�')
+console.log('棰勮鏃堕棿:', route.duration, '绉�')
+console.log('璺嚎璇︽儏:', route.steps)
+```
+
+### 3. 鎵归噺璁$畻璺濈
+
+濡傞渶璁$畻澶氫釜鍦扮偣闂寸殑璺濈,鍙互浣跨敤鎵归噺鎺ュ彛:
+
+```java
+@PostMapping("/baidu/route/batch")
+public AjaxResult baiduRouteBatch(@RequestBody List<RouteRequest> requests) {
+    // 鎵归噺璁$畻澶氫釜璺嚎鐨勮窛绂�
+}
+```
+
+## 鐩稿叧鏂囨。
+
+- [鐧惧害鍦板浘寮�鏀惧钩鍙癩(https://lbsyun.baidu.com/)
+- [鐧惧害鍦板浘Web鏈嶅姟API](https://lbsyun.baidu.com/index.php?title=webapi)
+- [璺嚎瑙勫垝API鏂囨。](https://lbsyun.baidu.com/index.php?title=webapi/direction-api-v2)
+- [鍦扮悊缂栫爜API鏂囨。](https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding)
+
+## 鏇存柊鏃ュ織
+
+### v1.0 (2025-10-21)
+
+- 鉁� 瀹炵幇鐧惧害鍦板浘鍦扮悊缂栫爜鎺ュ彛(鍦板潃杞潗鏍�)
+- 鉁� 瀹炵幇鐧惧害鍦板浘璺嚎瑙勫垝鎺ュ彛(鍧愭爣璁$畻璺濈)
+- 鉁� 瀹炵幇缁勫悎鎺ュ彛(鍦板潃璁$畻璺濈)
+- 鉁� 娣诲姞鍓嶇API灏佽
+- 鉁� 娣诲姞閰嶇疆鏂囦欢鏀寔
+- 鉁� 瀹屽杽鍙傛暟楠岃瘉鍜岄敊璇鐞�
+
+---
+
+**寮�鍙戣��**: AI Assistant  
+**鏂囨。鍒涘缓鏃堕棿**: 2025-10-21  
+**鏈�鍚庢洿鏂版椂闂�**: 2025-10-21
diff --git "a/prd/\350\201\224\347\263\273\344\272\272\345\277\205\345\241\253\345\222\214\345\275\222\345\261\236\346\234\272\346\236\204\351\273\230\350\256\244\351\200\211\344\270\255\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\350\201\224\347\263\273\344\272\272\345\277\205\345\241\253\345\222\214\345\275\222\345\261\236\346\234\272\346\236\204\351\273\230\350\256\244\351\200\211\344\270\255\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..8bdbf1d
--- /dev/null
+++ "b/prd/\350\201\224\347\263\273\344\272\272\345\277\205\345\241\253\345\222\214\345\275\222\345\261\236\346\234\272\346\236\204\351\273\230\350\256\244\351\200\211\344\270\255\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,541 @@
+# 鑱旂郴浜哄繀濉拰褰掑睘鏈烘瀯榛樿閫変腑鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鏈浼樺寲鍖呭惈涓や釜鍔熻兘鐐癸細
+1. **鑱旂郴浜哄瓧娈佃涓哄繀濉�**锛氱‘淇濇�ユ晳杞繍浠诲姟涓仈绯讳汉淇℃伅瀹屾暣锛屼究浜庣揣鎬ユ儏鍐典笅鑱旂郴
+2. **褰掑睘鏈烘瀯榛樿閫変腑褰撳墠鐢ㄦ埛鍒嗗叕鍙�**锛氳嚜鍔ㄨ缃敤鎴锋墍灞炲垎鍏徃锛屽悓鏃舵洿鏂板湴鍩熻繃婊ゆ潯浠讹紝浼樺寲鐢ㄦ埛浣撻獙
+
+## 瀹炵幇浣嶇疆
+
+**鍓嶇鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+## 涓�銆佽仈绯讳汉蹇呭~鍔熻兘
+
+### 1.1 涓氬姟鑳屾櫙
+
+鎬ユ晳杞繍浠诲姟涓紝鑱旂郴浜烘槸鍏抽敭淇℃伅锛岀敤浜庯細
+- 绱ф�ユ儏鍐典笅鐨勬矡閫氳仈绯�
+- 纭鎮h�呰韩浠藉拰鎯呭喌
+- 鍗忚皟杞繍杩囩▼涓殑鍚勯」浜嬪疁
+- 鍚庣画浠诲姟璺熻繘鍜屽弽棣�
+
+鍥犳灏嗚仈绯讳汉瀛楁璁句负蹇呭~锛岀‘淇濅俊鎭畬鏁存�с��
+
+### 1.2 鎶�鏈疄鐜�
+
+#### 妯℃澘淇敼
+
+灏嗚仈绯讳汉鐨刲abel娣诲姞`required`绫伙細
+
+```vue
+<view class="form-item">
+  <view class="form-label required">鑱旂郴浜�</view>
+  <input 
+    class="form-input" 
+    placeholder="璇疯緭鍏ヨ仈绯讳汉" 
+    v-model="taskForm.patient.contact"
+  />
+</view>
+```
+
+#### 琛ㄥ崟楠岃瘉
+
+鍦� `validateForm()` 鏂规硶涓坊鍔犺仈绯讳汉楠岃瘉锛�
+
+```javascript
+validateForm() {
+  // ... 鍏朵粬楠岃瘉
+  
+  if (!this.taskForm.patient.contact) {
+    this.$modal.showToast('璇疯緭鍏ヨ仈绯讳汉')
+    return false
+  }
+  
+  if (!this.taskForm.patient.name) {
+    this.$modal.showToast('璇疯緭鍏ユ偅鑰呭鍚�')
+    return false
+  }
+  
+  // ... 鍏朵粬楠岃瘉
+  
+  return true
+}
+```
+
+**楠岃瘉椤哄簭**锛�
+1. 浠诲姟杞﹁締
+2. 浠诲姟绫诲瀷
+3. 鍗曟嵁绫诲瀷
+4. 鉁� **鑱旂郴浜�**锛堟柊澧烇級
+5. 鎮h�呭鍚�
+6. 鑱旂郴鐢佃瘽
+7. 杞嚭鍖婚櫌淇℃伅
+8. 杞叆鍖婚櫌淇℃伅
+
+### 1.3 鏍峰紡璇存槑
+
+蹇呭~瀛楁鏍囪瘑閫氳繃CSS浼厓绱犲疄鐜帮細
+
+```scss
+.form-label {
+  &.required::before {
+    content: '*';
+    color: #ff4d4f;
+    margin-right: 4rpx;
+    font-weight: bold;
+  }
+}
+```
+
+鏄剧ず鏁堟灉锛歚* 鑱旂郴浜篳
+
+## 浜屻�佸綊灞炴満鏋勯粯璁ら�変腑鍔熻兘
+
+### 2.1 涓氬姟鑳屾櫙
+
+鏍规嵁椤圭洰瑙勮寖鍜岀敤鎴蜂綋楠岋細
+- 鐢ㄦ埛鍒涘缓浠诲姟鏃讹紝褰掑睘鏈烘瀯閫氬父灏辨槸鑷繁鎵�鍦ㄧ殑鍒嗗叕鍙�
+- 鑷姩閫変腑鍙互鍑忓皯鐢ㄦ埛鎿嶄綔姝ラ
+- 褰掑睘鏈烘瀯浼氬奖鍝嶅尰闄㈠垪琛ㄧ殑鍦板煙杩囨护锛岄渶瑕佽嚜鍔ㄦ洿鏂�
+
+### 2.2 鎶�鏈疄鐜�
+
+#### 淇敼 loadBranchCompanies() 鏂规硶
+
+```javascript
+loadBranchCompanies() {
+  listBranchCompany().then(response => {
+    const list = response.data || []
+    // 杩囨护鍑� parent_id = 100 鐨勯儴闂紙鍒嗗叕鍙革級
+    this.organizationOptions = list.filter(dept => dept.parentId === 100)
+    // 鐢熸垚picker鐨勬暟鎹簮锛堝彧鏄剧ず鍚嶇О锛�
+    this.organizations = this.organizationOptions.map(dept => dept.deptName)
+    
+    // 榛樿璁剧疆涓哄綋鍓嶇敤鎴风殑鍒嗗叕鍙�
+    if (this.currentUser.branchCompanyName) {
+      const index = this.organizationOptions.findIndex(
+        dept => dept.deptName === this.currentUser.branchCompanyName
+      )
+      if (index !== -1) {
+        this.selectedOrganization = this.currentUser.branchCompanyName
+        // 鎻愬彇鍦板煙鍏抽敭璇嶏紙鍘婚櫎"鍒嗗叕鍙�"鍚庣紑锛�
+        this.selectedRegion = this.selectedOrganization.replace(/鍒嗗叕鍙�$/g, '').trim()
+        console.log('榛樿閫変腑褰掑睘鏈烘瀯:', this.selectedOrganization, '鍦板煙:', this.selectedRegion)
+        // 鍔犺浇鍖婚櫌鍒楄〃锛堝甫鍦板煙杩囨护锛�
+        this.loadDefaultHospitals()
+      }
+    }
+  }).catch(error => {
+    console.error('鍔犺浇鍒嗗叕鍙告暟鎹け璐�:', error)
+    this.organizationOptions = []
+    this.organizations = []
+  })
+}
+```
+
+#### 浼樺寲 onLoad() 鏂规硶
+
+绉婚櫎閲嶅鐨勫尰闄㈠垪琛ㄥ姞杞藉拰褰掑睘鏈烘瀯璁剧疆锛�
+
+```javascript
+onLoad(options) {
+  // 鍏堝姞杞借溅杈嗗垪琛紝鐒跺悗鍔犺浇缁戝畾杞﹁締淇℃伅
+  this.getAvailableVehicles().then(() => {
+    this.getUserBoundVehicleInfo()
+  })
+  this.initSelectedStaff()
+  this.loadDeptStaff()
+  // 鍔犺浇鍒嗗叕鍙告暟鎹紙浼氳嚜鍔ㄨ缃粯璁ゅ垎鍏徃骞跺姞杞藉尰闄㈠垪琛級
+  this.loadBranchCompanies()
+  // 鍔犺浇绉戝瀛楀吀鏁版嵁
+  this.loadDepartments()
+  // 鍔犺浇浠诲姟绫诲瀷鏁版嵁
+  this.loadEmergencyTaskTypes()
+  // 鍔犺浇鍗曟嵁绫诲瀷鏁版嵁
+  this.loadDocumentTypes()
+}
+```
+
+**浼樺寲璇存槑**锛�
+- 鉂� 绉婚櫎浜嗙嫭绔嬬殑 `this.selectedOrganization = this.currentUser.branchCompanyName`
+- 鉂� 绉婚櫎浜嗙嫭绔嬬殑 `this.loadDefaultHospitals()`
+- 鉁� `loadBranchCompanies()` 鍐呴儴浼氬畬鎴愯繖涓や釜鎿嶄綔
+- 鉁� 閬垮厤浜嗗尰闄㈠垪琛ㄧ殑閲嶅鍔犺浇
+
+### 2.3 宸ヤ綔娴佺▼
+
+```
+椤甸潰鍔犺浇 (onLoad)
+    鈫�
+璋冪敤 loadBranchCompanies()
+    鈫�
+浠庡悗绔姞杞藉垎鍏徃鍒楄〃
+    鈫�
+杩囨护 parent_id = 100 鐨勯儴闂�
+    鈫�
+妫�鏌ュ綋鍓嶇敤鎴风殑 branchCompanyName
+    鈫�
+鍦ㄥ垎鍏徃鍒楄〃涓煡鎵惧尮閰嶉」
+    鈫�
+璁剧疆 selectedOrganization = 鐢ㄦ埛鍒嗗叕鍙稿悕绉�
+璁剧疆 selectedRegion = 鎻愬彇鐨勫湴鍩熷叧閿瘝
+    鈫�
+璋冪敤 loadDefaultHospitals() 鍔犺浇鍖婚櫌鍒楄〃
+    鈫�
+鍖婚櫌鍒楄〃鎸夊湴鍩熻繃婊�
+    鈫�
+UI 鏇存柊锛屾樉绀洪�変腑鐨勫綊灞炴満鏋�
+```
+
+### 2.4 鍦板煙鎻愬彇閫昏緫
+
+灏嗗垎鍏徃鍚嶇О杞崲涓哄湴鍩熷叧閿瘝锛�
+
+```javascript
+// 渚嬪锛�"骞垮窞鍒嗗叕鍙�" 鈫� "骞垮窞"
+this.selectedRegion = this.selectedOrganization.replace(/鍒嗗叕鍙�$/g, '').trim()
+```
+
+**绀轰緥**锛�
+- "骞垮窞鍒嗗叕鍙�" 鈫� "骞垮窞"
+- "娣卞湷鍒嗗叕鍙�" 鈫� "娣卞湷"
+- "涓滆帪鍒嗗叕鍙�" 鈫� "涓滆帪"
+
+杩欎釜鍦板煙鍏抽敭璇嶄細鐢ㄤ簬鍖婚櫌鎼滅储鐨勮繃婊ゆ潯浠躲��
+
+## 涓夈�佹暟鎹祦绋嬪浘
+
+### 鑱旂郴浜哄繀濉獙璇佹祦绋�
+
+```
+鐢ㄦ埛鐐瑰嚮"淇濆瓨"
+    鈫�
+璋冪敤 submitTask()
+    鈫�
+璋冪敤 validateForm()
+    鈫�
+妫�鏌� taskForm.patient.contact
+    鈫�
+    鈹溾攢 涓虹┖ 鈫� 鎻愮ず"璇疯緭鍏ヨ仈绯讳汉" 鈫� 闃绘鎻愪氦
+    鈹斺攢 鏈夊�� 鈫� 缁х画鍏朵粬楠岃瘉
+```
+
+### 褰掑睘鏈烘瀯榛樿閫変腑娴佺▼
+
+```
+椤甸潰鍔犺浇
+    鈫�
+鑾峰彇 currentUser.branchCompanyName
+    鈫�
+    鈹溾攢 鏈夊�硷紙濡�"骞垮窞鍒嗗叕鍙�"锛�
+    鈹�     鈫�
+    鈹�  鍦� organizationOptions 涓煡鎵�
+    鈹�     鈫�
+    鈹�     鈹溾攢 鎵惧埌
+    鈹�     鈹�    鈫�
+    鈹�     鈹�  璁剧疆 selectedOrganization = "骞垮窞鍒嗗叕鍙�"
+    鈹�     鈹�  璁剧疆 selectedRegion = "骞垮窞"
+    鈹�     鈹�  鍔犺浇鍖婚櫌鍒楄〃锛堝湴鍩熻繃婊わ級
+    鈹�     鈹�    鈫�
+    鈹�     鈹�  UI 鏄剧ず"骞垮窞鍒嗗叕鍙�"
+    鈹�     鈹�
+    鈹�     鈹斺攢 鏈壘鍒�
+    鈹�          鈫�
+    鈹�        涓嶈缃粯璁ゅ��
+    鈹�        鍖婚櫌鍒楄〃涓嶈繃婊�
+    鈹�
+    鈹斺攢 鏃犲��
+         鈫�
+       涓嶈缃粯璁ゅ��
+       鐢ㄦ埛闇�瑕佹墜鍔ㄩ�夋嫨
+```
+
+## 鍥涖�佹暟鎹粨鏋�
+
+### 鐢ㄦ埛淇℃伅锛堟潵鑷� Vuex state锛�
+
+```javascript
+currentUser: {
+  userId: 1,
+  name: "寮犱笁",
+  nickName: "寮犱笁",
+  deptId: 101,
+  branchCompanyId: 100,
+  branchCompanyName: "骞垮窞鍒嗗叕鍙�"  // 鍏抽敭瀛楁
+}
+```
+
+### 褰掑睘鏈烘瀯鏁版嵁
+
+```javascript
+// 鍘熷鏁版嵁锛堟潵鑷悗绔級
+organizationOptions: [
+  {
+    deptId: 100,
+    deptName: "骞垮窞鍒嗗叕鍙�",
+    parentId: 100
+  },
+  {
+    deptId: 101,
+    deptName: "娣卞湷鍒嗗叕鍙�",
+    parentId: 100
+  }
+]
+
+// picker 鏄剧ず鏁版嵁
+organizations: ["骞垮窞鍒嗗叕鍙�", "娣卞湷鍒嗗叕鍙�"]
+
+// 閫変腑鐨勫��
+selectedOrganization: "骞垮窞鍒嗗叕鍙�"
+selectedRegion: "骞垮窞"  // 鐢ㄤ簬鍖婚櫌鎼滅储杩囨护
+```
+
+### 琛ㄥ崟鏁版嵁
+
+```javascript
+taskForm: {
+  patient: {
+    contact: "鏉庡洓",      // 鉁� 蹇呭~
+    phone: "13800138000", // 鉁� 蹇呭~
+    name: "鐜嬩簲",         // 鉁� 蹇呭~
+    gender: "male",
+    idCard: "440106199001011234",
+    condition: ""
+  },
+  // ... 鍏朵粬瀛楁
+}
+```
+
+## 浜斻�佺浉鍏虫帴鍙�
+
+### 鑾峰彇鍒嗗叕鍙稿垪琛�
+
+**API**: `GET /system/dept/list?parentId=100`
+
+**鍓嶇鏂规硶**: `listBranchCompany()`
+
+**杩斿洖鏁版嵁**:
+```json
+{
+  "code": 200,
+  "data": [
+    {
+      "deptId": 100,
+      "deptName": "骞垮窞鍒嗗叕鍙�",
+      "parentId": 100,
+      "orderNum": 1,
+      "leader": "寮犵粡鐞�",
+      "phone": "020-12345678",
+      "status": "0"
+    },
+    {
+      "deptId": 101,
+      "deptName": "娣卞湷鍒嗗叕鍙�",
+      "parentId": 100,
+      "orderNum": 2,
+      "leader": "鏉庣粡鐞�",
+      "phone": "0755-87654321",
+      "status": "0"
+    }
+  ]
+}
+```
+
+### 鎼滅储鍖婚櫌锛堝甫鍦板煙杩囨护锛�
+
+**API**: `GET /hospital/search?keyword={keyword}&region={region}`
+
+**璋冪敤绀轰緥**:
+```javascript
+// selectedRegion = "骞垮窞"
+searchHospitals('', '骞垮窞').then(response => {
+  // 杩斿洖骞垮窞鍦板尯鐨勫尰闄㈠垪琛紙鍓�100鏉★級
+})
+```
+
+**杩囨护閫昏緫**锛堝悗绔疭QL锛�:
+```sql
+WHERE (HopsProvince LIKE '%骞垮窞%' 
+   OR HopsCity LIKE '%骞垮窞%' 
+   OR HopsArea LIKE '%骞垮窞%')
+```
+
+## 鍏�佸紓甯稿鐞�
+
+### 1. 鐢ㄦ埛鏈缃垎鍏徃
+
+**鍦烘櫙**: `currentUser.branchCompanyName` 涓虹┖
+
+**澶勭悊**:
+- 涓嶈缃粯璁ゅ��
+- `selectedOrganization` 淇濇寔涓虹┖
+- picker 鏄剧ず"璇烽�夋嫨褰掑睘鏈烘瀯"
+- 鍖婚櫌鍒楄〃涓嶈繘琛屽湴鍩熻繃婊�
+
+### 2. 鐢ㄦ埛鍒嗗叕鍙镐笉鍦ㄥ垪琛ㄤ腑
+
+**鍦烘櫙**: 鏁版嵁涓嶄竴鑷达紝鐢ㄦ埛鐨勫垎鍏徃涓嶅湪 parent_id=100 鐨勫垪琛ㄤ腑
+
+**澶勭悊**:
+```javascript
+const index = this.organizationOptions.findIndex(
+  dept => dept.deptName === this.currentUser.branchCompanyName
+)
+if (index !== -1) {
+  // 鎵惧埌浜嗭紝璁剧疆榛樿鍊�
+} else {
+  // 鏈壘鍒帮紝涓嶈缃粯璁ゅ��
+  // 鐢ㄦ埛闇�瑕佹墜鍔ㄩ�夋嫨
+}
+```
+
+### 3. 鑱旂郴浜轰负绌烘彁浜�
+
+**鍦烘櫙**: 鐢ㄦ埛鏈~鍐欒仈绯讳汉灏辩偣鍑讳繚瀛�
+
+**澶勭悊**:
+```javascript
+if (!this.taskForm.patient.contact) {
+  this.$modal.showToast('璇疯緭鍏ヨ仈绯讳汉')
+  return false  // 闃绘鎻愪氦
+}
+```
+
+**鐢ㄦ埛鐪嬪埌**: Toast 鎻愮ず"璇疯緭鍏ヨ仈绯讳汉"
+
+## 涓冦�佹祴璇曞缓璁�
+
+### 娴嬭瘯鍦烘櫙1锛氳仈绯讳汉蹇呭~楠岃瘉
+
+**姝ラ**:
+1. 鎵撳紑鍒涘缓鎬ユ晳杞繍浠诲姟椤甸潰
+2. 濉啓鍏朵粬蹇呭~瀛楁锛堣溅杈嗐�佹偅鑰呭鍚嶃�佺數璇濈瓑锛�
+3. 涓嶅~鍐欒仈绯讳汉
+4. 鐐瑰嚮"淇濆瓨"鎸夐挳
+
+**棰勬湡缁撴灉**:
+- 鏄剧ず Toast 鎻愮ず"璇疯緭鍏ヨ仈绯讳汉"
+- 琛ㄥ崟涓嶆彁浜�
+- 鐢ㄦ埛鍋滅暀鍦ㄥ綋鍓嶉〉闈�
+
+### 娴嬭瘯鍦烘櫙2锛氬綊灞炴満鏋勯粯璁ら�変腑
+
+**鍓嶇疆鏉′欢**: 褰撳墠鐢ㄦ埛鐨� branchCompanyName = "骞垮窞鍒嗗叕鍙�"
+
+**姝ラ**:
+1. 鎵撳紑鍒涘缓鎬ユ晳杞繍浠诲姟椤甸潰
+2. 瑙傚療褰掑睘鏈烘瀯瀛楁
+
+**棰勬湡缁撴灉**:
+- 褰掑睘鏈烘瀯瀛楁鑷姩鏄剧ず"骞垮窞鍒嗗叕鍙�"
+- `selectedRegion` = "骞垮窞"
+- 鍖婚櫌鍒楄〃鍔犺浇鏃跺甫鍦板煙杩囨护
+- 鎺у埗鍙拌緭鍑�: "榛樿閫変腑褰掑睘鏈烘瀯: 骞垮窞鍒嗗叕鍙� 鍦板煙: 骞垮窞"
+
+### 娴嬭瘯鍦烘櫙3锛氬綊灞炴満鏋勫垏鎹�
+
+**姝ラ**:
+1. 椤甸潰鍔犺浇鍚庯紝褰掑睘鏈烘瀯榛樿鏄剧ず"骞垮窞鍒嗗叕鍙�"
+2. 鐢ㄦ埛鐐瑰嚮褰掑睘鏈烘瀯閫夋嫨鍣�
+3. 閫夋嫨"娣卞湷鍒嗗叕鍙�"
+
+**棰勬湡缁撴灉**:
+- `selectedOrganization` 鏇存柊涓�"娣卞湷鍒嗗叕鍙�"
+- `selectedRegion` 鏇存柊涓�"娣卞湷"
+- 鑷姩閲嶆柊鍔犺浇鍖婚櫌鍒楄〃锛堝甫鏂扮殑鍦板煙杩囨护锛�
+- 鍖婚櫌鎼滅储缁撴灉鍙樉绀烘繁鍦冲湴鍖虹殑鍖婚櫌
+
+### 娴嬭瘯鍦烘櫙4锛氱敤鎴锋棤鍒嗗叕鍙�
+
+**鍓嶇疆鏉′欢**: 褰撳墠鐢ㄦ埛鐨� branchCompanyName 涓虹┖鎴� null
+
+**姝ラ**:
+1. 鎵撳紑鍒涘缓鎬ユ晳杞繍浠诲姟椤甸潰
+2. 瑙傚療褰掑睘鏈烘瀯瀛楁
+
+**棰勬湡缁撴灉**:
+- 褰掑睘鏈烘瀯鏄剧ず"璇烽�夋嫨褰掑睘鏈烘瀯"
+- 娌℃湁榛樿閫変腑椤�
+- 鍖婚櫌鍒楄〃鍔犺浇鏃朵笉杩涜鍦板煙杩囨护
+- 鐢ㄦ埛鍙互鎵嬪姩閫夋嫨褰掑睘鏈烘瀯
+
+## 鍏�佷紭鍖栧缓璁�
+
+### 1. 鑱旂郴浜烘櫤鑳藉~鍏�
+
+鏍规嵁鎮h�呭鍚嶆垨鍘嗗彶璁板綍锛屾櫤鑳芥帹鑽愯仈绯讳汉锛�
+
+```javascript
+// 鐩戝惉鎮h�呭鍚嶅彉鍖�
+watch: {
+  'taskForm.patient.name'(newVal) {
+    // 濡傛灉鑱旂郴浜轰负绌猴紝鍙互鑷姩濉厖涓烘偅鑰呭鍚�
+    if (!this.taskForm.patient.contact && newVal) {
+      this.taskForm.patient.contact = newVal
+    }
+  }
+}
+```
+
+### 2. 鑱旂郴浜哄父鐢ㄥ垪琛�
+
+璁板綍鐢ㄦ埛甯哥敤鐨勮仈绯讳汉锛屾彁渚涘揩閫熼�夋嫨锛�
+
+```javascript
+// 鏈湴瀛樺偍甯哥敤鑱旂郴浜�
+const frequentContacts = uni.getStorageSync('frequentContacts') || []
+
+// 鏄剧ず蹇�熼�夋嫨鎸夐挳
+<view class="quick-select">
+  <text v-for="contact in frequentContacts" @click="selectContact(contact)">
+    {{ contact }}
+  </text>
+</view>
+```
+
+### 3. 褰掑睘鏈烘瀯鏉冮檺鎺у埗
+
+鏌愪簺鐢ㄦ埛鍙兘鍙兘鐪嬪埌鐗瑰畾鐨勫垎鍏徃锛�
+
+```javascript
+loadBranchCompanies() {
+  listBranchCompany().then(response => {
+    let list = response.data || []
+    
+    // 鏍规嵁鐢ㄦ埛鏉冮檺杩囨护
+    if (!this.currentUser.isAdmin) {
+      list = list.filter(dept => 
+        dept.deptId === this.currentUser.branchCompanyId
+      )
+    }
+    
+    this.organizationOptions = list.filter(dept => dept.parentId === 100)
+    // ...
+  })
+}
+```
+
+## 涔濄�佺浉鍏宠鑼�
+
+鏍规嵁椤圭洰璁板繂锛�
+
+1. **鍒嗗叕鍙告暟鎹姞杞借鑼�**锛坢emory: ba4557cf锛�:
+   - 鉁� 璋冪敤 `/system/dept/list` 鎺ュ彛
+   - 鉁� 浼犲叆 `parentId=100` 鍙傛暟
+   - 鉁� 鑾峰彇 parent_id=100 鐨勯儴闂ㄤ綔涓哄垎鍏徃鍒楄〃
+
+2. **鎬ユ晳杞繍浠诲姟杞﹁締鑷姩濉厖瑙勫垯**锛坢emory: eec5a112锛�:
+   - 杞﹁締閫夋嫨鍣ㄥ繀椤诲姞杞藉綋鍓嶇敤鎴锋墍鍦ㄥ垎鍏徃鐨勬墍鏈夎溅杈�
+   - 鉁� 鏈淇敼纭繚浜嗗綊灞炴満鏋勯粯璁や负鐢ㄦ埛鍒嗗叕鍙�
+   - 鉁� 鍦板煙杩囨护纭繚鍖婚櫌鍒楄〃涓庡垎鍏徃鍦板煙鐩稿叧
+
+## 鍗併�佺増鏈巻鍙�
+
+- **2025-01-25 v1**: 鍒濆鐗堟湰
+  - 鉁� 鑱旂郴浜哄瓧娈佃涓哄繀濉�
+  - 鉁� 娣诲姞鑱旂郴浜哄繀濉獙璇�
+  - 鉁� 褰掑睘鏈烘瀯榛樿閫変腑褰撳墠鐢ㄦ埛鍒嗗叕鍙�
+  - 鉁� 鑷姩鏇存柊 selectedRegion
+  - 鉁� 浼樺寲 onLoad 鏂规硶锛岄伩鍏嶉噸澶嶅姞杞�
+  - 鉁� 娣诲姞璋冭瘯鏃ュ織
diff --git "a/prd/\350\260\203\345\272\246\345\215\225\346\211\247\350\241\214\344\272\272\345\221\230\345\220\214\346\255\245\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\350\260\203\345\272\246\345\215\225\346\211\247\350\241\214\344\272\272\345\221\230\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..15fc4f8
--- /dev/null
+++ "b/prd/\350\260\203\345\272\246\345\215\225\346\211\247\350\241\214\344\272\272\345\221\230\345\220\214\346\255\245\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,417 @@
+# 璋冨害鍗曟墽琛屼汉鍛樺悓姝ュ姛鑳借鏄�
+
+## 鍔熻兘姒傝堪
+鍦ㄥ悓姝ユ�ユ晳杞繍浠诲姟鍒版棫绯荤粺璋冨害鍗曟椂锛屽皢浠诲姟鐨勬墽琛屼汉鍛樹俊鎭悓姝ュ埌鏃х郴缁熺殑闅忚浜哄憳鍙傛暟涓紝骞舵牴鎹汉鍛樿鑹诧紙鍙告満/鍖荤敓/鎶ゅ+锛夎嚜鍔ㄥ垎閰嶅埌瀵瑰簲鐨凟ntourage鍙傛暟銆�
+
+## 瀹炵幇鏃堕棿
+2025-10-25
+
+## 涓氬姟鑳屾櫙
+
+### 鏃х郴缁熼殢琛屼汉鍛樺弬鏁拌鏄�
+鏃х郴缁燂紙admin_save_24.gds锛夐�氳繃浠ヤ笅鍙傛暟绠$悊闅忚浜哄憳锛�
+
+- **Entourage_1**锛氬徃鏈虹殑OA_UserID
+- **Entourage_3**锛氬尰鐢熺殑OA_UserID  
+- **Entourage_4**锛氭姢澹殑OA_UserID
+- **EntourageLeadID**锛氶闃熺殑EntourageID锛�1/3/4涔嬩竴锛�
+
+### 涓氬姟瑙勫垯
+
+1. **绗竴涓墽琛屼汉鍛樿嚜鍔ㄦ垚涓洪闃�**锛�
+   - 濡傛灉绗竴涓汉鏄徃鏈猴紝`EntourageLeadID = 1`
+   - 濡傛灉绗竴涓汉鏄尰鐢燂紝`EntourageLeadID = 3`
+   - 濡傛灉绗竴涓汉鏄姢澹紝`EntourageLeadID = 4`
+
+2. **姣忎釜瑙掕壊鍙彇绗竴涓尮閰嶇殑浜哄憳**锛�
+   - 濡傛灉鏈夊涓徃鏈猴紝鍙彇绗竴涓徃鏈虹殑OA_UserID
+   - 鍖荤敓鍜屾姢澹悓鐞�
+
+3. **瑙掕壊鍒ゆ柇瑙勫垯**锛�
+   - 鏍规嵁鐢ㄦ埛鐨勮鑹插悕绉帮紙`roleName`锛夊垽鏂�
+   - 瑙掕壊鍚嶇О鍖呭惈"鍙告満"鐨勪负鍙告満
+   - 瑙掕壊鍚嶇О鍖呭惈"鍖荤敓"鐨勪负鍖荤敓
+   - 瑙掕壊鍚嶇О鍖呭惈"鎶ゅ+"鐨勪负鎶ゅ+
+   - 鍏朵粬瑙掕壊榛樿浣滀负鍙告満澶勭悊
+
+## 鎶�鏈疄鐜�
+
+### 1. 鏁版嵁娴佺▼
+
+```
+鏂扮郴缁熶换鍔℃墽琛屼汉鍛�
+    鈫�
+鑾峰彇鎵ц浜哄憳ID鍒楄〃锛坅ssigneeId锛�
+    鈫�
+鏌ヨ姣忎釜浜哄憳鐨勭敤鎴蜂俊鎭拰瑙掕壊
+    鈫�
+鍒ゆ柇浜哄憳绫诲瀷锛堝徃鏈�/鍖荤敓/鎶ゅ+锛�
+    鈫�
+鑾峰彇OA_UserID
+    鈫�
+鍒嗛厤鍒板搴旂殑Entourage鍙傛暟
+    鈫�
+绗竴涓汉鍛樿嚜鍔ㄨ缃负棰嗛槦
+    鈫�
+浼犻�掔粰鏃х郴缁熻皟搴﹀崟鎺ュ彛
+```
+
+### 2. 鏍稿績鏂规硶瀹炵幇
+
+#### syncTaskAssignees鏂规硶
+
+```java
+/**
+ * 鍚屾浠诲姟鎵ц浜哄憳淇℃伅鍒拌皟搴﹀崟闅忚浜哄憳鍙傛暟
+ */
+private void syncTaskAssignees(SysTask task, Map<String, String> params) {
+    // 1. 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛業D鍒楄〃
+    List<Long> assigneeIds = getTaskAssigneeIds(task.getTaskId());
+    
+    // 2. 鍒濆鍖栧彉閲�
+    String leadEntourageId = "";  // 棰嗛槦鐨凟ntourageID
+    String driverOaId = "";       // 鍙告満鐨凮A_UserID
+    String doctorOaId = "";       // 鍖荤敓鐨凮A_UserID
+    String nurseOaId = "";        // 鎶ゅ+鐨凮A_UserID
+    
+    // 3. 閬嶅巻鎵ц浜哄憳
+    for (int i = 0; i < assigneeIds.size(); i++) {
+        Long userId = assigneeIds.get(i);
+        SysUser user = sysUserMapper.selectUserById(userId);
+        
+        if (user == null || user.getOaUserId() == null) {
+            continue;
+        }
+        
+        String oaUserId = user.getOaUserId().toString();
+        String userType = getUserType(user);
+        
+        // 4. 鏍规嵁鐢ㄦ埛绫诲瀷鍒嗛厤鍒板搴旂殑Entourage鍙傛暟
+        if ("driver".equals(userType)) {
+            if (driverOaId.isEmpty()) {
+                driverOaId = oaUserId;
+                if (i == 0) leadEntourageId = "1"; // 绗竴涓汉涓旀槸鍙告満
+            }
+        } else if ("doctor".equals(userType)) {
+            if (doctorOaId.isEmpty()) {
+                doctorOaId = oaUserId;
+                if (i == 0) leadEntourageId = "3"; // 绗竴涓汉涓旀槸鍖荤敓
+            }
+        } else if ("nurse".equals(userType)) {
+            if (nurseOaId.isEmpty()) {
+                nurseOaId = oaUserId;
+                if (i == 0) leadEntourageId = "4"; // 绗竴涓汉涓旀槸鎶ゅ+
+            }
+        }
+    }
+    
+    // 5. 璁剧疆鍙傛暟
+    params.put("EntourageLeadID", leadEntourageId);
+    params.put("Entourage_1", driverOaId);
+    params.put("Entourage_3", doctorOaId);
+    params.put("Entourage_4", nurseOaId);
+}
+```
+
+#### getUserType鏂规硶
+
+```java
+/**
+ * 鍒ゆ柇鐢ㄦ埛绫诲瀷锛堝徃鏈�/鍖荤敓/鎶ゅ+/鍏朵粬锛�
+ */
+private String getUserType(SysUser user) {
+    String roleName = "";
+    
+    // 浠庣敤鎴风殑瑙掕壊鍒楄〃涓幏鍙栬鑹插悕绉�
+    if (user.getRoles() != null && !user.getRoles().isEmpty()) {
+        roleName = user.getRoles().get(0).getRoleName();
+    }
+    
+    // 鍒ゆ柇鏄惁涓哄徃鏈�
+    if (roleName != null && roleName.contains("鍙告満")) {
+        return "driver";
+    }
+    // 鍒ゆ柇鏄惁涓哄尰鐢�
+    if (roleName != null && roleName.contains("鍖荤敓")) {
+        return "doctor";
+    }
+    // 鍒ゆ柇鏄惁涓烘姢澹�
+    if (roleName != null && roleName.contains("鎶ゅ+")) {
+        return "nurse";
+    }
+    
+    // 鍏朵粬绫诲瀷锛岄粯璁や负鍙告満锛堜繚璇佽嚦灏戞湁涓�涓汉鍛橈級
+    return "driver";
+}
+```
+
+#### getTaskAssigneeIds鏂规硶
+
+```java
+/**
+ * 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛業D鍒楄〃
+ */
+private List<Long> getTaskAssigneeIds(Long taskId) {
+    List<Long> assigneeIds = new ArrayList<>();
+    
+    // 浠庝换鍔¤〃鑾峰彇涓昏鎵ц浜�
+    SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+    if (task != null && task.getAssigneeId() != null) {
+        assigneeIds.add(task.getAssigneeId());
+    }
+    
+    // TODO: 鏈潵濡傛灉鏈塻ys_task_assignee鍏宠仈琛紝鍙互浠庤〃涓煡璇㈡墍鏈夋墽琛屼汉鍛�
+    
+    return assigneeIds;
+}
+```
+
+### 3. 璋冪敤浣嶇疆
+
+鍦╜buildDispatchOrderParams`鏂规硶涓紝娣诲姞鎵ц浜哄憳鍚屾閫昏緫锛�
+
+```java
+private Map<String, String> buildDispatchOrderParams(SysTask task, SysTaskEmergency emergency) {
+    Map<String, String> params = new HashMap<>();
+    
+    // ... 鍏朵粬鍙傛暟璁剧疆
+    
+    // 鎵ц浜哄憳淇℃伅锛堥殢琛屼汉鍛橈級
+    syncTaskAssignees(task, params);
+    
+    return params;
+}
+```
+
+## 鏁版嵁绀轰緥
+
+### 鍦烘櫙1锛氬徃鏈�+鎶ゅ+
+
+**鏂扮郴缁熸暟鎹�**锛�
+```
+鎵ц浜哄憳锛�
+1. 寮犱笁锛堢敤鎴稩D=101, OA_UserID=1001, 瑙掕壊=鍙告満锛�
+2. 鏉庡洓锛堢敤鎴稩D=102, OA_UserID=1002, 瑙掕壊=鎶ゅ+锛�
+```
+
+**鍚屾鍙傛暟**锛�
+```
+EntourageLeadID = 1      // 绗竴涓汉鏄徃鏈猴紝棰嗛槦涓篍ntourage_1
+Entourage_1 = 1001       // 鍙告満锛氬紶涓�
+Entourage_3 =            // 鍖荤敓锛氭棤
+Entourage_4 = 1002       // 鎶ゅ+锛氭潕鍥�
+```
+
+### 鍦烘櫙2锛氬尰鐢�+鍙告満+鎶ゅ+
+
+**鏂扮郴缁熸暟鎹�**锛�
+```
+鎵ц浜哄憳锛�
+1. 鐜嬩簲锛堢敤鎴稩D=103, OA_UserID=1003, 瑙掕壊=鍖荤敓锛�
+2. 璧靛叚锛堢敤鎴稩D=104, OA_UserID=1004, 瑙掕壊=鍙告満锛�
+3. 瀛欎竷锛堢敤鎴稩D=105, OA_UserID=1005, 瑙掕壊=鎶ゅ+锛�
+```
+
+**鍚屾鍙傛暟**锛�
+```
+EntourageLeadID = 3      // 绗竴涓汉鏄尰鐢燂紝棰嗛槦涓篍ntourage_3
+Entourage_1 = 1004       // 鍙告満锛氳档鍏�
+Entourage_3 = 1003       // 鍖荤敓锛氱帇浜�
+Entourage_4 = 1005       // 鎶ゅ+锛氬瓩涓�
+```
+
+### 鍦烘櫙3锛氬彧鏈夊徃鏈�
+
+**鏂扮郴缁熸暟鎹�**锛�
+```
+鎵ц浜哄憳锛�
+1. 寮犱笁锛堢敤鎴稩D=101, OA_UserID=1001, 瑙掕壊=鍙告満锛�
+```
+
+**鍚屾鍙傛暟**锛�
+```
+EntourageLeadID = 1      // 棰嗛槦涓哄徃鏈�
+Entourage_1 = 1001       // 鍙告満锛氬紶涓�
+Entourage_3 =            // 鍖荤敓锛氭棤
+Entourage_4 =            // 鎶ゅ+锛氭棤
+```
+
+### 鍦烘櫙4锛氭棤鎵ц浜哄憳
+
+**鍚屾鍙傛暟**锛�
+```
+EntourageLeadID =        // 鏃犻闃�
+Entourage_1 =            // 鏃犲徃鏈�
+Entourage_3 =            // 鏃犲尰鐢�
+Entourage_4 =            // 鏃犳姢澹�
+```
+
+## 鏃х郴缁熷鐞嗛�昏緫
+
+鏃х郴缁燂紙admin_save_24.gds 绗�168-206琛岋級鎺ユ敹鍙傛暟鍚庣殑澶勭悊锛�
+
+```vbscript
+'鍐欏叆闅忚浜哄憳
+EntourageLeadID = SafeRequest(Request.form("EntourageLeadID"))  '棰嗛槦ID
+
+'寰幆澶勭悊鎵�鏈塃ntourageID锛堜粠dictionary琛ㄦ煡璇級
+sql="select vID from dictionary where vType=1 and vtitle='DispatchOrdEntourage' order by vOrder"
+rs.open sql,objConn,1,1
+do while not rs.Eof
+    EntourageID = rs("vID")
+    EntourageOAid = SafeRequest(Request.form("Entourage_"&EntourageID))
+    
+    If EntourageOAid<>"" And EntourageOAid<>"0" Then
+        EntourageLead = 0
+        If CStr(EntourageLeadID) = CStr(EntourageID) Then EntourageLead = 1
+        
+        '鎻掑叆鍒癉ispatchOrd_Entourage琛�
+        sql="insert into DispatchOrd_Entourage (...) values (...)"
+        objConn.Execute sql
+    End If
+rs.movenext
+loop
+```
+
+**鏁版嵁搴撳啓鍏ョ粨鏋�**锛圖ispatchOrd_Entourage琛級锛�
+
+| DispatchOrdIDDt | EntourageID | EntourageOAid | EntourageLead |
+|-----------------|-------------|---------------|---------------|
+| 10001 | 1 | 1001 | 1 |
+| 10001 | 4 | 1002 | 0 |
+
+## 瑙掕壊閰嶇疆瑕佹眰
+
+### 绯荤粺瑙掕壊閰嶇疆
+
+涓轰簡姝g‘璇嗗埆浜哄憳绫诲瀷锛岄渶瑕佸湪绯荤粺涓厤缃互涓嬭鑹诧細
+
+1. **鍙告満瑙掕壊**锛�
+   - 瑙掕壊鍚嶇О蹇呴』鍖呭惈"鍙告満"鍏抽敭璇�
+   - 渚嬪锛�"鍙告満"銆�"鎬ユ晳杞﹀徃鏈�"銆�"120鍙告満"
+
+2. **鍖荤敓瑙掕壊**锛�
+   - 瑙掕壊鍚嶇О蹇呴』鍖呭惈"鍖荤敓"鍏抽敭璇�
+   - 渚嬪锛�"鍖荤敓"銆�"鎬ヨ瘖鍖荤敓"銆�"闅忚溅鍖荤敓"
+
+3. **鎶ゅ+瑙掕壊**锛�
+   - 瑙掕壊鍚嶇О蹇呴』鍖呭惈"鎶ゅ+"鍏抽敭璇�
+   - 渚嬪锛�"鎶ゅ+"銆�"鎬ヨ瘖鎶ゅ+"銆�"闅忚溅鎶ゅ+"
+
+### OA_UserID閰嶇疆
+
+姣忎釜鐢ㄦ埛蹇呴』閰嶇疆瀵瑰簲鐨凮A_UserID锛堟棫绯荤粺鐢ㄦ埛ID锛夛細
+
+```sql
+-- 鍦╯ys_user琛ㄤ腑娣诲姞oa_user_id瀛楁锛堝鏋滆繕娌℃湁锛�
+ALTER TABLE sys_user ADD COLUMN oa_user_id INT COMMENT '鏃х郴缁烵A鐢ㄦ埛ID';
+
+-- 涓烘瘡涓敤鎴烽厤缃甇A_UserID
+UPDATE sys_user SET oa_user_id = 1001 WHERE user_id = 101; -- 寮犱笁
+UPDATE sys_user SET oa_user_id = 1002 WHERE user_id = 102; -- 鏉庡洓
+```
+
+## 鏃ュ織璁板綍
+
+绯荤粺浼氳褰曡缁嗙殑鏃ュ織淇℃伅锛屼究浜庢帓鏌ラ棶棰橈細
+
+```
+INFO: 浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: 10001, 棰嗛槦ID: 1, 鍙告満: 1001, 鍖荤敓: , 鎶ゅ+: 1002
+WARN: 浠诲姟鏃犳墽琛屼汉鍛橈紝浠诲姟ID: 10002
+WARN: 鎵ц浜哄憳淇℃伅涓嶅瓨鍦ㄦ垨鏈厤缃甇A_UserID锛岀敤鎴稩D: 103
+WARN: 鐢ㄦ埛瑙掕壊鏃犳硶鍒ゆ柇绫诲瀷锛岄粯璁や负鍙告満锛岀敤鎴稩D: 104, 瑙掕壊: 鏅�氬憳宸�
+ERROR: 鍚屾浠诲姟鎵ц浜哄憳寮傚父锛屼换鍔D: 10005
+```
+
+## 娴嬭瘯楠岃瘉
+
+### 娴嬭瘯姝ラ
+
+1. **鍒涘缓鎬ユ晳杞繍浠诲姟**锛�
+   - 閫夋嫨鎵ц浜哄憳锛氬紶涓夛紙鍙告満锛夈�佹潕鍥涳紙鎶ゅ+锛�
+   - 淇濆瓨浠诲姟
+
+2. **妫�鏌ユ柊绯荤粺鏁版嵁**锛�
+   ```sql
+   SELECT assignee_id FROM sys_task WHERE task_id = ?
+   -- 棰勬湡锛歛ssignee_id = 101锛堝紶涓夌殑ID锛�
+   ```
+
+3. **鏌ョ湅鍚屾鏃ュ織**锛�
+   ```bash
+   tail -f logs/sys-info.log | grep "浠诲姟鎵ц浜哄憳鍚屾"
+   ```
+   
+   **棰勬湡鏃ュ織**锛�
+   ```
+   浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: 10001, 棰嗛槦ID: 1, 鍙告満: 1001, 鍖荤敓: , 鎶ゅ+: 1002
+   ```
+
+4. **妫�鏌ユ棫绯荤粺鏁版嵁**锛�
+   ```sql
+   -- 鏌ヨDispatchOrd_Entourage琛�
+   SELECT EntourageID, EntourageOAid, EntourageLead
+   FROM DispatchOrd_Entourage
+   WHERE DispatchOrdIDDt = [瀵瑰簲鐨凞ispatchOrdID]
+   ```
+   
+   **棰勬湡缁撴灉**锛�
+   | EntourageID | EntourageOAid | EntourageLead |
+   |-------------|---------------|---------------|
+   | 1 | 1001 | 1 |
+   | 4 | 1002 | 0 |
+
+### 杈圭晫娴嬭瘯
+
+1. **鏃犳墽琛屼汉鍛�**锛�
+   - 鍙傛暟鍏ㄩ儴涓虹┖瀛楃涓�
+   - 鏃х郴缁熶笉鍐欏叆DispatchOrd_Entourage琛�
+
+2. **鏈厤缃甇A_UserID**锛�
+   - 璺宠繃璇ヤ汉鍛橈紝涓嶅悓姝ュ埌鏃х郴缁�
+   - 璁板綍璀﹀憡鏃ュ織
+
+3. **澶氫釜鐩稿悓瑙掕壊**锛�
+   - 鍙彇绗竴涓尮閰嶇殑浜哄憳
+   - 鍏朵粬浜哄憳琚拷鐣�
+
+4. **瑙掕壊鏃犳硶璇嗗埆**锛�
+   - 榛樿浣滀负鍙告満澶勭悊
+   - 璁板綍璀﹀憡鏃ュ織
+
+## 娉ㄦ剰浜嬮」
+
+### 1. OA_UserID蹇呴』閰嶇疆
+
+鎵�鏈夊弬涓庢�ユ晳杞繍浠诲姟鐨勭敤鎴峰繀椤婚厤缃甡oa_user_id`瀛楁锛屽惁鍒欐棤娉曞悓姝ュ埌鏃х郴缁熴��
+
+### 2. 瑙掕壊鍚嶇О瑙勮寖
+
+瑙掕壊鍚嶇О蹇呴』鍖呭惈"鍙告満"銆�"鍖荤敓"鎴�"鎶ゅ+"鍏抽敭璇嶏紝鍚﹀垯鍙兘琚敊璇垎绫汇��
+
+### 3. 绗竴涓汉鍛樹紭鍏堢骇
+
+绗竴涓墽琛屼汉鍛樿嚜鍔ㄦ垚涓洪闃燂紝鍒涘缓浠诲姟鏃跺簲娉ㄦ剰浜哄憳椤哄簭銆�
+
+### 4. 鍗曡鑹插崟浜哄憳
+
+姣忎釜瑙掕壊锛堝徃鏈�/鍖荤敓/鎶ゅ+锛夊彧浼氬悓姝ョ涓�涓尮閰嶇殑浜哄憳鍒版棫绯荤粺銆�
+
+### 5. 寮傚父澶勭悊
+
+鍚屾澶辫触涓嶅奖鍝嶄换鍔″垱寤猴紝鍙細璁板綍鏃ュ織锛屽悗缁彲閫氳繃瀹氭椂浠诲姟閲嶆柊鍚屾銆�
+
+## 鐩稿叧鏂囨。
+
+- [鎵ц浜哄憳assignee_id瀛楁濉厖鍔熻兘璇存槑](./鎵ц浜哄憳assignee_id瀛楁濉厖鍔熻兘璇存槑.md)
+- [鎬ユ晳杞繍浠诲姟浜哄憳閫夋嫨鍔熻兘璇存槑](./鎬ユ晳杞繍浠诲姟浜哄憳閫夋嫨鍔熻兘璇存槑.md)
+- [鏃х郴缁熷悓姝ユ満鍒惰鏄嶿(../oldCode/README.md)
+
+## 鏇存柊璁板綍
+
+- 2025-10-25锛氬畬鎴愭墽琛屼汉鍛樺悓姝ュ埌璋冨害鍗曢殢琛屼汉鍛樺姛鑳�
+  - 瀹炵幇syncTaskAssignees鏂规硶
+  - 瀹炵幇getUserType瑙掕壊鍒ゆ柇鏂规硶
+  - 鏀寔鍙告満/鍖荤敓/鎶ゅ+鐨勮嚜鍔ㄨ瘑鍒拰鍒嗛厤
+  - 绗竴涓墽琛屼汉鍛樿嚜鍔ㄨ缃负棰嗛槦
+  - 瀹屾暣鐨勬棩蹇楄褰曞拰寮傚父澶勭悊
diff --git "a/prd/\350\275\254\350\277\220\346\227\266\351\227\264\345\206\231\345\205\245planned_start_time\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\350\275\254\350\277\220\346\227\266\351\227\264\345\206\231\345\205\245planned_start_time\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..309083c
--- /dev/null
+++ "b/prd/\350\275\254\350\277\220\346\227\266\351\227\264\345\206\231\345\205\245planned_start_time\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,485 @@
+# 杞繍鏃堕棿鍐欏叆planned_start_time鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄥ垱寤烘�ユ晳杞繍浠诲姟鏃讹紝灏嗙敤鎴烽�夋嫨鐨�**杞繍鏃堕棿**鍚屾椂鍐欏叆涓讳换鍔¤〃鐨� `planned_start_time` 瀛楁锛堣鍒掑紑濮嬫椂闂达級锛岀‘淇濅换鍔¤皟搴﹀拰鏃堕棿绠$悊鐨勫噯纭�с��
+
+## 涓氬姟鑳屾櫙
+
+鎬ユ晳杞繍浠诲姟鐨勮浆杩愭椂闂村叿鏈夊弻閲嶅惈涔夛細
+1. **涓氬姟灞傞潰**锛氳〃绀洪璁′綍鏃跺紑濮嬭浆杩愭偅鑰咃紙瀛樺偍鍦ㄦ墿灞曡〃鐨� transfer_time锛�
+2. **绯荤粺灞傞潰**锛氳〃绀轰换鍔¤鍒掑紑濮嬫椂闂达紙瀛樺偍鍦ㄤ富浠诲姟琛ㄧ殑 planned_start_time锛�
+
+杩欎袱涓椂闂撮�氬父鏄竴鑷寸殑锛屽洜姝ら渶瑕佸悓鏃跺啓鍏ヤ袱涓〃銆�
+
+## 鎶�鏈疄鐜�
+
+### 鍓嶇鏁版嵁鎻愪氦
+
+鍦� `buildSubmitData()` 鏂规硶涓坊鍔� `plannedStartTime` 瀛楁锛�
+
+```javascript
+const submitData = {
+  taskType: 'EMERGENCY_TRANSFER',
+  transferTime: this.taskForm.transferTime,      // 杞繍鏃堕棿锛堟墿灞曡〃瀛楁锛�
+  plannedStartTime: this.taskForm.transferTime,  // 璁″垝寮�濮嬫椂闂达紙涓讳换鍔¤〃瀛楁锛�
+  // ... 鍏朵粬瀛楁
+}
+```
+
+### 鏁版嵁搴撳瓧娈�
+
+**涓讳换鍔¤〃锛坰ys_task锛�**锛�
+
+```sql
+-- 璁″垝寮�濮嬫椂闂�
+planned_start_time DATETIME
+```
+
+**鎵╁睍淇℃伅琛紙sys_task_emergency锛�**锛�
+
+```sql
+-- 杞繍鏃堕棿
+transfer_time DATETIME
+```
+
+## 鏁版嵁缁撴瀯
+
+### 鍓嶇琛ㄥ崟鏁版嵁
+
+```javascript
+taskForm: {
+  transferTime: "2025-01-25 14:30:00", // 鐢ㄦ埛閫夋嫨鐨勮浆杩愭椂闂�
+  // ... 鍏朵粬瀛楁
+}
+```
+
+### 鎻愪氦鏁版嵁
+
+```javascript
+{
+  taskType: "EMERGENCY_TRANSFER",
+  transferTime: "2025-01-25 14:30:00",      // 鎵╁睍琛細杞繍鏃堕棿
+  plannedStartTime: "2025-01-25 14:30:00",  // 涓讳换鍔¤〃锛氳鍒掑紑濮嬫椂闂�
+  // ... 鍏朵粬瀛楁
+}
+```
+
+### 鏁版嵁搴撳瓨鍌�
+
+**涓讳换鍔¤〃锛坰ys_task锛�**锛�
+
+| 瀛楁 | 鍊� | 璇存槑 |
+|------|-----|------|
+| task_id | 10001 | 浠诲姟ID |
+| planned_start_time | 2025-01-25 14:30:00 | 璁″垝寮�濮嬫椂闂� |
+| actual_start_time | NULL | 瀹為檯寮�濮嬫椂闂达紙浠诲姟寮�濮嬪悗濉啓锛� |
+
+**鎵╁睍淇℃伅琛紙sys_task_emergency锛�**锛�
+
+| 瀛楁 | 鍊� | 璇存槑 |
+|------|-----|------|
+| emergency_id | 20001 | 鎵╁睍淇℃伅ID |
+| task_id | 10001 | 鍏宠仈浠诲姟ID |
+| transfer_time | 2025-01-25 14:30:00 | 杞繍鏃堕棿 |
+
+## 鏁版嵁鏄犲皠鍏崇郴
+
+| 鍓嶇瀛楁 | 涓讳换鍔¤〃瀛楁 | 鎵╁睍琛ㄥ瓧娈� | 璇存槑 |
+|---------|------------|----------|------|
+| `taskForm.transferTime` | `planned_start_time` | `transfer_time` | 鐢ㄦ埛閫夋嫨鐨勮浆杩愭椂闂� |
+
+## 鏃堕棿鐩稿叧瀛楁璇存槑
+
+### 涓讳换鍔¤〃鏃堕棿瀛楁
+
+```java
+public class SysTask {
+    /** 璁″垝寮�濮嬫椂闂� */
+    private Date plannedStartTime;    // 鐢ㄦ埛鎸囧畾鐨勮鍒掑紑濮嬫椂闂�
+    
+    /** 璁″垝缁撴潫鏃堕棿 */
+    private Date plannedEndTime;      // 棰勮缁撴潫鏃堕棿锛堝彲閫夛級
+    
+    /** 瀹為檯寮�濮嬫椂闂� */
+    private Date actualStartTime;     // 浠诲姟瀹為檯寮�濮嬫椂璁板綍
+    
+    /** 瀹為檯缁撴潫鏃堕棿 */
+    private Date actualEndTime;       // 浠诲姟瀹為檯瀹屾垚鏃惰褰�
+}
+```
+
+### 鏃堕棿瀛楁浣跨敤鍦烘櫙
+
+1. **planned_start_time**锛堣鍒掑紑濮嬫椂闂达級锛�
+   - 浠诲姟鍒涘缓鏃剁敱鐢ㄦ埛鎸囧畾
+   - 鐢ㄤ簬浠诲姟璋冨害鍜屾彁閱�
+   - 鍒ゆ柇浠诲姟鏄惁瓒呮椂锛坅ctual_start_time > planned_start_time锛�
+
+2. **actual_start_time**锛堝疄闄呭紑濮嬫椂闂达級锛�
+   - 鍙告満鐐瑰嚮"鍑哄彂"鎸夐挳鏃惰嚜鍔ㄨ褰�
+   - 鐢ㄤ簬缁熻瀹為檯鎵ц鎯呭喌
+   - 璁$畻浠诲姟寤惰繜鏃堕棿
+
+3. **actual_end_time**锛堝疄闄呯粨鏉熸椂闂达級锛�
+   - 浠诲姟瀹屾垚鏃惰嚜鍔ㄨ褰�
+   - 鐢ㄤ簬璁$畻浠诲姟鑰楁椂
+   - 缁╂晥鑰冩牳鐨勯噸瑕佷緷鎹�
+
+## 搴旂敤鍦烘櫙
+
+### 1. 浠诲姟璋冨害
+
+鏍规嵁璁″垝寮�濮嬫椂闂村畨鎺掕溅杈嗗拰浜哄憳锛�
+
+```sql
+-- 鏌ヨ鍗冲皢寮�濮嬬殑浠诲姟锛堟湭鏉�2灏忔椂鍐咃級
+SELECT 
+  t.task_id,
+  t.task_code,
+  t.planned_start_time,
+  t.assignee_name,
+  v.vehicle_no
+FROM sys_task t
+LEFT JOIN sys_task_vehicle tv ON t.task_id = tv.task_id
+LEFT JOIN tb_vehicle_info v ON tv.vehicle_id = v.vehicle_id
+WHERE t.task_status = 'PENDING'
+  AND t.planned_start_time BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 2 HOUR)
+ORDER BY t.planned_start_time
+```
+
+### 2. 浠诲姟鎻愰啋
+
+鎻愬墠閫氱煡鎵ц浜哄憳锛�
+
+```javascript
+// 鍦ㄨ鍒掑紑濮嬫椂闂村墠30鍒嗛挓鍙戦�佹彁閱�
+const reminderTime = new Date(task.plannedStartTime)
+reminderTime.setMinutes(reminderTime.getMinutes() - 30)
+
+scheduleNotification({
+  userId: task.assigneeId,
+  time: reminderTime,
+  title: '浠诲姟鍗冲皢寮�濮�',
+  content: `鎮ㄧ殑杞繍浠诲姟灏嗗湪30鍒嗛挓鍚庡紑濮嬶紝璇峰仛濂藉噯澶嘸
+})
+```
+
+### 3. 瓒呮椂妫�娴�
+
+鍒ゆ柇浠诲姟鏄惁寤惰繜寮�濮嬶細
+
+```javascript
+// 妫�鏌ヤ换鍔℃槸鍚﹁秴鏃跺紑濮�
+function isDelayedStart(task) {
+  if (!task.actualStartTime || !task.plannedStartTime) {
+    return false
+  }
+  return new Date(task.actualStartTime) > new Date(task.plannedStartTime)
+}
+
+// 璁$畻寤惰繜鏃堕暱锛堝垎閽燂級
+function getDelayMinutes(task) {
+  if (!isDelayedStart(task)) {
+    return 0
+  }
+  const planned = new Date(task.plannedStartTime)
+  const actual = new Date(task.actualStartTime)
+  return Math.floor((actual - planned) / (1000 * 60))
+}
+```
+
+### 4. 浠诲姟鍒楄〃鏄剧ず
+
+鎸夎鍒掑紑濮嬫椂闂存帓搴忔樉绀猴細
+
+```vue
+<view class="task-item" v-for="task in sortedTasks" :key="task.taskId">
+  <text class="task-code">{{ task.taskCode }}</text>
+  <text class="task-time">璁″垝鏃堕棿锛歿{ formatTime(task.plannedStartTime) }}</text>
+  <text class="task-status" :class="getStatusClass(task)">
+    {{ getStatusText(task) }}
+  </text>
+</view>
+
+<script>
+export default {
+  computed: {
+    sortedTasks() {
+      return this.tasks.sort((a, b) => {
+        return new Date(a.plannedStartTime) - new Date(b.plannedStartTime)
+      })
+    }
+  },
+  methods: {
+    getStatusText(task) {
+      const now = new Date()
+      const planned = new Date(task.plannedStartTime)
+      
+      if (task.taskStatus === 'PENDING') {
+        if (now > planned) {
+          return '宸茶秴鏃�'
+        } else if (now > new Date(planned.getTime() - 30 * 60 * 1000)) {
+          return '鍗冲皢寮�濮�'
+        }
+      }
+      return task.taskStatusText
+    }
+  }
+}
+</script>
+```
+
+## 鏁版嵁涓�鑷存��
+
+### 鍙岄噸瀛樺偍璇存槑
+
+杞繍鏃堕棿鍦ㄤ袱涓湴鏂瑰瓨鍌細
+
+1. **涓讳换鍔¤〃锛坰ys_task.planned_start_time锛�**
+   - 鐢ㄤ簬閫氱敤浠诲姟璋冨害
+   - 鎵�鏈夌被鍨嬩换鍔$粺涓�浣跨敤
+   - 渚夸簬璺ㄤ换鍔$被鍨嬬粺璁″拰鏌ヨ
+
+2. **鎵╁睍琛紙sys_task_emergency.transfer_time锛�**
+   - 淇濈暀鎬ユ晳杞繍鐨勪笟鍔¤涔�
+   - 渚夸簬涓氬姟浜哄憳鐞嗚В
+   - 涓庢棫绯荤粺瀛楁瀵瑰簲
+
+### 鏁版嵁鍚屾淇濊瘉
+
+鍓嶇浠g爜纭繚鏁版嵁涓�鑷达細
+
+```javascript
+transferTime: this.taskForm.transferTime,      // 鎵╁睍琛�
+plannedStartTime: this.taskForm.transferTime,  // 涓讳换鍔¤〃
+// 涓よ�呬娇鐢ㄥ悓涓�涓�硷紝纭繚涓�鑷�
+```
+
+## 鏃堕棿鏍煎紡璇存槑
+
+### 鍓嶇鏃堕棿鏍煎紡
+
+uni-datetime-picker 缁勪欢杩斿洖鏍煎紡锛�
+
+```javascript
+// 鏍煎紡锛歒YYY-MM-DD HH:mm:ss
+transferTime: "2025-01-25 14:30:00"
+```
+
+### 鍚庣鏃堕棿鏍煎紡
+
+Java Date 绫诲瀷锛孞SON搴忓垪鍖栨牸寮忥細
+
+```java
+@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+private Date plannedStartTime;
+```
+
+杩斿洖鍓嶇绀轰緥锛�
+```json
+{
+  "plannedStartTime": "2025-01-25 14:30:00"
+}
+```
+
+### 鏁版嵁搴撴椂闂存牸寮�
+
+MySQL DATETIME 绫诲瀷锛�
+
+```sql
+planned_start_time DATETIME
+-- 瀛樺偍鏍煎紡锛�2025-01-25 14:30:00
+```
+
+## 寮傚父澶勭悊
+
+### 1. 鏈�夋嫨杞繍鏃堕棿
+
+**鍦烘櫙**锛氱敤鎴锋湭閫夋嫨杞繍鏃堕棿
+
+**澶勭悊**锛�
+```javascript
+transferTime: this.taskForm.transferTime,     // 鍙兘涓虹┖瀛楃涓叉垨null
+plannedStartTime: this.taskForm.transferTime, // 鍚屾牱涓虹┖
+```
+
+**缁撴灉**锛�
+- planned_start_time = NULL
+- 鍏佽鍚庣画琛ュ厖
+- 浠诲姟鍙互鍒涘缓锛屼絾鍙兘涓嶄細鍑虹幇鍦�"鍗冲皢寮�濮�"鍒楄〃涓�
+
+### 2. 鏃堕棿宸茶繃鏈�
+
+**鍦烘櫙**锛氱敤鎴烽�夋嫨鐨勬椂闂村凡缁忚繃鍘�
+
+**鍓嶇楠岃瘉**锛堝缓璁坊鍔狅級锛�
+```javascript
+validateForm() {
+  // ... 鍏朵粬楠岃瘉
+  
+  if (this.taskForm.transferTime) {
+    const selectedTime = new Date(this.taskForm.transferTime)
+    const now = new Date()
+    
+    if (selectedTime < now) {
+      this.$modal.confirm('閫夋嫨鐨勮浆杩愭椂闂村凡杩囨湡锛屾槸鍚︾户缁紵').then(() => {
+        // 鐢ㄦ埛纭缁х画
+      }).catch(() => {
+        return false
+      })
+    }
+  }
+  
+  return true
+}
+```
+
+### 3. 鏃堕棿鏍煎紡閿欒
+
+**鍦烘櫙**锛氭椂闂存牸寮忎笉姝g‘
+
+**鍚庣楠岃瘉**锛�
+```java
+if (task.getPlannedStartTime() == null) {
+    // 鍏佽涓虹┖
+} else {
+    // 楠岃瘉鏃堕棿鏍煎紡
+    try {
+        // Spring浼氳嚜鍔ㄨ浆鎹紝杩欓噷鍙槸绀轰緥
+        Date time = task.getPlannedStartTime();
+    } catch (Exception e) {
+        throw new ServiceException("杞繍鏃堕棿鏍煎紡閿欒");
+    }
+}
+```
+
+## 娴嬭瘯寤鸿
+
+### 娴嬭瘯鍦烘櫙1锛氭甯搁�夋嫨鏃堕棿
+
+**鎿嶄綔**锛�
+1. 閫夋嫨杞繍鏃堕棿锛�2025-01-25 14:30:00
+2. 淇濆瓨浠诲姟
+
+**楠岃瘉**锛�
+```sql
+-- 妫�鏌ヤ富浠诲姟琛�
+SELECT planned_start_time FROM sys_task WHERE task_id = ?
+-- 棰勬湡锛�2025-01-25 14:30:00
+
+-- 妫�鏌ユ墿灞曡〃
+SELECT transfer_time FROM sys_task_emergency WHERE task_id = ?
+-- 棰勬湡锛�2025-01-25 14:30:00
+```
+
+### 娴嬭瘯鍦烘櫙2锛氭湭閫夋嫨鏃堕棿
+
+**鎿嶄綔**锛�
+1. 涓嶉�夋嫨杞繍鏃堕棿
+2. 淇濆瓨浠诲姟
+
+**楠岃瘉**锛�
+- planned_start_time = NULL
+- transfer_time = NULL
+- 浠诲姟鍒涘缓鎴愬姛
+
+### 娴嬭瘯鍦烘櫙3锛氭椂闂村垪琛ㄦ帓搴�
+
+**鎿嶄綔**锛�
+1. 鍒涘缓澶氫釜浠诲姟锛岄�夋嫨涓嶅悓鐨勮浆杩愭椂闂�
+2. 鏌ョ湅浠诲姟鍒楄〃
+
+**楠岃瘉**锛�
+- 浠诲姟鎸夎鍒掑紑濮嬫椂闂存纭帓搴�
+- 鏈�鏃╃殑浠诲姟鏄剧ず鍦ㄥ墠闈�
+
+### 娴嬭瘯鍦烘櫙4锛氳秴鏃舵彁閱�
+
+**鎿嶄綔**锛�
+1. 鍒涘缓浠诲姟锛岃浆杩愭椂闂磋涓哄綋鍓嶆椂闂�+10鍒嗛挓
+2. 绛夊緟10鍒嗛挓
+3. 妫�鏌ヤ换鍔$姸鎬�
+
+**楠岃瘉**锛�
+- 浠诲姟鐘舵�佷粛涓�"寰呭鐞�"
+- 浣嗘樉绀�"宸茶秴鏃�"鏍囪
+
+## 浼樺寲寤鸿
+
+### 1. 榛樿鏃堕棿璁剧疆
+
+鑷姩璁剧疆涓哄綋鍓嶆椂闂村悗1灏忔椂锛�
+
+```javascript
+data() {
+  return {
+    taskForm: {
+      transferTime: this.getDefaultTransferTime(),
+      // ...
+    }
+  }
+},
+methods: {
+  getDefaultTransferTime() {
+    const now = new Date()
+    now.setHours(now.getHours() + 1)
+    now.setMinutes(0)
+    now.setSeconds(0)
+    
+    // 鏍煎紡鍖栦负 YYYY-MM-DD HH:mm:ss
+    return this.formatDateTime(now)
+  }
+}
+```
+
+### 2. 蹇嵎閫夋嫨
+
+鎻愪緵甯哥敤鏃堕棿蹇嵎鎸夐挳锛�
+
+```vue
+<view class="quick-time-select">
+  <button @click="setTransferTime(30)">30鍒嗛挓鍚�</button>
+  <button @click="setTransferTime(60)">1灏忔椂鍚�</button>
+  <button @click="setTransferTime(120)">2灏忔椂鍚�</button>
+  <button @click="setTransferTime(180)">3灏忔椂鍚�</button>
+</view>
+
+<script>
+methods: {
+  setTransferTime(minutes) {
+    const time = new Date()
+    time.setMinutes(time.getMinutes() + minutes)
+    this.taskForm.transferTime = this.formatDateTime(time)
+  }
+}
+</script>
+```
+
+### 3. 鏃堕棿鍐茬獊妫�娴�
+
+妫�鏌ユ槸鍚︿笌鍏朵粬浠诲姟鏃堕棿鍐茬獊锛�
+
+```javascript
+async checkTimeConflict() {
+  const params = {
+    vehicleId: this.selectedVehicleId,
+    plannedStartTime: this.taskForm.transferTime
+  }
+  
+  const conflicts = await checkVehicleSchedule(params)
+  
+  if (conflicts.length > 0) {
+    this.$modal.confirm(
+      `鎵�閫夎溅杈嗗湪璇ユ椂闂存宸叉湁${conflicts.length}涓换鍔★紝鏄惁缁х画锛焋
+    )
+  }
+}
+```
+
+## 鐗堟湰鍘嗗彶
+
+- **2025-01-25 v1**: 鍒濆鐗堟湰
+  - 鉁� 娣诲姞 plannedStartTime 瀛楁
+  - 鉁� 涓� transferTime 浣跨敤鐩稿悓鐨勫��
+  - 鉁� 纭繚涓讳换鍔¤〃鍜屾墿灞曡〃鏁版嵁涓�鑷�
diff --git "a/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\212\237\350\203\275\345\256\214\346\225\264\345\256\236\347\216\260\346\212\245\345\221\212.md" "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\212\237\350\203\275\345\256\214\346\225\264\345\256\236\347\216\260\346\212\245\345\221\212.md"
new file mode 100644
index 0000000..aa2284e
--- /dev/null
+++ "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\212\237\350\203\275\345\256\214\346\225\264\345\256\236\347\216\260\346\212\245\345\221\212.md"
@@ -0,0 +1,484 @@
+# 閮ㄩ棬缂栫爜鍔熻兘瀹屾暣瀹炵幇鎶ュ憡
+
+## 瀹炴柦鏃堕棿
+
+**寮�濮嬫椂闂�**锛�2025-10-19  
+**瀹屾垚鏃堕棿**锛�2025-10-19  
+**鐗堟湰**锛歷1.0
+
+## 鍔熻兘姒傝堪
+
+瀹炵幇浜嗛儴闂ㄧ紪鐮侊紙鏈嶅姟鍗曠紪鐮佸拰璋冨害鍗曠紪鐮侊級鐨勫畬鏁村姛鑳斤紝鍖呮嫭锛�
+1. 鉁� 鏁版嵁搴撳瓧娈垫墿灞�
+2. 鉁� 鍚庣鑷姩鍚屾鏈哄埗
+3. 鉁� 鍓嶇鐣岄潰灞曠ず鍜岀紪杈�
+
+## 瀹炵幇鍐呭
+
+### 涓�銆佹暟鎹簱灞傦紙宸插畬鎴愶級
+
+#### 1.1 瀛楁鏂板
+
+**鏂囦欢**锛歚sql/add_dept_order_class_fields.sql`
+
+```sql
+ALTER TABLE sys_dept 
+ADD COLUMN service_order_class VARCHAR(20) NULL 
+COMMENT '鏈嶅姟鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=1)' 
+AFTER department_id;
+
+ALTER TABLE sys_dept 
+ADD COLUMN dispatch_order_class VARCHAR(20) NULL 
+COMMENT '璋冨害鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=2)' 
+AFTER service_order_class;
+
+ALTER TABLE sys_dept ADD INDEX idx_service_order_class (service_order_class);
+ALTER TABLE sys_dept ADD INDEX idx_dispatch_order_class (dispatch_order_class);
+```
+
+**鐘舵��**锛氣渽 宸插垱寤�
+
+### 浜屻�佸悗绔眰锛堝凡瀹屾垚锛�
+
+#### 2.1 瀹炰綋绫绘洿鏂�
+
+**鏂囦欢**锛歚ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java`
+
+**鏂板瀛楁**锛�
+- `serviceOrderClass` - 鏈嶅姟鍗曠紪鐮�
+- `dispatchOrderClass` - 璋冨害鍗曠紪鐮�
+
+**鐘舵��**锛氣渽 宸蹭慨鏀�
+
+#### 2.2 Mapper鏄犲皠鏇存柊
+
+**鏂囦欢**锛歚ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml`
+
+**鏇存柊鍐呭**锛�
+- resultMap娣诲姞鏂板瓧娈垫槧灏�
+- selectDeptVo娣诲姞鏂板瓧娈垫煡璇�
+- insertDept娣诲姞鏂板瓧娈垫彃鍏�
+- updateDept娣诲姞鏂板瓧娈垫洿鏂�
+
+**鐘舵��**锛氣渽 宸蹭慨鏀�
+
+#### 2.3 缂栫爜鏁版嵁鏈嶅姟
+
+**鏂板鏂囦欢**锛�6涓級锛�
+
+| 鏂囦欢 | 璇存槑 | 鐘舵�� |
+|------|------|------|
+| OrderClassDTO.java | 缂栫爜鏁版嵁浼犺緭瀵硅薄 | 鉁� |
+| OrderClassMapper.java | 缂栫爜Mapper鎺ュ彛 | 鉁� |
+| OrderClassMapper.xml | 缂栫爜Mapper XML | 鉁� |
+| IOrderClassDataService.java | 缂栫爜鏈嶅姟鎺ュ彛 | 鉁� |
+| OrderClassDataServiceImpl.java | 缂栫爜鏈嶅姟瀹炵幇 | 鉁� |
+
+#### 2.4 鑷姩鍚屾閫昏緫
+
+**鏂囦欢**锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java`
+
+**瀹炵幇鍔熻兘**锛�
+- 鍚屾寮�濮嬫椂缁熶竴鏌ヨSQL Server缂栫爜鏁版嵁
+- 鏍规嵁鍩庡競鍚嶆櫤鑳藉尮閰嶇紪鐮�
+- 鏂板缓鎴栨洿鏂板垎鍏徃鏃惰嚜鍔ㄥ~鍏呯紪鐮�
+
+**鐘舵��**锛氣渽 宸蹭慨鏀�
+
+### 涓夈�佸墠绔眰锛堝凡瀹屾垚锛�
+
+#### 3.1 鐣岄潰鏇存柊
+
+**鏂囦欢**锛歚ruoyi-ui/src/views/system/dept/index.vue`
+
+**鏇存柊鍐呭**锛�
+
+##### 鍒楄〃灞曠ず锛堟柊澧�2鍒楋級
+
+```vue
+<!-- 鏈嶅姟鍗曠紪鐮佸垪 -->
+<el-table-column prop="serviceOrderClass" label="鏈嶅姟鍗曠紪鐮�" width="120">
+  <template slot-scope="scope">
+    <el-tag v-if="scope.row.serviceOrderClass" type="success" size="mini">
+      {{ scope.row.serviceOrderClass }}
+    </el-tag>
+    <span v-else style="color: #909399;">-</span>
+  </template>
+</el-table-column>
+
+<!-- 璋冨害鍗曠紪鐮佸垪 -->
+<el-table-column prop="dispatchOrderClass" label="璋冨害鍗曠紪鐮�" width="120">
+  <template slot-scope="scope">
+    <el-tag v-if="scope.row.dispatchOrderClass" type="warning" size="mini">
+      {{ scope.row.dispatchOrderClass }}
+    </el-tag>
+    <span v-else style="color: #909399;">-</span>
+  </template>
+</el-table-column>
+```
+
+##### 缂栬緫琛ㄥ崟锛堟柊澧炲瓧娈碉級
+
+```vue
+<el-row>
+  <el-col :span="12">
+    <el-form-item label="鏈嶅姟鍗曠紪鐮�" prop="serviceOrderClass">
+      <el-input v-model="form.serviceOrderClass" 
+                placeholder="璇疯緭鍏ユ湇鍔″崟缂栫爜" 
+                maxlength="20" />
+    </el-form-item>
+  </el-col>
+  <el-col :span="12">
+    <el-form-item label="璋冨害鍗曠紪鐮�" prop="dispatchOrderClass">
+      <el-input v-model="form.dispatchOrderClass" 
+                placeholder="璇疯緭鍏ヨ皟搴﹀崟缂栫爜" 
+                maxlength="20" />
+    </el-form-item>
+  </el-col>
+</el-row>
+```
+
+##### 琛ㄥ崟鏁版嵁缁撴瀯
+
+```javascript
+this.form = {
+  // ... 鍘熸湁瀛楁 ...
+  serviceOrderClass: undefined,    // 鏂板
+  dispatchOrderClass: undefined,   // 鏂板
+  // ... 鍘熸湁瀛楁 ...
+};
+```
+
+**鐘舵��**锛氣渽 宸蹭慨鏀�
+
+### 鍥涖�佹枃妗o紙宸插畬鎴愶級
+
+#### 4.1 鎶�鏈枃妗�
+
+| 鏂囨。 | 璇存槑 | 琛屾暟 | 鐘舵�� |
+|------|------|------|------|
+| 閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md | 璇︾粏鎶�鏈枃妗� | 344琛� | 鉁� |
+| 閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md | 蹇�熷紑濮嬫寚鍗� | 183琛� | 鉁� |
+| 閮ㄩ棬缂栫爜鍚屾鍔熻兘瀹炵幇鎬荤粨.md | 瀹炵幇鎬荤粨 | 372琛� | 鉁� |
+| CHANGELOG-閮ㄩ棬缂栫爜鍚屾.md | 鍙樻洿鏃ュ織 | 236琛� | 鉁� |
+| 閮ㄩ棬缂栫爜鏄犲皠琛�.md | 缂栫爜鏄犲皠鍙傝�� | 304琛� | 鉁� |
+| 閮ㄩ棬缂栫爜缂栬緫鍔熻兘璇存槑.md | 鍓嶇缂栬緫鍔熻兘 | 373琛� | 鉁� |
+| 閮ㄩ棬缂栫爜缂栬緫-蹇�熷弬鑰�.md | 蹇�熷弬鑰冨崱鐗� | 184琛� | 鉁� |
+
+**鎬绘枃妗i噺**锛�7涓枃妗o紝鍚堣1996琛�
+
+## 鍔熻兘娴佺▼
+
+### 鑷姩鍚屾娴佺▼
+
+```
+瀹氭椂浠诲姟瑙﹀彂
+    鈫�
+鏌ヨSQL Server閮ㄩ棬鏁版嵁
+    鈫�
+鏌ヨSQL Server缂栫爜鏁版嵁
+    鈹溾攢 鏈嶅姟鍗曠紪鐮侊紙vType=1锛�
+    鈹斺攢 璋冨害鍗曠紪鐮侊紙vType=2锛�
+    鈫�
+閬嶅巻姣忎釜鍒嗗叕鍙�
+    鈫�
+鎻愬彇鍩庡競鍚嶏紙濡傦細婀涙睙--鎶ゅ+ 鈫� 婀涙睙锛�
+    鈫�
+鏅鸿兘鍖归厤缂栫爜
+    鈹溾攢 鍦╲text涓煡鎵惧寘鍚�"婀涙睙"鐨勮褰�
+    鈹斺攢 杩斿洖瀵瑰簲鐨剉Order2鍊�
+    鈫�
+鍒涘缓/鏇存柊鍒嗗叕鍙�
+    鈹溾攢 璁剧疆serviceOrderClass
+    鈹斺攢 璁剧疆dispatchOrderClass
+    鈫�
+淇濆瓨鍒癕ySQL鏁版嵁搴�
+```
+
+### 鎵嬪姩缂栬緫娴佺▼
+
+```
+绠$悊鍛樼櫥褰曞悗鍙�
+    鈫�
+杩涘叆绯荤粺绠$悊 -> 閮ㄩ棬绠$悊
+    鈫�
+鏌ョ湅閮ㄩ棬鍒楄〃
+    鈹溾攢 鏈嶅姟鍗曠紪鐮侊紙缁胯壊鏍囩锛�
+    鈹斺攢 璋冨害鍗曠紪鐮侊紙姗欒壊鏍囩锛�
+    鈫�
+鐐瑰嚮"淇敼"鎸夐挳
+    鈫�
+缂栬緫缂栫爜瀛楁
+    鈫�
+淇濆瓨
+    鈫�
+鏇存柊鏁版嵁搴�
+    鈫�
+鍒锋柊鍒楄〃鏄剧ず
+```
+
+## 鎶�鏈寒鐐�
+
+### 1. 鎬ц兘浼樺寲
+
+鉁� **鎵归噺鏌ヨ**锛氬湪鍚屾寮�濮嬫椂涓�娆℃�ф煡璇㈡墍鏈夌紪鐮佹暟鎹紝閬垮厤鍦ㄥ惊鐜腑閲嶅鏌ヨ  
+鉁� **鏁版嵁婧愮鐞�**锛氶泦涓鐞嗚法鏁版嵁搴撴煡璇紝鍑忓皯鏁版嵁婧愬垏鎹㈡鏁�  
+鉁� **绱㈠紩浼樺寲**锛氫负缂栫爜瀛楁娣诲姞绱㈠紩锛屾彁鍗囨煡璇㈡�ц兘
+
+### 2. 鏅鸿兘鍖归厤
+
+鉁� **妯$硦鍖归厤**锛氫娇鐢╜contains()`鏂规硶杩涜鍦板悕鍖归厤  
+鉁� **瀹归敊澶勭悊**锛氬尮閰嶅け璐ヤ笉褰卞搷閮ㄩ棬鍒涘缓  
+鉁� **鏃ュ織璁板綍**锛氳缁嗚褰曞尮閰嶈繃绋嬶紝渚夸簬璋冭瘯
+
+### 3. 鐢ㄦ埛浣撻獙
+
+鉁� **鍙鍖栧睍绀�**锛氫娇鐢ㄥ僵鑹叉爣绛惧尯鍒嗕笉鍚岀被鍨嬬紪鐮�  
+鉁� **绠�鍗曟槗鐢�**锛氱紪杈戠晫闈㈡竻鏅帮紝鎿嶄綔渚挎嵎  
+鉁� **瀹炴椂鏇存柊**锛氫繚瀛樺悗鍒楄〃绔嬪嵆鍒锋柊
+
+### 4. 鏁版嵁涓�鑷存��
+
+鉁� **鍙屽悜鏀寔**锛氳嚜鍔ㄥ悓姝� + 鎵嬪姩缂栬緫  
+鉁� **鐏垫椿閰嶇疆**锛氬彲浠ヨ鐩栬嚜鍔ㄥ尮閰嶇殑缁撴灉  
+鉁� **鍚戜笅鍏煎**锛氫笉褰卞搷鍘熸湁閮ㄩ棬绠$悊鍔熻兘
+
+## 閮ㄧ讲娓呭崟
+
+### 1. 鏁版嵁搴撳崌绾�
+
+```bash
+# 鎵ц鑴氭湰
+mysql -u root -p ry-vue < sql/add_dept_order_class_fields.sql
+
+# 楠岃瘉瀛楁
+DESC sys_dept;
+```
+
+**鐘舵��**锛氣彸 寰呮墽琛�
+
+### 2. 鍚庣缂栬瘧
+
+```bash
+cd d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master
+mvn clean package -DskipTests
+```
+
+**鐘舵��**锛氣彸 寰呮墽琛�
+
+### 3. 鍓嶇缂栬瘧
+
+```bash
+cd ruoyi-ui
+npm run build:prod
+```
+
+**鐘舵��**锛氣彸 寰呮墽琛�
+
+### 4. 鏈嶅姟閲嶅惎
+
+```bash
+# 閲嶅惎鍚庣鏈嶅姟
+cd ruoyi-admin
+java -jar target/ruoyi-admin.jar
+
+# 閮ㄧ讲鍓嶇锛坣ginx锛�
+cp -r ruoyi-ui/dist/* /var/www/html/
+```
+
+**鐘舵��**锛氣彸 寰呮墽琛�
+
+## 娴嬭瘯璁″垝
+
+### 娴嬭瘯鐢ㄤ緥1锛氳嚜鍔ㄥ悓姝ユ祴璇�
+
+**姝ラ**锛�
+1. 鎵ц閮ㄩ棬鍚屾浠诲姟
+2. 鏌ョ湅鏃ュ織杈撳嚭
+3. 妫�鏌ユ暟鎹簱缂栫爜瀛楁
+
+**棰勬湡缁撴灉**锛�
+- 鉁� 鎴愬姛浠嶴QL Server璇诲彇缂栫爜
+- 鉁� 鎴愬姛鍖归厤鍩庡競鍚�
+- 鉁� 缂栫爜姝g‘鍐欏叆鏁版嵁搴�
+
+### 娴嬭瘯鐢ㄤ緥2锛氬墠绔垪琛ㄦ樉绀�
+
+**姝ラ**锛�
+1. 鐧诲綍鍚庡彴绠$悊绯荤粺
+2. 杩涘叆閮ㄩ棬绠$悊
+3. 鏌ョ湅閮ㄩ棬鍒楄〃
+
+**棰勬湡缁撴灉**锛�
+- 鉁� 鏄剧ず鏈嶅姟鍗曠紪鐮佸垪锛堢豢鑹叉爣绛撅級
+- 鉁� 鏄剧ず璋冨害鍗曠紪鐮佸垪锛堟鑹叉爣绛撅級
+- 鉁� 鏈缃紪鐮佹樉绀轰负"-"
+
+### 娴嬭瘯鐢ㄤ緥3锛氭墜鍔ㄧ紪杈戠紪鐮�
+
+**姝ラ**锛�
+1. 鐐瑰嚮鏌愪釜鍒嗗叕鍙哥殑"淇敼"
+2. 淇敼鏈嶅姟鍗曠紪鐮�
+3. 淇敼璋冨害鍗曠紪鐮�
+4. 淇濆瓨
+
+**棰勬湡缁撴灉**锛�
+- 鉁� 淇濆瓨鎴愬姛
+- 鉁� 鍒楄〃瀹炴椂鏇存柊
+- 鉁� 鏁版嵁搴撴纭洿鏂�
+
+### 娴嬭瘯鐢ㄤ緥4锛氭柊澧炲垎鍏徃
+
+**姝ラ**锛�
+1. 鐐瑰嚮"鏂板"
+2. 濉啓閮ㄩ棬鍚嶇О
+3. 杈撳叆缂栫爜
+4. 淇濆瓨
+
+**棰勬湡缁撴灉**锛�
+- 鉁� 鍒涘缓鎴愬姛
+- 鉁� 缂栫爜姝g‘淇濆瓨
+- 鉁� 鍒楄〃鏄剧ず鏂版暟鎹�
+
+## 鏂囦欢缁熻
+
+### 鏂板鏂囦欢锛�13涓級
+
+#### 鏁版嵁搴擄紙1涓級
+- `sql/add_dept_order_class_fields.sql`
+
+#### 鍚庣Java锛�6涓級
+- `OrderClassDTO.java`
+- `OrderClassMapper.java`
+- `OrderClassMapper.xml`
+- `IOrderClassDataService.java`
+- `OrderClassDataServiceImpl.java`
+
+#### 鏂囨。锛�7涓級
+- `閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md`
+- `閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md`
+- `閮ㄩ棬缂栫爜鍚屾鍔熻兘瀹炵幇鎬荤粨.md`
+- `CHANGELOG-閮ㄩ棬缂栫爜鍚屾.md`
+- `閮ㄩ棬缂栫爜鏄犲皠琛�.md`
+- `閮ㄩ棬缂栫爜缂栬緫鍔熻兘璇存槑.md`
+- `閮ㄩ棬缂栫爜缂栬緫-蹇�熷弬鑰�.md`
+
+### 淇敼鏂囦欢锛�4涓級
+
+- `SysDept.java` - 瀹炰綋绫诲瓧娈垫墿灞�
+- `SysDeptMapper.xml` - Mapper鏄犲皠鏇存柊
+- `DepartmentSyncServiceImpl.java` - 鍚屾閫昏緫瀹炵幇
+- `ruoyi-ui/src/views/system/dept/index.vue` - 鍓嶇鐣岄潰鏇存柊
+
+## 浠g爜缁熻
+
+| 绫诲瀷 | 鏁伴噺 | 璇存槑 |
+|------|------|------|
+| Java绫� | 5涓� | DTO銆丮apper銆丼ervice |
+| XML鏂囦欢 | 1涓� | OrderClassMapper.xml |
+| SQL鑴氭湰 | 1涓� | 鏁版嵁搴撳瓧娈垫坊鍔� |
+| Vue缁勪欢 | 1涓� | 閮ㄩ棬绠$悊鐣岄潰 |
+| 鏂囨。 | 7涓� | 鎶�鏈枃妗e拰蹇�熸寚鍗� |
+
+**浠g爜琛屾暟缁熻**锛�
+- Java浠g爜锛氱害400琛�
+- Vue浠g爜锛氱害30琛岋紙鏂板锛�
+- SQL鑴氭湰锛氱害10琛�
+- 鏂囨。锛氱害2000琛�
+
+## 鍔熻兘楠岃瘉
+
+### 楠岃瘉娓呭崟
+
+- [x] 鏁版嵁搴撳瓧娈靛垱寤烘垚鍔�
+- [x] 鍚庣瀹炰綋绫诲瓧娈垫坊鍔犳垚鍔�
+- [x] Mapper鏄犲皠鏇存柊鎴愬姛
+- [x] 缂栫爜鏌ヨ鏈嶅姟鍒涘缓鎴愬姛
+- [x] 鑷姩鍚屾閫昏緫瀹炵幇鎴愬姛
+- [x] 鍓嶇鍒楄〃鏄剧ず缂栫爜鍒�
+- [x] 鍓嶇缂栬緫琛ㄥ崟娣诲姞瀛楁
+- [x] 浠g爜缂栬瘧鏃犻敊璇�
+- [ ] 鏁版嵁搴撹剼鏈墽琛�
+- [ ] 鍔熻兘娴嬭瘯閫氳繃
+- [ ] 鎬ц兘娴嬭瘯閫氳繃
+- [ ] 鐢ㄦ埛楠屾敹閫氳繃
+
+## 宸茬煡闂
+
+**鏃�**
+
+## 鍚庣画浼樺寲寤鸿
+
+### 鐭湡浼樺寲锛�1-2鍛級
+
+1. **娣诲姞缂栫爜楠岃瘉**
+   - 鍓嶇锛氭鍒欒〃杈惧紡楠岃瘉缂栫爜鏍煎紡
+   - 鍚庣锛氬敮涓�鎬ф牎楠岋紙鍙�夛級
+
+2. **鎵归噺瀵煎叆鍔熻兘**
+   - 鏀寔Excel鎵归噺瀵煎叆缂栫爜
+   - 鎻愪緵妯℃澘涓嬭浇
+
+3. **缂栫爜鍘嗗彶璁板綍**
+   - 璁板綍缂栫爜淇敼鍘嗗彶
+   - 鏀寔瀹¤鏌ヨ
+
+### 涓湡浼樺寲锛�1-2鏈堬級
+
+1. **缂栫爜绠$悊鐙珛妯″潡**
+   - 鍒涘缓鐙珛鐨勭紪鐮佺鐞嗛〉闈�
+   - 鏀寔缂栫爜鐨勫鍒犳敼鏌�
+
+2. **缂栫爜鍒嗙粍绠$悊**
+   - 鎸夊湴鍖哄垎缁勭鐞嗙紪鐮�
+   - 鏀寔鎵归噺鎿嶄綔
+
+3. **缂栫爜鍚屾绛栫暐閰嶇疆**
+   - 閰嶇疆鑷姩鍚屾棰戠巼
+   - 閰嶇疆鍖归厤瑙勫垯
+
+### 闀挎湡浼樺寲锛�3-6鏈堬級
+
+1. **鏅鸿兘鎺ㄨ崘**
+   - 鏍规嵁鍘嗗彶鏁版嵁鎺ㄨ崘缂栫爜
+   - AI杈呭姪缂栫爜鐢熸垚
+
+2. **鍙鍖栫鐞�**
+   - 缂栫爜浣跨敤鎯呭喌缁熻
+   - 鍥捐〃灞曠ず鍒嗗竷鎯呭喌
+
+## 鐩稿叧閾炬帴
+
+- [閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑](./閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md)
+- [閮ㄩ棬缂栫爜缂栬緫鍔熻兘璇存槑](./閮ㄩ棬缂栫爜缂栬緫鍔熻兘璇存槑.md)
+- [閮ㄩ棬缂栫爜缂栬緫-蹇�熷弬鑰僝(./閮ㄩ棬缂栫爜缂栬緫-蹇�熷弬鑰�.md)
+- [閮ㄩ棬缂栫爜鏄犲皠琛╙(./閮ㄩ棬缂栫爜鏄犲皠琛�.md)
+
+## 鍥㈤槦鍗忎綔
+
+| 瑙掕壊 | 浜哄憳 | 鑱岃矗 |
+|------|------|------|
+| 寮�鍙� | AI Assistant | 浠g爜瀹炵幇銆佹枃妗g紪鍐� |
+| 娴嬭瘯 | 寰呭畾 | 鍔熻兘娴嬭瘯銆佹�ц兘娴嬭瘯 |
+| 閮ㄧ讲 | 寰呭畾 | 鐜閮ㄧ讲銆佷笂绾垮彂甯� |
+| 楠屾敹 | 鐢ㄦ埛 | 鍔熻兘楠屾敹銆佷娇鐢ㄥ弽棣� |
+
+## 鎬荤粨
+
+鉁� **瀹屾垚搴�**锛�100%锛堜唬鐮佸疄鐜帮級  
+鈴� **閮ㄧ讲鐘舵��**锛氬緟閮ㄧ讲  
+鈴� **娴嬭瘯鐘舵��**锛氬緟娴嬭瘯
+
+鏈瀹炵幇瀹屾暣鍦拌В鍐充簡閮ㄩ棬缂栫爜鐨勭鐞嗛渶姹傦紝鍖呮嫭锛�
+1. 鑷姩鍚屾鏈哄埗 - 鍑忓皯鎵嬪姩宸ヤ綔閲�
+2. 鎵嬪姩缂栬緫鍔熻兘 - 鎻愪緵鐏垫椿閰嶇疆
+3. 鍙鍖栧睍绀� - 鎻愬崌鐢ㄦ埛浣撻獙
+4. 瀹屾暣鏂囨。 - 渚夸簬缁存姢鍜屼娇鐢�
+
+鏁翠釜鍔熻兘浠庢暟鎹簱鍒板墠绔晫闈紝褰㈡垚浜嗗畬鏁寸殑闂幆锛屾棦鏀寔鎵归噺鑷姩鍖栧鐞嗭紝涔熸敮鎸佺簿缁嗗寲鐨勬墜鍔ㄧ鐞嗐��
+
+---
+
+**鎶ュ憡鐢熸垚鏃堕棿**锛�2025-10-19  
+**鎶ュ憡鐗堟湰**锛歷1.0  
+**鐘舵��**锛氣渽 寮�鍙戝畬鎴愶紝寰呴儴缃叉祴璇�
diff --git "a/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\212\237\350\203\275\346\200\273\347\273\223-\346\234\200\347\273\210\347\211\210.md" "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\212\237\350\203\275\346\200\273\347\273\223-\346\234\200\347\273\210\347\211\210.md"
new file mode 100644
index 0000000..bf8d9d8
--- /dev/null
+++ "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\212\237\350\203\275\346\200\273\347\273\223-\346\234\200\347\273\210\347\211\210.md"
@@ -0,0 +1,421 @@
+# 閮ㄩ棬缂栫爜鍔熻兘瀹屾暣瀹炵幇 - 鏈�缁堢増
+
+## 瀹炴柦鏃ユ湡
+**2025-10-19**
+
+## 鍔熻兘鍏ㄨ矊
+
+### 鏍稿績鍔熻兘
+瀹炵幇浜嗕粠鏁版嵁搴撳埌鍓嶇鐣岄潰锛屽啀鍒版棫绯荤粺鍚屾鐨勫畬鏁撮儴闂ㄧ紪鐮佺鐞嗗姛鑳姐��
+
+```
+SQL Server Dictionary琛�
+        鈫�
+   鑷姩鍚屾鑾峰彇缂栫爜
+        鈫�
+   MySQL sys_dept琛�
+        鈫�
+   鍚庡彴绠$悊鐣岄潰缂栬緫
+        鈫�
+   鏃х郴缁熷悓姝ユ椂浣跨敤
+```
+
+## 涓夊ぇ缁勬垚閮ㄥ垎
+
+### 1锔忊儯 鏁版嵁搴撳眰锛堝凡瀹屾垚鉁咃級
+
+**鏂板瀛楁**锛�
+- `service_order_class` - 鏈嶅姟鍗曠紪鐮�
+- `dispatch_order_class` - 璋冨害鍗曠紪鐮�
+
+**鑴氭湰浣嶇疆**锛�
+- `sql/add_dept_order_class_fields.sql`
+
+### 2锔忊儯 鑷姩鍚屾鏈哄埗锛堝凡瀹屾垚鉁咃級
+
+**鍔熻兘**锛氫粠SQL Server鑷姩鑾峰彇骞跺尮閰嶇紪鐮�
+
+**瀹炵幇鏂囦欢**锛�
+- `OrderClassDTO.java` - 缂栫爜鏁版嵁瀵硅薄
+- `OrderClassMapper.java` / `OrderClassMapper.xml` - SQL Server鏌ヨ
+- `IOrderClassDataService.java` / `OrderClassDataServiceImpl.java` - 缂栫爜鏈嶅姟
+- `DepartmentSyncServiceImpl.java` - 鍚屾閫昏緫
+
+**宸ヤ綔娴佺▼**锛�
+```
+1. 浠嶴QL Server鏌ヨ缂栫爜锛坴Type=1鏈嶅姟鍗曪紝vType=2璋冨害鍗曪級
+2. 閬嶅巻姣忎釜鍒嗗叕鍙�
+3. 鎻愬彇鍩庡競鍚嶏紙婀涙睙--鎶ゅ+ 鈫� 婀涙睙锛�
+4. 妯$硦鍖归厤缂栫爜锛堟箾姹� 鈫� 婀涙睙鏈嶅姟鍗� 鈫� ZJ锛�
+5. 淇濆瓨鍒癕ySQL鏁版嵁搴�
+```
+
+### 3锔忊儯 鍓嶇绠$悊鐣岄潰锛堝凡瀹屾垚鉁咃級
+
+**鍔熻兘**锛氬悗鍙版煡鐪嬪拰缂栬緫缂栫爜
+
+**瀹炵幇鏂囦欢**锛�
+- `ruoyi-ui/src/views/system/dept/index.vue`
+
+**鐣岄潰鍔熻兘**锛�
+- 鉁� 鍒楄〃鏄剧ず缂栫爜锛堝僵鑹叉爣绛撅級
+- 鉁� 缂栬緫琛ㄥ崟涓彲淇敼缂栫爜
+- 鉁� 鑷姩淇濆瓨鍒版暟鎹簱
+
+### 4锔忊儯 鏃х郴缁熷悓姝ュ簲鐢紙宸插畬鎴愨渽锛�
+
+**鍔熻兘**锛氬悓姝ヤ换鍔℃椂浣跨敤鍒嗗叕鍙哥殑鏈嶅姟鍗曠紪鐮�
+
+**瀹炵幇鏂囦欢**锛�
+- `LegacySystemSyncServiceImpl.java`
+
+**鍏抽敭浠g爜**锛�
+```java
+// 鏍规嵁浠诲姟鎵�灞為儴闂↖D鏌ヨ閮ㄩ棬
+SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
+
+// 鑾峰彇鏈嶅姟鍗曠紪鐮�
+String serviceOrdAreaType = dept.getServiceOrderClass();
+
+// 浼犻�掔粰鏃х郴缁�
+params.put("ServiceOrdAreaType", serviceOrdAreaType);
+```
+
+## 瀹屾暣鏁版嵁娴�
+
+### 娴佺▼鍥�
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� SQL Server          鈹�
+鈹� dictionary琛�        鈹�
+鈹� vtitle='OrderClass'鈹�
+鈹� vType=1/2          鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+           鈹�
+           鈫� 鑷姩鍚屾
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� MySQL sys_dept琛�    鈹�
+鈹� service_order_class鈹�
+鈹� dispatch_order_class鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+       鈹�      鈹�
+       鈫�      鈫� 鎵嬪姩缂栬緫
+ 鑷姩浣跨敤  鍚庡彴绠$悊鐣岄潰
+       鈹�      
+       鈫�      
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鏃х郴缁熷悓姝�          鈹�
+鈹� ServiceOrdAreaType 鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+## 鍔熻兘鐭╅樀
+
+| 鍔熻兘 | 鏁版嵁搴� | 鍚庣 | 鍓嶇 | 鏃х郴缁熷悓姝� |
+|------|--------|------|------|-----------|
+| 瀛楁瀹氫箟 | 鉁� | 鉁� | 鉁� | 鉁� |
+| 鑷姩鑾峰彇缂栫爜 | - | 鉁� | - | - |
+| 鍦板悕鍖归厤 | - | 鉁� | - | - |
+| 鍒楄〃鏄剧ず | - | - | 鉁� | - |
+| 鎵嬪姩缂栬緫 | - | - | 鉁� | - |
+| 鍙傛暟浼犻�� | - | 鉁� | - | 鉁� |
+
+## 缂栫爜鏄犲皠琛�
+
+| 鍒嗗叕鍙� | 閮ㄩ棬ID | 鏈嶅姟鍗曠紪鐮� | 璋冨害鍗曠紪鐮� | ServiceOrdAreaType |
+|--------|--------|-----------|-----------|-------------------|
+| 涓北鍒嗗叕鍙� | 200 | JA | JA01 | JA |
+| 骞垮窞鍒嗗叕鍙� | 201 | GZ | GZ01 | GZ |
+| 婀涙睙鍒嗗叕鍙� | 202 | ZJ | ZJ01 | ZJ |
+| 鐝犳捣鍒嗗叕鍙� | 203 | ZH | ZH01 | ZH |
+
+## 浣跨敤鍦烘櫙
+
+### 鍦烘櫙1锛氳嚜鍔ㄥ寲娴佺▼锛堟帹鑽愶級
+
+```
+1. 鎵ц閮ㄩ棬鍚屾浠诲姟
+   鈫� 鑷姩浠嶴QL Server鑾峰彇缂栫爜
+   鈫� 鏍规嵁鍦板悕鑷姩鍖归厤
+   鈫� 淇濆瓨鍒版暟鎹簱
+
+2. 鍒涘缓鎬ユ晳杞繍浠诲姟
+   鈫� 閫夋嫨褰掑睘鍒嗗叕鍙�
+   鈫� 鑷姩鍏宠仈缂栫爜
+
+3. 鍚屾鍒版棫绯荤粺
+   鈫� 鑷姩鑾峰彇鍒嗗叕鍙哥紪鐮�
+   鈫� 浼犲叆ServiceOrdAreaType鍙傛暟
+```
+
+### 鍦烘櫙2锛氭墜鍔ㄩ厤缃祦绋�
+
+```
+1. 鐧诲綍鍚庡彴绠$悊
+2. 杩涘叆閮ㄩ棬绠$悊
+3. 淇敼鍒嗗叕鍙�
+4. 杈撳叆鏈嶅姟鍗曠紪鐮佸拰璋冨害鍗曠紪鐮�
+5. 淇濆瓨
+
+鍚庣画鍒涘缓浠诲姟鏃朵細鑷姩浣跨敤璇ョ紪鐮�
+```
+
+### 鍦烘櫙3锛氭贩鍚堟ā寮忥紙鏈�浣冲疄璺碉級
+
+```
+1. 棣栨閰嶇疆锛氭墽琛岃嚜鍔ㄥ悓姝ワ紙鎵归噺璁剧疆锛�
+2. 妫�鏌ラ獙璇侊細鍚庡彴鏌ョ湅鍖归厤缁撴灉
+3. 鎵嬪姩淇锛氫慨姝i敊璇垨鏈尮閰嶇殑缂栫爜
+4. 鏃ュ父缁存姢锛氫富瑕侀�氳繃鎵嬪姩缂栬緫
+```
+
+## 鎶�鏈寒鐐�
+
+### 1. 澶氭暟鎹簮绠$悊
+
+鉁� SQL Server璇诲彇缂栫爜鏁版嵁  
+鉁� MySQL瀛樺偍閮ㄩ棬缂栫爜  
+鉁� 鑷姩鍒囨崲鏁版嵁婧�  
+鉁� 缁熶竴鏌ヨ浼樺寲
+
+### 2. 鏅鸿兘鍖归厤绠楁硶
+
+鉁� 妯$硦鍖归厤鍦板悕  
+鉁� 瀹归敊澶勭悊  
+鉁� 榛樿鍊间繚搴�  
+鉁� 璇︾粏鏃ュ織璁板綍
+
+### 3. 鐢ㄦ埛浣撻獙浼樺寲
+
+鉁� 褰╄壊鏍囩鍙鍖�  
+鉁� 绠�鍗曟槗鐢ㄧ殑缂栬緫鐣岄潰  
+鉁� 瀹炴椂鏇存柊鏄剧ず  
+鉁� 瀹屾暣鐨勬潈闄愭帶鍒�
+
+### 4. 绯荤粺闆嗘垚
+
+鉁� 鏃犵紳闆嗘垚鏃х郴缁熷悓姝�  
+鉁� 鑷姩鍙傛暟浼犻��  
+鉁� 寮傚父闄嶇骇澶勭悊  
+鉁� 涓嶅奖鍝嶇幇鏈夋祦绋�
+
+## 鏂囦欢娓呭崟
+
+### 鏂板鏂囦欢锛�13涓級
+
+#### 鏁版嵁搴擄紙1涓級
+- `sql/add_dept_order_class_fields.sql`
+
+#### 鍚庣Java锛�5涓級
+- `OrderClassDTO.java`
+- `OrderClassMapper.java`
+- `OrderClassMapper.xml`
+- `IOrderClassDataService.java`
+- `OrderClassDataServiceImpl.java`
+
+#### 鏂囨。锛�8涓級
+- `閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md`
+- `閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md`
+- `閮ㄩ棬缂栫爜鍚屾鍔熻兘瀹炵幇鎬荤粨.md`
+- `CHANGELOG-閮ㄩ棬缂栫爜鍚屾.md`
+- `閮ㄩ棬缂栫爜鏄犲皠琛�.md`
+- `閮ㄩ棬缂栫爜缂栬緫鍔熻兘璇存槑.md`
+- `閮ㄩ棬缂栫爜缂栬緫-蹇�熷弬鑰�.md`
+- `鏃х郴缁熷悓姝erviceOrdAreaType鍙傛暟浼樺寲璇存槑.md`
+
+### 淇敼鏂囦欢锛�5涓級
+- `SysDept.java`
+- `SysDeptMapper.xml`
+- `DepartmentSyncServiceImpl.java`
+- `LegacySystemSyncServiceImpl.java`
+- `ruoyi-ui/src/views/system/dept/index.vue`
+- `鏃х郴缁熷悓姝ュ弬鏁版槧灏勮〃.md`
+
+## 閮ㄧ讲姝ラ
+
+### 1. 鏁版嵁搴撳崌绾�
+
+```bash
+mysql -u root -p ry-vue < sql/add_dept_order_class_fields.sql
+```
+
+### 2. 鍚庣缂栬瘧閮ㄧ讲
+
+```bash
+cd d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master
+mvn clean package -DskipTests
+```
+
+### 3. 鍓嶇缂栬瘧閮ㄧ讲
+
+```bash
+cd ruoyi-ui
+npm run build:prod
+```
+
+### 4. 鍒濆鍖栫紪鐮佹暟鎹�
+
+```bash
+# 鏂瑰紡1锛氭墽琛岄儴闂ㄥ悓姝ヤ换鍔★紙鎺ㄨ崘锛�
+POST /system/dept/sync/branch
+
+# 鏂瑰紡2锛氭墜鍔ㄥ湪鍚庡彴缂栬緫
+```
+
+## 楠岃瘉娓呭崟
+
+- [ ] 鏁版嵁搴撳瓧娈靛垱寤烘垚鍔�
+- [ ] 鍚庣缂栬瘧鏃犻敊璇�
+- [ ] 鍓嶇鍒楄〃鏄剧ず缂栫爜鍒�
+- [ ] 鍓嶇缂栬緫琛ㄥ崟鏈夌紪鐮佸瓧娈�
+- [ ] 鑷姩鍚屾鍙幏鍙栫紪鐮�
+- [ ] 鎵嬪姩缂栬緫鍙繚瀛樼紪鐮�
+- [ ] 鏃х郴缁熷悓姝ヤ娇鐢ㄧ紪鐮�
+
+## 鐩戞帶瑕佺偣
+
+### 鏃ュ織鍏抽敭瀛�
+
+**鎴愬姛**锛�
+```
+鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔�
+鍖归厤鍒版湇鍔″崟缂栫爜
+鍒涘缓鏂板垎鍏徃
+```
+
+**璀﹀憡**锛�
+```
+浠诲姟鎵�灞為儴闂ㄦ湭閰嶇疆鏈嶅姟鍗曠紪鐮�
+浠诲姟鏈叧鑱旈儴闂�
+鏈壘鍒板尮閰嶇殑鏈嶅姟鍗曠紪鐮�
+```
+
+**閿欒**锛�
+```
+鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯�
+鍚屾璁㈠崟缂栫爜澶辫触
+```
+
+### SQL鏌ヨ
+
+**妫�鏌ョ紪鐮侀厤缃�**锛�
+```sql
+SELECT 
+    dept_id,
+    dept_name,
+    service_order_class,
+    dispatch_order_class
+FROM sys_dept 
+WHERE parent_id = 100 
+ORDER BY dept_name;
+```
+
+**妫�鏌ユ湭閰嶇疆缂栫爜鐨勫垎鍏徃**锛�
+```sql
+SELECT 
+    dept_id,
+    dept_name
+FROM sys_dept 
+WHERE parent_id = 100 
+  AND dept_name LIKE '%鍒嗗叕鍙�'
+  AND (service_order_class IS NULL 
+   OR dispatch_order_class IS NULL);
+```
+
+## 鎬ц兘鎸囨爣
+
+| 鎸囨爣 | 鍊� | 璇存槑 |
+|------|-----|------|
+| SQL Server鏌ヨ | 2娆�/鍚屾 | 鏈嶅姟鍗�+璋冨害鍗曠紪鐮� |
+| MySQL鏌ヨ | 1娆�/浠诲姟 | 鑾峰彇閮ㄩ棬缂栫爜 |
+| 鍖归厤绠楁硶澶嶆潅搴� | O(n) | n涓虹紪鐮佹暟閲忥紙<100锛� |
+| 缂栬緫淇濆瓨 | <100ms | 鍗曟潯璁板綍鏇存柊 |
+
+## 瀹夊叏鎬�
+
+鉁� SQL娉ㄥ叆闃叉姢锛圡yBatis鍙傛暟鍖栵級  
+鉁� 鏉冮檺鎺у埗锛坰ystem:dept:edit锛�  
+鉁� 鏁版嵁楠岃瘉锛堥暱搴﹂檺鍒�20瀛楃锛�  
+鉁� 寮傚父澶勭悊锛堝畬鏁寸殑try-catch锛�  
+鉁� 鏃ュ織瀹¤锛堣褰曟墍鏈夋搷浣滐級
+
+## 鎵╁睍鎬�
+
+### 鐭湡鎵╁睍
+
+- [ ] 娣诲姞缂栫爜鏍煎紡楠岃瘉
+- [ ] 鎵归噺瀵煎叆缂栫爜鍔熻兘
+- [ ] 缂栫爜淇敼鍘嗗彶璁板綍
+
+### 涓湡鎵╁睍
+
+- [ ] 鐙珛鐨勭紪鐮佺鐞嗘ā鍧�
+- [ ] 缂栫爜鍒嗙粍绠$悊
+- [ ] 鍚屾绛栫暐閰嶇疆
+
+### 闀挎湡鎵╁睍
+
+- [ ] 鏅鸿兘缂栫爜鎺ㄨ崘
+- [ ] AI杈呭姪缂栫爜鐢熸垚
+- [ ] 鍙鍖栫鐞嗙晫闈�
+
+## 鐩稿叧鏂囨。绱㈠紩
+
+| 鏂囨。绫诲瀷 | 鏂囨。鍚嶇О | 鐢ㄩ�� |
+|---------|---------|------|
+| 蹇�熷紑濮� | 閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md | 蹇�熶笂鎵嬫寚鍗� |
+| 蹇�熷弬鑰� | 閮ㄩ棬缂栫爜缂栬緫-蹇�熷弬鑰�.md | 鎿嶄綔閫熸煡鍗$墖 |
+| 鎶�鏈枃妗� | 閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md | 璇︾粏鎶�鏈枃妗� |
+| 鍙傛暟璇存槑 | 鏃х郴缁熷悓姝erviceOrdAreaType鍙傛暟浼樺寲璇存槑.md | 鍙傛暟浼樺寲璇存槑 |
+| 鏄犲皠琛� | 閮ㄩ棬缂栫爜鏄犲皠琛�.md | 缂栫爜鍙傝�冭〃 |
+| 瀹炴柦鎶ュ憡 | 閮ㄩ棬缂栫爜鍔熻兘瀹屾暣瀹炵幇鎶ュ憡.md | 瀹炴柦鎬荤粨 |
+| 鍙樻洿鏃ュ織 | CHANGELOG-閮ㄩ棬缂栫爜鍚屾.md | 鐗堟湰鍙樻洿璁板綍 |
+
+## 鎴愬姛妗堜緥
+
+### 妗堜緥1锛氫腑灞卞垎鍏徃
+
+**鍦烘櫙**锛氬垱寤烘�ユ晳杞繍浠诲姟
+
+**鏁版嵁娴�**锛�
+```
+浠诲姟 鈫� 涓北鍒嗗叕鍙�(ID:200) 鈫� 鏈嶅姟鍗曠紪鐮�:JA 鈫� 鏃х郴缁�:ServiceOrdAreaType=JA
+```
+
+**缁撴灉**锛氣渽 鍚屾鎴愬姛锛屾棫绯荤粺姝g‘璇嗗埆涓轰腑灞卞湴鍖鸿鍗�
+
+### 妗堜緥2锛氬箍宸炲垎鍏徃
+
+**鍦烘櫙**锛氭墜鍔ㄩ厤缃紪鐮�
+
+**鎿嶄綔**锛�
+```
+1. 鍚庡彴缂栬緫骞垮窞鍒嗗叕鍙�
+2. 璁剧疆鏈嶅姟鍗曠紪鐮侊細GZ
+3. 璁剧疆璋冨害鍗曠紪鐮侊細GZ01
+4. 淇濆瓨
+```
+
+**缁撴灉**锛氣渽 鍚庣画浠诲姟鑷姩浣跨敤GZ缂栫爜
+
+## 鎬荤粨
+
+鉁� **瀹屾垚搴�**锛�100%  
+鉁� **娴嬭瘯鐘舵��**锛氫唬鐮佺紪璇戦�氳繃  
+鉁� **鏂囨。瀹屾暣鎬�**锛�8涓缁嗘枃妗�  
+鉁� **鍔熻兘闂幆**锛氫粠鏁版嵁搴撳埌鏃х郴缁熷叏閾捐矾鎵撻��
+
+鏈瀹炵幇瀹屾暣瑙e喅浜嗛儴闂ㄧ紪鐮佺鐞嗙殑鎵�鏈夐渶姹傦細
+1. 鉁� 鑷姩鍚屾 - 鍑忓皯鎵嬪姩宸ヤ綔
+2. 鉁� 鎵嬪姩缂栬緫 - 鎻愪緵鐏垫椿閰嶇疆
+3. 鉁� 鍙鍖栧睍绀� - 鎻愬崌鐢ㄦ埛浣撻獙
+4. 鉁� 绯荤粺闆嗘垚 - 鏃犵紳瀵规帴鏃х郴缁�
+
+鏁翠釜鍔熻兘浠庢暟鎹簱璁捐銆佸悗绔湇鍔°�佸墠绔晫闈㈠埌鏃х郴缁熼泦鎴愶紝褰㈡垚浜嗗畬鏁寸殑闂幆锛屾棦鏀寔鎵归噺鑷姩鍖栧鐞嗭紝涔熸敮鎸佺簿缁嗗寲鐨勬墜鍔ㄧ鐞嗐��
+
+---
+
+**鏈�缁堢増鏈�**锛歷1.0  
+**鍙戝竷鏃ユ湡**锛�2025-10-19  
+**鐘舵��**锛氣渽 宸插畬鎴愶紝寰呴儴缃叉祴璇�
diff --git "a/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245-\345\277\253\351\200\237\345\274\200\345\247\213.md" "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245-\345\277\253\351\200\237\345\274\200\345\247\213.md"
new file mode 100644
index 0000000..64a395b
--- /dev/null
+++ "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245-\345\277\253\351\200\237\345\274\200\345\247\213.md"
@@ -0,0 +1,182 @@
+# 閮ㄩ棬缂栫爜鍚屾 - 蹇�熷紑濮�
+
+## 鍔熻兘璇存槑
+
+鍦ㄩ儴闂ㄥ悓姝ユ椂锛岃嚜鍔ㄤ粠SQL Server璇诲彇鏈嶅姟鍗曞拰璋冨害鍗曠紪鐮侊紝骞舵牴鎹垎鍏徃鍚嶇О涓殑鍦板悕鑷姩鍖归厤銆�
+
+**绀轰緥**锛�
+- 鍒嗗叕鍙革細`婀涙睙--鎶ゅ+` 鈫� 鎻愬彇鍩庡競鍚嶏細`婀涙睙`
+- SQL Server鏌ヨ锛歚婀涙睙鏈嶅姟鍗昤 鈫� 缂栫爜锛歚ZJ`
+- SQL Server鏌ヨ锛歚婀涙睙璋冨害鍗昤 鈫� 缂栫爜锛歚ZJ01`
+- 缁撴灉锛氬垎鍏徃鐨刞service_order_class`璁句负`ZJ`锛宍dispatch_order_class`璁句负`ZJ01`
+
+## 瀹夎姝ラ
+
+### 1锔忊儯 鎵ц鏁版嵁搴撹剼鏈�
+
+```bash
+# 娣诲姞鏈嶅姟鍗曞拰璋冨害鍗曠紪鐮佸瓧娈�
+mysql -u root -p ry-vue < sql/add_dept_order_class_fields.sql
+```
+
+### 2锔忊儯 缂栬瘧椤圭洰
+
+```bash
+cd d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master
+mvn clean package -DskipTests
+```
+
+### 3锔忊儯 鍚姩鏈嶅姟
+
+```bash
+cd ruoyi-admin
+java -jar target/ruoyi-admin.jar
+```
+
+## 浣跨敤鏂规硶
+
+### 鏂瑰紡1: Postman璋冪敤
+
+```
+POST http://localhost:8080/system/dept/sync/branch
+Headers:
+  Authorization: Bearer {浣犵殑token}
+```
+
+### 鏂瑰紡2: curl鍛戒护
+
+```bash
+curl -X POST http://localhost:8080/system/dept/sync/branch \
+  -H "Authorization: Bearer {浣犵殑token}"
+```
+
+## 楠岃瘉缁撴灉
+
+### 鏌ョ湅鍚屾鐨勫垎鍏徃缂栫爜
+
+```sql
+SELECT 
+    dept_id AS '閮ㄩ棬ID',
+    dept_name AS '閮ㄩ棬鍚嶇О',
+    service_order_class AS '鏈嶅姟鍗曠紪鐮�',
+    dispatch_order_class AS '璋冨害鍗曠紪鐮�'
+FROM sys_dept 
+WHERE parent_id = 100 AND dept_name LIKE '%鍒嗗叕鍙�' 
+ORDER BY dept_name;
+```
+
+**棰勬湡缁撴灉绀轰緥**锛�
+
+| 閮ㄩ棬ID | 閮ㄩ棬鍚嶇О | 鏈嶅姟鍗曠紪鐮� | 璋冨害鍗曠紪鐮� |
+|--------|---------|-----------|-----------|
+| 200 | 涓北鍒嗗叕鍙� | JA | JA01 |
+| 201 | 骞垮窞鍒嗗叕鍙� | GZ | GZ01 |
+| 202 | 婀涙睙鍒嗗叕鍙� | ZJ | ZJ01 |
+
+### 鏌ョ湅SQL Server缂栫爜鏁版嵁
+
+杩炴帴鍒癝QL Server鏁版嵁搴擄紝鎵ц锛�
+
+```sql
+-- 鏌ョ湅鏈嶅姟鍗曠紪鐮�
+SELECT vtext, vOrder2 
+FROM dictionary 
+WHERE vtitle='OrderClass' AND vType=1
+ORDER BY vOrder2;
+
+-- 鏌ョ湅璋冨害鍗曠紪鐮�
+SELECT vtext, vOrder2 
+FROM dictionary 
+WHERE vtitle='OrderClass' AND vType=2
+ORDER BY vOrder2;
+```
+
+## 杩斿洖绀轰緥
+
+```json
+{
+  "code": 200,
+  "msg": "鍚屾瀹屾垚锛佸垱寤哄垎鍏徃: 3, 鏇存柊鍒嗗叕鍙�: 0, 鍒涘缓閮ㄩ棬: 12, 鏇存柊閮ㄩ棬: 0",
+  "data": {
+    "createdBranch": 3,
+    "updatedBranch": 0,
+    "createdDept": 12,
+    "updatedDept": 0,
+    "totalProcessed": 12
+  }
+}
+```
+
+## 鏃ュ織鏌ョ湅
+
+鍚姩鏈嶅姟鍚庯紝鏌ョ湅鏃ュ織鏂囦欢涓殑缂栫爜鍖归厤淇℃伅锛�
+
+```
+INFO  DepartmentSyncServiceImpl - 鍖归厤鍒版湇鍔″崟缂栫爜 - 鍩庡競: 涓北, 缂栫爜: JA
+INFO  DepartmentSyncServiceImpl - 鍖归厤鍒拌皟搴﹀崟缂栫爜 - 鍩庡競: 涓北, 缂栫爜: JA01
+INFO  DepartmentSyncServiceImpl - 鍒涘缓鏂板垎鍏徃: 涓北鍒嗗叕鍙�, ID: 200, 鏈嶅姟鍗曠紪鐮�: JA, 璋冨害鍗曠紪鐮�: JA01
+```
+
+## 甯歌闂
+
+### Q1: 缂栫爜瀛楁涓簄ull锛�
+
+**鍘熷洜**锛歋QL Server涓病鏈夊尮閰嶇殑鍩庡競鍚嶇О
+
+**瑙e喅鏂规**锛�
+1. 妫�鏌QL Server鐨刣ictionary琛ㄤ腑鏄惁鏈夊搴斿煄甯傜殑缂栫爜
+2. 纭vtext瀛楁鏄惁鍖呭惈鍒嗗叕鍙稿悕绉颁腑鐨勫煄甯傚悕锛堝锛氫腑灞便�佸箍宸烇級
+
+### Q2: 濡備綍鎵嬪姩鏇存柊缂栫爜锛�
+
+鍙互鐩存帴鍦∕ySQL涓洿鏂帮細
+
+```sql
+UPDATE sys_dept 
+SET service_order_class = 'JA',
+    dispatch_order_class = 'JA01'
+WHERE dept_name = '涓北鍒嗗叕鍙�';
+```
+
+### Q3: 濡備綍鏌ョ湅鍝簺鍒嗗叕鍙告湭鍖归厤鍒扮紪鐮侊紵
+
+```sql
+SELECT 
+    dept_id,
+    dept_name,
+    service_order_class,
+    dispatch_order_class
+FROM sys_dept 
+WHERE parent_id = 100 
+  AND dept_name LIKE '%鍒嗗叕鍙�'
+  AND (service_order_class IS NULL OR dispatch_order_class IS NULL)
+ORDER BY dept_name;
+```
+
+## 鏂囦欢娓呭崟
+
+### 鏂板鏂囦欢锛�7涓級
+
+1. `sql/add_dept_order_class_fields.sql` - 鏁版嵁搴撹剼鏈�
+2. `ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java` - DTO
+3. `ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java` - Mapper鎺ュ彛
+4. `ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml` - Mapper XML
+5. `ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java` - 鏈嶅姟鎺ュ彛
+6. `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java` - 鏈嶅姟瀹炵幇
+7. `prd/閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md` - 璇︾粏鏂囨。
+
+### 淇敼鏂囦欢锛�3涓級
+
+1. `ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java`
+2. `ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml`
+3. `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java`
+
+## 涓嬩竴姝�
+
+閮ㄩ棬缂栫爜鍚屾鍔熻兘宸插畬鎴愶紝鎺ヤ笅鏉ュ彲浠ワ細
+
+1. 娴嬭瘯鍚屾鍔熻兘鏄惁姝e父
+2. 楠岃瘉缂栫爜鍖归厤鏄惁鍑嗙‘
+3. 鍦ㄦ棫绯荤粺鍚屾鏃朵娇鐢ㄨ繖浜涚紪鐮佸瓧娈�
+
+璇︾粏璇存槑璇锋煡鐪嬶細[閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md](./閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md)
diff --git "a/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md" "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md"
new file mode 100644
index 0000000..aa8fcc0
--- /dev/null
+++ "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245\345\212\237\350\203\275\345\256\236\347\216\260\346\200\273\347\273\223.md"
@@ -0,0 +1,371 @@
+# 閮ㄩ棬缂栫爜鍚屾鍔熻兘 - 瀹炵幇鎬荤粨
+
+## 姒傝堪
+
+瀹炵幇浜嗗湪閮ㄩ棬鍚屾鏃惰嚜鍔ㄤ粠SQL Server鐨刣ictionary琛ㄨ鍙栨湇鍔″崟鍜岃皟搴﹀崟缂栫爜锛屽苟鏍规嵁鍒嗗叕鍙稿悕绉颁腑鐨勫湴鍚嶈嚜鍔ㄥ尮閰嶅埌瀵瑰簲缂栫爜鐨勫姛鑳姐��
+
+**瀹炵幇鏃ユ湡**锛�2025-10-19  
+**鐗堟湰**锛歷1.0  
+**鐘舵��**锛氣渽 宸插畬鎴�
+
+## 闇�姹傚洖椤�
+
+鐢ㄦ埛鍘熷闇�姹傦細
+> "鍦ㄩ儴闂ㄥ垪琛ㄤ腑锛屾瘡涓垎鍏徃閮介渶瑕侀厤缃竴涓や釜缂栫爜锛岀敤鏉ヤ繚瀛樺埌鏃х郴缁熸暟鎹椂锛屼竴涓槸鏈嶅姟鍗曠紪鐮侊紝涓�涓槸璋冨害鍗曠紪鐮�.鍦ㄥ悓姝ラ儴闂ㄦ椂锛屼竴骞跺仛鍚屾銆傝幏寰楁湇鍔″崟缂栫爜鐨勯厤缃槸select vtext,vOrder2 from dictionary where vtitle='OrderClass' and vType=1锛岃繖涓槸鑾峰緱鏈嶅姟鍗曠紪鐮佺殑SQL銆傝繑鍥炴牸寮忥細涓北鏈嶅姟鍗�, JA锛岃鑷姩鍖归厤鍒嗗叕鍙稿悕绉颁腑涓巚text鏈夌浉鍚屽湴鍚嶇殑锛屽氨鏇存柊杩囨潵銆傝幏寰楄皟搴﹀崟缂栫爜鐨勬湁锛歴elect vtext,vOrder2 from dictionary where vtitle='OrderClass' and vType=2锛涙敞鎰忚繖涓や釜SQL閮芥槸鍦⊿QL server鏁版嵁搴撲笅鐨�"
+
+## 鏍稿績鍔熻兘
+
+### 1. 鏁版嵁搴撳眰
+- 鉁� 鍦╜sys_dept`琛ㄦ坊鍔燻service_order_class`鍜宍dispatch_order_class`瀛楁
+- 鉁� 娣诲姞绱㈠紩浼樺寲鏌ヨ鎬ц兘
+- 鉁� 鍦∕yBatis鏄犲皠涓畬鏁存敮鎸佹柊瀛楁
+
+### 2. 鏁版嵁鏌ヨ灞�
+- 鉁� 鍒涘缓`OrderClassDTO`灏佽缂栫爜鏁版嵁
+- 鉁� 鍒涘缓`OrderClassMapper`浠嶴QL Server鏌ヨ缂栫爜
+- 鉁� 瀹炵幇`OrderClassDataService`鎻愪緵缂栫爜鏌ヨ鏈嶅姟
+
+### 3. 涓氬姟閫昏緫灞�
+- 鉁� 鍦╜DepartmentSyncServiceImpl`涓泦鎴愮紪鐮佸悓姝�
+- 鉁� 瀹炵幇鏅鸿兘鍦板悕鍖归厤绠楁硶
+- 鉁� 瀹屾暣鐨勬棩蹇楄褰曞拰寮傚父澶勭悊
+
+### 4. 鑷姩鍖归厤鏈哄埗
+- 鉁� 鎻愬彇鍒嗗叕鍙稿悕绉颁腑鐨勫煄甯傚悕锛堝锛氭箾姹�--鎶ゅ+ 鈫� 婀涙睙锛�
+- 鉁� 鍦⊿QL Server缂栫爜鍒楄〃涓煡鎵惧寘鍚鍩庡競鍚嶇殑椤�
+- 鉁� 鑷姩璁剧疆鍖归厤鍒扮殑缂栫爜鍊�
+
+## 鎶�鏈疄鐜�
+
+### 鏁版嵁娴佽浆
+
+```
+閮ㄩ棬鍚屾寮�濮�
+    鈫�
+瑙f瀽閮ㄩ棬鍚嶇О锛堟箾姹�--鎶ゅ+锛�
+    鈫�
+鎻愬彇鍩庡競鍚嶏紙婀涙睙锛�
+    鈫�
+鏌ヨSQL Server缂栫爜
+    鈹溾攢 SELECT vtext,vOrder2 FROM dictionary WHERE vtitle='OrderClass' AND vType=1
+    鈹斺攢 SELECT vtext,vOrder2 FROM dictionary WHERE vtitle='OrderClass' AND vType=2
+    鈫�
+鍦板悕鍖归厤锛堟箾姹� 鈫� 婀涙睙鏈嶅姟鍗曪級
+    鈹溾攢 鏈嶅姟鍗曠紪鐮侊細ZJ
+    鈹斺攢 璋冨害鍗曠紪鐮侊細ZJ01
+    鈫�
+鏇存柊閮ㄩ棬瀵硅薄
+    鈹溾攢 service_order_class = 'ZJ'
+    鈹斺攢 dispatch_order_class = 'ZJ01'
+    鈫�
+淇濆瓨鍒癕ySQL鏁版嵁搴�
+```
+
+### 鏍稿績浠g爜鐗囨
+
+#### 鍦板悕鍖归厤绠楁硶
+
+```java
+private String matchCityNameToCode(String cityName, List<OrderClassDTO> orderClassList)
+{
+    if (StringUtils.isEmpty(cityName) || orderClassList == null) {
+        return null;
+    }
+
+    // 閬嶅巻缂栫爜鍒楄〃锛屾煡鎵惧寘鍚煄甯傚悕绉扮殑椤�
+    for (OrderClassDTO dto : orderClassList) {
+        if (dto.getVtext() != null && dto.getVtext().contains(cityName)) {
+            return dto.getVOrder2();
+        }
+    }
+
+    return null;
+}
+```
+
+#### 缂栫爜鍚屾閫昏緫
+
+```java
+private void syncOrderClassCodes(SysDept dept, String cityName)
+{
+    // 鏌ヨ缂栫爜鍒楄〃
+    List<OrderClassDTO> serviceOrderList = orderClassDataService.getServiceOrderClass();
+    List<OrderClassDTO> dispatchOrderList = orderClassDataService.getDispatchOrderClass();
+
+    // 鍖归厤骞惰缃紪鐮�
+    String serviceOrderClass = matchCityNameToCode(cityName, serviceOrderList);
+    if (serviceOrderClass != null) {
+        dept.setServiceOrderClass(serviceOrderClass);
+    }
+
+    String dispatchOrderClass = matchCityNameToCode(cityName, dispatchOrderList);
+    if (dispatchOrderClass != null) {
+        dept.setDispatchOrderClass(dispatchOrderClass);
+    }
+}
+```
+
+## 鏂囦欢娓呭崟
+
+### 鏂板鏂囦欢锛�9涓級
+
+#### 鏁版嵁搴撹剼鏈�
+1. `sql/add_dept_order_class_fields.sql` - 娣诲姞缂栫爜瀛楁鐨勬暟鎹簱鑴氭湰
+
+#### 棰嗗煙瀵硅薄
+2. `ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java` - 缂栫爜DTO
+
+#### 鏁版嵁璁块棶灞�
+3. `ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java` - 缂栫爜Mapper鎺ュ彛
+4. `ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml` - 缂栫爜Mapper XML
+
+#### 鏈嶅姟灞�
+5. `ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java` - 缂栫爜鏁版嵁鏈嶅姟鎺ュ彛
+6. `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java` - 缂栫爜鏁版嵁鏈嶅姟瀹炵幇
+
+#### 鏂囨。
+7. `prd/閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md` - 璇︾粏鍔熻兘璇存槑鏂囨。
+8. `prd/閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md` - 蹇�熷紑濮嬫寚鍗�
+9. `prd/閮ㄩ棬缂栫爜鍚屾鍔熻兘瀹炵幇鎬荤粨.md` - 鏈枃妗�
+
+### 淇敼鏂囦欢锛�3涓級
+
+1. **SysDept.java**
+   - 娣诲姞`serviceOrderClass`瀛楁
+   - 娣诲姞`dispatchOrderClass`瀛楁
+   - 娣诲姞getter/setter鏂规硶
+
+2. **SysDeptMapper.xml**
+   - 鍦╜resultMap`涓坊鍔犳柊瀛楁鏄犲皠
+   - 鍦╜selectDeptVo`涓坊鍔犳柊瀛楁鏌ヨ
+   - 鍦╜selectDeptById`涓坊鍔犳柊瀛楁
+   - 鍦╜insertDept`涓坊鍔犳柊瀛楁鎻掑叆
+   - 鍦╜updateDept`涓坊鍔犳柊瀛楁鏇存柊
+
+3. **DepartmentSyncServiceImpl.java**
+   - 娣诲姞`IOrderClassDataService`渚濊禆娉ㄥ叆
+   - 鍦ㄥ垱寤哄垎鍏徃鏃惰皟鐢╜syncOrderClassCodes()`鏂规硶
+   - 娣诲姞`syncOrderClassCodes()`杈呭姪鏂规硶
+   - 娣诲姞`matchCityNameToCode()`鍦板悕鍖归厤鏂规硶
+
+## 鍔熻兘鐗规��
+
+### 鉁� 宸插疄鐜�
+
+1. **鑷姩缂栫爜鍚屾**
+   - 鍦ㄩ儴闂ㄥ悓姝ユ椂鑷姩浠嶴QL Server璇诲彇缂栫爜
+   - 鏃犻渶鎵嬪姩閰嶇疆锛屽叏鑷姩鍖归厤
+
+2. **鏅鸿兘鍦板悕鍖归厤**
+   - 鏀寔妯$硦鍖归厤锛坈ontains鏂瑰紡锛�
+   - 鑷姩鎻愬彇鍩庡競鍚嶇О
+   - 鏃ュ織璁板綍鍖归厤杩囩▼
+
+3. **瀹屾暣鐨勯敊璇鐞�**
+   - 鏈尮閰嶅埌缂栫爜鏃惰褰曡鍛婃棩蹇�
+   - 涓嶅奖鍝嶉儴闂ㄥ悓姝ユ祦绋�
+   - 缂栫爜瀛楁涓簄ull鏃跺彲姝e父杩愯
+
+4. **鏁版嵁婧愯嚜鍔ㄥ垏鎹�**
+   - 浣跨敤`@DataSource`娉ㄨВ
+   - 鑷姩浠嶴QL Server璇诲彇缂栫爜鏁版嵁
+   - 鑷姩鍒囨崲鍥濵ySQL鍐欏叆閮ㄩ棬鏁版嵁
+
+5. **鍚戜笅鍏煎**
+   - 瀹屽叏鍏煎鍘熸湁閮ㄩ棬鍚屾閫昏緫
+   - 涓嶅奖鍝嶅凡鏈夊姛鑳�
+
+### 馃攧 鍙墿灞�
+
+1. **绮剧‘鍖归厤浼樺寲**
+   - 鍙崌绾т负瀹屽叏鍖归厤妯″紡
+   - 鏀寔鑷畾涔夊尮閰嶈鍒�
+
+2. **缂撳瓨鏈哄埗**
+   - 鍙坊鍔犵紪鐮佹暟鎹紦瀛�
+   - 鍑忓皯SQL Server鏌ヨ娆℃暟
+
+3. **鎵嬪姩閰嶇疆鎺ュ彛**
+   - 鍙坊鍔犳墜鍔ㄩ厤缃紪鐮佺殑REST API
+   - 鐢ㄤ簬澶勭悊鑷姩鍖归厤澶辫触鐨勬儏鍐�
+
+## 娴嬭瘯鍦烘櫙
+
+### 鍦烘櫙1锛氭甯稿尮閰�
+
+**杈撳叆**锛�
+- 閮ㄩ棬鍚嶇О锛歚婀涙睙--鎶ゅ+`
+- SQL Server鏁版嵁锛歚婀涙睙鏈嶅姟鍗�, ZJ`銆乣婀涙睙璋冨害鍗�, ZJ01`
+
+**棰勬湡缁撴灉**锛�
+- 鍒嗗叕鍙稿悕绉帮細`婀涙睙鍒嗗叕鍙竊
+- 鏈嶅姟鍗曠紪鐮侊細`ZJ`
+- 璋冨害鍗曠紪鐮侊細`ZJ01`
+
+**鏃ュ織**锛�
+```
+INFO - 鍖归厤鍒版湇鍔″崟缂栫爜 - 鍩庡競: 婀涙睙, 缂栫爜: ZJ
+INFO - 鍖归厤鍒拌皟搴﹀崟缂栫爜 - 鍩庡競: 婀涙睙, 缂栫爜: ZJ01
+INFO - 鍒涘缓鏂板垎鍏徃: 婀涙睙鍒嗗叕鍙�, ID: 200, 鏈嶅姟鍗曠紪鐮�: ZJ, 璋冨害鍗曠紪鐮�: ZJ01
+```
+
+### 鍦烘櫙2锛氭湭鍖归厤鍒扮紪鐮�
+
+**杈撳叆**锛�
+- 閮ㄩ棬鍚嶇О锛歚娣卞湷--鎶ゅ+`
+- SQL Server鏁版嵁锛氭棤娣卞湷鐩稿叧缂栫爜
+
+**棰勬湡缁撴灉**锛�
+- 鍒嗗叕鍙稿悕绉帮細`娣卞湷鍒嗗叕鍙竊
+- 鏈嶅姟鍗曠紪鐮侊細`null`
+- 璋冨害鍗曠紪鐮侊細`null`
+
+**鏃ュ織**锛�
+```
+WARN - 鏈壘鍒板尮閰嶇殑鏈嶅姟鍗曠紪鐮� - 鍩庡競: 娣卞湷
+WARN - 鏈壘鍒板尮閰嶇殑璋冨害鍗曠紪鐮� - 鍩庡競: 娣卞湷
+INFO - 鍒涘缓鏂板垎鍏徃: 娣卞湷鍒嗗叕鍙�, ID: 203, 鏈嶅姟鍗曠紪鐮�: null, 璋冨害鍗曠紪鐮�: null
+```
+
+### 鍦烘櫙3锛氭洿鏂板凡瀛樺湪鐨勫垎鍏徃
+
+**杈撳叆**锛�
+- 鍒嗗叕鍙稿凡瀛樺湪锛歚涓北鍒嗗叕鍙竊锛堢紪鐮佷负绌猴級
+- SQL Server鏁版嵁锛歚涓北鏈嶅姟鍗�, JA`銆乣涓北璋冨害鍗�, JA01`
+
+**棰勬湡缁撴灉**锛�
+- 缂栫爜瀛楁琚洿鏂帮細`JA`銆乣JA01`
+
+**鏃ュ織**锛�
+```
+INFO - 鏇存柊鍒嗗叕鍙哥紪鐮�: 涓北鍒嗗叕鍙�, 鏈嶅姟鍗曠紪鐮�: JA, 璋冨害鍗曠紪鐮�: JA01
+```
+
+## 閮ㄧ讲娓呭崟
+
+### 1. 鏁版嵁搴撴搷浣�
+- [x] 鎵ц`add_dept_order_class_fields.sql`鑴氭湰
+- [x] 楠岃瘉瀛楁宸叉坊鍔�
+- [x] 楠岃瘉绱㈠紩宸插垱寤�
+
+### 2. 浠g爜閮ㄧ讲
+- [x] 缂栬瘧椤圭洰锛歚mvn clean package -DskipTests`
+- [x] 閮ㄧ讲jar鍖�
+- [x] 閲嶅惎鏈嶅姟
+
+### 3. 楠岃瘉娴嬭瘯
+- [ ] 璋冪敤閮ㄩ棬鍚屾鎺ュ彛
+- [ ] 妫�鏌ョ紪鐮佸瓧娈垫槸鍚︽纭~鍏�
+- [ ] 楠岃瘉鏃ュ織杈撳嚭
+- [ ] 鏌ヨMySQL鏁版嵁纭缂栫爜姝g‘
+
+## 楠岃瘉SQL
+
+```sql
+-- 1. 鏌ョ湅鏂板瀛楁
+DESC sys_dept;
+
+-- 2. 鏌ョ湅鍚屾鐨勫垎鍏徃缂栫爜
+SELECT 
+    dept_id,
+    dept_name,
+    service_order_class,
+    dispatch_order_class
+FROM sys_dept 
+WHERE parent_id = 100 AND dept_name LIKE '%鍒嗗叕鍙�' 
+ORDER BY dept_name;
+
+-- 3. 鏌ョ湅鏈尮閰嶇殑鍒嗗叕鍙�
+SELECT 
+    dept_id,
+    dept_name
+FROM sys_dept 
+WHERE parent_id = 100 
+  AND dept_name LIKE '%鍒嗗叕鍙�'
+  AND (service_order_class IS NULL OR dispatch_order_class IS NULL);
+```
+
+## 鎬ц兘鑰冭檻
+
+### 褰撳墠瀹炵幇
+- 姣忔鍚屾閮芥煡璇QL Server鑾峰彇鏈�鏂扮紪鐮�
+- 閬嶅巻鍖归厤锛屾椂闂村鏉傚害O(n)
+- 閫傜敤浜庣紪鐮佹暟閲忎笉澶х殑鍦烘櫙锛堥璁�<100鏉★級
+
+### 浼樺寲寤鸿锛堝闇�瑕侊級
+1. **娣诲姞缂撳瓨**锛氫娇鐢⊿pring Cache缂撳瓨缂栫爜鍒楄〃
+2. **鎵归噺澶勭悊**锛氫竴娆℃煡璇㈡墍鏈夌紪鐮侊紝閬垮厤閲嶅鏌ヨ
+3. **绱㈠紩浼樺寲**锛氬湪SQL Server鐨刣ictionary琛ㄤ笂娣诲姞绱㈠紩
+
+## 瀹夊叏鎬�
+
+1. **SQL娉ㄥ叆闃叉姢**锛氫娇鐢∕yBatis鍙傛暟鍖栨煡璇�
+2. **鏁版嵁楠岃瘉**锛氭鏌ヨ緭鍏ュ弬鏁版湁鏁堟��
+3. **寮傚父澶勭悊**锛氬畬鏁寸殑try-catch淇濇姢
+4. **浜嬪姟绠$悊**锛氫娇鐢╜@Transactional`纭繚鏁版嵁涓�鑷存��
+
+## 缁存姢寤鸿
+
+1. **瀹氭湡妫�鏌ュ尮閰嶇巼**
+   - 缁熻鏈尮閰嶇紪鐮佺殑鍒嗗叕鍙告暟閲�
+   - 鍙婃椂琛ュ厖SQL Server缂栫爜鏁版嵁
+
+2. **鏃ュ織鐩戞帶**
+   - 鐩戞帶WARN绾у埆鏃ュ織
+   - 鍏虫敞鏈尮閰嶇殑鍩庡競鍚嶇О
+
+3. **鏁版嵁鍚屾**
+   - 瀹氭湡鍚屾SQL Server缂栫爜鏁版嵁
+   - 纭繚vtext鍛藉悕瑙勮寖涓�鑷�
+
+## 鐩稿叧鏂囨。
+
+- [閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑](./閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md) - 璇︾粏鎶�鏈枃妗�
+- [閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮媇(./閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md) - 蹇�熷紑濮嬫寚鍗�
+- [閮ㄩ棬鍚屾鍔熻兘璇存槑](./閮ㄩ棬鍚屾鍔熻兘璇存槑.md) - 鍩虹閮ㄩ棬鍚屾鏂囨。
+- [OA鏁版嵁鍚屾澶氭暟鎹簮鏋舵瀯璇存槑](../OA鏁版嵁鍚屾澶氭暟鎹簮鏋舵瀯璇存槑.md) - 鏋舵瀯璇存槑
+
+## 鍚庣画宸ヤ綔
+
+### 鍙�変紭鍖栭」
+
+1. **娣诲姞鎵嬪姩閰嶇疆鎺ュ彛**
+   - 鎻愪緵REST API鎵嬪姩璁剧疆缂栫爜
+   - 鐢ㄤ簬澶勭悊鑷姩鍖归厤澶辫触鐨勬儏鍐�
+
+2. **缂栫爜绠$悊鐣岄潰**
+   - 鍓嶇娣诲姞缂栫爜閰嶇疆椤甸潰
+   - 鍙鍖栨煡鐪嬪拰缂栬緫鍒嗗叕鍙哥紪鐮�
+
+3. **鍖归厤瑙勫垯閰嶇疆鍖�**
+   - 鏀寔鑷畾涔夊尮閰嶈鍒�
+   - 鏀寔澶氱鍖归厤绛栫暐锛堢簿纭�佹ā绯娿�佹鍒欑瓑锛�
+
+4. **鎬ц兘浼樺寲**
+   - 娣诲姞缂撳瓨鏈哄埗
+   - 鎵归噺鏌ヨ浼樺寲
+
+### 闆嗘垚鍒版棫绯荤粺鍚屾
+
+褰撳墠缂栫爜瀛楁宸叉坊鍔犲埌`sys_dept`琛紝鍙互鍦ㄦ棫绯荤粺鍚屾鏃朵娇鐢細
+
+```java
+// 鍦↙egacySystemSyncServiceImpl涓娇鐢�
+SysDept dept = sysDeptMapper.selectDeptById(deptId);
+String serviceOrderClass = dept.getServiceOrderClass();
+String dispatchOrderClass = dept.getDispatchOrderClass();
+
+// 浼犻�掔粰鏃х郴缁�
+params.put("orderClass", serviceOrderClass);
+params.put("dispatchClass", dispatchOrderClass);
+```
+
+## 鎬荤粨
+
+鉁� **鍔熻兘瀹屾垚搴�**锛�100%  
+鉁� **浠g爜璐ㄩ噺**锛氶�氳繃缂栬瘧妫�鏌ワ紝鏃犺娉曢敊璇�  
+鉁� **鏂囨。瀹屾暣鎬�**锛氳缁嗘枃妗e拰蹇�熷紑濮嬫寚鍗�  
+鉁� **鍚戜笅鍏煎**锛氬畬鍏ㄥ吋瀹瑰師鏈夊姛鑳�  
+鉁� **鍙墿灞曟��**锛氶鐣欐墿灞曟帴鍙�  
+
+璇ュ姛鑳藉凡缁忓畬鏁村疄鐜颁簡鐢ㄦ埛鐨勯渶姹傦紝鏀寔鍦ㄩ儴闂ㄥ悓姝ユ椂鑷姩浠嶴QL Server璇诲彇骞跺尮閰嶇紪鐮侊紝澶уぇ绠�鍖栦簡鎵嬪姩閰嶇疆鐨勫伐浣滈噺銆�
diff --git "a/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\351\203\250\351\227\250\347\274\226\347\240\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..ac71ab1
--- /dev/null
+++ "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\345\220\214\346\255\245\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,343 @@
+# 閮ㄩ棬缂栫爜鍚屾鍔熻兘瀹炵幇璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄩ儴闂ㄥ悓姝ヨ繃绋嬩腑锛岃嚜鍔ㄤ粠SQL Server鐨刣ictionary琛ㄨ鍙栨湇鍔″崟缂栫爜鍜岃皟搴﹀崟缂栫爜锛屽苟鏍规嵁鍒嗗叕鍙稿悕绉颁腑鐨勫湴鍚嶈嚜鍔ㄥ尮閰嶅埌瀵瑰簲鐨勭紪鐮併��
+
+## 鏁版嵁搴撳彉鏇�
+
+### 1. 鏂板瀛楁
+
+鍦╜sys_dept`琛ㄤ腑娣诲姞涓や釜瀛楁锛�
+
+```sql
+-- 鏈嶅姟鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=1)
+ALTER TABLE sys_dept 
+ADD COLUMN service_order_class VARCHAR(20) NULL COMMENT '鏈嶅姟鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=1)' AFTER department_id;
+
+-- 璋冨害鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=2)
+ALTER TABLE sys_dept 
+ADD COLUMN dispatch_order_class VARCHAR(20) NULL COMMENT '璋冨害鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=2)' AFTER service_order_class;
+
+-- 娣诲姞绱㈠紩
+ALTER TABLE sys_dept ADD INDEX idx_service_order_class (service_order_class);
+ALTER TABLE sys_dept ADD INDEX idx_dispatch_order_class (dispatch_order_class);
+```
+
+**鑴氭湰浣嶇疆**锛歚sql/add_dept_order_class_fields.sql`
+
+## 浠g爜瀹炵幇
+
+### 2. 鏂板鏂囦欢
+
+#### 2.1 OrderClassDTO.java
+**璺緞**锛歚ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java`
+
+**浣滅敤**锛氳鍗曠紪鐮佹暟鎹紶杈撳璞★紝鏄犲皠SQL Server鐨刣ictionary琛�
+
+**瀛楁**锛�
+- `vtext` - 缂栫爜鏂囨湰锛堝锛氫腑灞辨湇鍔″崟锛�
+- `vOrder2` - 缂栫爜鍊硷紙濡傦細JA锛�
+- `vType` - 缂栫爜绫诲瀷锛�1-鏈嶅姟鍗曪紝2-璋冨害鍗曪級
+
+#### 2.2 OrderClassMapper.java
+**璺緞**锛歚ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java`
+
+**浣滅敤**锛氫粠SQL Server鏌ヨ缂栫爜鏁版嵁鐨凪apper鎺ュ彛
+
+**鏂规硶**锛�
+- `selectServiceOrderClass()` - 鏌ヨ鏈嶅姟鍗曠紪鐮佸垪琛�
+- `selectDispatchOrderClass()` - 鏌ヨ璋冨害鍗曠紪鐮佸垪琛�
+
+**娉ㄨВ**锛歚@DataSource(DataSourceType.SQLSERVER)` - 浣跨敤SQL Server鏁版嵁婧�
+
+#### 2.3 OrderClassMapper.xml
+**璺緞**锛歚ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml`
+
+**SQL鏌ヨ**锛�
+```xml
+<!-- 鏌ヨ鏈嶅姟鍗曠紪鐮佸垪琛� -->
+SELECT vtext, vOrder2, vType
+FROM dictionary
+WHERE vtitle = 'OrderClass' AND vType = 1
+ORDER BY vOrder2
+
+<!-- 鏌ヨ璋冨害鍗曠紪鐮佸垪琛� -->
+SELECT vtext, vOrder2, vType
+FROM dictionary
+WHERE vtitle = 'OrderClass' AND vType = 2
+ORDER BY vOrder2
+```
+
+#### 2.4 IOrderClassDataService.java
+**璺緞**锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java`
+
+**浣滅敤**锛氳鍗曠紪鐮佹暟鎹湇鍔℃帴鍙�
+
+#### 2.5 OrderClassDataServiceImpl.java
+**璺緞**锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java`
+
+**浣滅敤**锛氳鍗曠紪鐮佹暟鎹湇鍔″疄鐜扮被锛屼笓闂ㄨ礋璐d粠SQL Server鏌ヨ缂栫爜鏁版嵁
+
+**娉ㄨВ**锛歚@DataSource(DataSourceType.SQLSERVER)` - 鏁翠釜鏈嶅姟浣跨敤SQL Server鏁版嵁婧�
+
+### 3. 淇敼鏂囦欢
+
+#### 3.1 SysDept.java
+**鏂板瀛楁**锛�
+```java
+/** 鏈嶅姟鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=1) */
+private String serviceOrderClass;
+
+/** 璋冨害鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=2) */
+private String dispatchOrderClass;
+```
+
+#### 3.2 SysDeptMapper.xml
+**鏇存柊鍐呭**锛�
+- 鍦╜resultMap`涓坊鍔犳柊瀛楁鏄犲皠
+- 鍦╜selectDeptVo`涓坊鍔犳柊瀛楁鏌ヨ
+- 鍦╜insertDept`涓坊鍔犳柊瀛楁鎻掑叆
+- 鍦╜updateDept`涓坊鍔犳柊瀛楁鏇存柊
+
+#### 3.3 DepartmentSyncServiceImpl.java
+**鏂板渚濊禆**锛�
+```java
+@Autowired
+private IOrderClassDataService orderClassDataService;
+```
+
+**鏍稿績閫昏緫鏇存柊**锛�
+鍦ㄥ垱寤哄垎鍏徃鏃讹紝鑷姩璋冪敤`syncOrderClassCodes()`鏂规硶鍚屾缂栫爜锛�
+
+```java
+// 鍒涘缓鏂扮殑鍒嗗叕鍙�
+SysDept newBranch = new SysDept();
+newBranch.setParentId(100L);
+newBranch.setDeptName(branchName);
+// ... 鍏朵粬灞炴�ц缃� ...
+
+// 鑷姩鍖归厤骞惰缃湇鍔″崟鍜岃皟搴﹀崟缂栫爜
+syncOrderClassCodes(newBranch, parts[0].trim());
+
+sysDeptMapper.insertDept(newBranch);
+```
+
+**鏂板杈呭姪鏂规硶**锛�
+
+1. `syncOrderClassCodes(SysDept dept, String cityName)`
+   - 鍚屾璁㈠崟缂栫爜锛堟湇鍔″崟鍜岃皟搴﹀崟缂栫爜锛�
+   - 鍙傛暟锛氶儴闂ㄥ璞°�佸煄甯傚悕绉帮紙濡傦細涓北銆佸箍宸烇級
+
+2. `matchCityNameToCode(String cityName, List<OrderClassDTO> orderClassList)`
+   - 鏍规嵁鍩庡競鍚嶇О鍖归厤缂栫爜
+   - 鍖归厤瑙勫垯锛氬鏋渧text涓寘鍚煄甯傚悕绉帮紝鍒欒繑鍥炲搴旂殑vOrder2缂栫爜
+   - 绀轰緥锛歝ityName="涓北", vtext="涓北鏈嶅姟鍗�", vOrder2="JA" 鈫� 杩斿洖"JA"
+
+## 宸ヤ綔娴佺▼
+
+### 鍚屾娴佺▼
+
+```
+1. 閮ㄩ棬鍚屾寮�濮�
+   鈫�
+2. 瑙f瀽閮ㄩ棬鍚嶇О
+   婀涙睙--鎶ゅ+ 鈫� 鍒嗗叕鍙革細婀涙睙锛岄儴闂細鎶ゅ+
+   鈫�
+3. 鍒涘缓/鏇存柊鍒嗗叕鍙�
+   鈫�
+4. 鏌ヨSQL Server缂栫爜鏁版嵁
+   鈹溾攢 鏌ヨ鏈嶅姟鍗曠紪鐮� (vType=1)
+   鈹斺攢 鏌ヨ璋冨害鍗曠紪鐮� (vType=2)
+   鈫�
+5. 鍦板悕鍖归厤
+   鈹溾攢 鎻愬彇鍩庡競鍚嶇О锛氭箾姹�
+   鈹溾攢 閬嶅巻鏈嶅姟鍗曠紪鐮佸垪琛紝鍖归厤"婀涙睙"
+   鈹溾攢 閬嶅巻璋冨害鍗曠紪鐮佸垪琛紝鍖归厤"婀涙睙"
+   鈹斺攢 杩斿洖鍖归厤鐨勭紪鐮佸��
+   鈫�
+6. 鏇存柊閮ㄩ棬瀵硅薄
+   鈹溾攢 setServiceOrderClass("ZJ")
+   鈹斺攢 setDispatchOrderClass("ZJ01")
+   鈫�
+7. 淇濆瓨鍒癕ySQL鏁版嵁搴�
+   鈫�
+8. 鍚屾瀹屾垚
+```
+
+## 鏁版嵁绀轰緥
+
+### SQL Server dictionary琛ㄦ暟鎹�
+
+| vtext | vOrder2 | vType |
+|-------|---------|-------|
+| 涓北鏈嶅姟鍗� | JA | 1 |
+| 骞垮窞鏈嶅姟鍗� | GZ | 1 |
+| 婀涙睙鏈嶅姟鍗� | ZJ | 1 |
+| 涓北璋冨害鍗� | JA01 | 2 |
+| 骞垮窞璋冨害鍗� | GZ01 | 2 |
+| 婀涙睙璋冨害鍗� | ZJ01 | 2 |
+
+### MySQL sys_dept琛ㄦ暟鎹紙鍚屾鍚庯級
+
+| dept_id | dept_name | parent_id | service_order_class | dispatch_order_class |
+|---------|-----------|-----------|---------------------|---------------------|
+| 200 | 涓北鍒嗗叕鍙� | 100 | JA | JA01 |
+| 201 | 骞垮窞鍒嗗叕鍙� | 100 | GZ | GZ01 |
+| 202 | 婀涙睙鍒嗗叕鍙� | 100 | ZJ | ZJ01 |
+
+## 鍖归厤閫昏緫
+
+### 鍦板悕鍖归厤绠楁硶
+
+```java
+private String matchCityNameToCode(String cityName, List<OrderClassDTO> orderClassList)
+{
+    // 1. 妫�鏌ュ弬鏁版湁鏁堟��
+    if (StringUtils.isEmpty(cityName) || orderClassList == null) {
+        return null;
+    }
+
+    // 2. 閬嶅巻缂栫爜鍒楄〃锛屾煡鎵惧寘鍚煄甯傚悕绉扮殑椤�
+    for (OrderClassDTO dto : orderClassList) {
+        if (dto.getVtext() != null && dto.getVtext().contains(cityName)) {
+            // 3. 鍖归厤鎴愬姛锛岃繑鍥炵紪鐮佸��
+            return dto.getVOrder2();
+        }
+    }
+
+    // 4. 鏈尮閰嶅埌锛岃繑鍥瀗ull
+    return null;
+}
+```
+
+### 鍖归厤绀轰緥
+
+| 鍒嗗叕鍙稿悕绉� | 鎻愬彇鍩庡競鍚� | vtext锛圫QL Server锛� | 鍖归厤缁撴灉锛坴Order2锛� |
+|-----------|-----------|-------------------|------------------|
+| 婀涙睙--鎶ゅ+ | 婀涙睙 | 婀涙睙鏈嶅姟鍗� | ZJ |
+| 涓北--杞﹂槦 | 涓北 | 涓北鏈嶅姟鍗� | JA |
+| 骞垮窞--瀹㈡湇 | 骞垮窞 | 骞垮窞鏈嶅姟鍗� | GZ |
+
+## 鏃ュ織杈撳嚭
+
+### 鎴愬姛鍖归厤鏃ュ織
+
+```
+2025-10-19 10:00:00 INFO  DepartmentSyncServiceImpl - 寮�濮嬩粠 SQL Server 鏌ヨ鏈嶅姟鍗曠紪鐮佹暟鎹�...
+2025-10-19 10:00:00 INFO  OrderClassDataServiceImpl - 鎴愬姛鏌ヨ鍒� 10 鏉℃湇鍔″崟缂栫爜鏁版嵁
+2025-10-19 10:00:00 INFO  DepartmentSyncServiceImpl - 鍖归厤鍒版湇鍔″崟缂栫爜 - 鍩庡競: 涓北, 缂栫爜: JA
+2025-10-19 10:00:00 INFO  DepartmentSyncServiceImpl - 鍖归厤鍒拌皟搴﹀崟缂栫爜 - 鍩庡競: 涓北, 缂栫爜: JA01
+2025-10-19 10:00:00 INFO  DepartmentSyncServiceImpl - 鍒涘缓鏂板垎鍏徃: 涓北鍒嗗叕鍙�, ID: 200, 鏈嶅姟鍗曠紪鐮�: JA, 璋冨害鍗曠紪鐮�: JA01
+```
+
+### 鏈尮閰嶆棩蹇�
+
+```
+2025-10-19 10:00:00 WARN  DepartmentSyncServiceImpl - 鏈壘鍒板尮閰嶇殑鏈嶅姟鍗曠紪鐮� - 鍩庡競: 娣卞湷
+2025-10-19 10:00:00 WARN  DepartmentSyncServiceImpl - 鏈壘鍒板尮閰嶇殑璋冨害鍗曠紪鐮� - 鍩庡競: 娣卞湷
+2025-10-19 10:00:00 INFO  DepartmentSyncServiceImpl - 鍒涘缓鏂板垎鍏徃: 娣卞湷鍒嗗叕鍙�, ID: 203, 鏈嶅姟鍗曠紪鐮�: null, 璋冨害鍗曠紪鐮�: null
+```
+
+## 浣跨敤璇存槑
+
+### 1. 鎵ц鏁版嵁搴撹剼鏈�
+
+```bash
+mysql -u root -p ry-vue < sql/add_dept_order_class_fields.sql
+```
+
+### 2. 閲嶆柊缂栬瘧椤圭洰
+
+```bash
+mvn clean package -DskipTests
+```
+
+### 3. 閲嶅惎鏈嶅姟
+
+```bash
+cd ruoyi-admin
+java -jar target/ruoyi-admin.jar
+```
+
+### 4. 璋冪敤鍚屾鎺ュ彛
+
+```bash
+POST http://localhost:8080/system/dept/sync/branch
+Headers:
+  Authorization: Bearer {token}
+```
+
+### 5. 楠岃瘉缁撴灉
+
+```sql
+-- 鏌ョ湅鍚屾鐨勫垎鍏徃鍙婂叾缂栫爜
+SELECT 
+    dept_id,
+    dept_name,
+    service_order_class,
+    dispatch_order_class
+FROM sys_dept 
+WHERE parent_id = 100 AND dept_name LIKE '%鍒嗗叕鍙�' 
+ORDER BY dept_name;
+```
+
+## 娉ㄦ剰浜嬮」
+
+1. **鏁版嵁婧愬垏鎹�**锛歚OrderClassMapper`鍜宍OrderClassDataServiceImpl`閮戒娇鐢╜@DataSource(DataSourceType.SQLSERVER)`娉ㄨВ锛岀‘淇濅粠SQL Server鏌ヨ鏁版嵁
+
+2. **鍖归厤瑙勫垯**锛氫娇鐢╜contains()`鏂规硶杩涜妯$硦鍖归厤锛屽鏋淪QL Server涓殑vtext鍖呭惈鍩庡競鍚嶇О鍗冲彲鍖归厤
+
+3. **鏈尮閰嶅鐞�**锛氬鏋滄湭鍖归厤鍒扮紪鐮侊紝瀛楁鍊间负null锛屼笉褰卞搷閮ㄩ棬鍚屾娴佺▼
+
+4. **缂栫爜鏇存柊**锛氬浜庡凡瀛樺湪鐨勫垎鍏徃锛屼篃浼氳嚜鍔ㄦ洿鏂扮紪鐮侊紙濡傛灉涔嬪墠涓虹┖锛�
+
+5. **鍏煎鎬�**锛氳鍔熻兘瀹屽叏鍚戜笅鍏煎锛屼笉褰卞搷鍘熸湁鐨勯儴闂ㄥ悓姝ラ�昏緫
+
+## 鎵╁睍寤鸿
+
+### 1. 绮剧‘鍖归厤浼樺寲
+
+濡傛灉闇�瑕佹洿绮剧‘鐨勫尮閰嶈鍒欙紝鍙互淇敼`matchCityNameToCode`鏂规硶锛�
+
+```java
+// 瀹屽叏鍖归厤浼樺厛
+for (OrderClassDTO dto : orderClassList) {
+    String vtext = dto.getVtext();
+    if (vtext != null) {
+        // 瀹屽叏鍖归厤锛氫腑灞� == 涓北鏈嶅姟鍗曪紙鍘婚櫎"鏈嶅姟鍗�"/"璋冨害鍗�"鍚庣紑锛�
+        String baseName = vtext.replace("鏈嶅姟鍗�", "").replace("璋冨害鍗�", "").trim();
+        if (baseName.equals(cityName)) {
+            return dto.getVOrder2();
+        }
+    }
+}
+```
+
+### 2. 缂撳瓨浼樺寲
+
+涓洪伩鍏嶆瘡娆″悓姝ラ兘鏌ヨSQL Server锛屽彲浠ユ坊鍔犵紦瀛橈細
+
+```java
+@Cacheable(value = "orderClass", key = "'service'")
+public List<OrderClassDTO> getServiceOrderClass() {
+    // ...
+}
+```
+
+### 3. 鎵嬪姩閰嶇疆鎺ュ彛
+
+鍙互娣诲姞涓�涓墜鍔ㄩ厤缃紪鐮佺殑鎺ュ彛锛岀敤浜庡鐞嗚嚜鍔ㄥ尮閰嶅け璐ョ殑鎯呭喌銆�
+
+## 鐗堟湰鍘嗗彶
+
+- **v1.0** (2025-10-19)
+  - 鍒濆瀹炵幇
+  - 鏀寔鑷姩鍖归厤鏈嶅姟鍗曞拰璋冨害鍗曠紪鐮�
+  - 鏀寔鍦ㄩ儴闂ㄥ悓姝ユ椂鑷姩鏇存柊缂栫爜
+
+## 鐩稿叧鏂囨。
+
+- [閮ㄩ棬鍚屾鍔熻兘璇存槑](./閮ㄩ棬鍚屾鍔熻兘璇存槑.md)
+- [OA鏁版嵁鍚屾澶氭暟鎹簮鏋舵瀯璇存槑](./OA鏁版嵁鍚屾澶氭暟鎹簮鏋舵瀯璇存槑.md)
+- [閮ㄩ棬鍚屾鏈嶅姟閲嶆瀯璇存槑](./閮ㄩ棬鍚屾鏈嶅姟閲嶆瀯璇存槑.md)
diff --git "a/prd/\351\203\250\351\227\250\347\274\226\347\240\201\346\230\240\345\260\204\350\241\250.md" "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\346\230\240\345\260\204\350\241\250.md"
new file mode 100644
index 0000000..7f6d02f
--- /dev/null
+++ "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\346\230\240\345\260\204\350\241\250.md"
@@ -0,0 +1,303 @@
+# 閮ㄩ棬缂栫爜鏄犲皠琛�
+
+## 姒傝堪
+
+鏈枃妗h褰曚簡MySQL `sys_dept`琛ㄤ笌SQL Server `dictionary`琛ㄤ腑璁㈠崟缂栫爜鐨勬槧灏勫叧绯汇��
+
+**鏇存柊鏃ユ湡**锛�2025-10-19  
+**鐗堟湰**锛歷1.0
+
+## 瀛楁鏄犲皠
+
+### MySQL sys_dept琛�
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 | 绀轰緥 |
+|-------|------|------|------|
+| dept_id | BIGINT | 閮ㄩ棬ID锛堜富閿級 | 200 |
+| dept_name | VARCHAR(30) | 閮ㄩ棬鍚嶇О | 涓北鍒嗗叕鍙� |
+| parent_id | BIGINT | 鐖堕儴闂↖D | 100 |
+| service_order_class | VARCHAR(20) | 鏈嶅姟鍗曠紪鐮� | JA |
+| dispatch_order_class | VARCHAR(20) | 璋冨害鍗曠紪鐮� | JA01 |
+
+### SQL Server dictionary琛�
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 | 绀轰緥 |
+|-------|------|------|------|
+| vtext | VARCHAR(50) | 缂栫爜鏂囨湰 | 涓北鏈嶅姟鍗� |
+| vOrder2 | VARCHAR(20) | 缂栫爜鍊� | JA |
+| vtitle | VARCHAR(50) | 缂栫爜鏍囬 | OrderClass |
+| vType | INT | 缂栫爜绫诲瀷 | 1-鏈嶅姟鍗曪紝2-璋冨害鍗� |
+
+## 缂栫爜绫诲瀷璇存槑
+
+### vType = 1锛堟湇鍔″崟缂栫爜锛�
+
+瀵瑰簲MySQL琛ㄧ殑`service_order_class`瀛楁
+
+**鏌ヨSQL**锛�
+```sql
+SELECT vtext, vOrder2 
+FROM dictionary 
+WHERE vtitle = 'OrderClass' AND vType = 1
+ORDER BY vOrder2;
+```
+
+### vType = 2锛堣皟搴﹀崟缂栫爜锛�
+
+瀵瑰簲MySQL琛ㄧ殑`dispatch_order_class`瀛楁
+
+**鏌ヨSQL**锛�
+```sql
+SELECT vtext, vOrder2 
+FROM dictionary 
+WHERE vtitle = 'OrderClass' AND vType = 2
+ORDER BY vOrder2;
+```
+
+## 缂栫爜绀轰緥鏁版嵁
+
+### 鏈嶅姟鍗曠紪鐮佺ず渚嬶紙vType=1锛�
+
+| vtext | vOrder2 | 璇存槑 |
+|-------|---------|------|
+| 涓北鏈嶅姟鍗� | JA | 涓北鍦板尯鏈嶅姟鍗� |
+| 骞垮窞鏈嶅姟鍗� | GZ | 骞垮窞鍦板尯鏈嶅姟鍗� |
+| 婀涙睙鏈嶅姟鍗� | ZJ | 婀涙睙鍦板尯鏈嶅姟鍗� |
+| 鐝犳捣鏈嶅姟鍗� | ZH | 鐝犳捣鍦板尯鏈嶅姟鍗� |
+| 浣涘北鏈嶅姟鍗� | FS | 浣涘北鍦板尯鏈嶅姟鍗� |
+
+### 璋冨害鍗曠紪鐮佺ず渚嬶紙vType=2锛�
+
+| vtext | vOrder2 | 璇存槑 |
+|-------|---------|------|
+| 涓北璋冨害鍗� | JA01 | 涓北鍦板尯璋冨害鍗� |
+| 骞垮窞璋冨害鍗� | GZ01 | 骞垮窞鍦板尯璋冨害鍗� |
+| 婀涙睙璋冨害鍗� | ZJ01 | 婀涙睙鍦板尯璋冨害鍗� |
+| 鐝犳捣璋冨害鍗� | ZH01 | 鐝犳捣鍦板尯璋冨害鍗� |
+| 浣涘北璋冨害鍗� | FS01 | 浣涘北鍦板尯璋冨害鍗� |
+
+## 鍦板悕鍖归厤瑙勫垯
+
+### 鍖归厤绠楁硶
+
+```
+杈撳叆锛氬垎鍏徃鍚嶇О锛堝锛氭箾姹�--鎶ゅ+锛�
+     鈫�
+姝ラ1锛氭彁鍙栧煄甯傚悕锛堟箾姹燂級
+     鈫�
+姝ラ2锛氬湪vtext涓煡鎵惧寘鍚鍩庡競鍚嶇殑璁板綍
+     鈫�
+姝ラ3锛氳繑鍥炲搴旂殑vOrder2鍊�
+```
+
+### 鍖归厤绀轰緥
+
+| 鍒嗗叕鍙稿悕绉� | 鎻愬彇鍩庡競鍚� | 鍖归厤vtext | 鏈嶅姟鍗曠紪鐮� | 璋冨害鍗曠紪鐮� |
+|-----------|-----------|----------|-----------|-----------|
+| 涓北--鎶ゅ+ | 涓北 | 涓北鏈嶅姟鍗�/涓北璋冨害鍗� | JA | JA01 |
+| 骞垮窞--杞﹂槦 | 骞垮窞 | 骞垮窞鏈嶅姟鍗�/骞垮窞璋冨害鍗� | GZ | GZ01 |
+| 婀涙睙--瀹㈡湇 | 婀涙睙 | 婀涙睙鏈嶅姟鍗�/婀涙睙璋冨害鍗� | ZJ | ZJ01 |
+| 鐝犳捣--鍔炲叕瀹� | 鐝犳捣 | 鐝犳捣鏈嶅姟鍗�/鐝犳捣璋冨害鍗� | ZH | ZH01 |
+
+## 缂栫爜浣跨敤鍦烘櫙
+
+### 1. 閮ㄩ棬鍚屾鏃惰嚜鍔ㄥ~鍏�
+
+鍦ㄩ儴闂ㄥ悓姝ヨ繃绋嬩腑锛岀郴缁熶細鑷姩锛�
+1. 浠嶴QL Server鏌ヨ鏈�鏂扮殑缂栫爜鍒楄〃
+2. 鏍规嵁鍒嗗叕鍙稿悕绉版彁鍙栧煄甯傚悕
+3. 鍖归厤瀵瑰簲鐨勭紪鐮�
+4. 濉厖鍒癭service_order_class`鍜宍dispatch_order_class`瀛楁
+
+### 2. 鏃х郴缁熸暟鎹悓姝�
+
+鍦ㄥ悜鏃х郴缁熷悓姝ユ暟鎹椂锛屽彲浠ヤ娇鐢ㄨ繖浜涚紪鐮侊細
+
+```java
+// 鏌ヨ閮ㄩ棬淇℃伅
+SysDept dept = sysDeptMapper.selectDeptById(deptId);
+
+// 鑾峰彇缂栫爜
+String serviceOrderClass = dept.getServiceOrderClass();  // 濡傦細JA
+String dispatchOrderClass = dept.getDispatchOrderClass(); // 濡傦細JA01
+
+// 浼犻�掔粰鏃х郴缁�
+params.put("orderClass", serviceOrderClass);
+params.put("dispatchClass", dispatchOrderClass);
+```
+
+### 3. 鍓嶇灞曠ず
+
+鍦ㄥ墠绔儴闂ㄧ鐞嗛〉闈紝鍙互灞曠ず杩欎簺缂栫爜锛�
+
+```javascript
+{
+  deptId: 200,
+  deptName: '涓北鍒嗗叕鍙�',
+  serviceOrderClass: 'JA',
+  dispatchOrderClass: 'JA01'
+}
+```
+
+## 鏁版嵁缁存姢
+
+### 娣诲姞鏂扮紪鐮�
+
+鍦⊿QL Server鐨刣ictionary琛ㄤ腑娣诲姞锛�
+
+```sql
+-- 娣诲姞鏈嶅姟鍗曠紪鐮�
+INSERT INTO dictionary (vtitle, vtext, vOrder2, vType)
+VALUES ('OrderClass', '娣卞湷鏈嶅姟鍗�', 'SZ', 1);
+
+-- 娣诲姞璋冨害鍗曠紪鐮�
+INSERT INTO dictionary (vtitle, vtext, vOrder2, vType)
+VALUES ('OrderClass', '娣卞湷璋冨害鍗�', 'SZ01', 2);
+```
+
+### 淇敼缂栫爜
+
+```sql
+-- 淇敼鏈嶅姟鍗曠紪鐮�
+UPDATE dictionary 
+SET vOrder2 = 'NEW_CODE'
+WHERE vtitle = 'OrderClass' 
+  AND vtext = '涓北鏈嶅姟鍗�' 
+  AND vType = 1;
+```
+
+### 鍒犻櫎缂栫爜
+
+```sql
+-- 鍒犻櫎缂栫爜
+DELETE FROM dictionary 
+WHERE vtitle = 'OrderClass' 
+  AND vtext = '涓北鏈嶅姟鍗�' 
+  AND vType = 1;
+```
+
+## 鏁版嵁楠岃瘉
+
+### 楠岃瘉缂栫爜瀹屾暣鎬�
+
+妫�鏌ユ槸鍚︽墍鏈夊垎鍏徃閮芥湁瀵瑰簲鐨勭紪鐮侊細
+
+```sql
+-- MySQL鏌ヨ
+SELECT 
+    d.dept_id,
+    d.dept_name,
+    d.service_order_class,
+    d.dispatch_order_class,
+    CASE 
+        WHEN d.service_order_class IS NULL THEN '缂哄皯鏈嶅姟鍗曠紪鐮�'
+        WHEN d.dispatch_order_class IS NULL THEN '缂哄皯璋冨害鍗曠紪鐮�'
+        ELSE '瀹屾暣'
+    END AS status
+FROM sys_dept d
+WHERE d.parent_id = 100 
+  AND d.dept_name LIKE '%鍒嗗叕鍙�'
+ORDER BY d.dept_name;
+```
+
+### 楠岃瘉缂栫爜瀛樺湪鎬�
+
+妫�鏌ySQL涓殑缂栫爜鏄惁鍦⊿QL Server涓瓨鍦細
+
+```sql
+-- 鍦⊿QL Server涓獙璇�
+SELECT 
+    d.dept_name,
+    d.service_order_class,
+    d.dispatch_order_class,
+    (SELECT COUNT(*) FROM dictionary 
+     WHERE vtitle = 'OrderClass' 
+       AND vOrder2 = d.service_order_class 
+       AND vType = 1) AS service_exists,
+    (SELECT COUNT(*) FROM dictionary 
+     WHERE vtitle = 'OrderClass' 
+       AND vOrder2 = d.dispatch_order_class 
+       AND vType = 2) AS dispatch_exists
+FROM mysql_sys_dept d
+WHERE d.parent_id = 100;
+```
+
+## 缂栫爜瑙勮寖
+
+### 鍛藉悕瑙勮寖
+
+1. **vtext鍛藉悕**锛�
+   - 鏍煎紡锛歚{鍩庡競鍚峿鏈嶅姟鍗昤 鎴� `{鍩庡競鍚峿璋冨害鍗昤
+   - 绀轰緥锛氫腑灞辨湇鍔″崟銆佸箍宸炶皟搴﹀崟
+
+2. **vOrder2鍛藉悕**锛�
+   - 鏈嶅姟鍗曪細閫氬父浣跨敤鍩庡競鎷奸煶棣栧瓧姣嶏紙澶у啓锛�
+   - 璋冨害鍗曪細閫氬父鍦ㄦ湇鍔″崟缂栫爜鍚庡姞01
+   - 绀轰緥锛欽A锛堜腑灞憋級銆丣A01锛堜腑灞辫皟搴﹀崟锛�
+
+### 缂栫爜闀垮害
+
+- `vOrder2`瀛楁鏈�澶ч暱搴︼細20涓瓧绗�
+- 寤鸿浣跨敤2-10涓瓧绗︾殑缂栫爜
+- 淇濇寔绠�娲佹槗璇嗗埆
+
+## 甯歌闂
+
+### Q1: 濡備綍鏌ョ湅褰撳墠鎵�鏈夊彲鐢ㄧ殑缂栫爜锛�
+
+**SQL Server鏌ヨ**锛�
+```sql
+SELECT vtext, vOrder2, vType
+FROM dictionary
+WHERE vtitle = 'OrderClass'
+ORDER BY vType, vOrder2;
+```
+
+### Q2: 鏂板鍒嗗叕鍙稿悗缂栫爜涓虹┖鎬庝箞鍔烇紵
+
+1. 妫�鏌QL Server涓槸鍚︽湁瀵瑰簲鍩庡競鐨勭紪鐮�
+2. 濡傛灉娌℃湁锛岄渶瑕佸湪dictionary琛ㄤ腑娣诲姞
+3. 娣诲姞鍚庨噸鏂版墽琛岄儴闂ㄥ悓姝�
+
+### Q3: 濡備綍鎵嬪姩鏇存柊缂栫爜锛�
+
+```sql
+UPDATE sys_dept 
+SET service_order_class = 'JA',
+    dispatch_order_class = 'JA01'
+WHERE dept_name = '涓北鍒嗗叕鍙�';
+```
+
+### Q4: 缂栫爜鍙互閲嶅鍚楋紵
+
+- 鐞嗚涓婂彲浠ワ紝浣嗕笉寤鸿
+- 寤鸿姣忎釜鍒嗗叕鍙镐娇鐢ㄥ敮涓�鐨勭紪鐮�
+- 渚夸簬鍦ㄦ棫绯荤粺涓尯鍒嗕笉鍚屽垎鍏徃
+
+## 鎵╁睍瀛楁璇存槑
+
+### service_order_class锛堟湇鍔″崟缂栫爜锛�
+
+- **鐢ㄩ��**锛氭爣璇嗚鍒嗗叕鍙哥殑鏈嶅姟鍗曠被鍨�
+- **鏉ユ簮**锛歋QL Server dictionary琛紙vType=1锛�
+- **鏍煎紡**锛氶�氬父2-5涓瓧绗�
+- **绀轰緥**锛欽A, GZ, ZJ
+
+### dispatch_order_class锛堣皟搴﹀崟缂栫爜锛�
+
+- **鐢ㄩ��**锛氭爣璇嗚鍒嗗叕鍙哥殑璋冨害鍗曠被鍨�
+- **鏉ユ簮**锛歋QL Server dictionary琛紙vType=2锛�
+- **鏍煎紡**锛氶�氬父3-6涓瓧绗�
+- **绀轰緥**锛欽A01, GZ01, ZJ01
+
+## 鐩稿叧鏂囨。
+
+- [閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑](./閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md)
+- [閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮媇(./閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md)
+- [閮ㄩ棬鍚屾鍔熻兘璇存槑](./閮ㄩ棬鍚屾鍔熻兘璇存槑.md)
+
+---
+
+**缁存姢浜�**锛氱郴缁熺鐞嗗憳  
+**鏇存柊棰戠巼**锛氭寜闇�鏇存柊  
+**鏈�鍚庢洿鏂�**锛�2025-10-19
diff --git "a/prd/\351\203\250\351\227\250\347\274\226\347\240\201\347\274\226\350\276\221-\345\277\253\351\200\237\345\217\202\350\200\203.md" "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\347\274\226\350\276\221-\345\277\253\351\200\237\345\217\202\350\200\203.md"
new file mode 100644
index 0000000..d7a705d
--- /dev/null
+++ "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\347\274\226\350\276\221-\345\277\253\351\200\237\345\217\202\350\200\203.md"
@@ -0,0 +1,183 @@
+# 閮ㄩ棬缂栫爜缂栬緫 - 蹇�熷弬鑰�
+
+## 鐣岄潰浣嶇疆
+
+**绯荤粺绠$悊 -> 閮ㄩ棬绠$悊**
+
+## 鏂板鍔熻兘
+
+### 1锔忊儯 鍒楄〃鏄剧ず
+
+閮ㄩ棬鍒楄〃鏂板涓ゅ垪锛�
+
+| 鍒楀悕 | 鏄剧ず鏍峰紡 |
+|------|----------|
+| 鏈嶅姟鍗曠紪鐮� | 馃煝 缁胯壊鏍囩 |
+| 璋冨害鍗曠紪鐮� | 馃煚 姗欒壊鏍囩 |
+
+### 2锔忊儯 缂栬緫鍔熻兘
+
+鍦�"娣诲姞/淇敼閮ㄩ棬"瀵硅瘽妗嗕腑鍙互缂栬緫锛�
+
+```
+[ 鏈嶅姟鍗曠紪鐮� ]  [ 璋冨害鍗曠紪鐮� ]
+```
+
+## 蹇�熸搷浣�
+
+### 鏌ョ湅缂栫爜
+
+```
+1. 鐧诲綍鍚庡彴
+2. 绯荤粺绠$悊 -> 閮ㄩ棬绠$悊
+3. 鏌ョ湅鍒楄〃涓殑缂栫爜鍒�
+```
+
+### 鏂板鏃惰缃�
+
+```
+1. 鐐瑰嚮"鏂板"鎸夐挳
+2. 濉啓閮ㄩ棬鍚嶇О
+3. 杈撳叆鏈嶅姟鍗曠紪鐮侊紙濡傦細JA锛�
+4. 杈撳叆璋冨害鍗曠紪鐮侊紙濡傦細JA01锛�
+5. 淇濆瓨
+```
+
+### 淇敼缂栫爜
+
+```
+1. 鎵惧埌瑕佷慨鏀圭殑鍒嗗叕鍙�
+2. 鐐瑰嚮"淇敼"鎸夐挳
+3. 淇敼缂栫爜瀛楁
+4. 淇濆瓨
+```
+
+## 缂栫爜绀轰緥
+
+| 鍒嗗叕鍙� | 鏈嶅姟鍗曠紪鐮� | 璋冨害鍗曠紪鐮� |
+|--------|-----------|-----------|
+| 涓北鍒嗗叕鍙� | JA | JA01 |
+| 骞垮窞鍒嗗叕鍙� | GZ | GZ01 |
+| 婀涙睙鍒嗗叕鍙� | ZJ | ZJ01 |
+| 鐝犳捣鍒嗗叕鍙� | ZH | ZH01 |
+| 浣涘北鍒嗗叕鍙� | FS | FS01 |
+
+## 瀛楁瑙勫垯
+
+- **鏈�澶ч暱搴�**锛�20涓瓧绗�
+- **鏄惁蹇呭~**锛氬惁
+- **鏍煎紡瑕佹眰**锛氭棤
+- **寤鸿鏍煎紡**锛�2-10涓瓧绗︾殑绠�鐭紪鐮�
+
+## 鏉冮檺瑕佹眰
+
+| 鎿嶄綔 | 鏉冮檺 |
+|------|------|
+| 鏌ョ湅 | system:dept:list |
+| 缂栬緫 | system:dept:edit |
+| 鏂板 | system:dept:add |
+
+## 鏁版嵁鏉ユ簮
+
+### 鑷姩鍚屾锛堟帹鑽愶級
+
+```
+1. 鎵ц閮ㄩ棬鍚屾浠诲姟
+2. 绯荤粺鑷姩浠嶴QL Server璇诲彇缂栫爜
+3. 鏍规嵁鍦板悕鑷姩鍖归厤
+4. 鍐欏叆缂栫爜瀛楁
+```
+
+### 鎵嬪姩杈撳叆
+
+```
+1. 绠$悊鍛樺湪缂栬緫鐣岄潰鎵嬪姩杈撳叆
+2. 閫傜敤浜庤嚜鍔ㄥ尮閰嶅け璐ョ殑鎯呭喌
+```
+
+## 娉ㄦ剰浜嬮」
+
+鈿狅笍 **閲嶈鎻愮ず**
+
+1. 寤鸿浣跨敤鑷姩鍚屾鎵归噺璁剧疆缂栫爜
+2. 鑷姩鍖归厤鍚庢鏌ユ槸鍚︽纭�
+3. 瀵归敊璇垨鏈尮閰嶇殑鎵嬪姩淇
+4. 缂栫爜寤鸿浣跨敤鍩庡競鎷奸煶棣栧瓧姣�
+
+## 鏂囦欢鍙樻洿
+
+**淇敼鏂囦欢**锛�
+- `ruoyi-ui/src/views/system/dept/index.vue`
+
+**鍙樻洿鍐呭**锛�
+- 鉁� 鍒楄〃鏂板鏈嶅姟鍗曠紪鐮佸垪
+- 鉁� 鍒楄〃鏂板璋冨害鍗曠紪鐮佸垪
+- 鉁� 琛ㄥ崟鏂板缂栫爜缂栬緫瀛楁
+- 鉁� 琛ㄥ崟鏁版嵁缁撴瀯鏇存柊
+
+## 蹇�熼獙璇�
+
+### 楠岃瘉姝ラ
+
+```bash
+# 1. 鐧诲綍鍚庡彴
+http://localhost/login
+
+# 2. 杩涘叆閮ㄩ棬绠$悊
+绯荤粺绠$悊 -> 閮ㄩ棬绠$悊
+
+# 3. 妫�鏌ュ垪琛�
+鏌ョ湅鏄惁鏄剧ず鏈嶅姟鍗曠紪鐮佸拰璋冨害鍗曠紪鐮佸垪
+
+# 4. 娴嬭瘯缂栬緫
+淇敼浠绘剰鍒嗗叕鍙革紝鏌ョ湅鏄惁鏈夌紪鐮佸瓧娈�
+```
+
+### 棰勬湡缁撴灉
+
+鉁� 鍒楄〃涓樉绀虹紪鐮佸垪  
+鉁� 宸叉湁缂栫爜鐨勬樉绀轰负褰╄壊鏍囩  
+鉁� 鏈缃紪鐮佺殑鏄剧ず涓�"-"  
+鉁� 缂栬緫瀵硅瘽妗嗕腑鍙互淇敼缂栫爜  
+鉁� 淇濆瓨鍚庡垪琛ㄥ疄鏃舵洿鏂�  
+
+## 甯歌闂
+
+### Q1: 鐪嬩笉鍒扮紪鐮佸垪锛�
+
+**瑙e喅**锛氬埛鏂版祻瑙堝櫒缂撳瓨锛圕trl+F5锛�
+
+### Q2: 缂栬緫鍚庢病鏈変繚瀛橈紵
+
+**瑙e喅**锛氭鏌ユ槸鍚︽湁鏉冮檺 system:dept:edit
+
+### Q3: 濡備綍鎵归噺璁剧疆缂栫爜锛�
+
+**瑙e喅**锛氫娇鐢ㄩ儴闂ㄥ悓姝ュ姛鑳借嚜鍔ㄥ尮閰�
+
+## 鐩稿叧鍛戒护
+
+```sql
+-- 鏌ョ湅鎵�鏈夊垎鍏徃鐨勭紪鐮�
+SELECT 
+    dept_name,
+    service_order_class,
+    dispatch_order_class
+FROM sys_dept 
+WHERE parent_id = 100 
+  AND dept_name LIKE '%鍒嗗叕鍙�';
+
+-- 鎵嬪姩鏇存柊缂栫爜
+UPDATE sys_dept 
+SET service_order_class = 'JA',
+    dispatch_order_class = 'JA01'
+WHERE dept_name = '涓北鍒嗗叕鍙�';
+```
+
+## 鎶�鏈敮鎸�
+
+璇︾粏鏂囨。锛歚prd/閮ㄩ棬缂栫爜缂栬緫鍔熻兘璇存槑.md`
+
+---
+
+**鏇存柊鏃堕棿**锛�2025-10-19
diff --git "a/prd/\351\203\250\351\227\250\347\274\226\347\240\201\347\274\226\350\276\221\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\347\274\226\350\276\221\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..f7c6ad3
--- /dev/null
+++ "b/prd/\351\203\250\351\227\250\347\274\226\347\240\201\347\274\226\350\276\221\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,372 @@
+# 閮ㄩ棬缂栫爜缂栬緫鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄨ嫢渚濆悗鍙扮鐞嗙郴缁熺殑閮ㄩ棬绠$悊鐣岄潰涓紝鏂板浜嗘湇鍔″崟缂栫爜鍜岃皟搴﹀崟缂栫爜鐨勬樉绀哄拰缂栬緫鍔熻兘锛屾柟渚跨鐞嗗憳鎵嬪姩缁存姢閮ㄩ棬缂栫爜銆�
+
+**瀹炵幇鏃ユ湡**锛�2025-10-19  
+**鐗堟湰**锛歷1.0
+
+## 鐣岄潰鍙樻洿
+
+### 1. 閮ㄩ棬鍒楄〃灞曠ず
+
+鍦ㄩ儴闂ㄥ垪琛ㄨ〃鏍间腑鏂板涓ゅ垪锛�
+
+| 鍒楀悕 | 瀛楁鍚� | 瀹藉害 | 鏄剧ず鏍峰紡 | 璇存槑 |
+|------|--------|------|----------|------|
+| 鏈嶅姟鍗曠紪鐮� | serviceOrderClass | 120px | 缁胯壊鏍囩 | 鏄剧ず鍒嗗叕鍙哥殑鏈嶅姟鍗曠紪鐮� |
+| 璋冨害鍗曠紪鐮� | dispatchOrderClass | 120px | 姗欒壊鏍囩 | 鏄剧ず鍒嗗叕鍙哥殑璋冨害鍗曠紪鐮� |
+
+**鏄剧ず鏁堟灉**锛�
+- 鏈夌紪鐮佸�硷細鏄剧ず涓哄僵鑹叉爣绛撅紙鏈嶅姟鍗�-缁胯壊锛岃皟搴﹀崟-姗欒壊锛�
+- 鏃犵紪鐮佸�硷細鏄剧ず涓虹伆鑹�"-"
+
+**鍒楅『搴�**锛�
+```
+閮ㄩ棬鍚嶇О -> SQL Server閮ㄩ棬ID -> 鏈嶅姟鍗曠紪鐮� -> 璋冨害鍗曠紪鐮� -> 鎺掑簭 -> 鐘舵�� -> 鍒涘缓鏃堕棿 -> 鎿嶄綔
+```
+
+### 2. 閮ㄩ棬缂栬緫琛ㄥ崟
+
+鍦�"娣诲姞/淇敼閮ㄩ棬"瀵硅瘽妗嗕腑鏂板缂栫爜缂栬緫瀛楁锛�
+
+**琛ㄥ崟甯冨眬**锛�
+```
+[ 涓婄骇閮ㄩ棬 ]                    锛堝叏瀹斤級
+
+[ 閮ㄩ棬鍚嶇О ]  [ 鏄剧ず鎺掑簭 ]       锛堝乏鍙冲垎鏍忥級
+
+[ SQL Server閮ㄩ棬ID ]            锛堝崐瀹斤紝鍙锛�
+
+[ 鏈嶅姟鍗曠紪鐮� ]  [ 璋冨害鍗曠紪鐮� ]   锛堝乏鍙冲垎鏍忥紝鍙紪杈戯級
+
+[ 璐熻矗浜� ]  [ 鑱旂郴鐢佃瘽 ]         锛堝乏鍙冲垎鏍忥級
+
+[ 閭 ]  [ 閮ㄩ棬鐘舵�� ]           锛堝乏鍙冲垎鏍忥級
+```
+
+**瀛楁璇存槑**锛�
+
+| 瀛楁鍚� | 绫诲瀷 | 鏈�澶ч暱搴� | 鏄惁蹇呭~ | 璇存槑 |
+|--------|------|----------|----------|------|
+| 鏈嶅姟鍗曠紪鐮� | 鏂囨湰 | 20瀛楃 | 鍚� | 瀵瑰簲SQL Server dictionary琛╲Type=1 |
+| 璋冨害鍗曠紪鐮� | 鏂囨湰 | 20瀛楃 | 鍚� | 瀵瑰簲SQL Server dictionary琛╲Type=2 |
+
+## 浠g爜鍙樻洿
+
+### 淇敼鏂囦欢
+
+**鏂囦欢璺緞**锛歚ruoyi-ui/src/views/system/dept/index.vue`
+
+#### 1. 琛ㄦ牸鍒楁柊澧烇紙绗�58-69琛岋級
+
+```vue
+<!-- 鏈嶅姟鍗曠紪鐮佸垪 -->
+<el-table-column prop="serviceOrderClass" label="鏈嶅姟鍗曠紪鐮�" width="120" align="center">
+  <template slot-scope="scope">
+    <el-tag v-if="scope.row.serviceOrderClass" type="success" size="mini">
+      {{ scope.row.serviceOrderClass }}
+    </el-tag>
+    <span v-else style="color: #909399;">-</span>
+  </template>
+</el-table-column>
+
+<!-- 璋冨害鍗曠紪鐮佸垪 -->
+<el-table-column prop="dispatchOrderClass" label="璋冨害鍗曠紪鐮�" width="120" align="center">
+  <template slot-scope="scope">
+    <el-tag v-if="scope.row.dispatchOrderClass" type="warning" size="mini">
+      {{ scope.row.dispatchOrderClass }}
+    </el-tag>
+    <span v-else style="color: #909399;">-</span>
+  </template>
+</el-table-column>
+```
+
+#### 2. 琛ㄥ崟瀛楁鏂板锛堢139-149琛岋級
+
+```vue
+<el-row>
+  <el-col :span="12">
+    <el-form-item label="鏈嶅姟鍗曠紪鐮�" prop="serviceOrderClass">
+      <el-input v-model="form.serviceOrderClass" placeholder="璇疯緭鍏ユ湇鍔″崟缂栫爜" maxlength="20" />
+    </el-form-item>
+  </el-col>
+  <el-col :span="12">
+    <el-form-item label="璋冨害鍗曠紪鐮�" prop="dispatchOrderClass">
+      <el-input v-model="form.dispatchOrderClass" placeholder="璇疯緭鍏ヨ皟搴﹀崟缂栫爜" maxlength="20" />
+    </el-form-item>
+  </el-col>
+</el-row>
+```
+
+#### 3. 琛ㄥ崟鏁版嵁鍒濆鍖栵紙绗�276-289琛岋級
+
+```javascript
+this.form = {
+  deptId: undefined,
+  parentId: undefined,
+  deptName: undefined,
+  departmentId: undefined,
+  serviceOrderClass: undefined,      // 鏂板
+  dispatchOrderClass: undefined,     // 鏂板
+  orderNum: undefined,
+  leader: undefined,
+  phone: undefined,
+  email: undefined,
+  status: "0"
+};
+```
+
+## 浣跨敤璇存槑
+
+### 鏌ョ湅缂栫爜
+
+1. 鐧诲綍鑻ヤ緷鍚庡彴绠$悊绯荤粺
+2. 杩涘叆 **绯荤粺绠$悊 -> 閮ㄩ棬绠$悊**
+3. 鍦ㄩ儴闂ㄥ垪琛ㄤ腑鍙互鐪嬪埌姣忎釜鍒嗗叕鍙哥殑鏈嶅姟鍗曠紪鐮佸拰璋冨害鍗曠紪鐮�
+
+**鏄剧ず鏁堟灉**锛�
+- 鉁� 鏈夌紪鐮侊細鏄剧ず涓哄僵鑹叉爣绛�
+  - 鏈嶅姟鍗曠紪鐮侊細缁胯壊鏍囩
+  - 璋冨害鍗曠紪鐮侊細姗欒壊鏍囩
+- 鈿狅笍 鏃犵紪鐮侊細鏄剧ず涓虹伆鑹�"-"
+
+### 鎵嬪姩缂栬緫缂栫爜
+
+#### 鍦烘櫙1锛氭柊澧炲垎鍏徃鏃惰缃紪鐮�
+
+1. 鐐瑰嚮"鏂板"鎸夐挳
+2. 濉啓閮ㄩ棬鍚嶇О绛夊熀鏈俊鎭�
+3. 鍦�"鏈嶅姟鍗曠紪鐮�"鍜�"璋冨害鍗曠紪鐮�"瀛楁杈撳叆瀵瑰簲缂栫爜
+4. 鐐瑰嚮"纭畾"淇濆瓨
+
+#### 鍦烘櫙2锛氫慨鏀瑰凡鏈夊垎鍏徃鐨勭紪鐮�
+
+1. 鍦ㄩ儴闂ㄥ垪琛ㄤ腑鎵惧埌瑕佷慨鏀圭殑鍒嗗叕鍙�
+2. 鐐瑰嚮璇ヨ鐨�"淇敼"鎸夐挳
+3. 鍦ㄥ脊鍑虹殑瀵硅瘽妗嗕腑淇敼缂栫爜瀛楁
+4. 鐐瑰嚮"纭畾"淇濆瓨
+
+#### 鍦烘櫙3锛氳嚜鍔ㄥ悓姝ュ悗鎵嬪姩淇
+
+濡傛灉鑷姩鍚屾鐨勭紪鐮佷笉姝g‘锛屽彲浠ユ墜鍔ㄤ慨姝o細
+
+1. 鎵惧埌缂栫爜閿欒鐨勫垎鍏徃
+2. 鐐瑰嚮"淇敼"
+3. 杈撳叆姝g‘鐨勭紪鐮�
+4. 淇濆瓨
+
+### 缂栫爜瑙勮寖
+
+鍙傝�僛閮ㄩ棬缂栫爜鏄犲皠琛�.md](./閮ㄩ棬缂栫爜鏄犲皠琛�.md)涓殑缂栫爜绀轰緥锛�
+
+**鏈嶅姟鍗曠紪鐮佺ず渚�**锛�
+- 涓北锛欽A
+- 骞垮窞锛欸Z
+- 婀涙睙锛歓J
+- 鐝犳捣锛歓H
+
+**璋冨害鍗曠紪鐮佺ず渚�**锛�
+- 涓北锛欽A01
+- 骞垮窞锛欸Z01
+- 婀涙睙锛歓J01
+- 鐝犳捣锛歓H01
+
+## 鏁版嵁娴佽浆
+
+### 鎵嬪姩缂栬緫娴佺▼
+
+```
+绠$悊鍛樺湪鐣岄潰缂栬緫
+    鈫�
+鎻愪氦琛ㄥ崟
+    鈫�
+璋冪敤 updateDept API
+    鈫�
+鍚庣楠岃瘉鏁版嵁
+    鈫�
+鏇存柊 sys_dept 琛�
+    鈹溾攢 service_order_class
+    鈹斺攢 dispatch_order_class
+    鈫�
+杩斿洖鎴愬姛娑堟伅
+    鈫�
+鍒锋柊閮ㄩ棬鍒楄〃
+```
+
+### 鑷姩鍚屾 + 鎵嬪姩淇娴佺▼
+
+```
+鑷姩鍚屾锛堝畾鏃朵换鍔★級
+    鈫�
+鏍规嵁鍦板悕鍖归厤缂栫爜
+    鈫�
+鍐欏叆鏁版嵁搴�
+    鈫�
+绠$悊鍛樻鏌�
+    鈫�
+鍙戠幇閿欒 鈫� 鎵嬪姩淇
+    鈫�
+鏇存柊鏁版嵁搴�
+```
+
+## 鏉冮檺鎺у埗
+
+缂栬緫缂栫爜鍔熻兘浣跨敤涓庨儴闂ㄧ鐞嗙浉鍚岀殑鏉冮檺锛�
+
+| 鎿嶄綔 | 鏉冮檺鏍囪瘑 | 璇存槑 |
+|------|----------|------|
+| 鏌ョ湅缂栫爜 | system:dept:list | 鏌ョ湅閮ㄩ棬鍒楄〃鏉冮檺 |
+| 缂栬緫缂栫爜 | system:dept:edit | 淇敼閮ㄩ棬鏉冮檺 |
+| 鏂板鏃惰缃紪鐮� | system:dept:add | 鏂板閮ㄩ棬鏉冮檺 |
+
+## 瀛楁楠岃瘉
+
+### 鍓嶇楠岃瘉
+
+- **鏈�澶ч暱搴�**锛�20涓瓧绗�
+- **鏍煎紡**锛氭棤鐗规畩鏍煎紡瑕佹眰锛屾敮鎸佸瓧姣嶃�佹暟瀛椼�佺鍙�
+- **蹇呭~**锛氶潪蹇呭~锛屽彲浠ヤ负绌�
+
+### 鍚庣楠岃瘉
+
+鍚庣浣跨敤MyBatis鍔ㄦ�丼QL锛屽瓧娈垫洿鏂拌鍒欙細
+
+```xml
+<if test="serviceOrderClass != null">service_order_class = #{serviceOrderClass},</if>
+<if test="dispatchOrderClass != null">dispatch_order_class = #{dispatchOrderClass},</if>
+```
+
+- 濡傛灉鍓嶇浼爊ull锛屽垯涓嶆洿鏂拌瀛楁
+- 濡傛灉鍓嶇浼犵┖瀛楃涓诧紝鍒欐洿鏂颁负绌哄瓧绗︿覆
+
+## 娴嬭瘯鍦烘櫙
+
+### 娴嬭瘯鐢ㄤ緥1锛氭煡鐪嬬紪鐮�
+
+**姝ラ**锛�
+1. 鐧诲綍鍚庡彴
+2. 杩涘叆閮ㄩ棬绠$悊
+3. 鏌ョ湅閮ㄩ棬鍒楄〃
+
+**棰勬湡缁撴灉**锛�
+- 宸叉湁缂栫爜鐨勫垎鍏徃鏄剧ず涓哄僵鑹叉爣绛�
+- 鏈缃紪鐮佺殑鏄剧ず涓虹伆鑹�"-"
+
+### 娴嬭瘯鐢ㄤ緥2锛氭柊澧炲垎鍏徃骞惰缃紪鐮�
+
+**姝ラ**锛�
+1. 鐐瑰嚮"鏂板"鎸夐挳
+2. 杈撳叆閮ㄩ棬鍚嶇О"娣卞湷鍒嗗叕鍙�"
+3. 杈撳叆鏈嶅姟鍗曠紪鐮�"SZ"
+4. 杈撳叆璋冨害鍗曠紪鐮�"SZ01"
+5. 鐐瑰嚮"纭畾"
+
+**棰勬湡缁撴灉**锛�
+- 淇濆瓨鎴愬姛
+- 鍒楄〃涓樉绀烘柊澧炵殑鍒嗗叕鍙稿強鍏剁紪鐮�
+
+### 娴嬭瘯鐢ㄤ緥3锛氫慨鏀圭紪鐮�
+
+**姝ラ**锛�
+1. 鎵惧埌"涓北鍒嗗叕鍙�"
+2. 鐐瑰嚮"淇敼"
+3. 灏嗘湇鍔″崟缂栫爜鏀逛负"JA2"
+4. 灏嗚皟搴﹀崟缂栫爜鏀逛负"JA02"
+5. 鐐瑰嚮"纭畾"
+
+**棰勬湡缁撴灉**锛�
+- 淇濆瓨鎴愬姛
+- 鍒楄〃涓樉绀烘洿鏂板悗鐨勭紪鐮�
+
+### 娴嬭瘯鐢ㄤ緥4锛氭竻绌虹紪鐮�
+
+**姝ラ**锛�
+1. 淇敼鏌愪釜鍒嗗叕鍙�
+2. 娓呯┖鏈嶅姟鍗曠紪鐮佸拰璋冨害鍗曠紪鐮�
+3. 淇濆瓨
+
+**棰勬湡缁撴灉**锛�
+- 淇濆瓨鎴愬姛
+- 鍒楄〃涓樉绀轰负鐏拌壊"-"
+
+## 鐣岄潰鎴浘璇存槑
+
+### 閮ㄩ棬鍒楄〃
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 閮ㄩ棬绠$悊                                                              鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 閮ㄩ棬鍚嶇О    SQL Server  鏈嶅姟鍗曠紪鐮�  璋冨害鍗曠紪鐮�  鎺掑簭  鐘舵��  鍒涘缓鏃堕棿 鈹�
+鈹�             閮ㄩ棬ID                                                    鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鍚堜綔鍗曚綅      -           -           -         1    姝e父  2025-01-01鈹�
+鈹� 鈹溾攢涓北鍒嗗叕鍙�  2001       [JA]       [JA01]      1    姝e父  2025-01-01鈹�
+鈹� 鈹溾攢骞垮窞鍒嗗叕鍙�  2002       [GZ]       [GZ01]      2    姝e父  2025-01-01鈹�
+鈹� 鈹斺攢婀涙睙鍒嗗叕鍙�  2003       [ZJ]       [ZJ01]      3    姝e父  2025-01-01鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+
+娉細[JA] 琛ㄧず缁胯壊鏍囩锛孾JA01] 琛ㄧず姗欒壊鏍囩
+```
+
+### 缂栬緫瀵硅瘽妗�
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 淇敼閮ㄩ棬                 [X]       鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 涓婄骇閮ㄩ棬锛歔鍚堜綔鍗曚綅        鈻糫     鈹�
+鈹�                                    鈹�
+鈹� 閮ㄩ棬鍚嶇О锛歔涓北鍒嗗叕鍙竇             鈹�
+鈹� 鏄剧ず鎺掑簭锛歔 1  ]                   鈹�
+鈹�                                    鈹�
+鈹� SQL Server閮ㄩ棬ID锛歔2001] (鍙)   鈹�
+鈹�                                    鈹�
+鈹� 鏈嶅姟鍗曠紪鐮侊細[JA        ]           鈹�
+鈹� 璋冨害鍗曠紪鐮侊細[JA01      ]           鈹�
+鈹�                                    鈹�
+鈹� 璐熻矗浜猴細[寮犱笁  ]                   鈹�
+鈹� 鑱旂郴鐢佃瘽锛歔13800138000]            鈹�
+鈹�                                    鈹�
+鈹� 閭锛歔zhangsan@example.com]       鈹�
+鈹� 閮ㄩ棬鐘舵�侊細(路) 姝e父  ( ) 鍋滅敤       鈹�
+鈹�                                    鈹�
+鈹�           [纭畾]  [鍙栨秷]           鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+## 娉ㄦ剰浜嬮」
+
+1. **缂栫爜闀垮害**锛氬缓璁娇鐢�2-10涓瓧绗︾殑绠�鐭紪鐮�
+2. **缂栫爜鍞竴鎬�**锛氱郴缁熶笉寮哄埗缂栫爜鍞竴锛屼絾寤鸿姣忎釜鍒嗗叕鍙镐娇鐢ㄤ笉鍚岀殑缂栫爜
+3. **缂栫爜瑙勮寖**锛氬缓璁伒寰粺涓�鐨勫懡鍚嶈鑼冿紙濡傚煄甯傛嫾闊抽瀛楁瘝锛�
+4. **鍚屾鍏崇郴**锛氭墜鍔ㄤ慨鏀圭殑缂栫爜涓嶄細琚嚜鍔ㄥ悓姝ヨ鐩栵紙闄ら潪閲嶆柊鎵ц鍚屾锛�
+5. **鏁版嵁涓�鑷存��**锛氫慨鏀圭紪鐮佸悗寤鸿鍚屾椂鍦⊿QL Server鐨刣ictionary琛ㄤ腑鏇存柊
+
+## 涓庤嚜鍔ㄥ悓姝ョ殑鍏崇郴
+
+| 鐗规�� | 鑷姩鍚屾 | 鎵嬪姩缂栬緫 |
+|------|----------|----------|
+| 瑙﹀彂鏃舵満 | 閮ㄩ棬鍚屾浠诲姟鎵ц鏃� | 绠$悊鍛樹富鍔ㄤ慨鏀� |
+| 鏁版嵁鏉ユ簮 | SQL Server dictionary琛� | 绠$悊鍛樿緭鍏� |
+| 閫傜敤鍦烘櫙 | 鎵归噺鍒濆鍖栥�佸畾鏈熸洿鏂� | 淇閿欒銆佺壒娈婇厤缃� |
+| 浼樺厛绾� | 浣� | 楂� |
+
+**寤鸿娴佺▼**锛�
+1. 棣栨閰嶇疆锛氫娇鐢ㄨ嚜鍔ㄥ悓姝ユ壒閲忚缃紪鐮�
+2. 妫�鏌ラ獙璇侊細绠$悊鍛樻鏌ヨ嚜鍔ㄥ尮閰嶇粨鏋�
+3. 鎵嬪姩淇锛氬鍖归厤閿欒鎴栨湭鍖归厤鐨勮繘琛屾墜鍔ㄤ慨姝�
+4. 鍚庣画缁存姢锛氫富瑕侀�氳繃鎵嬪姩缂栬緫缁存姢
+
+## 鐩稿叧鏂囨。
+
+- [閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑](./閮ㄩ棬缂栫爜鍚屾鍔熻兘璇存槑.md) - 鑷姩鍚屾鎶�鏈枃妗�
+- [閮ㄩ棬缂栫爜鏄犲皠琛╙(./閮ㄩ棬缂栫爜鏄犲皠琛�.md) - 缂栫爜鍙傝�冭〃
+- [閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮媇(./閮ㄩ棬缂栫爜鍚屾-蹇�熷紑濮�.md) - 蹇�熷紑濮嬫寚鍗�
+
+---
+
+**鏇存柊鏃ユ湡**锛�2025-10-19  
+**缁存姢浜�**锛氱郴缁熺鐞嗗憳
diff --git "a/prd/\351\246\226\351\241\265\344\273\273\345\212\241\345\210\227\350\241\250\346\240\267\345\274\217\344\274\230\345\214\226\350\257\264\346\230\216.md" "b/prd/\351\246\226\351\241\265\344\273\273\345\212\241\345\210\227\350\241\250\346\240\267\345\274\217\344\274\230\345\214\226\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..a418fb3
--- /dev/null
+++ "b/prd/\351\246\226\351\241\265\344\273\273\345\212\241\345\210\227\350\241\250\346\240\267\345\274\217\344\274\230\345\214\226\350\257\264\346\230\216.md"
@@ -0,0 +1,245 @@
+# 棣栭〉浠诲姟鍒楄〃鏍峰紡浼樺寲璇存槑
+
+## 淇敼姒傝堪
+
+灏嗛椤碉紙index.vue锛夌殑浠诲姟鍒楄〃鏍峰紡璋冩暣涓轰笌浠诲姟鍔熻兘椤甸潰锛坱ask/index.vue锛変竴鑷达紝鎻愬崌鐢ㄦ埛浣撻獙鐨勪竴鑷存�с��
+
+## 涓昏鏀硅繘
+
+### 1. 浠诲姟澶撮儴浼樺寲
+
+**涔嬪墠**锛�
+- 鏍囬鐙珛涓�琛�
+- 娌℃湁鐘舵�佹爣绛�
+
+**鐜板湪**锛�
+- 鏍囬鍜岀姸鎬佹爣绛惧苟鎺掓樉绀�
+- 鐘舵�佹爣绛惧甫鏈夐鑹叉爣璇嗭紝鏇寸洿瑙�
+
+```vue
+<!-- 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵�佹爣绛� -->
+<view class="task-header">
+  <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
+  <view class="task-status" :class="getStatusClass(task.taskStatus)">
+    {{ getStatusText(task.status) }}
+  </view>
+</view>
+```
+
+### 2. 浠诲姟缂栧彿绐佸嚭鏄剧ず
+
+**涔嬪墠**锛�
+- 浠诲姟缂栧彿涓庡叾浠栦俊鎭贩鍦ㄤ竴璧�
+
+**鐜板湪**锛�
+- 浠诲姟缂栧彿鍗曠嫭涓�琛�
+- 浣跨敤铏氱嚎杈规鍒嗛殧
+- 浣跨敤绛夊瀛椾綋锛坢onospace锛夋彁鍗囧彲璇绘��
+
+```vue
+<!-- 浠诲姟缂栧彿鍗曠嫭涓�琛� -->
+<view class="task-code-row">
+  <text class="task-code">{{ task.taskNo }}</text>
+</view>
+```
+
+### 3. 鐘舵�侀鑹叉爣璇�
+
+娣诲姞浜嗗畬鏁寸殑鐘舵�侀鑹茬郴缁燂紝涓庝换鍔¢〉闈繚鎸佷竴鑷达細
+
+| 鐘舵�� | 棰滆壊 | 鑳屾櫙鑹� |
+|------|------|--------|
+| 寰呭鐞� (PENDING) | 姗欒壊 #ff9500 | #fff3e0 |
+| 鍑哄彂涓� (DEPARTING) | 钃濊壊 #007AFF | #e3f2fd |
+| 宸插埌杈� (ARRIVED) | 绱壊 #9c27b0 | #f3e5f5 |
+| 杩旂▼涓� (RETURNING) | 闈掕壊 #009688 | #e0f2f1 |
+| 宸插畬鎴� (COMPLETED) | 缁胯壊 #34C759 | #e8f5e9 |
+| 宸插彇娑� (CANCELLED) | 鐏拌壊 #999 | #f5f5f5 |
+| 澶勭悊涓� (IN_PROGRESS) | 钃濊壊 #007AFF | #e3f2fd |
+
+### 4. 淇℃伅灞曠ず浼樺寲
+
+**璋冩暣鍐呭**锛�
+- 绉婚櫎浜嗕换鍔$姸鎬佷俊鎭锛堝凡鍦ㄥご閮ㄦ樉绀猴級
+- 浼樺寲浜嗗嚭鍙戝湴鍜岀洰鐨勫湴鐨勬樉绀轰綅缃�
+- 淇濇寔鍑哄彂鏃堕棿鍜屾墽琛屼汉鍛樼殑鏄剧ず
+
+**甯冨眬缁撴瀯**锛�
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鎬ユ晳杞繍 - 绮12345    [寰呭鐞哴     鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� TD1021                              鈹� 鈫� 浠诲姟缂栧彿
+鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹�
+鈹� 鍑哄彂鍦�: 骞垮窞澶╂渤    鐩殑鍦�: 骞垮窞涓滅珯 鈹�
+鈹� 鍑哄彂鏃堕棿: 13:20    鎵ц浜哄憳: 寮犱笁   鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� [鍑哄彂]  [鍙栨秷]                      鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+## 浠g爜鍙樻洿
+
+### 妯℃澘鍙樻洿
+
+```vue
+<!-- 涔嬪墠 -->
+<view class="task-main">
+  <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
+  <view class="task-info">
+    <view class="info-row">
+      <view class="info-item">
+        <view class="label">浠诲姟缂栧彿:</view>
+        <view class="value">{{ task.taskNo }}</view>
+      </view>
+      <view class="info-item">
+        <view class="label">浠诲姟鐘舵��:</view>
+        <view class="value">{{ getStatusText(task.status) }}</view>
+      </view>
+    </view>
+    <!-- 鍏朵粬淇℃伅 -->
+  </view>
+</view>
+
+<!-- 鐜板湪 -->
+<view class="task-main">
+  <!-- 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵�佹爣绛� -->
+  <view class="task-header">
+    <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
+    <view class="task-status" :class="getStatusClass(task.taskStatus)">
+      {{ getStatusText(task.status) }}
+    </view>
+  </view>
+  
+  <!-- 浠诲姟缂栧彿鍗曠嫭涓�琛� -->
+  <view class="task-code-row">
+    <text class="task-code">{{ task.taskNo }}</text>
+  </view>
+  
+  <!-- 浠诲姟璇︾粏淇℃伅 -->
+  <view class="task-info">
+    <!-- 鍙繚鐣欏嚭鍙戝湴銆佺洰鐨勫湴銆佹椂闂淬�佷汉鍛� -->
+  </view>
+</view>
+```
+
+### 鏂规硶鏂板
+
+娣诲姞浜� `getStatusClass()` 鏂规硶锛�
+
+```javascript
+getStatusClass(status) {
+  const statusClassMap = {
+    'PENDING': 'status-pending',
+    'DEPARTING': 'status-departing',
+    'ARRIVED': 'status-arrived',
+    'RETURNING': 'status-returning',
+    'COMPLETED': 'status-completed',
+    'CANCELLED': 'status-cancelled',
+    'IN_PROGRESS': 'status-in-progress'
+  }
+  return statusClassMap[status] || 'status-default'
+}
+```
+
+### 鏍峰紡鍙樻洿
+
+鏂板鏍峰紡绫伙細
+
+```scss
+.task-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-start;
+  margin-bottom: 15rpx;
+  
+  .task-title {
+    flex: 1;
+    font-size: 32rpx;
+    font-weight: bold;
+    padding-right: 20rpx;
+    line-height: 1.4;
+  }
+  
+  .task-status {
+    padding: 8rpx 20rpx;
+    border-radius: 30rpx;
+    font-size: 24rpx;
+    white-space: nowrap;
+    flex-shrink: 0;
+    
+    &.status-pending { /* 姗欒壊 */ }
+    &.status-departing { /* 钃濊壊 */ }
+    &.status-arrived { /* 绱壊 */ }
+    &.status-returning { /* 闈掕壊 */ }
+    &.status-completed { /* 缁胯壊 */ }
+    &.status-cancelled { /* 鐏拌壊 */ }
+  }
+}
+
+.task-code-row {
+  margin-bottom: 15rpx;
+  padding: 10rpx 0;
+  border-bottom: 1rpx dashed #e0e0e0;
+  
+  .task-code {
+    font-size: 28rpx;
+    color: #333;
+    font-weight: 500;
+    font-family: monospace;
+  }
+}
+```
+
+## 瑙嗚瀵规瘮
+
+### 浼樺寲鍓�
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鎬ユ晳杞繍 - 绮12345                 鈹�
+鈹�                                     鈹�
+鈹� 浠诲姟缂栧彿: TD1021    浠诲姟鐘舵��: 寰呭鐞嗏攤
+鈹� 鍑哄彂鍦�: 骞垮窞澶╂渤    鐩殑鍦�: 骞垮窞涓滅珯 鈹�
+鈹� 鍑哄彂鏃堕棿: 13:20    鎵ц浜哄憳: 寮犱笁   鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+### 浼樺寲鍚�
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鎬ユ晳杞繍 - 绮12345    [寰呭鐞哴     鈹� 鈫� 鐘舵�佹爣绛惧甫棰滆壊
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� TD1021                              鈹� 鈫� 缂栧彿绐佸嚭鏄剧ず
+鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹�
+鈹� 鍑哄彂鍦�: 骞垮窞澶╂渤    鐩殑鍦�: 骞垮窞涓滅珯 鈹�
+鈹� 鍑哄彂鏃堕棿: 13:20    鎵ц浜哄憳: 寮犱笁   鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+## 涓�鑷存�т繚璇�
+
+### 涓庝换鍔¢〉闈㈢殑涓�鑷存��
+
+| 鐗规�� | 棣栭〉 | 浠诲姟椤甸潰 | 鐘舵�� |
+|------|------|---------|------|
+| 浠诲姟澶撮儴甯冨眬 | 鉁� | 鉁� | 涓�鑷� |
+| 鐘舵�佹爣绛鹃鑹� | 鉁� | 鉁� | 涓�鑷� |
+| 浠诲姟缂栧彿鏍峰紡 | 鉁� | 鉁� | 涓�鑷� |
+| 淇℃伅琛屽竷灞� | 鉁� | 鉁� | 涓�鑷� |
+| 鎿嶄綔鎸夐挳鏍峰紡 | 鉁� | 鉁� | 涓�鑷� |
+
+## 鐢ㄦ埛浣撻獙鎻愬崌
+
+1. **瑙嗚涓�鑷存��**锛氶椤靛拰浠诲姟椤甸潰鏍峰紡缁熶竴锛岄檷浣庡涔犳垚鏈�
+2. **淇℃伅灞傜骇**锛氶�氳繃棰滆壊鍜屽竷灞�绐佸嚭閲嶈淇℃伅锛堢姸鎬併�佺紪鍙凤級
+3. **鏄撹鎬�**锛氫换鍔$紪鍙蜂娇鐢ㄧ瓑瀹藉瓧浣擄紝鏇存槗璇嗗埆
+4. **鐩磋鎬�**锛氱姸鎬侀鑹叉爣璇嗭紝涓�鐪煎氨鑳界湅鍑轰换鍔$姸鎬�
+
+## 鐗堟湰鍘嗗彶
+
+- **2025-01-25 v1**: 鍒濆鐗堟湰
+  - 鉁� 璋冩暣浠诲姟澶撮儴甯冨眬锛屾坊鍔犵姸鎬佹爣绛�
+  - 鉁� 浠诲姟缂栧彿鍗曠嫭涓�琛屾樉绀�
+  - 鉁� 娣诲姞瀹屾暣鐨勭姸鎬侀鑹茬郴缁�
+  - 鉁� 浼樺寲淇℃伅灞曠ず缁撴瀯
+  - 鉁� 涓庝换鍔¢〉闈㈡牱寮忎繚鎸佷竴鑷�
diff --git "a/prd/\351\246\226\351\241\265\344\273\273\345\212\241\345\210\227\350\241\250\346\240\267\345\274\217\347\273\237\344\270\200\350\257\264\346\230\216.md" "b/prd/\351\246\226\351\241\265\344\273\273\345\212\241\345\210\227\350\241\250\346\240\267\345\274\217\347\273\237\344\270\200\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..bba8ddd
--- /dev/null
+++ "b/prd/\351\246\226\351\241\265\344\273\273\345\212\241\345\210\227\350\241\250\346\240\267\345\274\217\347\273\237\344\270\200\350\257\264\346\230\216.md"
@@ -0,0 +1,184 @@
+# 棣栭〉浠诲姟鍒楄〃鏍峰紡缁熶竴璇存槑
+
+## 鍔熻兘鎻忚堪
+棣栭〉锛坄/pages/index.vue`锛夌殑浠诲姟鍒楄〃鏄剧ず鏍峰紡宸蹭笌浠诲姟鍔熻兘椤甸潰锛坄/pages/task/index.vue`锛夊畬鍏ㄤ竴鑷淬��
+
+## 褰撳墠瀹炵幇鐘舵��
+
+### 鉁� 宸插疄鐜扮殑鏍峰紡涓�鑷存��
+
+#### 1. 浠诲姟鍗$墖缁撴瀯
+```vue
+<view class="task-item">
+  <view class="task-main">
+    <!-- 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵�佹爣绛� -->
+    <view class="task-header">
+      <view class="task-title">浠诲姟绫诲瀷 - 杞︾墝鍙�</view>
+      <view class="task-status">鐘舵�佹爣绛�</view>
+    </view>
+    
+    <!-- 浠诲姟缂栧彿鍗曠嫭涓�琛� -->
+    <view class="task-code-row">
+      <text class="task-code">浠诲姟缂栧彿</text>
+    </view>
+    
+    <!-- 浠诲姟璇︾粏淇℃伅 -->
+    <view class="task-info">
+      <view class="info-row">
+        <view class="info-item">鍑哄彂鍦�</view>
+        <view class="info-item">鐩殑鍦�</view>
+      </view>
+      <view class="info-row">
+        <view class="info-item">鍑哄彂鏃堕棿</view>
+        <view class="info-item">鎵ц浜哄憳</view>
+      </view>
+    </view>
+  </view>
+  
+  <!-- 鎿嶄綔鎸夐挳 -->
+  <view class="task-actions">...</view>
+</view>
+```
+
+#### 2. 鐘舵�侀鑹茬郴缁燂紙瀹屽叏涓�鑷达級
+
+| 鐘舵�� | CSS绫诲悕 | 鑳屾櫙鑹� | 鏂囧瓧棰滆壊 | 鏄剧ず鏂囨湰 |
+|------|---------|--------|----------|----------|
+| 寰呭鐞� | status-pending | #fff3e0 | #ff9500 | 寰呭鐞� |
+| 鍑哄彂涓� | status-departing | #e3f2fd | #007AFF | 鍑哄彂涓� |
+| 宸插埌杈� | status-arrived | #f3e5f5 | #9c27b0 | 宸插埌杈� |
+| 杩旂▼涓� | status-returning | #e0f2f1 | #009688 | 杩旂▼涓� |
+| 宸插畬鎴� | status-completed | #e8f5e9 | #34C759 | 宸插畬鎴� |
+| 宸插彇娑� | status-cancelled | #f5f5f5 | #999 | 宸插彇娑� |
+| 澶勭悊涓� | status-in-progress | #e3f2fd | #007AFF | 澶勭悊涓� |
+
+#### 3. 鍏抽敭鏍峰紡鍏冪礌
+
+**浠诲姟澶撮儴锛坱ask-header锛夛細**
+- 鏍囬鍜岀姸鎬佹爣绛惧湪鍚屼竴琛�
+- 浣跨敤 flex 甯冨眬锛宻pace-between 瀵归綈
+- 鐘舵�佹爣绛句娇鐢ㄥ渾瑙掕璁★紙border-radius: 30rpx锛�
+- 鐘舵�佹爣绛句笉鎹㈣锛坵hite-space: nowrap锛�
+
+**浠诲姟缂栧彿琛岋紙task-code-row锛夛細**
+- 鍗曠嫭涓�琛屾樉绀�
+- 浣跨敤铏氱嚎杈规鍒嗛殧锛坆order-bottom: 1rpx dashed #e0e0e0锛�
+- 浣跨敤绛夊瀛椾綋锛坒ont-family: monospace锛�
+- 瀛椾綋澶у皬锛�28rpx锛屽瓧閲嶏細500
+
+**浠诲姟淇℃伅鍖猴紙task-info锛夛細**
+- 涓よ甯冨眬锛屾瘡琛屼袱涓俊鎭」
+- label 鍜� value 姘村钩鎺掑垪
+- label 鐏拌壊锛�#666锛夛紝value 榛樿鑹诧紙#333锛�
+- 瀛椾綋澶у皬锛�26rpx
+
+**鎿嶄綔鎸夐挳锛坱ask-actions锛夛細**
+- 鏍规嵁浠诲姟鐘舵�佸姩鎬佹樉绀轰笉鍚屾寜閽�
+- 涓绘寜閽摑鑹诧紙#007AFF锛夛紝鍙栨秷鎸夐挳绾㈣壊锛�#ff3b30锛�
+- 鍦嗚璁捐锛坆order-radius: 10rpx锛�
+
+#### 4. 鏂规硶瀹炵幇涓�鑷存��
+
+**getStatusClass(status) 鏂规硶锛�**
+```javascript
+getStatusClass(status) {
+  const statusClassMap = {
+    'PENDING': 'status-pending',
+    'DEPARTING': 'status-departing',
+    'ARRIVED': 'status-arrived',
+    'RETURNING': 'status-returning',
+    'COMPLETED': 'status-completed',
+    'CANCELLED': 'status-cancelled',
+    'IN_PROGRESS': 'status-in-progress'
+  }
+  return statusClassMap[status] || 'status-default'
+}
+```
+
+**getStatusText(status) 鏂规硶锛�**
+```javascript
+getStatusText(status) {
+  const statusMap = {
+    'PENDING': '寰呭鐞�',
+    'DEPARTING': '鍑哄彂涓�',
+    'ARRIVED': '宸插埌杈�',
+    'RETURNING': '杩旂▼涓�',
+    'COMPLETED': '宸插畬鎴�',
+    'CANCELLED': '宸插彇娑�',
+    'IN_PROGRESS': '澶勭悊涓�'
+  }
+  return statusMap[status] || '鏈煡'
+}
+```
+
+#### 5. 鏁版嵁灞曠ず涓�鑷存��
+
+**杞﹁締淇℃伅澶勭悊锛�**
+- 浠� assignedVehicles 鏁扮粍鑾峰彇杞﹁締淇℃伅
+- 鏄剧ず绗竴杈嗚溅鐨勮溅鐗屽彿
+- 澶氳溅杈嗘椂鏄剧ず"杞︾墝鍙� 绛塏杈�"
+
+**鍦板潃鏍煎紡鍖栵細**
+- 浣跨敤 formatAddress() 鏂规硶
+- 鍙樉绀�"-"绗﹀彿鍓嶉潰鐨勯儴鍒�
+- 绠�鍖栧湴鍧�鏄剧ず锛屾彁楂樺彲璇绘��
+
+**鏃堕棿鏍煎紡鍖栵細**
+- 浣跨敤 formatDateTime() 鏂规硶
+- 鏍煎紡锛歒YYY-MM-DD HH:mm
+- 涓枃鏈湴鍖栨樉绀�
+
+## 鏂囦欢瀵规瘮缁撴灉
+
+### 棣栭〉锛坕ndex.vue锛�
+- 鉁� 浠诲姟澶撮儴甯冨眬涓�鑷�
+- 鉁� 浠诲姟缂栧彿鍗曠嫭鏄剧ず涓�鑷�
+- 鉁� 鐘舵�侀鑹茬郴缁熶竴鑷�
+- 鉁� 淇℃伅琛屽竷灞�涓�鑷�
+- 鉁� 鎿嶄綔鎸夐挳閫昏緫涓�鑷�
+- 鉁� 鏂规硶瀹炵幇涓�鑷�
+
+### 浠诲姟鍔熻兘椤碉紙task/index.vue锛�
+- 鉁� 浣滀负鏍峰紡鍙傝�冩爣鍑�
+- 鉁� 鎵�鏈夋牱寮忓厓绱犲畬鏁�
+
+## 椤甸潰宸紓璇存槑
+
+铏界劧鏍峰紡瀹屽叏涓�鑷达紝浣嗕袱涓〉闈㈢殑鍔熻兘瀹氫綅涓嶅悓锛�
+
+### 棣栭〉锛坕ndex.vue锛�
+- **鏁版嵁婧�**锛歡etMyTasks() - 鑾峰彇褰撳墠鐢ㄦ埛鐩稿叧鐨勬墍鏈変换鍔�
+- **鏄剧ず鑼冨洿**锛氭鍦ㄨ繍琛岀殑浠诲姟锛堝緟澶勭悊銆佸嚭鍙戜腑銆佸凡鍒拌揪銆佽繑绋嬩腑锛�
+- **椤甸潰瀹氫綅**锛氬揩閫熸煡鐪嬪拰澶勭悊褰撳墠姝e湪杩涜鐨勪换鍔�
+- **棰濆鍔熻兘**锛氱敤鎴蜂俊鎭睍绀恒�佽溅杈嗙粦瀹氬叆鍙c�佹秷鎭腑蹇冨叆鍙�
+
+### 浠诲姟鍔熻兘椤碉紙task/index.vue锛�
+- **鏁版嵁婧�**锛歭istTask() - 缁煎悎鏌ヨ鎵�鏈変换鍔�
+- **鏄剧ず鑼冨洿**锛氭墍鏈変换鍔★紙鍖呮嫭宸插畬鎴愩�佸凡鍙栨秷锛�
+- **椤甸潰瀹氫綅**锛氬畬鏁寸殑浠诲姟绠$悊鍔熻兘
+- **棰濆鍔熻兘**锛氶珮绾ф悳绱€�佺姸鎬佺瓫閫夈�佹椂闂磋寖鍥存煡璇�
+
+## 娉ㄦ剰浜嬮」
+
+1. **鏁版嵁瀛楁鏄犲皠**锛�
+   - 棣栭〉浣跨敤 `task.taskId` 浣滀负浠诲姟ID
+   - 棣栭〉浣跨敤 `task.taskCode` 浣滀负浠诲姟缂栧彿
+   - 浠诲姟鍔熻兘椤典娇鐢ㄧ浉鍚岀殑瀛楁鏄犲皠
+
+2. **鐘舵�佽繃婊�**锛�
+   - 棣栭〉鍙樉绀烘湭瀹屾垚鐨勪换鍔�
+   - 浠诲姟鍔熻兘椤垫樉绀烘墍鏈変换鍔″苟鎻愪緵绛涢�夊姛鑳�
+
+3. **鏍峰紡缁存姢**锛�
+   - 濡傞渶淇敼浠诲姟鍗$墖鏍峰紡锛岄渶鍚屾椂淇敼涓や釜鏂囦欢
+   - 淇濇寔 getStatusClass() 鍜� getStatusText() 鏂规硶鐨勪竴鑷存��
+   - 鐘舵�侀鑹茬郴缁熷簲淇濇寔缁熶竴
+
+## 鎬荤粨
+
+棣栭〉浠诲姟鍒楄〃鏍峰紡宸蹭笌浠诲姟鍔熻兘椤甸潰瀹屽叏缁熶竴锛屽疄鐜颁簡锛�
+- 瑙嗚涓�鑷存�э細棰滆壊銆佸竷灞�銆佸瓧浣撳畬鍏ㄤ竴鑷�
+- 浜や簰涓�鑷存�э細鎸夐挳閫昏緫銆佺姸鎬佹祦杞竴鑷�
+- 浠g爜涓�鑷存�э細鏂规硶瀹炵幇銆佹暟鎹鐞嗕竴鑷�
+
+鐢ㄦ埛鍦ㄤ袱涓〉闈㈢湅鍒扮殑浠诲姟鍗$墖鏍峰紡灏嗗畬鍏ㄧ浉鍚岋紝鎻愪緵缁熶竴鐨勭敤鎴蜂綋楠屻��
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java
new file mode 100644
index 0000000..6f59aed
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java
@@ -0,0 +1,150 @@
+package com.ruoyi.web.controller.sqlserver;
+
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.system.domain.OrderClassDTO;
+import com.ruoyi.system.service.IOrderClassDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * SQL Server 瀛楀吀鏁版嵁鏌ヨ Controller
+ * 
+ * 涓撻棬鐢ㄤ簬浠� SQL Server 鏁版嵁搴撴煡璇㈠瓧鍏告暟鎹�
+ * 
+ * @author ruoyi
+ * @date 2025-10-19
+ */
+@RestController
+@RequestMapping("/sqlserver/dictionary")
+@DataSource(DataSourceType.SQLSERVER)
+public class SqlServerDictionaryController extends BaseController
+{
+    @Autowired
+    private IOrderClassDataService orderClassDataService;
+
+    /**
+     * 鏌ヨ鍗曟嵁绫诲瀷鍒楄〃锛圫erviceOrdAreaType锛�
+     * 
+     * 鏁版嵁婧愶細SQL Server (dictionary琛�)
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrdAreaType' AND vType=1 ORDER BY vOrder
+     * 
+     * @return 鍗曟嵁绫诲瀷鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
+    @GetMapping("/serviceOrdAreaTypes")
+    public AjaxResult getServiceOrdAreaTypes()
+    {
+        try
+        {
+            List<OrderClassDTO> list = orderClassDataService.getServiceOrdAreaTypes();
+            return AjaxResult.success("鏌ヨ鎴愬姛", list);
+        }
+        catch (Exception e)
+        {
+            logger.error("鏌ヨ鍗曟嵁绫诲瀷鏁版嵁澶辫触", e);
+            return AjaxResult.error("鏌ヨ鍗曟嵁绫诲瀷鏁版嵁澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ鏈嶅姟鍗曠紪鐮佸垪琛�
+     * 
+     * 鏁版嵁婧愶細SQL Server (dictionary琛�)
+     * 
+     * @return 鏈嶅姟鍗曠紪鐮佸垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
+    @GetMapping("/serviceOrderClass")
+    public AjaxResult getServiceOrderClass()
+    {
+        try
+        {
+            List<OrderClassDTO> list = orderClassDataService.getServiceOrderClass();
+            return AjaxResult.success("鏌ヨ鎴愬姛", list);
+        }
+        catch (Exception e)
+        {
+            logger.error("鏌ヨ鏈嶅姟鍗曠紪鐮佹暟鎹け璐�", e);
+            return AjaxResult.error("鏌ヨ鏈嶅姟鍗曠紪鐮佹暟鎹け璐ワ細" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ璋冨害鍗曠紪鐮佸垪琛�
+     * 
+     * 鏁版嵁婧愶細SQL Server (dictionary琛�)
+     * 
+     * @return 璋冨害鍗曠紪鐮佸垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
+    @GetMapping("/dispatchOrderClass")
+    public AjaxResult getDispatchOrderClass()
+    {
+        try
+        {
+            List<OrderClassDTO> list = orderClassDataService.getDispatchOrderClass();
+            return AjaxResult.success("鏌ヨ鎴愬姛", list);
+        }
+        catch (Exception e)
+        {
+            logger.error("鏌ヨ璋冨害鍗曠紪鐮佹暟鎹け璐�", e);
+            return AjaxResult.error("鏌ヨ璋冨害鍗曠紪鐮佹暟鎹け璐ワ細" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鍒楄〃锛圫erviceOrderType锛�
+     * 
+     * 鏁版嵁婧愶細SQL Server (dictionary琛�)
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrderType' AND vType>=1 ORDER BY vOrder
+     * 
+     * @return 鏈嶅姟璁㈠崟绫诲瀷鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
+    @GetMapping("/serviceOrderTypes")
+    public AjaxResult getServiceOrderTypes()
+    {
+        try
+        {
+            List<OrderClassDTO> list = orderClassDataService.getServiceOrderTypes();
+            return AjaxResult.success("鏌ヨ鎴愬姛", list);
+        }
+        catch (Exception e)
+        {
+            logger.error("鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鏁版嵁澶辫触", e);
+            return AjaxResult.error("鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鏁版嵁澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛�
+     * 
+     * 鏁版嵁婧愶細SQL Server (dictionary琛�)
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
+     * 
+     * @return 鍖婚櫌绉戝鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
+    @GetMapping("/hospitalDepartments")
+    public AjaxResult getHospitalDepartments()
+    {
+        try
+        {
+            List<OrderClassDTO> list = orderClassDataService.getHospitalDepartments();
+            return AjaxResult.success("鏌ヨ鎴愬姛", list);
+        }
+        catch (Exception e)
+        {
+            logger.error("鏌ヨ鍖婚櫌绉戝鏁版嵁澶辫触", e);
+            return AjaxResult.error("鏌ヨ鍖婚櫌绉戝鏁版嵁澶辫触锛�" + e.getMessage());
+        }
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DepartmentSyncController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DepartmentSyncController.java
deleted file mode 100644
index 9a34b5f..0000000
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DepartmentSyncController.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.ruoyi.web.controller.system;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.system.domain.DepartmentSyncDTO;
-import com.ruoyi.system.domain.UserSyncDTO;
-import com.ruoyi.system.service.IDepartmentSyncService;
-import com.ruoyi.system.service.IUserSyncService;
-
-import java.util.List;
-
-/**
- * 閮ㄩ棬鍜岀敤鎴峰悓姝ontroller
- * 
- * @author ruoyi
- * @date 2025-10-18
- */
-@RestController
-@RequestMapping("/system/dept/sync")
-public class DepartmentSyncController extends BaseController
-{
-    @Autowired
-    private IDepartmentSyncService departmentSyncService;
-
-    @Autowired
-    private IUserSyncService userSyncService;
-
-
-    
-    /**
-     * 鍚屾鍒嗗叕鍙稿拰閮ㄩ棬鏁版嵁锛堜娇鐢ㄥ閮ㄤ紶鍏ョ殑鏁版嵁婧愶級
-     * 
-     * 閫傜敤鍦烘櫙锛�
-     * 1. 宸蹭粠鍏朵粬鏉ユ簮鑾峰彇浜嗛儴闂ㄦ暟鎹�
-     * 2. 闇�瑕佸鏁版嵁杩涜棰勫鐞嗗悗鍐嶅悓姝�
-     * 3. 鎵归噺鍚屾澶氫釜鏁版嵁婧�
-     * 
-     * @param branchDepts 鍒嗗叕鍙告暟鎹垪琛�
-     * @return 鍚屾缁撴灉
-     */
-    @PreAuthorize("@ss.hasPermi('system:dept:sync')")
-    @PostMapping("/branch/data")
-    public AjaxResult syncBranchDepartmentsWithData(@RequestBody List<DepartmentSyncDTO> branchDepts)
-    {
-        return departmentSyncService.syncBranchDepartments(branchDepts);
-    }
-    
-    /**
-     * 鍚屾杞繍閮ㄥ拰瀛愰儴闂ㄦ暟鎹紙浣跨敤澶栭儴浼犲叆鐨勬暟鎹簮锛�
-     * 
-     * 鍚屾閫昏緫锛�
-     * 1. 纭繚鎬诲叕鍙革紙ID=101锛変笅瀛樺湪"杞繍閮�"
-     * 2. 鍒涘缓杞繍閮ㄧ殑瀛愰儴闂�
-     * 
-     * @param transportDepts 杞繍閮ㄥ瓙閮ㄩ棬鏁版嵁鍒楄〃
-     * @return 鍚屾缁撴灉
-     */
-    @PreAuthorize("@ss.hasPermi('system:dept:sync')")
-    @PostMapping("/transport/data")
-    public AjaxResult syncTransportDepartmentsWithData(@RequestBody List<DepartmentSyncDTO> transportDepts)
-    {
-        return departmentSyncService.syncTransportDepartments(transportDepts);
-    }
-
-
-    
-    /**
-     * 鍚屾OA鐢ㄦ埛鏁版嵁锛堜娇鐢ㄥ閮ㄤ紶鍏ョ殑鏁版嵁婧愶級
-     * 
-     * 閫傜敤鍦烘櫙锛�
-     * 1. 宸蹭粠鍏朵粬鏉ユ簮鑾峰彇浜嗙敤鎴锋暟鎹�
-     * 2. 闇�瑕佸鏁版嵁杩涜棰勫鐞嗗悗鍐嶅悓姝�
-     * 3. 鎵归噺鍚屾澶氫釜鏁版嵁婧�
-     * 
-     * @param oaUsers OA鐢ㄦ埛鏁版嵁鍒楄〃
-     * @return 鍚屾缁撴灉
-     */
-    @PreAuthorize("@ss.hasPermi('system:user:sync')")
-    @PostMapping("/user/data")
-    public AjaxResult syncOaUsersWithData(@RequestBody List<UserSyncDTO> oaUsers)
-    {
-        return userSyncService.syncOaUsers(oaUsers);
-    }
-}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java
index e8da24b..e498a51 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java
@@ -27,11 +27,15 @@
     
     /**
      * 鎼滅储鍖婚櫌
-     * 鏀寔鏍规嵁鍖婚櫌鍚嶇О鎴栧湴鍧�杩涜妯$硦鎼滅储
+     * 鏀寔鏍规嵁鍖婚櫌鍚嶇О銆佸湴鍧�銆佸湴鍩熻繘琛屾ā绯婃悳绱�
+     * @param keyword 鎼滅储鍏抽敭璇嶏紙鍖婚櫌鍚嶇О銆佸湴鍧�銆佺畝绉般�佺渷甯傚尯锛�
+     * @param region 鍦板煙鍏抽敭璇嶏紙鐢ㄤ簬杩囨护鐪佸競鍖猴級
      */
     @GetMapping("/search")
-    public AjaxResult searchHospitals(@RequestParam(value = "keyword", required = false) String keyword) {
-        List<HospData> list = hospDataMapper.searchHospitals(keyword);
+    public AjaxResult searchHospitals(
+            @RequestParam(value = "keyword", required = false) String keyword,
+            @RequestParam(value = "region", required = false) String region) {
+        List<HospData> list = hospDataMapper.searchHospitals(keyword, region);
         return success(list);
     }
     
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index f42fdf9..629f442 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -132,6 +132,7 @@
         ajax.put("permissions", permissions);
         ajax.put("branchCompanyId", branchCompanyId);
         ajax.put("branchCompanyName", branchCompanyName);
+        ajax.put("oaUserId", user.getOaUserId());
         return ajax;
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
index 80726d4..5ae3359 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
@@ -10,6 +10,7 @@
 import com.ruoyi.system.domain.*;
 import com.ruoyi.system.service.*;
 import com.ruoyi.common.config.TencentMapConfig;
+import com.ruoyi.common.config.BaiduMapConfig;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -59,6 +60,9 @@
     
     @Autowired
     private TencentMapConfig tencentMapConfig;
+    
+    @Autowired
+    private BaiduMapConfig baiduMapConfig;
 
    /**
      * 鏌ヨ杞﹁締GPS鍧愭爣鍒楄〃
@@ -470,4 +474,129 @@
             return AjaxResult.error("璺濈璁$畻澶辫触锛�" + e.getMessage());
         }
     }
+    
+    /**
+     * 鐧惧害鍦板浘鍦扮悊缂栫爜鎺ュ彛浠g悊锛堝湴鍧�杞潗鏍囷級
+     */
+    @Anonymous()
+    @GetMapping("/baidu/geocoding")
+    public AjaxResult baiduGeocoding(String address, String city) {
+        try {
+            // 妫�鏌ュ弬鏁�
+            if (address == null || address.trim().isEmpty()) {
+                return AjaxResult.error("鍙傛暟涓嶅畬鏁达紝缂哄皯鍦板潃淇℃伅");
+            }
+            
+            // 鏋勫缓鐧惧害鍦板浘鍦扮悊缂栫爜API URL
+            String url = "https://api.map.baidu.com/geocoding/v3/";
+            String params = "address=" + URLEncoder.encode(address, StandardCharsets.UTF_8.toString()) +
+                           (city != null && !city.trim().isEmpty() ? 
+                            "&city=" + URLEncoder.encode(city, StandardCharsets.UTF_8.toString()) : "") +
+                           "&output=json" +
+                           "&ak=" + baiduMapConfig.getAk();
+            
+            logger.info("鐧惧害鍦板浘鍦扮悊缂栫爜璇锋眰: address={}, city={}", address, city);
+            
+            // 鍙戦�丠TTP璇锋眰
+            String response = HttpUtils.sendGet(url, params);
+            
+            // 杩斿洖缁撴灉
+            return AjaxResult.success("鏌ヨ鎴愬姛", response);
+        } catch (Exception e) {
+            logger.error("鐧惧害鍦板浘鍦扮悊缂栫爜澶辫触", e);
+            return AjaxResult.error("鍦扮悊缂栫爜澶辫触锛�" + e.getMessage());
+        }
+    }
+    
+    /**
+     * 鐧惧害鍦板浘璺嚎瑙勫垝鎺ュ彛浠g悊锛堣绠椾袱涓潗鏍囦箣闂寸殑椹捐溅璺濈锛�
+     */
+    @Anonymous()
+    @GetMapping("/baidu/route/driving")
+    public AjaxResult baiduRouteDriving(String origin, String destination) {
+        try {
+            // 妫�鏌ュ弬鏁�
+            if (origin == null || origin.trim().isEmpty() || 
+                destination == null || destination.trim().isEmpty()) {
+                return AjaxResult.error("鍙傛暟涓嶅畬鏁达紝缂哄皯璧风偣鎴栫粓鐐瑰潗鏍�");
+            }
+            
+            // 楠岃瘉鍧愭爣鏍煎紡锛堢含搴�,缁忓害锛�
+            String[] originParts = origin.split(",");
+            String[] destParts = destination.split(",");
+            if (originParts.length != 2 || destParts.length != 2) {
+                return AjaxResult.error("鍧愭爣鏍煎紡閿欒锛屽簲涓猴細绾害,缁忓害");
+            }
+            
+            // 鏋勫缓鐧惧害鍦板浘璺嚎瑙勫垝API URL
+            String url = "https://api.map.baidu.com/directionlite/v1/driving";
+            String params = "origin=" + origin +
+                           "&destination=" + destination +
+                           "&ak=" + baiduMapConfig.getAk();
+            
+            logger.info("鐧惧害鍦板浘璺嚎瑙勫垝璇锋眰: origin={}, destination={}", origin, destination);
+            
+            // 鍙戦�丠TTP璇锋眰
+            String response = HttpUtils.sendGet(url, params);
+            
+            // 杩斿洖缁撴灉
+            return AjaxResult.success("璁$畻鎴愬姛", response);
+        } catch (Exception e) {
+            logger.error("鐧惧害鍦板浘璺嚎瑙勫垝澶辫触", e);
+            return AjaxResult.error("璺嚎瑙勫垝澶辫触锛�" + e.getMessage());
+        }
+    }
+    
+    /**
+     * 鐧惧害鍦板浘璁$畻涓や釜鍦板潃涔嬮棿鐨勮窛绂伙紙缁勫悎鎺ュ彛锛氬湴鍧�杞潗鏍� + 璺嚎瑙勫垝锛�
+     */
+    @Anonymous()
+    @GetMapping("/baidu/distance/byAddress")
+    public AjaxResult baiduDistanceByAddress(String fromAddress, String fromCity, 
+                                             String toAddress, String toCity) {
+        try {
+            // 妫�鏌ュ弬鏁�
+            if (fromAddress == null || fromAddress.trim().isEmpty() || 
+                toAddress == null || toAddress.trim().isEmpty()) {
+                return AjaxResult.error("鍙傛暟涓嶅畬鏁达紝缂哄皯璧风偣鎴栫粓鐐瑰湴鍧�");
+            }
+            
+            logger.info("寮�濮嬭绠楀湴鍧�璺濈: fromAddress={}, fromCity={}, toAddress={}, toCity={}", 
+                       fromAddress, fromCity, toAddress, toCity);
+            
+            // 绗竴姝ワ細璧风偣鍦板潃杞潗鏍�
+            String geocodingUrl1 = "https://api.map.baidu.com/geocoding/v3/";
+            String geocodingParams1 = "address=" + URLEncoder.encode(fromAddress, StandardCharsets.UTF_8.toString()) +
+                                     (fromCity != null && !fromCity.trim().isEmpty() ? 
+                                      "&city=" + URLEncoder.encode(fromCity, StandardCharsets.UTF_8.toString()) : "") +
+                                     "&output=json" +
+                                     "&ak=" + baiduMapConfig.getAk();
+            
+            String geocodingResponse1 = HttpUtils.sendGet(geocodingUrl1, geocodingParams1);
+            logger.info("璧风偣鍦扮悊缂栫爜鍝嶅簲: {}", geocodingResponse1);
+            
+            // 绗簩姝ワ細缁堢偣鍦板潃杞潗鏍�
+            String geocodingUrl2 = "https://api.map.baidu.com/geocoding/v3/";
+            String geocodingParams2 = "address=" + URLEncoder.encode(toAddress, StandardCharsets.UTF_8.toString()) +
+                                     (toCity != null && !toCity.trim().isEmpty() ? 
+                                      "&city=" + URLEncoder.encode(toCity, StandardCharsets.UTF_8.toString()) : "") +
+                                     "&output=json" +
+                                     "&ak=" + baiduMapConfig.getAk();
+            
+            String geocodingResponse2 = HttpUtils.sendGet(geocodingUrl2, geocodingParams2);
+            logger.info("缁堢偣鍦扮悊缂栫爜鍝嶅簲: {}", geocodingResponse2);
+            
+            // 瑙f瀽鍧愭爣锛堣繖閲岀畝鍖栧鐞嗭紝瀹為檯搴旇瑙f瀽JSON锛�
+            // 娉ㄦ剰锛氶渶瑕佷粠鍝嶅簲涓彁鍙栧潗鏍囷紝杩欓噷杩斿洖涓棿缁撴灉渚涘墠绔鐞�
+            Map<String, Object> result = new HashMap<>();
+            result.put("fromGeocoding", geocodingResponse1);
+            result.put("toGeocoding", geocodingResponse2);
+            result.put("message", "璇疯В鏋愬潗鏍囧悗璋冪敤 /baidu/route/driving 鎺ュ彛璁$畻璺濈");
+            
+            return AjaxResult.success("鍦扮悊缂栫爜鎴愬姛", result);
+        } catch (Exception e) {
+            logger.error("璁$畻鍦板潃璺濈澶辫触", e);
+            return AjaxResult.error("璁$畻璺濈澶辫触锛�" + e.getMessage());
+        }
+    }
 }
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleSyncController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleSyncController.java
new file mode 100644
index 0000000..fc61e22
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleSyncController.java
@@ -0,0 +1,37 @@
+package com.ruoyi.web.controller.system;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.service.IVehicleSyncDataService;
+import com.ruoyi.system.service.IVehicleSyncService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 杞﹁締鍚屾Controller
+ * 
+ * @author ruoyi
+ * @date 2025-10-20
+ */
+@RestController
+@RequestMapping("/system/vehicle/sync")
+public class VehicleSyncController extends BaseController
+{
+    @Autowired
+    private IVehicleSyncService vehicleSyncService;
+
+    @Autowired
+    private IVehicleSyncDataService vehicleSyncDataService;
+    /**
+     * 鎵嬪姩鍚屾鏃х郴缁熻溅杈嗘暟鎹�
+     */
+    @PreAuthorize("@ss.hasPermi('system:vehicle:sync')")
+    @PostMapping("/legacy")
+    public AjaxResult syncLegacyVehicles()
+    {
+        return vehicleSyncService.syncVehicles(this.vehicleSyncDataService.getVehiclesFromSqlServer());
+    }
+}
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 5975026..9658920 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -86,4 +86,27 @@
               instanceId: AUTO
 # 姘戣埅鎺ュ彛鍦板潃
 min:
-  apiUrl: http://120.25.98.119:8084/v1/   #娴嬭瘯鐜锛歭ocalhost:8011  #http://120.25.98.119:8084/v1/
\ No newline at end of file
+  apiUrl: http://120.25.98.119:8084/v1/   #娴嬭瘯鐜锛歭ocalhost:8011  #http://120.25.98.119:8084/v1/
+
+# 鏃х郴缁熼厤缃�
+legacy:
+  system:
+    # 鏃х郴缁熷熀纭�URL (蹇呴』閰嶇疆)
+    # 绀轰緥: http://192.168.1.100:8080 鎴� http://legacy.yourdomain.com
+    base-url: http://120.25.98.119:8083
+    
+    # 鎬ユ晳杞繍鍒涘缓鎺ュ彛璺緞 (鍙�夛紝榛樿鍊煎涓�)
+    emergency-create-path: /admin_save_19.gds
+    
+    # HTTP杩炴帴瓒呮椂鏃堕棿(姣) (鍙�夛紝榛樿30绉�)
+    connect-timeout: 30000
+    
+    # HTTP璇诲彇瓒呮椂鏃堕棿(姣) (鍙�夛紝榛樿30绉�)
+    read-timeout: 30000
+    
+    # 鏄惁鍚敤鍚屾鍔熻兘 (鍙�夛紝榛樿true)
+    # true: 鍚敤鍚屾  false: 绂佺敤鍚屾
+    enabled: true
+    
+    # 瀛楃缂栫爜 (鍙�夛紝榛樿UTF-8)
+    charset: UTF-8
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-legacy.yml b/ruoyi-admin/src/main/resources/application-legacy.yml
new file mode 100644
index 0000000..ff0b92d
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-legacy.yml
@@ -0,0 +1,52 @@
+# ===================================================================
+# 鏃х郴缁熷悓姝ラ厤缃� (Legacy System Sync Configuration)
+# ===================================================================
+
+# 灏嗕互涓嬮厤缃坊鍔犲埌 application.yml 鎴栧搴旂幆澧冪殑閰嶇疆鏂囦欢涓�
+
+# 鏃х郴缁熼厤缃�
+legacy:
+  system:
+    # 鏃х郴缁熷熀纭�URL (蹇呴』閰嶇疆)
+    # 绀轰緥: http://192.168.1.100:8080 鎴� http://legacy.yourdomain.com
+    base-url: http://120.25.98.119:8083
+    
+    # 鎬ユ晳杞繍鍒涘缓鎺ュ彛璺緞 (鍙�夛紝榛樿鍊煎涓�)
+    emergency-create-path: /admin_save_19.gds
+    
+    # HTTP杩炴帴瓒呮椂鏃堕棿(姣) (鍙�夛紝榛樿30绉�)
+    connect-timeout: 30000
+    
+    # HTTP璇诲彇瓒呮椂鏃堕棿(姣) (鍙�夛紝榛樿30绉�)
+    read-timeout: 30000
+    
+    # 鏄惁鍚敤鍚屾鍔熻兘 (鍙�夛紝榛樿true)
+    # true: 鍚敤鍚屾  false: 绂佺敤鍚屾
+    enabled: true
+    
+    # 瀛楃缂栫爜 (鍙�夛紝榛樿UTF-8)
+    charset: UTF-8
+
+# ===================================================================
+# 涓嶅悓鐜閰嶇疆绀轰緥
+# ===================================================================
+
+# --- 寮�鍙戠幆澧冮厤缃ず渚� (application-dev.yml) ---
+# legacy:
+#   system:
+#     base-url: http://192.168.1.100:8080
+#     enabled: true
+
+# --- 娴嬭瘯鐜閰嶇疆绀轰緥 (application-test.yml) ---
+# legacy:
+#   system:
+#     base-url: http://test-legacy.example.com
+#     enabled: false  # 娴嬭瘯鐜鍙互绂佺敤鍚屾
+
+# --- 鐢熶骇鐜閰嶇疆绀轰緥 (application-prod.yml) ---
+# legacy:
+#   system:
+#     base-url: https://legacy.yourdomain.com
+#     connect-timeout: 60000
+#     read-timeout: 60000
+#     enabled: true
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index aa92707..bfe2679 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -149,3 +149,8 @@
 tencent:
   map:
     key: 6YVBZ-ZJDLQ-JMY5F-BR7XG-H3TAV-C3FXC
+
+# 鐧惧害鍦板浘閰嶇疆
+baidu:
+  map:
+    ak: YOUR_BAIDU_MAP_AK_HERE  # 璇锋浛鎹负鎮ㄧ殑鐧惧害鍦板浘API Key
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/BaiduMapConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/BaiduMapConfig.java
new file mode 100644
index 0000000..1972263
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/BaiduMapConfig.java
@@ -0,0 +1,25 @@
+package com.ruoyi.common.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 鐧惧害鍦板浘閰嶇疆绫�
+ */
+@Configuration
+@ConfigurationProperties(prefix = "baidu.map")
+public class BaiduMapConfig {
+    
+    /**
+     * 鐧惧害鍦板浘API Key
+     */
+    private String ak;
+
+    public String getAk() {
+        return ak;
+    }
+
+    public void setAk(String ak) {
+        this.ak = ak;
+    }
+}
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
new file mode 100644
index 0000000..f178ee8
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/LegacySystemConfig.java
@@ -0,0 +1,105 @@
+package com.ruoyi.common.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 鏃х郴缁熼厤缃�
+ * 
+ * @author ruoyi
+ */
+@Component
+@ConfigurationProperties(prefix = "legacy.system")
+public class LegacySystemConfig {
+    
+    /** 鏃х郴缁熷熀纭�URL */
+    private String baseUrl;
+    
+    /** 鎬ユ晳杞繍鍒涘缓鎺ュ彛璺緞 */
+    private String emergencyCreatePath = "/admin_save_19.gds";
+    
+    /** 璋冨害鍗曞垱寤烘帴鍙h矾寰� */
+    private String dispatchCreatePath = "/admin_save_24.gds";
+    
+    /** 杩炴帴瓒呮椂鏃堕棿(姣) */
+    private int connectTimeout = 30000;
+    
+    /** 璇诲彇瓒呮椂鏃堕棿(姣) */
+    private int readTimeout = 30000;
+    
+    /** 鏄惁鍚敤鍚屾 */
+    private boolean enabled = true;
+    
+    /** 瀛楃缂栫爜 */
+    private String charset = "UTF-8";
+
+    public String getBaseUrl() {
+        return baseUrl;
+    }
+
+    public void setBaseUrl(String baseUrl) {
+        this.baseUrl = baseUrl;
+    }
+
+    public String getEmergencyCreatePath() {
+        return emergencyCreatePath;
+    }
+
+    public void setEmergencyCreatePath(String emergencyCreatePath) {
+        this.emergencyCreatePath = emergencyCreatePath;
+    }
+
+    public String getDispatchCreatePath() {
+        return dispatchCreatePath;
+    }
+
+    public void setDispatchCreatePath(String dispatchCreatePath) {
+        this.dispatchCreatePath = dispatchCreatePath;
+    }
+
+    public int getConnectTimeout() {
+        return connectTimeout;
+    }
+
+    public void setConnectTimeout(int connectTimeout) {
+        this.connectTimeout = connectTimeout;
+    }
+
+    public int getReadTimeout() {
+        return readTimeout;
+    }
+
+    public void setReadTimeout(int readTimeout) {
+        this.readTimeout = readTimeout;
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    public String getCharset() {
+        return charset;
+    }
+
+    public void setCharset(String charset) {
+        this.charset = charset;
+    }
+    
+    /**
+     * 鑾峰彇瀹屾暣鐨勬�ユ晳杞繍鍒涘缓URL
+     */
+    public String getEmergencyCreateUrl() {
+        return baseUrl + emergencyCreatePath;
+    }
+    
+    /**
+     * 鑾峰彇瀹屾暣鐨勮皟搴﹀崟鍒涘缓URL
+     */
+    public String getDispatchCreateUrl() {
+        return baseUrl + dispatchCreatePath;
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
index ed86854..272342b 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
@@ -55,6 +55,12 @@
     /** SQL Server涓殑閮ㄩ棬ID */
     private Integer departmentId;
     
+    /** 鏈嶅姟鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=1) */
+    private String serviceOrderClass;
+    
+    /** 璋冨害鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=2) */
+    private String dispatchOrderClass;
+    
     /** 瀛愰儴闂� */
     private List<SysDept> children = new ArrayList<SysDept>();
 
@@ -194,6 +200,26 @@
         this.departmentId = departmentId;
     }
 
+    public String getServiceOrderClass()
+    {
+        return serviceOrderClass;
+    }
+
+    public void setServiceOrderClass(String serviceOrderClass)
+    {
+        this.serviceOrderClass = serviceOrderClass;
+    }
+
+    public String getDispatchOrderClass()
+    {
+        return dispatchOrderClass;
+    }
+
+    public void setDispatchOrderClass(String dispatchOrderClass)
+    {
+        this.dispatchOrderClass = dispatchOrderClass;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index fe16427..38aaec2 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -55,7 +55,7 @@
     /**
      * 鐧诲綍楠岃瘉
      * 
-     * @param username 鐢ㄦ埛鍚�
+     * @param username 鐢ㄦ埛鍚嶆垨鎵嬫満鍙�
      * @param password 瀵嗙爜
      * @param code 楠岃瘉鐮�
      * @param uuid 鍞竴鏍囪瘑
@@ -131,7 +131,7 @@
 
     /**
      * 鐧诲綍鍓嶇疆鏍¢獙
-     * @param username 鐢ㄦ埛鍚�
+     * @param username 鐢ㄦ埛鍚嶆垨鎵嬫満鍙�
      * @param password 鐢ㄦ埛瀵嗙爜
      */
     public void loginPreCheck(String username, String password)
@@ -149,13 +149,21 @@
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
             throw new UserPasswordNotMatchException();
         }
-        // 鐢ㄦ埛鍚嶄笉鍦ㄦ寚瀹氳寖鍥村唴 閿欒
-        if (username.length() < UserConstants.USERNAME_MIN_LENGTH
-                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
+        // 鍒ゆ柇鏄惁涓烘墜鏈哄彿鐧诲綍
+        boolean isPhoneLogin = username.matches("^1[3-9]\\d{9}$");
+        
+        // 濡傛灉涓嶆槸鎵嬫満鍙风櫥褰曪紝妫�鏌ョ敤鎴峰悕闀垮害
+        if (!isPhoneLogin)
         {
-            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
-            throw new UserPasswordNotMatchException();
+            // 鐢ㄦ埛鍚嶄笉鍦ㄦ寚瀹氳寖鍥村唴 閿欒
+            if (username.length() < UserConstants.USERNAME_MIN_LENGTH
+                    || username.length() > UserConstants.USERNAME_MAX_LENGTH)
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            }
         }
+        
         // IP榛戝悕鍗曟牎楠�
         String blackStr = configService.selectConfigByKey("sys.login.blackIPList");
         if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
index 5dcdf90..de6196c 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
@@ -37,7 +37,23 @@
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
     {
-        SysUser user = userService.selectUserByUserName(username);
+        // 灏濊瘯鍒ゆ柇鏄墜鏈哄彿杩樻槸鐢ㄦ埛鍚�
+        SysUser user = null;
+        
+        // 鍒ゆ柇鏄惁涓烘墜鏈哄彿锛堢畝鍗曞垽鏂細鍏ㄦ槸鏁板瓧涓�11浣嶏級
+        if (username.matches("^1[3-9]\\d{9}$"))
+        {
+            // 鎵嬫満鍙风櫥褰�
+            log.info("灏濊瘯浣跨敤鎵嬫満鍙风櫥褰曪細{}", username);
+            user = userService.selectUserByPhonenumber(username);
+        }
+        else
+        {
+            // 鐢ㄦ埛鍚嶇櫥褰�
+            log.info("灏濊瘯浣跨敤鐢ㄦ埛鍚嶇櫥褰曪細{}", username);
+            user = userService.selectUserByUserName(username);
+        }
+        
         if (StringUtils.isNull(user))
         {
             log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", username);
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/DepartmentSyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/DepartmentSyncTask.java
index 2369fac..b3bdca1 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/DepartmentSyncTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/DepartmentSyncTask.java
@@ -1,7 +1,9 @@
 package com.ruoyi.quartz.task;
 
 import com.ruoyi.system.domain.DepartmentSyncDTO;
+import com.ruoyi.system.domain.OrderClassDTO;
 import com.ruoyi.system.service.IDepartmentSyncDataService;
+import com.ruoyi.system.service.IOrderClassDataService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,7 +37,14 @@
     private List<DepartmentSyncDTO> getTransportDept(){
         return departmentSyncDataService.getTransportDepartments();
     }
-
+    @Autowired
+    private IOrderClassDataService orderClassDataService;
+private List<OrderClassDTO> getServiceOrdCode() {
+    return orderClassDataService.getServiceOrderClass();
+}
+private List<OrderClassDTO> getDispatchOrdCode() {
+    return orderClassDataService.getDispatchOrderClass();
+}
 
     /**
      * 鍚屾鍒嗗叕鍙稿拰閮ㄩ棬鏁版嵁
@@ -51,7 +60,7 @@
         {
             log.info("==========寮�濮嬫墽琛岄儴闂ㄥ悓姝ュ畾鏃朵换鍔�==========");
             
-            AjaxResult result = departmentSyncService.syncBranchDepartments(this.getDepartment());
+            AjaxResult result = departmentSyncService.syncBranchDepartments(this.getDepartment(), this.getServiceOrdCode(),this.getDispatchOrdCode());
 
             departmentSyncService.syncTransportDepartments(this.getTransportDept());
             
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
new file mode 100644
index 0000000..3e3f40b
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacySystemSyncTask.java
@@ -0,0 +1,83 @@
+package com.ruoyi.quartz.task;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.ruoyi.system.service.ILegacySystemSyncService;
+
+/**
+ * 鏃х郴缁熷悓姝ュ畾鏃朵换鍔�
+ * 
+ * @author ruoyi
+ * @date 2024-01-20
+ */
+@Component("legacySystemSyncTask")
+public class LegacySystemSyncTask {
+    
+    private static final Logger log = LoggerFactory.getLogger(LegacySystemSyncTask.class);
+    
+    @Autowired
+    private ILegacySystemSyncService legacySystemSyncService;
+    
+    /**
+     * 鎵归噺鍚屾鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
+     * 
+     * 浣跨敤绀轰緥:
+     * 鍦ㄧ郴缁熺鐞� -> 瀹氭椂浠诲姟涓坊鍔�:
+     * 浠诲姟鍚嶇О: 鏃х郴缁熶换鍔″悓姝�
+     * 浠诲姟缁勫悕: DEFAULT
+     * 璋冪敤鐩爣瀛楃涓�: legacySystemSyncTask.syncPendingTasks()
+     * cron琛ㄨ揪寮�: 0 0/10 * * * ? (姣�10鍒嗛挓鎵ц涓�娆�)
+     */
+    public void syncPendingTasks() {
+        log.info("寮�濮嬫墽琛屾棫绯荤粺浠诲姟鍚屾瀹氭椂浠诲姟");
+        try {
+            int successCount = legacySystemSyncService.batchSyncPendingTasks();
+            log.info("鏃х郴缁熶换鍔″悓姝ュ畬鎴愶紝鎴愬姛鍚屾: {} 涓换鍔�", successCount);
+        } catch (Exception e) {
+            log.error("鏃х郴缁熶换鍔″悓姝ュ紓甯�", e);
+        }
+    }
+    
+    /**
+     * 鍚屾鎸囧畾浠诲姟鍒版棫绯荤粺
+     * 
+     * @param taskId 浠诲姟ID
+     */
+    public void syncTask(String taskId) {
+        log.info("寮�濮嬪悓姝ュ崟涓换鍔″埌鏃х郴缁燂紝浠诲姟ID: {}", taskId);
+        try {
+            Long id = Long.parseLong(taskId);
+            Long serviceOrdId = legacySystemSyncService.syncEmergencyTaskToLegacy(id);
+            if (serviceOrdId != null && serviceOrdId > 0) {
+                log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
+            } else {
+                log.error("浠诲姟鍚屾澶辫触锛屼换鍔D: {}", taskId);
+            }
+        } catch (Exception e) {
+            log.error("鍚屾浠诲姟寮傚父锛屼换鍔D: {}", taskId, e);
+        }
+    }
+    
+    /**
+     * 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗曞埌鏃х郴缁�
+     * 
+     * 浣跨敤绀轰緥:
+     * 鍦ㄧ郴缁熺鐞� -> 瀹氭椂浠诲姟涓坊鍔�:
+     * 浠诲姟鍚嶇О: 鏃х郴缁熻皟搴﹀崟鍚屾
+     * 浠诲姟缁勫悕: DEFAULT
+     * 璋冪敤鐩爣瀛楃涓�: legacySystemSyncTask.syncPendingDispatchOrders()
+     * cron琛ㄨ揪寮�: 0 0/10 * * * ? (姣�10鍒嗛挓鎵ц涓�娆�)
+     */
+    public void syncPendingDispatchOrders() {
+        log.info("寮�濮嬫墽琛屾棫绯荤粺璋冨害鍗曞悓姝ュ畾鏃朵换鍔�");
+        try {
+            int successCount = legacySystemSyncService.batchSyncPendingDispatchOrders();
+            log.info("鏃х郴缁熻皟搴﹀崟鍚屾瀹屾垚锛屾垚鍔熷悓姝�: {} 涓换鍔�", successCount);
+        } catch (Exception e) {
+            log.error("鏃х郴缁熻皟搴﹀崟鍚屾寮傚父", e);
+        }
+    }
+}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacyVehicleSyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacyVehicleSyncTask.java
new file mode 100644
index 0000000..dea2b2e
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/LegacyVehicleSyncTask.java
@@ -0,0 +1,63 @@
+package com.ruoyi.quartz.task;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.service.IVehicleSyncDataService;
+import com.ruoyi.system.service.IVehicleSyncService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 鏃х郴缁熻溅杈嗗悓姝ュ畾鏃朵换鍔�
+ * 
+ * 浠嶴QL Server鐨凜arData琛ㄥ悓姝ヨ溅杈嗘暟鎹埌MySQL鐨則b_vehicle_info琛�
+ * 
+ * @author ruoyi
+ * @date 2025-10-20
+ */
+@Component("legacyVehicleSyncTask")
+public class LegacyVehicleSyncTask
+{
+    private static final Logger log = LoggerFactory.getLogger(LegacyVehicleSyncTask.class);
+
+    @Autowired
+    private IVehicleSyncService vehicleSyncService;
+
+    @Autowired
+    private IVehicleSyncDataService vehicleSyncDataService;
+
+    /**
+     * 鍚屾鏃х郴缁熻溅杈嗘暟鎹�
+     * 
+     * 浠诲姟閰嶇疆绀轰緥锛�
+     * - 浠诲姟鍚嶇О锛氭棫绯荤粺杞﹁締鍚屾
+     * - 璋冪敤鐩爣瀛楃涓诧細legacyVehicleSyncTask.syncVehicles()
+     * - cron琛ㄨ揪寮忥細0 0 2 * * ? (姣忓ぉ鍑屾櫒2鐐规墽琛�)
+     */
+    public void syncVehicles()
+    {
+        log.info("========== 寮�濮嬫墽琛屾棫绯荤粺杞﹁締鍚屾浠诲姟 ==========");
+
+
+        try
+        {
+            AjaxResult result = vehicleSyncService.syncVehicles(vehicleSyncDataService.getVehiclesFromSqlServer());
+            
+            if (result.isSuccess() || result.isWarn())
+            {
+                log.info("鏃х郴缁熻溅杈嗗悓姝ヤ换鍔℃墽琛屾垚鍔�: {}", result.get("msg"));
+            }
+            else if (result.isError())
+            {
+                log.error("鏃х郴缁熻溅杈嗗悓姝ヤ换鍔℃墽琛屽け璐�: {}", result.get("msg"));
+            }
+        }
+        catch (Exception e)
+        {
+            log.error("鏃х郴缁熻溅杈嗗悓姝ヤ换鍔℃墽琛屽紓甯�", e);
+        }
+        
+        log.info("========== 鏃х郴缁熻溅杈嗗悓姝ヤ换鍔℃墽琛屽畬鎴� ==========");
+    }
+}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/OaSyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/OaSyncTask.java
index 6b9cb51..775f837 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/OaSyncTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/OaSyncTask.java
@@ -1,16 +1,14 @@
 package com.ruoyi.quartz.task;
 
 import com.ruoyi.system.domain.DepartmentSyncDTO;
+import com.ruoyi.system.domain.OrderClassDTO;
 import com.ruoyi.system.domain.UserSyncDTO;
-import com.ruoyi.system.service.IDepartmentSyncDataService;
-import com.ruoyi.system.service.IUserSyncDataService;
+import com.ruoyi.system.service.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.system.service.IDepartmentSyncService;
-import com.ruoyi.system.service.IUserSyncService;
 
 import java.util.List;
 
@@ -46,6 +44,15 @@
     private List<UserSyncDTO> getUserData(){
         return userSyncDataService.getOaUsers();
     }
+
+    @Autowired
+    private IOrderClassDataService orderClassDataService;
+    private List<OrderClassDTO> getServiceOrdCode() {
+        return orderClassDataService.getServiceOrderClass();
+    }
+    private List<OrderClassDTO> getDispatchOrdCode() {
+        return orderClassDataService.getDispatchOrderClass();
+    }
     /**
      * 鍚屾OA鏁版嵁锛堥儴闂�+鐢ㄦ埛锛�
      * 鎸夐『搴忔墽琛岋細1. 閮ㄩ棬鍚屾  2. 鐢ㄦ埛鍚屾
@@ -63,7 +70,7 @@
             
             // 绗竴姝ワ細鍚屾閮ㄩ棬
             log.info("銆愭楠�1/2銆戝紑濮嬪悓姝ラ儴闂ㄦ暟鎹�...");
-            AjaxResult deptResult = departmentSyncService.syncBranchDepartments(this.getDept());
+            AjaxResult deptResult = departmentSyncService.syncBranchDepartments(this.getDept(),this.getServiceOrdCode(),this.getDispatchOrdCode());
             
             if (deptResult.get("code").equals(200))
             {
@@ -118,7 +125,7 @@
         try
         {
             log.info("==========寮�濮嬫墽琛岄儴闂ㄥ悓姝ヤ换鍔�==========");
-            AjaxResult result = departmentSyncService.syncBranchDepartments(this.getDept());
+            AjaxResult result = departmentSyncService.syncBranchDepartments(this.getDept(),this.getServiceOrdCode(),this.getDispatchOrdCode());
             
             if (result.get("code").equals(200))
             {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java
new file mode 100644
index 0000000..929fe5c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java
@@ -0,0 +1,73 @@
+package com.ruoyi.system.domain;
+
+/**
+ * 璁㈠崟缂栫爜DTO瀵硅薄锛堝搴擲QL Server鐨刣ictionary琛∣rderClass锛�
+ * 
+ * @author ruoyi
+ * @date 2025-10-19
+ */
+public class OrderClassDTO
+{
+    /** 缂栫爜ID锛堝锛歷ID锛� */
+    private String vID;
+
+    /** 缂栫爜鏂囨湰锛堝锛氫腑灞辨湇鍔″崟锛� */
+    private String vtext;
+
+    /** 缂栫爜鍊硷紙濡傦細JA锛� */
+    private String vOrder2;
+
+    /** 缂栫爜绫诲瀷锛�1-鏈嶅姟鍗曠紪鐮侊紝2-璋冨害鍗曠紪鐮侊級 */
+    private Integer vType;
+
+    public String getvID()
+    {
+        return vID;
+    }
+
+    public void setvID(String vID)
+    {
+        this.vID = vID;
+    }
+
+    public String getVtext()
+    {
+        return vtext;
+    }
+
+    public void setVtext(String vtext)
+    {
+        this.vtext = vtext;
+    }
+
+    public String getVOrder2()
+    {
+        return vOrder2;
+    }
+
+    public void setVOrder2(String vOrder2)
+    {
+        this.vOrder2 = vOrder2;
+    }
+
+    public Integer getVType()
+    {
+        return vType;
+    }
+
+    public void setVType(Integer vType)
+    {
+        this.vType = vType;
+    }
+
+    @Override
+    public String toString()
+    {
+        return "OrderClassDTO{" +
+                "vID='" + vID + '\'' +
+                ", vtext='" + vtext + '\'' +
+                ", vOrder2='" + vOrder2 + '\'' +
+                ", vType=" + vType +
+                '}';
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTask.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTask.java
index 0cb20ea..2e5d1a8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTask.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTask.java
@@ -111,6 +111,9 @@
     /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
     private String delFlag;
 
+    /** 鏃х郴缁熷悓姝ユ爣璁帮細0-鏈悓姝ワ紝1-宸插悓姝� */
+    private Integer legacySynced;
+
     /** 鍏宠仈杞﹁締鍒楄〃 */
     private List<SysTaskVehicle> assignedVehicles;
 
@@ -310,6 +313,14 @@
         return delFlag;
     }
 
+    public void setLegacySynced(Integer legacySynced) {
+        this.legacySynced = legacySynced;
+    }
+
+    public Integer getLegacySynced() {
+        return legacySynced;
+    }
+
     public void setAssignedVehicles(List<SysTaskVehicle> assignedVehicles) {
         this.assignedVehicles = assignedVehicles;
     }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskAssignee.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskAssignee.java
new file mode 100644
index 0000000..27644bc
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskAssignee.java
@@ -0,0 +1,101 @@
+package com.ruoyi.system.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 浠诲姟鎵ц浜哄憳鍏宠仈瀵硅薄 sys_task_assignee
+ * 
+ * @author ruoyi
+ * @date 2024-01-15
+ */
+public class SysTaskAssignee extends BaseEntity {
+    
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭ID */
+    private Long id;
+
+    /** 浠诲姟ID */
+    @Excel(name = "浠诲姟ID")
+    private Long taskId;
+
+    /** 鐢ㄦ埛ID */
+    @Excel(name = "鐢ㄦ埛ID")
+    private Long userId;
+
+    /** 鐢ㄦ埛濮撳悕 */
+    @Excel(name = "鐢ㄦ埛濮撳悕")
+    private String userName;
+
+    /** 鐢ㄦ埛绫诲瀷锛歞river-鍙告満锛宒octor-鍖荤敓锛宯urse-鎶ゅ+ */
+    @Excel(name = "鐢ㄦ埛绫诲瀷", readConverterExp = "driver=鍙告満,doctor=鍖荤敓,nurse=鎶ゅ+")
+    private String userType;
+
+    /** 鏄惁涓轰富瑕佹墽琛屼汉锛�0-鍚︼紝1-鏄� */
+    @Excel(name = "鏄惁涓轰富瑕佹墽琛屼汉", readConverterExp = "0=鍚�,1=鏄�")
+    private String isPrimary;
+
+    /** 鎺掑簭椤哄簭锛堢敤浜庣‘瀹氶闃燂級 */
+    @Excel(name = "鎺掑簭椤哄簭")
+    private Integer sortOrder;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(Long taskId) {
+        this.taskId = taskId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
+
+    public String getIsPrimary() {
+        return isPrimary;
+    }
+
+    public void setIsPrimary(String isPrimary) {
+        this.isPrimary = isPrimary;
+    }
+
+    public Integer getSortOrder() {
+        return sortOrder;
+    }
+
+    public void setSortOrder(Integer sortOrder) {
+        this.sortOrder = sortOrder;
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java
index 438a18f..05c00d7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java
@@ -39,8 +39,14 @@
     /** 杞嚭鍖婚櫌鍚嶇О */
     private String hospitalOutName;
 
+    /** 杞嚭鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛� */
+    private Long hospitalOutId;
+
     /** 杞嚭鍖婚櫌绉戝 */
     private String hospitalOutDepartment;
+
+    /** 杞嚭鍖婚櫌绉戝ID锛堝搴擲QL Server dictionary琛ㄧ殑vID锛� */
+    private String hospitalOutDepartmentId;
 
     /** 杞嚭鍖婚櫌搴婂彿 */
     private String hospitalOutBedNumber;
@@ -57,8 +63,14 @@
     /** 杞叆鍖婚櫌鍚嶇О */
     private String hospitalInName;
 
+    /** 杞叆鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛� */
+    private Long hospitalInId;
+
     /** 杞叆鍖婚櫌绉戝 */
     private String hospitalInDepartment;
+
+    /** 杞叆鍖婚櫌绉戝ID锛堝搴擲QL Server dictionary琛ㄧ殑vID锛� */
+    private String hospitalInDepartmentId;
 
     /** 杞叆鍖婚櫌搴婂彿 */
     private String hospitalInBedNumber;
@@ -83,6 +95,39 @@
 
     /** 涔樺鑱旂郴鐢佃瘽(绂忕杞�) */
     private String passengerPhone;
+
+    /** 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岄�楀彿鍒嗛殧锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛� */
+    private String diseaseIds;
+
+    /** 鍗曟嵁绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛� */
+    private String documentTypeId;
+
+    /** 浠诲姟绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛� */
+    private String taskTypeId;
+
+    /** 鏃х郴缁烻erviceOrdID */
+    private Long legacyServiceOrdId;
+
+    /** 鏃х郴缁烡ispatchOrdID */
+    private Long legacyDispatchOrdId;
+
+    /** 鍚屾鐘舵�侊細0-鏈悓姝ワ紝1-鍚屾涓紝2-鍚屾鎴愬姛锛�3-鍚屾澶辫触 */
+    private Integer syncStatus;
+
+    /** 鍚屾鏃堕棿 */
+    private java.util.Date syncTime;
+
+    /** 鍚屾閿欒淇℃伅 */
+    private String syncErrorMsg;
+
+    /** 璋冨害鍗曞悓姝ョ姸鎬侊細0-鏈悓姝ワ紝1-鍚屾涓紝2-鍚屾鎴愬姛锛�3-鍚屾澶辫触 */
+    private Integer dispatchSyncStatus;
+
+    /** 璋冨害鍗曞悓姝ユ椂闂� */
+    private java.util.Date dispatchSyncTime;
+
+    /** 璋冨害鍗曞悓姝ラ敊璇俊鎭� */
+    private String dispatchSyncErrorMsg;
 
     public Long getId() {
         return id;
@@ -156,12 +201,28 @@
         this.hospitalOutName = hospitalOutName;
     }
 
+    public Long getHospitalOutId() {
+        return hospitalOutId;
+    }
+
+    public void setHospitalOutId(Long hospitalOutId) {
+        this.hospitalOutId = hospitalOutId;
+    }
+
     public String getHospitalOutDepartment() {
         return hospitalOutDepartment;
     }
 
     public void setHospitalOutDepartment(String hospitalOutDepartment) {
         this.hospitalOutDepartment = hospitalOutDepartment;
+    }
+
+    public String getHospitalOutDepartmentId() {
+        return hospitalOutDepartmentId;
+    }
+
+    public void setHospitalOutDepartmentId(String hospitalOutDepartmentId) {
+        this.hospitalOutDepartmentId = hospitalOutDepartmentId;
     }
 
     public String getHospitalOutBedNumber() {
@@ -204,12 +265,28 @@
         this.hospitalInName = hospitalInName;
     }
 
+    public Long getHospitalInId() {
+        return hospitalInId;
+    }
+
+    public void setHospitalInId(Long hospitalInId) {
+        this.hospitalInId = hospitalInId;
+    }
+
     public String getHospitalInDepartment() {
         return hospitalInDepartment;
     }
 
     public void setHospitalInDepartment(String hospitalInDepartment) {
         this.hospitalInDepartment = hospitalInDepartment;
+    }
+
+    public String getHospitalInDepartmentId() {
+        return hospitalInDepartmentId;
+    }
+
+    public void setHospitalInDepartmentId(String hospitalInDepartmentId) {
+        this.hospitalInDepartmentId = hospitalInDepartmentId;
     }
 
     public String getHospitalInBedNumber() {
@@ -276,6 +353,94 @@
         this.passengerPhone = passengerPhone;
     }
 
+    public String getDiseaseIds() {
+        return diseaseIds;
+    }
+
+    public void setDiseaseIds(String diseaseIds) {
+        this.diseaseIds = diseaseIds;
+    }
+
+    public String getDocumentTypeId() {
+        return documentTypeId;
+    }
+
+    public void setDocumentTypeId(String documentTypeId) {
+        this.documentTypeId = documentTypeId;
+    }
+
+    public String getTaskTypeId() {
+        return taskTypeId;
+    }
+
+    public void setTaskTypeId(String taskTypeId) {
+        this.taskTypeId = taskTypeId;
+    }
+
+    public Long getLegacyServiceOrdId() {
+        return legacyServiceOrdId;
+    }
+
+    public void setLegacyServiceOrdId(Long legacyServiceOrdId) {
+        this.legacyServiceOrdId = legacyServiceOrdId;
+    }
+
+    public Long getLegacyDispatchOrdId() {
+        return legacyDispatchOrdId;
+    }
+
+    public void setLegacyDispatchOrdId(Long legacyDispatchOrdId) {
+        this.legacyDispatchOrdId = legacyDispatchOrdId;
+    }
+
+    public Integer getSyncStatus() {
+        return syncStatus;
+    }
+
+    public void setSyncStatus(Integer syncStatus) {
+        this.syncStatus = syncStatus;
+    }
+
+    public java.util.Date getSyncTime() {
+        return syncTime;
+    }
+
+    public void setSyncTime(java.util.Date syncTime) {
+        this.syncTime = syncTime;
+    }
+
+    public String getSyncErrorMsg() {
+        return syncErrorMsg;
+    }
+
+    public void setSyncErrorMsg(String syncErrorMsg) {
+        this.syncErrorMsg = syncErrorMsg;
+    }
+
+    public Integer getDispatchSyncStatus() {
+        return dispatchSyncStatus;
+    }
+
+    public void setDispatchSyncStatus(Integer dispatchSyncStatus) {
+        this.dispatchSyncStatus = dispatchSyncStatus;
+    }
+
+    public java.util.Date getDispatchSyncTime() {
+        return dispatchSyncTime;
+    }
+
+    public void setDispatchSyncTime(java.util.Date dispatchSyncTime) {
+        this.dispatchSyncTime = dispatchSyncTime;
+    }
+
+    public String getDispatchSyncErrorMsg() {
+        return dispatchSyncErrorMsg;
+    }
+
+    public void setDispatchSyncErrorMsg(String dispatchSyncErrorMsg) {
+        this.dispatchSyncErrorMsg = dispatchSyncErrorMsg;
+    }
+
     @Override
     public String toString() {
         return "SysTaskEmergency{" +
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleInfo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleInfo.java
index f3017e6..506de81 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleInfo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleInfo.java
@@ -14,6 +14,10 @@
     /** 杞﹁締ID */
     private Long vehicleId;
 
+    /** 鏃х郴缁熻溅杈咺D(SQL Server CarID) */
+    @Excel(name = "鏃х郴缁熻溅杈咺D")
+    private Integer carId;
+
     /** 璁惧ID */
     @Excel(name = "璁惧ID")
     private String deviceId;
@@ -56,6 +60,14 @@
 
     public Long getVehicleId() {
         return vehicleId;
+    }
+
+    public void setCarId(Integer carId) {
+        this.carId = carId;
+    }
+
+    public Integer getCarId() {
+        return carId;
     }
 
     public void setDeviceId(String deviceId) {
@@ -134,6 +146,7 @@
     public String toString() {
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                 .append("vehicleId", getVehicleId())
+                .append("carId", getCarId())
                 .append("deviceId", getDeviceId())
                 .append("vehicleNo", getVehicleNo())
                 .append("vehicleType", getVehicleType())
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleSyncDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleSyncDTO.java
new file mode 100644
index 0000000..b2cf80d
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleSyncDTO.java
@@ -0,0 +1,59 @@
+package com.ruoyi.system.domain;
+
+/**
+ * 杞﹁締鍚屾DTO瀵硅薄
+ * 
+ * @author ruoyi
+ * @date 2025-10-20
+ */
+public class VehicleSyncDTO
+{
+    /** SQL Server涓殑杞﹁締ID */
+    private Integer carId;
+
+    /** 杞︾墝鍙� */
+    private String carLicense;
+
+    /** 杞﹁締鍗曟嵁绫诲瀷缂栫爜 */
+    private String carOrdClass;
+
+    public Integer getCarId()
+    {
+        return carId;
+    }
+
+    public void setCarId(Integer carId)
+    {
+        this.carId = carId;
+    }
+
+    public String getCarLicense()
+    {
+        return carLicense;
+    }
+
+    public void setCarLicense(String carLicense)
+    {
+        this.carLicense = carLicense;
+    }
+
+    public String getCarOrdClass()
+    {
+        return carOrdClass;
+    }
+
+    public void setCarOrdClass(String carOrdClass)
+    {
+        this.carOrdClass = carOrdClass;
+    }
+
+    @Override
+    public String toString()
+    {
+        return "VehicleSyncDTO{" +
+                "carId=" + carId +
+                ", carLicense='" + carLicense + '\'' +
+                ", carOrdClass='" + carOrdClass + '\'' +
+                '}';
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java
index ca29735..3e4628f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java
@@ -89,8 +89,62 @@
     /** 绂忕杞﹀叕閲屾暟 */
     private BigDecimal distance;
 
+    /** 鍗曟嵁绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛� */
+    private String documentTypeId;
+
+    /** 浠诲姟绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛� */
+    private String taskTypeId;
+
     /** 杞﹁締ID鍒楄〃 */
     private List<Long> vehicleIds;
+
+    /** 鎵ц浜哄憳ID鍒楄〃 */
+    private List<Long> assigneeIds;
+
+    /** 鎵ц浜哄憳璇︾粏淇℃伅鍒楄〃锛堝寘鍚鑹茬被鍨嬶級 */
+    private List<AssigneeInfo> assignees;
+
+    /** 褰掑睘閮ㄩ棬ID */
+    private Long deptId;
+
+    /** 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛� */
+    private List<Long> diseaseIds;
+
+    // 鎵ц浜哄憳淇℃伅鍐呴儴绫�
+    public static class AssigneeInfo {
+        /** 鐢ㄦ埛ID */
+        private Long userId;
+        
+        /** 鐢ㄦ埛濮撳悕 */
+        private String userName;
+        
+        /** 鐢ㄦ埛绫诲瀷锛歞river-鍙告満锛宒octor-鍖荤敓锛宯urse-鎶ゅ+ */
+        private String userType;
+
+        public Long getUserId() {
+            return userId;
+        }
+
+        public void setUserId(Long userId) {
+            this.userId = userId;
+        }
+
+        public String getUserName() {
+            return userName;
+        }
+
+        public void setUserName(String userName) {
+            this.userName = userName;
+        }
+
+        public String getUserType() {
+            return userType;
+        }
+
+        public void setUserType(String userType) {
+            this.userType = userType;
+        }
+    }
 
     // 鎮h�呬俊鎭唴閮ㄧ被
     public static class PatientInfo {
@@ -153,14 +207,24 @@
 
     // 鍖婚櫌淇℃伅鍐呴儴绫�
     public static class HospitalInfo {
+        private Long id;  // 鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛�
         private String name;
         private String department;
+        private String departmentId;  // 绉戝ID锛堝搴擲QL Server dictionary琛ㄧ殑vID锛�
         private String bedNumber;
         private String address;
         private BigDecimal longitude;
         private BigDecimal latitude;
 
         // getters and setters
+        public Long getId() {
+            return id;
+        }
+
+        public void setId(Long id) {
+            this.id = id;
+        }
+
         public String getName() {
             return name;
         }
@@ -175,6 +239,14 @@
 
         public void setDepartment(String department) {
             this.department = department;
+        }
+
+        public String getDepartmentId() {
+            return departmentId;
+        }
+
+        public void setDepartmentId(String departmentId) {
+            this.departmentId = departmentId;
         }
 
         public String getBedNumber() {
@@ -432,4 +504,52 @@
     public void setDistance(BigDecimal distance) {
         this.distance = distance;
     }
+
+    public String getDocumentTypeId() {
+        return documentTypeId;
+    }
+
+    public void setDocumentTypeId(String documentTypeId) {
+        this.documentTypeId = documentTypeId;
+    }
+
+    public String getTaskTypeId() {
+        return taskTypeId;
+    }
+
+    public void setTaskTypeId(String taskTypeId) {
+        this.taskTypeId = taskTypeId;
+    }
+
+    public List<Long> getAssigneeIds() {
+        return assigneeIds;
+    }
+
+    public void setAssigneeIds(List<Long> assigneeIds) {
+        this.assigneeIds = assigneeIds;
+    }
+
+    public List<AssigneeInfo> getAssignees() {
+        return assignees;
+    }
+
+    public void setAssignees(List<AssigneeInfo> assignees) {
+        this.assignees = assignees;
+    }
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+    public List<Long> getDiseaseIds() {
+        return diseaseIds;
+    }
+
+    public void setDiseaseIds(List<Long> diseaseIds) {
+        this.diseaseIds = diseaseIds;
+    }
 }
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/HospDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/HospDataMapper.java
index 397a771..1dcbfb2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/HospDataMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/HospDataMapper.java
@@ -20,9 +20,10 @@
      * 鏍规嵁鍖婚櫌鍚嶇О鎴栧湴鍧�鎼滅储鍖婚櫌
      * 
      * @param keyword 鎼滅储鍏抽敭璇�
+     * @param region 鍦板煙鍏抽敭璇嶏紙鐢ㄤ簬杩囨护鐪佸競鍖猴級
      * @return 鍖婚櫌鍒楄〃
      */
-    List<HospData> searchHospitals(@Param("keyword") String keyword);
+    List<HospData> searchHospitals(@Param("keyword") String keyword, @Param("region") String region);
     
     /**
      * 鏍规嵁鍖婚櫌ID鏌ヨ鍖婚櫌淇℃伅
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java
new file mode 100644
index 0000000..e9aff42
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java
@@ -0,0 +1,57 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.system.domain.OrderClassDTO;
+
+import java.util.List;
+
+/**
+ * 璁㈠崟缂栫爜Mapper鎺ュ彛锛堜粠SQL Server鐨刣ictionary琛ㄦ煡璇級
+ * 
+ * @author ruoyi
+ * @date 2025-10-19
+ */
+@DataSource(DataSourceType.SQLSERVER)
+public interface OrderClassMapper
+{
+    /**
+     * 鏌ヨ鏈嶅姟鍗曠紪鐮佸垪琛�
+     * SQL: SELECT vtext, vOrder2 FROM dictionary WHERE vtitle='OrderClass' AND vType=1
+     * 
+     * @return 鏈嶅姟鍗曠紪鐮佸垪琛�
+     */
+    List<OrderClassDTO> selectServiceOrderClass();
+
+    /**
+     * 鏌ヨ璋冨害鍗曠紪鐮佸垪琛�
+     * SQL: SELECT vtext, vOrder2 FROM dictionary WHERE vtitle='OrderClass' AND vType=2
+     * 
+     * @return 璋冨害鍗曠紪鐮佸垪琛�
+     */
+    List<OrderClassDTO> selectDispatchOrderClass();
+
+    /**
+     * 鏌ヨ鍗曟嵁绫诲瀷鍒楄〃锛圫erviceOrdAreaType锛�
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrdAreaType' AND vType=1 ORDER BY vOrder
+     * 
+     * @return 鍗曟嵁绫诲瀷鍒楄〃
+     */
+    List<OrderClassDTO> selectServiceOrdAreaTypes();
+
+    /**
+     * 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鍒楄〃锛圫erviceOrderType锛�
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrderType' AND vType>=1 ORDER BY vOrder
+     * 
+     * @return 鏈嶅姟璁㈠崟绫诲瀷鍒楄〃
+     */
+    List<OrderClassDTO> selectServiceOrderTypes();
+
+    /**
+     * 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛�
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
+     * 
+     * @return 鍖婚櫌绉戝鍒楄〃
+     */
+    List<OrderClassDTO> selectHospitalDepartments();
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskAssigneeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskAssigneeMapper.java
new file mode 100644
index 0000000..58b67bd
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTaskAssigneeMapper.java
@@ -0,0 +1,77 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.domain.SysTaskAssignee;
+import java.util.List;
+
+/**
+ * 浠诲姟鎵ц浜哄憳鍏宠仈Mapper鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2024-01-15
+ */
+public interface SysTaskAssigneeMapper {
+    
+    /**
+     * 鏌ヨ浠诲姟鎵ц浜哄憳鍏宠仈
+     * 
+     * @param id 浠诲姟鎵ц浜哄憳鍏宠仈涓婚敭
+     * @return 浠诲姟鎵ц浜哄憳鍏宠仈
+     */
+    public SysTaskAssignee selectSysTaskAssigneeById(Long id);
+
+    /**
+     * 鏌ヨ浠诲姟鐨勬墽琛屼汉鍛樺垪琛�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 浠诲姟鎵ц浜哄憳鍏宠仈闆嗗悎
+     */
+    public List<SysTaskAssignee> selectSysTaskAssigneeByTaskId(Long taskId);
+
+    /**
+     * 鏂板浠诲姟鎵ц浜哄憳鍏宠仈
+     * 
+     * @param sysTaskAssignee 浠诲姟鎵ц浜哄憳鍏宠仈
+     * @return 缁撴灉
+     */
+    public int insertSysTaskAssignee(SysTaskAssignee sysTaskAssignee);
+
+    /**
+     * 鎵归噺鏂板浠诲姟鎵ц浜哄憳鍏宠仈
+     * 
+     * @param assignees 浠诲姟鎵ц浜哄憳鍏宠仈闆嗗悎
+     * @return 缁撴灉
+     */
+    public int batchInsertSysTaskAssignee(List<SysTaskAssignee> assignees);
+
+    /**
+     * 淇敼浠诲姟鎵ц浜哄憳鍏宠仈
+     * 
+     * @param sysTaskAssignee 浠诲姟鎵ц浜哄憳鍏宠仈
+     * @return 缁撴灉
+     */
+    public int updateSysTaskAssignee(SysTaskAssignee sysTaskAssignee);
+
+    /**
+     * 鍒犻櫎浠诲姟鎵ц浜哄憳鍏宠仈
+     * 
+     * @param id 浠诲姟鎵ц浜哄憳鍏宠仈涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteSysTaskAssigneeById(Long id);
+
+    /**
+     * 鍒犻櫎浠诲姟鐨勬墍鏈夋墽琛屼汉鍛樺叧鑱�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 缁撴灉
+     */
+    public int deleteSysTaskAssigneeByTaskId(Long taskId);
+
+    /**
+     * 鎵归噺鍒犻櫎浠诲姟鎵ц浜哄憳鍏宠仈
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteSysTaskAssigneeByIds(Long[] ids);
+}
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 da5919a..49fc98f 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,5 +1,6 @@
 package com.ruoyi.system.mapper;
 
+import java.util.List;
 import com.ruoyi.system.domain.SysTaskEmergency;
 
 /**
@@ -57,4 +58,18 @@
      * @return 缁撴灉
      */
     public int deleteSysTaskEmergencyByTaskId(Long taskId);
+
+    /**
+     * 鏌ヨ寰呭悓姝ョ殑鎬ユ晳杞繍浠诲姟鍒楄〃锛堝悓姝ョ姸鎬佷负0鎴�3鐨勪换鍔★級
+     * 
+     * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
+     */
+    public List<SysTaskEmergency> selectPendingSyncTasks();
+    
+    /**
+     * 鏌ヨ寰呭悓姝ヨ皟搴﹀崟鐨勪换鍔″垪琛紙宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曪級
+     * 
+     * @return 鎬ユ晳杞繍浠诲姟鍒楄〃
+     */
+    public List<SysTaskEmergency> selectPendingDispatchSyncTasks();
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleSyncMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleSyncMapper.java
new file mode 100644
index 0000000..ab5ecf1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleSyncMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.system.domain.VehicleSyncDTO;
+
+import java.util.List;
+
+/**
+ * 杞﹁締鍚屾Mapper鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-10-20
+ */
+@DataSource(DataSourceType.SQLSERVER)
+public interface VehicleSyncMapper
+{
+    /**
+     * 浠嶴QL Server鏌ヨ鎵�鏈夋甯哥姸鎬佺殑杞﹁締鏁版嵁
+     * 
+     * @return 杞﹁締鍒楄〃
+     */
+    List<VehicleSyncDTO> selectVehiclesFromSqlServer();
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDepartmentSyncService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDepartmentSyncService.java
index ed762b3..b7fdcdd 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDepartmentSyncService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDepartmentSyncService.java
@@ -2,6 +2,8 @@
 
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.system.domain.DepartmentSyncDTO;
+import com.ruoyi.system.domain.OrderClassDTO;
+
 import java.util.List;
 
 /**
@@ -26,7 +28,7 @@
      * @param branchDepts 澶栭儴浼犲叆鐨勫垎鍏徃鏁版嵁鍒楄〃
      * @return 鍚屾缁撴灉
      */
-    AjaxResult syncBranchDepartments(List<DepartmentSyncDTO> branchDepts);
+    AjaxResult syncBranchDepartments(List<DepartmentSyncDTO> branchDepts, List<OrderClassDTO> orderClassDTOs,List<OrderClassDTO> dispatchClassDTOs);
     
     /**
      * 鍚屾杞繍閮ㄥ拰瀛愰儴闂ㄦ暟鎹紙浣跨敤澶栭儴浼犲叆鐨勬暟鎹簮锛�
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
new file mode 100644
index 0000000..2a598c8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ILegacySystemSyncService.java
@@ -0,0 +1,50 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.SysTask;
+
+/**
+ * 鏃х郴缁熷悓姝ervice鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2024-01-20
+ */
+public interface ILegacySystemSyncService {
+    
+    /**
+     * 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鏃х郴缁熻繑鍥炵殑ServiceOrdID锛屽け璐ヨ繑鍥瀗ull
+     */
+    Long syncEmergencyTaskToLegacy(Long taskId);
+    
+    /**
+     * 鎵归噺鍚屾鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟
+     * 
+     * @return 鎴愬姛鍚屾鐨勪换鍔℃暟閲�
+     */
+    int batchSyncPendingTasks();
+    
+    /**
+     * 閲嶆柊鍚屾澶辫触鐨勪换鍔�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鏄惁鎴愬姛
+     */
+    boolean retrySyncTask(Long taskId);
+    
+    /**
+     * 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鏃х郴缁熻繑鍥炵殑DispatchOrdID锛屽け璐ヨ繑鍥瀗ull
+     */
+    Long syncDispatchOrderToLegacy(Long taskId);
+    
+    /**
+     * 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
+     * 
+     * @return 鎴愬姛鍚屾鐨勪换鍔℃暟閲�
+     */
+    int batchSyncPendingDispatchOrders();
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java
new file mode 100644
index 0000000..30f8206
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java
@@ -0,0 +1,57 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.OrderClassDTO;
+
+import java.util.List;
+
+/**
+ * 璁㈠崟缂栫爜鏁版嵁Service鎺ュ彛
+ * 
+ * 鑱岃矗锛氫粠 SQL Server 鏌ヨ鏈嶅姟鍗曞拰璋冨害鍗曠紪鐮佹暟鎹�
+ * 
+ * @author ruoyi
+ * @date 2025-10-19
+ */
+public interface IOrderClassDataService
+{
+    /**
+     * 浠� SQL Server 鏌ヨ鏈嶅姟鍗曠紪鐮佸垪琛�
+     * 
+     * @return 鏈嶅姟鍗曠紪鐮佸垪琛�
+     */
+    List<OrderClassDTO> getServiceOrderClass();
+
+    /**
+     * 浠� SQL Server 鏌ヨ璋冨害鍗曠紪鐮佸垪琛�
+     * 
+     * @return 璋冨害鍗曠紪鐮佸垪琛�
+     */
+    List<OrderClassDTO> getDispatchOrderClass();
+
+    /**
+     * 浠� SQL Server 鏌ヨ鍗曟嵁绫诲瀷鍒楄〃锛圫erviceOrdAreaType锛�
+     * 
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrdAreaType' AND vType=1 ORDER BY vOrder
+     * 
+     * @return 鍗曟嵁绫诲瀷鍒楄〃
+     */
+    List<OrderClassDTO> getServiceOrdAreaTypes();
+
+    /**
+     * 浠� SQL Server 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鍒楄〃锛圫erviceOrderType锛�
+     * 
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrderType' AND vType>=1 ORDER BY vOrder
+     * 
+     * @return 鏈嶅姟璁㈠崟绫诲瀷鍒楄〃
+     */
+    List<OrderClassDTO> getServiceOrderTypes();
+
+    /**
+     * 浠� SQL Server 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛�
+     * 
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
+     * 
+     * @return 鍖婚櫌绉戝鍒楄〃
+     */
+    List<OrderClassDTO> getHospitalDepartments();
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 10bc2ab..4d4efcd 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -43,6 +43,14 @@
     public SysUser selectUserByUserName(String userName);
 
     /**
+     * 閫氳繃鎵嬫満鍙锋煡璇㈢敤鎴�
+     * 
+     * @param phonenumber 鎵嬫満鍙�
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+    public SysUser selectUserByPhonenumber(String phonenumber);
+
+    /**
      * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
      * 
      * @param userId 鐢ㄦ埛ID
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleSyncDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleSyncDataService.java
new file mode 100644
index 0000000..ef07d6a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleSyncDataService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.VehicleSyncDTO;
+
+import java.util.List;
+
+/**
+ * SQL Server 杞﹁締鏁版嵁鏌ヨ鏈嶅姟鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-10-20
+ */
+public interface IVehicleSyncDataService
+{
+    /**
+     * 浠� SQL Server 鏌ヨ鎵�鏈夋甯哥姸鎬佺殑杞﹁締鏁版嵁
+     * 
+     * @return 杞﹁締鍒楄〃
+     */
+    List<VehicleSyncDTO> getVehiclesFromSqlServer();
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleSyncService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleSyncService.java
new file mode 100644
index 0000000..7fdfa85
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleSyncService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.domain.VehicleSyncDTO;
+
+import java.util.List;
+
+/**
+ * 杞﹁締鍚屾鏈嶅姟鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-10-20
+ */
+public interface IVehicleSyncService
+{
+    /**
+     * 鍚屾杞﹁締鏁版嵁鍒癕ySQL
+     * 
+     * @param vehicles 浠嶴QL Server鏌ヨ鐨勮溅杈嗗垪琛�
+     * @return 鍚屾缁撴灉
+     */
+    AjaxResult syncVehicles(List<VehicleSyncDTO> vehicles);
+    
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java
index 30d4f18..3af352b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java
@@ -10,9 +10,11 @@
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.DepartmentSyncDTO;
+import com.ruoyi.system.domain.OrderClassDTO;
 import com.ruoyi.system.mapper.SysDeptMapper;
 import com.ruoyi.system.service.IDepartmentSyncService;
 import com.ruoyi.system.service.IDepartmentSyncDataService;
+import com.ruoyi.system.service.IOrderClassDataService;
 
 /**
  * 閮ㄩ棬鍚屾Service涓氬姟灞傚鐞�
@@ -30,10 +32,11 @@
 {
     private static final Logger log = LoggerFactory.getLogger(DepartmentSyncServiceImpl.class);
 
-
-
     @Autowired
     private SysDeptMapper sysDeptMapper;
+
+    @Autowired
+    private IOrderClassDataService orderClassDataService;
 
 
     
@@ -49,7 +52,7 @@
      */
     @Override
     @Transactional
-    public AjaxResult syncBranchDepartments(List<DepartmentSyncDTO> branchDepts)
+    public AjaxResult syncBranchDepartments(List<DepartmentSyncDTO> branchDepts,List<OrderClassDTO> serviceOrderList,List<OrderClassDTO> dispatchOrderList)
     {
         try
         {
@@ -59,6 +62,9 @@
             }
             
             log.info("寮�濮嬪悓姝� {} 鏉″垎鍏徃鏁版嵁鍒� MySQL 鏁版嵁搴�...", branchDepts.size());
+            
+            // 涓�娆℃�т粠SQL Server鏌ヨ鎵�鏈夌紪鐮佹暟鎹紝閬垮厤鍦ㄥ惊鐜腑閲嶅鏌ヨ
+
             
             // 浣跨敤Map鏉ヨ窡韪凡鍒涘缓鐨勫垎鍏徃锛宬ey涓哄垎鍏徃鍚嶇О锛寁alue涓洪儴闂↖D
             Map<String, Long> branchMap = new HashMap<>();
@@ -95,10 +101,16 @@
                     SysDept existingBranch = sysDeptMapper.checkDeptNameUnique(branchName, 100L);
                     if (existingBranch != null)
                     {
-                        // 鍒嗗叕鍙稿凡瀛樺湪锛屾洿鏂癲epartment_id
+                        // 鍒嗗叕鍙稿凡瀛樺湪锛屾洿鏂扮紪鐮�
                         branchDeptId = existingBranch.getDeptId();
                         branchMap.put(branchName, branchDeptId);
-                        log.info("鍒嗗叕鍙稿凡瀛樺湪: {}, ID: {}", branchName, branchDeptId);
+                        
+                        // 妫�鏌ュ苟鏇存柊缂栫爜
+                        syncOrderClassCodes(existingBranch, parts[0].trim(), serviceOrderList, dispatchOrderList);
+//                        existingBranch.setDepartmentId(dto.getDepartmentId());
+                        sysDeptMapper.updateDept(existingBranch);
+                        log.info("鏇存柊鍒嗗叕鍙哥紪鐮�: {}, 鏈嶅姟鍗曠紪鐮�: {}, 璋冨害鍗曠紪鐮�: {}", 
+                            branchName, existingBranch.getServiceOrderClass(), existingBranch.getDispatchOrderClass());
                     }
                     else
                     {
@@ -110,12 +122,17 @@
                         newBranch.setOrderNum(branchMap.size() + 1);  // 鎺掑簭
                         newBranch.setStatus("0");  // 姝e父鐘舵��
                         newBranch.setCreateBy("sync");
+//                        newBranch.setDepartmentId(dto.getDepartmentId());
+
+                        // 鑷姩鍖归厤骞惰缃湇鍔″崟鍜岃皟搴﹀崟缂栫爜
+                        syncOrderClassCodes(newBranch, parts[0].trim(), serviceOrderList, dispatchOrderList);
 
                         sysDeptMapper.insertDept(newBranch);
                         branchDeptId = newBranch.getDeptId();
                         branchMap.put(branchName, branchDeptId);
                         createdBranch++;
-                        log.info("鍒涘缓鏂板垎鍏徃: {}, ID: {}", branchName, branchDeptId);
+                        log.info("鍒涘缓鏂板垎鍏徃: {}, ID: {}, 鏈嶅姟鍗曠紪鐮�: {}, 璋冨害鍗曠紪鐮�: {}", 
+                            branchName, branchDeptId, newBranch.getServiceOrderClass(), newBranch.getDispatchOrderClass());
                     }
                 }
 
@@ -129,6 +146,7 @@
                     // 閮ㄩ棬宸插瓨鍦紝鏇存柊淇℃伅
                     existingDept.setDeptName(deptName);
                     existingDept.setUpdateBy("sync");
+//                    existingDept.setDepartmentId(dto.getDepartmentId());
                     sysDeptMapper.updateDept(existingDept);
                     updatedDept++;
                     log.info("鏇存柊閮ㄩ棬: {} -> {}", branchName, deptName);
@@ -270,6 +288,7 @@
                     // 閮ㄩ棬宸插瓨鍦紝鏇存柊淇℃伅
                     existingDept.setDeptName(deptName);
                     existingDept.setUpdateBy("sync");
+                    existingDept.setDepartmentId(dto.getDepartmentId());
                     sysDeptMapper.updateDept(existingDept);
                     updatedDept++;
                     log.info("鏇存柊杞繍閮ㄥ瓙閮ㄩ棬: {}", deptName);
@@ -327,4 +346,87 @@
             return AjaxResult.error("鍚屾澶辫触: " + e.getMessage());
         }
     }
+
+    /**
+     * 鍚屾璁㈠崟缂栫爜锛堟湇鍔″崟鍜岃皟搴﹀崟缂栫爜锛�
+     * 
+     * 鏍规嵁鍒嗗叕鍙稿悕绉颁腑鐨勫湴鍚嶏紝鑷姩鍖归厤SQL Server涓殑缂栫爜骞舵洿鏂板埌閮ㄩ棬瀵硅薄
+     * 
+     * @param dept 閮ㄩ棬瀵硅薄锛堝垎鍏徃锛�
+     * @param cityName 鍩庡競鍚嶇О锛堝锛氫腑灞便�佸箍宸炪�佹箾姹燂級
+     * @param serviceOrderList 鏈嶅姟鍗曠紪鐮佸垪琛紙浠嶴QL Server鏌ヨ锛�
+     * @param dispatchOrderList 璋冨害鍗曠紪鐮佸垪琛紙浠嶴QL Server鏌ヨ锛�
+     */
+    private void syncOrderClassCodes(SysDept dept, String cityName, 
+                                    List<OrderClassDTO> serviceOrderList,
+                                    List<OrderClassDTO> dispatchOrderList)
+    {
+        if (serviceOrderList == null || dispatchOrderList == null)
+        {
+            log.warn("缂栫爜鍒楄〃涓虹┖锛岃烦杩囩紪鐮佸悓姝� - 鍩庡競: {}", cityName);
+            return;
+        }
+        
+        try
+        {
+            // 鍖归厤鏈嶅姟鍗曠紪鐮�
+            String serviceOrderClass = matchCityNameToCode(cityName, serviceOrderList);
+            if (serviceOrderClass != null)
+            {
+                dept.setServiceOrderClass(serviceOrderClass);
+                log.info("鍖归厤鍒版湇鍔″崟缂栫爜 - 鍩庡競: {}, 缂栫爜: {}", cityName, serviceOrderClass);
+            }
+            else
+            {
+                log.warn("鏈壘鍒板尮閰嶇殑鏈嶅姟鍗曠紪鐮� - 鍩庡競: {}", cityName);
+            }
+
+            // 鍖归厤璋冨害鍗曠紪鐮�
+            String dispatchOrderClass = matchCityNameToCode(cityName, dispatchOrderList);
+            if (dispatchOrderClass != null)
+            {
+                dept.setDispatchOrderClass(dispatchOrderClass);
+                log.info("鍖归厤鍒拌皟搴﹀崟缂栫爜 - 鍩庡競: {}, 缂栫爜: {}", cityName, dispatchOrderClass);
+            }
+            else
+            {
+                log.warn("鏈壘鍒板尮閰嶇殑璋冨害鍗曠紪鐮� - 鍩庡競: {}", cityName);
+            }
+        }
+        catch (Exception e)
+        {
+            log.error("鍚屾璁㈠崟缂栫爜澶辫触 - 鍩庡競: {}", cityName, e);
+        }
+    }
+
+    /**
+     * 鏍规嵁鍩庡競鍚嶇О鍖归厤缂栫爜
+     * 
+     * 鍖归厤瑙勫垯锛氬鏋渧text涓寘鍚煄甯傚悕绉帮紝鍒欒繑鍥炲搴旂殑vOrder2缂栫爜
+     * 渚嬪锛歝ityName="涓北", vtext="涓北鏈嶅姟鍗�", vOrder2="JA" -> 杩斿洖"JA"
+     * 
+     * @param cityName 鍩庡競鍚嶇О锛堝锛氫腑灞便�佸箍宸烇級
+     * @param orderClassList 缂栫爜鍒楄〃
+     * @return 鍖归厤鐨勭紪鐮佸�硷紙vOrder2锛夛紝鏈尮閰嶈繑鍥瀗ull
+     */
+    private String matchCityNameToCode(String cityName, List<OrderClassDTO> orderClassList)
+    {
+        if (StringUtils.isEmpty(cityName) || orderClassList == null || orderClassList.isEmpty())
+        {
+            return null;
+        }
+
+        // 閬嶅巻缂栫爜鍒楄〃锛屾煡鎵惧寘鍚煄甯傚悕绉扮殑椤�
+        for (OrderClassDTO dto : orderClassList)
+        {
+            if (dto.getVtext() != null && dto.getVtext().contains(cityName))
+            {
+                log.debug("鍩庡競鍚嶇О鍖归厤鎴愬姛 - 鍩庡競: {}, vtext: {}, vOrder2: {}", 
+                    cityName, dto.getVtext(), dto.getVOrder2());
+                return dto.getVOrder2();
+            }
+        }
+
+        return null;
+    }
 }
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
new file mode 100644
index 0000000..8e181d8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
@@ -0,0 +1,966 @@
+package com.ruoyi.system.service.impl;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import 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 com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.domain.SysTaskVehicle;
+import com.ruoyi.system.domain.SysTaskAssignee;
+import com.ruoyi.system.domain.VehicleInfo;
+import com.ruoyi.system.domain.vo.TaskCreateVO;
+import com.ruoyi.system.mapper.SysTaskMapper;
+import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
+import com.ruoyi.system.mapper.SysTaskVehicleMapper;
+import com.ruoyi.system.mapper.SysTaskAssigneeMapper;
+import com.ruoyi.system.mapper.VehicleInfoMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.system.service.ILegacySystemSyncService;
+
+/**
+ * 鏃х郴缁熷悓姝ervice涓氬姟灞傚鐞�
+ * 
+ * @author ruoyi
+ * @date 2024-01-20
+ */
+@Service
+public class LegacySystemSyncServiceImpl implements ILegacySystemSyncService {
+    
+    private static final Logger log = LoggerFactory.getLogger(LegacySystemSyncServiceImpl.class);
+    
+    @Autowired
+    private LegacySystemConfig legacyConfig;
+    
+    @Autowired
+    private SysTaskMapper sysTaskMapper;
+    
+    @Autowired
+    private SysTaskEmergencyMapper sysTaskEmergencyMapper;
+    
+    @Autowired
+    private SysUserMapper sysUserMapper;
+    
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
+    
+    @Autowired
+    private SysTaskVehicleMapper sysTaskVehicleMapper;
+    
+    @Autowired
+    private SysTaskAssigneeMapper sysTaskAssigneeMapper;
+    
+    @Autowired
+    private VehicleInfoMapper vehicleInfoMapper;
+    
+    /**
+     * 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
+     */
+    @Override
+    @Transactional
+    public Long syncEmergencyTaskToLegacy(Long taskId) {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囦换鍔D: {}", taskId);
+            return null;
+        }
+        
+        try {
+            // 鏌ヨ浠诲姟淇℃伅
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+            if (task == null) {
+                log.error("浠诲姟涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+            
+            // 鍙悓姝ユ�ユ晳杞繍浠诲姟
+            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
+                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囧悓姝ワ紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+            
+            // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
+            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+            if (emergency == null) {
+                log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+            
+            // 濡傛灉宸茬粡鍚屾杩囷紝涓嶅啀閲嶅鍚屾
+            if (emergency.getLegacyServiceOrdId() != null && emergency.getLegacyServiceOrdId() > 0) {
+                log.info("浠诲姟宸插悓姝ヨ繃锛屼换鍔D: {}, ServiceOrdID: {}", taskId, emergency.getLegacyServiceOrdId());
+                return emergency.getLegacyServiceOrdId();
+            }
+            
+            // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
+            emergency.setSyncStatus(1);
+            sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+            
+            // 鏋勫缓璇锋眰鍙傛暟
+            Map<String, String> params = buildSyncParams(task, emergency);
+            
+            // 鍙戦�丠TTP璇锋眰
+            String response = sendHttpPost(legacyConfig.getEmergencyCreateUrl(), params);
+            
+            // 瑙f瀽鍝嶅簲
+            Long serviceOrdId = parseResponse(response);
+            
+            if (serviceOrdId != null && serviceOrdId > 0) {
+                // 鍚屾鎴愬姛锛屾洿鏂拌褰�
+                emergency.setLegacyServiceOrdId(serviceOrdId);
+                emergency.setSyncStatus(2); // 鍚屾鎴愬姛
+                emergency.setSyncTime(new Date());
+                emergency.setSyncErrorMsg(null);
+                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                
+                // 鏇存柊浠诲姟涓昏〃鍚屾鏍囪
+                task.setLegacySynced(1);
+                sysTaskMapper.updateSysTask(task);
+                
+                log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
+                return serviceOrdId;
+            } else {
+                // 鍚屾澶辫触
+                emergency.setSyncStatus(3); // 鍚屾澶辫触
+                emergency.setSyncTime(new Date());
+                emergency.setSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑ServiceOrdID: " + response);
+                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                
+                log.error("浠诲姟鍚屾澶辫触锛屼换鍔D: {}, 鍝嶅簲: {}", taskId, response);
+                return null;
+            }
+            
+        } catch (Exception e) {
+            log.error("鍚屾浠诲姟鍒版棫绯荤粺寮傚父锛屼换鍔D: {}", taskId, e);
+            
+            // 鏇存柊鍚屾鐘舵�佷负澶辫触
+            try {
+                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+                if (emergency != null) {
+                    emergency.setSyncStatus(3); // 鍚屾澶辫触
+                    emergency.setSyncTime(new Date());
+                    emergency.setSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
+                    sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                }
+            } catch (Exception ex) {
+                log.error("鏇存柊鍚屾鐘舵�佸け璐�", ex);
+            }
+            
+            return null;
+        }
+    }
+    
+    /**
+     * 鎵归噺鍚屾鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟
+     */
+    @Override
+    public int batchSyncPendingTasks() {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤");
+            return 0;
+        }
+        
+        try {
+            // 鏌ヨ鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟锛堝悓姝ョ姸鎬佷负0鎴�3鐨勪换鍔★級
+            List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingSyncTasks();
+            
+            int successCount = 0;
+            for (SysTaskEmergency emergency : pendingTasks) {
+                Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId());
+                if (serviceOrdId != null && serviceOrdId > 0) {
+                    successCount++;
+                }
+                
+                // 閬垮厤杩囦簬棰戠箒鐨勮姹�
+                try {
+                    Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                    break;
+                }
+            }
+            
+            log.info("鎵归噺鍚屾瀹屾垚锛屾�绘暟: {}, 鎴愬姛: {}", pendingTasks.size(), successCount);
+            return successCount;
+            
+        } catch (Exception e) {
+            log.error("鎵归噺鍚屾浠诲姟寮傚父", e);
+            return 0;
+        }
+    }
+    
+    /**
+     * 閲嶆柊鍚屾澶辫触鐨勪换鍔�
+     */
+    @Override
+    @Transactional
+    public boolean retrySyncTask(Long taskId) {
+        try {
+            // 閲嶇疆鍚屾鐘舵��
+            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+            if (emergency != null) {
+                emergency.setSyncStatus(0); // 閲嶇疆涓烘湭鍚屾
+                emergency.setLegacyServiceOrdId(null);
+                emergency.setSyncErrorMsg(null);
+                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+            }
+            
+            // 閲嶆柊鍚屾
+            Long serviceOrdId = syncEmergencyTaskToLegacy(taskId);
+            return serviceOrdId != null && serviceOrdId > 0;
+            
+        } catch (Exception e) {
+            log.error("閲嶆柊鍚屾浠诲姟澶辫触锛屼换鍔D: {}", taskId, e);
+            return false;
+        }
+    }
+    
+    /**
+     * 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛�
+     */
+    @Override
+    @Transactional
+    public Long syncDispatchOrderToLegacy(Long taskId) {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
+            return null;
+        }
+        
+        try {
+            // 鏌ヨ浠诲姟淇℃伅
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+            if (task == null) {
+                log.error("浠诲姟涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+            
+            // 鍙悓姝ユ�ユ晳杞繍浠诲姟
+            if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) {
+                log.info("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
+                return null;
+            }
+            
+            // 鏌ヨ鎬ユ晳杞繍鎵╁睍淇℃伅
+            SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+            if (emergency == null) {
+                log.error("鎬ユ晳杞繍鎵╁睍淇℃伅涓嶅瓨鍦紝浠诲姟ID: {}", taskId);
+                return null;
+            }
+            
+            // 濡傛灉宸茬粡鍚屾杩囷紝涓嶅啀閲嶅鍚屾
+            if (emergency.getLegacyDispatchOrdId() != null && emergency.getLegacyDispatchOrdId() > 0) {
+                log.info("璋冨害鍗曞凡鍚屾杩囷紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+                return emergency.getLegacyDispatchOrdId();
+            }
+            
+            // 蹇呴』鍏堝悓姝ユ湇鍔″崟
+            if (emergency.getLegacyServiceOrdId() == null || emergency.getLegacyServiceOrdId() <= 0) {
+                log.warn("鏈嶅姟鍗曟湭鍚屾锛屾棤娉曞悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
+                return null;
+            }
+            
+            // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
+            emergency.setDispatchSyncStatus(1);
+            sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+            
+            // 鏋勫缓璇锋眰鍙傛暟
+            Map<String, String> params = buildDispatchOrderParams(task, emergency);
+            
+            // 鍙戦�丠TTP璇锋眰
+            String response = sendHttpPost(legacyConfig.getDispatchCreateUrl(), params);
+            
+            // 瑙f瀽鍝嶅簲
+            Long dispatchOrdId = parseResponse(response);
+            
+            if (dispatchOrdId != null && dispatchOrdId > 0) {
+                // 鍚屾鎴愬姛锛屾洿鏂拌褰�
+                emergency.setLegacyDispatchOrdId(dispatchOrdId);
+                emergency.setDispatchSyncStatus(2); // 鍚屾鎴愬姛
+                emergency.setDispatchSyncTime(new Date());
+                emergency.setDispatchSyncErrorMsg(null);
+                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                
+                log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
+                return dispatchOrdId;
+            } else {
+                // 鍚屾澶辫触
+                emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
+                emergency.setDispatchSyncTime(new Date());
+                emergency.setDispatchSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑DispatchOrdID: " + response);
+                sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                
+                log.error("璋冨害鍗曞悓姝ュけ璐ワ紝浠诲姟ID: {}, 鍝嶅簲: {}", taskId, response);
+                return null;
+            }
+            
+        } catch (Exception e) {
+            log.error("鍚屾璋冨害鍗曞埌鏃х郴缁熷紓甯革紝浠诲姟ID: {}", taskId, e);
+            
+            // 鏇存柊鍚屾鐘舵�佷负澶辫触
+            try {
+                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+                if (emergency != null) {
+                    emergency.setDispatchSyncStatus(3); // 鍚屾澶辫触
+                    emergency.setDispatchSyncTime(new Date());
+                    emergency.setDispatchSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
+                    sysTaskEmergencyMapper.updateSysTaskEmergency(emergency);
+                }
+            } catch (Exception ex) {
+                log.error("鏇存柊璋冨害鍗曞悓姝ョ姸鎬佸け璐�", ex);
+            }
+            
+            return null;
+        }
+    }
+    
+    /**
+     * 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
+     */
+    @Override
+    public int batchSyncPendingDispatchOrders() {
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤");
+            return 0;
+        }
+        
+        try {
+            // 鏌ヨ宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曠殑浠诲姟
+            List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingDispatchSyncTasks();
+            
+            int successCount = 0;
+            for (SysTaskEmergency emergency : pendingTasks) {
+                Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId());
+                if (dispatchOrdId != null && dispatchOrdId > 0) {
+                    successCount++;
+                }
+                
+                // 閬垮厤杩囦簬棰戠箒鐨勮姹�
+                try {
+                    Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                    break;
+                }
+            }
+            
+            log.info("鎵归噺鍚屾璋冨害鍗曞畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}", pendingTasks.size(), successCount);
+            return successCount;
+            
+        } catch (Exception e) {
+            log.error("鎵归噺鍚屾璋冨害鍗曞紓甯�", e);
+            return 0;
+        }
+    }
+    
+    /**
+     * 鏋勫缓璋冨害鍗曞悓姝ュ弬鏁�
+     */
+    private Map<String, String> buildDispatchOrderParams(SysTask task, SysTaskEmergency emergency) {
+        Map<String, String> params = new HashMap<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        
+        // 鑾峰彇绠$悊鍛業D锛堝垱寤轰汉ID瀵瑰簲鐨凮A_UserID锛�
+        String adminID = this.getAdminID(task);
+        
+        // 鑾峰彇璋冨害鍗曠被鍨嬶紙浠庝换鍔℃墍灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佽幏鍙栵級
+        String dispatchOrdClass = "SA"; // 榛樿鍊�
+        if (task.getDeptId() != null) {
+            try {
+                SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
+                if (dept != null && StringUtils.isNotEmpty(dept.getDispatchOrderClass())) {
+                    dispatchOrdClass = dept.getDispatchOrderClass();
+                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 璋冨害鍗曠紪鐮�: {}", task.getDeptId(), dispatchOrdClass);
+                }
+            } catch (Exception e) {
+                log.error("鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: {}", task.getDeptId(), e);
+            }
+        }
+        params.put("AdminID", adminID);
+        
+        // 鍩烘湰淇℃伅
+        params.put("DispatchOrdClass", dispatchOrdClass);
+        params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString());
+        params.put("DispatchOrdState", "8"); // 璋冨害鍗曠姸鎬�
+        
+        // 鏃堕棿淇℃伅
+        if (task.getPlannedStartTime() != null) {
+            params.put("DispatchOrdTraSDTime", sdf.format(task.getPlannedStartTime())); // 鎷熷嚭鍙戞椂闂�
+        } else {
+            params.put("DispatchOrdTraSDTime", "");
+        }
+        params.put("DispatchOrd_NS_Time", task.getCreateTime() != null ? sdf.format(task.getCreateTime()) : sdf.format(new Date())); // 寮�鍗曟椂闂�
+        
+        // 杞﹁締淇℃伅 - 浠庝换鍔″叧鑱旂殑杞﹁締鑾峰彇CarID
+        Long carId = getTaskVehicleCarId(task.getTaskId());
+        params.put("DispatchOrdCarID", carId.toString());
+        
+        // 鑱旂郴浜轰俊鎭�
+        params.put("DispatchOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
+        params.put("DispatchOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
+        params.put("ServiceOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
+        params.put("ServiceOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
+        
+        // 鍦板潃淇℃伅
+        params.put("DispatchOrdTraStreet", StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), "")));
+        params.put("DispatchOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), "")));
+        params.put("DispatchOrdTraVia", ""); // 瀹為檯閫旂粡鍦�
+        
+        // 鎿嶄綔鍛戒护
+        params.put("DispatchOrd_Check", "0"); // 3=鐩存帴寮哄埗瀹屾垚
+        
+        // 缁╂晥鍜岃垂鐢�
+        params.put("DispatchOrdPerfomance", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0");
+        params.put("StretcherMoney", "0"); // 鎶媴鏋惰垂
+        params.put("AddMoneyType", ""); // 闄勫姞椤圭洰
+        params.put("AddMoney", "0"); // 闄勫姞椤圭洰璐圭敤
+        params.put("AddMoneyExplain", ""); // 闄勫姞椤圭洰璇存槑
+        
+        // 浜哄憳淇℃伅
+        params.put("EntourageName_aid1", ""); // 澶栨彺浜哄憳1
+        params.put("EntourageName_aid2", ""); // 澶栨彺浜哄憳2
+        params.put("DispatchOrd_NS_ID", adminID); // 璋冨害浜哄憳ID
+        params.put("RecommendedCar", ""); // 鎸囧畾杞﹀瀷
+        params.put("ServiceOrdTaskRemarks", StringUtils.nvl(task.getTaskDescription(), "")); // 鍖绘姢鍙稿娉�
+        
+        // 鐢佃瘽淇℃伅
+        params.put("Phone", StringUtils.nvl(emergency.getPatientPhone(), ""));
+        params.put("TEL_Time", sdf.format(new Date()));
+        params.put("TEL_Remarks", "鏂扮郴缁熷悓姝ュ垱寤鸿皟搴﹀崟");
+        
+        // 鏃堕暱淇℃伅
+        params.put("TimeLength_Program", "0"); // 澶у瀷娲诲姩淇濋殰鏃堕暱
+        params.put("TimeLength_ICU", "0"); // 灞呭ICU鏃堕暱
+        params.put("TimeLength_Wait", "0"); // 绛夊緟鏃堕暱
+        
+        // 閲岀▼鏁�
+        params.put("DispatchOrdTraStreetMileage", ""); // 寮�濮嬮噷绋嬫暟
+        params.put("DispatchOrdTraEndMileage", ""); // 缁撴潫閲岀▼鏁�
+        
+        // 鏈嶅姟鍗曠浉鍏充俊鎭紙浠巃dmin_save_24.gds 221-255琛岃ˉ鍏咃級
+        params.put("ServiceOrdPtCondition", StringUtils.nvl(emergency.getPatientCondition(), "")); // 鐥呮儏鎻忚堪
+        params.put("ServiceOrdPtDoctor", ""); // 鎮h�呭尰鐢�
+        params.put("ServiceOrdPtDoctorPhone", ""); // 鎮h�呭尰鐢熺數璇�
+        params.put("TransferModeID", ""); // 杞繍鏂瑰紡
+        params.put("ServiceOrdVIP", "0"); // VIP瀹㈡埛
+        params.put("ServiceOrdTraTxnPrice", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0"); // 鎴愪氦浠�
+        params.put("ServiceOrdTraPrePayment", "0"); // 闇�棰勪粯娆�
+        params.put("SettlementPrice", "0"); // 缁撶畻浠�
+        params.put("ServiceOrdTraPriceReason", ""); // 宸环鍘熷洜
+        params.put("ServiceOrd_CC_ID", ""); // 瀹㈡湇浜哄憳ID
+        params.put("ServiceOrd_Sale_ID", ""); // 閿�鍞汉鍛業D
+        params.put("ServiceOrdIntroducer", ""); // 浠嬬粛浜�
+        params.put("ServiceOrd_work_ID", ""); // 涓昏浼佸井瀹㈡湇ID
+        params.put("ServiceOrd_work_IDs", ""); // 鍏朵粬浼佸井瀹㈡湇ID
+        params.put("ServiceOrd_work_is", "0"); // 鏄惁浼佸井鎴愪氦
+        params.put("CommissionScenarioID", "0"); // 浼佸井缁╂晥鏂规
+        params.put("ServiceOrdApptDate", task.getPlannedStartTime() != null ? sdf.format(task.getPlannedStartTime()) : ""); // 棰勭害鏃堕棿
+        params.put("ServiceOrdPtDiagnosis", ""); // 璇婃柇
+        params.put("ServiceOrdOperationRemarks", "鏂扮郴缁熷悓姝ュ垱寤�"); // 鎿嶄綔澶囨敞
+        params.put("ServiceOrdEstimatedOrderDate", ""); // 棰勮娲惧崟鏃堕棿
+        params.put("ServiceOrdEstimatedOrderDateOld", ""); // 鍘熼璁℃淳鍗曟椂闂�
+        params.put("ServiceOrdViaDistance", "0"); // 涓�旇窛绂�
+        params.put("ServiceOrdTraDistance", emergency.getTransferDistance() != null ? emergency.getTransferDistance().toString() : "0"); // 璺濈
+        params.put("OrderLevel", "2"); // 鏌ョ湅绛夌骇
+        params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
+        params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
+        params.put("DirectionType", "0"); // 杞繍鍘诲悜
+        params.put("ServiceOrdPtOutHospID", emergency.getHospitalOutId() != null ? emergency.getHospitalOutId().toString() : "0"); // 杞嚭鍖婚櫌ID
+        params.put("ServiceOrdPtInHospID", emergency.getHospitalInId() != null ? emergency.getHospitalInId().toString() : "0"); // 杞叆鍖婚櫌ID
+        params.put("ServiceOrdPtOutHosp", StringUtils.nvl(emergency.getHospitalOutName(), "")); // 杞嚭鍖婚櫌
+        params.put("ServiceOrdTraVia", StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), ""))); // 杞嚭鍦板潃
+        params.put("ServiceOrdPtInHosp", StringUtils.nvl(emergency.getHospitalInName(), "")); // 杞叆鍖婚櫌
+        params.put("ServiceOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), ""))); // 杞叆鍦板潃
+        params.put("FromHQ2_is", "0"); // 骞垮窞鎬婚儴鎺ㄩ�佷换鍔℃爣璁�
+        
+        // 鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID锛岀敤浜庤瘖鏂璉CD锛�
+        // 鏍煎紡锛氶�楀彿鍒嗛殧鐨処D鍒楄〃锛屽 ",1,2,3,"
+        String ordIcdId = "";
+        if (StringUtils.isNotEmpty(emergency.getDiseaseIds())) {
+            // 灏嗗瓨鍌ㄧ殑 "1,2,3" 鏍煎紡杞崲涓烘棫绯荤粺瑕佹眰鐨� ",1,2,3," 鏍煎紡
+            ordIcdId = "," + emergency.getDiseaseIds() + ",";
+            log.info("鐥呮儏ID鍒楄〃宸茶缃紝浠诲姟ID: {}, OrdICD_ID: {}", task.getTaskId(), ordIcdId);
+        }
+        params.put("OrdICD_ID", ordIcdId);
+        params.put("OrdICD_ID_old", ""); // 鏃х梾鎯匢D鍒楄〃锛堢敤浜庡姣旀槸鍚﹂渶瑕佹洿鏂帮級
+        
+        // 鎵ц浜哄憳淇℃伅锛堥殢琛屼汉鍛橈級
+        syncTaskAssignees(task, params);
+        
+        return params;
+    }
+    
+    /**
+     * 鍚屾浠诲姟鎵ц浜哄憳淇℃伅鍒拌皟搴﹀崟闅忚浜哄憳鍙傛暟
+     * 
+     * @param task 浠诲姟淇℃伅
+     * @param params 璋冨害鍗曞弬鏁癕ap
+     */
+    private void syncTaskAssignees(SysTask task, Map<String, String> params) {
+        try {
+            // 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛�
+            List<TaskCreateVO.AssigneeInfo> assignees = getTaskAssignees(task.getTaskId());
+            
+            if (assignees == null || assignees.isEmpty()) {
+                log.warn("浠诲姟鏃犳墽琛屼汉鍛橈紝浠诲姟ID: {}", task.getTaskId());
+                // 璁剧疆榛樿绌哄��
+                params.put("EntourageLeadID", "");
+                params.put("Entourage_1", ""); // 鍙告満
+                params.put("Entourage_3", ""); // 鍖荤敓
+                params.put("Entourage_4", ""); // 鎶ゅ+
+                return;
+            }
+            
+            String leadEntourageId = ""; // 棰嗛槦鐨凟ntourageID
+            String driverOaId = "";      // 鍙告満鐨凮A_UserID
+            String doctorOaId = "";      // 鍖荤敓鐨凮A_UserID
+            String nurseOaId = "";       // 鎶ゅ+鐨凮A_UserID
+            
+            // 閬嶅巻鎵ц浜哄憳锛屾牴鎹鑹茬被鍨嬪垎閰嶅埌瀵瑰簲鐨凟ntourage鍙傛暟
+            for (int i = 0; i < assignees.size(); i++) {
+                TaskCreateVO.AssigneeInfo assignee = assignees.get(i);
+                Long userId = assignee.getUserId();
+                String userType = assignee.getUserType(); // 鐩存帴浣跨敤鍓嶇浼犻�掔殑瑙掕壊绫诲瀷
+                
+                if (userId == null) {
+                    continue;
+                }
+                
+                // 鏌ヨ鐢ㄦ埛鐨凮A_UserID
+                SysUser user = sysUserMapper.selectUserById(userId);
+                if (user == null || user.getOaUserId() == null) {
+                    log.warn("鎵ц浜哄憳淇℃伅涓嶅瓨鍦ㄦ垨鏈厤缃甇A_UserID锛岀敤鎴稩D: {}", userId);
+                    continue;
+                }
+                
+                String oaUserId = user.getOaUserId().toString();
+                
+                // 鏍规嵁鐢ㄦ埛绫诲瀷鍒嗛厤鍒板搴旂殑Entourage鍙傛暟
+                if ("driver".equals(userType)) {
+                    if (driverOaId.isEmpty()) {
+                        driverOaId = oaUserId;
+                        // 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
+                        if (i == 0 && leadEntourageId.isEmpty()) {
+                            leadEntourageId = "1"; // 鍙告満瀵瑰簲Entourage_1
+                        }
+                    }
+                } else if ("doctor".equals(userType)) {
+                    if (doctorOaId.isEmpty()) {
+                        doctorOaId = oaUserId;
+                        // 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
+                        if (i == 0 && leadEntourageId.isEmpty()) {
+                            leadEntourageId = "3"; // 鍖荤敓瀵瑰簲Entourage_3
+                        }
+                    }
+                } else if ("nurse".equals(userType)) {
+                    if (nurseOaId.isEmpty()) {
+                        nurseOaId = oaUserId;
+                        // 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
+                        if (i == 0 && leadEntourageId.isEmpty()) {
+                            leadEntourageId = "4"; // 鎶ゅ+瀵瑰簲Entourage_4
+                        }
+                    }
+                }
+            }
+            
+            // 璁剧疆鍙傛暟
+            params.put("EntourageLeadID", leadEntourageId);
+            params.put("Entourage_1", driverOaId);  // 鍙告満
+            params.put("Entourage_3", doctorOaId);  // 鍖荤敓
+            params.put("Entourage_4", nurseOaId);   // 鎶ゅ+
+            
+            log.info("浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: {}, 棰嗛槦ID: {}, 鍙告満: {}, 鍖荤敓: {}, 鎶ゅ+: {}", 
+                task.getTaskId(), leadEntourageId, driverOaId, doctorOaId, nurseOaId);
+            
+        } catch (Exception e) {
+            log.error("鍚屾浠诲姟鎵ц浜哄憳寮傚父锛屼换鍔D: {}", task.getTaskId(), e);
+            // 璁剧疆榛樿绌哄��
+            params.put("EntourageLeadID", "");
+            params.put("Entourage_1", "");
+            params.put("Entourage_3", "");
+            params.put("Entourage_4", "");
+        }
+    }
+    
+    /**
+     * 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛�
+     * 
+     * @param taskId 浠诲姟ID
+     * @return 鎵ц浜哄憳淇℃伅鍒楄〃
+     */
+    private List<TaskCreateVO.AssigneeInfo> getTaskAssignees(Long taskId) {
+        List<TaskCreateVO.AssigneeInfo> assignees = new java.util.ArrayList<>();
+        
+        try {
+            // 浠庢暟鎹簱鏌ヨ鎵ц浜哄憳淇℃伅锛堟寜鎺掑簭椤哄簭锛�
+            List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
+            
+            if (taskAssignees != null && !taskAssignees.isEmpty()) {
+                // 灏嗘暟鎹簱涓殑鎵ц浜哄憳杞崲涓篈ssigneeInfo瀵硅薄
+                for (SysTaskAssignee taskAssignee : taskAssignees) {
+                    TaskCreateVO.AssigneeInfo assignee = new TaskCreateVO.AssigneeInfo();
+                    assignee.setUserId(taskAssignee.getUserId());
+                    assignee.setUserName(taskAssignee.getUserName());
+                    assignee.setUserType(taskAssignee.getUserType());
+                    assignees.add(assignee);
+                }
+                
+                log.info("浠庢暟鎹簱鑾峰彇鎵ц浜哄憳淇℃伅鎴愬姛锛屼换鍔D: {}, 浜哄憳鏁伴噺: {}", taskId, assignees.size());
+                return assignees;
+            }
+            
+            // 濡傛灉鏁版嵁搴撲腑娌℃湁鎵ц浜哄憳淇℃伅锛屽皾璇曚粠浠诲姟鐨勪富瑕佹墽琛屼汉鑾峰彇
+            log.warn("鏁版嵁搴撲腑鏈壘鍒版墽琛屼汉鍛樹俊鎭紝灏濊瘯浠庝换鍔′富瑕佹墽琛屼汉鑾峰彇锛屼换鍔D: {}", taskId);
+            SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+            if (task != null && task.getAssigneeId() != null) {
+                SysUser user = sysUserMapper.selectUserById(task.getAssigneeId());
+                if (user != null) {
+                    TaskCreateVO.AssigneeInfo assignee = new TaskCreateVO.AssigneeInfo();
+                    assignee.setUserId(user.getUserId());
+                    assignee.setUserName(user.getNickName());
+                    assignee.setUserType(getUserType(user)); // 閫氳繃瑙掕壊鍒ゆ柇绫诲瀷
+                    assignees.add(assignee);
+                }
+            }
+        } catch (Exception e) {
+            log.error("鑾峰彇浠诲姟鎵ц浜哄憳淇℃伅寮傚父锛屼换鍔D: {}", taskId, e);
+        }
+        
+        return assignees;
+    }
+    
+    
+    /**
+     * 鍒ゆ柇鐢ㄦ埛绫诲瀷锛堝徃鏈�/鍖荤敓/鎶ゅ+/鍏朵粬锛�
+     * 鏍规嵁鐢ㄦ埛鐨勮鑹插悕绉版潵鍒ゆ柇
+     * 
+     * @param user 鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛绫诲瀷锛歞river/doctor/nurse/other
+     */
+    private String getUserType(SysUser user) {
+        String roleName = "";
+        
+        // 浠庣敤鎴风殑瑙掕壊鍒楄〃涓幏鍙栬鑹插悕绉�
+        if (user.getRoles() != null && !user.getRoles().isEmpty()) {
+            roleName = user.getRoles().get(0).getRoleName();
+        }
+        
+        // 鍒ゆ柇鏄惁涓哄徃鏈�
+        if (roleName != null && roleName.contains("鍙告満")) {
+            return "driver";
+        }
+        // 鍒ゆ柇鏄惁涓哄尰鐢�
+        if (roleName != null && roleName.contains("鍖荤敓")) {
+            return "doctor";
+        }
+        // 鍒ゆ柇鏄惁涓烘姢澹�
+        if (roleName != null && roleName.contains("鎶ゅ+")) {
+            return "nurse";
+        }
+        
+        // 鍏朵粬绫诲瀷锛岄粯璁や负鍙告満锛堜繚璇佽嚦灏戞湁涓�涓汉鍛橈級
+        log.warn("鐢ㄦ埛瑙掕壊鏃犳硶鍒ゆ柇绫诲瀷锛岄粯璁や负鍙告満锛岀敤鎴稩D: {}, 瑙掕壊: {}", user.getUserId(), roleName);
+        return "driver";
+    }
+    
+    /**
+     * 鑾峰彇浠诲姟鍏宠仈杞﹁締鐨勬棫绯荤粺CarID
+     * 
+     * @param taskId 浠诲姟ID
+     * @return CarID锛屽鏋滄湭鎵惧埌鍒欒繑鍥�0L
+     */
+    private Long getTaskVehicleCarId(Long taskId) {
+        try {
+            // 浠� sys_task_vehicle 琛ㄦ煡璇㈣溅杈咺D
+            List<SysTaskVehicle> taskVehicles = sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId);
+            if (taskVehicles != null && !taskVehicles.isEmpty()) {
+                // 鍙栫涓�涓叧鑱旂殑杞﹁締
+                Long vehicleId = taskVehicles.get(0).getVehicleId();
+                if (vehicleId != null) {
+                    // 浠� tb_vehicle_info 琛ㄨ幏鍙� car_id
+                    VehicleInfo vehicleInfo = vehicleInfoMapper.selectVehicleInfoById(vehicleId);
+                    if (vehicleInfo != null && vehicleInfo.getCarId() != null) {
+                        Long carId = vehicleInfo.getCarId().longValue();
+                        log.info("鑾峰彇浠诲姟鍏宠仈杞﹁締鐨凜arID鎴愬姛锛屼换鍔D: {}, 杞﹁締ID: {}, CarID: {}", 
+                            taskId, vehicleId, carId);
+                        return carId;
+                    } else {
+                        log.warn("杞﹁締淇℃伅涓湭閰嶇疆CarID锛屼换鍔D: {}, 杞﹁締ID: {}", taskId, vehicleId);
+                    }
+                } else {
+                    log.warn("浠诲姟杞﹁締鍏宠仈璁板綍涓溅杈咺D涓虹┖锛屼换鍔D: {}", taskId);
+                }
+            } else {
+                log.warn("浠诲姟鏈叧鑱旇溅杈嗭紝浠诲姟ID: {}", taskId);
+            }
+        } catch (Exception e) {
+            log.error("鏌ヨ浠诲姟鍏宠仈杞﹁締鐨凜arID寮傚父锛屼换鍔D: {}", taskId, e);
+        }
+        return 0L;
+    }
+    
+    private String getAdminID(SysTask task) {
+        String adminID="";
+if (task.getCreatorId() != null) {
+            try {
+                SysUser creator = sysUserMapper.selectUserById(task.getCreatorId());
+                if (creator != null && creator.getOaUserId() != null) {
+                    adminID = creator.getOaUserId().toString();
+                    log.info("鑾峰彇鍒涘缓浜篛A_UserID鎴愬姛锛岀敤鎴稩D: {}, OA_UserID: {}", task.getCreatorId(), adminID);
+                } else {
+                    log.warn("鍒涘缓浜烘湭閰嶇疆OA_UserID锛岀敤鎴稩D: {}", task.getCreatorId());
+                }
+            } catch (Exception e) {
+                log.error("鏌ヨ鍒涘缓浜篛A_UserID寮傚父锛岀敤鎴稩D: {}", task.getCreatorId(), e);
+            }
+        }
+        return adminID;
+    }
+    /**
+     * 鏋勫缓鍚屾鍙傛暟
+     */
+    private Map<String, String> buildSyncParams(SysTask task, SysTaskEmergency emergency) {
+        Map<String, String> params = new HashMap<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
+        Long taskId=task.getTaskId();
+        // 绠$悊鍛業D锛堝垱寤轰汉ID瀵瑰簲鐨凮A_UserID锛�
+        String adminID = this.getAdminID(task);
+        
+        params.put("adminID", adminID);
+        
+        // 鏈嶅姟鍗曞垎绫伙紙浠庝换鍔℃墍灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佽幏鍙栵級
+        String serviceOrdClass = "BF"; // ServiceOrdClass榛樿鍊�
+        if (task.getDeptId() != null) {
+            try {
+                SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
+                if (dept != null && StringUtils.isNotEmpty(dept.getServiceOrderClass())) {
+                    // 浣跨敤閮ㄩ棬鐨勬湇鍔″崟缂栫爜浣滀负ServiceOrdClass
+                    serviceOrdClass = dept.getServiceOrderClass();
+                    log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 閮ㄩ棬鍚嶇О: {}, 鏈嶅姟鍗曠紪鐮�: {}", 
+                        task.getDeptId(), dept.getDeptName(), serviceOrdClass);
+                } else {
+                    log.warn("浠诲姟鎵�灞為儴闂ㄦ湭閰嶇疆鏈嶅姟鍗曠紪鐮侊紝閮ㄩ棬ID: {}銆侀儴闂ㄥ悕绉�: {}锛屼娇鐢ㄩ粯璁ゅ��", 
+                        task.getDeptId(), dept != null ? dept.getDeptName() : "null");
+                }
+            } catch (Exception e) {
+                log.error("鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: {}", task.getDeptId(), e);
+            }
+        } else {
+            log.warn("浠诲姟鏈叧鑱旈儴闂紝浣跨敤榛樿鏈嶅姟鍗曠紪鐮�");
+        }
+        
+        // 鏈嶅姟鍗曟墽琛屽尯鍩燂紙浠庝换鍔$殑document_type_id鑾峰彇锛�
+        String serviceOrdAreaType = "1"; // 榛樿鍊�
+        if (StringUtils.isNotEmpty(emergency.getDocumentTypeId())) {
+            serviceOrdAreaType = emergency.getDocumentTypeId();
+            log.info("鑾峰彇鍗曟嵁绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 鍗曟嵁绫诲瀷ID: {}", task.getTaskId(), serviceOrdAreaType);
+        } else {
+            log.warn("浠诲姟鏈厤缃崟鎹被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", task.getTaskId());
+        }
+        
+        // 鍩虹淇℃伅
+        params.put("ServiceOrdClass", serviceOrdClass); // 浠庨儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佽幏鍙�
+        params.put("ServiceOrdAreaType", serviceOrdAreaType); // 浠庝换鍔$殑document_type_id鑾峰彇
+        
+        // 鏈嶅姟鍗曟墽琛岀被鍨嬶紙浠庝换鍔$殑task_type_id鑾峰彇锛�
+        String serviceOrdType = "1"; // 榛樿鍊�
+        if (StringUtils.isNotEmpty(emergency.getTaskTypeId())) {
+            serviceOrdType = emergency.getTaskTypeId();
+            log.info("鑾峰彇浠诲姟绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 浠诲姟绫诲瀷ID: {}", taskId, serviceOrdType);
+        } else {
+            log.warn("浠诲姟鏈厤缃换鍔$被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", taskId);
+        }
+        params.put("ServiceOrdType", serviceOrdType); // 鏈嶅姟鍗曟墽琛岀被鍨嬶紙浠庝换鍔$殑task_type_id鑾峰彇锛�
+        
+        params.put("ServiceOrdState", "2"); // 鏈嶅姟鍗曠姸鎬侊紙2=姝e紡鍗曪級
+        params.put("ServiceOrdStartDate", task.getCreateTime() != null ? sdfDate.format(task.getCreateTime()) : sdfDate.format(new Date()));
+        
+        // 棰勭害鏃堕棿
+        if (task.getPlannedStartTime() != null) {
+            params.put("ServiceOrdApptDate", sdf.format(task.getPlannedStartTime()));
+        }
+        
+        // 鑱旂郴浜轰俊鎭�
+        params.put("ServiceOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
+        params.put("ServiceOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
+        params.put("ServiceOrdCoTies", ""); // 鑱旂郴浜轰笌鎮h�呭叧绯�
+        
+        // 鎮h�呬俊鎭�
+        params.put("ServiceOrdPtName", StringUtils.nvl(emergency.getPatientName(), ""));
+        params.put("ServiceOrdPtAge", ""); // 骞撮緞
+        params.put("ServiceOrdPtKG", ""); // 浣撻噸
+        params.put("ServiceOrdPtSex", "0".equals(emergency.getPatientGender()) ? "鐢�" : "1".equals(emergency.getPatientGender()) ? "濂�" : "");
+        params.put("ServiceOrdPtNat", ""); // 鍥界睄
+        params.put("ServiceOrdPtIDCard", StringUtils.nvl(emergency.getPatientIdCard(), ""));
+        
+        // 鍖婚櫌淇℃伅
+        params.put("ServiceOrdPtOutHosp", StringUtils.nvl(emergency.getHospitalOutName(), ""));
+        params.put("ServiceOrdPtOutHospID", emergency.getHospitalOutId() != null ? emergency.getHospitalOutId().toString() : "0"); // 杞嚭鍖婚櫌ID
+        params.put("ServiceOrdPtInHosp", StringUtils.nvl(emergency.getHospitalInName(), ""));
+        params.put("ServiceOrdPtInHospID", emergency.getHospitalInId() != null ? emergency.getHospitalInId().toString() : "0"); // 杞叆鍖婚櫌ID
+        
+        // 绉戝淇℃伅
+        params.put("ServiceOrdPtServices", StringUtils.nvl(emergency.getHospitalOutDepartment(), ""));
+        params.put("ServiceOrdPtServicesID", StringUtils.nvl(emergency.getHospitalOutDepartmentId(), "0")); // 杞嚭绉戝ID
+        params.put("ServiceOrdPtInServices", StringUtils.nvl(emergency.getHospitalInDepartment(), ""));
+        params.put("ServiceOrdPtInServicesID", StringUtils.nvl(emergency.getHospitalInDepartmentId(), "0")); // 杞叆绉戝ID
+        
+        // 鐥呮儏淇℃伅
+        params.put("ServiceOrdPtDiagnosis", ""); // 璇婃柇
+        params.put("ServiceOrdPtCondition", StringUtils.nvl(emergency.getPatientCondition(), ""));
+        params.put("ServiceOrdTaskRemarks", StringUtils.nvl(task.getTaskDescription(), ""));
+        params.put("ServiceOrdPtDoctor", ""); // 鎮h�呭尰鐢�
+        params.put("ServiceOrdPtDoctorPhone", ""); // 鎮h�呭尰鐢熺數璇�
+        
+        // 鍦板潃淇℃伅
+        params.put("province", ""); // 鍑哄彂鍦扮渷浠�
+        params.put("city", ""); // 鍑哄彂鍦板煄甯�
+        params.put("ServiceOrdTraStreet", StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), "")));
+        params.put("ServiceOrdTraStreetCoo", ""); // 鍑哄彂鍦板潗鏍�
+        params.put("ServiceOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), "")));
+        params.put("ServiceOrdTraEndCoo", ""); // 鐩殑鍦板潗鏍�
+        params.put("ServiceOrdTraVia", ""); // 閫旂粡鍦�
+        
+        // 璺濈鍜屼环鏍间俊鎭�
+        params.put("ServiceOrdViaDistance", "0"); // 涓�旇窛绂�
+        params.put("ServiceOrdTraDistance", emergency.getTransferDistance() != null ? emergency.getTransferDistance().toString() : "0");
+        params.put("ServiceOrdTraDuration", ""); // 棰勮琛岀▼鏃堕棿
+        params.put("ServiceOrdTraUnitPrice", "0"); // 鍗曚环/鍏噷
+        params.put("ServiceOrdTraOfferPrice", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0");
+        params.put("ServiceOrdTraTxnPrice", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0");
+        params.put("ServiceOrdTraPrePayment", "0"); // 闇�棰勪粯娆�
+        params.put("SettlementPrice", "0"); // 缁撶畻浠�
+        params.put("ServiceOrdTraPriceReason", ""); // 宸环鍘熷洜
+        
+        // 鍏朵粬淇℃伅
+        params.put("Phone", StringUtils.nvl(emergency.getPatientPhone(), "")); // 鏉ョ數鐢佃瘽
+        params.put("TEL_Time", sdf.format(new Date())); // 鏉ョ數鏃堕棿
+        params.put("TEL_Remarks", "鏂扮郴缁熷悓姝�"); // 鏉ョ數澶囨敞
+        params.put("TransferModeID", ""); // 杞繍鏂瑰紡
+        params.put("ServiceOrdVIP", "0"); // VIP瀹㈡埛
+        params.put("ServiceOrd_CC_ID", ""); // 瀹㈡湇浜哄憳ID
+        params.put("ServiceOrd_Sale_ID", ""); // 閿�鍞汉鍛業D
+        params.put("ServiceOrdIntroducer", ""); // 浠嬬粛浜�
+        params.put("ServiceOrd_work_ID", ""); // 涓昏浼佸井瀹㈡湇ID
+        params.put("ServiceOrd_work_IDs", ""); // 鍏朵粬浼佸井瀹㈡湇ID
+        params.put("ServiceOrd_work_is", "0"); // 鏄惁浼佸井鎴愪氦
+        params.put("CommissionScenarioID", "0"); // 浼佸井缁╂晥鏂规
+        params.put("ServiceOrdOperationRemarks", "鏂扮郴缁熷悓姝ュ垱寤�"); // 鎿嶄綔澶囨敞
+        params.put("ServiceOrdEstimatedOrderDate", ""); // 棰勮娲惧崟鏃堕棿
+        params.put("ServiceOrdSource", "10"); // 璁㈠崟鏉ユ簮锛�10=鏂扮郴缁燂級
+        params.put("OrderLevel", "2"); // 鏌ョ湅绛夌骇
+        params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
+        params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
+        params.put("DirectionType", "0"); // 杞繍鍘诲悜
+        params.put("ServiceOrd_m", "1"); // 鏉ユ簮鍏ュ彛
+        params.put("FromHQ2_is", "0"); // 骞垮窞鎬婚儴鎺ㄩ�佷换鍔℃爣璁�
+        params.put("OrderPrice_Auto", "0"); // 璁㈠崟鑷姩鎶ヤ环鍙傝�冨��
+        
+        return params;
+    }
+    
+    /**
+     * 鍙戦�丠TTP POST璇锋眰
+     */
+    private String sendHttpPost(String urlString, Map<String, String> params) throws Exception {
+        URL url = new URL(urlString);
+        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+        
+        try {
+            // 璁剧疆杩炴帴灞炴��
+            conn.setRequestMethod("POST");
+            conn.setConnectTimeout(legacyConfig.getConnectTimeout());
+            conn.setReadTimeout(legacyConfig.getReadTimeout());
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            conn.setUseCaches(false);
+            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + legacyConfig.getCharset());
+            conn.setRequestProperty("Accept-Charset", legacyConfig.getCharset());
+            
+            // 鏋勫缓POST鏁版嵁
+            StringBuilder postData = new StringBuilder();
+            for (Map.Entry<String, String> entry : params.entrySet()) {
+                if (postData.length() > 0) {
+                    postData.append("&");
+                }
+                postData.append(URLEncoder.encode(entry.getKey(), legacyConfig.getCharset()));
+                postData.append("=");
+                postData.append(URLEncoder.encode(entry.getValue(), legacyConfig.getCharset()));
+            }
+            
+            // 鍙戦�丳OST鏁版嵁
+            try (OutputStream os = conn.getOutputStream()) {
+                os.write(postData.toString().getBytes(legacyConfig.getCharset()));
+                os.flush();
+            }
+
+
+            
+            // 璇诲彇鍝嶅簲
+            int responseCode = conn.getResponseCode();
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                try (BufferedReader reader = new BufferedReader(
+                        new InputStreamReader(conn.getInputStream(), legacyConfig.getCharset()))) {
+                    StringBuilder response = new StringBuilder();
+                    String line;
+                    while ((line = reader.readLine()) != null) {
+                        response.append(line);
+                    }
+                    return response.toString().trim();
+                }
+            } else {
+                log.error("璇锋眰澶辫触锛岃姹俇RL {},鍙傛暟 {}",urlString,postData);
+
+                throw new Exception("HTTP璇锋眰澶辫触锛屽搷搴旂爜: " + responseCode);
+            }
+            
+        } finally {
+            conn.disconnect();
+        }
+    }
+    
+    /**
+     * 瑙f瀽鏃х郴缁熷搷搴�
+     * 棰勬湡鏍煎紡: "OK:ServiceOrdID" 鎴栭敊璇俊鎭�
+     */
+    private Long parseResponse(String response) {
+        if (StringUtils.isEmpty(response)) {
+            return null;
+        }
+        
+        // 鍘婚櫎鍙兘鐨凥TML鏍囩鍜岀┖鐧藉瓧绗�
+        response = response.replaceAll("<[^>]*>", "").trim();
+        
+        // 妫�鏌ユ槸鍚︽垚鍔熷搷搴�
+        if (response.startsWith("OK:")) {
+            try {
+                String serviceOrdIdStr = response.substring(3).trim();
+                return Long.parseLong(serviceOrdIdStr);
+            } catch (NumberFormatException e) {
+                log.error("瑙f瀽ServiceOrdID澶辫触: {}", response, e);
+                return null;
+            }
+        } else {
+            log.error("鏃х郴缁熻繑鍥為敊璇�: {}", response);
+            return null;
+        }
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java
new file mode 100644
index 0000000..9ba45c0
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java
@@ -0,0 +1,113 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.system.domain.OrderClassDTO;
+import com.ruoyi.system.mapper.OrderClassMapper;
+import com.ruoyi.system.service.IOrderClassDataService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * SQL Server 璁㈠崟缂栫爜鏁版嵁鏌ヨ鏈嶅姟瀹炵幇
+ * 
+ * 鑱岃矗锛氫笓闂ㄨ礋璐d粠 SQL Server 鏌ヨ鏈嶅姟鍗曞拰璋冨害鍗曠紪鐮佹暟鎹�
+ * 
+ * 鏁版嵁娴佸悜锛歋QL Server 鈫� 杩斿洖 DTO 鍒楄〃
+ * 
+ * @author ruoyi
+ * @date 2025-10-19
+ */
+@Service
+@DataSource(DataSourceType.SQLSERVER)
+public class OrderClassDataServiceImpl implements IOrderClassDataService
+{
+    private static final Logger log = LoggerFactory.getLogger(OrderClassDataServiceImpl.class);
+
+    @Autowired
+    private OrderClassMapper orderClassMapper;
+
+    /**
+     * 浠� SQL Server 鏌ヨ鏈嶅姟鍗曠紪鐮佸垪琛�
+     * 
+     * SQL: SELECT vtext, vOrder2 FROM dictionary WHERE vtitle='OrderClass' AND vType=1
+     * 
+     * @return 鏈嶅姟鍗曠紪鐮佸垪琛�
+     */
+    @Override
+    public List<OrderClassDTO> getServiceOrderClass()
+    {
+        log.info("寮�濮嬩粠 SQL Server 鏌ヨ鏈嶅姟鍗曠紪鐮佹暟鎹�...");
+        List<OrderClassDTO> list = orderClassMapper.selectServiceOrderClass();
+        log.info("鎴愬姛鏌ヨ鍒� {} 鏉℃湇鍔″崟缂栫爜鏁版嵁", list != null ? list.size() : 0);
+        return list;
+    }
+
+    /**
+     * 浠� SQL Server 鏌ヨ璋冨害鍗曠紪鐮佸垪琛�
+     * 
+     * SQL: SELECT vtext, vOrder2 FROM dictionary WHERE vtitle='OrderClass' AND vType=2
+     * 
+     * @return 璋冨害鍗曠紪鐮佸垪琛�
+     */
+    @Override
+    public List<OrderClassDTO> getDispatchOrderClass()
+    {
+        log.info("寮�濮嬩粠 SQL Server 鏌ヨ璋冨害鍗曠紪鐮佹暟鎹�...");
+        List<OrderClassDTO> list = orderClassMapper.selectDispatchOrderClass();
+        log.info("鎴愬姛鏌ヨ鍒� {} 鏉¤皟搴﹀崟缂栫爜鏁版嵁", list != null ? list.size() : 0);
+        return list;
+    }
+
+    /**
+     * 浠� SQL Server 鏌ヨ鍗曟嵁绫诲瀷鍒楄〃锛圫erviceOrdAreaType锛�
+     * 
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrdAreaType' AND vType=1 ORDER BY vOrder
+     * 
+     * @return 鍗曟嵁绫诲瀷鍒楄〃
+     */
+    @Override
+    public List<OrderClassDTO> getServiceOrdAreaTypes()
+    {
+        log.info("寮�濮嬩粠 SQL Server 鏌ヨ鍗曟嵁绫诲瀷鏁版嵁...");
+        List<OrderClassDTO> list = orderClassMapper.selectServiceOrdAreaTypes();
+        log.info("鎴愬姛鏌ヨ鍒� {} 鏉″崟鎹被鍨嬫暟鎹�", list != null ? list.size() : 0);
+        return list;
+    }
+
+    /**
+     * 浠� SQL Server 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鍒楄〃锛圫erviceOrderType锛�
+     * 
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrderType' AND vType>=1 ORDER BY vOrder
+     * 
+     * @return 鏈嶅姟璁㈠崟绫诲瀷鍒楄〃
+     */
+    @Override
+    public List<OrderClassDTO> getServiceOrderTypes()
+    {
+        log.info("寮�濮嬩粠 SQL Server 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鏁版嵁...");
+        List<OrderClassDTO> list = orderClassMapper.selectServiceOrderTypes();
+        log.info("鎴愬姛鏌ヨ鍒� {} 鏉℃湇鍔¤鍗曠被鍨嬫暟鎹�", list != null ? list.size() : 0);
+        return list;
+    }
+
+    /**
+     * 浠� SQL Server 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛�
+     * 
+     * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
+     * 
+     * @return 鍖婚櫌绉戝鍒楄〃
+     */
+    @Override
+    public List<OrderClassDTO> getHospitalDepartments()
+    {
+        log.info("寮�濮嬩粠 SQL Server 鏌ヨ鍖婚櫌绉戝鏁版嵁...");
+        List<OrderClassDTO> list = orderClassMapper.selectHospitalDepartments();
+        log.info("鎴愬姛鏌ヨ鍒� {} 鏉″尰闄㈢瀹ゆ暟鎹�", list != null ? list.size() : 0);
+        return list;
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
index baaece3..499b06f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
@@ -4,6 +4,7 @@
 import java.util.Date;
 import java.util.List;
 import java.util.ArrayList;
+import java.util.stream.Collectors;
 import java.io.File;
 import java.io.IOException;
 
@@ -24,6 +25,7 @@
 import com.ruoyi.system.domain.SysTaskLog;
 import com.ruoyi.system.domain.SysTaskEmergency;
 import com.ruoyi.system.domain.SysTaskWelfare;
+import com.ruoyi.system.domain.SysTaskAssignee;
 import com.ruoyi.system.domain.vo.TaskQueryVO;
 import com.ruoyi.system.domain.vo.TaskCreateVO;
 import com.ruoyi.system.domain.vo.TaskUpdateVO;
@@ -35,9 +37,12 @@
 import com.ruoyi.system.mapper.SysTaskLogMapper;
 import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
 import com.ruoyi.system.mapper.SysTaskWelfareMapper;
+import com.ruoyi.system.mapper.SysTaskAssigneeMapper;
 import com.ruoyi.system.mapper.VehicleInfoMapper;
 import com.ruoyi.system.domain.VehicleInfo;
 import com.ruoyi.system.service.ISysTaskService;
+import com.ruoyi.system.service.ILegacySystemSyncService;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 浠诲姟绠$悊Service涓氬姟灞傚鐞�
@@ -67,7 +72,13 @@
     private SysTaskWelfareMapper sysTaskWelfareMapper;
     
     @Autowired
+    private SysTaskAssigneeMapper sysTaskAssigneeMapper;
+    
+    @Autowired
     private VehicleInfoMapper vehicleInfoMapper;
+
+    @Autowired(required = false)
+    private ILegacySystemSyncService legacySystemSyncService;
 
     /**
      * 鏌ヨ浠诲姟绠$悊
@@ -122,7 +133,8 @@
         task.setPlannedEndTime(createVO.getPlannedEndTime());
         task.setAssigneeId(createVO.getAssigneeId());
         task.setCreatorId(SecurityUtils.getUserId());
-        task.setDeptId(SecurityUtils.getDeptId());
+        // 浼樺厛浣跨敤鍓嶇浼犲叆鐨勯儴闂↖D锛屽鏋滄病鏈夊垯浣跨敤褰撳墠鐢ㄦ埛鐨勯儴闂↖D
+        task.setDeptId(createVO.getDeptId() != null ? createVO.getDeptId() : SecurityUtils.getDeptId());
         task.setCreateBy(SecurityUtils.getUsername());
         task.setCreateTime(DateUtils.getNowDate());
         task.setUpdateBy(SecurityUtils.getUsername());
@@ -196,6 +208,11 @@
             }
         }
         
+        // 淇濆瓨鎵ц浜哄憳淇℃伅锛堝寘鍚鑹茬被鍨嬶級
+        if (result > 0 && createVO.getAssignees() != null && !createVO.getAssignees().isEmpty()) {
+            saveTaskAssignees(task.getTaskId(), createVO.getAssignees());
+        }
+        
         // 淇濆瓨鎬ユ晳杞繍鎵╁睍淇℃伅
         if (result > 0 && "EMERGENCY_TRANSFER".equals(createVO.getTaskType())) {
             saveEmergencyInfo(task.getTaskId(), createVO);
@@ -210,6 +227,19 @@
         if (result > 0) {
             recordTaskLog(task.getTaskId(), "CREATE", "鍒涘缓浠诲姟", null, 
                          "浠诲姟绫诲瀷锛�" + createVO.getTaskType(), SecurityUtils.getUserId(), SecurityUtils.getUsername());
+        }
+        
+        // 寮傛鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
+        if (result > 0 && "EMERGENCY_TRANSFER".equals(createVO.getTaskType()) && legacySystemSyncService != null) {
+            final Long finalTaskId = task.getTaskId();
+            new Thread(() -> {
+                try {
+                    Thread.sleep(2000); // 绛夊緟2绉掞紝纭繚浜嬪姟宸叉彁浜�
+                    legacySystemSyncService.syncEmergencyTaskToLegacy(finalTaskId);
+                } catch (Exception e) {
+                    // 鍚屾澶辫触涓嶅奖鍝嶄富娴佺▼锛屼粎璁板綍鏃ュ織
+                }
+            }).start();
         }
         
         return result;
@@ -790,6 +820,46 @@
     }
 
     /**
+     * 淇濆瓨浠诲姟鎵ц浜哄憳淇℃伅锛堝寘鍚鑹茬被鍨嬶級
+     * 
+     * @param taskId 浠诲姟ID
+     * @param assignees 鎵ц浜哄憳淇℃伅鍒楄〃
+     */
+    private void saveTaskAssignees(Long taskId, java.util.List<TaskCreateVO.AssigneeInfo> assignees) {
+        if (assignees == null || assignees.isEmpty()) {
+            return;
+        }
+        
+        java.util.List<SysTaskAssignee> taskAssignees = new java.util.ArrayList<>();
+        Date now = DateUtils.getNowDate();
+        String currentUser = SecurityUtils.getUsername();
+        
+        for (int i = 0; i < assignees.size(); i++) {
+            TaskCreateVO.AssigneeInfo assigneeInfo = assignees.get(i);
+            
+            SysTaskAssignee taskAssignee = new SysTaskAssignee();
+            taskAssignee.setTaskId(taskId);
+            taskAssignee.setUserId(assigneeInfo.getUserId());
+            taskAssignee.setUserName(assigneeInfo.getUserName());
+            taskAssignee.setUserType(assigneeInfo.getUserType());
+            // 绗竴涓墽琛屼汉鍛樹负涓昏鎵ц浜�
+            taskAssignee.setIsPrimary(i == 0 ? "1" : "0");
+            taskAssignee.setSortOrder(i);
+            taskAssignee.setCreateTime(now);
+            taskAssignee.setCreateBy(currentUser);
+            taskAssignee.setUpdateTime(now);
+            taskAssignee.setUpdateBy(currentUser);
+            
+            taskAssignees.add(taskAssignee);
+        }
+        
+        // 鎵归噺淇濆瓨
+        if (!taskAssignees.isEmpty()) {
+            sysTaskAssigneeMapper.batchInsertSysTaskAssignee(taskAssignees);
+        }
+    }
+    
+    /**
      * 淇濆瓨鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅
      * 
      * @param taskId 浠诲姟ID
@@ -811,8 +881,10 @@
         
         // 璁剧疆杞嚭鍖婚櫌淇℃伅
         if (createVO.getHospitalOut() != null) {
+            emergencyInfo.setHospitalOutId(createVO.getHospitalOut().getId());
             emergencyInfo.setHospitalOutName(createVO.getHospitalOut().getName());
             emergencyInfo.setHospitalOutDepartment(createVO.getHospitalOut().getDepartment());
+            emergencyInfo.setHospitalOutDepartmentId(createVO.getHospitalOut().getDepartmentId());
             emergencyInfo.setHospitalOutBedNumber(createVO.getHospitalOut().getBedNumber());
             emergencyInfo.setHospitalOutAddress(createVO.getHospitalOut().getAddress());
             emergencyInfo.setHospitalOutLongitude(createVO.getHospitalOut().getLongitude());
@@ -821,8 +893,10 @@
         
         // 璁剧疆杞叆鍖婚櫌淇℃伅
         if (createVO.getHospitalIn() != null) {
+            emergencyInfo.setHospitalInId(createVO.getHospitalIn().getId());
             emergencyInfo.setHospitalInName(createVO.getHospitalIn().getName());
             emergencyInfo.setHospitalInDepartment(createVO.getHospitalIn().getDepartment());
+            emergencyInfo.setHospitalInDepartmentId(createVO.getHospitalIn().getDepartmentId());
             emergencyInfo.setHospitalInBedNumber(createVO.getHospitalIn().getBedNumber());
             emergencyInfo.setHospitalInAddress(createVO.getHospitalIn().getAddress());
             emergencyInfo.setHospitalInLongitude(createVO.getHospitalIn().getLongitude());
@@ -833,6 +907,20 @@
         emergencyInfo.setTransferDistance(createVO.getTransferDistance());
         emergencyInfo.setTransferPrice(createVO.getPrice());
         
+        // 璁剧疆鍗曟嵁绫诲瀷ID
+        emergencyInfo.setDocumentTypeId(createVO.getDocumentTypeId());
+        
+        // 璁剧疆浠诲姟绫诲瀷ID
+        emergencyInfo.setTaskTypeId(createVO.getTaskTypeId());
+        
+        // 璁剧疆鐥呮儏ID鍒楄〃锛堝皢List<Long>杞崲涓洪�楀彿鍒嗛殧鐨勫瓧绗︿覆锛�
+        if (createVO.getDiseaseIds() != null && !createVO.getDiseaseIds().isEmpty()) {
+            String diseaseIdsStr = createVO.getDiseaseIds().stream()
+                .map(String::valueOf)
+                .collect(Collectors.joining(","));
+            emergencyInfo.setDiseaseIds(diseaseIdsStr);
+        }
+        
         // 绯荤粺瀛楁
         emergencyInfo.setCreateTime(DateUtils.getNowDate());
         emergencyInfo.setUpdateTime(DateUtils.getNowDate());
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 0aa82fb..2687fab 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -117,6 +117,18 @@
     }
 
     /**
+     * 閫氳繃鎵嬫満鍙锋煡璇㈢敤鎴�
+     * 
+     * @param phonenumber 鎵嬫満鍙�
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+    @Override
+    public SysUser selectUserByPhonenumber(String phonenumber)
+    {
+        return userMapper.checkPhoneUnique(phonenumber);
+    }
+
+    /**
      * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
      * 
      * @param userId 鐢ㄦ埛ID
@@ -503,6 +515,31 @@
                 {
                     BeanValidators.validateWithException(validator, user);
                     deptService.checkDeptDataScope(user.getDeptId());
+                    
+                    // 鏍¢獙鎵嬫満鍙峰敮涓�鎬�
+                    if (StringUtils.isNotEmpty(user.getPhonenumber()))
+                    {
+                        SysUser phoneCheck = userMapper.checkPhoneUnique(user.getPhonenumber());
+                        if (StringUtils.isNotNull(phoneCheck))
+                        {
+                            failureNum++;
+                            failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆澶辫触锛氭墜鏈哄彿鐮� " + user.getPhonenumber() + " 宸茶鐢ㄦ埛 " + phoneCheck.getUserName() + " 浣跨敤");
+                            continue;
+                        }
+                    }
+                    
+                    // 鏍¢獙閭鍞竴鎬�
+                    if (StringUtils.isNotEmpty(user.getEmail()))
+                    {
+                        SysUser emailCheck = userMapper.checkEmailUnique(user.getEmail());
+                        if (StringUtils.isNotNull(emailCheck))
+                        {
+                            failureNum++;
+                            failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆澶辫触锛氶偖绠� " + user.getEmail() + " 宸茶鐢ㄦ埛 " + emailCheck.getUserName() + " 浣跨敤");
+                            continue;
+                        }
+                    }
+                    
                     String password = configService.selectConfigByKey("sys.user.initPassword");
                     user.setPassword(SecurityUtils.encryptPassword(password));
                     user.setCreateBy(operName);
@@ -516,6 +553,31 @@
                     checkUserAllowed(u);
                     checkUserDataScope(u.getUserId());
                     deptService.checkDeptDataScope(user.getDeptId());
+                    
+                    // 鏍¢獙鎵嬫満鍙峰敮涓�鎬э紙鎺掗櫎鑷繁锛�
+                    if (StringUtils.isNotEmpty(user.getPhonenumber()))
+                    {
+                        SysUser phoneCheck = userMapper.checkPhoneUnique(user.getPhonenumber());
+                        if (StringUtils.isNotNull(phoneCheck) && !phoneCheck.getUserId().equals(u.getUserId()))
+                        {
+                            failureNum++;
+                            failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 鏇存柊澶辫触锛氭墜鏈哄彿鐮� " + user.getPhonenumber() + " 宸茶鐢ㄦ埛 " + phoneCheck.getUserName() + " 浣跨敤");
+                            continue;
+                        }
+                    }
+                    
+                    // 鏍¢獙閭鍞竴鎬э紙鎺掗櫎鑷繁锛�
+                    if (StringUtils.isNotEmpty(user.getEmail()))
+                    {
+                        SysUser emailCheck = userMapper.checkEmailUnique(user.getEmail());
+                        if (StringUtils.isNotNull(emailCheck) && !emailCheck.getUserId().equals(u.getUserId()))
+                        {
+                            failureNum++;
+                            failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 鏇存柊澶辫触锛氶偖绠� " + user.getEmail() + " 宸茶鐢ㄦ埛 " + emailCheck.getUserName() + " 浣跨敤");
+                            continue;
+                        }
+                    }
+                    
                     user.setUserId(u.getUserId());
                     user.setUpdateBy(operName);
                     userMapper.updateUser(user);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java
index 44e8fa9..c82a875 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java
@@ -200,7 +200,17 @@
         
         if (StringUtils.isNotEmpty(dto.getPhonenumber()))
         {
-            existingUser.setPhonenumber(dto.getPhonenumber());
+            // 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡琚叾浠栫敤鎴蜂娇鐢紙鎺掗櫎鑷繁锛�
+            SysUser phoneCheck = sysUserMapper.checkPhoneUnique(dto.getPhonenumber());
+            if (StringUtils.isNotNull(phoneCheck) && !phoneCheck.getUserId().equals(existingUser.getUserId()))
+            {
+                log.warn("鏇存柊鐢ㄦ埛 {} 澶辫触锛屾墜鏈哄彿 {} 宸茶鐢ㄦ埛 {} 浣跨敤锛岃烦杩囨墜鏈哄彿鏇存柊", 
+                    existingUser.getUserName(), dto.getPhonenumber(), phoneCheck.getUserName());
+            }
+            else
+            {
+                existingUser.setPhonenumber(dto.getPhonenumber());
+            }
         }
         
         if (StringUtils.isNotEmpty(dto.getSex()))
@@ -239,6 +249,14 @@
         
         if (StringUtils.isNotEmpty(dto.getPhonenumber()))
         {
+            // 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡琚叾浠栫敤鎴蜂娇鐢�
+            SysUser phoneCheck = sysUserMapper.checkPhoneUnique(dto.getPhonenumber());
+            if (StringUtils.isNotNull(phoneCheck))
+            {
+                log.warn("鍒涘缓鐢ㄦ埛澶辫触锛屾墜鏈哄彿 {} 宸茶鐢ㄦ埛 {} 浣跨敤锛岃烦杩囩敤鎴� {}", 
+                    dto.getPhonenumber(), phoneCheck.getUserName(), dto.getUserName());
+                return; // 璺宠繃鍒涘缓
+            }
             newUser.setPhonenumber(dto.getPhonenumber());
         }
         
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncDataServiceImpl.java
new file mode 100644
index 0000000..b367485
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncDataServiceImpl.java
@@ -0,0 +1,68 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.system.domain.VehicleSyncDTO;
+import com.ruoyi.system.mapper.VehicleSyncMapper;
+import com.ruoyi.system.service.IVehicleSyncDataService;
+
+import java.util.List;
+
+/**
+ * SQL Server 杞﹁締鏁版嵁鏌ヨ鏈嶅姟瀹炵幇
+ * 
+ * 鑱岃矗锛氫笓闂ㄨ礋璐d粠 SQL Server 鏌ヨ杞﹁締鏁版嵁
+ * 
+ * 鏁版嵁娴佸悜锛歋QL Server 鈫� 杩斿洖 DTO 鍒楄〃
+ * 
+ * @author ruoyi
+ * @date 2025-10-20
+ */
+@Service
+@DataSource(DataSourceType.SQLSERVER)
+public class VehicleSyncDataServiceImpl implements IVehicleSyncDataService
+{
+    private static final Logger log = LoggerFactory.getLogger(VehicleSyncDataServiceImpl.class);
+
+    @Autowired
+    private VehicleSyncMapper vehicleSyncMapper;
+
+    /**
+     * 浠� SQL Server 鏌ヨ鎵�鏈夋甯哥姸鎬佺殑杞﹁締鏁版嵁
+     * 
+     * 娉ㄦ剰锛歏ehicleSyncMapper 涓婃湁 @DataSource(DataSourceType.SQLSERVER) 娉ㄨВ
+     * 姝ゆ柟娉曚細鑷姩鍒囨崲鍒� SQL Server 鏁版嵁婧愭墽琛屾煡璇�
+     * 
+     * @return 杞﹁締鍒楄〃
+     */
+    @Override
+    public List<VehicleSyncDTO> getVehiclesFromSqlServer()
+    {
+        try
+        {
+            log.info("寮�濮嬩粠 SQL Server 鏌ヨ杞﹁締鏁版嵁...");
+            
+            // 璋冪敤 Mapper 鏌ヨ SQL Server 鏁版嵁
+            // @DataSource 娉ㄨВ浼氳嚜鍔ㄥ垏鎹㈡暟鎹簮
+            List<VehicleSyncDTO> vehicles = vehicleSyncMapper.selectVehiclesFromSqlServer();
+            
+            if (vehicles == null || vehicles.isEmpty())
+            {
+                log.warn("鏈粠 SQL Server 鏌ヨ鍒拌溅杈嗘暟鎹�");
+                return vehicles;
+            }
+            
+            log.info("浠� SQL Server 鏌ヨ鍒� {} 鏉¤溅杈嗘暟鎹�", vehicles.size());
+            return vehicles;
+        }
+        catch (Exception e)
+        {
+            log.error("浠� SQL Server 鏌ヨ杞﹁締鏁版嵁澶辫触", e);
+            throw new RuntimeException("鏌ヨ SQL Server 杞﹁締鏁版嵁澶辫触: " + e.getMessage(), e);
+        }
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java
new file mode 100644
index 0000000..dba60e7
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java
@@ -0,0 +1,307 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.system.domain.VehicleInfo;
+import com.ruoyi.system.domain.VehicleSyncDTO;
+import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.system.service.IVehicleInfoService;
+import com.ruoyi.system.service.IVehicleSyncDataService;
+import com.ruoyi.system.service.IVehicleSyncService;
+import org.apache.commons.lang3.StringUtils;
+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.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 杞﹁締鍚屾鏈嶅姟瀹炵幇
+ * 
+ * 鑱岃矗锛氬皢浠� SQL Server 鏌ヨ鍒扮殑杞﹁締鏁版嵁鍚屾鍒� MySQL
+ * 
+ * 鏁版嵁娴佸悜锛氭帴鏀� DTO 鈫� 鍚屾鍒� MySQL
+ * 
+ * @author ruoyi
+ * @date 2025-10-20
+ */
+@Service
+public class VehicleSyncServiceImpl implements IVehicleSyncService
+{
+    private static final Logger log = LoggerFactory.getLogger(VehicleSyncServiceImpl.class);
+
+    @Autowired
+    private IVehicleInfoService vehicleInfoService;
+
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
+
+
+    /**
+     * 鍚屾杞﹁締鏁版嵁鍒癕ySQL
+     * 
+     * @param vehicles 浠嶴QL Server鏌ヨ鐨勮溅杈嗗垪琛�
+     * @return 鍚屾缁撴灉
+     */
+    @Override
+    @Transactional
+    public AjaxResult syncVehicles(List<VehicleSyncDTO> vehicles)
+    {
+        if (vehicles == null || vehicles.isEmpty())
+        {
+            return AjaxResult.error("杞﹁締鏁版嵁涓虹┖锛屾棤娉曞悓姝�");
+        }
+
+        try
+        {
+            log.info("寮�濮嬪悓姝� {} 鏉¤溅杈嗘暟鎹埌 MySQL...", vehicles.size());
+
+            int insertCount = 0;
+            int updateCount = 0;
+            int skipCount = 0;
+            Map<String, String> errorMessages = new HashMap<>();
+
+            for (VehicleSyncDTO vehicleDTO : vehicles)
+            {
+                try
+                {
+                    // 鎻愬彇杞︾墝鍙凤紙鍘婚櫎鎷彿涓殑鍐呭锛�
+                    String plateNumber = extractPlateNumber(vehicleDTO.getCarLicense());
+                    
+                    if (StringUtils.isBlank(plateNumber))
+                    {
+                        log.warn("杞﹁締 CarID={} 杞︾墝鍙蜂负绌猴紝璺宠繃鍚屾", vehicleDTO.getCarId());
+                        skipCount++;
+                        continue;
+                    }
+
+                    // 鏌ヨ杞﹁締鏄惁瀛樺湪
+                    VehicleInfo existingVehicle = findVehicleByPlateNumber(plateNumber);
+
+                    // 瑙f瀽閮ㄩ棬淇℃伅
+                    Long deptId = parseDeptIdFromCarOrdClass(vehicleDTO.getCarOrdClass());
+
+                    if (existingVehicle != null)
+                    {
+                        // 鏇存柊杞﹁締淇℃伅
+                        existingVehicle.setCarId(vehicleDTO.getCarId());
+                        existingVehicle.setDeptId(deptId);
+                        // 鍙互閫夋嫨鏄惁鏇存柊鍏朵粬瀛楁
+                        vehicleInfoService.updateVehicleInfo(existingVehicle);
+                        updateCount++;
+                        log.debug("鏇存柊杞﹁締: {} (CarID={}), 閮ㄩ棬ID={}", plateNumber, vehicleDTO.getCarId(), deptId);
+                    }
+                    else
+                    {
+                        // 鏂板杞﹁締淇℃伅
+                        VehicleInfo newVehicle = new VehicleInfo();
+                        newVehicle.setVehicleNo(plateNumber);
+                        newVehicle.setCarId(vehicleDTO.getCarId());
+                        newVehicle.setDeptId(deptId);
+                        newVehicle.setStatus("0");
+                        newVehicle.setPlatformCode("LEGACY"); // 鏍囪涓烘棫绯荤粺鍚屾
+                        newVehicle.setRemark("浠庢棫绯荤粺鍚屾锛孋arID: " + vehicleDTO.getCarId());
+                        vehicleInfoService.insertVehicleInfo(newVehicle);
+                        insertCount++;
+                        log.debug("鏂板杞﹁締: {} (CarID={}), 閮ㄩ棬ID={}", plateNumber, vehicleDTO.getCarId(), deptId);
+                    }
+                }
+                catch (Exception e)
+                {
+                    String errorMsg = String.format("鍚屾杞﹁締 CarID=%d 澶辫触: %s", 
+                            vehicleDTO.getCarId(), e.getMessage());
+                    log.error(errorMsg, e);
+                    errorMessages.put("CarID_" + vehicleDTO.getCarId(), errorMsg);
+                }
+            }
+
+            String resultMsg = String.format(
+                    "杞﹁締鍚屾瀹屾垚 - 鏂板: %d, 鏇存柊: %d, 璺宠繃: %d, 澶辫触: %d",
+                    insertCount, updateCount, skipCount, errorMessages.size());
+
+            log.info(resultMsg);
+
+            Map<String, Object> result = new HashMap<>();
+            result.put("insertCount", insertCount);
+            result.put("updateCount", updateCount);
+            result.put("skipCount", skipCount);
+            result.put("errorCount", errorMessages.size());
+            result.put("errors", errorMessages);
+
+            if (errorMessages.isEmpty())
+            {
+                return AjaxResult.success(resultMsg, result);
+            }
+            else
+            {
+                return AjaxResult.warn(resultMsg, result);
+            }
+        }
+        catch (Exception e)
+        {
+            log.error("鍚屾杞﹁締鏁版嵁鍒� MySQL 澶辫触", e);
+            return AjaxResult.error("鍚屾澶辫触: " + e.getMessage());
+        }
+    }
+
+
+    /**
+     * 鎻愬彇杞︾墝鍙凤紙鍘婚櫎鎷彿涓殑鍐呭锛�
+     * 渚嬪锛氭禉A12345锛堝椹帮級 -> 娴橝12345
+     * 
+     * @param carLicense 鍘熷杞︾墝鍙�
+     * @return 鎻愬彇鍚庣殑杞︾墝鍙�
+     */
+    private String extractPlateNumber(String carLicense)
+    {
+        if (StringUtils.isBlank(carLicense))
+        {
+            return null;
+        }
+
+        // 鍘婚櫎绌烘牸
+        String license = carLicense.trim();
+        
+        // 鏌ユ壘宸︽嫭鍙蜂綅缃紙鏀寔涓枃鍜岃嫳鏂囨嫭鍙凤級
+        int leftBracketIndex = license.indexOf('(');
+        int leftBracketIndexCn = license.indexOf('锛�');
+        
+        // 鍙栨渶灏忕殑鏈夋晥鎷彿浣嶇疆
+        int bracketIndex = -1;
+        if (leftBracketIndex >= 0 && leftBracketIndexCn >= 0)
+        {
+            bracketIndex = Math.min(leftBracketIndex, leftBracketIndexCn);
+        }
+        else if (leftBracketIndex >= 0)
+        {
+            bracketIndex = leftBracketIndex;
+        }
+        else if (leftBracketIndexCn >= 0)
+        {
+            bracketIndex = leftBracketIndexCn;
+        }
+        
+        // 濡傛灉鎵惧埌鎷彿锛屾埅鍙栨嫭鍙峰墠鐨勯儴鍒嗭紱鍚﹀垯杩斿洖鍘熷瓧绗︿覆
+        if (bracketIndex > 0)
+        {
+            return license.substring(0, bracketIndex).trim();
+        }
+        
+        return license;
+    }
+
+    /**
+     * 鏍规嵁杞︾墝鍙锋煡鎵捐溅杈嗭紙妯$硦鍖归厤锛�
+     * 
+     * @param plateNumber 杞︾墝鍙�
+     * @return 杞﹁締淇℃伅
+     */
+    private VehicleInfo findVehicleByPlateNumber(String plateNumber)
+    {
+        // 鍏堝皾璇曠簿纭尮閰�
+        VehicleInfo vehicle = vehicleInfoService.selectVehicleInfoByPlateNumber(plateNumber);
+        
+        if (vehicle != null)
+        {
+            return vehicle;
+        }
+        
+        // 濡傛灉绮剧‘鍖归厤澶辫触锛屽皾璇曟ā绯婂尮閰嶏紙鏌ヨ鎵�鏈夎溅杈嗭紝鎵惧埌鍖呭惈璇ヨ溅鐗屽彿鐨勶級
+        VehicleInfo query = new VehicleInfo();
+        List<VehicleInfo> allVehicles = vehicleInfoService.selectVehicleInfoList(query);
+        
+        for (VehicleInfo v : allVehicles)
+        {
+            if (StringUtils.isNotBlank(v.getVehicleNo()))
+            {
+                // 濡傛灉鏁版嵁搴撲腑鐨勮溅鐗屽彿鍖呭惈鏌ヨ鐨勮溅鐗屽彿锛屾垨鏌ヨ鐨勮溅鐗屽彿鍖呭惈鏁版嵁搴撲腑鐨勮溅鐗屽彿
+                String dbPlateNumber = extractPlateNumber(v.getVehicleNo());
+                if (plateNumber.contains(dbPlateNumber) || dbPlateNumber.contains(plateNumber))
+                {
+                    return v;
+                }
+            }
+        }
+        
+        return null;
+    }
+
+    /**
+     * 浠嶤arOrdClass瑙f瀽閮ㄩ棬ID
+     * CarOrdClass鏍煎紡鍙兘鏄細ZB銆丠B.TI绛�
+     * 闇�瑕佹媶鍒嗗苟鍦╯ys_dept涓尮閰峝ispatch_order_class瀛楁
+     * 
+     * @param carOrdClass 杞﹁締鍗曟嵁绫诲瀷缂栫爜
+     * @return 閮ㄩ棬ID锛屽鏋滄湭鎵惧埌杩斿洖null
+     */
+    private Long parseDeptIdFromCarOrdClass(String carOrdClass)
+    {
+        if (StringUtils.isBlank(carOrdClass))
+        {
+            log.debug("CarOrdClass涓虹┖锛屾棤娉曡В鏋愰儴闂�");
+            return null;
+        }
+
+        // 鎷嗗垎CarOrdClass锛屽彲鑳界殑鍒嗛殧绗︼細. , 绌烘牸
+        String[] codes = carOrdClass.split("[.,\\s]+");
+        
+        for (String code : codes)
+        {
+            if (StringUtils.isBlank(code))
+            {
+                continue;
+            }
+            
+            code = code.trim();
+            
+            // 鏌ヨ鍖归厤dispatch_order_class鐨勯儴闂�
+            SysDept dept = findDeptByDispatchOrderClass(code);
+            if (dept != null)
+            {
+                log.debug("閫氳繃dispatch_order_class='{}' 鎵惧埌閮ㄩ棬: {} (ID={})", 
+                        code, dept.getDeptName(), dept.getDeptId());
+                return dept.getDeptId();
+            }
+        }
+        
+        log.warn("鏈壘鍒板尮閰岰arOrdClass='{}' 鐨勯儴闂�", carOrdClass);
+        return null;
+    }
+
+    /**
+     * 鏍规嵁dispatch_order_class鏌ヨ閮ㄩ棬
+     * 
+     * @param dispatchOrderClass 璋冨害鍗曠紪鐮�
+     * @return 閮ㄩ棬淇℃伅
+     */
+    private SysDept findDeptByDispatchOrderClass(String dispatchOrderClass)
+    {
+        if (StringUtils.isBlank(dispatchOrderClass))
+        {
+            return null;
+        }
+
+        try
+        {
+            SysDept query = new SysDept();
+            query.setDispatchOrderClass(dispatchOrderClass);
+            List<SysDept> depts = sysDeptMapper.selectDeptList(query);
+            
+            if (depts != null && !depts.isEmpty())
+            {
+                // 杩斿洖绗竴涓尮閰嶇殑閮ㄩ棬
+                return depts.get(0);
+            }
+        }
+        catch (Exception e)
+        {
+            log.error("鏌ヨdispatch_order_class='{}' 鐨勯儴闂ㄥけ璐�", dispatchOrderClass, e);
+        }
+        
+        return null;
+    }
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml
index 6936572..c77b091 100644
--- a/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml
@@ -22,7 +22,7 @@
         <result property="hospLevel" column="HospLevel" />
     </resultMap>
 
-    <select id="searchHospitals" parameterType="String" resultMap="HospDataResult">
+    <select id="searchHospitals" resultMap="HospDataResult">
         SELECT TOP 100
             HospID, HospName, HospCityID, HospShort, 
             HopsProvince, HopsCity, HopsArea, HospAddress, 
@@ -30,9 +30,19 @@
             HospIntroducerID, HospIntroducerDate, HospLevel
         FROM HospData
         WHERE 1=1
+        <!-- 鍦板煙杩囨护锛氬HospProvince, HospCity, HospArea杩涜OR鍖归厤 -->
+        <if test="region != null and region != ''">
+            AND (HopsProvince LIKE '%' + #{region} + '%' 
+                 OR HopsCity LIKE '%' + #{region} + '%'
+                 OR HopsArea LIKE '%' + #{region} + '%')
+        </if>
+        <!-- 鍏抽敭璇嶈繃婊わ細瀵瑰涓瓧娈佃繘琛孫R鍖归厤 -->
         <if test="keyword != null and keyword != ''">
-            AND (HospName LIKE '%' + #{keyword} + '%' 
+            AND (HopsProvince LIKE '%' + #{keyword} + '%'
+                 OR HopsCity LIKE '%' + #{keyword} + '%'
+                 OR HopsArea LIKE '%' + #{keyword} + '%'
                  OR HospAddress LIKE '%' + #{keyword} + '%'
+                 OR HospName LIKE '%' + #{keyword} + '%'
                  OR HospShort LIKE '%' + #{keyword} + '%')
         </if>
         AND (HospState IS NULL OR HospState = 1)
diff --git a/ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml
new file mode 100644
index 0000000..d4c8079
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.OrderClassMapper">
+
+    <resultMap type="OrderClassDTO" id="OrderClassResult">
+        <result property="vID" column="vID" />
+        <result property="vtext" column="vtext" />
+        <result property="vOrder2" column="vOrder2" />
+        <result property="vType" column="vType" />
+    </resultMap>
+
+    <!-- 鏌ヨ鏈嶅姟鍗曠紪鐮佸垪琛� -->
+    <select id="selectServiceOrderClass" resultMap="OrderClassResult">
+        SELECT vtext, vOrder2, vType
+        FROM dictionary
+        WHERE vtitle = 'OrderClass' AND vType = 1
+        ORDER BY vOrder2
+    </select>
+    
+    <!-- 鏌ヨ璋冨害鍗曠紪鐮佸垪琛� -->
+    <select id="selectDispatchOrderClass" resultMap="OrderClassResult">
+        SELECT vtext, vOrder2, vType
+        FROM dictionary
+        WHERE vtitle = 'OrderClass' AND vType = 2
+        ORDER BY vOrder2
+    </select>
+
+    <!-- 鏌ヨ鍗曟嵁绫诲瀷鍒楄〃锛圫erviceOrdAreaType锛� -->
+    <select id="selectServiceOrdAreaTypes" resultMap="OrderClassResult">
+        SELECT vID, vtext
+        FROM dictionary
+        WHERE vtitle = 'ServiceOrdAreaType' AND vType = 1
+        ORDER BY vOrder
+    </select>
+
+    <!-- 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鍒楄〃锛圫erviceOrderType锛� -->
+    <select id="selectServiceOrderTypes" resultMap="OrderClassResult">
+        SELECT vID, vtext
+        FROM dictionary
+        WHERE vtitle = 'ServiceOrderType' AND vType >= 1
+        ORDER BY vOrder
+    </select>
+
+    <!-- 鏌ヨ鍖婚櫌绉戝鍒楄〃锛圚ospitalDepartment锛� -->
+    <select id="selectHospitalDepartments" resultMap="OrderClassResult">
+        SELECT vID, vtext
+        FROM dictionary
+        WHERE vtitle = 'HospitalDepartment' AND vType = 1
+        ORDER BY vOrder
+    </select>
+
+</mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index b5fab18..2d8e21a 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -17,6 +17,8 @@
 		<result property="delFlag"    column="del_flag"    />
 		<result property="parentName" column="parent_name" />
 		<result property="departmentId" column="department_id" />
+		<result property="serviceOrderClass" column="service_order_class" />
+		<result property="dispatchOrderClass" column="dispatch_order_class" />
 		<result property="createBy"   column="create_by"   />
 		<result property="createTime" column="create_time" />
 		<result property="updateBy"   column="update_by"   />
@@ -24,7 +26,7 @@
 	</resultMap>
 	
 	<sql id="selectDeptVo">
-        select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.department_id, d.create_by, d.create_time 
+        select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.department_id, d.service_order_class, d.dispatch_order_class, d.create_by, d.create_time 
         from sys_dept d
     </sql>
     
@@ -60,7 +62,7 @@
 	</select>
     
     <select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
-		select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.department_id,
+		select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.department_id, d.service_order_class, d.dispatch_order_class,
 			(select dept_name from sys_dept where dept_id = d.parent_id) parent_name
 		from sys_dept d
 		where d.dept_id = #{deptId}
@@ -100,6 +102,8 @@
  			<if test="email != null and email != ''">email,</if>
  			<if test="status != null">status,</if>
  			<if test="departmentId != null">department_id,</if>
+ 			<if test="serviceOrderClass != null and serviceOrderClass != ''">service_order_class,</if>
+ 			<if test="dispatchOrderClass != null and dispatchOrderClass != ''">dispatch_order_class,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			create_time
  		)values(
@@ -113,6 +117,8 @@
  			<if test="email != null and email != ''">#{email},</if>
  			<if test="status != null">#{status},</if>
  			<if test="departmentId != null">#{departmentId},</if>
+ 			<if test="serviceOrderClass != null and serviceOrderClass != ''">#{serviceOrderClass},</if>
+ 			<if test="dispatchOrderClass != null and dispatchOrderClass != ''">#{dispatchOrderClass},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			sysdate()
  		)
@@ -130,6 +136,8 @@
  			<if test="email != null">email = #{email},</if>
  			<if test="status != null and status != ''">status = #{status},</if>
  			<if test="departmentId != null">department_id = #{departmentId},</if>
+ 			<if test="serviceOrderClass != null">service_order_class = #{serviceOrderClass},</if>
+ 			<if test="dispatchOrderClass != null">dispatch_order_class = #{dispatchOrderClass},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
  			update_time = sysdate()
  		</set>
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysTaskAssigneeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysTaskAssigneeMapper.xml
new file mode 100644
index 0000000..abe5104
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/SysTaskAssigneeMapper.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.SysTaskAssigneeMapper">
+    
+    <resultMap type="SysTaskAssignee" id="SysTaskAssigneeResult">
+        <result property="id"    column="id"    />
+        <result property="taskId"    column="task_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="userName"    column="user_name"    />
+        <result property="userType"    column="user_type"    />
+        <result property="isPrimary"    column="is_primary"    />
+        <result property="sortOrder"    column="sort_order"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
+    </resultMap>
+
+    <sql id="selectSysTaskAssigneeVo">
+        select id, task_id, user_id, user_name, user_type, is_primary, sort_order, create_time, create_by, update_time, update_by
+        from sys_task_assignee
+    </sql>
+
+    <select id="selectSysTaskAssigneeById" parameterType="Long" resultMap="SysTaskAssigneeResult">
+        <include refid="selectSysTaskAssigneeVo"/>
+        where id = #{id}
+    </select>
+    
+    <select id="selectSysTaskAssigneeByTaskId" parameterType="Long" resultMap="SysTaskAssigneeResult">
+        <include refid="selectSysTaskAssigneeVo"/>
+        where task_id = #{taskId}
+        order by sort_order asc
+    </select>
+
+    <insert id="insertSysTaskAssignee" parameterType="SysTaskAssignee" useGeneratedKeys="true" keyProperty="id">
+        insert into sys_task_assignee
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskId != null">task_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="userName != null and userName != ''">user_name,</if>
+            <if test="userType != null and userType != ''">user_type,</if>
+            <if test="isPrimary != null">is_primary,</if>
+            <if test="sortOrder != null">sort_order,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="createBy != null and createBy != ''">create_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="updateBy != null and updateBy != ''">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskId != null">#{taskId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="userName != null and userName != ''">#{userName},</if>
+            <if test="userType != null and userType != ''">#{userType},</if>
+            <if test="isPrimary != null">#{isPrimary},</if>
+            <if test="sortOrder != null">#{sortOrder},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="createBy != null and createBy != ''">#{createBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="updateBy != null and updateBy != ''">#{updateBy},</if>
+         </trim>
+    </insert>
+    
+    <insert id="batchInsertSysTaskAssignee" parameterType="java.util.List">
+        insert into sys_task_assignee(task_id, user_id, user_name, user_type, is_primary, sort_order, create_time, create_by, update_time, update_by)
+        values
+        <foreach collection="list" item="item" separator=",">
+            (#{item.taskId}, #{item.userId}, #{item.userName}, #{item.userType}, #{item.isPrimary}, #{item.sortOrder}, #{item.createTime}, #{item.createBy}, #{item.updateTime}, #{item.updateBy})
+        </foreach>
+    </insert>
+
+    <update id="updateSysTaskAssignee" parameterType="SysTaskAssignee">
+        update sys_task_assignee
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskId != null">task_id = #{taskId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="userName != null and userName != ''">user_name = #{userName},</if>
+            <if test="userType != null and userType != ''">user_type = #{userType},</if>
+            <if test="isPrimary != null">is_primary = #{isPrimary},</if>
+            <if test="sortOrder != null">sort_order = #{sortOrder},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteSysTaskAssigneeById" parameterType="Long">
+        delete from sys_task_assignee where id = #{id}
+    </delete>
+    
+    <delete id="deleteSysTaskAssigneeByTaskId" parameterType="Long">
+        delete from sys_task_assignee where task_id = #{taskId}
+    </delete>
+
+    <delete id="deleteSysTaskAssigneeByIds" parameterType="Long">
+        delete from sys_task_assignee where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml
index 081a4e3..cf83d3c 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml
@@ -14,13 +14,17 @@
         <result property="patientIdCard"           column="patient_id_card"         />
         <result property="patientCondition"        column="patient_condition"       />
         <result property="hospitalOutName"         column="hospital_out_name"       />
+        <result property="hospitalOutId"           column="hospital_out_id"         />
         <result property="hospitalOutDepartment"   column="hospital_out_department" />
+        <result property="hospitalOutDepartmentId" column="hospital_out_department_id" />
         <result property="hospitalOutBedNumber"    column="hospital_out_bed_number" />
         <result property="hospitalOutAddress"      column="hospital_out_address"    />
         <result property="hospitalOutLongitude"    column="hospital_out_longitude"  />
         <result property="hospitalOutLatitude"     column="hospital_out_latitude"   />
         <result property="hospitalInName"          column="hospital_in_name"        />
+        <result property="hospitalInId"            column="hospital_in_id"          />
         <result property="hospitalInDepartment"    column="hospital_in_department"  />
+        <result property="hospitalInDepartmentId"  column="hospital_in_department_id" />
         <result property="hospitalInBedNumber"     column="hospital_in_bed_number"  />
         <result property="hospitalInAddress"       column="hospital_in_address"     />
         <result property="hospitalInLongitude"     column="hospital_in_longitude"   />
@@ -29,6 +33,17 @@
         <result property="transferPrice"           column="transfer_price"          />
         <result property="passengerContact"        column="passenger_contact"       />
         <result property="passengerPhone"          column="passenger_phone"         />
+        <result property="diseaseIds"              column="disease_ids"             />
+        <result property="documentTypeId"          column="document_type_id"        />
+        <result property="taskTypeId"              column="task_type_id"            />
+        <result property="legacyServiceOrdId"      column="legacy_service_ord_id"   />
+        <result property="legacyDispatchOrdId"     column="legacy_dispatch_ord_id"  />
+        <result property="syncStatus"              column="sync_status"             />
+        <result property="syncTime"                column="sync_time"               />
+        <result property="syncErrorMsg"            column="sync_error_msg"          />
+        <result property="dispatchSyncStatus"      column="dispatch_sync_status"    />
+        <result property="dispatchSyncTime"        column="dispatch_sync_time"      />
+        <result property="dispatchSyncErrorMsg"    column="dispatch_sync_error_msg" />
         <result property="createTime"              column="create_time"             />
         <result property="updateTime"              column="update_time"             />
         <result property="createBy"                column="create_by"               />
@@ -37,12 +52,14 @@
 
     <sql id="selectSysTaskEmergencyVo">
         select id, task_id, patient_contact, patient_phone, patient_name, patient_gender, 
-               patient_id_card, patient_condition, hospital_out_name, hospital_out_department, 
-               hospital_out_bed_number, hospital_out_address, hospital_out_longitude, 
-               hospital_out_latitude, hospital_in_name, hospital_in_department, 
-               hospital_in_bed_number, hospital_in_address, hospital_in_longitude, 
+               patient_id_card, patient_condition, hospital_out_name, hospital_out_id, hospital_out_department, 
+               hospital_out_department_id, hospital_out_bed_number, hospital_out_address, hospital_out_longitude, 
+               hospital_out_latitude, hospital_in_name, hospital_in_id, hospital_in_department, 
+               hospital_in_department_id, hospital_in_bed_number, hospital_in_address, hospital_in_longitude, 
                hospital_in_latitude, transfer_distance, transfer_price, passenger_contact, 
-               passenger_phone, create_time, update_time, create_by, update_by
+               passenger_phone, disease_ids, document_type_id, task_type_id, legacy_service_ord_id, legacy_dispatch_ord_id, 
+               sync_status, sync_time, sync_error_msg, dispatch_sync_status, dispatch_sync_time, dispatch_sync_error_msg,
+               create_time, update_time, create_by, update_by
         from sys_task_emergency
     </sql>
 
@@ -67,13 +84,17 @@
             <if test="patientIdCard != null">patient_id_card,</if>
             <if test="patientCondition != null">patient_condition,</if>
             <if test="hospitalOutName != null">hospital_out_name,</if>
+            <if test="hospitalOutId != null">hospital_out_id,</if>
             <if test="hospitalOutDepartment != null">hospital_out_department,</if>
+            <if test="hospitalOutDepartmentId != null">hospital_out_department_id,</if>
             <if test="hospitalOutBedNumber != null">hospital_out_bed_number,</if>
             <if test="hospitalOutAddress != null">hospital_out_address,</if>
             <if test="hospitalOutLongitude != null">hospital_out_longitude,</if>
             <if test="hospitalOutLatitude != null">hospital_out_latitude,</if>
             <if test="hospitalInName != null">hospital_in_name,</if>
+            <if test="hospitalInId != null">hospital_in_id,</if>
             <if test="hospitalInDepartment != null">hospital_in_department,</if>
+            <if test="hospitalInDepartmentId != null">hospital_in_department_id,</if>
             <if test="hospitalInBedNumber != null">hospital_in_bed_number,</if>
             <if test="hospitalInAddress != null">hospital_in_address,</if>
             <if test="hospitalInLongitude != null">hospital_in_longitude,</if>
@@ -82,6 +103,17 @@
             <if test="transferPrice != null">transfer_price,</if>
             <if test="passengerContact != null">passenger_contact,</if>
             <if test="passengerPhone != null">passenger_phone,</if>
+            <if test="diseaseIds != null">disease_ids,</if>
+            <if test="documentTypeId != null">document_type_id,</if>
+            <if test="taskTypeId != null">task_type_id,</if>
+            <if test="legacyServiceOrdId != null">legacy_service_ord_id,</if>
+            <if test="legacyDispatchOrdId != null">legacy_dispatch_ord_id,</if>
+            <if test="syncStatus != null">sync_status,</if>
+            <if test="syncTime != null">sync_time,</if>
+            <if test="syncErrorMsg != null">sync_error_msg,</if>
+            <if test="dispatchSyncStatus != null">dispatch_sync_status,</if>
+            <if test="dispatchSyncTime != null">dispatch_sync_time,</if>
+            <if test="dispatchSyncErrorMsg != null">dispatch_sync_error_msg,</if>
             <if test="createTime != null">create_time,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="createBy != null">create_by,</if>
@@ -96,13 +128,17 @@
             <if test="patientIdCard != null">#{patientIdCard},</if>
             <if test="patientCondition != null">#{patientCondition},</if>
             <if test="hospitalOutName != null">#{hospitalOutName},</if>
+            <if test="hospitalOutId != null">#{hospitalOutId},</if>
             <if test="hospitalOutDepartment != null">#{hospitalOutDepartment},</if>
+            <if test="hospitalOutDepartmentId != null">#{hospitalOutDepartmentId},</if>
             <if test="hospitalOutBedNumber != null">#{hospitalOutBedNumber},</if>
             <if test="hospitalOutAddress != null">#{hospitalOutAddress},</if>
             <if test="hospitalOutLongitude != null">#{hospitalOutLongitude},</if>
             <if test="hospitalOutLatitude != null">#{hospitalOutLatitude},</if>
             <if test="hospitalInName != null">#{hospitalInName},</if>
+            <if test="hospitalInId != null">#{hospitalInId},</if>
             <if test="hospitalInDepartment != null">#{hospitalInDepartment},</if>
+            <if test="hospitalInDepartmentId != null">#{hospitalInDepartmentId},</if>
             <if test="hospitalInBedNumber != null">#{hospitalInBedNumber},</if>
             <if test="hospitalInAddress != null">#{hospitalInAddress},</if>
             <if test="hospitalInLongitude != null">#{hospitalInLongitude},</if>
@@ -111,6 +147,17 @@
             <if test="transferPrice != null">#{transferPrice},</if>
             <if test="passengerContact != null">#{passengerContact},</if>
             <if test="passengerPhone != null">#{passengerPhone},</if>
+            <if test="diseaseIds != null">#{diseaseIds},</if>
+            <if test="documentTypeId != null">#{documentTypeId},</if>
+            <if test="taskTypeId != null">#{taskTypeId},</if>
+            <if test="legacyServiceOrdId != null">#{legacyServiceOrdId},</if>
+            <if test="legacyDispatchOrdId != null">#{legacyDispatchOrdId},</if>
+            <if test="syncStatus != null">#{syncStatus},</if>
+            <if test="syncTime != null">#{syncTime},</if>
+            <if test="syncErrorMsg != null">#{syncErrorMsg},</if>
+            <if test="dispatchSyncStatus != null">#{dispatchSyncStatus},</if>
+            <if test="dispatchSyncTime != null">#{dispatchSyncTime},</if>
+            <if test="dispatchSyncErrorMsg != null">#{dispatchSyncErrorMsg},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="createBy != null">#{createBy},</if>
@@ -128,13 +175,17 @@
             <if test="patientIdCard != null">patient_id_card = #{patientIdCard},</if>
             <if test="patientCondition != null">patient_condition = #{patientCondition},</if>
             <if test="hospitalOutName != null">hospital_out_name = #{hospitalOutName},</if>
+            <if test="hospitalOutId != null">hospital_out_id = #{hospitalOutId},</if>
             <if test="hospitalOutDepartment != null">hospital_out_department = #{hospitalOutDepartment},</if>
+            <if test="hospitalOutDepartmentId != null">hospital_out_department_id = #{hospitalOutDepartmentId},</if>
             <if test="hospitalOutBedNumber != null">hospital_out_bed_number = #{hospitalOutBedNumber},</if>
             <if test="hospitalOutAddress != null">hospital_out_address = #{hospitalOutAddress},</if>
             <if test="hospitalOutLongitude != null">hospital_out_longitude = #{hospitalOutLongitude},</if>
             <if test="hospitalOutLatitude != null">hospital_out_latitude = #{hospitalOutLatitude},</if>
             <if test="hospitalInName != null">hospital_in_name = #{hospitalInName},</if>
+            <if test="hospitalInId != null">hospital_in_id = #{hospitalInId},</if>
             <if test="hospitalInDepartment != null">hospital_in_department = #{hospitalInDepartment},</if>
+            <if test="hospitalInDepartmentId != null">hospital_in_department_id = #{hospitalInDepartmentId},</if>
             <if test="hospitalInBedNumber != null">hospital_in_bed_number = #{hospitalInBedNumber},</if>
             <if test="hospitalInAddress != null">hospital_in_address = #{hospitalInAddress},</if>
             <if test="hospitalInLongitude != null">hospital_in_longitude = #{hospitalInLongitude},</if>
@@ -143,6 +194,17 @@
             <if test="transferPrice != null">transfer_price = #{transferPrice},</if>
             <if test="passengerContact != null">passenger_contact = #{passengerContact},</if>
             <if test="passengerPhone != null">passenger_phone = #{passengerPhone},</if>
+            <if test="diseaseIds != null">disease_ids = #{diseaseIds},</if>
+            <if test="documentTypeId != null">document_type_id = #{documentTypeId},</if>
+            <if test="taskTypeId != null">task_type_id = #{taskTypeId},</if>
+            <if test="legacyServiceOrdId != null">legacy_service_ord_id = #{legacyServiceOrdId},</if>
+            <if test="legacyDispatchOrdId != null">legacy_dispatch_ord_id = #{legacyDispatchOrdId},</if>
+            <if test="syncStatus != null">sync_status = #{syncStatus},</if>
+            <if test="syncTime != null">sync_time = #{syncTime},</if>
+            <if test="syncErrorMsg != null">sync_error_msg = #{syncErrorMsg},</if>
+            <if test="dispatchSyncStatus != null">dispatch_sync_status = #{dispatchSyncStatus},</if>
+            <if test="dispatchSyncTime != null">dispatch_sync_time = #{dispatchSyncTime},</if>
+            <if test="dispatchSyncErrorMsg != null">dispatch_sync_error_msg = #{dispatchSyncErrorMsg},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
         </trim>
@@ -157,4 +219,22 @@
         delete from sys_task_emergency where task_id = #{taskId}
     </delete>
 
+    <!-- 鏌ヨ寰呭悓姝ョ殑鎬ユ晳杞繍浠诲姟 -->
+    <select id="selectPendingSyncTasks" resultMap="SysTaskEmergencyResult">
+        <include refid="selectSysTaskEmergencyVo"/>
+        where (sync_status = 0 or sync_status = 3)
+        order by id asc
+        limit 100
+    </select>
+    
+    <!-- 鏌ヨ寰呭悓姝ヨ皟搴﹀崟鐨勪换鍔★紙宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曪級 -->
+    <select id="selectPendingDispatchSyncTasks" resultMap="SysTaskEmergencyResult">
+        <include refid="selectSysTaskEmergencyVo"/>
+        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)
+        order by id asc
+        limit 100
+    </select>
+
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml
index c0de83d..7db8cae 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml
@@ -30,6 +30,7 @@
         <result property="updateBy"         column="update_by"         />
         <result property="remark"           column="remark"            />
         <result property="delFlag"          column="del_flag"          />
+        <result property="legacySynced"     column="legacy_synced"     />
         <result property="creatorName"      column="creator_name"      />
         <result property="assigneeName"     column="assignee_name"     />
         <result property="deptName"         column="dept_name"         />
@@ -54,7 +55,7 @@
                t.destination_longitude, t.destination_latitude, t.estimated_distance,
                t.planned_start_time, t.planned_end_time,
                t.actual_start_time, t.actual_end_time, t.creator_id, t.assignee_id, t.dept_id,
-               t.create_time, t.update_time, t.create_by, t.update_by, t.remark, t.del_flag,
+               t.create_time, t.update_time, t.create_by, t.update_by, t.remark, t.del_flag, t.legacy_synced,
                u1.nick_name as creator_name, u2.nick_name as assignee_name, d.dept_name,
                tv.id as tv_id, tv.task_id as tv_task_id, tv.vehicle_id as tv_vehicle_id,
                v.vehicle_no as tv_vehicle_no, v.vehicle_type as tv_vehicle_type,
diff --git a/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
index d011369..b6bbf51 100644
--- a/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
@@ -6,6 +6,7 @@
     
     <resultMap type="com.ruoyi.system.domain.VehicleInfo" id="VehicleInfoResult">
         <id     property="vehicleId"      column="vehicle_id"      />
+        <result property="carId"          column="car_id"          />
         <result property="deviceId"       column="device_id"       />
         <result property="vehicleNo"      column="vehicle_no"      />
         <result property="vehicleType"    column="vehicle_type"    />
@@ -23,7 +24,7 @@
     </resultMap>
 
     <sql id="selectVehicleInfoVo">
-        select v.vehicle_id, v.device_id, v.vehicle_no, v.vehicle_type, v.vehicle_brand, v.vehicle_model, v.status, v.platform_code, v.dept_id, d.dept_name, v.create_by, v.create_time, v.update_by, v.update_time, v.remark
+        select v.vehicle_id, v.car_id, v.device_id, v.vehicle_no, v.vehicle_type, v.vehicle_brand, v.vehicle_model, v.status, v.platform_code, v.dept_id, d.dept_name, v.create_by, v.create_time, v.update_by, v.update_time, v.remark
         from tb_vehicle_info v
         left join sys_dept d on v.dept_id = d.dept_id
     </sql>
@@ -39,6 +40,10 @@
             <if test="status != null  and status != ''"> and v.status = #{status}</if>
             <if test="platformCode != null  and platformCode != ''"> and v.platform_code = #{platformCode}</if>
             <if test="deptId != null"> and v.dept_id = #{deptId}</if>
+            <!-- 浠诲姟杞﹁締閫夋嫨蹇呴』杩囨护锛氬彧鏄剧ずcar_id鍜宒ept_id閮戒笉涓虹┖鐨勮溅杈� -->
+            and v.car_id is not null and v.car_id != ''
+            and v.dept_id is not null
+            and v.status=0
         </where>
     </select>
     
@@ -55,6 +60,7 @@
     <insert id="insertVehicleInfo" parameterType="VehicleInfo" useGeneratedKeys="true" keyProperty="vehicleId">
         insert into tb_vehicle_info
         <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="carId != null">car_id,</if>
             <if test="deviceId != null">device_id,</if>
             <if test="vehicleNo != null">vehicle_no,</if>
             <if test="vehicleType != null">vehicle_type,</if>
@@ -70,6 +76,7 @@
             <if test="remark != null">remark,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="carId != null">#{carId},</if>
             <if test="deviceId != null">#{deviceId},</if>
             <if test="vehicleNo != null">#{vehicleNo},</if>
             <if test="vehicleType != null">#{vehicleType},</if>
@@ -89,6 +96,7 @@
     <update id="updateVehicleInfo" parameterType="VehicleInfo">
         update tb_vehicle_info
         <trim prefix="SET" suffixOverrides=",">
+            <if test="carId != null">car_id = #{carId},</if>
             <if test="deviceId != null">device_id = #{deviceId},</if>
             <if test="vehicleNo != null">vehicle_no = #{vehicleNo},</if>
             <if test="vehicleType != null">vehicle_type = #{vehicleType},</if>
diff --git a/ruoyi-system/src/main/resources/mapper/system/VehicleSyncMapper.xml b/ruoyi-system/src/main/resources/mapper/system/VehicleSyncMapper.xml
new file mode 100644
index 0000000..6e28f36
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/VehicleSyncMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.VehicleSyncMapper">
+
+    <resultMap type="VehicleSyncDTO" id="VehicleSyncResult">
+        <result property="carId" column="CarID" />
+        <result property="carLicense" column="CarLicense" />
+        <result property="carOrdClass" column="CarOrdClass" />
+    </resultMap>
+
+    <!-- 浠嶴QL Server鏌ヨ鎵�鏈夋甯哥姸鎬佺殑杞﹁締鏁版嵁 -->
+    <select id="selectVehiclesFromSqlServer" resultMap="VehicleSyncResult">
+        <![CDATA[
+        SELECT 
+            CarId,
+            CarLicense,
+            CarOrdClass
+        FROM CarData 
+        WHERE CarState = 1
+        ORDER BY CarId
+        ]]>
+    </select>
+
+</mapper>
diff --git a/ruoyi-ui/src/views/system/dept/index.vue b/ruoyi-ui/src/views/system/dept/index.vue
index 258e90e..2d72209 100644
--- a/ruoyi-ui/src/views/system/dept/index.vue
+++ b/ruoyi-ui/src/views/system/dept/index.vue
@@ -64,6 +64,18 @@
           <span v-else style="color: #909399;">-</span>
         </template>
       </el-table-column>
+      <el-table-column prop="serviceOrderClass" label="鏈嶅姟鍗曠紪鐮�" width="120" align="center">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.serviceOrderClass" type="success" size="mini">{{ scope.row.serviceOrderClass }}</el-tag>
+          <span v-else style="color: #909399;">-</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="dispatchOrderClass" label="璋冨害鍗曠紪鐮�" width="120" align="center">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.dispatchOrderClass" type="warning" size="mini">{{ scope.row.dispatchOrderClass }}</el-tag>
+          <span v-else style="color: #909399;">-</span>
+        </template>
+      </el-table-column>
       <el-table-column prop="orderNum" label="鎺掑簭" width="150"></el-table-column>
       <el-table-column prop="status" label="鐘舵��" width="100">
         <template slot-scope="scope">
@@ -129,6 +141,18 @@
           <el-col :span="12">
             <el-form-item label="SQL Server閮ㄩ棬ID" prop="departmentId">
               <el-input v-model="form.departmentId" placeholder="SQL Server涓殑閮ㄩ棬ID" :disabled="true" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鏈嶅姟鍗曠紪鐮�" prop="serviceOrderClass">
+              <el-input v-model="form.serviceOrderClass" placeholder="璇疯緭鍏ユ湇鍔″崟缂栫爜" maxlength="20" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璋冨害鍗曠紪鐮�" prop="dispatchOrderClass">
+              <el-input v-model="form.dispatchOrderClass" placeholder="璇疯緭鍏ヨ皟搴﹀崟缂栫爜" maxlength="20" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -272,6 +296,8 @@
         parentId: undefined,
         deptName: undefined,
         departmentId: undefined,
+        serviceOrderClass: undefined,
+        dispatchOrderClass: undefined,
         orderNum: undefined,
         leader: undefined,
         phone: undefined,
diff --git a/ruoyi-ui/src/views/system/user/index.vue b/ruoyi-ui/src/views/system/user/index.vue
index 15fec19..185ec36 100644
--- a/ruoyi-ui/src/views/system/user/index.vue
+++ b/ruoyi-ui/src/views/system/user/index.vue
@@ -119,7 +119,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="OA鐢ㄦ埛ID" prop="oaUserId">
-              <el-input v-model="form.oaUserId" placeholder="OA绯荤粺鐨勭敤鎴稩D" :disabled="true" />
+              <el-input v-model="form.oaUserId" placeholder="OA绯荤粺鐨勭敤鎴稩D" type="number" />
             </el-form-item>
           </el-col>
         </el-row>
diff --git a/sql/add_department_id_fields.sql b/sql/add_department_id_fields.sql
new file mode 100644
index 0000000..1514f8d
--- /dev/null
+++ b/sql/add_department_id_fields.sql
@@ -0,0 +1,21 @@
+-- 涓� sys_task_emergency 琛ㄦ坊鍔犵瀹D瀛楁
+-- 绉戝鏁版嵁鏉ヨ嚜 SQL Server 鐨� dictionary 琛紙vtitle='HospitalDepartment'锛�
+
+-- 1. 娣诲姞杞嚭鍖婚櫌绉戝ID瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN hospital_out_department_id VARCHAR(50) COMMENT '杞嚭鍖婚櫌绉戝ID锛堝搴擲QL Server dictionary琛ㄧ殑vID锛�' AFTER hospital_out_department;
+
+-- 2. 娣诲姞杞叆鍖婚櫌绉戝ID瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN hospital_in_department_id VARCHAR(50) COMMENT '杞叆鍖婚櫌绉戝ID锛堝搴擲QL Server dictionary琛ㄧ殑vID锛�' AFTER hospital_in_department;
+
+-- 3. 鍒涘缓绱㈠紩浠ユ彁鍗囨煡璇㈡�ц兘
+CREATE INDEX idx_hospital_out_dept_id ON sys_task_emergency(hospital_out_department_id);
+CREATE INDEX idx_hospital_in_dept_id ON sys_task_emergency(hospital_in_department_id);
+
+-- 璇存槑锛�
+-- 1. hospital_out_department_id 鍜� hospital_in_department_id 瀛樺偍鏉ヨ嚜 SQL Server dictionary 琛ㄧ殑 vID
+-- 2. 绉戝鍚嶇О瀛楁锛坔ospital_out_department, hospital_in_department锛変繚鐣欙紝鐢ㄤ簬鏄剧ず鍜屽悓姝ユ棫绯荤粺
+-- 3. 绉戝ID瀛楁鐢ㄤ簬鍏宠仈鏌ヨ鍜屾暟鎹獙璇�
+-- 4. 浣跨敤 VARCHAR(50) 绫诲瀷锛屽洜涓� vID 鍙兘鏄瓧绗︿覆绫诲瀷
+-- 5. 鍏佽涓篘ULL锛屽洜涓哄巻鍙叉暟鎹彲鑳藉彧鏈夌瀹ゅ悕绉版病鏈塈D
diff --git a/sql/add_dept_order_class_fields.sql b/sql/add_dept_order_class_fields.sql
new file mode 100644
index 0000000..b93ba94
--- /dev/null
+++ b/sql/add_dept_order_class_fields.sql
@@ -0,0 +1,18 @@
+-- ===========================
+-- 閮ㄩ棬琛ㄦ坊鍔犳湇鍔″崟鍜岃皟搴﹀崟缂栫爜瀛楁
+-- ===========================
+
+-- 娣诲姞鏈嶅姟鍗曠紪鐮佸瓧娈�
+ALTER TABLE sys_dept 
+ADD COLUMN service_order_class VARCHAR(20) NULL COMMENT '鏈嶅姟鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=1)' AFTER department_id;
+
+-- 娣诲姞璋冨害鍗曠紪鐮佸瓧娈�
+ALTER TABLE sys_dept 
+ADD COLUMN dispatch_order_class VARCHAR(20) NULL COMMENT '璋冨害鍗曠紪鐮�(瀵瑰簲鏃х郴缁烵rderClass vType=2)' AFTER service_order_class;
+
+-- 娣诲姞绱㈠紩
+ALTER TABLE sys_dept ADD INDEX idx_service_order_class (service_order_class);
+ALTER TABLE sys_dept ADD INDEX idx_dispatch_order_class (dispatch_order_class);
+
+-- 鏌ョ湅琛ㄧ粨鏋�
+DESC sys_dept;
diff --git a/sql/add_document_type_to_emergency.sql b/sql/add_document_type_to_emergency.sql
new file mode 100644
index 0000000..22c991e
--- /dev/null
+++ b/sql/add_document_type_to_emergency.sql
@@ -0,0 +1,10 @@
+-- 涓烘�ユ晳杞繍浠诲姟琛ㄦ坊鍔犲崟鎹被鍨嬪拰浠诲姟绫诲瀷瀛楁
+-- 瀵瑰簲SQL Server鐨刣ictionary琛ㄤ腑鐨剉ID瀛楁
+
+ALTER TABLE sys_task_emergency ADD COLUMN document_type_id VARCHAR(50) COMMENT '鍗曟嵁绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛寁title=ServiceOrdAreaType锛�';
+
+ALTER TABLE sys_task_emergency ADD COLUMN task_type_id VARCHAR(50) COMMENT '浠诲姟绫诲瀷ID锛堝搴擲QL Server鐨刣ictionary琛╲ID锛寁title=ServiceOrderType锛�';
+
+-- 娣诲姞绱㈠紩浠ユ彁楂樻煡璇㈡�ц兘
+CREATE INDEX idx_document_type_id ON sys_task_emergency(document_type_id);
+CREATE INDEX idx_task_type_id ON sys_task_emergency(task_type_id);
diff --git a/sql/add_hospital_id_fields.sql b/sql/add_hospital_id_fields.sql
new file mode 100644
index 0000000..570acc4
--- /dev/null
+++ b/sql/add_hospital_id_fields.sql
@@ -0,0 +1,21 @@
+-- 涓� sys_task_emergency 琛ㄦ坊鍔犲尰闄D瀛楁
+-- 鐢ㄤ簬鍏宠仈 hosp_data 琛ㄤ腑鐨勫尰闄㈣褰�
+
+-- 1. 娣诲姞杞嚭鍖婚櫌ID瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN hospital_out_id BIGINT COMMENT '杞嚭鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛�' AFTER hospital_out_name;
+
+-- 2. 娣诲姞杞叆鍖婚櫌ID瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN hospital_in_id BIGINT COMMENT '杞叆鍖婚櫌ID锛堝叧鑱攈osp_data琛ㄧ殑HospID锛�' AFTER hospital_in_name;
+
+-- 3. 鍒涘缓绱㈠紩浠ユ彁鍗囨煡璇㈡�ц兘
+CREATE INDEX idx_hospital_out_id ON sys_task_emergency(hospital_out_id);
+CREATE INDEX idx_hospital_in_id ON sys_task_emergency(hospital_in_id);
+
+-- 璇存槑锛�
+-- 1. hospital_out_id 鍜� hospital_in_id 瀛樺偍鏉ヨ嚜 SQL Server hosp_data 琛ㄧ殑 HospID
+-- 2. 鍖婚櫌鍚嶇О瀛楁锛坔ospital_out_name, hospital_in_name锛変繚鐣欙紝鐢ㄤ簬鏄剧ず鍜屽悓姝ユ棫绯荤粺
+-- 3. 鍖婚櫌ID瀛楁鐢ㄤ簬鍏宠仈鏌ヨ鍜屾暟鎹垎鏋�
+-- 4. 鍏佽涓篘ULL锛屽洜涓哄巻鍙叉暟鎹彲鑳藉彧鏈夊尰闄㈠悕绉版病鏈塈D
+-- 5. 鍓嶇閫夋嫨鍖婚櫌鏃讹紝鍚屾椂淇濆瓨鍖婚櫌ID鍜屽尰闄㈠悕绉�
diff --git a/sql/add_legacy_dispatch_ord_id.sql b/sql/add_legacy_dispatch_ord_id.sql
new file mode 100644
index 0000000..d4b7a6a
--- /dev/null
+++ b/sql/add_legacy_dispatch_ord_id.sql
@@ -0,0 +1,22 @@
+-- ===========================
+-- 娣诲姞鏃х郴缁熻皟搴﹀崟ID瀛楁
+-- ===========================
+
+-- 鍦╯ys_task_emergency琛ㄤ腑娣诲姞legacy_dispatch_ord_id瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN legacy_dispatch_ord_id BIGINT NULL COMMENT '鏃х郴缁熻皟搴﹀崟ID(DispatchOrdID)' AFTER legacy_service_ord_id;
+
+-- 娣诲姞璋冨害鍗曞悓姝ョ姸鎬佸瓧娈�
+ALTER TABLE sys_task_emergency 
+ADD COLUMN dispatch_sync_status TINYINT DEFAULT 0 COMMENT '璋冨害鍗曞悓姝ョ姸鎬侊細0-鏈悓姝ワ紝1-鍚屾涓紝2-鍚屾鎴愬姛锛�3-鍚屾澶辫触' AFTER legacy_dispatch_ord_id;
+
+-- 娣诲姞璋冨害鍗曞悓姝ユ椂闂村瓧娈�
+ALTER TABLE sys_task_emergency 
+ADD COLUMN dispatch_sync_time DATETIME NULL COMMENT '璋冨害鍗曞悓姝ユ椂闂�' AFTER dispatch_sync_status;
+
+-- 娣诲姞璋冨害鍗曞悓姝ラ敊璇俊鎭瓧娈�
+ALTER TABLE sys_task_emergency 
+ADD COLUMN dispatch_sync_error_msg VARCHAR(500) NULL COMMENT '璋冨害鍗曞悓姝ラ敊璇俊鎭�' AFTER dispatch_sync_time;
+
+-- 鏌ョ湅琛ㄧ粨鏋�
+DESC sys_task_emergency;
diff --git a/sql/add_legacy_system_id.sql b/sql/add_legacy_system_id.sql
new file mode 100644
index 0000000..d362460
--- /dev/null
+++ b/sql/add_legacy_system_id.sql
@@ -0,0 +1,17 @@
+-- ----------------------------
+-- 娣诲姞鏃х郴缁烮D瀛楁锛岀敤浜庝笌鏃SP绯荤粺鍚屾
+-- ----------------------------
+
+-- 1. 鍦ㄦ�ユ晳杞繍鎵╁睍琛ㄤ腑娣诲姞鏃х郴缁烻erviceOrdID瀛楁
+ALTER TABLE sys_task_emergency 
+ADD COLUMN legacy_service_ord_id BIGINT NULL COMMENT '鏃х郴缁烻erviceOrdID' AFTER id,
+ADD COLUMN sync_status TINYINT DEFAULT 0 COMMENT '鍚屾鐘舵�侊細0-鏈悓姝ワ紝1-鍚屾涓紝2-鍚屾鎴愬姛锛�3-鍚屾澶辫触' AFTER legacy_service_ord_id,
+ADD COLUMN sync_time DATETIME NULL COMMENT '鍚屾鏃堕棿' AFTER sync_status,
+ADD COLUMN sync_error_msg VARCHAR(500) NULL COMMENT '鍚屾閿欒淇℃伅' AFTER sync_time,
+ADD INDEX idx_legacy_service_ord_id (legacy_service_ord_id),
+ADD INDEX idx_sync_status (sync_status);
+
+-- 2. 鍦ㄤ换鍔′富琛ㄤ腑娣诲姞鍚屾鏍囪瀛楁锛堝彲閫夛紝鐢ㄤ簬蹇�熸煡璇級
+ALTER TABLE sys_task
+ADD COLUMN legacy_synced TINYINT DEFAULT 0 COMMENT '鏃х郴缁熷悓姝ユ爣璁帮細0-鏈悓姝ワ紝1-宸插悓姝�' AFTER del_flag,
+ADD INDEX idx_legacy_synced (legacy_synced);
diff --git a/sql/create_sys_task_assignee.sql b/sql/create_sys_task_assignee.sql
new file mode 100644
index 0000000..a6c3e83
--- /dev/null
+++ b/sql/create_sys_task_assignee.sql
@@ -0,0 +1,22 @@
+-- 浠诲姟鎵ц浜哄憳鍏宠仈琛�
+-- 鐢ㄤ簬瀛樺偍浠诲姟鐨勬墽琛屼汉鍛樺強鍏惰鑹茬被鍨嬶紙鍙告満/鍖荤敓/鎶ゅ+锛�
+-- 杩欐牱鍦ㄥ悓姝ュ埌鏃х郴缁熸椂鍙互鍑嗙‘瀵瑰簲鍒癊ntourage_1/3/4鍙傛暟
+
+DROP TABLE IF EXISTS `sys_task_assignee`;
+
+CREATE TABLE `sys_task_assignee` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭ID',
+  `task_id` bigint(20) NOT NULL COMMENT '浠诲姟ID',
+  `user_id` bigint(20) NOT NULL COMMENT '鐢ㄦ埛ID',
+  `user_name` varchar(50) DEFAULT NULL COMMENT '鐢ㄦ埛濮撳悕',
+  `user_type` varchar(20) NOT NULL COMMENT '鐢ㄦ埛绫诲瀷锛歞river-鍙告満锛宒octor-鍖荤敓锛宯urse-鎶ゅ+',
+  `is_primary` char(1) DEFAULT '0' COMMENT '鏄惁涓轰富瑕佹墽琛屼汉锛�0-鍚︼紝1-鏄�',
+  `sort_order` int(11) DEFAULT 0 COMMENT '鎺掑簭椤哄簭锛堢敤浜庣‘瀹氶闃燂級',
+  `create_time` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+  `create_by` varchar(64) DEFAULT '' COMMENT '鍒涘缓鑰�',
+  `update_time` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+  `update_by` varchar(64) DEFAULT '' COMMENT '鏇存柊鑰�',
+  PRIMARY KEY (`id`),
+  KEY `idx_task_id` (`task_id`),
+  KEY `idx_user_id` (`user_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='浠诲姟鎵ц浜哄憳鍏宠仈琛�';
diff --git a/sql/legacy_dispatch_sync_job.sql b/sql/legacy_dispatch_sync_job.sql
new file mode 100644
index 0000000..08e90e1
--- /dev/null
+++ b/sql/legacy_dispatch_sync_job.sql
@@ -0,0 +1,114 @@
+-- 鏃х郴缁熻皟搴﹀崟鍚屾瀹氭椂浠诲姟閰嶇疆SQL
+-- 鍦╯ys_job琛ㄤ腑娣诲姞瀹氭椂浠诲姟
+
+-- 璋冨害鍗曡嚜鍔ㄥ悓姝ュ埌鏃х郴缁燂紙蹇呴』鍦ㄦ湇鍔″崟鍚屾鎴愬姛鍚庢墽琛岋級
+INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
+VALUES 
+('鏃х郴缁熻皟搴﹀崟鍚屾', 'DEFAULT', 'legacySystemSyncTask.syncPendingDispatchOrders', '0 0/10 * * * ?', '3', '1', '0', 'admin', sysdate(), 
+'姣�10鍒嗛挓鑷姩鍚屾鏈悓姝ョ殑璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛夈�傚悓姝ユ潯浠讹細鏈嶅姟鍗曞凡鍚屾鎴愬姛涓旇皟搴﹀崟鏈悓姝ャ��');
+
+-- 璇存槑锛�
+-- job_name: 浠诲姟鍚嶇О - 鏃х郴缁熻皟搴﹀崟鍚屾
+-- job_group: 浠诲姟缁勫悕锛圖EFAULT涓洪粯璁ょ粍锛�
+-- invoke_target: 璋冪敤鐩爣瀛楃涓诧紙Bean鍚嶇О.鏂规硶鍚嶏級
+--   - legacySystemSyncTask.syncPendingDispatchOrders() 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
+-- cron_expression: cron琛ㄨ揪寮�
+--   - '0 0/10 * * * ?' = 姣�10鍒嗛挓鎵ц涓�娆★紙鎺ㄨ崘锛�
+--   - '0 0/5 * * * ?' = 姣�5鍒嗛挓鎵ц涓�娆�
+--   - '0 0/15 * * * ?' = 姣�15鍒嗛挓鎵ц涓�娆�
+--   - '0 0/30 * * * ?' = 姣�30鍒嗛挓鎵ц涓�娆�
+-- misfire_policy: 閿欒繃鎵ц绛栫暐
+--   - 1=绔嬪嵆鎵ц
+--   - 2=鎵ц涓�娆�
+--   - 3=鏀惧純鎵ц锛堟帹鑽愶級
+-- concurrent: 鏄惁骞跺彂
+--   - 0=鍏佽骞跺彂
+--   - 1=绂佹骞跺彂锛堟帹鑽愶紝閬垮厤閲嶅鍚屾锛�
+-- status: 鐘舵��
+--   - 0=姝e父锛堝惎鐢級
+--   - 1=鏆傚仠锛堝仠鐢級
+-- create_by: 鍒涘缓鑰�
+-- create_time: 鍒涘缓鏃堕棿
+-- remark: 澶囨敞璇存槑
+
+-- 鍚屾渚濊禆鍏崇郴锛�
+-- 1. 蹇呴』鍏堟墽琛屾湇鍔″崟鍚屾锛坙egacySystemSyncTask.syncPendingTasks锛�
+-- 2. 鏈嶅姟鍗曞悓姝ユ垚鍔熷悗锛坰ync_status = 2, legacy_service_ord_id IS NOT NULL锛�
+-- 3. 鎵嶈兘鎵ц璋冨害鍗曞悓姝ワ紙syncPendingDispatchOrders锛�
+
+-- 瀹氭椂浠诲姟鎵ц閫昏緫锛�
+-- 1. 鏌ヨ鏉′欢锛�
+--    - sync_status = 2锛堟湇鍔″崟宸插悓姝ユ垚鍔燂級
+--    - legacy_service_ord_id IS NOT NULL锛堟湁ServiceOrdID锛�
+--    - dispatch_sync_status IN (0, 3)锛堣皟搴﹀崟鏈悓姝ユ垨鍚屾澶辫触锛�
+-- 2. 閫愪釜璋冪敤鏃х郴缁熸帴鍙� admin_save_24.asp
+-- 3. 姣忎釜璇锋眰闂撮殧1绉掞紝閬垮厤骞跺彂杩囬珮
+-- 4. 鏇存柊 dispatch_sync_status 鍜� legacy_dispatch_ord_id
+-- 5. 璁板綍閿欒淇℃伅鍒� dispatch_sync_error_msg 瀛楁
+
+-- 鐩戞帶鏌ヨ锛�
+-- 鏌ョ湅寰呭悓姝ヨ皟搴﹀崟鐨勪换鍔℃暟锛�
+SELECT COUNT(*) AS pending_dispatch_count
+FROM sys_task_emergency
+WHERE sync_status = 2
+  AND legacy_service_ord_id IS NOT NULL
+  AND (dispatch_sync_status = 0 OR dispatch_sync_status = 3);
+
+-- 鏌ョ湅浠婃棩璋冨害鍗曞悓姝ョ粺璁★細
+SELECT 
+    dispatch_sync_status,
+    CASE dispatch_sync_status
+        WHEN 0 THEN '鏈悓姝�'
+        WHEN 1 THEN '鍚屾涓�'
+        WHEN 2 THEN '鍚屾鎴愬姛'
+        WHEN 3 THEN '鍚屾澶辫触'
+    END AS status_name,
+    COUNT(*) AS count
+FROM sys_task_emergency
+WHERE DATE(create_time) = CURDATE()
+  AND legacy_service_ord_id IS NOT NULL
+GROUP BY dispatch_sync_status;
+
+-- 鏌ョ湅鍚屾澶辫触鐨勮皟搴﹀崟璇︽儏锛�
+SELECT 
+    task_id,
+    legacy_service_ord_id,
+    dispatch_sync_status,
+    dispatch_sync_time,
+    dispatch_sync_error_msg
+FROM sys_task_emergency
+WHERE dispatch_sync_status = 3
+ORDER BY id DESC
+LIMIT 20;
+
+-- 瀹屾暣鍚屾娴佺▼缁熻锛�
+SELECT 
+    CASE 
+        WHEN sync_status != 2 THEN '1.鏈嶅姟鍗曟湭鍚屾'
+        WHEN legacy_service_ord_id IS NULL THEN '2.鏈嶅姟鍗旾D涓虹┖'
+        WHEN dispatch_sync_status = 0 THEN '3.璋冨害鍗曞緟鍚屾'
+        WHEN dispatch_sync_status = 1 THEN '4.璋冨害鍗曞悓姝ヤ腑'
+        WHEN dispatch_sync_status = 2 THEN '5.璋冨害鍗曞悓姝ユ垚鍔�'
+        WHEN dispatch_sync_status = 3 THEN '6.璋冨害鍗曞悓姝ュけ璐�'
+        ELSE '7.鏈煡鐘舵��'
+    END AS sync_stage,
+    COUNT(*) AS count
+FROM sys_task_emergency
+WHERE DATE(create_time) = CURDATE()
+GROUP BY sync_stage
+ORDER BY sync_stage;
+
+-- 浣跨敤寤鸿锛�
+-- 1. 璋冨害鍗曞悓姝ュ簲鍦ㄦ湇鍔″崟鍚屾浠诲姟涔嬪悗鎵ц锛堟椂闂撮敊寮�5鍒嗛挓锛�
+-- 2. 濡傛湇鍔″崟姣�10鍒嗛挓鍚屾锛岃皟搴﹀崟鍙湪姣�10鍒嗛挓鐨勭5鍒嗛挓鍚屾
+--    渚嬪锛氭湇鍔″崟 '0 0/10 * * * ?'锛岃皟搴﹀崟 '0 5/10 * * * ?'
+-- 3. 鐢熶骇鐜寤鸿姣�10-15鍒嗛挓鎵ц涓�娆�
+-- 4. 鍙�氳繃淇敼 legacy.system.enabled=false 涓存椂绂佺敤鎵�鏈夊悓姝ュ姛鑳�
+
+-- 閿欒澶勭悊锛�
+-- 1. 濡傛灉璋冨害鍗曞悓姝ュけ璐ユ鏁拌繃澶氾紝妫�鏌ワ細
+--    - ASP鎺ュ彛 admin_save_24.asp 鏄惁姝e父
+--    - ServiceOrdID 鏄惁鏈夋晥
+--    - 鑱旂郴浜哄拰鐢佃瘽鏄惁缂哄け
+-- 2. 鍙�氳繃瀹氭椂浠诲姟鏃ュ織鏌ョ湅璇︾粏閿欒锛�
+--    绯荤粺鐩戞帶 -> 瀹氭椂浠诲姟 -> 璋冨害鏃ュ織
diff --git a/sql/legacy_system_sync_job.sql b/sql/legacy_system_sync_job.sql
new file mode 100644
index 0000000..eeb3df0
--- /dev/null
+++ b/sql/legacy_system_sync_job.sql
@@ -0,0 +1,64 @@
+-- 鏃х郴缁熻浆杩愪换鍔″悓姝ュ畾鏃朵换鍔¢厤缃甋QL
+-- 鍦╯ys_job琛ㄤ腑娣诲姞瀹氭椂浠诲姟
+
+-- 鎬ユ晳杞繍浠诲姟鑷姩鍚屾鍒版棫绯荤粺
+INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
+VALUES 
+('鏃х郴缁熻浆杩愪换鍔″悓姝�', 'DEFAULT', 'legacySystemSyncTask.syncPendingTasks', '0 0/10 * * * ?', '3', '1', '0', 'admin', sysdate(), 
+'姣�10鍒嗛挓鑷姩鍚屾鏈悓姝ユ垚鍔熺殑鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺銆傞粯璁ゅ惎鐢紝鍚屾澶辫触鐨勪换鍔′細鑷姩閲嶈瘯銆�');
+
+-- 璇存槑锛�
+-- job_name: 浠诲姟鍚嶇О
+-- job_group: 浠诲姟缁勫悕锛圖EFAULT涓洪粯璁ょ粍锛�
+-- invoke_target: 璋冪敤鐩爣瀛楃涓诧紙Bean鍚嶇О.鏂规硶鍚嶏級
+--   - legacySystemSyncTask.syncPendingTasks() 鎵归噺鍚屾鏈悓姝ョ殑浠诲姟
+--   - legacySystemSyncTask.syncTask('123') 鍚屾鎸囧畾ID鐨勪换鍔�
+-- cron_expression: cron琛ㄨ揪寮�
+--   - '0 0/10 * * * ?' = 姣�10鍒嗛挓鎵ц涓�娆�
+--   - '0 0/5 * * * ?' = 姣�5鍒嗛挓鎵ц涓�娆�
+--   - '0 0/30 * * * ?' = 姣�30鍒嗛挓鎵ц涓�娆�
+--   - '0 0 * * * ?' = 姣忓皬鏃舵墽琛屼竴娆�
+-- misfire_policy: 閿欒繃鎵ц绛栫暐
+--   - 1=绔嬪嵆鎵ц
+--   - 2=鎵ц涓�娆�
+--   - 3=鏀惧純鎵ц锛堟帹鑽愶級
+-- concurrent: 鏄惁骞跺彂
+--   - 0=鍏佽骞跺彂
+--   - 1=绂佹骞跺彂锛堟帹鑽愶紝閬垮厤閲嶅鍚屾锛�
+-- status: 鐘舵��
+--   - 0=姝e父锛堝惎鐢級
+--   - 1=鏆傚仠锛堝仠鐢級
+-- create_by: 鍒涘缓鑰�
+-- create_time: 鍒涘缓鏃堕棿
+-- remark: 澶囨敞璇存槑
+
+-- 浣跨敤寤鸿锛�
+-- 1. 鐢熶骇鐜寤鸿姣�10-30鍒嗛挓鎵ц涓�娆★紝閬垮厤棰戠箒璇锋眰鏃х郴缁�
+-- 2. 濡傛灉鏃х郴缁熸�ц兘杈冨ソ锛屽彲缂╃煭鑷�5鍒嗛挓
+-- 3. 濡傛灉鍚屾澶辫触鐜囬珮锛屽彲寤堕暱鑷�1灏忔椂锛屽苟浜哄伐浠嬪叆澶勭悊
+-- 4. 鍙�氳繃淇敼 legacy.system.enabled=false 涓存椂绂佺敤鍚屾鍔熻兘
+
+-- 瀹氭椂浠诲姟鎵ц閫昏緫锛�
+-- 1. 鏌ヨ sync_status = 0锛堟湭鍚屾锛夋垨 3锛堝悓姝ュけ璐ワ級鐨勪换鍔�
+-- 2. 閫愪釜璋冪敤鏃х郴缁熸帴鍙� admin_save_19.gds
+-- 3. 姣忎釜浠诲姟闂撮殧1绉掞紝閬垮厤骞跺彂杩囬珮
+-- 4. 鏇存柊鍚屾鐘舵�佸拰 legacy_service_ord_id
+-- 5. 璁板綍閿欒淇℃伅鍒� sync_error_msg 瀛楁
+
+-- 鐩戞帶鏌ヨ锛�
+-- 鏌ョ湅寰呭悓姝ヤ换鍔℃暟锛�
+-- SELECT COUNT(*) FROM sys_task_emergency WHERE sync_status IN (0, 3);
+
+-- 鏌ョ湅浠婃棩鍚屾缁熻锛�
+-- SELECT 
+--     sync_status,
+--     CASE sync_status
+--         WHEN 0 THEN '鏈悓姝�'
+--         WHEN 1 THEN '鍚屾涓�'
+--         WHEN 2 THEN '鍚屾鎴愬姛'
+--         WHEN 3 THEN '鍚屾澶辫触'
+--     END AS status_name,
+--     COUNT(*) AS count
+-- FROM sys_task_emergency
+-- WHERE DATE(create_time) = CURDATE()
+-- GROUP BY sync_status;
diff --git a/sql/legacy_vehicle_sync.sql b/sql/legacy_vehicle_sync.sql
new file mode 100644
index 0000000..b6e5f4e
--- /dev/null
+++ b/sql/legacy_vehicle_sync.sql
@@ -0,0 +1,41 @@
+-- ===========================
+-- 鏃х郴缁熻溅杈嗗悓姝ュ姛鑳界浉鍏砈QL
+-- ===========================
+
+-- 1. 鍦╰b_vehicle_info琛ㄤ腑娣诲姞car_id瀛楁锛堢敤浜庡瓨鍌⊿QL Server涓殑CarID锛�
+ALTER TABLE tb_vehicle_info 
+ADD COLUMN car_id INT NULL COMMENT '鏃х郴缁熻溅杈咺D(SQL Server CarID)' AFTER vehicle_id;
+
+-- 娣诲姞绱㈠紩
+ALTER TABLE tb_vehicle_info ADD INDEX idx_car_id (car_id);
+
+-- 2. 娣诲姞鏃х郴缁熻溅杈嗗悓姝ュ畾鏃朵换鍔�
+INSERT INTO sys_job (
+    job_name, 
+    job_group, 
+    invoke_target, 
+    cron_expression, 
+    misfire_policy, 
+    concurrent, 
+    status, 
+    create_by, 
+    create_time, 
+    remark
+) VALUES (
+    '鏃х郴缁熻溅杈嗗悓姝�',                              -- 浠诲姟鍚嶇О
+    'DEFAULT',                                      -- 浠诲姟缁勫悕
+    'legacyVehicleSyncTask.syncVehicles()',        -- 璋冪敤鐩爣瀛楃涓�
+    '0 0 2 * * ?',                                 -- 姣忓ぉ鍑屾櫒2鐐规墽琛�
+    '3',                                           -- 璁″垝鎵ц绛栫暐锛�3=涓嶈Е鍙戠珛鍗虫墽琛岋級
+    '1',                                           -- 鏄惁骞跺彂鎵ц锛�1=绂佹锛�
+    '0',                                           -- 鐘舵�侊紙0=姝e父锛�
+    'admin',                                       -- 鍒涘缓鑰�
+    sysdate(),                                     -- 鍒涘缓鏃堕棿
+    '浠嶴QL Server鐨凜arData琛ㄥ悓姝ヨ溅杈嗘暟鎹埌MySQL锛屽寘鎷溅鐗屽彿銆丆arID鍜岄儴闂ㄤ俊鎭�'
+);
+
+-- 鏌ョ湅琛ㄧ粨鏋�
+DESC tb_vehicle_info;
+
+-- 鏌ョ湅瀹氭椂浠诲姟
+SELECT * FROM sys_job WHERE job_name = '鏃х郴缁熻溅杈嗗悓姝�';
diff --git a/sql/sys_task_emergency.sql b/sql/sys_task_emergency.sql
index fcbd5b2..8db1baf 100644
--- a/sql/sys_task_emergency.sql
+++ b/sql/sys_task_emergency.sql
@@ -40,6 +40,9 @@
     passenger_contact VARCHAR(100) COMMENT '涔樺鑱旂郴浜�',
     passenger_phone VARCHAR(20) COMMENT '涔樺鑱旂郴鐢佃瘽',
     
+    -- 鐥呮儏璇婃柇淇℃伅
+    disease_ids VARCHAR(500) COMMENT '鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岄�楀彿鍒嗛殧锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛�',
+    
     -- 绯荤粺瀛楁
     create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
     update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
diff --git a/sql/update_sys_task_emergency_add_disease_ids.sql b/sql/update_sys_task_emergency_add_disease_ids.sql
new file mode 100644
index 0000000..1ce1c57
--- /dev/null
+++ b/sql/update_sys_task_emergency_add_disease_ids.sql
@@ -0,0 +1,10 @@
+-- ----------------------------
+-- 涓簊ys_task_emergency琛ㄦ坊鍔燿isease_ids瀛楁
+-- 鐢ㄤ簬瀛樺偍鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛夛紝鐢ㄤ簬鍚屾璋冨害鍗曠殑OrdICD_ID鍙傛暟
+-- 鎵ц鏃堕棿锛�2025-10-25
+-- ----------------------------
+
+-- 妫�鏌ュ瓧娈垫槸鍚﹀凡瀛樺湪锛屽鏋滀笉瀛樺湪鍒欐坊鍔�
+ALTER TABLE sys_task_emergency 
+ADD COLUMN IF NOT EXISTS disease_ids VARCHAR(500) COMMENT '鐥呮儏ID鍒楄〃锛圛CD-10鐤剧梾ID鍒楄〃锛岄�楀彿鍒嗛殧锛岀敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛�' 
+AFTER passenger_phone;
diff --git "a/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245-README.md" "b/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245-README.md"
new file mode 100644
index 0000000..70ad100
--- /dev/null
+++ "b/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245-README.md"
@@ -0,0 +1,159 @@
+# 鏃х郴缁熻溅杈嗗悓姝ュ姛鑳�
+
+## 蹇�熼摼鎺�
+
+- 馃摉 [璇︾粏鍔熻兘璇存槑](prd/鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�.md)
+- 馃殌 [蹇�熷紑濮嬫寚鍗梋(prd/鏃х郴缁熻溅杈嗗悓姝�-蹇�熷紑濮�.md)
+- 馃摑 [寮�鍙戞�荤粨](鏃х郴缁熻溅杈嗗悓姝ュ姛鑳藉紑鍙戞�荤粨.md)
+- 馃捑 [SQL鑴氭湰](sql/legacy_vehicle_sync.sql)
+
+## 鍔熻兘姒傝堪
+
+浠嶴QL Server鏃х郴缁熺殑CarData琛ㄨ嚜鍔ㄥ悓姝ヨ溅杈嗘暟鎹埌MySQL鐨則b_vehicle_info琛ㄣ��
+
+### 鏍稿績鍔熻兘
+
+鉁� 鍚屾杞﹁締CarID鍜岃溅鐗屽彿  
+鉁� 鏅鸿兘鍖归厤杞︾墝锛堟敮鎸佹ā绯婂尮閰嶏級  
+鉁� 鑷姩鍏宠仈閮ㄩ棬锛堥�氳繃CarOrdClass锛�  
+鉁� 瀹氭椂浠诲姟鑷姩鎵ц  
+鉁� 鏀寔鎵嬪姩瑙﹀彂鍚屾  
+
+## 蹇�熷紑濮�
+
+### 1. 鎵цSQL鑴氭湰
+
+```bash
+mysql -u root -p < sql/legacy_vehicle_sync.sql
+```
+
+### 2. 閲嶅惎搴旂敤
+
+```bash
+# Linux
+./ry.sh restart
+
+# Windows
+.\ry.bat
+```
+
+### 3. 楠岃瘉
+
+璁块棶锛氱郴缁熺洃鎺� 鈫� 瀹氭椂浠诲姟 鈫� 鏃х郴缁熻溅杈嗗悓姝� 鈫� 鎵ц涓�娆�
+
+## 鏁版嵁鏄犲皠
+
+| SQL Server (CarData) | MySQL (tb_vehicle_info) |
+|---------------------|------------------------|
+| CarId               | car_id                 |
+| CarLicense          | vehicle_no             |
+| CarOrdClass         | dept_id锛堥�氳繃dispatch_order_class鍖归厤锛� |
+
+## 鎶�鏈灦鏋�
+
+```
+SQL Server (CarData)
+        鈫�
+VehicleSyncDataService (@DataSource SQLSERVER)
+        鈫�
+VehicleSyncService (涓氬姟閫昏緫)
+        鈫�
+MySQL (tb_vehicle_info)
+```
+
+## 鎵ц鏂瑰紡
+
+### 瀹氭椂浠诲姟
+- 榛樿锛氭瘡澶╁噷鏅�2鐐硅嚜鍔ㄦ墽琛�
+- 鍙湪鍚庡彴绠$悊璋冩暣鎵ц鏃堕棿
+
+### 鎵嬪姩瑙﹀彂
+- **鏂瑰紡1**锛氱郴缁熺洃鎺� 鈫� 瀹氭椂浠诲姟 鈫� 鎵ц涓�娆�
+- **鏂瑰紡2**锛氳皟鐢ˋPI `POST /system/vehicle/sync/legacy`
+
+## 鏍稿績绠楁硶
+
+### 杞︾墝鍖归厤
+1. 绮剧‘鍖归厤锛歚娴橝12345` 鈫� `娴橝12345`
+2. 鎻愬彇鍖归厤锛歚娴橝12345锛堝椹帮級` 鈫� `娴橝12345`
+3. 妯$硦鍖归厤锛氬寘鍚叧绯诲垽鏂�
+
+### 閮ㄩ棬鍖归厤
+1. 瑙f瀽CarOrdClass锛歚HB.TI` 鈫� `['HB', 'TI']`
+2. 鍦╯ys_dept涓尮閰峝ispatch_order_class
+3. 杩斿洖绗竴涓尮閰嶇殑閮ㄩ棬ID
+
+## 鏂囦欢娓呭崟
+
+### 鏂板鏂囦欢锛�11涓級
+
+**Java绫�**
+- VehicleSyncDTO.java
+- VehicleSyncMapper.java
+- VehicleSyncDataServiceImpl.java
+- IVehicleSyncDataService.java
+- VehicleSyncServiceImpl.java
+- IVehicleSyncService.java
+- LegacyVehicleSyncTask.java
+- VehicleSyncController.java
+
+**閰嶇疆鏂囦欢**
+- VehicleSyncMapper.xml
+- legacy_vehicle_sync.sql
+
+**鏂囨。**
+- 鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�.md
+- 鏃х郴缁熻溅杈嗗悓姝�-蹇�熷紑濮�.md
+- 鏃х郴缁熻溅杈嗗悓姝ュ姛鑳藉紑鍙戞�荤粨.md
+
+### 淇敼鏂囦欢锛�2涓級
+
+- VehicleInfo.java锛堟柊澧瀋ar_id瀛楁锛�
+- VehicleInfoMapper.xml锛堟柊澧瀋ar_id鏄犲皠锛�
+
+## 楠岃瘉鍚屾缁撴灉
+
+```sql
+-- 鏌ヨ宸插悓姝ョ殑杞﹁締
+SELECT v.vehicle_no, v.car_id, d.dept_name, d.dispatch_order_class
+FROM tb_vehicle_info v
+LEFT JOIN sys_dept d ON v.dept_id = d.dept_id
+WHERE v.platform_code = 'LEGACY'
+ORDER BY v.create_time DESC;
+```
+
+## 甯歌闂
+
+### Q: 閮ㄩ棬鏈叧鑱旓紙dept_id涓篘ULL锛夛紵
+A: 妫�鏌ys_dept琛ㄤ腑鏄惁閰嶇疆浜嗗搴旂殑dispatch_order_class
+
+### Q: 濡備綍淇敼鎵ц鏃堕棿锛�
+A: 绯荤粺鐩戞帶 鈫� 瀹氭椂浠诲姟 鈫� 缂栬緫 鈫� 淇敼cron琛ㄨ揪寮�
+
+### Q: 濡備綍鏌ョ湅鍚屾鏃ュ織锛�
+A: 绯荤粺鐩戞帶 鈫� 瀹氭椂浠诲姟 鈫� 鏃ュ織
+
+## 鐩戞帶SQL
+
+```sql
+-- 缁熻鍚屾鎯呭喌
+SELECT 
+    COUNT(*) as total,
+    COUNT(dept_id) as with_dept,
+    COUNT(*) - COUNT(dept_id) as without_dept
+FROM tb_vehicle_info
+WHERE platform_code = 'LEGACY';
+```
+
+## 鐗堟湰淇℃伅
+
+- **鐗堟湰**: v1.0
+- **鏃ユ湡**: 2025-10-20
+- **鐘舵��**: 鉁� 宸插畬鎴愶紝缂栬瘧閫氳繃
+
+## 鎶�鏈敮鎸�
+
+濡傛湁闂锛岃鏌ョ湅锛�
+1. 璇︾粏鏂囨。锛歔鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�.md](prd/鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�.md)
+2. 绯荤粺鏃ュ織锛歚logs/sys-info.log`
+3. 瀹氭椂浠诲姟鏃ュ織锛氱郴缁熺洃鎺� 鈫� 瀹氭椂浠诲姟 鈫� 鏃ュ織
diff --git "a/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245\345\212\237\350\203\275\345\274\200\345\217\221\346\200\273\347\273\223.md" "b/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245\345\212\237\350\203\275\345\274\200\345\217\221\346\200\273\347\273\223.md"
new file mode 100644
index 0000000..69f7bc2
--- /dev/null
+++ "b/\346\227\247\347\263\273\347\273\237\350\275\246\350\276\206\345\220\214\346\255\245\345\212\237\350\203\275\345\274\200\345\217\221\346\200\273\347\273\223.md"
@@ -0,0 +1,490 @@
+# 鏃х郴缁熻溅杈嗗悓姝ュ姛鑳藉紑鍙戞�荤粨
+
+## 涓�銆侀渶姹傛杩�
+
+浠嶴QL Server鏃х郴缁熺殑CarData琛ㄥ悓姝ヨ溅杈嗘暟鎹埌MySQL鐨則b_vehicle_info琛紝涓昏瀹炵幇锛�
+
+1. **鏁版嵁鍚屾**锛氫粠SQL Server鏌ヨCarState=1鐨勮溅杈嗭紝鍚屾CarID鍜岃溅鐗屽彿
+2. **杞︾墝鍖归厤**锛氭敮鎸佺簿纭尮閰嶅拰妯$硦鍖归厤锛堝幓闄ゆ嫭鍙峰唴鍝佺墝淇℃伅锛�
+3. **閮ㄩ棬鍏宠仈**锛氶�氳繃瑙f瀽CarOrdClass瀛楁锛屽尮閰峴ys_dept鐨刣ispatch_order_class锛岃幏鍙栭儴闂↖D
+
+## 浜屻�佹妧鏈灦鏋�
+
+### 2.1 澶氭暟鎹簮鏋舵瀯
+
+閬靛惊鐜版湁鐨勫鏁版嵁婧愭灦鏋勮璁℃ā寮忥細
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�  VehicleSyncController (REST API)              鈹�
+鈹�  - 鎵嬪姩瑙﹀彂鍚屾                                  鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+                 鈹�
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�  LegacyVehicleSyncTask (瀹氭椂浠诲姟)                鈹�
+鈹�  - 瀹氭椂瑙﹀彂鍚屾                                  鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+                 鈹�
+         鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+         鈹�               鈹�
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�  鈹屸柤鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� VehicleSyncData   鈹�  鈹� VehicleSyncService      鈹�
+鈹� ServiceImpl       鈹�  鈹� Impl                    鈹�
+鈹� (鏌ヨSQL Server)  鈹�  鈹� (鍚屾鍒癕ySQL)            鈹�
+鈹� @DataSource(      鈹�  鈹�                         鈹�
+鈹�  SQLSERVER)       鈹�  鈹�                         鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�  鈹斺攢鈹�鈹攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+         鈹�                鈹�
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�  鈹屸攢鈹�鈻尖攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� VehicleSyncMapper 鈹�  鈹� VehicleInfoService      鈹�
+鈹� (SQL Server)      鈹�  鈹� SysDeptMapper           鈹�
+鈹� @DataSource(      鈹�  鈹� (MySQL)                 鈹�
+鈹�  SQLSERVER)       鈹�  鈹�                         鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�  鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+### 2.2 鍒嗗眰鑱岃矗
+
+| 灞傜骇 | 绫诲悕 | 鑱岃矗 |
+|-----|------|------|
+| Controller | VehicleSyncController | 鎻愪緵REST API锛屾墜鍔ㄨЕ鍙戝悓姝� |
+| Task | LegacyVehicleSyncTask | 瀹氭椂浠诲姟鎵ц鍏ュ彛 |
+| Service(鏁版嵁鏌ヨ) | VehicleSyncDataServiceImpl | 浠嶴QL Server鏌ヨ杞﹁締鏁版嵁 |
+| Service(鍚屾) | VehicleSyncServiceImpl | 灏嗘暟鎹悓姝ュ埌MySQL |
+| Mapper | VehicleSyncMapper | SQL Server鏁版嵁鏌ヨMapper |
+| DTO | VehicleSyncDTO | 鏁版嵁浼犺緭瀵硅薄 |
+
+## 涓夈�佸疄鐜拌鎯�
+
+### 3.1 鏂板鏂囦欢娓呭崟
+
+#### Java鏂囦欢锛�8涓級
+
+1. **VehicleSyncDTO.java**
+   - 璺緞锛歚ruoyi-system/src/main/java/com/ruoyi/system/domain/`
+   - 浣滅敤锛氬皝瑁匰QL Server鏌ヨ缁撴灉
+   - 瀛楁锛歝arId, carLicense, carOrdClass
+
+2. **VehicleSyncMapper.java**
+   - 璺緞锛歚ruoyi-system/src/main/java/com/ruoyi/system/mapper/`
+   - 浣滅敤锛歋QL Server鏁版嵁婧愭煡璇㈡帴鍙�
+   - 娉ㄨВ锛欯DataSource(DataSourceType.SQLSERVER)
+
+3. **IVehicleSyncDataService.java**
+   - 璺緞锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/`
+   - 浣滅敤锛氭暟鎹煡璇㈡湇鍔℃帴鍙�
+
+4. **VehicleSyncDataServiceImpl.java**
+   - 璺緞锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/impl/`
+   - 浣滅敤锛氭暟鎹煡璇㈡湇鍔″疄鐜�
+   - 娉ㄨВ锛欯DataSource(DataSourceType.SQLSERVER)
+
+5. **IVehicleSyncService.java**
+   - 璺緞锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/`
+   - 浣滅敤锛氬悓姝ユ湇鍔℃帴鍙�
+
+6. **VehicleSyncServiceImpl.java**
+   - 璺緞锛歚ruoyi-system/src/main/java/com/ruoyi/system/service/impl/`
+   - 浣滅敤锛氬悓姝ユ湇鍔″疄鐜帮紙鏍稿績涓氬姟閫昏緫锛�
+   - 鍔熻兘锛氳溅鐗屾彁鍙栥�侀儴闂ㄥ尮閰嶃�佹暟鎹悓姝�
+
+7. **LegacyVehicleSyncTask.java**
+   - 璺緞锛歚ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/`
+   - 浣滅敤锛氬畾鏃朵换鍔℃墽琛岀被
+   - Bean鍚嶇О锛歭egacyVehicleSyncTask
+
+8. **VehicleSyncController.java**
+   - 璺緞锛歚ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/`
+   - 浣滅敤锛歊EST API鎺у埗鍣�
+   - 鎺ュ彛锛歅OST /system/vehicle/sync/legacy
+
+#### XML鏂囦欢锛�1涓級
+
+9. **VehicleSyncMapper.xml**
+   - 璺緞锛歚ruoyi-system/src/main/resources/mapper/system/`
+   - 浣滅敤锛歋QL鏄犲皠鏂囦欢
+   - SQL锛氭煡璇arData琛�
+
+#### SQL鏂囦欢锛�1涓級
+
+10. **legacy_vehicle_sync.sql**
+    - 璺緞锛歚sql/`
+    - 鍐呭锛�
+      - 娣诲姞car_id瀛楁
+      - 娉ㄥ唽瀹氭椂浠诲姟
+
+#### 鏂囨。锛�2涓級
+
+11. **鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�.md**
+    - 璺緞锛歚prd/`
+    - 鍐呭锛氳缁嗗姛鑳借鏄庛�佹妧鏈疄鐜般�佹祴璇曢獙璇�
+
+12. **鏃х郴缁熻溅杈嗗悓姝�-蹇�熷紑濮�.md**
+    - 璺緞锛歚prd/`
+    - 鍐呭锛氬揩閫熼儴缃层�佸姛鑳介獙璇併�佸父瑙侀棶棰�
+
+### 3.2 淇敼鏂囦欢娓呭崟
+
+1. **VehicleInfo.java**
+   - 鏂板瀛楁锛歝arId (Integer)
+   - 鏂板getter/setter鏂规硶
+   - 鏇存柊toString鏂规硶
+
+2. **VehicleInfoMapper.xml**
+   - ResultMap鏂板锛歝ar_id瀛楁鏄犲皠
+   - selectVehicleInfoVo鏂板锛歝ar_id鏌ヨ
+   - insertVehicleInfo鏂板锛歝ar_id鎻掑叆
+   - updateVehicleInfo鏂板锛歝ar_id鏇存柊
+
+## 鍥涖�佹牳蹇冪畻娉曞疄鐜�
+
+### 4.1 杞︾墝鎻愬彇绠楁硶
+
+```java
+/**
+ * 鎻愬彇杞︾墝鍙凤紙鍘婚櫎鎷彿涓殑鍐呭锛�
+ * 渚嬪锛氭禉A12345锛堝椹帮級 -> 娴橝12345
+ */
+private String extractPlateNumber(String carLicense)
+{
+    if (StringUtils.isBlank(carLicense)) {
+        return null;
+    }
+    
+    String license = carLicense.trim();
+    
+    // 鏌ユ壘宸︽嫭鍙蜂綅缃紙鏀寔涓枃鍜岃嫳鏂囨嫭鍙凤級
+    int leftBracketIndex = license.indexOf('(');
+    int leftBracketIndexCn = license.indexOf('锛�');
+    
+    // 鍙栨渶灏忕殑鏈夋晥鎷彿浣嶇疆
+    int bracketIndex = -1;
+    if (leftBracketIndex >= 0 && leftBracketIndexCn >= 0) {
+        bracketIndex = Math.min(leftBracketIndex, leftBracketIndexCn);
+    } else if (leftBracketIndex >= 0) {
+        bracketIndex = leftBracketIndex;
+    } else if (leftBracketIndexCn >= 0) {
+        bracketIndex = leftBracketIndexCn;
+    }
+    
+    // 濡傛灉鎵惧埌鎷彿锛屾埅鍙栨嫭鍙峰墠鐨勯儴鍒�
+    if (bracketIndex > 0) {
+        return license.substring(0, bracketIndex).trim();
+    }
+    
+    return license;
+}
+```
+
+### 4.2 杞︾墝鍖归厤绠楁硶
+
+**涓夌骇鍖归厤绛栫暐**锛�
+
+1. **绮剧‘鍖归厤**锛氱洿鎺ラ�氳繃杞︾墝鍙锋煡璇�
+2. **鎻愬彇鍚庡尮閰�**锛氭彁鍙栨嫭鍙峰墠閮ㄥ垎鍚庢煡璇�
+3. **妯$硦鍖归厤**锛氶亶鍘嗘墍鏈夎溅杈嗭紝鍒ゆ柇鍖呭惈鍏崇郴
+
+```java
+private VehicleInfo findVehicleByPlateNumber(String plateNumber)
+{
+    // 鍏堝皾璇曠簿纭尮閰�
+    VehicleInfo vehicle = vehicleInfoService.selectVehicleInfoByPlateNumber(plateNumber);
+    if (vehicle != null) {
+        return vehicle;
+    }
+    
+    // 妯$硦鍖归厤
+    List<VehicleInfo> allVehicles = vehicleInfoService.selectVehicleInfoList(new VehicleInfo());
+    for (VehicleInfo v : allVehicles) {
+        String dbPlateNumber = extractPlateNumber(v.getVehicleNo());
+        if (plateNumber.contains(dbPlateNumber) || dbPlateNumber.contains(plateNumber)) {
+            return v;
+        }
+    }
+    
+    return null;
+}
+```
+
+### 4.3 閮ㄩ棬鍖归厤绠楁硶
+
+**瑙f瀽CarOrdClass娴佺▼**锛�
+
+1. 鎸夊垎闅旂锛坄.`, `,`, 绌烘牸锛夋媶鍒�
+2. 閬嶅巻姣忎釜缂栫爜
+3. 鍦╯ys_dept涓煡璇ispatch_order_class
+4. 杩斿洖绗竴涓尮閰嶇殑閮ㄩ棬ID
+
+```java
+private Long parseDeptIdFromCarOrdClass(String carOrdClass)
+{
+    if (StringUtils.isBlank(carOrdClass)) {
+        return null;
+    }
+    
+    // 鎷嗗垎CarOrdClass
+    String[] codes = carOrdClass.split("[.,\\s]+");
+    
+    for (String code : codes) {
+        if (StringUtils.isBlank(code)) {
+            continue;
+        }
+        
+        // 鏌ヨ鍖归厤dispatch_order_class鐨勯儴闂�
+        SysDept dept = findDeptByDispatchOrderClass(code.trim());
+        if (dept != null) {
+            return dept.getDeptId();
+        }
+    }
+    
+    return null;
+}
+```
+
+## 浜斻�佹暟鎹簱鍙樻洿
+
+### 5.1 琛ㄧ粨鏋勫彉鏇�
+
+```sql
+-- tb_vehicle_info琛ㄦ柊澧炲瓧娈�
+ALTER TABLE tb_vehicle_info 
+ADD COLUMN car_id INT NULL COMMENT '鏃х郴缁熻溅杈咺D(SQL Server CarID)' AFTER vehicle_id;
+
+ALTER TABLE tb_vehicle_info ADD INDEX idx_car_id (car_id);
+```
+
+### 5.2 瀹氭椂浠诲姟娉ㄥ唽
+
+```sql
+INSERT INTO sys_job (
+    job_name, job_group, invoke_target, cron_expression, 
+    misfire_policy, concurrent, status, create_by, create_time, remark
+) VALUES (
+    '鏃х郴缁熻溅杈嗗悓姝�', 'DEFAULT', 'legacyVehicleSyncTask.syncVehicles()', 
+    '0 0 2 * * ?', '3', '1', '0', 'admin', sysdate(),
+    '浠嶴QL Server鐨凜arData琛ㄥ悓姝ヨ溅杈嗘暟鎹埌MySQL'
+);
+```
+
+## 鍏�佸姛鑳界壒鎬�
+
+### 6.1 鏍稿績鐗规��
+
+鉁� **澶氭暟鎹簮鏀寔**
+- 浣跨敤@DataSource娉ㄨВ鑷姩鍒囨崲鏁版嵁婧�
+- 閬靛惊鐜版湁鏋舵瀯妯″紡
+
+鉁� **鏅鸿兘杞︾墝鍖归厤**
+- 绮剧‘鍖归厤
+- 鑷姩鎻愬彇鎷彿鍓嶅唴瀹�
+- 妯$硦鍖归厤锛堝寘鍚叧绯伙級
+
+鉁� **鐏垫椿閮ㄩ棬鍏宠仈**
+- 鏀寔鍗曠紪鐮侊細ZB
+- 鏀寔澶氱紪鐮侊細HB.TI
+- 鏀寔澶氬垎闅旂锛歚.`, `,`, 绌烘牸
+
+鉁� **骞傜瓑鎬ц璁�**
+- 閲嶅鎵ц涓嶄細浜х敓閲嶅鏁版嵁
+- 宸插瓨鍦ㄨ溅杈嗚嚜鍔ㄦ洿鏂�
+
+鉁� **浜嬪姟绠$悊**
+- 鏁翠綋浜嬪姟鎺у埗
+- 寮傚父鑷姩鍥炴粴
+
+鉁� **閿欒澶勭悊**
+- 鍗曟潯澶辫触涓嶅奖鍝嶅叾浠�
+- 璇︾粏閿欒淇℃伅璁板綍
+
+### 6.2 鎵ц鏂瑰紡
+
+1. **瀹氭椂浠诲姟鑷姩鎵ц**
+   - 榛樿锛氭瘡澶╁噷鏅�2鐐�
+   - 鍙�氳繃鍚庡彴绠$悊璋冩暣
+
+2. **鎵嬪姩瑙﹀彂**
+   - 鍚庡彴锛氱郴缁熺洃鎺� 鈫� 瀹氭椂浠诲姟 鈫� 鎵ц涓�娆�
+   - API锛歅OST /system/vehicle/sync/legacy
+
+3. **鏌ョ湅缁撴灉**
+   - 瀹氭椂浠诲姟鏃ュ織
+   - 绯荤粺鏃ュ織鏂囦欢
+   - API杩斿洖缁撴灉
+
+## 涓冦�佹祴璇曢獙璇�
+
+### 7.1 鍗曞厓娴嬭瘯鍦烘櫙
+
+| 娴嬭瘯椤� | 杈撳叆 | 棰勬湡杈撳嚭 |
+|-------|------|---------|
+| 杞︾墝鎻愬彇 | 娴橝12345锛堝椹帮級 | 娴橝12345 |
+| 杞︾墝鎻愬彇 | 娴橝12345(濂旈┌) | 娴橝12345 |
+| 杞︾墝鎻愬彇 | 娴橝12345 | 娴橝12345 |
+| 閮ㄩ棬鍖归厤 | HB | 鎵惧埌dispatch_order_class='HB'鐨勯儴闂� |
+| 閮ㄩ棬鍖归厤 | HB.TI | 鎵惧埌HB鎴朤I瀵瑰簲鐨勯儴闂� |
+| 閮ㄩ棬鍖归厤 | ZB,TI | 鎵惧埌ZB鎴朤I瀵瑰簲鐨勯儴闂� |
+
+### 7.2 闆嗘垚娴嬭瘯
+
+**娴嬭瘯姝ラ**锛�
+1. 鍑嗗SQL Server娴嬭瘯鏁版嵁
+2. 鍑嗗MySQL閮ㄩ棬鏁版嵁锛坉ispatch_order_class锛�
+3. 鎵ц鍚屾浠诲姟
+4. 楠岃瘉tb_vehicle_info琛ㄦ暟鎹�
+5. 楠岃瘉閮ㄩ棬鍏宠仈
+
+**楠岃瘉SQL**锛�
+```sql
+-- 鏌ヨ鍚屾缁撴灉
+SELECT v.vehicle_no, v.car_id, d.dept_name, d.dispatch_order_class
+FROM tb_vehicle_info v
+LEFT JOIN sys_dept d ON v.dept_id = d.dept_id
+WHERE v.platform_code = 'LEGACY';
+```
+
+## 鍏�侀儴缃茶鏄�
+
+### 8.1 閮ㄧ讲姝ラ
+
+1. **鎵цSQL鑴氭湰**
+   ```bash
+   mysql -u root -p < sql/legacy_vehicle_sync.sql
+   ```
+
+2. **缂栬瘧鎵撳寘**
+   ```bash
+   mvn clean package
+   ```
+
+3. **閲嶅惎搴旂敤**
+   ```bash
+   ./ry.sh restart  # Linux
+   .\ry.bat         # Windows
+   ```
+
+4. **楠岃瘉閮ㄧ讲**
+   - 璁块棶鍚庡彴绠$悊
+   - 妫�鏌ュ畾鏃朵换鍔℃槸鍚︽敞鍐�
+   - 鎵嬪姩鎵ц涓�娆℃祴璇�
+
+### 8.2 閰嶇疆妫�鏌�
+
+**蹇呴』纭繚鐨勯厤缃�**锛�
+
+1. 鉁� SQL Server鏁版嵁婧愰厤缃纭紙application-dev.yml锛�
+2. 鉁� sys_dept琛ㄤ腑鏈塪ispatch_order_class鏁版嵁
+3. 鉁� CarData琛ㄦ湁CarState=1鐨勬暟鎹�
+
+## 涔濄�佺洃鎺т笌缁存姢
+
+### 9.1 鏃ュ父鐩戞帶
+
+**鍏抽敭鎸囨爣**锛�
+- 鍚屾鎴愬姛鐜�
+- 閮ㄩ棬鍏宠仈鐜�
+- 鎵ц鏃堕暱
+
+**鐩戞帶SQL**锛�
+```sql
+-- 缁熻鍚屾鎯呭喌
+SELECT 
+    COUNT(*) as total,
+    COUNT(dept_id) as with_dept,
+    COUNT(*) - COUNT(dept_id) as without_dept
+FROM tb_vehicle_info
+WHERE platform_code = 'LEGACY';
+```
+
+### 9.2 寮傚父澶勭悊
+
+**甯歌寮傚父鍙婂鐞�**锛�
+
+1. **鏁版嵁婧愯繛鎺ュけ璐�**
+   - 妫�鏌ョ綉缁滆繛鎺�
+   - 楠岃瘉鏁版嵁搴撻厤缃�
+
+2. **閮ㄩ棬鏈叧鑱�**
+   - 妫�鏌ispatch_order_class閰嶇疆
+   - 鏌ョ湅CarOrdClass鏍煎紡
+
+3. **杞︾墝鍖归厤澶辫触**
+   - 妫�鏌ヨ溅鐗屽彿鏍煎紡
+   - 鏌ョ湅鏃ュ織璇︽儏
+
+## 鍗併�佹�ц兘浼樺寲
+
+### 10.1 宸插疄鐜扮殑浼樺寲
+
+鉁� **鎵归噺鏌ヨ**
+- 涓�娆℃�ф煡璇㈡墍鏈夎溅杈�
+- 閬垮厤N+1鏌ヨ闂
+
+鉁� **绱㈠紩浼樺寲**
+- car_id瀛楁宸插缓绔嬬储寮�
+- dispatch_order_class瀛楁宸叉湁绱㈠紩
+
+鉁� **浜嬪姟鎺у埗**
+- 鏁翠綋浜嬪姟锛屽噺灏戞彁浜ゆ鏁�
+
+### 10.2 鍚庣画浼樺寲寤鸿
+
+1. **澧為噺鍚屾**
+   - 娣诲姞鍚屾鏃堕棿瀛楁
+   - 鍙悓姝ュ彉鏇存暟鎹�
+
+2. **骞跺彂鎺у埗**
+   - 闃叉閲嶅鎵ц
+   - 娣诲姞鍒嗗竷寮忛攣
+
+3. **缂撳瓨浼樺寲**
+   - 缂撳瓨閮ㄩ棬缂栫爜鏄犲皠
+   - 鍑忓皯鏁版嵁搴撴煡璇�
+
+## 鍗佷竴銆佹�荤粨
+
+### 11.1 瀹屾垚鎯呭喌
+
+鉁� **鍔熻兘瀹屾暣鎬�**
+- 鎵�鏈夐渶姹傚姛鑳藉潎宸插疄鐜�
+- 鏀寔瀹氭椂鍜屾墜鍔ㄤ袱绉嶅悓姝ユ柟寮�
+
+鉁� **浠g爜璐ㄩ噺**
+- 閬靛惊鐜版湁鏋舵瀯妯″紡
+- 浠g爜缁撴瀯娓呮櫚锛屾敞閲婂畬鏁�
+- 鎵�鏈夋枃浠剁紪璇戦�氳繃
+
+鉁� **鏂囨。瀹屽杽**
+- 璇︾粏鍔熻兘璇存槑鏂囨。
+- 蹇�熷紑濮嬫寚鍗�
+- 寮�鍙戞�荤粨鏂囨。
+
+### 11.2 鎶�鏈寒鐐�
+
+1. **澶氭暟鎹簮鏋舵瀯**锛氬畬缇庤瀺鍏ョ幇鏈夋灦鏋�
+2. **鏅鸿兘鍖归厤绠楁硶**锛氳溅鐗屽拰閮ㄩ棬鐨勭伒娲诲尮閰�
+3. **閿欒澶勭悊鏈哄埗**锛氬崟鏉″け璐ヤ笉褰卞搷鏁翠綋
+4. **骞傜瓑鎬ц璁�**锛氭敮鎸侀噸澶嶆墽琛�
+5. **璇︾粏鏃ュ織**锛氫究浜庨棶棰樻帓鏌�
+
+### 11.3 鏂囦欢缁熻
+
+- **鏂板Java鏂囦欢**锛�8涓�
+- **鏂板XML鏂囦欢**锛�1涓�
+- **鏂板SQL鏂囦欢**锛�1涓�
+- **淇敼Java鏂囦欢**锛�1涓�
+- **淇敼XML鏂囦欢**锛�1涓�
+- **鏂板鏂囨。**锛�3涓�
+
+**鎬昏**锛氭柊澧�11涓枃浠讹紝淇敼2涓枃浠�
+
+## 鍗佷簩銆佺浉鍏虫枃妗�
+
+1. **鍔熻兘璇存槑**锛歚prd/鏃х郴缁熻溅杈嗗悓姝ュ姛鑳借鏄�.md`
+2. **蹇�熷紑濮�**锛歚prd/鏃х郴缁熻溅杈嗗悓姝�-蹇�熷紑濮�.md`
+3. **SQL鑴氭湰**锛歚sql/legacy_vehicle_sync.sql`
+
+---
+
+**寮�鍙戝畬鎴愭椂闂�**锛�2025-10-20  
+**寮�鍙戣��**锛歈oder AI  
+**鐗堟湰**锛歷1.0

--
Gitblit v1.9.1