| | |
| | | } |
| | | |
| | | /** |
| | | * 强制完成任务(指定实际开始时间和结束时间) |
| | | * |
| | | * @param task 任务信息 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int forceCompleteTask(SysTask task) { |
| | | if (task == null || task.getTaskId() == null) { |
| | | throw new RuntimeException("任务信息不能为空"); |
| | | } |
| | | |
| | | SysTask oldTask = sysTaskMapper.selectSysTaskByTaskId(task.getTaskId()); |
| | | if (oldTask == null) { |
| | | throw new RuntimeException("任务不存在"); |
| | | } |
| | | |
| | | // 校验开始时间和结束时间 |
| | | if (task.getActualStartTime() == null || task.getActualEndTime() == null) { |
| | | throw new RuntimeException("实际开始时间和结束时间不能为空"); |
| | | } |
| | | |
| | | if (task.getActualStartTime().after(task.getActualEndTime())) { |
| | | throw new RuntimeException("结束时间必须大于开始时间"); |
| | | } |
| | | |
| | | // 记录旧状态 |
| | | String oldStatus = oldTask.getTaskStatus(); |
| | | TaskStatus oldTaskStatus = TaskStatus.getByCode(oldStatus); |
| | | |
| | | // 更新任务 |
| | | int result = sysTaskMapper.updateTaskStatus(task); |
| | | |
| | | // 记录操作日志 |
| | | if (result > 0) { |
| | | recordTaskLog(task.getTaskId(), "FORCE_COMPLETE", "强制完成任务", |
| | | oldStatus, task.getTaskStatus(), |
| | | SecurityUtils.getUserId(), SecurityUtils.getUsername()); |
| | | |
| | | // 发布任务状态变更事件 |
| | | TaskStatus newTaskStatus = TaskStatus.getByCode(task.getTaskStatus()); |
| | | eventPublisher.publishEvent(new TaskStatusChangedEvent( |
| | | this, |
| | | task.getTaskId(), |
| | | oldTask.getTaskCode(), |
| | | oldStatus, |
| | | task.getTaskStatus(), |
| | | oldTaskStatus != null ? oldTaskStatus.getInfo() : "未知", |
| | | newTaskStatus != null ? newTaskStatus.getInfo() : "未知", |
| | | null, // assigneeIds |
| | | SecurityUtils.getUserId(), |
| | | SecurityUtils.getUserId(), |
| | | null, // longitude |
| | | null, // latitude |
| | | null // address |
| | | )); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 变更任务状态(含GPS位置信息) |
| | | * |
| | | * @param taskId 任务ID |
| | |
| | | public AjaxResult cancelAssigneeReady(Long taskId, Long userId) { |
| | | return sysTaskAssigneeService.cancelAssigneeReady(taskId, userId); |
| | | } |
| | | |
| | | /** |
| | | * 检查任务是否重复(根据联系人电话和创建日期) |
| | | * |
| | | * @param phone 联系人电话 |
| | | * @param createDate 任务创建日期(格式:YYYY-MM-DD) |
| | | * @return true-存在重复,false-不重复 |
| | | */ |
| | | @Override |
| | | public boolean checkTaskDuplicate(String phone, String createDate) { |
| | | int count = sysTaskMapper.countTaskByPhoneAndDate(phone, createDate); |
| | | return count > 0; |
| | | } |
| | | |
| | | |
| | | |