wlzboy
4 小时以前 5f2ee03958a1a16dc27195c76ea7cffb422c95d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
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("旧系统同步已禁用,跳过任务ID: {}", 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);
            }
            // 发送HTTP请求
            String response = taskSyncUtilService.sendHttpPost(updateUrl, params);
 
            // 解析响应
            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("任务同步成功,任务ID: {}, ServiceOrdID: {}", taskId, serviceOrdId);
                return serviceOrdId;
            } else {
                // 同步失败
                emergency.setSyncStatus(3); // 同步失败
                emergency.setSyncTime(new Date());
                emergency.setSyncErrorMsg("旧系统返回无效的ServiceOrdID: " + response);
                sysTaskEmergencyService.updateSysTaskEmergency(emergency);
 
                log.error("任务同步失败,任务ID: {}, 响应: {}", taskId, response);
                return null;
            }
 
        } catch (Exception e) {
            log.error("同步任务到旧系统异常,任务ID: {}", 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);
    }
}