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/SysTaskServiceImpl.java | 162 ++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 126 insertions(+), 36 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
index d9c04d5..3caf8c5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
@@ -9,7 +9,9 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.*;
import com.ruoyi.system.domain.vo.*;
+import com.ruoyi.system.event.*;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.*;
import com.ruoyi.system.utils.TaskCodeGenerator;
@@ -18,10 +20,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.GpsDistanceUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.system.domain.SysTask;
@@ -33,9 +31,6 @@
import com.ruoyi.system.domain.SysTaskAssignee;
import com.ruoyi.system.domain.enums.TaskStatus;
import com.ruoyi.system.domain.VehicleInfo;
-import com.ruoyi.system.event.TaskCreatedEvent;
-import com.ruoyi.system.event.TaskAssignedEvent;
-import com.ruoyi.system.event.TaskStatusChangedEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -100,6 +95,16 @@
@Autowired
private ISysTaskVehicleService sysTaskVehicleService;
+ @Override
+ public Boolean dispatchSyncEvent(Long taskId) {
+ SysTask task= sysTaskMapper.selectSysTaskByTaskId(taskId);
+ SysUser user= sysUserMapper.selectUserById(task.getCreatorId());
+ Integer oaUser=user.getOaUserId();
+ SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+ eventPublisher.publishEvent(new TaskDispatchSyncEvent(this, taskId, task.getTaskCode(),emergency.getLegacyServiceOrdId(), emergency.getLegacyDispatchOrdId(),oaUser));
+ return true;
+ }
+
/**
* 鏌ヨ浠诲姟绠$悊
*
@@ -132,7 +137,68 @@
*/
@Override
public List<SysTask> selectSysTaskList(TaskQueryVO queryVO) {
- return sysTaskMapper.selectSysTaskList(queryVO);
+ List<SysTask> tasks= sysTaskMapper.selectSysTaskList(queryVO);
+ tasks.forEach(task -> {
+ if ("EMERGENCY_TRANSFER".equals(task.getTaskType())) {
+ SysTaskEmergency emergencyInfo = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(task.getTaskId());
+ task.setEmergencyInfo(emergencyInfo);
+ }
+ });
+ return tasks;
+ }
+
+ /**
+ * 鏍规嵁浠诲姟缂栧彿銆佽皟搴﹀崟缂栧彿鎴栨湇鍔″崟缂栧彿鏌ヨ浠诲姟鍒楄〃
+ *
+ * @param queryVO 浠诲姟鏌ヨ瀵硅薄
+ * @param taskCode 浠诲姟缂栧彿
+ * @return 浠诲姟绠$悊闆嗗悎
+ */
+ @Override
+ public List<SysTask> selectSysTaskListByMultiCode(TaskQueryVO queryVO, String taskCode) {
+ // Create a new query object without the taskCode filter
+ TaskQueryVO newQuery = new TaskQueryVO();
+ // Copy all properties except taskCode
+ try {
+ org.springframework.beans.BeanUtils.copyProperties(queryVO, newQuery, "taskCode");
+ } catch (Exception e) {
+ // If copy fails, manually copy the important fields
+ newQuery.setTaskType(queryVO.getTaskType());
+ newQuery.setTaskStatus(queryVO.getTaskStatus());
+ newQuery.setVehicleNo(queryVO.getVehicleNo());
+ newQuery.setCreatorId(queryVO.getCreatorId());
+ newQuery.setAssigneeId(queryVO.getAssigneeId());
+ newQuery.setDeptId(queryVO.getDeptId());
+ newQuery.setDeptIds(queryVO.getDeptIds());
+ newQuery.setPlannedStartTimeBegin(queryVO.getPlannedStartTimeBegin());
+ newQuery.setPlannedStartTimeEnd(queryVO.getPlannedStartTimeEnd());
+ newQuery.setPlannedEndTimeBegin(queryVO.getPlannedEndTimeBegin());
+ newQuery.setPlannedEndTimeEnd(queryVO.getPlannedEndTimeEnd());
+ newQuery.setOverdue(queryVO.getOverdue());
+ }
+
+ // Get all tasks matching the other criteria
+ List<SysTask> allTasks = sysTaskMapper.selectSysTaskList(newQuery);
+ allTasks.stream().forEach(task -> {
+ if ("EMERGENCY_TRANSFER".equals(task.getTaskType())) {
+ SysTaskEmergency emergencyInfo = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(task.getTaskId());
+ task.setEmergencyInfo(emergencyInfo);
+ }
+ });
+ return allTasks.stream().filter(task -> {
+ if (task.getTaskCode() != null && task.getTaskCode().contains(taskCode)) {
+ return true;
+ }
+ if ("EMERGENCY_TRANSFER".equals(task.getTaskType()) && task.getEmergencyInfo() != null) {
+ String dispatchCode = task.getEmergencyInfo().getDispatchCode();
+ String serviceCode = task.getEmergencyInfo().getServiceCode();
+ return (dispatchCode != null && dispatchCode.contains(taskCode)) ||
+ (serviceCode != null && serviceCode.contains(taskCode));
+ }
+ return false;
+
+ }).collect(Collectors.toList());
+
}
/**
@@ -215,10 +281,7 @@
));
}
- // 鍙戝竷浠诲姟鍒嗛厤浜嬩欢
- if (result > 0 && createVO.getAssignees() != null && !createVO.getAssignees().isEmpty()) {
- this.sendTaskAssigneeEvent(createVO,task,SecurityUtils.getUserId(),SecurityUtils.getUsername());
- }
+
// 寮傛鍚屾鎬ユ晳杞繍浠诲姟鍒版棫绯荤粺
if (result > 0 && "EMERGENCY_TRANSFER".equals(createVO.getTaskType()) && legacySystemSyncService != null) {
@@ -248,7 +311,7 @@
*/
@Override
@Transactional
- public int insertTask(TaskCreateVO createVO,String serviceOrderId,String dispatchOrderId, String serviceOrdNo, Long userId,String userName, Long deptId, Date createTime, Date updateTime) {
+ public int insertTask(TaskCreateVO createVO,Long serviceOrderId,Long dispatchOrderId, String serviceOrdNo, Long userId,String userName, Long deptId, Date createTime, Date updateTime) {
SysTask task = new SysTask();
if(createVO.getTaskCode()!=null){
task.setTaskCode(createVO.getTaskCode());
@@ -341,12 +404,10 @@
));
}
- // 鍙戝竷浠诲姟鍒嗛厤浜嬩欢
- if (result > 0 && createVO.getAssignees() != null && !createVO.getAssignees().isEmpty()) {
- this.sendTaskAssigneeEvent(createVO,task,userId,userName);
- }
-
+ if(result>0) {
+ this.sendEmeryTaskProcess(task, dispatchOrderId);
+ }
return result;
}
@@ -466,6 +527,11 @@
}
}
}
+ if(updateVO.getAssignees()!=null && !updateVO.getAssignees().isEmpty()){
+ TaskCreateVO.AssigneeInfo assigneeInfo= updateVO.getAssignees().get(0);
+ task.setAssigneeId(assigneeInfo.getUserId());
+ task.setAssigneeName(assigneeInfo.getUserName());
+ }
// 鐢ㄤ簬璺熻釜鏄惁闇�瑕侀噸鏂板悓姝ワ紙杞﹁締銆佷汉鍛樸�佸湴鍧�銆佹垚浜や环鍙樻洿锛�
boolean needResync = false;
int result = sysTaskMapper.updateSysTask(task);
@@ -491,11 +557,12 @@
needResync = true;
}
}
-
+ Long dispatchOrderId=0L;
// 鏇存柊鎬ユ晳杞繍鎵╁睍淇℃伅锛堟娴嬪湴鍧�鍜屾垚浜や环鍙樻洿锛�
if (result > 0 && "EMERGENCY_TRANSFER".equals(oldTask.getTaskType())) {
SysTaskEmergency oldEmergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(updateVO.getTaskId());
sysEmergencyTaskService.updateEmergencyInfoFromUpdateVO(oldEmergency, updateVO, userName);
+ dispatchOrderId= oldEmergency.getLegacyDispatchOrdId();
sysEmergencyTaskService.markNeedResyncIfNecessary(updateVO.getTaskId(), oldTask, updateVO, updateFromLegacy);
}
@@ -518,7 +585,7 @@
userId, userName);
}
- if(result > 0 && oldTask.getTaskStatus().equals(TaskStatus.PENDING.getCode()) && updateVO.getAssignees() != null && !updateVO.getAssignees().isEmpty()){
+ if(result > 0 && oldTask.getTaskStatus().equals(TaskStatus.PENDING.getCode()) && updateVO.getAssignees() != null && !updateVO.getAssignees().isEmpty() && dispatchOrderId>0L){
this.sendTaskAssigneeEvent(updateVO,oldTask,userId,userName);
}
@@ -541,11 +608,11 @@
* @return 缁撴灉
*/
@Override
- public int updateTask(TaskUpdateVO updateVO, String serviceOrderId, String dispatchOrderId, String serviceOrdNo,
+ public int updateTask(TaskUpdateVO updateVO, Long serviceOrderId, Long dispatchOrderId, String serviceOrdNo,
Long userId, String userName, Long deptId, Date createTime, Date updateTime) {
// log.info("寮�濮嬫洿鏂颁换鍔� ServiceOrdID: {} , dispatchOrdId:{}", serviceOrderId,dispatchOrderId);
// 閫氳繃鏃х郴缁熸湇鍔″崟ID鏌ユ壘浠诲姟
- SysTaskEmergency taskEmergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(Long.parseLong(serviceOrderId));
+ SysTaskEmergency taskEmergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(serviceOrderId);
Long taskId = taskEmergency.getTaskId();
updateVO.setTaskId(taskId);
SysTask task = new SysTask();
@@ -562,7 +629,7 @@
if(updateVO.getActualEndTime() != null) {
task.setActualEndTime(updateVO.getActualEndTime());
}
- task.setAssigneeId(updateVO.getAssigneeId());
+// task.setAssigneeId(updateVO.getAssigneeId());
task.setUpdateBy(userName);
task.setUpdateTime(DateUtils.getNowDate());
task.setRemark(updateVO.getRemark());
@@ -575,7 +642,11 @@
task.setDepartureLatitude(updateVO.getDepartureLatitude());
task.setDestinationLongitude(updateVO.getDestinationLongitude());
task.setDestinationLatitude(updateVO.getDestinationLatitude());
-
+ if(updateVO.getAssignees()!=null && !updateVO.getAssignees().isEmpty()){
+ TaskCreateVO.AssigneeInfo assigneeInfo= updateVO.getAssignees().get(0);
+ task.setAssigneeId(assigneeInfo.getUserId());
+ task.setAssigneeName(assigneeInfo.getUserName());
+ }
// 濡傛灉鏇存柊浜嗛儴闂↖D
if (updateVO.getDeptId() != null) {
task.setDeptId(updateVO.getDeptId());
@@ -646,16 +717,14 @@
// log.info("鏇存柊鎵ц浜哄憳 ServiceOrdID:{},dispatchOrderId:{}",serviceOrderId,dispatchOrderId);
sysTaskAssigneeService.updateTaskAssignees(taskId, updateVO.getAssignees(), userName);
}
-
+
// 鏇存柊鎬ユ晳杞繍鎵╁睍淇℃伅
if (result > 0) {
// 鏇存柊鏃х郴缁烮D
- if (serviceOrderId != null) {
- taskEmergency.setLegacyServiceOrdId(Long.parseLong(serviceOrderId));
- }
- if (dispatchOrderId != null) {
- taskEmergency.setLegacyDispatchOrdId(Long.parseLong(dispatchOrderId));
- taskEmergency.setLegacyDispatchOrdId(Long.parseLong(dispatchOrderId));
+ taskEmergency.setLegacyServiceOrdId(serviceOrderId);
+ if (LongUtil.isNotEmpty(dispatchOrderId)) {
+
+ taskEmergency.setLegacyDispatchOrdId(dispatchOrderId);
taskEmergency.setDispatchSyncStatus(2);
taskEmergency.setDispatchSyncTime(new Date());
taskEmergency.setDispatchSyncErrorMsg("鏃х郴缁熷悓姝ヨ繃鏉�");
@@ -666,22 +735,37 @@
taskEmergency.setUpdateTime(DateUtils.getNowDate());
Boolean hasEmergencyInfo = updateVO.getHospitalOut() != null || updateVO.getHospitalIn() != null || updateVO.getPatient() != null;
-// log.info("鏇存柊杞繍浠诲姟淇℃伅 serviceOrdID:{},dispatchOrderId:{} hasEmergencyInfo:{}",serviceOrderId,
-// dispatchOrderId,hasEmergencyInfo);
+
// 浣跨敤TaskCreateVO鐨勫瓧娈垫潵鏇存柊鎬ユ晳杞繍淇℃伅
if (hasEmergencyInfo) {
sysEmergencyTaskService.updateEmergencyInfoFromCreateVO(taskEmergency, updateVO, userName);
}
+ SysTaskEmergency emergency= sysEmergencyTaskService.selectSysTaskEmergencyByTaskId(taskId);
+ dispatchOrderId = emergency.getLegacyDispatchOrdId();
}
- if(updateVO.getTaskStatus()!=null && updateVO.getTaskStatus().equals(TaskStatus.PENDING.getCode()) && updateVO.getAssignees()!=null && !updateVO.getAssignees().isEmpty()){
+ if(updateVO.getTaskStatus()!=null && updateVO.getTaskStatus().equals(TaskStatus.PENDING.getCode()) && updateVO.getAssignees()!=null && !updateVO.getAssignees().isEmpty() && dispatchOrderId>0L){
this.sendTaskAssigneeEvent(updateVO,task,userId,userName);
}
-
+
return result;
}
+ private void sendEmeryTaskProcess(SysTask task,Long dispatchOrderId){
+ Long taskId = task.getTaskId();
+ String taskCode = task.getShowTaskCode();
+ if(task.getTaskStatus()!=null && task.getTaskStatus().equals(TaskStatus.PENDING.getCode())){
+ //濡傛灉娌℃湁鍒嗛厤浜哄憳锛屼笖娌℃湁璋冨害鍗曪紝涓嶆槸骞垮窞鎬诲叕鍙哥殑灏遍渶瑕佸彂閫侀�氱煡璺熻繘
+ if(LongUtil.isEmpty(dispatchOrderId)){
+ if(!task.getDeptId().equals(DeptUtil.GUANGZHOU_DEPT_ID) && task.getAssignees().isEmpty()){
+ //鍙戦�侀�氱煡
+ eventPublisher.publishEvent(new TaskOnlyServerOrderSyncEvent(this, taskId, taskCode));
+
+ }
+ }
+ }
+ }
/**
* 鎵归噺鍒犻櫎浠诲姟绠$悊
*
@@ -1026,7 +1110,13 @@
*/
@Override
public List<SysTask> selectMyTasks(Long userId) {
- return sysTaskMapper.selectMyTasks(userId);
+ List<SysTask> list = sysTaskMapper.selectMyTasks(userId);
+ list.stream().forEach(task -> {
+ if(task.getTaskType().equals("EMERGENCY_TRANSFER")){
+ task.setEmergencyInfo(sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(task.getTaskId()));
+ }
+ });
+ return list;
}
/**
--
Gitblit v1.9.1