From 09e6dc3fb7266620fafb5e341808a8eb36e080a1 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 13 十二月 2025 22:51:52 +0800
Subject: [PATCH] feat:增加企业微信消息提醒
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacySystemSyncServiceImpl.java | 188 +++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 167 insertions(+), 21 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 487b710..32708d8 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涓氬姟灞傚鐞�
@@ -91,12 +91,35 @@
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);
@@ -149,12 +172,26 @@
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));
log.info("浠诲姟鍚屾鎴愬姛锛屼换鍔D: {}, ServiceOrdID: {}", taskId, serviceOrdId);
return serviceOrdId;
} else {
@@ -187,7 +224,13 @@
return null;
}
}
-
+
+ //鍦ㄨ繖閲岀洃鍚淳鍙戠殑浜嬩欢
+ @EventListener
+ public void handleTaskServiceOrderSyncEvent(TaskServiceOrderSyncEvent event) {
+ log.info("鏀跺埌浠诲姟鏈嶅姟鍗曞悓姝ヤ簨浠讹紝浠诲姟ID锛歿}锛屼换鍔$紪鍙凤細{}锛屾湇鍔″崟ID锛歿}", event.getTaskId(), event.getTaskCode(), event.getServiceOrderId());
+ syncDispatchOrderToLegacy(event.getTaskId());
+ }
/**
* 鎵归噺鍚屾鏈悓姝ョ殑鎬ユ晳杞繍浠诲姟
* 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
@@ -303,7 +346,6 @@
* 鍚屾璋冨害鍗曞埌鏃х郴缁燂紙admin_save_24.asp锛�
*/
@Override
- @Transactional
public Long syncDispatchOrderToLegacy(Long taskId) {
if (!legacyConfig.isEnabled()) {
log.info("鏃х郴缁熷悓姝ュ凡绂佺敤锛岃烦杩囪皟搴﹀崟鍚屾锛屼换鍔D: {}", taskId);
@@ -432,13 +474,18 @@
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);
return dispatchOrdId;
@@ -472,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);
+ }
+ }
/**
* 鎵归噺鍚屾鏈悓姝ョ殑璋冨害鍗�
* 浣跨敤鍒嗛〉鏌ヨ锛岀‘淇濇墍鏈夌鍚堟潯浠剁殑浠诲姟閮借兘琚悓姝�
@@ -492,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) {
@@ -1226,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;
+ }
+ }
+ */
+
/**
* 閲嶆柊鍚屾杞﹁締鍜屼汉鍛樺彉鏇寸殑浠诲姟鍒版棫绯荤粺
* 褰撲换鍔$殑杞﹁締淇℃伅鎴栦汉鍛樹俊鎭彂鐢熷彉鏇存椂锛岄渶瑕佽皟鐢ㄦ棫绯荤粺鎺ュ彛閲嶆柊鍚屾
--
Gitblit v1.9.1