From 8cb5d3440208a3be3e772e65f1bd0ec63031ba62 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期三, 17 十二月 2025 08:37:14 +0800
Subject: [PATCH] feat: 增加服务单派发通知
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java | 402 ++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 340 insertions(+), 62 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 10b6db7..d871794 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
@@ -16,29 +16,29 @@
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;
-
+import com.ruoyi.common.utils.MapValueUtils;
import com.ruoyi.system.domain.*;
+import com.ruoyi.system.event.TaskDispatchSyncEvent;
+import com.ruoyi.system.event.TaskServiceOrderSyncEvent;
+import com.ruoyi.system.mapper.*;
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;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.common.config.LegacySystemConfig;
+import com.ruoyi.common.utils.MapValueUtils;
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.vo.TaskCreateVO;
-import com.ruoyi.system.mapper.SysTaskMapper;
-import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
-import com.ruoyi.system.mapper.SysTaskVehicleMapper;
-import com.ruoyi.system.mapper.SysTaskAssigneeMapper;
-import com.ruoyi.system.mapper.VehicleInfoMapper;
-import com.ruoyi.system.mapper.SysUserMapper;
-import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.utils.TaskStatusConverter;
+import org.springframework.util.CollectionUtils;
/**
* 鏃х郴缁熷悓姝ervice涓氬姟灞傚鐞�
@@ -89,12 +89,37 @@
@Autowired
private ITaskAttachmentService taskAttachmentService;
+
+
+ @Autowired
+ private ApplicationEventPublisher eventPublisher;
+ @Autowired
+ private LegacyTransferSyncMapper legacyTransferSyncMapper;
+
+
+ public Map<String,Object> getLegacyDispatchByDispatchId(Long dispatchId) {
+ List<Map<String, Object>> result = legacyTransferSyncMapper.selectByDispatchId(dispatchId);
+ if(!CollectionUtils.isEmpty(result)){
+ return result.get(0);
+ }else{
+ return null;
+ }
+ }
+
+
+ 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;
+ }
+ }
/**
* 鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
*/
@Override
- @Transactional
public Long syncEmergencyTaskToLegacy(Long taskId) {
if (!legacyConfig.isEnabled()) {
log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囦换鍔D: {}", taskId);
@@ -124,7 +149,7 @@
// 濡傛灉宸茬粡鍚屾杩囷紝涓嶅啀閲嶅鍚屾
if (emergency.getLegacyServiceOrdId() != null && emergency.getLegacyServiceOrdId() > 0) {
- log.info("浠诲姟宸插悓姝ヨ繃锛屼换鍔D: {}, ServiceOrdID: {}", taskId, emergency.getLegacyServiceOrdId());
+// log.info("浠诲姟宸插悓姝ヨ繃锛屼换鍔D: {}, ServiceOrdID: {}", taskId, emergency.getLegacyServiceOrdId());
return emergency.getLegacyServiceOrdId();
}
@@ -147,13 +172,27 @@
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);
-
- log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
+
+ eventPublisher.publishEvent(new TaskServiceOrderSyncEvent(this, taskId, task.getTaskCode(), serviceOrdId));
+// log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
return serviceOrdId;
} else {
// 鍚屾澶辫触
@@ -185,7 +224,13 @@
return null;
}
}
-
+
+ //鍦ㄨ繖閲岀洃鍚淳鍙戠殑浜嬩欢
+ @EventListener
+ public void handleTaskServiceOrderSyncEvent(TaskServiceOrderSyncEvent event) {
+// log.info("鏀跺埌浠诲姟鏈嶅姟鍗曞悓姝ヤ簨浠讹紝浠诲姟ID锛歿}锛屼换鍔$紪鍙凤細{}锛屾湇鍔″崟ID锛歿}", event.getTaskId(), event.getTaskCode(), event.getServiceOrderId());
+ syncDispatchOrderToLegacy(event.getTaskId());
+ }
/**
* 鎵归噺鍚屾鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟
* 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
@@ -211,7 +256,7 @@
break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
}
- log.info("寮�濮嬪悓姝ョ {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
+// log.info("寮�濮嬪悓姝ョ {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
int pageSuccessCount = 0;
for (SysTaskEmergency emergency : pendingTasks) {
@@ -231,19 +276,19 @@
}
totalSuccessCount += pageSuccessCount;
- log.info("绗� {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
- (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
+// log.info("绗� {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
+// (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
// 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
if (pendingTasks.size() < pageSize) {
- log.info("宸插埌杈炬渶鍚庝竴椤碉紝鍚屾缁撴潫");
+// log.info("宸插埌杈炬渶鍚庝竴椤碉紝鍚屾缁撴潫");
break;
}
offset += pageSize; // 涓嬩竴椤�
}
- log.info("鎵归噺鍚屾瀹屾垚锛屾�绘垚鍔熸暟: {}", totalSuccessCount);
+// log.info("鎵归噺鍚屾瀹屾垚锛屾�绘垚鍔熸暟: {}", totalSuccessCount);
return totalSuccessCount;
} catch (Exception e) {
@@ -301,7 +346,6 @@
* 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛�
*/
@Override
- @Transactional
public Long syncDispatchOrderToLegacy(Long taskId) {
if (!legacyConfig.isEnabled()) {
log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
@@ -331,7 +375,7 @@
// 濡傛灉宸茬粡鍚屾杩囷紝涓嶅啀閲嶅鍚屾
if (emergency.getLegacyDispatchOrdId() != null && emergency.getLegacyDispatchOrdId() > 0) {
- log.info("璋冨害鍗曞凡鍚屾杩囷紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+// log.info("璋冨害鍗曞凡鍚屾杩囷紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
return emergency.getLegacyDispatchOrdId();
}
@@ -342,8 +386,70 @@
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);
@@ -368,15 +474,20 @@
emergency.setDispatchSyncStatus(2); // 鍚屾鎴愬姛
emergency.setDispatchSyncTime(new Date());
emergency.setDispatchSyncErrorMsg(null);
+ //鏇存柊璋冨害鍗曚俊鎭紑鍒版柊绯荤粺
+ Map<String,Object> dispatchInfo = this.getLegacyDispatchByDispatchId(dispatchOrdId);
+ if (dispatchInfo != null) {
+ emergency.setLegacyDispatchNsTime(MapValueUtils.getDateValue(dispatchInfo, "DispatchOrd_NS_Time")); // 鍚屾鎴愬姛
+ emergency.setLegacyDispatchOrdClass(MapValueUtils.getStringValue(dispatchInfo, "DispatchOrdClass")); // 鍚屾鎴愬姛
+ emergency.setLegacyDispatchOrdNo(MapValueUtils.getStringValue(dispatchInfo, "DispatchOrdNo")); // 鍚屾鎴愬姛
+ emergency.setLegacyServiceNsTime(MapValueUtils.getDateValue(dispatchInfo, "ServiceOrd_CC_Time")); // 鍚屾鎴愬姛
+ emergency.setLegacyServiceOrdClass(MapValueUtils.getStringValue(dispatchInfo, "ServiceOrdClass")); // 鍚屾鎴愬姛
+ }
sysTaskEmergencyService.updateSysTaskEmergency(emergency);
- List<SysTaskAttachment> taskAttachments= sysTaskService.getAttachmentsByTaskId(taskId);
- if (taskAttachments != null && !taskAttachments.isEmpty()) {
- //鍚屾闄勪欢
- this.syncAttachmentToLegacy(taskAttachments,serviceOrdId,dispatchOrdId,oaUserID);
- }
+ eventPublisher.publishEvent(new TaskDispatchSyncEvent(this, taskId, task.getTaskCode(),serviceOrdId, dispatchOrdId, oaUserID));
- log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
+// log.info("璋冨害鍗曞悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
return dispatchOrdId;
} else {
// 鍚屾澶辫触
@@ -408,7 +519,19 @@
return null;
}
}
-
+
+ @EventListener
+ public void handleTaskDispatchSyncEvent(TaskDispatchSyncEvent event) {
+ Long taskId = event.getTaskId();
+ Long dispatchOrdId = event.getDispatchOrderId();
+ Long serviceOrdId = event.getServiceOrderId();
+ Integer oaUserID = event.getOaUserId();
+ List<SysTaskAttachment> taskAttachments= sysTaskService.getAttachmentsByTaskId(taskId);
+ if (taskAttachments != null && !taskAttachments.isEmpty()) {
+ //鍚屾闄勪欢
+ this.syncAttachmentToLegacy(taskAttachments,serviceOrdId,dispatchOrdId,oaUserID);
+ }
+ }
/**
* 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
* 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
@@ -428,17 +551,17 @@
while (true) {
// 鍒嗛〉鏌ヨ宸插悓姝ユ湇鍔″崟浣嗘湭鍚屾璋冨害鍗曠殑浠诲姟
List<SysTaskEmergency> pendingTasks = sysTaskEmergencyService.selectPendingDispatchSyncTasks(offset, pageSize);
- log.info("鏌ヨ鍒版湭鍚屾璋冨害鍗曠殑浠诲姟鏁伴噺: {}", pendingTasks.size());
+// log.info("鏌ヨ鍒版湭鍚屾璋冨害鍗曠殑浠诲姟鏁伴噺: {}", pendingTasks.size());
if (pendingTasks == null || pendingTasks.isEmpty()) {
log.info("娌℃湁鏇村闇�瑕佸悓姝ヨ皟搴﹀崟鐨勪换鍔★紝offset: {}", offset);
break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
}
- log.info("寮�濮嬪悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
+// log.info("寮�濮嬪悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, pendingTasks.size());
int pageSuccessCount = 0;
for (SysTaskEmergency emergency : pendingTasks) {
- log.info("寮�濮嬪悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
+// log.info("寮�濮嬪悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
Long dispatchOrdId = syncDispatchOrderToLegacy(emergency.getTaskId());
if (dispatchOrdId != null && dispatchOrdId > 0) {
@@ -456,19 +579,19 @@
}
totalSuccessCount += pageSuccessCount;
- log.info("璋冨害鍗曠 {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
- (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
+// log.info("璋冨害鍗曠 {} 椤靛悓姝ュ畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
+// (offset / pageSize) + 1, pendingTasks.size(), pageSuccessCount);
// 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
if (pendingTasks.size() < pageSize) {
- log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曞悓姝ョ粨鏉�");
+// log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曞悓姝ョ粨鏉�");
break;
}
offset += pageSize; // 涓嬩竴椤�
}
- log.info("鎵归噺鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+// log.info("鎵归噺鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
return totalSuccessCount;
} catch (Exception e) {
@@ -494,7 +617,7 @@
SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
if (dept != null && StringUtils.isNotEmpty(dept.getDispatchOrderClass())) {
dispatchOrdClass = dept.getDispatchOrderClass();
- log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 璋冨害鍗曠紪鐮�: {}", task.getDeptId(), dispatchOrdClass);
+// log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑璋冨害鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 璋冨害鍗曠紪鐮�: {}", task.getDeptId(), dispatchOrdClass);
}
} catch (Exception e) {
log.error("鏌ヨ浠诲姟鎵�灞為儴闂ㄤ俊鎭紓甯革紝閮ㄩ棬ID: {}", task.getDeptId(), e);
@@ -525,7 +648,7 @@
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(), "")));
@@ -534,8 +657,20 @@
// 鎿嶄綔鍛戒护
params.put("DispatchOrd_Check", "0"); // 3=鐩存帴寮哄埗瀹屾垚
- // 缁╂晥鍜岃垂鐢�
- params.put("DispatchOrdPerfomance", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0");
+ // 缁╂晥鍜岃垂鐢細纭繚鏁板�煎瓧娈典笉涓簄ull
+ String transferPrice = "0";
+ if (emergency.getTransferPrice() != null) {
+ try {
+ transferPrice = emergency.getTransferPrice().toString();
+ if (transferPrice.contains(".")) {
+ transferPrice = new java.math.BigDecimal(transferPrice).stripTrailingZeros().toPlainString();
+ }
+ } catch (Exception e) {
+ log.warn("杞崲杞繍浠锋牸澶辫触锛屼换鍔D: {}, 浣跨敤榛樿鍊�0", task.getTaskId(), e);
+ transferPrice = "0";
+ }
+ }
+ params.put("DispatchOrdPerfomance", transferPrice);
params.put("StretcherMoney", "0"); // 鎶媴鏋惰垂
params.put("AddMoneyType", ""); // 闄勫姞椤圭洰
params.put("AddMoney", "0"); // 闄勫姞椤圭洰璐圭敤
@@ -568,7 +703,8 @@
params.put("ServiceOrdPtDoctorPhone", ""); // 鎮h�呭尰鐢熺數璇�
params.put("TransferModeID", ""); // 杞繍鏂瑰紡
params.put("ServiceOrdVIP", "0"); // VIP瀹㈡埛
- params.put("ServiceOrdTraTxnPrice", emergency.getTransferPrice() != null ? emergency.getTransferPrice().toString() : "0"); // 鎴愪氦浠�
+ // 浠锋牸瀛楁澶嶇敤锛岀‘淇濅竴鑷存��
+ params.put("ServiceOrdTraTxnPrice", transferPrice); // 鎴愪氦浠�
params.put("ServiceOrdTraPrePayment", "0"); // 闇�棰勪粯娆�
params.put("SettlementPrice", "0"); // 缁撶畻浠�
params.put("ServiceOrdTraPriceReason", ""); // 宸环鍘熷洜
@@ -585,7 +721,21 @@
params.put("ServiceOrdEstimatedOrderDate", ""); // 棰勮娲惧崟鏃堕棿
params.put("ServiceOrdEstimatedOrderDateOld", ""); // 鍘熼璁℃淳鍗曟椂闂�
params.put("ServiceOrdViaDistance", "0"); // 涓�旇窛绂�
- params.put("ServiceOrdTraDistance", emergency.getTransferDistance() != null ? emergency.getTransferDistance().toString() : "0"); // 璺濈
+ // 璺濈瀛楁锛氱‘淇濅笉涓虹┖锛岄伩鍏嶆棫绯荤粺鎺ュ彛鎶ラ敊
+ String transferDistance = "0";
+ if (emergency.getTransferDistance() != null) {
+ try {
+ transferDistance = emergency.getTransferDistance().toString();
+ // 鍘婚櫎鍙兘鐨勫皬鏁扮偣鍚庡浣欑殑0
+ if (transferDistance.contains(".")) {
+ transferDistance = new java.math.BigDecimal(transferDistance).stripTrailingZeros().toPlainString();
+ }
+ } catch (Exception e) {
+ log.warn("杞崲杞繍璺濈澶辫触锛屼换鍔D: {}, 浣跨敤榛樿鍊�0", task.getTaskId(), e);
+ transferDistance = "0";
+ }
+ }
+ params.put("ServiceOrdTraDistance", transferDistance);
params.put("OrderLevel", "0"); // 鏌ョ湅绛夌骇
params.put("ServiceOrdDepartureType", "1"); // 棰勭害绫诲瀷
params.put("ConditionLevel", "0"); // 鐥呴噸绾у埆
@@ -715,8 +865,8 @@
// params.put("Entourage_3", doctorOaId); // 鍖荤敓
// params.put("Entourage_4", nurseOaId); // 鎶ゅ+
- log.info("浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: {}, 棰嗛槦ID: {}, 鍙告満: {}, 鍖荤敓: {}, 鎶ゅ+: {}",
- task.getTaskId(), leadEntourageId, driverOaId, doctorOaId, nurseOaId);
+// log.info("浠诲姟鎵ц浜哄憳鍚屾鎴愬姛锛屼换鍔D: {}, 棰嗛槦ID: {}, 鍙告満: {}, 鍖荤敓: {}, 鎶ゅ+: {}",
+// task.getTaskId(), leadEntourageId, driverOaId, doctorOaId, nurseOaId);
} catch (Exception e) {
log.error("鍚屾浠诲姟鎵ц浜哄憳寮傚父锛屼换鍔D: {}", task.getTaskId(), e);
@@ -756,7 +906,7 @@
}
// 濡傛灉鏁版嵁搴撲腑娌℃湁鎵ц浜哄憳淇℃伅锛屽皾璇曚粠浠诲姟鐨勪富瑕佹墽琛屼汉鑾峰彇
- log.warn("鏁版嵁搴撲腑鏈壘鍒版墽琛屼汉鍛樹俊鎭紝灏濊瘯浠庝换鍔′富瑕佹墽琛屼汉鑾峰彇锛屼换鍔D: {}", taskId);
+// log.warn("鏁版嵁搴撲腑鏈壘鍒版墽琛屼汉鍛樹俊鎭紝灏濊瘯浠庝换鍔′富瑕佹墽琛屼汉鑾峰彇锛屼换鍔D: {}", taskId);
SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
if (task != null && task.getAssigneeId() != null) {
SysUser user = sysUserMapper.selectUserById(task.getAssigneeId());
@@ -883,8 +1033,8 @@
if (dept != null && StringUtils.isNotEmpty(dept.getServiceOrderClass())) {
// 浣跨敤閮ㄩ棬鐨勬湇鍔″崟缂栫爜浣滀负ServiceOrdClass
serviceOrdClass = dept.getServiceOrderClass();
- log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 閮ㄩ棬鍚嶇О: {}, 鏈嶅姟鍗曠紪鐮�: {}",
- task.getDeptId(), dept.getDeptName(), serviceOrdClass);
+// log.info("鑾峰彇浠诲姟鎵�灞為儴闂ㄧ殑鏈嶅姟鍗曠紪鐮佹垚鍔燂紝閮ㄩ棬ID: {}, 閮ㄩ棬鍚嶇О: {}, 鏈嶅姟鍗曠紪鐮�: {}",
+// task.getDeptId(), dept.getDeptName(), serviceOrdClass);
} else {
log.warn("浠诲姟鎵�灞為儴闂ㄦ湭閰嶇疆鏈嶅姟鍗曠紪鐮侊紝閮ㄩ棬ID: {}銆侀儴闂ㄥ悕绉�: {}锛屼娇鐢ㄩ粯璁ゅ��",
task.getDeptId(), dept != null ? dept.getDeptName() : "null");
@@ -900,7 +1050,7 @@
String serviceOrdAreaType = "1"; // 榛樿鍊�
if (StringUtils.isNotEmpty(emergency.getDocumentTypeId())) {
serviceOrdAreaType = emergency.getDocumentTypeId();
- log.info("鑾峰彇鍗曟嵁绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 鍗曟嵁绫诲瀷ID: {}", task.getTaskId(), serviceOrdAreaType);
+// log.info("鑾峰彇鍗曟嵁绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 鍗曟嵁绫诲瀷ID: {}", task.getTaskId(), serviceOrdAreaType);
} else {
log.warn("浠诲姟鏈厤缃崟鎹被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", task.getTaskId());
}
@@ -913,7 +1063,7 @@
String serviceOrdType = "1"; // 榛樿鍊�
if (StringUtils.isNotEmpty(emergency.getTaskTypeId())) {
serviceOrdType = emergency.getTaskTypeId();
- log.info("鑾峰彇浠诲姟绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 浠诲姟绫诲瀷ID: {}", taskId, serviceOrdType);
+// log.info("鑾峰彇浠诲姟绫诲瀷ID鎴愬姛锛屼换鍔D: {}, 浠诲姟绫诲瀷ID: {}", taskId, serviceOrdType);
} else {
log.warn("浠诲姟鏈厤缃换鍔$被鍨婭D锛屼换鍔D: {}锛屼娇鐢ㄩ粯璁ゅ��", taskId);
}
@@ -1019,7 +1169,7 @@
HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
httpsConn.setSSLSocketFactory(createTrustAllSSLContext().getSocketFactory());
httpsConn.setHostnameVerifier((hostname, session) -> true); // 淇′换鎵�鏈変富鏈哄悕
- log.debug("閰嶇疆HTTPS杩炴帴锛屼俊浠绘墍鏈塖SL璇佷功锛孶RL: {}", urlString);
+// log.debug("閰嶇疆HTTPS杩炴帴锛屼俊浠绘墍鏈塖SL璇佷功锛孶RL: {}", urlString);
}
try {
@@ -1135,6 +1285,93 @@
}
}
+ // 鍒犻櫎涓嬮潰鐨勯噸澶嶆柟娉曪紝鍥犱负鎴戜滑灏嗕娇鐢∕apValueUtils宸ュ叿绫讳腑鐨勬柟娉�
+ /*
+ private String getStringValue(Map<String, Object> map, String key) {
+ Object value = map.get(key);
+ return value != null ? value.toString() : null;
+ }
+
+ private BigDecimal getBigDecimalValue(Map<String, Object> map, String key) {
+ Object value = map.get(key);
+ if (value == null) {
+ return null;
+ }
+ if (value instanceof BigDecimal) {
+ return (BigDecimal) value;
+ }
+ try {
+ return new BigDecimal(value.toString());
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+
+ private Long getLongValue(Map<String, Object> map, String key) {
+ Object value = map.get(key);
+ if (value == null) {
+ return null;
+ }
+ if (value instanceof Long) {
+ return (Long) value;
+ }
+ try {
+ return Long.valueOf(value.toString());
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+
+ private Integer getIntegerValue(Map<String, Object> map, String key) {
+ Object value = map.get(key);
+ if (value == null) {
+ return null;
+ }
+ if (value instanceof Integer) {
+ return (Integer) value;
+ }
+ try {
+ return Integer.valueOf(value.toString());
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+
+ private Date getDateValue(Map<String, Object> map, String key) {
+ Object value = map.get(key);
+ if (value == null) {
+ return null;
+ }
+ if (value instanceof Date) {
+ return (Date) value;
+ }
+ // 濡傛灉鏄瓧绗︿覆锛屽皾璇曡В鏋�
+ if (value instanceof String) {
+ try {
+ return DateUtils.parseDate(value.toString());
+ } catch (Exception e) {
+ return null;
+ }
+ }
+ return null;
+ }
+
+ private boolean isValidDateFormat(String dateStr, String format) {
+ if (StringUtils.isEmpty(dateStr)) {
+ return false;
+ }
+
+ try {
+ SimpleDateFormat sdf = new SimpleDateFormat(format);
+ sdf.setLenient(false);
+ sdf.parse(dateStr);
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+ */
+
/**
* 閲嶆柊鍚屾杞﹁締鍜屼汉鍛樺彉鏇寸殑浠诲姟鍒版棫绯荤粺
* 褰撲换鍔$殑杞﹁締淇℃伅鎴栦汉鍛樹俊鎭彂鐢熷彉鏇存椂锛岄渶瑕佽皟鐢ㄦ棫绯荤粺鎺ュ彛閲嶆柊鍚屾
@@ -1181,27 +1418,68 @@
return false;
}
- log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
+ // ====== 鍓嶇疆鏍¢獙锛氱‘淇濅换鍔℃暟鎹畬鏁� ======
+
+ // 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);
+// Long dispatchOrdId = parseResponse(response);
- if (dispatchOrdId != null && dispatchOrdId > 0) {
+ if (response != null && response.equals("OK")) {
// 閲嶆柊鍚屾鎴愬姛锛屾竻闄ら噸鏂板悓姝ユ爣璁�
emergency.setNeedResync(0);
emergency.setDispatchSyncTime(new Date());
emergency.setDispatchSyncErrorMsg(null);
sysTaskEmergencyService.updateSysTaskEmergency(emergency);
- log.info("璋冨害鍗曢噸鏂板悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, dispatchOrdId);
+// log.info("璋冨害鍗曢噸鏂板悓姝ユ垚鍔燂紝浠诲姟ID: {}, DispatchOrdID: {}", taskId, emergency.getLegacyDispatchOrdId());
return true;
} else {
// 閲嶆柊鍚屾澶辫触
@@ -1249,17 +1527,17 @@
// 鍒嗛〉鏌ヨ闇�瑕侀噸鏂板悓姝ョ殑浠诲姟
List<SysTaskEmergency> needResyncTasks = sysTaskEmergencyMapper.selectNeedResyncTasks(offset, pageSize);
- log.info("鏌ヨ鍒伴渶瑕侀噸鏂板悓姝ョ殑浠诲姟鏁伴噺: {}", needResyncTasks.size());
+// log.info("鏌ヨ鍒伴渶瑕侀噸鏂板悓姝ョ殑浠诲姟鏁伴噺: {}", needResyncTasks.size());
if (needResyncTasks == null || needResyncTasks.isEmpty()) {
log.info("娌℃湁鏇村闇�瑕侀噸鏂板悓姝ョ殑浠诲姟锛宱ffset: {}", offset);
break; // 娌℃湁鏇村鏁版嵁锛岄��鍑哄惊鐜�
}
- log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, needResyncTasks.size());
+// log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟绗� {} 椤碉紝浠诲姟鏁伴噺: {}", (offset / pageSize) + 1, needResyncTasks.size());
int pageSuccessCount = 0;
for (SysTaskEmergency emergency : needResyncTasks) {
- log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
+// log.info("寮�濮嬮噸鏂板悓姝ヨ皟搴﹀崟锛屼换鍔D: {}", emergency.getTaskId());
boolean success = resyncDispatchOrderToLegacy(emergency.getTaskId());
if (success) {
@@ -1277,19 +1555,19 @@
}
totalSuccessCount += pageSuccessCount;
- log.info("璋冨害鍗曢噸鏂板悓姝ョ {} 椤靛畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
- (offset / pageSize) + 1, needResyncTasks.size(), pageSuccessCount);
+// log.info("璋冨害鍗曢噸鏂板悓姝ョ {} 椤靛畬鎴愶紝鎬绘暟: {}, 鎴愬姛: {}",
+// (offset / pageSize) + 1, needResyncTasks.size(), pageSuccessCount);
// 濡傛灉鏈〉鏁版嵁灏戜簬姣忛〉澶у皬锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤�
if (needResyncTasks.size() < pageSize) {
- log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曢噸鏂板悓姝ョ粨鏉�");
+// log.info("宸插埌杈炬渶鍚庝竴椤碉紝璋冨害鍗曢噸鏂板悓姝ョ粨鏉�");
break;
}
offset += pageSize; // 涓嬩竴椤�
}
- log.info("鎵归噺閲嶆柊鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
+// log.info("鎵归噺閲嶆柊鍚屾璋冨害鍗曞畬鎴愶紝鎬绘垚鍔熸暟: {}", totalSuccessCount);
return totalSuccessCount;
} catch (Exception e) {
--
Gitblit v1.9.1