| | |
| | | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | @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; |
| | | } |
| | | |
| | | /** |
| | | * 查询任务管理 |
| | | * |
| | |
| | | */ |
| | | @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()); |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | )); |
| | | } |
| | | |
| | | // 发布任务分配事件 |
| | | 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) { |
| | |
| | | */ |
| | | @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()); |
| | |
| | | )); |
| | | } |
| | | |
| | | // 发布任务分配事件 |
| | | if (result > 0 && createVO.getAssignees() != null && !createVO.getAssignees().isEmpty()) { |
| | | this.sendTaskAssigneeEvent(createVO,task,userId,userName); |
| | | } |
| | | |
| | | |
| | | if(result>0) { |
| | | this.sendEmeryTaskProcess(task, dispatchOrderId); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | 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); |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | 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); |
| | | } |
| | |
| | | * @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(); |
| | |
| | | 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()); |
| | |
| | | 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()); |
| | | } |
| | | // 如果更新了部门ID |
| | | if (updateVO.getDeptId() != null) { |
| | | task.setDeptId(updateVO.getDeptId()); |
| | |
| | | // log.info("更新执行人员 ServiceOrdID:{},dispatchOrderId:{}",serviceOrderId,dispatchOrderId); |
| | | sysTaskAssigneeService.updateTaskAssignees(taskId, updateVO.getAssignees(), userName); |
| | | } |
| | | |
| | | |
| | | // 更新急救转运扩展信息 |
| | | if (result > 0) { |
| | | // 更新旧系统ID |
| | | 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("旧系统同步过来"); |
| | |
| | | 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)); |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 批量删除任务管理 |
| | | * |
| | |
| | | */ |
| | | @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; |
| | | } |
| | | |
| | | /** |