wlzboy
2025-12-26 4fdde57a837b47b0a04aa17a7627c21b7425eda2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
@@ -931,6 +931,67 @@
    }
    /**
     * 强制完成任务(指定实际开始时间和结束时间)
     *
     * @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
@@ -1717,6 +1778,19 @@
    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;
    }