From 847a7773ef1a8ad418c6934d35b5f205a97c04d0 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 06 十二月 2025 17:03:24 +0800
Subject: [PATCH] fix:在任务状态更新时,需要更新日志到旧系统
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java | 427 ++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 403 insertions(+), 24 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
index 828459a..4413acb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java
@@ -11,7 +11,15 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.security.cert.X509Certificate;
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.service.*;
+import com.ruoyi.system.task.ITaskAttachmentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,11 +30,6 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.entity.SysDept;
-import com.ruoyi.system.domain.SysTask;
-import com.ruoyi.system.domain.SysTaskEmergency;
-import com.ruoyi.system.domain.SysTaskVehicle;
-import com.ruoyi.system.domain.SysTaskAssignee;
-import com.ruoyi.system.domain.VehicleInfo;
import com.ruoyi.system.domain.vo.TaskCreateVO;
import com.ruoyi.system.mapper.SysTaskMapper;
import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
@@ -35,10 +38,7 @@
import com.ruoyi.system.mapper.VehicleInfoMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysDeptMapper;
-import com.ruoyi.system.service.ILegacySystemSyncService;
import com.ruoyi.system.utils.TaskStatusConverter;
-import com.ruoyi.system.service.IDispatchOrdService;
-import com.ruoyi.system.service.ISysTaskEmergencyService;
/**
* 鏃х郴缁熷悓姝ervice涓氬姟灞傚鐞�
@@ -56,6 +56,9 @@
@Autowired
private SysTaskMapper sysTaskMapper;
+
+ @Autowired
+ private SysTaskEmergencyMapper sysTaskEmergencyMapper;
@Autowired
private SysUserMapper sysUserMapper;
@@ -77,6 +80,17 @@
@Autowired
private ISysTaskEmergencyService sysTaskEmergencyService;
+
+ @Autowired
+ private ITaskAttachmentSyncService taskAttachmentSyncService;
+
+ @Autowired
+ private ISysTaskService sysTaskService;
+
+ @Autowired
+ private ITaskAttachmentService taskAttachmentService;
+
+
/**
* 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
@@ -243,8 +257,7 @@
/**
* 閲嶆柊鍚屾澶辫触鐨勪换鍔�
*/
- @Override
- @Transactional
+ @Override
public boolean retrySyncTask(Long taskId) {
try {
// 閲嶇疆鍚屾鐘舵��
@@ -265,7 +278,27 @@
return false;
}
}
-
+
+
+ /**
+ * 鍚屾浠诲姟闄勪欢鍒版棫绯荤粺
+ * @param taskAttachments
+ * @param serviceOrdId
+ * @param dispatchOrdId
+ * @param oaUserID
+ */
+ public void syncAttachmentToLegacy(List<SysTaskAttachment> taskAttachments, Long serviceOrdId,Long dispatchOrdId,Integer oaUserID) {
+ taskAttachments.forEach((taskAttachment)->{
+ Long imageDataId= taskAttachmentSyncService.syncAttachmentToImageData(taskAttachment,serviceOrdId,dispatchOrdId,oaUserID);
+ if (imageDataId != null && imageDataId > 0) {
+
+ taskAttachment.setSyncedToImageData(1);
+ taskAttachment.setSyncTime(new Date());
+ taskAttachment.setImageDataId(imageDataId);
+ taskAttachmentService.updateAttachment(taskAttachment);
+ }
+ });
+ }
/**
* 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛�
*/
@@ -303,20 +336,90 @@
log.info("璋冨害鍗曞凡鍚屾杩囷紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
return emergency.getLegacyDispatchOrdId();
}
-
+
+ Long serviceOrdId=emergency.getLegacyServiceOrdId();
// 蹇呴』鍏堝悓姝ユ湇鍔″崟
- if (emergency.getLegacyServiceOrdId() == null || emergency.getLegacyServiceOrdId() <= 0) {
+ if (serviceOrdId == null || serviceOrdId <= 0) {
log.warn("鏈嶅姟鍗曟湭鍚屾锛屾棤娉曞悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
return null;
}
+
+ // ====== 鍓嶇疆鏍¢獙锛氱‘淇濅换鍔℃暟鎹畬鏁� ======
+ // 1. 妫�鏌ユ槸鍚﹀凡鍒嗛厤杞﹁締
+ List<SysTaskVehicle> taskVehicles = sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId);
+ if (taskVehicles == null || taskVehicles.isEmpty()) {
+ log.warn("浠诲姟鏈垎閰嶈溅杈嗭紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+ return null;
+ }
+
+ // 2. 妫�鏌ユ槸鍚﹀凡鍒嗛厤鎵ц浜哄憳
+ List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
+ if (taskAssignees == null || taskAssignees.isEmpty()) {
+ log.warn("浠诲姟鏈垎閰嶆墽琛屼汉鍛橈紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+ return null;
+ }
+
+ // 3. 妫�鏌ラ绾︽椂闂存槸鍚︽湁鏁堬紙蹇呴』澶т簬1970骞达級
+ if (task.getPlannedStartTime() == null) {
+ log.warn("浠诲姟鏈缃绾︽椂闂达紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+ return null;
+ }
+
+ // 妫�鏌ラ绾︽椂闂存槸鍚﹀ぇ浜�1970-01-01锛堟椂闂存埑0瀵瑰簲1970-01-01 00:00:00锛�
+ long timestamp1970 = 0L;
+ if (task.getPlannedStartTime().getTime() <= timestamp1970) {
+ log.warn("浠诲姟棰勭害鏃堕棿鏃犳晥锛堝皬浜庣瓑浜�1970骞达級锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}, 棰勭害鏃堕棿: {}",
+ taskId, task.getPlannedStartTime());
+ return null;
+ }
+
+ // 4. 妫�鏌ヨ浆鍑哄尰闄俊鎭�
+ if (StringUtils.isEmpty(emergency.getHospitalOutName())) {
+ log.warn("浠诲姟鏈缃浆鍑哄尰闄紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+ return null;
+ }
+
+ if (StringUtils.isEmpty(emergency.getHospitalOutAddress())) {
+ log.warn("浠诲姟鏈缃浆鍑哄尰闄㈠湴鍧�锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
+ return null;
+ }
+
+ // 5. 妫�鏌ヨ浆鍏ュ尰闄俊鎭�
+ if (StringUtils.isEmpty(emergency.getHospitalInName())) {
+ log.warn("浠诲姟鏈缃浆鍏ュ尰闄紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+ return null;
+ }
+
+ if (StringUtils.isEmpty(emergency.getHospitalInAddress())) {
+ log.warn("浠诲姟鏈缃浆鍏ュ尰闄㈠湴鍧�锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
+ return null;
+ }
+
+ // 6. 妫�鏌ユ偅鑰呭熀鏈俊鎭�
+ if (StringUtils.isEmpty(emergency.getPatientName())) {
+ log.warn("浠诲姟鏈缃偅鑰呭鍚嶏紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+ return null;
+ }
+
+ if (StringUtils.isEmpty(emergency.getPatientPhone())) {
+ log.warn("浠诲姟鏈缃偅鑰呯數璇濓紝璺宠繃璋冨害鍗曞悓姝ワ紝浠诲姟ID: {}", taskId);
+ return null;
+ }
+
+ log.info("浠诲姟鏁版嵁鏍¢獙閫氳繃锛屽紑濮嬪悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
+
// 鏇存柊鍚屾鐘舵�佷负鍚屾涓�
emergency.setDispatchSyncStatus(1);
sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+ SysUser u=sysUserMapper.selectUserById(task.getCreatorId());
+ Integer oaUserID= u.getOaUserId();
// 鏋勫缓璇锋眰鍙傛暟
Map<String, String> params = buildDispatchOrderParams(task, emergency);
+
// 鍙戦�丠TTP璇锋眰
String response = sendHttpPost(legacyConfig.getDispatchCreateUrl(), params);
@@ -330,7 +433,13 @@
emergency.setDispatchSyncTime(new Date());
emergency.setDispatchSyncErrorMsg(null);
sysTaskEmergencyService.updateSysTaskEmergency(emergency);
-
+
+ List<SysTaskAttachment> taskAttachments= sysTaskService.getAttachmentsByTaskId(taskId);
+ if (taskAttachments != null && !taskAttachments.isEmpty()) {
+ //鍚屾闄勪欢
+ this.syncAttachmentToLegacy(taskAttachments,serviceOrdId,dispatchOrdId,oaUserID);
+ }
+
log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
return dispatchOrdId;
} else {
@@ -383,7 +492,7 @@
while (true) {
// 鍒嗛〉鏌ヨ宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曠殑浠诲姟
List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingDispatchSyncTasks(offset, pageSize);
-
+ log.info("鏌ヨ鍒版湭鍚屾璋冨害鍗曠殑浠诲姟鏁伴噺: {}", pendingTasks.size());
if (pendingTasks == null || pendingTasks.isEmpty()) {
log.info("娌℃湁鏇村闇�瑕佸悓姝ヨ皟搴﹀崟鐨勪换鍔★紝offset: {}", offset);
break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
@@ -393,7 +502,9 @@
int pageSuccessCount = 0;
for (SysTaskEmergency emergency : pendingTasks) {
+ log.info("寮�濮嬪悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId());
+
if (dispatchOrdId != null && dispatchOrdId > 0) {
pageSuccessCount++;
}
@@ -477,7 +588,8 @@
params.put("DispatchOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
params.put("ServiceOrdCoName", StringUtils.nvl(emergency.getPatientContact(), ""));
params.put("ServiceOrdCoPhone", StringUtils.nvl(emergency.getPatientPhone(), ""));
-
+ params.put("ServiceOrdPtName", StringUtils.nvl(emergency.getPatientName(), ""));
+ params.put("ServiceOrdTraStreet",StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), "")));
// 鍦板潃淇℃伅
params.put("DispatchOrdTraStreet", StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), "")));
params.put("DispatchOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), "")));
@@ -575,7 +687,9 @@
*/
private void syncTaskAssignees(SysTask task, Map<String, String> params) {
try {
- // 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛�
+ // 鑾峰彇浠诲姟鐨勬墽琛屼汉鍛樹俊鎭垪琛紙鍖呭惈瑙掕壊绫诲瀷锛� //TODO 濡傛灉鏈変袱涓徃鏈哄氨瑕� 璁剧疆銆�Entourage_1鍜孍ntourage_2
+ //涓や釜鎶ゅ+灏辫璁剧疆 Entourage_4鍜孍ntourage_6
+ //涓や釜鍖荤敓瑕佽缃� Entourage_3鍜孍ntourage_5
List<TaskCreateVO.AssigneeInfo> assignees = getTaskAssignees(task.getTaskId());
if (assignees == null || assignees.isEmpty()) {
@@ -583,8 +697,12 @@
// 璁剧疆榛樿绌哄��
params.put("EntourageLeadID", "");
params.put("Entourage_1", ""); // 鍙告満
+ params.put("Entourage_2", ""); //鍙告満
params.put("Entourage_3", ""); // 鍖荤敓
+ params.put("Entourage_5", ""); //鍖荤敓
params.put("Entourage_4", ""); // 鎶ゅ+
+ params.put("Entourage_6", ""); // 鎶ゅ+
+
return;
}
@@ -616,6 +734,11 @@
if ("driver".equals(userType)) {
if (driverOaId.isEmpty()) {
driverOaId = oaUserId;
+ if(params.get("Entourage_1")==null) {
+ params.put("Entourage_1", oaUserId);
+ }else{
+ params.put("Entourage_2", oaUserId);
+ }
// 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
if (i == 0 && leadEntourageId.isEmpty()) {
leadEntourageId = "1"; // 鍙告満瀵瑰簲Entourage_1
@@ -624,6 +747,11 @@
} else if ("doctor".equals(userType)) {
if (doctorOaId.isEmpty()) {
doctorOaId = oaUserId;
+ if(params.get("Entourage_3")==null) {
+ params.put("Entourage_3", oaUserId);
+ }else{
+ params.put("Entourage_5", oaUserId);
+ }
// 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
if (i == 0 && leadEntourageId.isEmpty()) {
leadEntourageId = "3"; // 鍖荤敓瀵瑰簲Entourage_3
@@ -632,6 +760,11 @@
} else if ("nurse".equals(userType)) {
if (nurseOaId.isEmpty()) {
nurseOaId = oaUserId;
+ if(params.get("Entourage_4")==null) {
+ params.put("Entourage_4", oaUserId);
+ }else{
+ params.put("Entourage_6", oaUserId);
+ }
// 濡傛灉鏄涓�涓墽琛屼汉鍛橈紝璁剧疆涓洪闃�
if (i == 0 && leadEntourageId.isEmpty()) {
leadEntourageId = "4"; // 鎶ゅ+瀵瑰簲Entourage_4
@@ -642,9 +775,9 @@
// 璁剧疆鍙傛暟
params.put("EntourageLeadID", leadEntourageId);
- params.put("Entourage_1", driverOaId); // 鍙告満
- params.put("Entourage_3", doctorOaId); // 鍖荤敓
- params.put("Entourage_4", nurseOaId); // 鎶ゅ+
+// params.put("Entourage_1", driverOaId); // 鍙告満
+// params.put("Entourage_3", doctorOaId); // 鍖荤敓
+// params.put("Entourage_4", nurseOaId); // 鎶ゅ+
log.info("浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: {}, 棰嗛槦ID: {}, 鍙告満: {}, 鍖荤敓: {}, 鎶ゅ+: {}",
task.getTaskId(), leadEntourageId, driverOaId, doctorOaId, nurseOaId);
@@ -893,7 +1026,7 @@
// 鍦板潃淇℃伅
params.put("province", ""); // 鍑哄彂鍦扮渷浠�
params.put("city", ""); // 鍑哄彂鍦板煄甯�
- params.put("ServiceOrdTraStreet", StringUtils.nvl(task.getDepartureAddress(), StringUtils.nvl(emergency.getHospitalOutAddress(), "")));
+ params.put("ServiceOrdTraStreet",task.getDepartureAddress()); //娲捐溅鍦板潃
params.put("ServiceOrdTraStreetCoo", ""); // 鍑哄彂鍦板潗鏍�
params.put("ServiceOrdTraEnd", StringUtils.nvl(task.getDestinationAddress(), StringUtils.nvl(emergency.getHospitalInAddress(), "")));
params.put("ServiceOrdTraEndCoo", ""); // 鐩殑鍦板潗鏍�
@@ -938,11 +1071,20 @@
}
/**
- * 鍙戦�丠TTP POST璇锋眰
+ * 鍙戦�丠TTP/HTTPS POST璇锋眰
+ * 鏀寔HTTPS鑷鍚嶈瘉涔�
*/
private String sendHttpPost(String urlString, Map<String, String> params) throws Exception {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+
+ // 濡傛灉鏄疕TTPS璇锋眰锛岄厤缃甋SL淇′换鎵�鏈夎瘉涔�
+ if (conn instanceof HttpsURLConnection) {
+ HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
+ httpsConn.setSSLSocketFactory(createTrustAllSSLContext().getSocketFactory());
+ httpsConn.setHostnameVerifier((hostname, session) -> true); // 淇′换鎵�鏈変富鏈哄悕
+ log.debug("閰嶇疆HTTPS杩炴帴锛屼俊浠绘墍鏈塖SL璇佷功锛孶RL: {}", urlString);
+ }
try {
// 璁剧疆杩炴帴灞炴��
@@ -988,13 +1130,46 @@
}
} else {
log.error("璇锋眰澶辫触锛岃姹俇RL {},鍙傛暟 {}",urlString,postData);
-
- throw new Exception("HTTP璇锋眰澶辫触锛屽搷搴旂爜: " + responseCode);
+ throw new Exception("HTTP/HTTPS璇锋眰澶辫触锛屽搷搴旂爜: " + responseCode);
}
} finally {
conn.disconnect();
}
+ }
+
+ /**
+ * 鍒涘缓淇′换鎵�鏈塖SL璇佷功鐨凷SLContext
+ * 鐢ㄤ簬鏀寔鑷鍚嶈瘉涔︾殑HTTPS璇锋眰
+ *
+ * 娉ㄦ剰锛氭鏂规硶浼氫俊浠绘墍鏈塖SL璇佷功锛屽寘鎷嚜绛惧悕璇佷功
+ * 浠呯敤浜庝笌鏃х郴缁熺殑鍐呴儴閫氫俊锛岀敓浜х幆澧冨缓璁娇鐢ㄦ瑙凜A璇佷功
+ */
+ private SSLContext createTrustAllSSLContext() throws Exception {
+ // 鍒涘缓淇′换鎵�鏈夎瘉涔︾殑TrustManager
+ TrustManager[] trustAllCerts = new TrustManager[] {
+ new X509TrustManager() {
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] certs, String authType) {
+ // 淇′换鎵�鏈夊鎴风璇佷功
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] certs, String authType) {
+ // 淇′换鎵�鏈夋湇鍔″櫒璇佷功
+ }
+ }
+ };
+
+ // 瀹夎淇′换鎵�鏈夎瘉涔︾殑TrustManager
+ SSLContext sslContext = SSLContext.getInstance("TLS");
+ sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+ return sslContext;
}
/**
@@ -1023,4 +1198,208 @@
return null;
}
}
+
+ /**
+ * 閲嶆柊鍚屾杞﹁締鍜屼汉鍛樺彉鏇寸殑浠诲姟鍒版棫绯荤粺
+ * 褰撲换鍔$殑杞﹁締淇℃伅鎴栦汉鍛樹俊鎭彂鐢熷彉鏇存椂锛岄渶瑕佽皟鐢ㄦ棫绯荤粺鎺ュ彛閲嶆柊鍚屾
+ * 浣跨敤 admin_save_25.asp 鎺ュ彛锛岃�屼笉鏄� admin_save_24.gds
+ */
+ @Override
+ @Transactional
+ public boolean resyncDispatchOrderToLegacy(Long taskId) {
+ if (!legacyConfig.isEnabled()) {
+ log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", 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("闈炴�ユ晳杞繍浠诲姟锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", 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;
+ }
+
+ Long serviceOrdId = emergency.getLegacyServiceOrdId();
+ if (serviceOrdId == null || serviceOrdId <= 0) {
+ log.warn("鏈嶅姟鍗曟湭鍚屾锛屾棤娉曢噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", taskId);
+ return false;
+ }
+
+ // ====== 鍓嶇疆鏍¢獙锛氱‘淇濅换鍔℃暟鎹畬鏁� ======
+
+ // 1. 妫�鏌ユ槸鍚﹀凡鍒嗛厤杞﹁締
+ List<SysTaskVehicle> taskVehicles = sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId);
+ if (taskVehicles == null || taskVehicles.isEmpty()) {
+ log.warn("浠诲姟鏈垎閰嶈溅杈嗭紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
+ return false;
+ }
+
+ // 2. 妫�鏌ユ槸鍚﹀凡鍒嗛厤鎵ц浜哄憳
+ List<SysTaskAssignee> taskAssignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
+ if (taskAssignees == null || taskAssignees.isEmpty()) {
+ log.warn("浠诲姟鏈垎閰嶆墽琛屼汉鍛橈紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
+ return false;
+ }
+
+ // 3. 妫�鏌ラ绾︽椂闂存槸鍚︽湁鏁�
+ if (task.getPlannedStartTime() == null || task.getPlannedStartTime().getTime() <= 0L) {
+ log.warn("浠诲姟棰勭害鏃堕棿鏃犳晥锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
+ return false;
+ }
+
+ // 4. 妫�鏌ヨ浆鍑哄尰闄俊鎭�
+ if (StringUtils.isEmpty(emergency.getHospitalOutName()) || StringUtils.isEmpty(emergency.getHospitalOutAddress())) {
+ log.warn("浠诲姟杞嚭鍖婚櫌淇℃伅涓嶅畬鏁达紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
+ return false;
+ }
+
+ // 5. 妫�鏌ヨ浆鍏ュ尰闄俊鎭�
+ if (StringUtils.isEmpty(emergency.getHospitalInName()) || StringUtils.isEmpty(emergency.getHospitalInAddress())) {
+ log.warn("浠诲姟杞叆鍖婚櫌淇℃伅涓嶅畬鏁达紝璺宠繃璋冨害鍗曢噸鏂板悓姝ワ紝浠诲姟ID: {}", taskId);
+ return false;
+ }
+
+ // 6. 妫�鏌ユ偅鑰呭熀鏈俊鎭�
+ if (StringUtils.isEmpty(emergency.getPatientName()) || StringUtils.isEmpty(emergency.getPatientPhone())) {
+ log.warn("浠诲姟鎮h�呬俊鎭笉瀹屾暣锛岃烦杩囪皟搴﹀崟閲嶆柊鍚屾锛屼换鍔D: {}", taskId);
+ return false;
+ }
+
+ log.info("浠诲姟鏁版嵁鏍¢獙閫氳繃锛屽紑濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+
+ // 鏋勫缓璇锋眰鍙傛暟锛堜娇鐢ㄧ浉鍚岀殑鍙傛暟鏋勫缓鏂规硶锛�
+ Map<String, String> params = buildDispatchOrderParams(task, emergency);
+ params.put("DispatchOrdID", emergency.getLegacyDispatchOrdId().toString());
+ params.put("ServiceOrdID", emergency.getLegacyServiceOrdId().toString());
+ params.put("DispatchOrdState", "3");
+ log.info("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熻姹傚弬鏁�: {}", params);
+ // 鍙戦�丠TTP璇锋眰鍒版棫绯荤粺锛堜娇鐢╝dmin_save_25.asp鎺ュ彛锛�
+ String response = sendHttpPost(legacyConfig.getDispatchUpdateUrl(), params);
+ log.info("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熷搷搴�: ServiceOrdID:{},DispatchOrdId:{},Result: {}",emergency.getLegacyServiceOrdId(),emergency.getLegacyDispatchOrdId(), response);
+ // 瑙f瀽鍝嶅簲
+// Long dispatchOrdId = parseResponse(response);
+
+ if (response != null && response.equals("OK")) {
+ // 閲嶆柊鍚屾鎴愬姛锛屾竻闄ら噸鏂板悓姝ユ爣璁�
+ emergency.setNeedResync(0);
+ emergency.setDispatchSyncTime(new Date());
+ emergency.setDispatchSyncErrorMsg(null);
+ sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+ log.info("璋冨害鍗曢噸鏂板悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+ return true;
+ } else {
+ // 閲嶆柊鍚屾澶辫触
+ emergency.setDispatchSyncErrorMsg("閲嶆柊鍚屾澶辫触锛�" + response);
+ sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+
+ log.error("璋冨害鍗曢噸鏂板悓姝ュけ璐ワ紝浠诲姟ID: {}, 鍝嶅簲: {}", taskId, response);
+ return false;
+ }
+
+ } catch (Exception e) {
+ log.error("閲嶆柊鍚屾璋冨害鍗曞埌鏃х郴缁熷紓甯革紝浠诲姟ID: {}", taskId, e);
+
+ // 鏇存柊鍚屾鐘舵�佷负澶辫触
+ try {
+ SysTaskEmergency emergency = sysTaskEmergencyService.selectSysTaskEmergencyByTaskId(taskId);
+ if (emergency != null) {
+ emergency.setDispatchSyncErrorMsg("閲嶆柊鍚屾寮傚父: " + e.getMessage());
+ sysTaskEmergencyService.updateSysTaskEmergency(emergency);
+ }
+ } catch (Exception ex) {
+ log.error("鏇存柊璋冨害鍗曞悓姝ョ姸鎬佸け璐�", ex);
+ }
+
+ return false;
+ }
+ }
+
+ /**
+ * 鎵归噺閲嶆柊鍚屾闇�瑕佹洿鏂扮殑璋冨害鍗�
+ */
+ @Override
+ public int batchResyncPendingDispatchOrders() {
+ if (!legacyConfig.isEnabled()) {
+ log.info("鏃х郴缁熷悓姝ュ凡绂佺敤");
+ return 0;
+ }
+
+ try {
+ int totalSuccessCount = 0;
+ int pageSize = 100; // 姣忛〉100鏉�
+ int offset = 0;
+
+ while (true) {
+ // 鍒嗛〉鏌ヨ闇�瑕侀噸鏂板悓姝ョ殑浠诲姟
+ List<SysTaskEmergency> needResyncTasks = sysTaskEmergencyMapper.selectNeedResyncTasks(offset, pageSize);
+
+ log.info("鏌ヨ鍒伴渶瑕侀噸鏂板悓姝ョ殑浠诲姟鏁伴噺: {}", needResyncTasks.size());
+ if (needResyncTasks == null || needResyncTasks.isEmpty()) {
+ log.info("娌℃湁鏇村闇�瑕侀噸鏂板悓姝ョ殑浠诲姟锛宱ffset: {}", offset);
+ break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
+ }
+
+ log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, needResyncTasks.size());
+
+ int pageSuccessCount = 0;
+ for (SysTaskEmergency emergency : needResyncTasks) {
+ log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
+ boolean success = resyncDispatchOrderToLegacy(emergency.getTaskId());
+
+ if (success) {
+ pageSuccessCount++;
+ }
+
+ // 閬垮厤杩囦簬棰戠箒鐨勮姹�
+ try {
+ Thread.sleep(1000); // 姣忎釜璇锋眰闂撮殧1绉�
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ log.warn("閲嶆柊鍚屾璋冨害鍗曡涓柇");
+ return totalSuccessCount + pageSuccessCount;
+ }
+ }
+
+ totalSuccessCount += pageSuccessCount;
+ log.info("璋冨害鍗曢噸鏂板悓姝ョ {} 椤靛畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
+ (offset / pageSize) + 1, needResyncTasks.size(), pageSuccessCount);
+
+ // 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
+ if (needResyncTasks.size() < pageSize) {
+ log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曢噸鏂板悓姝ョ粨鏉�");
+ break;
+ }
+
+ offset += pageSize; // 涓嬩竴椤�
+ }
+
+ log.info("鎵归噺閲嶆柊鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+ return totalSuccessCount;
+
+ } catch (Exception e) {
+ log.error("鎵归噺閲嶆柊鍚屾璋冨害鍗曞紓甯�", e);
+ return 0;
+ }
+ }
}
--
Gitblit v1.9.1