fix:增加旧系统状态同步到新系统,新系统状态同步到旧系统
| | |
| | | import { getUnreadCount } from '@/api/message' |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | messagePollingTimer: null, |
| | | lastToken: null // ç¨äºæ£æµ token åå |
| | | } |
| | | }, |
| | | onLaunch: function() { |
| | | this.lastToken = getToken() |
| | | this.initApp() |
| | | |
| | | // çå¬ç¨æ·ç»åºäºä»¶ |
| | | uni.$on('user-logout', () => { |
| | | console.log('æ¥æ¶å°ç¨æ·ç»åºäºä»¶ï¼åæ¢æ¶æ¯è½®è¯¢') |
| | | this.stopMessagePolling() |
| | | this.lastToken = null |
| | | // æ¸
餿¶æ¯å¾½æ |
| | | uni.removeTabBarBadge({ index: 3 }) |
| | | }) |
| | | }, |
| | | onShow: function() { |
| | | // åºç¨æ¾ç¤ºæ¶å·æ°æªè¯»æ¶æ¯æ°é |
| | | if (getToken()) { |
| | | this.updateUnreadMessageBadge() |
| | | const currentToken = getToken() |
| | | |
| | | // æ£æµ token ååï¼ä»æå°æ ï¼ç»åºï¼ |
| | | if (this.lastToken && !currentToken) { |
| | | console.log('æ£æµå°ç¨æ·å·²ç»åºï¼åæ¢æ¶æ¯è½®è¯¢') |
| | | this.stopMessagePolling() |
| | | this.lastToken = currentToken |
| | | return |
| | | } |
| | | |
| | | // æ£æµ token ååï¼ä»æ å°æï¼ç»å½ï¼ |
| | | if (!this.lastToken && currentToken) { |
| | | console.log('æ£æµå°ç¨æ·å·²ç»å½ï¼å¯å¨æ¶æ¯è½®è¯¢') |
| | | this.lastToken = currentToken |
| | | } |
| | | |
| | | // åºç¨æ¾ç¤ºæ¶å·æ°æªè¯»æ¶æ¯æ°é |
| | | if (currentToken) { |
| | | this.updateUnreadMessageBadge() |
| | | // éæ°å¯å¨è½®è¯¢ï¼å¦æä¹åå·²åæ¢ï¼ |
| | | if (!this.messagePollingTimer) { |
| | | this.startMessagePolling() |
| | | } |
| | | } |
| | | }, |
| | | onHide: function() { |
| | | // åºç¨éèæ¶åæ¢è½®è¯¢ï¼èçèµæº |
| | | this.stopMessagePolling() |
| | | }, |
| | | methods: { |
| | | // åå§ååºç¨ |
| | |
| | | |
| | | // æ´æ°æªè¯»æ¶æ¯å¾½æ |
| | | updateUnreadMessageBadge() { |
| | | // æ£æ¥æ¯å¦å·²ç»å½ï¼æªç»å½åä¸è¯·æ± |
| | | if (!getToken()) { |
| | | console.log('ç¨æ·æªç»å½ï¼è·³è¿è·åæªè¯»æ¶æ¯æ°é') |
| | | return |
| | | } |
| | | |
| | | getUnreadCount().then(response => { |
| | | const count = response.data || 0 |
| | | console.log('æªè¯»æ¶æ¯æ°é:', count) |
| | |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹ä»»å¡ç¶æ |
| | | * @param {*} taskId |
| | | * @param {*} data |
| | | * @returns |
| | | */ |
| | | export function changeTaskStatus(taskId, data) { |
| | | return request({ |
| | | url: '/task/' + taskId + '/status', |
| | |
| | | |
| | | // å è½½æªè¯»æ¶æ¯æ°é |
| | | loadUnreadMessageCount() { |
| | | // æ£æ¥ç¨æ·æ¯å¦å·²ç»å½ |
| | | const userId = this.currentUser.userId |
| | | if (!userId) { |
| | | console.log('ç¨æ·æªç»å½ï¼è·³è¿è·åæªè¯»æ¶æ¯æ°é') |
| | | return |
| | | } |
| | | |
| | | getUnreadCount().then(response => { |
| | | if (response.code === 200) { |
| | | this.unreadMessageCount = response.data || 0 |
| | |
| | | getTask(this.taskId).then(response => { |
| | | this.taskDetail = response.data || response |
| | | // è°è¯ï¼æå°è¿åçæ°æ® |
| | | console.log('ä»»å¡è¯¦æ
宿´æ°æ®:', JSON.stringify(this.taskDetail, null, 2)) |
| | | console.log('ä»»å¡ç±»ååæ®µå¼:', this.taskDetail.taskType) |
| | | console.log('ä»»å¡ç¶æå段å¼:', this.taskDetail.taskStatus) |
| | | console.log('åºåå°å:', this.taskDetail.departureAddress) |
| | | console.log('ç®çå°å:', this.taskDetail.destinationAddress) |
| | | // console.log('ä»»å¡è¯¦æ
宿´æ°æ®:', JSON.stringify(this.taskDetail, null, 2)) |
| | | // console.log('ä»»å¡ç±»ååæ®µå¼:', this.taskDetail.taskType) |
| | | // console.log('ä»»å¡ç¶æå段å¼:', this.taskDetail.taskStatus) |
| | | // console.log('åºåå°å:', this.taskDetail.departureAddress) |
| | | // console.log('ç®çå°å:', this.taskDetail.destinationAddress) |
| | | }).catch(error => { |
| | | console.error('å 载任å¡è¯¦æ
失败:', error) |
| | | this.$modal.showToast('å 载任å¡è¯¦æ
失败') |
| | |
| | | |
| | | <scroll-view class="task-list-scroll" scroll-y="true"> |
| | | <view class="task-list"> |
| | | <view class="task-item" v-for="task in filteredTaskList" :key="task.id"> |
| | | <view class="task-item" v-for="task in filteredTaskList" :key="task.taskId"> |
| | | <view class="task-main" @click="viewTaskDetail(task)"> |
| | | <!-- ä»»å¡å¤´é¨ï¼æ é¢åç¶ææ ç¾ --> |
| | | <view class="task-header"> |
| | |
| | | |
| | | // æ¥çä»»å¡è¯¦æ
|
| | | viewTaskDetail(task) { |
| | | // 跳转å°ä»»å¡è¯¦æ
é¡µé¢ - ä¿®å¤:使ç¨taskIdè䏿¯id |
| | | this.$tab.navigateTo(`/pages/task/detail?id=${task.taskId}`); |
| | | // é²å¾¡æ§æ£æ¥ |
| | | if (!task || !task.taskId) { |
| | | console.error('任塿°æ®æ æ:', task) |
| | | this.$modal.showToast('任塿°æ®å¼å¸¸') |
| | | return |
| | | } |
| | | |
| | | // 跳转å°ä»»å¡è¯¦æ
é¡µé¢ - 使ç¨uni.navigateTo |
| | | uni.navigateTo({ |
| | | url: `/pages/task/detail?id=${task.taskId}` |
| | | }); |
| | | }, |
| | | |
| | | // å¤çä»»å¡æä½ |
| | |
| | | |
| | | changeTaskStatus(taskId, statusData).then(response => { |
| | | that.$modal.showToast('ç¶ææ´æ°æå') |
| | | // å·æ°ä»»å¡å表 |
| | | that.loadTaskList() |
| | | }).catch(error => { |
| | | console.error('æ´æ°ä»»å¡ç¶æå¤±è´¥:', error) |
| | |
| | | |
| | | changeTaskStatus(taskId, statusData).then(response => { |
| | | that.$modal.showToast('ç¶ææ´æ°æå') |
| | | // å·æ°ä»»å¡å表 |
| | | that.loadTaskList() |
| | | }).catch(error => { |
| | | console.error('æ´æ°ä»»å¡ç¶æå¤±è´¥:', error) |
| | |
| | | commit('SET_PERMISSIONS', []) |
| | | removeToken() |
| | | storage.clean() |
| | | |
| | | // 触åå
¨å±äºä»¶ï¼éç¥ App.vue åæ¢è½®è¯¢ |
| | | uni.$emit('user-logout') |
| | | |
| | | resolve() |
| | | }).catch(error => { |
| | | // å³ä½¿éåºæ¥å£å¤±è´¥ï¼ä¹è¦æ¸
空æ¬å°ç¶æ |
| | | commit('SET_TOKEN', '') |
| | | commit('SET_ROLES', []) |
| | | commit('SET_PERMISSIONS', []) |
| | | removeToken() |
| | | storage.clean() |
| | | |
| | | // 触åå
¨å±äºä»¶ |
| | | uni.$emit('user-logout') |
| | | |
| | | reject(error) |
| | | }) |
| | | }) |
| New file |
| | |
| | | # æ§ç³»ç»ä»»å¡ç¶æåæ¥åè½è¯´æ |
| | | |
| | | ## ð åè½æ¦è¿° |
| | | |
| | | å®ç°ä»æ§ç³»ç»åæ¥ä»»å¡ç¶æå°æ°ç³»ç»ï¼ç¡®ä¿æ°æ§ç³»ç»çä»»å¡ç¶æä¿æä¸è´ã彿§ç³»ç»æä½äººåæ´æ°è°åº¦åç¶æåï¼æ°ç³»ç»è½å¤èªå¨è·åææ°ç¶æå¹¶æ´æ°æ¬å°ä»»å¡ã |
| | | |
| | | ## ð¯ ä¸å¡åºæ¯ |
| | | |
| | | 1. **ç¶æå®æ¶æ´æ°**: æ§ç³»ç»å¸æº/廿¤äººåæ´æ°äºä»»å¡ç¶æï¼æ°ç³»ç»éè¦åæ¥æ¾ç¤º |
| | | 2. **åç³»ç»å¹¶è¡**: æ°æ§ç³»ç»åæ¶ä½¿ç¨æé´ï¼ä¿ææ°æ®ä¸è´æ§ |
| | | 3. **ç¶æçæ§**: éè¿æ°ç³»ç»çæ§æ§ç³»ç»ä»»å¡æ§è¡æ
åµ |
| | | |
| | | ## ð ç¶ææ å°è§å |
| | | |
| | | ### æ§ç³»ç» â æ°ç³»ç»ç¶ææ å° |
| | | |
| | | | æ§ç³»ç»ç¶æ | ç¶æç | æ°ç³»ç»ç¶æ | 说æ | |
| | | |---------|-------|---------|------| |
| | | | æ°è°åº¦åï¼æªä¸åï¼ | 0 | PENDING | å¾
å¤ç | |
| | | | å®å
¨æªç¡®è®¤ | 1 | PENDING | å¾
å¤ç | |
| | | | é¨å已确认 | 2 | PENDING | å¾
å¤ç | |
| | | | æªåºè½¦ | 3 | PENDING | å¾
å¤ç | |
| | | | å·²åºè½¦ï¼å»æ¥æ£è
éä¸ï¼ | 4 | DEPARTING | åºåä¸ | |
| | | | å·²åºè½¦ï¼çå¾
æ£è
ï¼ | 5 | ARRIVED | å·²å°è¾¾ | |
| | | | å·²åºè½¦ï¼æå¡ä¸ï¼ | 6 | IN_PROGRESS | ä»»å¡ä¸ | |
| | | | å·²éè¾¾ï¼åç¨ä¸ï¼ | 7 | RETURNING | è¿ç¨ä¸ | |
| | | | å·²è¿å | 8 | COMPLETED | 已宿 | |
| | | | è·ç©ºåï¼å·²è¿å | 9 | COMPLETED | 已宿 | |
| | | | 忶 | 10 | CANCELLED | 已忶 | |
| | | | å·²æäº¤ï¼çå¾
å®¡æ ¸ | 11 | PENDING | å¾
å¤ç | |
| | | | å®¡æ ¸å®æ | 12 | PENDING | å¾
å¤ç | |
| | | | å®¡æ ¸ä¸éè¿ | 13 | CANCELLED | 已忶 | |
| | | | å·²é©»ç¹ | 14 | ARRIVED | å·²å°è¾¾ | |
| | | |
| | | ## ð§ ææ¯å®ç° |
| | | |
| | | ### 1. æ ¸å¿æä»¶ |
| | | |
| | | #### ç¶æè½¬æ¢å·¥å
·ç±» |
| | | - **æä»¶**: `TaskStatusConverter.java` |
| | | - **ä½ç½®**: `ruoyi-system/src/main/java/com/ruoyi/system/utils/` |
| | | - **åè½**: |
| | | - æ§ç³»ç»ç¶æç 转æ°ç³»ç»ç¶ææä¸¾ |
| | | - æ°ç³»ç»ç¶ææä¸¾è½¬æ§ç³»ç»ç¶æç |
| | | - ç¶ææè¿°æ¥è¯¢ |
| | | |
| | | ```java |
| | | // 使ç¨ç¤ºä¾ |
| | | TaskStatus newStatus = TaskStatusConverter.convertFromLegacyStatus(4); |
| | | // è¿å: TaskStatus.DEPARTING |
| | | |
| | | Integer legacyCode = TaskStatusConverter.convertToLegacyStatus(TaskStatus.DEPARTING); |
| | | // è¿å: 4 |
| | | |
| | | String description = TaskStatusConverter.getLegacyStatusDescription(4); |
| | | // è¿å: "å·²åºè½¦ï¼å»æ¥æ£è
éä¸ï¼" |
| | | ``` |
| | | |
| | | #### 忥æå¡æ¥å£ |
| | | - **æ¥å£**: `ILegacySystemSyncService.java` |
| | | - **å®ç°**: `LegacySystemSyncServiceImpl.java` |
| | | - **æ°å¢æ¹æ³**: |
| | | - `syncTaskStatusFromLegacy(Long taskId)`: 忥å个任å¡ç¶æ |
| | | - `batchSyncTaskStatusFromLegacy()`: æ¹é忥任å¡ç¶æ |
| | | |
| | | #### 宿¶ä»»å¡ |
| | | - **æä»¶**: `LegacySystemSyncTask.java` |
| | | - **ä½ç½®**: `ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/` |
| | | - **æ¹æ³**: `syncTaskStatusFromLegacy()` |
| | | - **æ§è¡é¢ç**: 建议æ¯5åé䏿¬¡ |
| | | |
| | | ### 2. é
ç½®æä»¶ |
| | | |
| | | #### æ§ç³»ç»é
ç½® |
| | | ```yaml |
| | | # application.yml |
| | | legacy: |
| | | system: |
| | | base-url: http://legacy-system.com |
| | | status-query-path: /task_status_query.asp # æ°å¢ç¶ææ¥è¯¢æ¥å£è·¯å¾ |
| | | enabled: true |
| | | ``` |
| | | |
| | | #### 宿¶ä»»å¡é
ç½® |
| | | æ§è¡SQLèæ¬: `sql/legacy_status_sync_job.sql` |
| | | |
| | | ```sql |
| | | -- ä»»å¡é
ç½® |
| | | ä»»å¡åç§°: ä»»å¡ç¶æåæ¥ |
| | | è°ç¨ç®æ : legacySystemSyncTask.syncTaskStatusFromLegacy() |
| | | Cron表达å¼: 0 0/5 * * * ? (æ¯5åéæ§è¡ä¸æ¬¡) |
| | | ``` |
| | | |
| | | ### 3. 忥æµç¨ |
| | | |
| | | ```mermaid |
| | | graph TB |
| | | A[宿¶ä»»å¡å¯å¨] --> B[æ¥è¯¢é忥任å¡] |
| | | B --> C{æ¯å¦æä»»å¡} |
| | | C -->|æ¯| D[éåä»»å¡å表] |
| | | C -->|å¦| E[ç»æ] |
| | | D --> F[æ¥è¯¢æ§ç³»ç»ç¶æ] |
| | | F --> G{æ¥è¯¢æå?} |
| | | G -->|æ¯| H[ç¶æç 转æ¢] |
| | | G -->|å¦| I[è®°å½é误æ¥å¿] |
| | | H --> J{ç¶ææ¯å¦åå?} |
| | | J -->|æ¯| K[æ´æ°ä»»å¡ç¶æ] |
| | | J -->|å¦| L[è·³è¿æ´æ°] |
| | | K --> M[设置æ¶é´æ³] |
| | | M --> N[ä¿åä»»å¡] |
| | | L --> D |
| | | N --> D |
| | | I --> D |
| | | D --> O{æ¯å¦å®æ} |
| | | O -->|å¦| D |
| | | O -->|æ¯| P[ç»è®¡åæ¥ç»æ] |
| | | P --> E |
| | | ``` |
| | | |
| | | ### 4. æ°æ®åºæ¥è¯¢ |
| | | |
| | | #### Mapperæ°å¢æ¹æ³ |
| | | ```xml |
| | | <!-- æ¥è¯¢å·²åæ¥è°åº¦åä¸ç¶ææªå®æçä»»å¡ --> |
| | | <select id="selectSyncedTasksForStatusUpdate" resultMap="SysTaskEmergencyResult"> |
| | | SELECT * FROM sys_task_emergency |
| | | WHERE dispatch_sync_status = 2 |
| | | AND legacy_dispatch_ord_id IS NOT NULL |
| | | AND task_id IN ( |
| | | SELECT task_id FROM sys_task |
| | | WHERE task_status NOT IN ('COMPLETED', 'CANCELLED') |
| | | AND del_flag = '0' |
| | | ) |
| | | ORDER BY id ASC |
| | | LIMIT 200 |
| | | </select> |
| | | ``` |
| | | |
| | | ## ð é¨ç½²æ¥éª¤ |
| | | |
| | | ### 1. 代ç é¨ç½² |
| | | ```bash |
| | | # éæ°ç¼è¯é¡¹ç® |
| | | mvn clean package |
| | | |
| | | # éå¯åºç¨ |
| | | ./ry.sh restart |
| | | ``` |
| | | |
| | | ### 2. é
ç½®æ§ç³»ç»æ¥å£ |
| | | |
| | | ç¡®ä¿æ§ç³»ç»æä¾ç¶ææ¥è¯¢æ¥å£ï¼æ¥å£è§è: |
| | | - **URL**: `/task_status_query.asp` |
| | | - **æ¹æ³**: POST |
| | | - **åæ°**: `DispatchOrdID` (è°åº¦åID) |
| | | - **ååºæ ¼å¼**: |
| | | - æå: `OK:ç¶æç ` (å¦: `OK:4`) |
| | | - 失败: `ERROR:é误信æ¯` |
| | | |
| | | ### 3. æ·»å 宿¶ä»»å¡ |
| | | |
| | | æ§è¡SQLèæ¬: |
| | | ```bash |
| | | mysql -u root -p your_database < sql/legacy_status_sync_job.sql |
| | | ``` |
| | | |
| | | æå¨ç³»ç»ç®¡çç颿卿·»å : |
| | | 1. ç»å½ç³»ç»ç®¡çåå° |
| | | 2. è¿å
¥ `ç³»ç»ç®¡ç` -> `宿¶ä»»å¡` |
| | | 3. ç¹å» `æ°å¢` |
| | | 4. å¡«åä»»å¡ä¿¡æ¯: |
| | | - ä»»å¡åç§°: ä»»å¡ç¶æåæ¥ |
| | | - è°ç¨ç®æ å符串: `legacySystemSyncTask.syncTaskStatusFromLegacy()` |
| | | - Cron表达å¼: `0 0/5 * * * ?` |
| | | - ç¶æ: æ£å¸¸ |
| | | 5. ä¿åå¹¶å¯å¨ä»»å¡ |
| | | |
| | | ### 4. éªè¯åè½ |
| | | |
| | | #### æå¨è§¦åæµè¯ |
| | | ```java |
| | | // å¨å®æ¶ä»»å¡ç®¡ç页é¢ç¹å»"æ§è¡ä¸æ¬¡"æé® |
| | | // æå¨ä»£ç ä¸è°ç¨ |
| | | @Autowired |
| | | private ILegacySystemSyncService legacySystemSyncService; |
| | | |
| | | // 忥åä¸ªä»»å¡ |
| | | boolean success = legacySystemSyncService.syncTaskStatusFromLegacy(taskId); |
| | | |
| | | // æ¹é忥 |
| | | int count = legacySystemSyncService.batchSyncTaskStatusFromLegacy(); |
| | | ``` |
| | | |
| | | #### æ¥çåæ¥ç»æ |
| | | ```sql |
| | | -- æ¥çæè¿åæ¥çä»»å¡ |
| | | SELECT |
| | | t.task_id, |
| | | t.task_code, |
| | | t.task_status, |
| | | e.legacy_dispatch_ord_id, |
| | | t.update_time |
| | | FROM sys_task t |
| | | INNER JOIN sys_task_emergency e ON t.task_id = e.task_id |
| | | WHERE e.dispatch_sync_status = 2 |
| | | ORDER BY t.update_time DESC |
| | | LIMIT 20; |
| | | ``` |
| | | |
| | | #### æ¥çæ¥å¿ |
| | | ```bash |
| | | # æ¥çåºç¨æ¥å¿ |
| | | tail -f logs/sys-info.log | grep "ä»»å¡ç¶æåæ¥" |
| | | ``` |
| | | |
| | | ## ð 忥è§å |
| | | |
| | | ### 忥æ¡ä»¶ |
| | | ä»»å¡éè¦æ»¡è¶³ä»¥ä¸æææ¡ä»¶æä¼è¢«åæ¥: |
| | | 1. â
è°åº¦å已忥æå (`dispatch_sync_status = 2`) |
| | | 2. â
å卿§ç³»ç»è°åº¦åID (`legacy_dispatch_ord_id IS NOT NULL`) |
| | | 3. â
ä»»å¡ç¶ææªå®æ (`task_status NOT IN ('COMPLETED', 'CANCELLED')`) |
| | | 4. â
任塿ªå é¤ (`del_flag = '0'`) |
| | | |
| | | ### ç¶ææ´æ°è§å |
| | | 1. **ç¶æç¸å**: 䏿´æ°ï¼è·³è¿ |
| | | 2. **ç¶æä¸å**: æ´æ°ä»»å¡ç¶æï¼å¹¶è®¾ç½®æ¶é´æ³: |
| | | - `DEPARTING/ARRIVED/IN_PROGRESS`: 设置 `actual_start_time` |
| | | - `COMPLETED/CANCELLED`: 设置 `actual_start_time` å `actual_end_time` |
| | | |
| | | ### é²é夿ºå¶ |
| | | - æ¯æ¬¡åæ¥åæ£æ¥ç¶ææ¯å¦åå |
| | | - ç¶ææªåååè·³è¿æ´æ°ï¼é¿å
æ ææä½ |
| | | |
| | | ## â ï¸ æ³¨æäºé¡¹ |
| | | |
| | | ### 1. ä¾èµå
³ç³» |
| | | - **åç½®æ¡ä»¶**: å¿
é¡»å
宿è°åº¦å忥 |
| | | - **æ§è¡é¡ºåº**: |
| | | 1. æå¡å忥 (admin_save_19.gds) |
| | | 2. è°åº¦å忥 (admin_save_24.gds) |
| | | 3. ç¶æåæ¥ (task_status_query.asp) â å½ååè½ |
| | | |
| | | ### 2. æ§è½ä¼å |
| | | - æ¯æ¬¡æå¤æ¥è¯¢200ä¸ªä»»å¡ |
| | | - 请æ±é´é0.5ç§ï¼é¿å
é¢ç¹è¯·æ± |
| | | - ä»
忥æªå®æç¶æçä»»å¡ |
| | | |
| | | ### 3. é误å¤ç |
| | | - æ¥è¯¢å¤±è´¥è®°å½é误æ¥å¿ |
| | | - ä¸å½±åå
¶ä»ä»»å¡ç忥 |
| | | - 䏿¬¡å®æ¶ä»»å¡ç»§ç»å°è¯ |
| | | |
| | | ### 4. çæ§å»ºè®® |
| | | - å®ææ£æ¥å®æ¶ä»»å¡æ§è¡æ¥å¿ |
| | | - çæ§åæ¥æåç |
| | | - å
³æ³¨ç¶æè½¬æ¢å¼å¸¸ |
| | | |
| | | ## ð æ
éææ¥ |
| | | |
| | | ### é®é¢1: ç¶ææªåæ¥ |
| | | |
| | | **å¯è½åå **: |
| | | 1. 宿¶ä»»å¡æªå¯å¨ |
| | | 2. æ§ç³»ç»æ¥å£ä¸å¯ç¨ |
| | | 3. ä»»å¡ä¸æ»¡è¶³åæ¥æ¡ä»¶ |
| | | |
| | | **ææ¥æ¥éª¤**: |
| | | ```sql |
| | | -- 1. æ£æ¥å®æ¶ä»»å¡ç¶æ |
| | | SELECT * FROM sys_job WHERE job_name = 'ä»»å¡ç¶æåæ¥'; |
| | | |
| | | -- 2. æ£æ¥ä»»å¡åæ¥ç¶æ |
| | | SELECT |
| | | e.task_id, |
| | | e.dispatch_sync_status, |
| | | e.legacy_dispatch_ord_id, |
| | | t.task_status |
| | | FROM sys_task_emergency e |
| | | INNER JOIN sys_task t ON e.task_id = t.task_id |
| | | WHERE e.task_id = 'YOUR_TASK_ID'; |
| | | |
| | | -- 3. æ¥çé误æ¥å¿ |
| | | -- tail -f logs/sys-error.log | grep "ç¶æåæ¥" |
| | | ``` |
| | | |
| | | ### é®é¢2: ç¶ææ å°é误 |
| | | |
| | | **è§£å³æ¹æ¡**: |
| | | æ£æ¥ `TaskStatusConverter.java` çæ å°è§åæ¯å¦æ£ç¡® |
| | | |
| | | ### é®é¢3: æ§è½é®é¢ |
| | | |
| | | **ä¼å建议**: |
| | | - è°æ´å®æ¶ä»»å¡æ§è¡é¢ç |
| | | - åå°æ¯æ¹æ¥è¯¢ç任塿°é |
| | | - å¢å 请æ±é´éæ¶é´ |
| | | |
| | | ## ð ç¸å
³ææ¡£ |
| | | |
| | | - [ä»»å¡ç¶ææµè½¬åæ³æ§è§å](../ä»»å¡ç¶æ.md) |
| | | - [æ§ç³»ç»åæ¥åè½å®ç°æ»ç»](æ§ç³»ç»åæ¥åè½å®ç°æ»ç».md) |
| | | - [æ§ç³»ç»åæ¥åæ°æ å°è¡¨](æ§ç³»ç»åæ¥åæ°æ å°è¡¨.md) |
| | | |
| | | ## ð çæ¬åå² |
| | | |
| | | - **v1.0** (2025-01-30) |
| | | - å®ç°åºç¡ç¶æåæ¥åè½ |
| | | - æ¯ææ°æ§ç³»ç»ç¶ææ å° |
| | | - æ·»å 宿¶ä»»å¡èªå¨åæ¥ |
| | | - å®åé误å¤ç忥å¿è®°å½ |
| | |
| | | basename: i18n/messages |
| | | profiles: |
| | | # ç¯å¢ dev|test|prod |
| | | active: dev |
| | | active: prod |
| | | # æä»¶ä¸ä¼ |
| | | servlet: |
| | | multipart: |
| | |
| | | /** è°åº¦åå建æ¥å£è·¯å¾ */ |
| | | private String dispatchCreatePath = "/admin_save_24.gds"; |
| | | |
| | | /** ä»»å¡ç¶ææ¥è¯¢æ¥å£è·¯å¾ï¼å·²å¼ç¨ï¼ç´æ¥æ¥è¯¢SQL Serveræ°æ®åºï¼ */ |
| | | @Deprecated |
| | | private String statusQueryPath = "/task_status_query.asp"; |
| | | |
| | | /** è¿æ¥è¶
æ¶æ¶é´(毫ç§) */ |
| | | private int connectTimeout = 30000; |
| | | |
| | |
| | | public String getDispatchCreateUrl() { |
| | | return baseUrl + dispatchCreatePath; |
| | | } |
| | | |
| | | public String getStatusQueryPath() { |
| | | return statusQueryPath; |
| | | } |
| | | |
| | | public void setStatusQueryPath(String statusQueryPath) { |
| | | this.statusQueryPath = statusQueryPath; |
| | | } |
| | | |
| | | /** |
| | | * è·å宿´çç¶ææ¥è¯¢URL |
| | | */ |
| | | public String getStatusQueryUrl() { |
| | | return baseUrl + statusQueryPath; |
| | | } |
| | | } |
| | |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import com.ruoyi.system.service.ILegacySystemSyncService; |
| | | import com.ruoyi.system.service.ITaskStatusSyncService; |
| | | import com.ruoyi.system.service.ITaskStatusPushService; |
| | | |
| | | /** |
| | | * æ§ç³»ç»åæ¥å®æ¶ä»»å¡ |
| | |
| | | |
| | | @Autowired |
| | | private ILegacySystemSyncService legacySystemSyncService; |
| | | |
| | | @Autowired |
| | | private ITaskStatusSyncService taskStatusSyncService; |
| | | |
| | | @Autowired |
| | | private ITaskStatusPushService taskStatusPushService; |
| | | |
| | | /** |
| | | * æ¹é忥æªåæ¥çæ¥æè½¬è¿ä»»å¡å°æ§ç³»ç» |
| | |
| | | log.error("æ§ç³»ç»è°åº¦å忥å¼å¸¸", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¹é忥任å¡ç¶æï¼ä»æ§ç³»ç»å°æ°ç³»ç»ï¼ |
| | | * |
| | | * 使ç¨ç¤ºä¾: |
| | | * å¨ç³»ç»ç®¡ç -> 宿¶ä»»å¡ä¸æ·»å : |
| | | * ä»»å¡åç§°: ä»»å¡ç¶æåæ¥ |
| | | * ä»»å¡ç»å: DEFAULT |
| | | * è°ç¨ç®æ å符串: legacySystemSyncTask.syncTaskStatusFromLegacy() |
| | | * cron表达å¼: 0 0/5 * * * ? (æ¯5åéæ§è¡ä¸æ¬¡) |
| | | */ |
| | | public void syncTaskStatusFromLegacy() { |
| | | log.info("å¼å§æ§è¡ä»»å¡ç¶æåæ¥å®æ¶ä»»å¡ï¼ä»æ§ç³»ç»å°æ°ç³»ç»ï¼"); |
| | | try { |
| | | int successCount = taskStatusSyncService.batchSyncTaskStatusFromLegacy(); |
| | | log.info("ä»»å¡ç¶æåæ¥å®æï¼æå忥: {} 个任å¡", successCount); |
| | | } catch (Exception e) { |
| | | log.error("ä»»å¡ç¶æåæ¥å¼å¸¸", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¹éæ¨éä»»å¡ç¶æï¼ä»æ°ç³»ç»å°æ§ç³»ç»ï¼ |
| | | * |
| | | * 使ç¨ç¤ºä¾: |
| | | * å¨ç³»ç»ç®¡ç -> 宿¶ä»»å¡ä¸æ·»å : |
| | | * ä»»å¡åç§°: ä»»å¡ç¶ææ¨é |
| | | * ä»»å¡ç»å: DEFAULT |
| | | * è°ç¨ç®æ å符串: legacySystemSyncTask.pushTaskStatusToLegacy() |
| | | * cron表达å¼: 0 0/3 * * * ? (æ¯3åéæ§è¡ä¸æ¬¡) |
| | | */ |
| | | public void pushTaskStatusToLegacy() { |
| | | log.info("å¼å§æ§è¡ä»»å¡ç¶ææ¨é宿¶ä»»å¡ï¼ä»æ°ç³»ç»å°æ§ç³»ç»ï¼"); |
| | | try { |
| | | int successCount = taskStatusPushService.batchPushTaskStatusToLegacy(); |
| | | log.info("ä»»å¡ç¶ææ¨éå®æï¼æåæ¨é: {} 个任å¡", successCount); |
| | | } catch (Exception e) { |
| | | log.error("ä»»å¡ç¶ææ¨éå¼å¸¸", e); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | import com.ruoyi.system.domain.DictionaryCondition; |
| | | import com.ruoyi.system.domain.DispatchOrd; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | * @return å¾çURLå表 |
| | | */ |
| | | public List<String> selectImageUrlsByDOrdIDDt(String dOrdIDDt); |
| | | |
| | | /** |
| | | * æ ¹æ®è°åº¦åIDæ¥è¯¢è°åº¦åç¶æ |
| | | * |
| | | * @param dispatchOrdID è°åº¦åID |
| | | * @return è°åº¦åç¶æç |
| | | */ |
| | | public Integer selectDispatchOrdStateByID(Long dispatchOrdID); |
| | | |
| | | /** |
| | | * æ¹éæ¥è¯¢è°åº¦åç¶æ |
| | | * |
| | | * @param dispatchOrdIDs è°åº¦åIDå表 |
| | | * @return è°åº¦åIDåç¶æçæ å°éå |
| | | */ |
| | | public List<DispatchOrd> selectDispatchOrdStatesByIDs(List<Long> dispatchOrdIDs); |
| | | |
| | | /** |
| | | * æ´æ°è°åº¦åç¶æ |
| | | * |
| | | * @param dispatchOrdID è°åº¦åID |
| | | * @param dispatchOrdState ç¶æç |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | public int updateDispatchOrdState(@Param("dispatchOrdID") Long dispatchOrdID, @Param("dispatchOrdState") Integer dispatchOrdState); |
| | | } |
| | |
| | | package com.ruoyi.system.mapper; |
| | | |
| | | import java.util.List; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import com.ruoyi.system.domain.SysTaskEmergency; |
| | | |
| | | /** |
| | |
| | | |
| | | /** |
| | | * æ¥è¯¢å¾
åæ¥çæ¥æè½¬è¿ä»»å¡å表ï¼åæ¥ç¶æä¸º0æ3çä»»å¡ï¼ |
| | | * æ¯æå页æ¥è¯¢ï¼è¿æ»¤å·²å®æ/已忶çä»»å¡ |
| | | * |
| | | * @param offset åç§»éï¼ä»ç¬¬å æ¡å¼å§ï¼ |
| | | * @param limit æ¯é¡µæ°é |
| | | * @return æ¥æè½¬è¿ä»»å¡å表 |
| | | */ |
| | | public List<SysTaskEmergency> selectPendingSyncTasks(); |
| | | public List<SysTaskEmergency> selectPendingSyncTasks(@Param("offset") Integer offset, @Param("limit") Integer limit); |
| | | |
| | | /** |
| | | * æ¥è¯¢å¾
忥è°åº¦åçä»»å¡å表ï¼å·²åæ¥æå¡å使ªåæ¥è°åº¦åï¼ |
| | | * æ¯æå页æ¥è¯¢ï¼è¿æ»¤å·²å®æ/已忶çä»»å¡ |
| | | * |
| | | * @param offset åç§»éï¼ä»ç¬¬å æ¡å¼å§ï¼ |
| | | * @param limit æ¯é¡µæ°é |
| | | * @return æ¥æè½¬è¿ä»»å¡å表 |
| | | */ |
| | | public List<SysTaskEmergency> selectPendingDispatchSyncTasks(); |
| | | public List<SysTaskEmergency> selectPendingDispatchSyncTasks(@Param("offset") Integer offset, @Param("limit") Integer limit); |
| | | |
| | | /** |
| | | * æ¥è¯¢å·²åæ¥è°åº¦åä¸ç¶ææªå®æçä»»å¡å表ï¼ç¨äºç¶æåæ¥ï¼ |
| | | * æ¯æå页æ¥è¯¢ |
| | | * |
| | | * @param offset åç§»éï¼ä»ç¬¬å æ¡å¼å§ï¼ |
| | | * @param limit æ¯é¡µæ°é |
| | | * @return æ¥æè½¬è¿ä»»å¡å表 |
| | | */ |
| | | public List<SysTaskEmergency> selectSyncedTasksForStatusUpdate(@Param("offset") Integer offset, @Param("limit") Integer limit); |
| | | } |
| | |
| | | * @return å¾çURLå表 |
| | | */ |
| | | public List<String> selectImageUrlsByDOrdIDDt(String dOrdIDDt); |
| | | |
| | | /** |
| | | * æ ¹æ®è°åº¦åIDæ¥è¯¢è°åº¦åç¶æ |
| | | * |
| | | * @param dispatchOrdID è°åº¦åID |
| | | * @return è°åº¦åç¶æç |
| | | */ |
| | | public Integer selectDispatchOrdStateByID(Long dispatchOrdID); |
| | | |
| | | /** |
| | | * æ¹éæ¥è¯¢è°åº¦åç¶æ |
| | | * |
| | | * @param dispatchOrdIDs è°åº¦åIDå表 |
| | | * @return è°åº¦åIDåç¶æçæ å°éå |
| | | */ |
| | | public List<DispatchOrd> selectDispatchOrdStatesByIDs(List<Long> dispatchOrdIDs); |
| | | |
| | | /** |
| | | * æ´æ°è°åº¦åç¶æ |
| | | * |
| | | * @param dispatchOrdID è°åº¦åID |
| | | * @param dispatchOrdState ç¶æç |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | public int updateDispatchOrdState(Long dispatchOrdID, Integer dispatchOrdState); |
| | | } |
| | |
| | | * @return æå忥ç任塿°é |
| | | */ |
| | | int batchSyncPendingDispatchOrders(); |
| | | } |
| | | } |
| New file |
| | |
| | | package com.ruoyi.system.service; |
| | | |
| | | import com.ruoyi.system.domain.SysTaskEmergency; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯Serviceæ¥å£ |
| | | * |
| | | * @author ruoyi |
| | | * @date 2024-01-16 |
| | | */ |
| | | public interface ISysTaskEmergencyService { |
| | | |
| | | /** |
| | | * æ¥è¯¢æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param id æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ä¸»é® |
| | | * @return æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | */ |
| | | public SysTaskEmergency selectSysTaskEmergencyById(Long id); |
| | | |
| | | /** |
| | | * éè¿ä»»å¡IDæ¥è¯¢æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param taskId ä»»å¡ID |
| | | * @return æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | */ |
| | | public SysTaskEmergency selectSysTaskEmergencyByTaskId(Long taskId); |
| | | |
| | | /** |
| | | * æ°å¢æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param sysTaskEmergency æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * @return ç»æ |
| | | */ |
| | | public int insertSysTaskEmergency(SysTaskEmergency sysTaskEmergency); |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param sysTaskEmergency æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * @return ç»æ |
| | | */ |
| | | public int updateSysTaskEmergency(SysTaskEmergency sysTaskEmergency); |
| | | |
| | | /** |
| | | * å 餿¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param id æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ä¸»é® |
| | | * @return ç»æ |
| | | */ |
| | | public int deleteSysTaskEmergencyById(Long id); |
| | | |
| | | /** |
| | | * éè¿ä»»å¡IDå 餿¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param taskId ä»»å¡ID |
| | | * @return ç»æ |
| | | */ |
| | | public int deleteSysTaskEmergencyByTaskId(Long taskId); |
| | | |
| | | /** |
| | | * æ¥è¯¢å¾
åæ¥çæ¥æè½¬è¿ä»»å¡å表ï¼åæ¥ç¶æä¸º0æ3çä»»å¡ï¼ |
| | | * æ¯æå页æ¥è¯¢ |
| | | * |
| | | * @param offset åç§»é |
| | | * @param limit æ¯é¡µæ°é |
| | | * @return æ¥æè½¬è¿ä»»å¡å表 |
| | | */ |
| | | public List<SysTaskEmergency> selectPendingSyncTasks(Integer offset, Integer limit); |
| | | |
| | | /** |
| | | * æ¥è¯¢å¾
忥è°åº¦åçä»»å¡å表ï¼å·²åæ¥æå¡å使ªåæ¥è°åº¦åï¼ |
| | | * æ¯æå页æ¥è¯¢ |
| | | * |
| | | * @param offset åç§»é |
| | | * @param limit æ¯é¡µæ°é |
| | | * @return æ¥æè½¬è¿ä»»å¡å表 |
| | | */ |
| | | public List<SysTaskEmergency> selectPendingDispatchSyncTasks(Integer offset, Integer limit); |
| | | |
| | | /** |
| | | * æ¥è¯¢å·²åæ¥è°åº¦åä¸ç¶ææªå®æçä»»å¡å表ï¼ç¨äºç¶æåæ¥ï¼ |
| | | * æ¯æå页æ¥è¯¢ |
| | | * |
| | | * @param offset åç§»é |
| | | * @param limit æ¯é¡µæ°é |
| | | * @return æ¥æè½¬è¿ä»»å¡å表 |
| | | */ |
| | | public List<SysTaskEmergency> selectSyncedTasksForStatusUpdate(Integer offset, Integer limit); |
| | | } |
| New file |
| | |
| | | package com.ruoyi.system.service; |
| | | |
| | | /** |
| | | * ä»»å¡ç¶ææ¨éServiceæ¥å£ |
| | | * è´è´£å°æ°ç³»ç»çä»»å¡ç¶ææ¨éå°æ§ç³»ç» |
| | | * |
| | | * @author ruoyi |
| | | * @date 2024-01-16 |
| | | */ |
| | | public interface ITaskStatusPushService { |
| | | |
| | | /** |
| | | * å°å个任å¡ç¶ææ¨éå°æ§ç³»ç» |
| | | * |
| | | * @param taskId ä»»å¡ID |
| | | * @return æ¯å¦æ¨éæå |
| | | */ |
| | | boolean pushTaskStatusToLegacy(Long taskId); |
| | | |
| | | /** |
| | | * æ¹éæ¨éä»»å¡ç¶æå°æ§ç³»ç» |
| | | * æ¥è¯¢æ°ç³»ç»ä¸ç¶æå·²ååä¸éè¦åæ¥çä»»å¡ï¼æ¹éæ¨éå°æ§ç³»ç» |
| | | * |
| | | * @return æåæ¨éç任塿°é |
| | | */ |
| | | int batchPushTaskStatusToLegacy(); |
| | | } |
| New file |
| | |
| | | package com.ruoyi.system.service; |
| | | |
| | | /** |
| | | * ä»»å¡ç¶æåæ¥Serviceæ¥å£ |
| | | * è´è´£ä»æ§ç³»ç»åæ¥ä»»å¡ç¶æå°æ°ç³»ç» |
| | | * |
| | | * @author ruoyi |
| | | * @date 2024-01-16 |
| | | */ |
| | | public interface ITaskStatusSyncService { |
| | | |
| | | /** |
| | | * 仿§ç³»ç»åæ¥å个任å¡ç¶æå°æ°ç³»ç» |
| | | * |
| | | * @param taskId ä»»å¡ID |
| | | * @return æ¯å¦åæ¥æå |
| | | */ |
| | | boolean syncTaskStatusFromLegacy(Long taskId); |
| | | |
| | | /** |
| | | * æ¹é忥已忥è°åº¦åçä»»å¡ç¶æï¼ä»æ§ç³»ç»å°æ°ç³»ç»ï¼ |
| | | * æ¥è¯¢å·²åæ¥è°åº¦åä¸ç¶ææªå®æçä»»å¡ï¼æ¹éæ¥è¯¢æ§ç³»ç»ç¶æå¹¶æ´æ° |
| | | * |
| | | * @return æå忥ç任塿°é |
| | | */ |
| | | int batchSyncTaskStatusFromLegacy(); |
| | | } |
| | |
| | | public List<String> selectImageUrlsByDOrdIDDt(String dOrdIDDt) { |
| | | return dispatchOrdMapper.selectImageUrlsByDOrdIDDt(dOrdIDDt); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®è°åº¦åIDæ¥è¯¢è°åº¦åç¶æ |
| | | * |
| | | * @param dispatchOrdID è°åº¦åID |
| | | * @return è°åº¦åç¶æç |
| | | */ |
| | | @Override |
| | | public Integer selectDispatchOrdStateByID(Long dispatchOrdID) { |
| | | return dispatchOrdMapper.selectDispatchOrdStateByID(dispatchOrdID); |
| | | } |
| | | |
| | | /** |
| | | * æ¹éæ¥è¯¢è°åº¦åç¶æ |
| | | * |
| | | * @param dispatchOrdIDs è°åº¦åIDå表 |
| | | * @return è°åº¦åIDåç¶æçæ å°éå |
| | | */ |
| | | @Override |
| | | public List<DispatchOrd> selectDispatchOrdStatesByIDs(List<Long> dispatchOrdIDs) { |
| | | return dispatchOrdMapper.selectDispatchOrdStatesByIDs(dispatchOrdIDs); |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°è°åº¦åç¶æ |
| | | * |
| | | * @param dispatchOrdID è°åº¦åID |
| | | * @param dispatchOrdState ç¶æç |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | @Override |
| | | public int updateDispatchOrdState(Long dispatchOrdID, Integer dispatchOrdState) { |
| | | return dispatchOrdMapper.updateDispatchOrdState(dispatchOrdID, dispatchOrdState); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | import com.ruoyi.system.mapper.SysUserMapper; |
| | | import com.ruoyi.system.mapper.SysDeptMapper; |
| | | import com.ruoyi.system.service.ILegacySystemSyncService; |
| | | import com.ruoyi.system.utils.TaskStatusConverter; |
| | | import com.ruoyi.system.service.IDispatchOrdService; |
| | | import com.ruoyi.system.service.ISysTaskEmergencyService; |
| | | |
| | | /** |
| | | * æ§ç³»ç»åæ¥Serviceä¸å¡å±å¤ç |
| | |
| | | private SysTaskMapper sysTaskMapper; |
| | | |
| | | @Autowired |
| | | private SysTaskEmergencyMapper sysTaskEmergencyMapper; |
| | | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Autowired |
| | | private VehicleInfoMapper vehicleInfoMapper; |
| | | |
| | | @Autowired |
| | | private IDispatchOrdService dispatchOrdService; |
| | | |
| | | @Autowired |
| | | private ISysTaskEmergencyService sysTaskEmergencyService; |
| | | |
| | | /** |
| | | * åæ¥æ¥æè½¬è¿ä»»å¡å°æ§ç³»ç» |
| | |
| | | } |
| | | |
| | | // æ¥è¯¢æ¥æè½¬è¿æ©å±ä¿¡æ¯ |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency == null) { |
| | | log.error("æ¥æè½¬è¿æ©å±ä¿¡æ¯ä¸åå¨ï¼ä»»å¡ID: {}", taskId); |
| | | return null; |
| | |
| | | |
| | | // æ´æ°åæ¥ç¶æä¸ºåæ¥ä¸ |
| | | emergency.setSyncStatus(1); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | // æå»ºè¯·æ±åæ° |
| | | Map<String, String> params = buildSyncParams(task, emergency); |
| | |
| | | emergency.setSyncStatus(2); // 忥æå |
| | | emergency.setSyncTime(new Date()); |
| | | emergency.setSyncErrorMsg(null); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | // æ´æ°ä»»å¡ä¸»è¡¨åæ¥æ è®° |
| | | task.setLegacySynced(1); |
| | |
| | | emergency.setSyncStatus(3); // åæ¥å¤±è´¥ |
| | | emergency.setSyncTime(new Date()); |
| | | emergency.setSyncErrorMsg("æ§ç³»ç»è¿åæ æçServiceOrdID: " + response); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | log.error("ä»»å¡åæ¥å¤±è´¥ï¼ä»»å¡ID: {}, ååº: {}", taskId, response); |
| | | return null; |
| | |
| | | |
| | | // æ´æ°åæ¥ç¶æä¸ºå¤±è´¥ |
| | | try { |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency != null) { |
| | | emergency.setSyncStatus(3); // åæ¥å¤±è´¥ |
| | | emergency.setSyncTime(new Date()); |
| | | emergency.setSyncErrorMsg("忥å¼å¸¸: " + e.getMessage()); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("æ´æ°åæ¥ç¶æå¤±è´¥", ex); |
| | |
| | | |
| | | /** |
| | | * æ¹é忥æªåæ¥çæ¥æè½¬è¿ä»»å¡ |
| | | * 使ç¨å页æ¥è¯¢ï¼ç¡®ä¿ææç¬¦åæ¡ä»¶çä»»å¡é½è½è¢«åæ¥ |
| | | */ |
| | | @Override |
| | | public int batchSyncPendingTasks() { |
| | |
| | | } |
| | | |
| | | try { |
| | | // æ¥è¯¢æªåæ¥çæ¥æè½¬è¿ä»»å¡ï¼åæ¥ç¶æä¸º0æ3çä»»å¡ï¼ |
| | | List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingSyncTasks(); |
| | | int totalSuccessCount = 0; |
| | | int pageSize = 100; // æ¯é¡µ100æ¡ |
| | | int offset = 0; |
| | | |
| | | int successCount = 0; |
| | | for (SysTaskEmergency emergency : pendingTasks) { |
| | | Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId()); |
| | | if (serviceOrdId != null && serviceOrdId > 0) { |
| | | successCount++; |
| | | while (true) { |
| | | // å页æ¥è¯¢æªåæ¥çæ¥æè½¬è¿ä»»å¡ï¼åæ¥ç¶æä¸º0æ3çä»»å¡ï¼ |
| | | List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingSyncTasks(offset, pageSize); |
| | | |
| | | if (pendingTasks == null || pendingTasks.isEmpty()) { |
| | | log.info("æ²¡ææ´å¤éè¦åæ¥çä»»å¡ï¼offset: {}", offset); |
| | | break; // æ²¡ææ´å¤æ°æ®ï¼éåºå¾ªç¯ |
| | | } |
| | | |
| | | // é¿å
è¿äºé¢ç¹çè¯·æ± |
| | | try { |
| | | Thread.sleep(1000); // æ¯ä¸ªè¯·æ±é´é1ç§ |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.info("å¼å§åæ¥ç¬¬ {} 页ï¼ä»»å¡æ°é: {}", (offset / pageSize) + 1, pendingTasks.size()); |
| | | |
| | | int pageSuccessCount = 0; |
| | | for (SysTaskEmergency emergency : pendingTasks) { |
| | | Long serviceOrdId = syncEmergencyTaskToLegacy(emergency.getTaskId()); |
| | | if (serviceOrdId != null && serviceOrdId > 0) { |
| | | pageSuccessCount++; |
| | | } |
| | | |
| | | // é¿å
è¿äºé¢ç¹çè¯·æ± |
| | | try { |
| | | Thread.sleep(1000); // æ¯ä¸ªè¯·æ±é´é1ç§ |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.warn("åæ¥è¢«ä¸æ"); |
| | | return totalSuccessCount + pageSuccessCount; |
| | | } |
| | | } |
| | | |
| | | totalSuccessCount += pageSuccessCount; |
| | | log.info("第 {} é¡µåæ¥å®æï¼æ»æ°: {}, æå: {}", |
| | | (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount); |
| | | |
| | | // 妿æ¬é¡µæ°æ®å°äºæ¯é¡µå¤§å°ï¼è¯´æå·²ç»æ¯æåä¸é¡µ |
| | | if (pendingTasks.size() < pageSize) { |
| | | log.info("å·²å°è¾¾æåä¸é¡µï¼åæ¥ç»æ"); |
| | | break; |
| | | } |
| | | |
| | | offset += pageSize; // ä¸ä¸é¡µ |
| | | } |
| | | |
| | | log.info("æ¹éåæ¥å®æï¼æ»æ°: {}, æå: {}", pendingTasks.size(), successCount); |
| | | return successCount; |
| | | log.info("æ¹éåæ¥å®æï¼æ»æåæ°: {}", totalSuccessCount); |
| | | return totalSuccessCount; |
| | | |
| | | } catch (Exception e) { |
| | | log.error("æ¹é忥任å¡å¼å¸¸", e); |
| | |
| | | public boolean retrySyncTask(Long taskId) { |
| | | try { |
| | | // éç½®åæ¥ç¶æ |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency != null) { |
| | | emergency.setSyncStatus(0); // é置为æªåæ¥ |
| | | emergency.setLegacyServiceOrdId(null); |
| | | emergency.setSyncErrorMsg(null); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | } |
| | | |
| | | // 鿰忥 |
| | |
| | | } |
| | | |
| | | // æ¥è¯¢æ¥æè½¬è¿æ©å±ä¿¡æ¯ |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency == null) { |
| | | log.error("æ¥æè½¬è¿æ©å±ä¿¡æ¯ä¸åå¨ï¼ä»»å¡ID: {}", taskId); |
| | | return null; |
| | |
| | | |
| | | // æ´æ°åæ¥ç¶æä¸ºåæ¥ä¸ |
| | | emergency.setDispatchSyncStatus(1); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | // æå»ºè¯·æ±åæ° |
| | | Map<String, String> params = buildDispatchOrderParams(task, emergency); |
| | |
| | | emergency.setDispatchSyncStatus(2); // 忥æå |
| | | emergency.setDispatchSyncTime(new Date()); |
| | | emergency.setDispatchSyncErrorMsg(null); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | log.info("è°åº¦å忥æåï¼ä»»å¡ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId); |
| | | return dispatchOrdId; |
| | |
| | | emergency.setDispatchSyncStatus(3); // åæ¥å¤±è´¥ |
| | | emergency.setDispatchSyncTime(new Date()); |
| | | emergency.setDispatchSyncErrorMsg("æ§ç³»ç»è¿åæ æçDispatchOrdID: " + response); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | |
| | | log.error("è°åº¦ååæ¥å¤±è´¥ï¼ä»»å¡ID: {}, ååº: {}", taskId, response); |
| | | return null; |
| | |
| | | |
| | | // æ´æ°åæ¥ç¶æä¸ºå¤±è´¥ |
| | | try { |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency != null) { |
| | | emergency.setDispatchSyncStatus(3); // åæ¥å¤±è´¥ |
| | | emergency.setDispatchSyncTime(new Date()); |
| | | emergency.setDispatchSyncErrorMsg("忥å¼å¸¸: " + e.getMessage()); |
| | | sysTaskEmergencyMapper.updateSysTaskEmergency(emergency); |
| | | sysTaskEmergencyService.updateSysTaskEmergency(emergency); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("æ´æ°è°åº¦ååæ¥ç¶æå¤±è´¥", ex); |
| | |
| | | |
| | | /** |
| | | * æ¹é忥æªåæ¥çè°åº¦å |
| | | * 使ç¨å页æ¥è¯¢ï¼ç¡®ä¿ææç¬¦åæ¡ä»¶çä»»å¡é½è½è¢«åæ¥ |
| | | */ |
| | | @Override |
| | | public int batchSyncPendingDispatchOrders() { |
| | |
| | | } |
| | | |
| | | try { |
| | | // æ¥è¯¢å·²åæ¥æå¡å使ªåæ¥è°åº¦åçä»»å¡ |
| | | List<SysTaskEmergency> pendingTasks = sysTaskEmergencyMapper.selectPendingDispatchSyncTasks(); |
| | | int totalSuccessCount = 0; |
| | | int pageSize = 100; // æ¯é¡µ100æ¡ |
| | | int offset = 0; |
| | | |
| | | int successCount = 0; |
| | | for (SysTaskEmergency emergency : pendingTasks) { |
| | | Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId()); |
| | | if (dispatchOrdId != null && dispatchOrdId > 0) { |
| | | successCount++; |
| | | while (true) { |
| | | // å页æ¥è¯¢å·²åæ¥æå¡å使ªåæ¥è°åº¦åçä»»å¡ |
| | | List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingDispatchSyncTasks(offset, pageSize); |
| | | |
| | | if (pendingTasks == null || pendingTasks.isEmpty()) { |
| | | log.info("æ²¡ææ´å¤éè¦åæ¥è°åº¦åçä»»å¡ï¼offset: {}", offset); |
| | | break; // æ²¡ææ´å¤æ°æ®ï¼éåºå¾ªç¯ |
| | | } |
| | | |
| | | // é¿å
è¿äºé¢ç¹çè¯·æ± |
| | | try { |
| | | Thread.sleep(1000); // æ¯ä¸ªè¯·æ±é´é1ç§ |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.info("å¼å§åæ¥è°åº¦å第 {} 页ï¼ä»»å¡æ°é: {}", (offset / pageSize) + 1, pendingTasks.size()); |
| | | |
| | | int pageSuccessCount = 0; |
| | | for (SysTaskEmergency emergency : pendingTasks) { |
| | | Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId()); |
| | | if (dispatchOrdId != null && dispatchOrdId > 0) { |
| | | pageSuccessCount++; |
| | | } |
| | | |
| | | // é¿å
è¿äºé¢ç¹çè¯·æ± |
| | | try { |
| | | Thread.sleep(1000); // æ¯ä¸ªè¯·æ±é´é1ç§ |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.warn("忥è°åº¦åè¢«ä¸æ"); |
| | | return totalSuccessCount + pageSuccessCount; |
| | | } |
| | | } |
| | | |
| | | totalSuccessCount += pageSuccessCount; |
| | | log.info("è°åº¦å第 {} é¡µåæ¥å®æï¼æ»æ°: {}, æå: {}", |
| | | (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount); |
| | | |
| | | // 妿æ¬é¡µæ°æ®å°äºæ¯é¡µå¤§å°ï¼è¯´æå·²ç»æ¯æåä¸é¡µ |
| | | if (pendingTasks.size() < pageSize) { |
| | | log.info("å·²å°è¾¾æåä¸é¡µï¼è°åº¦ååæ¥ç»æ"); |
| | | break; |
| | | } |
| | | |
| | | offset += pageSize; // ä¸ä¸é¡µ |
| | | } |
| | | |
| | | log.info("æ¹é忥è°åº¦åå®æï¼æ»æ°: {}, æå: {}", pendingTasks.size(), successCount); |
| | | return successCount; |
| | | log.info("æ¹é忥è°åº¦åå®æï¼æ»æåæ°: {}", totalSuccessCount); |
| | | return totalSuccessCount; |
| | | |
| | | } catch (Exception e) { |
| | | log.error("æ¹é忥è°åº¦åå¼å¸¸", e); |
| | |
| | | // åºæ¬ä¿¡æ¯ |
| | | params.put("DispatchOrdClass", dispatchOrdClass); |
| | | params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString()); |
| | | params.put("DispatchOrdState", "8"); // è°åº¦åç¶æ |
| | | params.put("DispatchOrdState", "1"); // è°åº¦åç¶æ |
| | | |
| | | // æ¶é´ä¿¡æ¯ |
| | | if (task.getPlannedStartTime() != null) { |
| | |
| | | params.put("ServiceOrdEstimatedOrderDateOld", ""); // åé¢è®¡æ´¾åæ¶é´ |
| | | params.put("ServiceOrdViaDistance", "0"); // ä¸éè·ç¦» |
| | | params.put("ServiceOrdTraDistance", emergency.getTransferDistance() != null ? emergency.getTransferDistance().toString() : "0"); // è·ç¦» |
| | | params.put("OrderLevel", "2"); // æ¥çç级 |
| | | params.put("OrderLevel", "0"); // æ¥çç级 |
| | | params.put("ServiceOrdDepartureType", "1"); // é¢çº¦ç±»å |
| | | params.put("ConditionLevel", "0"); // ç
éçº§å« |
| | | params.put("DirectionType", "0"); // 转è¿å»å |
| | |
| | | params.put("ServiceOrdOperationRemarks", "æ°ç³»ç»åæ¥å建"); // æä½å¤æ³¨ |
| | | params.put("ServiceOrdEstimatedOrderDate", ""); // é¢è®¡æ´¾åæ¶é´ |
| | | params.put("ServiceOrdSource", "10"); // è®¢åæ¥æºï¼10=æ°ç³»ç»ï¼ |
| | | params.put("OrderLevel", "2"); // æ¥çç级 |
| | | params.put("OrderLevel", "0"); // æ¥çç级 |
| | | params.put("ServiceOrdDepartureType", "1"); // é¢çº¦ç±»å |
| | | params.put("ConditionLevel", "0"); // ç
éçº§å« |
| | | params.put("DirectionType", "0"); // 转è¿å»å |
| New file |
| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import com.ruoyi.system.mapper.SysTaskEmergencyMapper; |
| | | import com.ruoyi.system.domain.SysTaskEmergency; |
| | | import com.ruoyi.system.service.ISysTaskEmergencyService; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯Serviceä¸å¡å±å¤ç |
| | | * |
| | | * @author ruoyi |
| | | * @date 2024-01-16 |
| | | */ |
| | | @Service |
| | | public class SysTaskEmergencyServiceImpl implements ISysTaskEmergencyService { |
| | | |
| | | @Autowired |
| | | private SysTaskEmergencyMapper sysTaskEmergencyMapper; |
| | | |
| | | /** |
| | | * æ¥è¯¢æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param id æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ä¸»é® |
| | | * @return æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public SysTaskEmergency selectSysTaskEmergencyById(Long id) { |
| | | return sysTaskEmergencyMapper.selectSysTaskEmergencyById(id); |
| | | } |
| | | |
| | | /** |
| | | * éè¿ä»»å¡IDæ¥è¯¢æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param taskId ä»»å¡ID |
| | | * @return æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public SysTaskEmergency selectSysTaskEmergencyByTaskId(Long taskId) { |
| | | return sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param sysTaskEmergency æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * @return ç»æ |
| | | */ |
| | | @Override |
| | | public int insertSysTaskEmergency(SysTaskEmergency sysTaskEmergency) { |
| | | return sysTaskEmergencyMapper.insertSysTaskEmergency(sysTaskEmergency); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param sysTaskEmergency æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * @return ç»æ |
| | | */ |
| | | @Override |
| | | public int updateSysTaskEmergency(SysTaskEmergency sysTaskEmergency) { |
| | | return sysTaskEmergencyMapper.updateSysTaskEmergency(sysTaskEmergency); |
| | | } |
| | | |
| | | /** |
| | | * å 餿¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param id æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ä¸»é® |
| | | * @return ç»æ |
| | | */ |
| | | @Override |
| | | public int deleteSysTaskEmergencyById(Long id) { |
| | | return sysTaskEmergencyMapper.deleteSysTaskEmergencyById(id); |
| | | } |
| | | |
| | | /** |
| | | * éè¿ä»»å¡IDå 餿¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ |
| | | * |
| | | * @param taskId ä»»å¡ID |
| | | * @return ç»æ |
| | | */ |
| | | @Override |
| | | public int deleteSysTaskEmergencyByTaskId(Long taskId) { |
| | | return sysTaskEmergencyMapper.deleteSysTaskEmergencyByTaskId(taskId); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢å¾
åæ¥çæ¥æè½¬è¿ä»»å¡å表ï¼åæ¥ç¶æä¸º0æ3çä»»å¡ï¼ |
| | | * |
| | | * @param offset åç§»é |
| | | * @param limit æ¯é¡µæ°é |
| | | * @return æ¥æè½¬è¿ä»»å¡å表 |
| | | */ |
| | | @Override |
| | | public List<SysTaskEmergency> selectPendingSyncTasks(Integer offset, Integer limit) { |
| | | return sysTaskEmergencyMapper.selectPendingSyncTasks(offset, limit); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢å¾
忥è°åº¦åçä»»å¡å表ï¼å·²åæ¥æå¡å使ªåæ¥è°åº¦åï¼ |
| | | * |
| | | * @param offset åç§»é |
| | | * @param limit æ¯é¡µæ°é |
| | | * @return æ¥æè½¬è¿ä»»å¡å表 |
| | | */ |
| | | @Override |
| | | public List<SysTaskEmergency> selectPendingDispatchSyncTasks(Integer offset, Integer limit) { |
| | | return sysTaskEmergencyMapper.selectPendingDispatchSyncTasks(offset, limit); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢å·²åæ¥è°åº¦åä¸ç¶ææªå®æçä»»å¡å表ï¼ç¨äºç¶æåæ¥ï¼ |
| | | * |
| | | * @param offset åç§»é |
| | | * @param limit æ¯é¡µæ°é |
| | | * @return æ¥æè½¬è¿ä»»å¡å表 |
| | | */ |
| | | @Override |
| | | public List<SysTaskEmergency> selectSyncedTasksForStatusUpdate(Integer offset, Integer limit) { |
| | | return sysTaskEmergencyMapper.selectSyncedTasksForStatusUpdate(offset, limit); |
| | | } |
| | | } |
| New file |
| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import com.ruoyi.common.config.LegacySystemConfig; |
| | | import com.ruoyi.system.domain.SysTask; |
| | | import com.ruoyi.system.domain.SysTaskEmergency; |
| | | import com.ruoyi.system.domain.enums.TaskStatus; |
| | | import com.ruoyi.system.mapper.SysTaskMapper; |
| | | import com.ruoyi.system.service.IDispatchOrdService; |
| | | import com.ruoyi.system.service.ISysTaskEmergencyService; |
| | | import com.ruoyi.system.service.ITaskStatusPushService; |
| | | import com.ruoyi.system.utils.TaskStatusPushConverter; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * ä»»å¡ç¶ææ¨éServiceä¸å¡å±å¤ç |
| | | * è´è´£å°æ°ç³»ç»çä»»å¡ç¶ææ¨éå°æ§ç³»ç» |
| | | * |
| | | * @author ruoyi |
| | | * @date 2024-01-16 |
| | | */ |
| | | @Service |
| | | public class TaskStatusPushServiceImpl implements ITaskStatusPushService { |
| | | |
| | | private static final Logger log = LoggerFactory.getLogger(TaskStatusPushServiceImpl.class); |
| | | |
| | | @Autowired |
| | | private LegacySystemConfig legacyConfig; |
| | | |
| | | @Autowired |
| | | private SysTaskMapper sysTaskMapper; |
| | | |
| | | @Autowired |
| | | private ISysTaskEmergencyService sysTaskEmergencyService; |
| | | |
| | | @Autowired |
| | | private IDispatchOrdService dispatchOrdService; |
| | | |
| | | /** |
| | | * å°å个任å¡ç¶ææ¨éå°æ§ç³»ç» |
| | | * |
| | | * @param taskId ä»»å¡ID |
| | | * @return æ¯å¦æ¨éæå |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public boolean pushTaskStatusToLegacy(Long taskId) { |
| | | if (!legacyConfig.isEnabled()) { |
| | | log.info("æ§ç³»ç»åæ¥å·²ç¦ç¨ï¼è·³è¿ç¶ææ¨éï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | try { |
| | | // æ¥è¯¢ä»»å¡ä¿¡æ¯ |
| | | log.debug("ãæ°æ¨æ§ãæ¥è¯¢ä»»å¡ID: {}", taskId); |
| | | SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId); |
| | | if (task == null) { |
| | | log.error("ãæ°æ¨æ§ãä»»å¡ä¸åå¨ï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | // åªæ¨éæ¥æè½¬è¿ä»»å¡ |
| | | if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) { |
| | | log.info("鿥æè½¬è¿ä»»å¡ï¼è·³è¿ç¶ææ¨éï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | // æ¥è¯¢æ¥æè½¬è¿æ©å±ä¿¡æ¯ |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency == null) { |
| | | log.error("æ¥æè½¬è¿æ©å±ä¿¡æ¯ä¸åå¨ï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | // å¿
须已ç»åæ¥è¿è°åº¦å |
| | | if (emergency.getLegacyDispatchOrdId() == null || emergency.getLegacyDispatchOrdId() <= 0) { |
| | | log.warn("è°åº¦åæªåæ¥ï¼æ æ³æ¨éç¶æï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | // è·åæ°ç³»ç»ç¶æ |
| | | TaskStatus newTaskStatus = TaskStatus.getByCode(task.getTaskStatus()); |
| | | if (newTaskStatus == null) { |
| | | log.error("æ æçä»»å¡ç¶æï¼ä»»å¡ID: {}, ç¶æç : {}", taskId, task.getTaskStatus()); |
| | | return false; |
| | | } |
| | | |
| | | // 转æ¢ä¸ºæ§ç³»ç»ç¶æç |
| | | Integer targetStatusCode = TaskStatusPushConverter.convertToLegacyStatus(newTaskStatus); |
| | | if (targetStatusCode == null) { |
| | | log.debug("ãæ°æ¨æ§ãä»»å¡ç¶æä¸éè¦æ¨éå°æ§ç³»ç»ï¼ä»»å¡ID: {}, ç¶æ: {}", |
| | | taskId, newTaskStatus.getInfo()); |
| | | return false; |
| | | } |
| | | |
| | | // æ¥è¯¢æ§ç³»ç»å½åç¶æ |
| | | Integer currentLegacyStatus = dispatchOrdService.selectDispatchOrdStateByID( |
| | | emergency.getLegacyDispatchOrdId()); |
| | | if (currentLegacyStatus == null) { |
| | | log.error("ãæ°æ¨æ§ãæ¥è¯¢æ§ç³»ç»ç¶æå¤±è´¥ï¼ä»»å¡ID: {}, DispatchOrdID: {}", |
| | | taskId, emergency.getLegacyDispatchOrdId()); |
| | | return false; |
| | | } |
| | | |
| | | // 夿æ¯å¦éè¦æ´æ°ï¼å
å«é²æ¢ç¶æåéçæ£æ¥ï¼ |
| | | // 妿æ§ç³»ç»ç¶æå·²ç» >= æ°ç³»ç»è¦æ¨éçç¶æï¼è¯´ææ§ç³»ç»ç¶ææ´æ°ï¼æ°ç³»ç»è½åï¼ä¸åºè¯¥æ¨é |
| | | if (!TaskStatusPushConverter.shouldUpdateLegacyStatus(targetStatusCode, currentLegacyStatus)) { |
| | | log.info("ãæ°æ¨æ§ãæ°ç³»ç»ç¶æè½åæçäºæ§ç³»ç»ç¶æï¼è·³è¿æ¨éï¼ä»»å¡ID: {}, æ°ç³»ç»ç¶æ: {} ({}â{}), æ§ç³»ç»ç¶æ: {} ({})", |
| | | taskId, |
| | | task.getTaskStatus(), newTaskStatus.getInfo(), targetStatusCode, |
| | | currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus)); |
| | | return true; // è¿åtrueï¼å 为è¿ä¸ç®å¤±è´¥ï¼åªæ¯ä¸éè¦æ¨é |
| | | } |
| | | |
| | | // æ¨éç¶æå°æ§ç³»ç» |
| | | boolean result = updateLegacyTaskStatus(emergency.getLegacyDispatchOrdId(), targetStatusCode); |
| | | |
| | | if (result) { |
| | | log.info("ãæ°æ¨æ§ãä»»å¡ç¶ææ¨éæåï¼ä»»å¡ID: {}, DispatchOrdID: {}, æ§ç¶æ: {} ({}), æ°ç¶æ: {} ({})", |
| | | taskId, emergency.getLegacyDispatchOrdId(), |
| | | currentLegacyStatus, TaskStatusPushConverter.getLegacyStatusDescription(currentLegacyStatus), |
| | | targetStatusCode, TaskStatusPushConverter.getLegacyStatusDescription(targetStatusCode)); |
| | | } else { |
| | | log.error("ãæ°æ¨æ§ãä»»å¡ç¶ææ¨é失败ï¼ä»»å¡ID: {}, DispatchOrdID: {}", |
| | | taskId, emergency.getLegacyDispatchOrdId()); |
| | | } |
| | | |
| | | return result; |
| | | |
| | | } catch (Exception e) { |
| | | log.error("ãæ°æ¨æ§ãæ¨éä»»å¡ç¶æå¼å¸¸ï¼ä»»å¡ID: {}", taskId, e); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¹éæ¨éä»»å¡ç¶æå°æ§ç³»ç» |
| | | * 使ç¨å页æ¥è¯¢ï¼ç¡®ä¿ææç¬¦åæ¡ä»¶çä»»å¡é½è½è¢«æ¨é |
| | | * |
| | | * @return æåæ¨éç任塿°é |
| | | */ |
| | | @Override |
| | | public int batchPushTaskStatusToLegacy() { |
| | | if (!legacyConfig.isEnabled()) { |
| | | log.info("æ§ç³»ç»åæ¥å·²ç¦ç¨"); |
| | | return 0; |
| | | } |
| | | |
| | | try { |
| | | int totalSuccessCount = 0; |
| | | int pageSize = 200; // æ¯é¡µ200æ¡ |
| | | int offset = 0; |
| | | |
| | | while (true) { |
| | | // å页æ¥è¯¢å·²åæ¥è°åº¦åä¸ç¶ææªå®æçä»»å¡ |
| | | List<SysTaskEmergency> syncedTasks = sysTaskEmergencyService.selectSyncedTasksForStatusUpdate(offset, pageSize); |
| | | |
| | | if (syncedTasks == null || syncedTasks.isEmpty()) { |
| | | log.info("ãæ°æ¨æ§ãæ²¡ææ´å¤éè¦æ¨éç¶æçä»»å¡ï¼offset: {}", offset); |
| | | break; // æ²¡ææ´å¤æ°æ®ï¼éåºå¾ªç¯ |
| | | } |
| | | |
| | | log.info("ãæ°æ¨æ§ãå¼å§æ¨éç¶æç¬¬ {} 页ï¼ä»»å¡æ°é: {}", (offset / pageSize) + 1, syncedTasks.size()); |
| | | |
| | | int pageSuccessCount = 0; |
| | | for (SysTaskEmergency emergency : syncedTasks) { |
| | | boolean result = pushTaskStatusToLegacy(emergency.getTaskId()); |
| | | if (result) { |
| | | pageSuccessCount++; |
| | | } |
| | | |
| | | // é¿å
è¿äºé¢ç¹çè¯·æ± |
| | | try { |
| | | Thread.sleep(200); // æ¯ä¸ªè¯·æ±é´é0.2ç§ |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.warn("ãæ°æ¨æ§ãæ¨éç¶æè¢«ä¸æ"); |
| | | return totalSuccessCount + pageSuccessCount; |
| | | } |
| | | } |
| | | |
| | | totalSuccessCount += pageSuccessCount; |
| | | log.info("ç¶æç¬¬ {} 页æ¨éå®æï¼æ»æ°: {}, æå: {}", |
| | | (offset / pageSize) + 1, syncedTasks.size(), pageSuccessCount); |
| | | |
| | | // 妿æ¬é¡µæ°æ®å°äºæ¯é¡µå¤§å°ï¼è¯´æå·²ç»æ¯æåä¸é¡µ |
| | | if (syncedTasks.size() < pageSize) { |
| | | log.info("ãæ°æ¨æ§ãå·²å°è¾¾æåä¸é¡µï¼ç¶ææ¨éç»æ"); |
| | | break; |
| | | } |
| | | |
| | | offset += pageSize; // ä¸ä¸é¡µ |
| | | } |
| | | |
| | | log.info("ãæ°æ¨æ§ãæ¹éæ¨éä»»å¡ç¶æå®æï¼æ»æåæ°: {}", totalSuccessCount); |
| | | return totalSuccessCount; |
| | | |
| | | } catch (Exception e) { |
| | | log.error("ãæ°æ¨æ§ãæ¹éæ¨éä»»å¡ç¶æå¼å¸¸", e); |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°æ§ç³»ç»è°åº¦åç¶æï¼ç´æ¥æä½SQL Serveræ°æ®åºï¼ |
| | | * |
| | | * @param dispatchOrdId è°åº¦åID |
| | | * @param statusCode ç®æ ç¶æç |
| | | * @return æ¯å¦æå |
| | | */ |
| | | private boolean updateLegacyTaskStatus(Long dispatchOrdId, Integer statusCode) { |
| | | try { |
| | | // ç´æ¥éè¿Serviceè°ç¨Mapperæ´æ°SQL Serveræ°æ®åº |
| | | int rows = dispatchOrdService.updateDispatchOrdState(dispatchOrdId, statusCode); |
| | | log.debug("æ´æ°æ§ç³»ç»ç¶æï¼DispatchOrdID: {}, StateInt: {}", dispatchOrdId, statusCode); |
| | | if (rows > 0) { |
| | | log.debug("æ´æ°æ§ç³»ç»ç¶ææåï¼DispatchOrdID: {}, StateInt: {}", |
| | | dispatchOrdId, statusCode); |
| | | return true; |
| | | } else { |
| | | log.warn("æ´æ°æ§ç³»ç»ç¶æå¤±è´¥ï¼æªæ¾å°å¯¹åºè°åº¦åï¼DispatchOrdID: {}", dispatchOrdId); |
| | | return false; |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("æ´æ°æ§ç³»ç»ç¶æå¼å¸¸ï¼DispatchOrdID: {}", dispatchOrdId, e); |
| | | return false; |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import com.ruoyi.common.config.LegacySystemConfig; |
| | | import com.ruoyi.system.domain.DispatchOrd; |
| | | import com.ruoyi.system.domain.SysTask; |
| | | import com.ruoyi.system.domain.SysTaskEmergency; |
| | | import com.ruoyi.system.domain.enums.TaskStatus; |
| | | import com.ruoyi.system.mapper.SysTaskMapper; |
| | | import com.ruoyi.system.service.IDispatchOrdService; |
| | | import com.ruoyi.system.service.ISysTaskEmergencyService; |
| | | import com.ruoyi.system.service.ITaskStatusSyncService; |
| | | import com.ruoyi.system.utils.TaskStatusConverter; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * ä»»å¡ç¶æåæ¥Serviceä¸å¡å±å¤ç |
| | | * è´è´£ä»æ§ç³»ç»åæ¥ä»»å¡ç¶æå°æ°ç³»ç» |
| | | * |
| | | * @author ruoyi |
| | | * @date 2024-01-16 |
| | | */ |
| | | @Service |
| | | public class TaskStatusSyncServiceImpl implements ITaskStatusSyncService { |
| | | |
| | | private static final Logger log = LoggerFactory.getLogger(TaskStatusSyncServiceImpl.class); |
| | | |
| | | @Autowired |
| | | private LegacySystemConfig legacyConfig; |
| | | |
| | | @Autowired |
| | | private SysTaskMapper sysTaskMapper; |
| | | |
| | | @Autowired |
| | | private ISysTaskEmergencyService sysTaskEmergencyService; |
| | | |
| | | @Autowired |
| | | private IDispatchOrdService dispatchOrdService; |
| | | |
| | | /** |
| | | * 仿§ç³»ç»åæ¥å个任å¡ç¶æå°æ°ç³»ç» |
| | | * |
| | | * @param taskId ä»»å¡ID |
| | | * @return æ¯å¦åæ¥æå |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public boolean syncTaskStatusFromLegacy(Long taskId) { |
| | | if (!legacyConfig.isEnabled()) { |
| | | log.info("æ§ç³»ç»åæ¥å·²ç¦ç¨ï¼è·³è¿ç¶æåæ¥ï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | try { |
| | | // æ¥è¯¢ä»»å¡ä¿¡æ¯ |
| | | SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId); |
| | | if (task == null) { |
| | | log.error("ä»»å¡ä¸åå¨ï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | // åªåæ¥æ¥æè½¬è¿ä»»å¡ |
| | | if (!"EMERGENCY_TRANSFER".equals(task.getTaskType())) { |
| | | log.info("鿥æè½¬è¿ä»»å¡ï¼è·³è¿ç¶æåæ¥ï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | // æ¥è¯¢æ¥æè½¬è¿æ©å±ä¿¡æ¯ |
| | | SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId); |
| | | if (emergency == null) { |
| | | log.error("æ¥æè½¬è¿æ©å±ä¿¡æ¯ä¸åå¨ï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | // å¿
须已ç»åæ¥è¿è°åº¦å |
| | | if (emergency.getLegacyDispatchOrdId() == null || emergency.getLegacyDispatchOrdId() <= 0) { |
| | | log.warn("è°åº¦åæªåæ¥ï¼æ æ³åæ¥ç¶æï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | // æ¥è¯¢æ§ç³»ç»ç¶æï¼ç´æ¥æ¥è¯¢SQL Serveræ°æ®åºï¼ |
| | | Integer legacyStatus = dispatchOrdService.selectDispatchOrdStateByID(emergency.getLegacyDispatchOrdId()); |
| | | if (legacyStatus == null) { |
| | | log.error("æ¥è¯¢æ§ç³»ç»ç¶æå¤±è´¥ï¼ä»»å¡ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId()); |
| | | return false; |
| | | } |
| | | |
| | | // è°ç¨å
鍿¹æ³åæ¥ç¶æ |
| | | return syncTaskStatusWithLegacyState(taskId, legacyStatus); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("忥任å¡ç¶æå¼å¸¸ï¼ä»»å¡ID: {}", taskId, e); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¹é忥已忥è°åº¦åçä»»å¡ç¶æï¼ä»æ§ç³»ç»å°æ°ç³»ç»ï¼ |
| | | * 使ç¨å页æ¥è¯¢ï¼æ¹éæ¥è¯¢SQL Serveræ°æ®åºï¼åå°ç½ç»è¯·æ±æ¬¡æ° |
| | | * |
| | | * @return æå忥ç任塿°é |
| | | */ |
| | | @Override |
| | | public int batchSyncTaskStatusFromLegacy() { |
| | | if (!legacyConfig.isEnabled()) { |
| | | log.info("æ§ç³»ç»åæ¥å·²ç¦ç¨"); |
| | | return 0; |
| | | } |
| | | |
| | | try { |
| | | int totalSuccessCount = 0; |
| | | int pageSize = 200; // æ¯é¡µ200æ¡ |
| | | int offset = 0; |
| | | |
| | | while (true) { |
| | | // 1. å页æ¥è¯¢æ°ç³»ç»ä¸éè¦åæ¥ç¶æçä»»å¡ï¼å·²åæ¥è°åº¦åä¸ç¶ææªå®æï¼ |
| | | List<SysTaskEmergency> syncedTasks = sysTaskEmergencyService.selectSyncedTasksForStatusUpdate(offset, pageSize); |
| | | |
| | | if (syncedTasks == null || syncedTasks.isEmpty()) { |
| | | log.info("æ²¡ææ´å¤éè¦åæ¥ç¶æçä»»å¡ï¼offset: {}", offset); |
| | | break; // æ²¡ææ´å¤æ°æ®ï¼éåºå¾ªç¯ |
| | | } |
| | | |
| | | log.info("å¼å§åæ¥ç¶æç¬¬ {} 页ï¼ä»»å¡æ°é: {}", (offset / pageSize) + 1, syncedTasks.size()); |
| | | |
| | | // 2. æåè°åº¦åIDå表 |
| | | List<Long> dispatchOrdIDs = new ArrayList<>(); |
| | | Map<Long, SysTaskEmergency> dispatchIdToTaskMap = new HashMap<>(); |
| | | |
| | | for (SysTaskEmergency emergency : syncedTasks) { |
| | | Long dispatchOrdId = emergency.getLegacyDispatchOrdId(); |
| | | if (dispatchOrdId != null && dispatchOrdId > 0) { |
| | | dispatchOrdIDs.add(dispatchOrdId); |
| | | dispatchIdToTaskMap.put(dispatchOrdId, emergency); |
| | | } |
| | | } |
| | | |
| | | if (dispatchOrdIDs.isEmpty()) { |
| | | log.warn("æ¬é¡µæ²¡æææçè°åº¦åID"); |
| | | offset += pageSize; |
| | | continue; |
| | | } |
| | | |
| | | // 3. æ¹éæ¥è¯¢æ§ç³»ç»è°åº¦åç¶æï¼ç´æ¥æ¥è¯¢SQL Serveræ°æ®åºï¼ |
| | | List<DispatchOrd> dispatchOrds = dispatchOrdService.selectDispatchOrdStatesByIDs(dispatchOrdIDs); |
| | | |
| | | if (dispatchOrds == null || dispatchOrds.isEmpty()) { |
| | | log.warn("æªæ¥è¯¢å°æ§ç³»ç»è°åº¦åç¶æ"); |
| | | offset += pageSize; |
| | | continue; |
| | | } |
| | | |
| | | // 4. æå»ºè°åº¦åIDå°ç¶æçæ å° |
| | | Map<Long, Integer> dispatchIdToStateMap = new HashMap<>(); |
| | | for (DispatchOrd dispatchOrd : dispatchOrds) { |
| | | try { |
| | | Long dispatchOrdId = Long.parseLong(dispatchOrd.getDispatchOrdID()); |
| | | Integer dispatchOrdState = Integer.parseInt(dispatchOrd.getDispatchOrdState()); |
| | | if (dispatchOrdState != null) { |
| | | dispatchIdToStateMap.put(dispatchOrdId, dispatchOrdState); |
| | | } |
| | | } catch (NumberFormatException e) { |
| | | log.error("è§£æè°åº¦åID失败: {}", dispatchOrd.getDispatchOrdID(), e); |
| | | } |
| | | } |
| | | |
| | | // 5. éåä»»å¡ï¼åæ¥ç¶æ |
| | | int pageSuccessCount = 0; |
| | | for (Map.Entry<Long, SysTaskEmergency> entry : dispatchIdToTaskMap.entrySet()) { |
| | | Long dispatchOrdId = entry.getKey(); |
| | | SysTaskEmergency emergency = entry.getValue(); |
| | | |
| | | // è·åæ§ç³»ç»ç¶æ |
| | | Integer legacyStatus = dispatchIdToStateMap.get(dispatchOrdId); |
| | | if (legacyStatus == null) { |
| | | log.warn("æªæ¾å°è°åº¦åç¶æï¼DispatchOrdID: {}", dispatchOrdId); |
| | | continue; |
| | | } |
| | | |
| | | // 忥å个任å¡ç¶æ |
| | | boolean result = syncTaskStatusWithLegacyState(emergency.getTaskId(), legacyStatus); |
| | | if (result) { |
| | | pageSuccessCount++; |
| | | } |
| | | } |
| | | |
| | | totalSuccessCount += pageSuccessCount; |
| | | log.info("ç¶æç¬¬ {} é¡µåæ¥å®æï¼æ»æ°: {}, æå: {}", |
| | | (offset / pageSize) + 1, syncedTasks.size(), pageSuccessCount); |
| | | |
| | | // 妿æ¬é¡µæ°æ®å°äºæ¯é¡µå¤§å°ï¼è¯´æå·²ç»æ¯æåä¸é¡µ |
| | | if (syncedTasks.size() < pageSize) { |
| | | log.info("å·²å°è¾¾æåä¸é¡µï¼ç¶æåæ¥ç»æ"); |
| | | break; |
| | | } |
| | | |
| | | offset += pageSize; // ä¸ä¸é¡µ |
| | | } |
| | | |
| | | log.info("æ¹é忥任å¡ç¶æå®æï¼æ»æåæ°: {}", totalSuccessCount); |
| | | return totalSuccessCount; |
| | | |
| | | } catch (Exception e) { |
| | | log.error("æ¹é忥任å¡ç¶æå¼å¸¸", e); |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 忥å个任å¡ç¶æï¼å·²ç¥æ§ç³»ç»ç¶æç ï¼ |
| | | * å¢å ç¶æå¯¹æ¯é»è¾ï¼å½æ§ç³»ç»ç¶æè½åäºæ°ç³»ç»ç¶ææ¶ï¼ä¸è¿è¡åæ¥ |
| | | * |
| | | * @param taskId ä»»å¡ID |
| | | * @param legacyStatus æ§ç³»ç»ç¶æç |
| | | * @return æ¯å¦æå |
| | | */ |
| | | @Transactional |
| | | private boolean syncTaskStatusWithLegacyState(Long taskId, Integer legacyStatus) { |
| | | try { |
| | | // æ¥è¯¢ä»»å¡ä¿¡æ¯ |
| | | SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId); |
| | | if (task == null) { |
| | | log.error("ä»»å¡ä¸åå¨ï¼ä»»å¡ID: {}", taskId); |
| | | return false; |
| | | } |
| | | |
| | | // 转æ¢ä¸ºæ°ç³»ç»ç¶æ |
| | | TaskStatus newStatus = TaskStatusConverter.convertFromLegacyStatus(legacyStatus); |
| | | if (newStatus == null) { |
| | | log.debug("æ§ç³»ç»ç¶æç > 10 ææ æ³è½¬æ¢ï¼è·³è¿åæ¥ï¼ä»»å¡ID: {}, ç¶æç : {} ({})", |
| | | taskId, legacyStatus, TaskStatusConverter.getLegacyStatusDescription(legacyStatus)); |
| | | return false; |
| | | } |
| | | |
| | | // æ£æ¥ç¶ææ¯å¦åå |
| | | if (newStatus.getCode().equals(task.getTaskStatus())) { |
| | | log.debug("ä»»å¡ç¶ææªååï¼ä»»å¡ID: {}, å½åç¶æ: {}", taskId, newStatus.getInfo()); |
| | | return true; |
| | | } |
| | | |
| | | // æ¯è¾æ°æ§ç³»ç»ç¶æçä¼å
级ï¼é²æ¢ç¶æåé |
| | | TaskStatus currentStatus = TaskStatus.getByCode(task.getTaskStatus()); |
| | | if (currentStatus != null && !shouldSyncStatus(currentStatus, newStatus, legacyStatus)) { |
| | | log.info("ãæ§ç³»ç»æ´æ°å°æ°ç³»ç»ã æ§ç³»ç»ç¶æè½åäºæ°ç³»ç»ç¶æï¼è·³è¿åæ¥ï¼ä»»å¡ID: {}, æ°ç³»ç»ç¶æ: {} ({}), æ§ç³»ç»ç¶æ: {} ({})", |
| | | taskId, task.getTaskStatus(), currentStatus.getInfo(), |
| | | newStatus.getCode(), TaskStatusConverter.getLegacyStatusDescription(legacyStatus)); |
| | | return false; |
| | | } |
| | | |
| | | // æ´æ°ä»»å¡ç¶æ |
| | | String oldStatus = task.getTaskStatus(); |
| | | task.setTaskStatus(newStatus.getCode()); |
| | | |
| | | // æ ¹æ®ç¶æè®¾ç½®æ¶é´ |
| | | Date now = new Date(); |
| | | switch (newStatus) { |
| | | case DEPARTING: |
| | | case ARRIVED: |
| | | case IN_PROGRESS: |
| | | // 妿å®é
å¼å§æ¶é´ä¸ºç©ºï¼è®¾ç½®å®é
å¼å§æ¶é´ |
| | | if (task.getActualStartTime() == null) { |
| | | task.setActualStartTime(now); |
| | | } |
| | | break; |
| | | case COMPLETED: |
| | | case CANCELLED: |
| | | // 设置å®é
ç»ææ¶é´ |
| | | if (task.getActualEndTime() == null) { |
| | | task.setActualEndTime(now); |
| | | } |
| | | // 妿å®é
å¼å§æ¶é´ä¸ºç©ºï¼ä¹è®¾ç½®ä¸ä¸ |
| | | if (task.getActualStartTime() == null) { |
| | | task.setActualStartTime(now); |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | sysTaskMapper.updateSysTask(task); |
| | | |
| | | log.info("ä»»å¡ç¶æåæ¥æåï¼ä»»å¡ID: {}, æ§ç¶æ: {}, æ°ç¶æ: {}, æ§ç³»ç»ç¶æç : {} ({})", |
| | | taskId, oldStatus, newStatus.getCode(), legacyStatus, |
| | | TaskStatusConverter.getLegacyStatusDescription(legacyStatus)); |
| | | |
| | | return true; |
| | | |
| | | } catch (Exception e) { |
| | | log.error("忥任å¡ç¶æå¼å¸¸ï¼ä»»å¡ID: {}", taskId, e); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 夿æ¯å¦åºè¯¥åæ¥ç¶æ |
| | | * è§åï¼æ§ç³»ç»ç¶æç éè¦å¤§äºçäºæ°ç³»ç»å½åç¶æå¯¹åºçæ§ç³»ç»ç¶æç |
| | | * 鲿¢å 为æ¶é´å·®å¯¼è´æ°ç³»ç»ç¶ææ¯æ§ç³»ç»æ´æ°ï¼è被æ§ç³»ç»çæ§ç¶æè¦ç |
| | | * |
| | | * @param currentStatus æ°ç³»ç»å½åç¶æ |
| | | * @param targetStatus æ§ç³»ç»è½¬æ¢åçç®æ ç¶æ |
| | | * @param legacyStatusCode æ§ç³»ç»ç¶æç |
| | | * @return true-åºè¯¥åæ¥ï¼false-ä¸åºè¯¥åæ¥ |
| | | */ |
| | | private boolean shouldSyncStatus(TaskStatus currentStatus, TaskStatus targetStatus, Integer legacyStatusCode) { |
| | | // è·åæ°ç³»ç»å½åç¶æå¯¹åºçæ§ç³»ç»ç¶æç |
| | | Integer currentLegacyCode = TaskStatusConverter.convertToLegacyStatus(currentStatus); |
| | | |
| | | if (currentLegacyCode == null) { |
| | | // 妿å½åç¶ææ æ³è½¬æ¢ä¸ºæ§ç³»ç»ç¶æç ï¼å
è®¸åæ¥ |
| | | log.warn("æ°ç³»ç»å½åç¶ææ æ³è½¬æ¢ä¸ºæ§ç³»ç»ç¶æç ï¼å
è®¸åæ¥ï¼å½åç¶æ: {}", currentStatus.getCode()); |
| | | return true; |
| | | } |
| | | |
| | | // æ¯è¾ç¶æç å¤§å° |
| | | // æ§ç³»ç»ç¶æç >= æ°ç³»ç»å½åç¶æå¯¹åºçæ§ç³»ç»ç¶æç ï¼æå
è®¸åæ¥ |
| | | // ä¾å¦ï¼æ°ç³»ç»å·²ç»æ¯"åºåä¸"(4)ï¼æ§ç³»ç»è¿æ¯"å¾
å¤ç"(3)ï¼åä¸åæ¥ |
| | | // æ°ç³»ç»æ¯"åºåä¸"(4)ï¼æ§ç³»ç»æ¯"å·²å°è¾¾"(5)æ"åºåä¸"(4)ï¼å忥 |
| | | boolean shouldSync = legacyStatusCode >= currentLegacyCode; |
| | | |
| | | if (!shouldSync) { |
| | | log.debug("ç¶æå¯¹æ¯ï¼æ§ç³»ç»ç¶æç ({}) < æ°ç³»ç»å½åç¶æå¯¹åºç ({})", |
| | | legacyStatusCode, currentLegacyCode); |
| | | } |
| | | |
| | | return shouldSync; |
| | | } |
| | | } |
| | |
| | | private SysTaskMapper sysTaskMapper; |
| | | |
| | | /** |
| | | * çæä»»å¡ç¼å· |
| | | * æ ¼å¼ï¼TASK + YYYYMMDD + 4ä½åºå· |
| | | * çæä»»å¡ç¼å·ï¼ä½¿ç¨é»è®¤åç¼ï¼ |
| | | * æ ¼å¼ï¼T + YYYYMMDD + 4ä½åºå· |
| | | * |
| | | * @return ä»»å¡ç¼å· |
| | | * @deprecated å»ºè®®ä½¿ç¨ {@link #generateTaskCode(String)} æå®åæ®ç±»ååç¼ |
| | | */ |
| | | @Deprecated |
| | | public String generateTaskCode() { |
| | | return generateTaskCode("T"); |
| | | } |
| | | |
| | | /** |
| | | * çæä»»å¡ç¼å· |
| | | * æ ¼å¼ï¼åæ®ç±»ååç¼ + YYYYMMDD + 4ä½åºå· |
| | | * |
| | | * @param serviceOrdClass åæ®ç±»åï¼å¦ï¼BFãJZçï¼ |
| | | * @return ä»»å¡ç¼å· |
| | | */ |
| | | public String generateTaskCode(String serviceOrdClass) { |
| | | String dateStr = DateUtils.dateTimeNow("yyyyMMdd"); |
| | | return generateTaskCode(dateStr); |
| | | return generateTaskCode(serviceOrdClass, dateStr); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ¥æçæä»»å¡ç¼å· |
| | | * |
| | | * @param serviceOrdClass åæ®ç±»åï¼å¦ï¼BFãJZçï¼ |
| | | * @param date æ¥æ |
| | | * @return ä»»å¡ç¼å· |
| | | */ |
| | | public String generateTaskCode(Date date) { |
| | | public String generateTaskCode(String serviceOrdClass, Date date) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); |
| | | String dateStr = sdf.format(date); |
| | | return generateTaskCode(dateStr); |
| | | return generateTaskCode(serviceOrdClass, dateStr); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ¥æå符串çæä»»å¡ç¼å· |
| | | * |
| | | * @param serviceOrdClass åæ®ç±»åï¼å¦ï¼BFãJZçï¼ |
| | | * @param dateStr æ¥æåç¬¦ä¸²ï¼æ ¼å¼ï¼yyyyMMddï¼ |
| | | * @return ä»»å¡ç¼å· |
| | | */ |
| | | private String generateTaskCode(String dateStr) { |
| | | String datePrefix = "TASK" + dateStr; |
| | | private String generateTaskCode(String serviceOrdClass, String dateStr) { |
| | | // ç¡®ä¿åæ®ç±»ååç¼ä¸ä¸ºç©ºï¼é»è®¤ä½¿ç¨"T" |
| | | String prefix = (serviceOrdClass != null && !serviceOrdClass.trim().isEmpty()) |
| | | ? serviceOrdClass.trim() : "T"; |
| | | |
| | | String datePrefix = prefix + dateStr; |
| | | |
| | | // æ¥è¯¢å½æ¥æå¤§ç¼å· |
| | | String maxTaskCode = sysTaskMapper.selectMaxTaskCodeByDatePrefix(datePrefix); |
| New file |
| | |
| | | package com.ruoyi.system.utils; |
| | | |
| | | import com.ruoyi.system.domain.enums.TaskStatus; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | /** |
| | | * ä»»å¡ç¶æè½¬æ¢å·¥å
·ç±» |
| | | * ç¨äºæ°æ§ç³»ç»ä»»å¡ç¶æçæ å°è½¬æ¢ |
| | | * |
| | | * @author ruoyi |
| | | * @date 2025-01-30 |
| | | */ |
| | | public class TaskStatusConverter { |
| | | |
| | | private static final Logger log = LoggerFactory.getLogger(TaskStatusConverter.class); |
| | | |
| | | /** |
| | | * å°æ§ç³»ç»ç¶æç 转æ¢ä¸ºæ°ç³»ç»TaskStatus |
| | | * |
| | | * æ å°è§åï¼ |
| | | * 0,1,2,3 -> PENDING (å¾
å¤ç) |
| | | * 4 -> DEPARTING (åºåä¸) |
| | | * 5 -> ARRIVED (å·²å°è¾¾) |
| | | * 6 -> IN_PROGRESS (ä»»å¡ä¸) |
| | | * 7 -> RETURNING (è¿ç¨ä¸) |
| | | * 8,9 -> COMPLETED (已宿) |
| | | * |
| | | * 注æï¼ç¶æç > 10 çä¸è¿è¡åæ¥ï¼å®¡æ ¸ç±»ãé©»ç¹çç±æ°ç³»ç»èªè¡ç®¡çï¼ |
| | | * |
| | | * @param legacyStatusCode æ§ç³»ç»ç¶æç |
| | | * @return æ°ç³»ç»TaskStatusï¼ç¶æç >=10ææªç¥ç¶æè¿ånull |
| | | */ |
| | | public static TaskStatus convertFromLegacyStatus(Integer legacyStatusCode) { |
| | | if (legacyStatusCode == null) { |
| | | log.warn("æ§ç³»ç»ç¶æç 为空"); |
| | | return null; |
| | | } |
| | | |
| | | // ç¶æç > 10 çä¸è¿è¡åæ¥ |
| | | if (legacyStatusCode > 10) { |
| | | log.debug("æ§ç³»ç»ç¶æç > 10ï¼ä¸è¿è¡åæ¥: {} ({})", legacyStatusCode, getLegacyStatusDescription(legacyStatusCode)); |
| | | return null; |
| | | } |
| | | |
| | | switch (legacyStatusCode) { |
| | | case 0: // æ°è°åº¦åï¼æªä¸åï¼ |
| | | case 1: // å®å
¨æªç¡®è®¤ |
| | | case 2: // é¨å已确认 |
| | | case 3: // æªåºè½¦ |
| | | return TaskStatus.PENDING; |
| | | |
| | | case 4: // å·²åºè½¦ï¼å»æ¥æ£è
éä¸ï¼ |
| | | return TaskStatus.DEPARTING; |
| | | |
| | | case 5: // å·²åºè½¦ï¼çå¾
æ£è
ï¼ |
| | | return TaskStatus.ARRIVED; |
| | | |
| | | case 6: // å·²åºè½¦ï¼æå¡ä¸ï¼ |
| | | return TaskStatus.IN_PROGRESS; |
| | | |
| | | case 7: // å·²éè¾¾ï¼åç¨ä¸ï¼ |
| | | return TaskStatus.RETURNING; |
| | | |
| | | case 8: // å·²è¿å |
| | | case 9: // è·ç©ºåï¼å·²è¿å |
| | | return TaskStatus.COMPLETED; |
| | | case 10: |
| | | return TaskStatus.CANCELLED; |
| | | default: |
| | | log.warn("æªç¥çæ§ç³»ç»ç¶æç : {}", legacyStatusCode); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°æ°ç³»ç»TaskStatus转æ¢ä¸ºæ§ç³»ç»ç¶æç |
| | | * 注æï¼ç±äºå¤å¯¹ä¸çæ å°å
³ç³»ï¼è¿éè¿åçæ¯æå¸¸ç¨çç¶æç |
| | | * |
| | | * @param taskStatus æ°ç³»ç»TaskStatus |
| | | * @return æ§ç³»ç»ç¶æç ï¼æªç¥ç¶æè¿ånull |
| | | */ |
| | | public static Integer convertToLegacyStatus(TaskStatus taskStatus) { |
| | | if (taskStatus == null) { |
| | | log.warn("æ°ç³»ç»ä»»å¡ç¶æä¸ºç©º"); |
| | | return null; |
| | | } |
| | | |
| | | switch (taskStatus) { |
| | | case PENDING: |
| | | return 3; // æªåºè½¦ |
| | | |
| | | case DEPARTING: |
| | | return 4; // å·²åºè½¦ï¼å»æ¥æ£è
éä¸ï¼ |
| | | |
| | | case ARRIVED: |
| | | return 5; // å·²åºè½¦ï¼çå¾
æ£è
ï¼ |
| | | |
| | | case IN_PROGRESS: |
| | | return 6; // å·²åºè½¦ï¼æå¡ä¸ï¼ |
| | | |
| | | case RETURNING: |
| | | return 7; // å·²éè¾¾ï¼åç¨ä¸ï¼ |
| | | |
| | | case COMPLETED: |
| | | return 8; // å·²è¿å |
| | | |
| | | case CANCELLED: |
| | | return 10; // åæ¶ |
| | | |
| | | default: |
| | | log.warn("æªç¥çæ°ç³»ç»ä»»å¡ç¶æ: {}", taskStatus); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åæ§ç³»ç»ç¶æç çæè¿° |
| | | * |
| | | * @param legacyStatusCode æ§ç³»ç»ç¶æç |
| | | * @return ç¶ææè¿° |
| | | */ |
| | | public static String getLegacyStatusDescription(Integer legacyStatusCode) { |
| | | if (legacyStatusCode == null) { |
| | | return "æªç¥ç¶æ"; |
| | | } |
| | | |
| | | switch (legacyStatusCode) { |
| | | case 0: return "æ°è°åº¦åï¼æªä¸åï¼"; |
| | | case 1: return "å®å
¨æªç¡®è®¤"; |
| | | case 2: return "é¨å已确认"; |
| | | case 3: return "æªåºè½¦"; |
| | | case 4: return "å·²åºè½¦ï¼å»æ¥æ£è
éä¸ï¼"; |
| | | case 5: return "å·²åºè½¦ï¼çå¾
æ£è
ï¼"; |
| | | case 6: return "å·²åºè½¦ï¼æå¡ä¸ï¼"; |
| | | case 7: return "å·²éè¾¾ï¼åç¨ä¸ï¼"; |
| | | case 8: return "å·²è¿å"; |
| | | case 9: return "è·ç©ºåï¼å·²è¿å"; |
| | | case 10: return "åæ¶"; |
| | | case 11: return "å·²æäº¤ï¼çå¾
å®¡æ ¸"; |
| | | case 12: return "å®¡æ ¸å®æ"; |
| | | case 13: return "å®¡æ ¸ä¸éè¿"; |
| | | case 14: return "已驻ç¹"; |
| | | default: return "æªç¥ç¶æ(" + legacyStatusCode + ")"; |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | package com.ruoyi.system.utils; |
| | | |
| | | import com.ruoyi.system.domain.enums.TaskStatus; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | /** |
| | | * æ°ç³»ç»ç¶æåæ§ç³»ç»ç¶æè½¬æ¢å·¥å
·ç±» |
| | | * |
| | | * @author ruoyi |
| | | * @date 2024-01-16 |
| | | */ |
| | | public class TaskStatusPushConverter { |
| | | |
| | | private static final Logger log = LoggerFactory.getLogger(TaskStatusPushConverter.class); |
| | | |
| | | /** |
| | | * å°æ°ç³»ç»TaskStatus转æ¢ä¸ºæ§ç³»ç»ç¶æç |
| | | * |
| | | * @param taskStatus æ°ç³»ç»ä»»å¡ç¶ææä¸¾ |
| | | * @return æ§ç³»ç»ç¶æç ï¼å¦æä¸éè¦åæ¥åè¿ånull |
| | | */ |
| | | public static Integer convertToLegacyStatus(TaskStatus taskStatus) { |
| | | if (taskStatus == null) { |
| | | log.warn("æ°ç³»ç»ç¶æä¸ºç©º"); |
| | | return null; |
| | | } |
| | | |
| | | switch (taskStatus) { |
| | | case DEPARTING: // åºåä¸ |
| | | return 4; |
| | | case IN_PROGRESS: // ä»»å¡ä¸ |
| | | return 6; |
| | | case RETURNING: // è¿ç¨ä¸ |
| | | return 7; |
| | | case COMPLETED: // 已宿 |
| | | return 8; |
| | | case CANCELLED: // 已忶 |
| | | return 10; |
| | | case PENDING: // å¾
å¤ç - ä¸åæ¥ |
| | | case ARRIVED: // å·²å°è¾¾ - ä¸åæ¥ |
| | | default: |
| | | log.debug("æ°ç³»ç»ç¶æä¸éè¦åæ¥å°æ§ç³»ç»: {}", taskStatus.getInfo()); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 夿æ¯å¦éè¦æ´æ°æ§ç³»ç»ç¶æ |
| | | * å¢å 鲿¢ç¶æåéæºå¶ï¼å½æ°ç³»ç»ç¶æè½åäºæ§ç³»ç»æ¶ï¼ä¸è¿è¡æ¨é |
| | | * |
| | | * @param newStatusCode æ°ç³»ç»è¦æ¨éçç¶æç |
| | | * @param oldStatusCode æ§ç³»ç»å½åç¶æç |
| | | * @return æ¯å¦éè¦æ´æ° |
| | | */ |
| | | public static boolean shouldUpdateLegacyStatus(Integer newStatusCode, Integer oldStatusCode) { |
| | | if (newStatusCode == null || oldStatusCode == null) { |
| | | log.warn("ç¶æç 为空ï¼è·³è¿æ´æ°ï¼æ°ç¶æç : {}, æ§ç¶æç : {}", newStatusCode, oldStatusCode); |
| | | return false; |
| | | } |
| | | |
| | | // 鲿¢ç¶æåéï¼æ§ç³»ç»ç¶æ >= æ°ç³»ç»è¦æ¨éçç¶ææ¶ï¼ä¸æ´æ° |
| | | // åå ï¼å¯è½æ¯æ§ç³»ç»å·²ç»å¤çäºæ´æ°çç¶æï¼èæ°ç³»ç»ç±äºæ¶é´å·®è¿æ²¡æåæ¥å° |
| | | if (oldStatusCode >= newStatusCode) { |
| | | log.info("æ§ç³»ç»ç¶æ({}) >= æ°ç³»ç»ç®æ ç¶æ({})ï¼è·³è¿æ¨éï¼é²æ¢ç¶æåéï¼" + |
| | | "æ§ç³»ç»: {} ({}), æ°ç³»ç»ç®æ : {} ({})", |
| | | oldStatusCode, newStatusCode, |
| | | oldStatusCode, getLegacyStatusDescription(oldStatusCode), |
| | | newStatusCode, getLegacyStatusDescription(newStatusCode)); |
| | | return false; |
| | | } |
| | | |
| | | // ç¹æ®ç¶ææ£æ¥ï¼å·²å®ææå·²åæ¶çä»»å¡ä¸åºè¯¥è¢«æ´æ°ä¸ºä¸é´ç¶æ |
| | | if (oldStatusCode >= 8) { |
| | | // æ§ç³»ç»å·²ç»æ¯å®ææï¼8,9,10ï¼ï¼ä¸åºè¯¥è¢«ä»»ä½ä¸é´ç¶æè¦ç |
| | | if (newStatusCode < 8) { |
| | | log.warn("æ§ç³»ç»å·²æ¯ç»æ({})(ï¼{})ï¼æç»æ¨éä¸é´ç¶æ({})(ï¼{})", |
| | | oldStatusCode, getLegacyStatusDescription(oldStatusCode), |
| | | newStatusCode, getLegacyStatusDescription(newStatusCode)); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | log.debug("å
许æ¨éç¶æï¼æ§ç³»ç»: {} ({}), æ°ç³»ç»ç®æ : {} ({})", |
| | | oldStatusCode, getLegacyStatusDescription(oldStatusCode), |
| | | newStatusCode, getLegacyStatusDescription(newStatusCode)); |
| | | |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ§ç³»ç»ç¶ææè¿° |
| | | * |
| | | * @param statusCode æ§ç³»ç»ç¶æç |
| | | * @return ç¶ææè¿° |
| | | */ |
| | | public static String getLegacyStatusDescription(Integer statusCode) { |
| | | if (statusCode == null) { |
| | | return "æªç¥"; |
| | | } |
| | | |
| | | switch (statusCode) { |
| | | case 0: return "æ°è°åº¦åï¼æªä¸åï¼"; |
| | | case 1: return "å®å
¨æªç¡®è®¤"; |
| | | case 2: return "é¨å已确认"; |
| | | case 3: return "æªåºè½¦"; |
| | | case 4: return "å·²åºè½¦ï¼å»æ¥æ£è
éä¸ï¼"; |
| | | case 5: return "å·²åºè½¦ï¼çå¾
æ£è
ï¼"; |
| | | case 6: return "å·²åºè½¦ï¼æå¡ä¸ï¼"; |
| | | case 7: return "å·²éè¾¾ï¼åç¨ä¸ï¼"; |
| | | case 8: return "å·²è¿å"; |
| | | case 9: return "è·ç©ºåï¼å·²è¿å"; |
| | | case 10: return "åæ¶"; |
| | | case 11: return "å®¡æ ¸ä¸"; |
| | | case 12: return "å®¡æ ¸éè¿"; |
| | | case 13: return "å®¡æ ¸ä¸éè¿"; |
| | | case 14: return "é©»ç¹"; |
| | | default: return "æªç¥ç¶æ(" + statusCode + ")"; |
| | | } |
| | | } |
| | | } |
| | |
| | | and ImageType in (1,2) |
| | | order by UpImageTime desc |
| | | </select> |
| | | |
| | | <!-- æ ¹æ®è°åº¦åIDæ¥è¯¢è°åº¦åç¶æ --> |
| | | <select id="selectDispatchOrdStateByID" parameterType="Long" resultType="Integer"> |
| | | select DispatchOrdState |
| | | from DispatchOrd |
| | | where DispatchOrdID = #{dispatchOrdID} |
| | | </select> |
| | | |
| | | <!-- æ¹éæ¥è¯¢è°åº¦åç¶æ --> |
| | | <select id="selectDispatchOrdStatesByIDs" parameterType="java.util.List" resultMap="DispatchOrdResult"> |
| | | select DispatchOrdID, DispatchOrdState |
| | | from DispatchOrd |
| | | where DispatchOrdID in |
| | | <foreach collection="list" item="id" open="(" separator="," close=")"> |
| | | #{id} |
| | | </foreach> |
| | | </select> |
| | | |
| | | <!-- æ´æ°è°åº¦åç¶æ --> |
| | | <update id="updateDispatchOrdState"> |
| | | update DispatchOrd |
| | | set DispatchOrdState = #{dispatchOrdState} |
| | | where DispatchOrdID = #{dispatchOrdID} |
| | | </update> |
| | | |
| | | </mapper> |
| | |
| | | <select id="selectPendingSyncTasks" resultMap="SysTaskEmergencyResult"> |
| | | <include refid="selectSysTaskEmergencyVo"/> |
| | | where (sync_status = 0 or sync_status = 3) |
| | | and task_id in ( |
| | | select task_id from sys_task |
| | | where task_type = 'EMERGENCY_TRANSFER' |
| | | and del_flag = '0' |
| | | ) |
| | | order by id asc |
| | | limit 100 |
| | | <if test="offset != null and limit != null"> |
| | | limit #{offset}, #{limit} |
| | | </if> |
| | | <if test="offset == null and limit != null"> |
| | | limit #{limit} |
| | | </if> |
| | | <if test="offset == null and limit == null"> |
| | | limit 100 |
| | | </if> |
| | | </select> |
| | | |
| | | <!-- æ¥è¯¢å¾
忥è°åº¦åçä»»å¡ï¼å·²åæ¥æå¡å使ªåæ¥è°åº¦åï¼ --> |
| | |
| | | where sync_status = 2 |
| | | and legacy_service_ord_id is not null |
| | | and (dispatch_sync_status = 0 or dispatch_sync_status = 3 or dispatch_sync_status is null) |
| | | and task_id in ( |
| | | select task_id from sys_task |
| | | where task_type = 'EMERGENCY_TRANSFER' |
| | | and task_status not in ('COMPLETED', 'CANCELLED') <!-- è¿æ»¤å·²å®æ/已忶çä»»å¡ --> |
| | | and del_flag = '0' |
| | | ) |
| | | order by id asc |
| | | limit 100 |
| | | <if test="offset != null and limit != null"> |
| | | limit #{offset}, #{limit} |
| | | </if> |
| | | <if test="offset == null and limit != null"> |
| | | limit #{limit} |
| | | </if> |
| | | <if test="offset == null and limit == null"> |
| | | limit 100 |
| | | </if> |
| | | </select> |
| | | |
| | | <!-- æ¥è¯¢å·²åæ¥è°åº¦åä¸ç¶ææªå®æçä»»å¡ï¼ç¨äºç¶æåæ¥ï¼ --> |
| | | <select id="selectSyncedTasksForStatusUpdate" resultMap="SysTaskEmergencyResult"> |
| | | <include refid="selectSysTaskEmergencyVo"/> |
| | | where dispatch_sync_status = 2 |
| | | and legacy_dispatch_ord_id is not null |
| | | and task_id in ( |
| | | select task_id from sys_task |
| | | where task_type = 'EMERGENCY_TRANSFER' |
| | | and del_flag = '0' |
| | | ) |
| | | order by id asc |
| | | <if test="offset != null and limit != null"> |
| | | limit #{offset}, #{limit} |
| | | </if> |
| | | <if test="offset == null and limit != null"> |
| | | limit #{limit} |
| | | </if> |
| | | <if test="offset == null and limit == null"> |
| | | limit 200 |
| | | </if> |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åæ¥ç¶æ" align="center" prop="syncStatus" width="120" v-if="hasEmergencyTask"> |
| | | <template slot-scope="scope"> |
| | | <span v-if="scope.row.taskType !== 'EMERGENCY_TRANSFER'" style="color: #C0C4CC;">--</span> |
| | | <el-tag v-else-if="!scope.row.emergencyInfo" type="info" size="mini">--</el-tag> |
| | | <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 0" type="info" size="mini"> |
| | | <i class="el-icon-warning"></i> æªåæ¥ |
| | | </el-tag> |
| | | <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 1" type="warning" size="mini"> |
| | | <i class="el-icon-loading"></i> åæ¥ä¸ |
| | | </el-tag> |
| | | <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 2" type="success" size="mini"> |
| | | <i class="el-icon-success"></i> 已忥 |
| | | </el-tag> |
| | | <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 3" type="danger" size="mini"> |
| | | <i class="el-icon-error"></i> åæ¥å¤±è´¥ |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="ä»»å¡ç¶æ" align="center" prop="taskStatus"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_task_status" :value="scope.row.taskStatus"/> |
| New file |
| | |
| | | -- ========================================== |
| | | -- æ§ç³»ç»ä»»å¡ç¶æåæ¥å®æ¶ä»»å¡é
ç½®èæ¬ |
| | | -- ========================================== |
| | | -- |
| | | -- åè½è¯´æ: |
| | | -- 仿§ç³»ç»åæ¥ä»»å¡ç¶æå°æ°ç³»ç»ï¼å®ç°ç¶æç宿¶æ´æ° |
| | | -- |
| | | -- 使ç¨åºæ¯: |
| | | -- 1. æ§ç³»ç»æä½äººåæ´æ°äºè°åº¦åç¶æ |
| | | -- 2. æ°ç³»ç»éè¦åæ æ§ç³»ç»çç¶æåæ´ |
| | | -- 3. ä¿ææ°æ§ç³»ç»ç¶æçä¸è´æ§ |
| | | -- |
| | | -- 忥æ¡ä»¶: |
| | | -- 1. è°åº¦å已忥æåï¼dispatch_sync_status = 2ï¼ |
| | | -- 2. æDispatchOrdIDï¼legacy_dispatch_ord_id IS NOT NULLï¼ |
| | | -- 3. ä»»å¡ç¶ææªå®æï¼task_status NOT IN ('COMPLETED', 'CANCELLED')ï¼ |
| | | -- |
| | | -- æ§è¡é¢ç建议: |
| | | -- - ç产ç¯å¢: æ¯5åéæ§è¡ä¸æ¬¡ (0 0/5 * * * ?) |
| | | -- - æµè¯ç¯å¢: æ¯2åéæ§è¡ä¸æ¬¡ (0 0/2 * * * ?) |
| | | -- |
| | | -- 注æäºé¡¹: |
| | | -- 1. ä¾èµè°åº¦å忥宿 |
| | | -- 2. ä»
忥æªå®æç¶æçä»»å¡ |
| | | -- 3. ç¶ææ å°è§åè§TaskStatusConverterç±» |
| | | -- ========================================== |
| | | |
| | | -- æå
¥å®æ¶ä»»å¡é
ç½® |
| | | INSERT INTO `sys_job` ( |
| | | `job_name`, |
| | | `job_group`, |
| | | `invoke_target`, |
| | | `cron_expression`, |
| | | `misfire_policy`, |
| | | `concurrent`, |
| | | `status`, |
| | | `create_by`, |
| | | `create_time`, |
| | | `update_by`, |
| | | `update_time`, |
| | | `remark` |
| | | ) VALUES ( |
| | | 'ä»»å¡ç¶æåæ¥', |
| | | 'DEFAULT', |
| | | 'legacySystemSyncTask.syncTaskStatusFromLegacy()', |
| | | '0 0/5 * * * ?', |
| | | '2', |
| | | '1', |
| | | '0', |
| | | 'admin', |
| | | NOW(), |
| | | 'admin', |
| | | NOW(), |
| | | '仿§ç³»ç»åæ¥ä»»å¡ç¶æå°æ°ç³»ç»ï¼æ¯5åéæ§è¡ä¸æ¬¡ã忥已忥è°åº¦åä¸ç¶ææªå®æçä»»å¡ã' |
| | | ); |
| | | |
| | | -- ========================================== |
| | | -- éªè¯æ¥è¯¢ |
| | | -- ========================================== |
| | | |
| | | -- 1. æ¥ç宿¶ä»»å¡æ¯å¦æ·»å æå |
| | | SELECT |
| | | job_id, |
| | | job_name, |
| | | job_group, |
| | | invoke_target, |
| | | cron_expression, |
| | | CASE status |
| | | WHEN '0' THEN 'æ£å¸¸' |
| | | WHEN '1' THEN 'æå' |
| | | END AS job_status, |
| | | remark |
| | | FROM sys_job |
| | | WHERE job_name = 'ä»»å¡ç¶æåæ¥'; |
| | | |
| | | -- 2. æ¥çéè¦åæ¥ç¶æç任塿°é |
| | | SELECT |
| | | COUNT(*) AS total_tasks, |
| | | SUM(CASE WHEN t.task_status = 'PENDING' THEN 1 ELSE 0 END) AS pending, |
| | | SUM(CASE WHEN t.task_status = 'DEPARTING' THEN 1 ELSE 0 END) AS departing, |
| | | SUM(CASE WHEN t.task_status = 'ARRIVED' THEN 1 ELSE 0 END) AS arrived, |
| | | SUM(CASE WHEN t.task_status = 'IN_PROGRESS' THEN 1 ELSE 0 END) AS in_progress, |
| | | SUM(CASE WHEN t.task_status = 'RETURNING' THEN 1 ELSE 0 END) AS returning |
| | | FROM sys_task_emergency e |
| | | INNER JOIN sys_task t ON e.task_id = t.task_id |
| | | WHERE e.dispatch_sync_status = 2 |
| | | AND e.legacy_dispatch_ord_id IS NOT NULL |
| | | AND t.task_status NOT IN ('COMPLETED', 'CANCELLED') |
| | | AND t.del_flag = '0'; |
| | | |
| | | -- 3. æ¥çä»»å¡ç¶æåå¸è¯¦æ
|
| | | SELECT |
| | | t.task_id, |
| | | t.task_code, |
| | | t.task_status, |
| | | e.legacy_service_ord_id, |
| | | e.legacy_dispatch_ord_id, |
| | | t.create_time, |
| | | t.update_time |
| | | FROM sys_task_emergency e |
| | | INNER JOIN sys_task t ON e.task_id = t.task_id |
| | | WHERE e.dispatch_sync_status = 2 |
| | | AND e.legacy_dispatch_ord_id IS NOT NULL |
| | | AND t.task_status NOT IN ('COMPLETED', 'CANCELLED') |
| | | AND t.del_flag = '0' |
| | | ORDER BY t.update_time DESC |
| | | LIMIT 10; |
| | | |
| | | -- ========================================== |
| | | -- ç¶ææ å°è§ååè |
| | | -- ========================================== |
| | | /* |
| | | æ§ç³»ç»ç¶æç -> æ°ç³»ç»ç¶æ: |
| | | 0,1,2,3,11,12 -> PENDING (å¾
å¤ç) |
| | | 4 -> DEPARTING (åºåä¸) |
| | | 5,14 -> ARRIVED (å·²å°è¾¾) |
| | | 6 -> IN_PROGRESS (ä»»å¡ä¸) |
| | | 7 -> RETURNING (è¿ç¨ä¸) |
| | | 8,9 -> COMPLETED (已宿) |
| | | 10,13 -> CANCELLED (已忶) |
| | | |
| | | 详ç»è¯´æè§: com.ruoyi.system.utils.TaskStatusConverter |
| | | */ |
| | | |
| | | -- ========================================== |
| | | -- æå¨è§¦åæµè¯ |
| | | -- ========================================== |
| | | /* |
| | | -- å¨å®æ¶ä»»å¡ç®¡ç页颿卿§è¡ä¸æ¬¡ä»»å¡ï¼æè
å¨ä»£ç ä¸è°ç¨: |
| | | -- legacySystemSyncTask.syncTaskStatusFromLegacy() |
| | | |
| | | -- æ¥ç忥æ¥å¿ï¼éè¦æ¥çåºç¨æ¥å¿æä»¶ï¼ |
| | | */ |
| New file |
| | |
| | | -- ---------------------------- |
| | | -- ä»»å¡ç¶ææ¨é宿¶ä»»å¡é
ç½®ï¼ä»æ°ç³»ç»æ¨éå°æ§ç³»ç»ï¼ |
| | | -- ---------------------------- |
| | | INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark) |
| | | VALUES |
| | | ('ä»»å¡ç¶ææ¨é', 'DEFAULT', 'legacySystemSyncTask.pushTaskStatusToLegacy()', '0 0/3 * * * ?', '3', '1', '1', 'admin', sysdate(), 'admin', sysdate(), |
| | | 'æ¯3åéæ§è¡ä¸æ¬¡ï¼å°æ°ç³»ç»ä¸ç¶æå·²ååç任塿¨éå°æ§ç³»ç»ãæ¨éè§åï¼åºåä¸->4ï¼ä»»å¡ä¸->6ï¼è¿ç¨ä¸->7ï¼å·²å®æ->8ï¼å·²åæ¶->10ãæ§ç³»ç»ç¶æ>=ç®æ ç¶ææ¶ä¸æ¨éã'); |
| New file |
| | |
| | | -- =================================================================== |
| | | -- æ´æ°ä»»å¡ç¶æåå
¸è¡¨ |
| | | -- |
| | | -- 说æï¼æ·»å 转è¿ä»»å¡ç宿´ç¶ææµç¨ |
| | | -- PENDING -> DEPARTING -> ARRIVED -> RETURNING -> COMPLETED/CANCELLED |
| | | -- =================================================================== |
| | | |
| | | -- 1. å
å 餿§çä»»å¡ç¶æåå
¸æ°æ® |
| | | DELETE FROM sys_dict_data WHERE dict_type = 'sys_task_status'; |
| | | |
| | | -- 2. éæ°æå
¥å®æ´çä»»å¡ç¶æåå
¸æ°æ® |
| | | -- ---------------------------- |
| | | -- ä»»å¡ç¶æåå
¸æ°æ®ï¼æç¶ææµç¨æåºï¼ |
| | | -- ---------------------------- |
| | | |
| | | -- å¾
å¤çï¼åå§ç¶æï¼ |
| | | INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) |
| | | VALUES(1, 'å¾
å¤ç', 'PENDING', 'sys_task_status', '', 'warning', 'N', '0', 'admin', SYSDATE(), '', NULL, 'ä»»å¡å·²å建ï¼çå¾
åºå'); |
| | | |
| | | -- åºåä¸ |
| | | INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) |
| | | VALUES(2, 'åºåä¸', 'DEPARTING', 'sys_task_status', '', 'primary', 'N', '0', 'admin', SYSDATE(), '', NULL, 'ä»»å¡å·²åºåï¼åå¾ç®çå°'); |
| | | |
| | | -- å·²å°è¾¾ |
| | | INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) |
| | | VALUES(3, 'å·²å°è¾¾', 'ARRIVED', 'sys_task_status', '', 'primary', 'N', '0', 'admin', SYSDATE(), '', NULL, 'å·²å°è¾¾ç®çå°'); |
| | | |
| | | -- è¿ç¨ä¸ |
| | | INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) |
| | | VALUES(4, 'è¿ç¨ä¸', 'RETURNING', 'sys_task_status', '', 'primary', 'N', '0', 'admin', SYSDATE(), '', NULL, 'ä»»å¡è¿ç¨ä¸'); |
| | | |
| | | -- 已宿ï¼ç»æç¶æï¼ |
| | | INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) |
| | | VALUES(5, '已宿', 'COMPLETED', 'sys_task_status', '', 'success', 'N', '0', 'admin', SYSDATE(), '', NULL, 'ä»»å¡å·²å®æ'); |
| | | |
| | | -- 已忶ï¼ç»æç¶æï¼ |
| | | INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) |
| | | VALUES(6, '已忶', 'CANCELLED', 'sys_task_status', '', 'danger', 'N', '0', 'admin', SYSDATE(), '', NULL, 'ä»»å¡å·²åæ¶'); |
| | | |
| | | -- ä»»å¡ä¸ï¼å
¼å®¹æ§æ°æ®ï¼ |
| | | INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) |
| | | VALUES(7, 'ä»»å¡ä¸', 'IN_PROGRESS', 'sys_task_status', '', 'primary', 'N', '0', 'admin', SYSDATE(), '', NULL, '任塿§è¡ä¸ï¼å
¼å®¹æ§æ°æ®ï¼'); |
| | | |
| | | -- =================================================================== |
| | | -- éªè¯æ¥è¯¢ |
| | | -- =================================================================== |
| | | |
| | | -- æ¥çæ´æ°åçä»»å¡ç¶æåå
¸æ°æ® |
| | | SELECT |
| | | dict_sort AS 'æåº', |
| | | dict_label AS 'ç¶æåç§°', |
| | | dict_value AS 'ç¶æå¼', |
| | | list_class AS 'æ ·å¼', |
| | | remark AS '说æ' |
| | | FROM sys_dict_data |
| | | WHERE dict_type = 'sys_task_status' |
| | | ORDER BY dict_sort; |
| | | |
| | | -- =================================================================== |
| | | -- ä»»å¡ç¶ææµç¨è¯´æ |
| | | -- =================================================================== |
| | | -- |
| | | -- æ£å¸¸æµç¨ï¼ |
| | | -- PENDINGï¼å¾
å¤çï¼-> DEPARTINGï¼åºåä¸ï¼-> ARRIVEDï¼å·²å°è¾¾ï¼-> RETURNINGï¼è¿ç¨ä¸ï¼-> COMPLETEDï¼å·²å®æï¼ |
| | | -- |
| | | -- åæ¶æµç¨ï¼ |
| | | -- ä»»ä½ç¶æï¼COMPLETEDé¤å¤ï¼-> CANCELLEDï¼å·²åæ¶ï¼ |
| | | -- |
| | | -- å
¼å®¹æ§æ°æ®ï¼ |
| | | -- IN_PROGRESSï¼ä»»å¡ä¸ï¼å¯ä»¥è½¬æ¢ä¸º COMPLETEDãCANCELLED æ PENDING |
| | | -- |
| | | -- =================================================================== |