From 10354e63eb3298beb9ebcc029dd9f48d8936a272 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期五, 19 十二月 2025 23:15:05 +0800
Subject: [PATCH] feat:优化同步

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskEmergencySyncServiceImpl.java |  174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 174 insertions(+), 0 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskEmergencySyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskEmergencySyncServiceImpl.java
new file mode 100644
index 0000000..91b1425
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TaskEmergencySyncServiceImpl.java
@@ -0,0 +1,174 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.common.utils.LongUtil;
+import com.ruoyi.common.utils.MapValueUtils;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.event.TaskServiceOrderSyncEvent;
+import com.ruoyi.system.mapper.LegacyTransferSyncMapper;
+import com.ruoyi.system.mapper.SysTaskMapper;
+import com.ruoyi.system.service.ISysTaskEmergencyService;
+import com.ruoyi.system.service.ISysTaskService;
+import com.ruoyi.system.service.TaskEmergencySyncService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class TaskEmergencySyncServiceImpl implements TaskEmergencySyncService {
+
+    @Autowired
+    private ApplicationEventPublisher eventPublisher;
+
+
+
+    @Autowired
+    private ISysTaskService sysTaskService;
+
+    @Autowired
+    private SysTaskMapper sysTaskMapper;
+
+    @Autowired
+    private ISysTaskEmergencyService sysTaskEmergencyService;
+
+    @Autowired
+    private LegacySystemConfig legacyConfig;
+
+    @Autowired
+    private LegacyTransferSyncMapper legacyTransferSyncMapper;
+
+    @Autowired
+    private TaskSyncUtilService taskSyncUtilService;
+
+    private Map<String,Object> getLegacyByServiceOrdId(Long serviceOrdId) {
+        List<Map<String, Object>> result = legacyTransferSyncMapper.selectByServiceOrdId(serviceOrdId);
+        if(!CollectionUtils.isEmpty(result)){
+            return result.get(0);
+        }else{
+            return null;
+        }
+    }
+
+    /**
+     * 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
+     */
+    public Long syncEmergencyTaskToLegacy(SysTask task,SysTaskEmergency emergency,Boolean isNew) {
+       Long taskId=task.getTaskId();
+       Long serviceOrderId = emergency.getLegacyServiceOrdId();
+        if (!legacyConfig.isEnabled()) {
+            log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囦换鍔D: {}", taskId);
+            return null;
+        }
+
+        try {
+            // 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
+            emergency.setSyncStatus(1);
+            sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+            // 鏋勫缓璇锋眰鍙傛暟
+            Map<String, Object> params = taskSyncUtilService.buildSyncParams(task, emergency);
+            String updateUrl=legacyConfig.getEmergencyCreateUrl();
+            if(!isNew){
+                updateUrl=legacyConfig.getEmergencyUpdateUrl();
+                params.put("ServiceOrdID",serviceOrderId);
+            }
+            // 鍙戦�丠TTP璇锋眰
+            String response = taskSyncUtilService.sendHttpPost(updateUrl, params);
+
+            // 瑙f瀽鍝嶅簲
+            Long serviceOrdId = taskSyncUtilService.parseResponse(response);
+
+            if (LongUtil.isNotEmpty(serviceOrderId)) {
+                // 鍚屾鎴愬姛锛屾洿鏂拌褰�
+                emergency.setLegacyServiceOrdId(serviceOrdId);
+                emergency.setSyncStatus(2); // 鍚屾鎴愬姛
+                emergency.setSyncTime(new Date());
+                emergency.setSyncErrorMsg(null);
+                Map<String, Object> legacy = getLegacyByServiceOrdId(serviceOrdId);
+                String serviceOrdNo = MapValueUtils.getStringValue(legacy, "ServiceOrdNo");
+                if(serviceOrdNo!=null) {
+                    emergency.setLegacyServiceOrdNo(serviceOrdNo);
+                }
+                String serviceOrdClass = MapValueUtils.getStringValue(legacy, "ServiceOrdClass");
+                if(serviceOrdClass!=null) {
+                    emergency.setLegacyServiceOrdClass(serviceOrdClass);
+                }
+                Date serviceCCTime = MapValueUtils.getDateValue(legacy, "ServiceOrd_CC_Time");
+                if(serviceCCTime!=null) {
+                    emergency.setLegacyServiceNsTime(serviceCCTime);
+                }
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+                // 鏇存柊浠诲姟涓昏〃鍚屾鏍囪
+                task.setLegacySynced(1);
+                sysTaskMapper.updateSysTask(task);
+
+                eventPublisher.publishEvent(new TaskServiceOrderSyncEvent(this, taskId, task.getTaskCode(), serviceOrdId,!isNew));
+//                log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
+                return serviceOrdId;
+            } else {
+                // 鍚屾澶辫触
+                emergency.setSyncStatus(3); // 鍚屾澶辫触
+                emergency.setSyncTime(new Date());
+                emergency.setSyncErrorMsg("鏃х郴缁熻繑鍥炴棤鏁堢殑ServiceOrdID: " + response);
+                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+                log.error("浠诲姟鍚屾澶辫触锛屼换鍔D: {}, 鍝嶅簲: {}", taskId, response);
+                return null;
+            }
+
+        } catch (Exception e) {
+            log.error("鍚屾浠诲姟鍒版棫绯荤粺寮傚父锛屼换鍔D: {}", taskId, e);
+
+            // 鏇存柊鍚屾鐘舵�佷负澶辫触
+            try {
+                 emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+                if (emergency != null) {
+                    emergency.setSyncStatus(3); // 鍚屾澶辫触
+                    emergency.setSyncTime(new Date());
+                    emergency.setSyncErrorMsg("鍚屾寮傚父: " + e.getMessage());
+                    sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+                }
+            } catch (Exception ex) {
+                log.error("鏇存柊鍚屾鐘舵�佸け璐�", ex);
+            }
+
+            return null;
+        }
+    }
+    @Override
+    public Long syncEmergency(Long taskId) {
+        SysTask task=sysTaskService.selectSysTaskByTaskId(taskId);
+        SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+        if(emergency!=null){
+            Long dispatchOrderId=emergency.getLegacyDispatchOrdId();
+            Long serviceOrderId = emergency.getLegacyServiceOrdId();
+            if(LongUtil.isEmpty(dispatchOrderId) && LongUtil.isEmpty(serviceOrderId)){
+                //dispatch涓虹┖涓�
+                return syncNewEmergency(task,emergency);
+            }else if(LongUtil.isNotEmpty(serviceOrderId) && LongUtil.isEmpty(dispatchOrderId)){
+                //serviceId涓嶄负绌猴紝dispatchOrdId涓虹┖
+                return syncUpdateEmergency(task,emergency);
+            }
+        }
+        return 0L;
+    }
+
+
+    private Long syncNewEmergency(SysTask task,SysTaskEmergency emergency) {
+        return this.syncEmergencyTaskToLegacy(task,emergency,true);
+    }
+
+
+    private Long syncUpdateEmergency(SysTask task,SysTaskEmergency emergency) {
+        return this.syncEmergencyTaskToLegacy(task,emergency,false);
+    }
+}

--
Gitblit v1.9.1