| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 用于跟踪是否需要重新同步(车辆、人员、地址、成交价变更) |
| | | boolean needResync = true; |
| | | int result = sysTaskMapper.updateSysTask(task); |
| | | |
| | | // 用于跟踪是否需要重新同步(车辆、人员、地址、成交价变更) |
| | | boolean needResync = false; |
| | | |
| | | |
| | | // 更新车辆关联 |
| | | if (result > 0 && updateVO.getVehicleIds() != null && !updateVO.getVehicleIds().isEmpty()) { |
| | |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public int changeTaskStatus(Long taskId, TaskStatus newStatus, String remark) { |
| | | return changeTaskStatusWithLocation(taskId, newStatus, remark, null); |
| | | } |
| | |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public int changeTaskStatusWithLocation(Long taskId, TaskStatus newStatus, String remark, SysTaskLog locationLog) { |
| | | SysTask oldTask = sysTaskMapper.selectSysTaskByTaskId(taskId); |
| | | if (oldTask == null) { |
| | |
| | | .map(SysTaskAssignee::getUserId) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | Long userId=SecurityUtils.getUserId(); |
| | | Double lng=locationLog==null?null: locationLog.getLongitude(); |
| | | Double lat=locationLog==null?null: locationLog.getLatitude(); |
| | | String address=locationLog==null?null: locationLog.getLocationAddress(); |
| | | eventPublisher.publishEvent(new TaskStatusChangedEvent( |
| | | this, |
| | | oldTask.getTaskId(), |
| | |
| | | oldTaskStatus.getInfo(), |
| | | newStatus.getInfo(), |
| | | assigneeIds, |
| | | oldTask.getCreatorId() |
| | | oldTask.getCreatorId(), |
| | | userId, |
| | | lng, lat, |
| | | address |
| | | |
| | | )); |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | if (createVO.getHospitalOut().getLongitude() != null) { |
| | | existingInfo.setHospitalOutLongitude(createVO.getHospitalOut().getLongitude()); |
| | | } |
| | | if (createVO.getHospitalOut().getLatitude() != null) { |
| | | existingInfo.setHospitalOutLatitude(createVO.getHospitalOut().getLatitude()); |
| | | } |
| | | |
| | | } |
| | | |
| | | // 更新转入医院信息 |
| | |
| | | } |
| | | } |
| | | } |
| | | if (createVO.getHospitalIn().getLongitude() != null) { |
| | | existingInfo.setHospitalInLongitude(createVO.getHospitalIn().getLongitude()); |
| | | } |
| | | if (createVO.getHospitalIn().getLatitude() != null) { |
| | | existingInfo.setHospitalInLatitude(createVO.getHospitalIn().getLatitude()); |
| | | } |
| | | |
| | | } |
| | | |
| | | // 更新费用信息 |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 检查任务是否可以出发 |
| | | * 检查: |
| | | * 1. 车辆是否有未完成的任务 |
| | | * 2. 执行人员是否有未完成的任务 |
| | | * |
| | | * @param taskId 任务ID |
| | | * @return AjaxResult 校验结果 |
| | | */ |
| | | @Override |
| | | public com.ruoyi.common.core.domain.AjaxResult checkTaskCanDepart(Long taskId) { |
| | | // 获取任务详情 |
| | | SysTask task = this.getTaskDetail(taskId); |
| | | if (task == null) { |
| | | return com.ruoyi.common.core.domain.AjaxResult.error("任务不存在"); |
| | | } |
| | | |
| | | List<Map<String, Object>> conflicts = new ArrayList<>(); |
| | | |
| | | // 1. 检查车辆是否有未完成的任务 |
| | | List<SysTaskVehicle> taskVehicles = task.getAssignedVehicles(); |
| | | if (taskVehicles != null && !taskVehicles.isEmpty()) { |
| | | for (SysTaskVehicle taskVehicle : taskVehicles) { |
| | | Long vehicleId = taskVehicle.getVehicleId(); |
| | | List<SysTask> vehicleActiveTasks = this.checkVehicleActiveTasks(vehicleId); |
| | | |
| | | // 过滤掉当前任务本身 |
| | | vehicleActiveTasks = vehicleActiveTasks.stream() |
| | | .filter(t -> !t.getTaskId().equals(taskId)) |
| | | .collect(Collectors.toList()); |
| | | |
| | | if (!vehicleActiveTasks.isEmpty()) { |
| | | for (SysTask activeTask : vehicleActiveTasks) { |
| | | Map<String, Object> conflict = new HashMap<>(); |
| | | conflict.put("type", "vehicle"); |
| | | conflict.put("vehicleNo", taskVehicle.getVehicleNo()); |
| | | conflict.put("taskId", activeTask.getTaskId()); |
| | | conflict.put("taskCode", activeTask.getTaskCode()); |
| | | conflict.put("taskStatus", activeTask.getTaskStatus()); |
| | | conflict.put("message", String.format("车辆 %s 尚有未完成的任务 %s,请先完成", |
| | | taskVehicle.getVehicleNo(), activeTask.getTaskCode())); |
| | | conflicts.add(conflict); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 2. 检查执行人员是否有未完成的任务 |
| | | List<SysTaskAssignee> assignees = task.getAssignees(); |
| | | if (assignees != null && !assignees.isEmpty()) { |
| | | for (SysTaskAssignee assignee : assignees) { |
| | | Long userId = assignee.getUserId(); |
| | | |
| | | // 查询该执行人的所有正在进行中的任务(排除PENDING、COMPLETED、CANCELLED) |
| | | List<SysTask> userActiveTasks = this.selectMyTasks(userId).stream() |
| | | .filter(t -> !TaskStatus.PENDING.getCode().equals(t.getTaskStatus()) |
| | | && !TaskStatus.COMPLETED.getCode().equals(t.getTaskStatus()) |
| | | && !TaskStatus.CANCELLED.getCode().equals(t.getTaskStatus()) |
| | | && !t.getTaskId().equals(taskId)) // 过滤掉当前任务 |
| | | .collect(Collectors.toList()); |
| | | |
| | | if (!userActiveTasks.isEmpty()) { |
| | | for (SysTask activeTask : userActiveTasks) { |
| | | Map<String, Object> conflict = new HashMap<>(); |
| | | conflict.put("type", "assignee"); |
| | | conflict.put("userName", assignee.getUserName()); |
| | | conflict.put("taskId", activeTask.getTaskId()); |
| | | conflict.put("taskCode", activeTask.getTaskCode()); |
| | | conflict.put("taskStatus", activeTask.getTaskStatus()); |
| | | conflict.put("message", String.format("执行人 %s 尚有正在进行中的任务 %s,请先完成", |
| | | assignee.getUserName(), activeTask.getTaskCode())); |
| | | conflicts.add(conflict); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 返回结果 |
| | | Map<String, Object> result = new HashMap<>(); |
| | | result.put("valid", conflicts.isEmpty()); |
| | | result.put("conflicts", conflicts); |
| | | |
| | | return com.ruoyi.common.core.domain.AjaxResult.success(result); |
| | | } |
| | | |
| | | } |