From 6b29bd596f8b48485d3506bfba4a1e0ea6c7df99 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期二, 14 四月 2026 22:45:40 +0800
Subject: [PATCH] feat: 优化统计及告急处理
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java | 379 ++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 281 insertions(+), 98 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
index 96f03eb..6c11568 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -2,10 +2,8 @@
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.LongUtil;
-import com.ruoyi.common.utils.MapValueUtils;
-import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.*;
+import com.ruoyi.system.domain.SysTask;
import com.ruoyi.system.domain.SysTaskEmergency;
import com.ruoyi.system.domain.VehicleInfo;
import com.ruoyi.system.domain.enums.TaskStatus;
@@ -20,6 +18,9 @@
import com.ruoyi.system.mapper.VehicleInfoMapper;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.IWechatTaskNotifyService;
+import com.ruoyi.system.service.INotifyTaskService;
+import com.ruoyi.system.service.INotifyDispatchService;
+import com.ruoyi.system.domain.NotifyTask;
import com.ruoyi.system.utils.TaskStatusConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,8 +32,10 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* 鏃х郴缁熻浆杩愬崟鍚屾Service涓氬姟灞傚鐞�
@@ -69,92 +72,147 @@
@Autowired
private IWechatTaskNotifyService wechatTaskNotifyService;
+ @Autowired
+ private INotifyTaskService notifyTaskService;
+
+ @Autowired
+ private INotifyDispatchService notifyDispatchService;
+
/**
* 鍚屾鎸囧畾鏃ユ湡鑼冨洿鐨勬棫绯荤粺杞繍鍗曞埌鏂扮郴缁�
- *
- * @param daysAgo 澶氬皯澶╁墠鐨勬暟鎹紙濡�7琛ㄧず7澶╁墠鐨勬暟鎹級
+ * 浼樺寲锛氬皢澶氬ぉ鑼冨洿鎷嗗垎涓洪�愬ぉ寰幆锛屾瘡娆′粎鏌ヨ1澶╂暟鎹紝閬垮厤澶ф暟鎹噺瀵艰嚧SQL Server瓒呮椂
+ *
+ * @param daysAgo 澶氬皯澶╁墠鐨勬暟鎹紙濡�7琛ㄧず鍚屾鏈�杩�7澶╃殑鏁版嵁锛�
* @return 鎴愬姛鍚屾鐨勮浆杩愬崟鏁伴噺
*/
@Override
public int syncLegacyTransferOrders(int daysAgo) {
- log.info("寮�濮嬪悓姝}澶╁墠鐨勬棫绯荤粺杞繍鍗曟暟鎹�", daysAgo);
-
try {
// 鍙傛暟楠岃瘉
if (daysAgo <= 0) {
log.error("澶╂暟鍙傛暟蹇呴』澶т簬0");
return 0;
}
-
- // 璁$畻鏃ユ湡鑼冨洿
- Date startDate = DateUtils.addDays(new Date(), -daysAgo);
- String startDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", startDate);
-
- // 浠嶴QL Server鏌ヨ杞繍鍗曟暟鎹�
- List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr);
-
- if (transferOrders == null || transferOrders.isEmpty()) {
- log.info("鏈煡璇㈠埌{}澶╁墠鐨勮浆杩愬崟鏁版嵁", daysAgo);
- return 0;
+
+// log.info("[杞繍鍗曞悓姝 寮�濮嬪悓姝ワ紝鑼冨洿: 鏈�杩憑}澶�", daysAgo);
+ int totalSuccessCount = 0;
+ int totalDays = daysAgo + 1;
+
+ // 鎸夊ぉ鎷嗗垎锛屾瘡娆″彧鍚屾1澶╃殑鏁版嵁锛岄伩鍏嶅ぇ鑼冨洿鏌ヨ瓒呮椂
+ for (int i = daysAgo; i >= 0; i--) {
+ Date dayStart = DateUtils.addDays(new Date(), -i);
+ String dayStartStr = DateUtils.parseDateToStr("yyyy-MM-dd", dayStart) + " 00:00:00";
+ String dayEndStr = DateUtils.parseDateToStr("yyyy-MM-dd", dayStart) + " 23:59:59";
+
+ int dayIndex = totalDays - i;
+// log.info("[杞繍鍗曞悓姝 澶勭悊澶� {}/{}: {}", dayIndex, totalDays, dayStartStr);
+ int daySuccessCount = syncSingleDayOrders(dayStartStr, dayEndStr);
+ totalSuccessCount += daySuccessCount;
+// log.info("[杞繍鍗曞悓姝 {} 瀹屾垚锛屾柊澧炲悓姝�: {}鏉★紝绱: {}鏉�", dayStartStr, daySuccessCount, totalSuccessCount);
}
-
- log.info("鏌ヨ鍒皗}鏉¤浆杩愬崟鏁版嵁锛屽紑濮嬪悓姝�...", transferOrders.size());
-
- int successCount = 0;
- int totalCount = transferOrders.size();
- int processedCount = 0;
-
- for (Map<String, Object> order : transferOrders) {
- processedCount++;
- try {
- Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID");
- Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID");
-
- // 妫�鏌ュ弬鏁版湁鏁堟��
- if (serviceOrdID==null || serviceOrdID<=0) {
- log.warn("绗瑊}鏉℃暟鎹湇鍔″崟ID涓虹┖锛岃烦杩囧鐞�", processedCount);
- continue;
- }
-
- log.debug("姝e湪澶勭悊绗瑊}/{}鏉¤浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}",
- processedCount, totalCount, serviceOrdID, dispatchOrdID);
-
- // 妫�鏌ユ槸鍚﹀凡鍚屾
- if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
- log.debug("杞繍鍗曞凡鍚屾锛岃烦杩�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
- //杩涜鏇存柊鎿嶄綔
- updateTransferOrder(serviceOrdID, dispatchOrdID, order);
- continue;
- }
-
- // 鍚屾鍗曚釜杞繍鍗�
- boolean success = syncSingleTransferOrder(serviceOrdID, dispatchOrdID, order);
- if (success) {
- successCount++;
- }
-
- // 鎺у埗鍚屾棰戠巼锛岄伩鍏嶈姹傝繃蹇�
- Thread.sleep(100);
- } catch (InterruptedException ie) {
- log.warn("鍚屾浠诲姟琚腑鏂�");
- Thread.currentThread().interrupt();
- break;
- } catch (Exception e) {
- log.error("鍚屾鍗曚釜杞繍鍗曞け璐�: ServiceOrdID={}, DispatchOrdID={}",
- MapValueUtils.getStringValue(order, "ServiceOrdID"),
- MapValueUtils.getStringValue(order, "DispatchOrdID"), e);
- }
- }
-
- log.info("鍚屾瀹屾垚锛屽叡澶勭悊{}鏉¤浆杩愬崟锛屾垚鍔熷悓姝}鏉¤浆杩愬崟鏁版嵁", totalCount, successCount);
- return successCount;
-
+
+// log.info("[杞繍鍗曞悓姝 鍏ㄩ儴瀹屾垚锛屽叡鏂板鍚屾 {}鏉�", totalSuccessCount);
+ return totalSuccessCount;
+
} catch (Exception e) {
log.error("鍚屾{}澶╁墠鐨勬棫绯荤粺杞繍鍗曟暟鎹紓甯�", daysAgo, e);
return 0;
}
+ }
+
+ /**
+ * 鍚屾鍗曞ぉ鐨勮浆杩愬崟鏁版嵁锛圞eyset娓告爣鍒嗛〉锛�
+ *
+ * @param startDateStr 寮�濮嬫棩鏈熷瓧绗︿覆锛坹yyy-MM-dd锛�
+ * @param endDateStr 缁撴潫鏃ユ湡瀛楃涓诧紙yyyy-MM-dd锛�
+ * @return 鎴愬姛鍚屾鐨勮浆杩愬崟鏁伴噺
+ */
+ private int syncSingleDayOrders(String startDateStr, String endDateStr) {
+ final int PAGE_SIZE = 5;
+ long lastId = 0L;
+ int successCount = 0;
+ int pageNum = 0;
+ int totalProcessed = 0;
+
+ try {
+ while (true) {
+ List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr, endDateStr, lastId, PAGE_SIZE);
+
+ if (transferOrders == null || transferOrders.isEmpty()) {
+ break;
+ }
+
+ pageNum++;
+ int totalCount = transferOrders.size();
+ int processedCount = 0;
+
+// log.info("[杞繍鍗曞悓姝 {} 绗瑊}椤碉紝鑾峰彇{}.鏉℃暟鎹紝lastId={}", startDateStr, pageNum, totalCount, lastId);
+
+ for (Map<String, Object> order : transferOrders) {
+ processedCount++;
+ totalProcessed++;
+ try {
+ Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID");
+ Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID");
+
+ if (serviceOrdID == null || serviceOrdID <= 0) {
+ log.warn("绗瑊}鏉℃暟鎹湇鍔″崟ID涓虹┖锛岃烦杩囧鐞�", processedCount);
+ continue;
+ }
+
+ // 妫�鏌ユ槸鍚﹀凡鍚屾
+ if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
+ log.debug("[杞繍鍗曞悓姝 宸插瓨鍦紝鎵ц鏇存柊: ServiceOrdID={}", serviceOrdID);
+ updateTransferOrder(serviceOrdID, dispatchOrdID, order);
+ continue;
+ }
+
+ // 鍚屾鍗曚釜杞繍鍗�
+ log.info("[杞繍鍗曞悓姝 鏂板鍚屾: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+ boolean success = syncSingleTransferOrder(serviceOrdID, dispatchOrdID, order);
+ if (success) {
+ successCount++;
+ log.info("[杞繍鍗曞悓姝 鍚屾鎴愬姛: ServiceOrdID={}, 褰撳ぉ鏂板绱: {}", serviceOrdID, successCount);
+ } else {
+ log.warn("[杞繍鍗曞悓姝 鍚屾澶辫触: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+ }
+
+ // 鎺у埗鍚屾棰戠巼锛岄伩鍏嶈姹傝繃蹇�
+ Thread.sleep(100);
+ } catch (InterruptedException ie) {
+ log.warn("鍚屾浠诲姟琚腑鏂�");
+ Thread.currentThread().interrupt();
+ return successCount;
+ } catch (Exception e) {
+ log.error("鍚屾鍗曚釜杞繍鍗曞け璐�: ServiceOrdID={}, DispatchOrdID={}",
+ MapValueUtils.getStringValue(order, "ServiceOrdID"),
+ MapValueUtils.getStringValue(order, "DispatchOrdID"), e);
+ }
+ }
+
+ // 鏇存柊娓告爣涓烘湰椤垫渶鍚庝竴鏉$殑 ServiceOrdID
+ Map<String, Object> lastOrder = transferOrders.get(transferOrders.size() - 1);
+ Long lastServiceOrdID = MapValueUtils.getLongValue(lastOrder, "ServiceOrdID");
+ if (lastServiceOrdID != null && lastServiceOrdID > 0) {
+ lastId = lastServiceOrdID;
+ } else {
+ break;
+ }
+
+ // 鏈〉鏈弧涓�椤碉紝璇存槑宸叉棤鏇村鏁版嵁
+ if (totalCount < PAGE_SIZE) {
+ break;
+ }
+ }
+
+// log.info("[杞繍鍗曞悓姝 {} 鍒嗛〉瀹屾垚锛屽叡澶勭悊: {}鏉★紝鏂板鍚屾: {}鏉�", startDateStr, totalProcessed, successCount);
+ } catch (Exception e) {
+ log.error("鍚屾鍗曞ぉ杞繍鍗曟暟鎹紓甯�: date={}", startDateStr, e);
+ }
+
+ return successCount;
}
/**
@@ -274,7 +332,13 @@
// log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
try {
- notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
+ // 鐩存帴浣跨敤鏂规硶澶撮儴宸叉煡璇㈢殑 emergency 鑾峰彇 taskId
+ Long taskId = emergency.getTaskId();
+ if (taskId != null) {
+ notifyTransferOrderByWechat(taskId, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
+ } else {
+ log.warn("鏇存柊鍚庢壘涓嶅埌taskId锛岃烦杩囬�氱煡: ServiceOrdID={}", serviceOrdID);
+ }
} catch (Exception e) {
log.error("杞繍鍗曞悓姝ユ垚鍔熷悗鍙戦�佸井淇¢�氱煡澶辫触: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
}
@@ -348,13 +412,13 @@
createTaskVo.setDeptId(deptId);
- int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
+ Long taskId = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
- if (result > 0) {
-// log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
+ if (taskId != null && taskId > 0) {
+// log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, taskId);
try {
- notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
+ notifyTransferOrderByWechat(taskId, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
} catch (Exception e) {
log.error("杞繍鍗曞悓姝ユ垚鍔熷悗鍙戦�佸井淇¢�氱煡澶辫触: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
}
@@ -471,8 +535,21 @@
createTaskVo.setTaskTypeId(serviceOrdType);
}
- // 璁剧疆鍖哄煙绫诲瀷
- String serviceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType");
+
+
+ String serviceOrdVIP = MapValueUtils.getStringValue(order, "ServiceOrdVIP");
+ if(serviceOrdVIP!=null){
+ createTaskVo.setServiceOrdVIP(serviceOrdVIP);
+ }else{
+ createTaskVo.setServiceOrdVIP("0");
+ }
+
+ Integer FromHQ_is = MapValueUtils.getIntegerValue(order, "FromHQ_is");
+ if(IntegerUtil.isNotEmpty(FromHQ_is)){
+ createTaskVo.setFromHQ2_is("1");
+ }else{
+ createTaskVo.setFromHQ2_is("0");
+ }
// 璁剧疆鐢ㄦ埛ID
Long serviceOrdUserID = MapValueUtils.getLongValue(order, "ServiceOrdUserID");
@@ -494,11 +571,20 @@
}
}
createTaskVo.setPatient(patientInfo);
- //1000鍏噷锛屾彁鍙栨暟瀛�
+ //1000鍏噷锛屾彁鍙栨暟瀛楋紙鏀寔灏忔暟锛�
String ServiceOrdTraDistance=MapValueUtils.getStringValue(order, "ServiceOrdTraDistance");
if(ServiceOrdTraDistance!=null){
- ServiceOrdTraDistance=ServiceOrdTraDistance.replaceAll("[^0-9]", "");
- createTaskVo.setDistance(new BigDecimal(ServiceOrdTraDistance));
+ // 淇濈暀鏁板瓧鍜屽皬鏁扮偣锛岀Щ闄ゅ叾浠栧瓧绗�
+ ServiceOrdTraDistance=ServiceOrdTraDistance.replaceAll("[^0-9.]", "");
+ // 澶勭悊澶氫釜灏忔暟鐐圭殑鎯呭喌锛屽彧淇濈暀绗竴涓�
+ int firstDotIndex = ServiceOrdTraDistance.indexOf('.');
+ if (firstDotIndex != -1) {
+ ServiceOrdTraDistance = ServiceOrdTraDistance.substring(0, firstDotIndex + 1)
+ + ServiceOrdTraDistance.substring(firstDotIndex + 1).replace(".", "");
+ }
+ if (!ServiceOrdTraDistance.isEmpty() && !ServiceOrdTraDistance.equals(".")) {
+ createTaskVo.setTransferDistance(new BigDecimal(ServiceOrdTraDistance));
+ }
}
@@ -588,7 +674,7 @@
String carLicense = legacyTransferSyncMapper.selectCarLicenseByCarID(carID);
if (StringUtils.isNotEmpty(carLicense)) {
// 鏍规嵁杞︾墝鍙锋煡璇㈡柊绯荤粺涓殑杞﹁締ID
- log.info("杞繍浠诲姟,ServiceOrdID:{},杞﹁締杞︾墝:{}",serviceOrdID,carLicense);
+// log.info("杞繍浠诲姟,ServiceOrdID:{},杞﹁締杞︾墝:{}",serviceOrdID,carLicense);
// log.debug("杞﹁締杞︾墝鍙�: {}", carLicense);
// 棣栧厛灏濊瘯閫氳繃VehicleInfoMapper鏌ヨ杞﹁締淇℃伅
@@ -609,7 +695,7 @@
List<Long> vehicleIds = new ArrayList<>();
vehicleIds.add(vehicleInfo.getVehicleId());
createTaskVo.setVehicleIds(vehicleIds);
- log.debug("杞繍浠诲姟,ServiceOrdID:{} 閫氳繃杞︾墝鍙锋壘鍒拌溅杈嗕俊鎭�: vehicle_id={}, vehicle_no={}",serviceOrdID, vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
+// log.debug("杞繍浠诲姟,ServiceOrdID:{} 閫氳繃杞︾墝鍙锋壘鍒拌溅杈嗕俊鎭�: vehicle_id={}, vehicle_no={}",serviceOrdID, vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
} else {
log.warn("杞繍浠诲姟,ServiceOrdID:{} 鏈壘鍒板搴旂殑杞﹁締淇℃伅: car_id={}, vehicle_no={}",serviceOrdID, carID, carLicense);
}
@@ -622,7 +708,7 @@
List<Long> vehicleIds = new ArrayList<>();
vehicleIds.add(vehicleInfo.getVehicleId());
createTaskVo.setVehicleIds(vehicleIds);
- log.debug("閫氳繃杞︾墝鍙锋壘鍒拌溅杈嗕俊鎭�: vehicle_id={}, vehicle_no={}", vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
+// log.debug("閫氳繃杞︾墝鍙锋壘鍒拌溅杈嗕俊鎭�: vehicle_id={}, vehicle_no={}", vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
} else {
log.warn("鏈壘鍒板搴旂殑杞﹁締淇℃伅: vehicle_no={}", carLicense);
}
@@ -819,7 +905,7 @@
return String.join(",", diseaseIds);
}
- log.info("鏌ヨ鍒扮梾鎯呬俊鎭紝鏈嶅姟鍗旾D: {}, 鐥呮儏鏁伴噺: {}", serviceOrdID, diseaseIds != null ? diseaseIds.size() : 0);
+// log.info("鏌ヨ鍒扮梾鎯呬俊鎭紝鏈嶅姟鍗旾D: {}, 鐥呮儏鏁伴噺: {}", serviceOrdID, diseaseIds != null ? diseaseIds.size() : 0);
return null;
} catch (Exception e) {
log.error("鏌ヨ鐥呮儏淇℃伅寮傚父锛屾湇鍔″崟ID: {}", serviceOrdID, e);
@@ -837,27 +923,124 @@
SysDept dept,
Map<String, Object> order) {
try {
- // 鑾峰彇閫氱煡鎺ユ敹浜哄垪琛�
- List<SysUser> receivers = getWechatNotifyUsers(dispatchOrdID, dept);
- if (receivers == null || receivers.isEmpty()) {
-// log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟鏃犲彲鐢ㄥ井淇℃帴鏀朵汉锛宼askId={}", taskId);
+ // 1. 鑾峰彇鎵ц浜哄垪琛�
+ List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID);
+ if (assignees.isEmpty()) {
+// log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟鏃犳墽琛屼汉锛宼askId={}", taskId);
return;
}
- // 鎻愬彇鎺ユ敹浜� ID 鍒楄〃
- List<Long> userIds = new ArrayList<>();
- for (SysUser user : receivers) {
- if (user != null && user.getUserId() != null) {
- userIds.add(user.getUserId());
+ // 2. 鏌ヨ浠诲姟鑾峰彇showTaskCode
+ SysTask sysTask = sysTaskService.getTaskDetail(taskId);
+ String showTaskCode = sysTask != null ? sysTask.getShowTaskCode() : serviceOrdNo;
+
+ // 3. 鏋勫缓閫氱煡鍐呭
+ String notifyContent = buildLegacyNotifyContent(showTaskCode, serviceOrdCcTime, order);
+
+ // 4. 鏌ヨ璇askId宸叉湁鐨勯�氱煡璁板綍锛屾敹闆嗗凡瀛樺湪鐨剈serId闆嗗悎
+ List<NotifyTask> existingTasks = notifyTaskService.selectByTaskIdAndType(taskId, NotifyTask.NOTIFY_TYPE_TASK_ASSIGN);
+ Set<Long> existingUserIds = new HashSet<>();
+ List<NotifyTask> pendingTasks = new ArrayList<>();
+ if (existingTasks != null && !existingTasks.isEmpty()) {
+ for (NotifyTask t : existingTasks) {
+ existingUserIds.add(t.getUserId());
+ // 灏嗘湭瀹屾垚鐨勮褰曟敹闆嗙粰寰呭垎鍙戝垪琛�
+ if (!NotifyTask.STATUS_COMPLETED.equals(t.getStatus())) {
+ pendingTasks.add(t);
+ }
}
}
- // 璋冪敤缁熶竴鐨勫井淇¢�氱煡鏈嶅姟
- int successCount = wechatTaskNotifyService.sendTaskNotifyMessage(taskId, userIds);
-// log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟寰俊閫氱煡鍙戦�佸畬鎴愶紝taskId={}, 鎴愬姛={}", taskId, successCount);
+ // 5. 鍙鏂版墽琛屼汉鍒涘缓閫氱煡浠诲姟
+ List<NotifyTask> notifyTasks = new ArrayList<>(pendingTasks);
+ for (TaskCreateVO.AssigneeInfo assignee : assignees) {
+ if (assignee == null || assignee.getUserId() == null) {
+ continue;
+ }
+ // 璇ョ敤鎴峰凡鏈夐�氱煡璁板綍锛岃烦杩�
+ if (existingUserIds.contains(assignee.getUserId())) {
+// log.info("鐢ㄦ埛宸叉湁閫氱煡璁板綍锛岃烦杩囧垱寤猴紝taskId={}, userId={}", taskId, assignee.getUserId());
+ continue;
+ }
+
+ SysUser user = sysUserService.selectUserById(assignee.getUserId());
+ if (user == null) {
+ log.warn("鎵句笉鍒版墽琛屼汉鐢ㄦ埛淇℃伅锛寀serId={}", assignee.getUserId());
+ continue;
+ }
+
+ NotifyTask notifyTask = new NotifyTask();
+ notifyTask.setTaskId(taskId);
+ notifyTask.setTaskCode(showTaskCode);
+ notifyTask.setNotifyType(NotifyTask.NOTIFY_TYPE_TASK_ASSIGN);
+ notifyTask.setUserId(user.getUserId());
+ notifyTask.setUserName(user.getNickName());
+ notifyTask.setUserPhone(user.getPhonenumber());
+ notifyTask.setTitle("杞繍鍗曚换鍔℃淳鍗曢�氱煡");
+ notifyTask.setContent(notifyContent);
+ notifyTask.setCreateBy("绯荤粺鍚屾");
+
+ NotifyTask created = notifyTaskService.createNotifyTask(notifyTask);
+ if (created != null) {
+ notifyTasks.add(created);
+// log.info("鍒涘缓閫氱煡浠诲姟鎴愬姛锛宨d={}, userId={}", created.getId(), user.getUserId());
+ }
+ }
+
+ // 6. 鍒嗗彂閫氱煡浠诲姟
+ if (!notifyTasks.isEmpty()) {
+ int successCount = notifyDispatchService.dispatchNotifies(notifyTasks);
+// log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟閫氱煡鍒嗗彂瀹屾垚锛宼askId={}, 鍒嗗彂鏁伴噺={}, 鎴愬姛鏁伴噺={}",
+// taskId, notifyTasks.size(), successCount);
+ }
+// else {
+// log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟鏃犻渶鏂板閫氱煡锛宼askId={}", taskId);
+// }
+
+ // 5. 鍚屾椂淇濈暀鍘熸湁鐨勫井淇¢�氱煡鏈嶅姟锛堝吋瀹癸級
+ // List<Long> userIds = new ArrayList<>();
+ // for (TaskCreateVO.AssigneeInfo assignee : assignees) {
+ // if (assignee != null && assignee.getUserId() != null) {
+ // userIds.add(assignee.getUserId());
+ // }
+ // }
+ // if (!userIds.isEmpty()) {
+ // int wxCount = wechatTaskNotifyService.sendTaskNotifyMessage(taskId, userIds);
+ // log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟寰俊閫氱煡鍙戦�佸畬鎴愶紝taskId={}, 鎴愬姛={}", taskId, wxCount);
+ // }
+
} catch (Exception e) {
log.error("notifyTransferOrderByWechat鍙戠敓寮傚父, serviceOrdID={}, dispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
}
+ }
+
+ /**
+ * 鏋勫缓鏃х郴缁熷悓姝ヨ浆杩愬崟鐨勯�氱煡鍐呭
+ */
+ private String buildLegacyNotifyContent(String serviceOrdNo, Date serviceOrdCcTime, Map<String, Object> order) {
+ StringBuilder content = new StringBuilder();
+ content.append("鎮ㄦ湁鏂扮殑杞繍浠诲姟锛屼换鍔″崟鍙�:").append(serviceOrdNo);
+
+ // 鍑哄彂鏃堕棿
+ if (serviceOrdCcTime != null) {
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ content.append("锛屽嚭鍙戞椂闂�:").append(df.format(serviceOrdCcTime));
+ }
+
+ // 鍑哄彂鍦�
+ String departure = MapValueUtils.getStringValue(order, "ServiceOrdTraVia");
+ if (StringUtils.isNotEmpty(departure)) {
+ content.append("锛屽嚭鍙戝湴:").append(departure);
+ }
+
+ // 鐩殑鍦�
+ String destination = MapValueUtils.getStringValue(order, "ServiceOrdTraEnd");
+ if (StringUtils.isNotEmpty(destination)) {
+ content.append("锛岀洰鐨勫湴:").append(destination);
+ }
+
+ content.append("锛岃鍙婃椂澶勭悊銆�");
+ return content.toString();
}
private List<SysUser> getWechatNotifyUsers(Long dispatchOrdID, SysDept dept) {
@@ -865,7 +1048,7 @@
List<SysUser> result = new ArrayList<>();
List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID);
- if (assignees != null && !assignees.isEmpty()) {
+ if (!assignees.isEmpty()) {
for (TaskCreateVO.AssigneeInfo assigneeInfo : assignees) {
if (assigneeInfo == null || assigneeInfo.getUserId() == null) {
continue;
--
Gitblit v1.9.1