wlzboy
2026-01-24 2f09efc660bf2cc94cbc5291ad25ca06fc9bdadf
ruoyi-system/src/main/java/com/ruoyi/system/listener/TaskMessageListener.java
@@ -2,10 +2,10 @@
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.utils.DeptUtil;
import com.ruoyi.common.utils.LongUtil;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.event.TaskDispatchSyncEvent;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysTaskAssigneeService;
import com.ruoyi.system.event.*;
import com.ruoyi.system.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,16 +14,11 @@
import org.springframework.stereotype.Component;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.event.TaskCreatedEvent;
import com.ruoyi.system.event.TaskAssignedEvent;
import com.ruoyi.system.event.TaskStatusChangedEvent;
import com.ruoyi.system.mapper.SysMessageMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysTaskMapper;
import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.service.INotifyTaskService;
import com.ruoyi.system.service.INotifyDispatchService;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -70,6 +65,9 @@
    @Autowired
    private ISysTaskAssigneeService taskAssigneeService;
    @Autowired
    private ITaskStatusPushService taskStatusPushService;
    @Async
    @EventListener
    public void handleTaskDispatchEvent(TaskDispatchSyncEvent event) {
@@ -85,11 +83,30 @@
                   sendDispatchNotify(assigneeIds, task.getCreatorId(), event.getTaskId(),task.getShowTaskCode(), buildNotifyContent(task, emergency));
               }
            }
            syncDispatchActualStartTime(emergency, task);
            Long taskId= event.getTaskId();
            Long dispatchOrdId= event.getDispatchOrderId();
            Long serviceOrdId= event.getServiceOrderId();
            Integer oaUserID= event.getOaUserId();
            legacySystemSyncService.syncTaskAttachment(taskId, dispatchOrdId, serviceOrdId, oaUserID);
        }catch (Exception ex){
            log.error("处理任务派发同步事件失败", ex);
        }
    }
    private void syncDispatchActualStartTime(SysTaskEmergency emergency, SysTask task) {
        try {
            //这里也同步一下实际时间
            Long disatpchOrdId = emergency.getLegacyDispatchOrdId();
            Date actualTime = task.getActualStartTime();
            legacySystemSyncService.updateDispatchActualTime(disatpchOrdId, actualTime);
        }catch (Exception ex){
        log.error("同步实际时间失败", ex);
        }
    }
    /**
     * 监听任务创建事件
     * 
@@ -218,6 +235,31 @@
        }
        return content.toString();
    }
    @Autowired
    private ILegacySystemSyncService legacySystemSyncService;
    @Async
    @EventListener
    public void handleTaskUpdateEvent(TaskUpdateEvent event){
        log.info("收到任务更新事件,任务ID:{},任务编号:{}", event.getTaskId(), event.getTaskCode());
        legacySystemSyncService.resyncDispatchOrderToLegacy(event.getTaskId());
    }
    //在这里监听派发的事件
    @Async
    @EventListener
    public void handleTaskServiceOrderSyncEvent(TaskServiceOrderSyncEvent event) {
//        log.info("收到任务服务单同步事件,任务ID:{},任务编号:{},服务单ID:{}", event.getTaskId(), event.getTaskCode(), event.getServiceOrderId());
       Long dispatchOrderId= legacySystemSyncService.syncDispatchOrderToLegacy(event.getTaskId());
//       if(LongUtil.isNotEmpty(dispatchOrderId)){
//           //更新needsync为0
//
//       }
    }
@@ -392,6 +434,8 @@
        return content.toString();
    }
    @Autowired
    private ITaskStatusSyncService taskStatusSyncService;
    /**
     * 监听任务状态变更事件
     * 
@@ -400,26 +444,44 @@
    @Async
    @EventListener
    public void handleTaskStatusChangedEvent(TaskStatusChangedEvent event) {
        sendTaskStatusToLocal(event);
        sendTaskStatusToLegacy(event.getTaskId());
    }
    private void sendTaskStatusToLegacy(Long taskId) {
        try{
            log.info("任务状态同步到旧系统开始 taskId:{}",taskId);
           taskStatusPushService.pushTaskStatusToLegacy(taskId);
        }catch (Exception e){
            log.error("任务状态同步到旧系统异常 taskId:{}",taskId, e);
        }
    }
    private  void sendTaskStatusToLocal(TaskStatusChangedEvent event) {
        try {
            log.info("收到任务状态变更事件,任务ID:{},旧状态:{},新状态:{}",
            log.info("收到任务状态变更事件,任务ID:{},旧状态:{},新状态:{}",
                    event.getTaskId(), event.getOldStatus(), event.getNewStatus());
            //发起状态同步
            // 构建状态变更内容
            String statusContent = getStatusChangeContent(event.getNewStatus(), event.getNewStatusDesc());
            // 收集所有需要通知的用户ID(执行人+创建人,去重)
            java.util.Set<Long> receiverIds = new java.util.HashSet<>();
            // 添加执行人
            if (event.getAssigneeIds() != null) {
                receiverIds.addAll(event.getAssigneeIds());
            }
            // 添加创建人(如果不是执行人)
            if (event.getCreatorId() != null) {
                receiverIds.add(event.getCreatorId());
            }
            // 给每个用户发送消息
            for (Long receiverId : receiverIds) {
                SysUser user = sysUserMapper.selectUserById(receiverId);
@@ -427,7 +489,7 @@
                    log.warn("找不到用户信息,用户ID:{}", receiverId);
                    continue;
                }
                // 创建消息
                SysMessage message = new SysMessage();
                message.setMessageType("STATUS");
@@ -442,13 +504,13 @@
                message.setIsRead("0");
                message.setCreateTime(DateUtils.getNowDate());
                message.setDelFlag("0");
                // 保存消息
                sysMessageMapper.insertSysMessage(message);
                log.info("任务状态变更消息已保存,消息ID:{},新状态:{},接收人:{}",
                log.info("任务状态变更消息已保存,消息ID:{},新状态:{},接收人:{}",
                        message.getMessageId(), event.getNewStatus(), user.getNickName());
            }
        } catch (Exception e) {
            log.error("处理任务状态变更事件失败", e);
        }