diff --git a/src/main/java/com/supervision/job/XxlJobTask.java b/src/main/java/com/supervision/job/XxlJobTask.java index bfee574..1bf121f 100644 --- a/src/main/java/com/supervision/job/XxlJobTask.java +++ b/src/main/java/com/supervision/job/XxlJobTask.java @@ -87,6 +87,10 @@ public class XxlJobTask { log.info("任务状态为已取消,任务不可执行,任务ID: 【{}】", taskId); executable = false; break; + case TASK_STATUS_FAIL: + log.info("任务状态为失败,任务不可执行,任务ID: 【{}】", taskId); + executable = false; + break; default: break; } @@ -108,7 +112,6 @@ public class XxlJobTask { } log.info("【图推理】任务开始。任务ID: 【{}】", taskId); - // TODO: 笔录处理 break; case TYPE_STRUCTURAL_REASONING: log.info("【结构推理】任务开始。任务ID: 【{}】", taskId); diff --git a/src/main/java/com/supervision/police/dto/taskRecord/TaskRecordVo.java b/src/main/java/com/supervision/police/dto/taskRecord/TaskRecordVo.java index f60a8cb..d8387e1 100644 --- a/src/main/java/com/supervision/police/dto/taskRecord/TaskRecordVo.java +++ b/src/main/java/com/supervision/police/dto/taskRecord/TaskRecordVo.java @@ -9,5 +9,4 @@ public class TaskRecordVo { private String evidenceId; private String promptId; private String type; - private String status; } diff --git a/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java b/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java index 738af2f..76f7b5a 100644 --- a/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java @@ -18,6 +18,7 @@ import com.supervision.police.service.*; import com.supervision.police.vo.TaskInfoReqVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -57,7 +58,91 @@ public class TaskRecordServiceImpl extends ServiceImpl modelCases = this.getModelCases(taskRecordVo, taskRecord); + if (!CollUtil.isEmpty(modelCases)) { + for (ModelCase modelCase : modelCases) { + String caseId = modelCase.getId(); + List ids = this.getIds(taskRecordVo, taskRecord, prompt, caseId); + if (!ids.isEmpty()) { + this.invokeXxlJob(taskRecordVo, taskRecord, caseId, ids); + } else { + log.info("案件【{}】没有笔录", caseId); + } + } + } else { + log.info("查无案件"); + } + } catch (Exception e) { + taskRecord.setStatus(TASK_STATUS_FAIL); + super.updateById(taskRecord); + log.error("任务执行失败", e); + } + } + + /** + * 根据任务类型获取笔录或证据ID + * + * @param taskRecordVo 任务记录 + * @param taskRecord 任务 + * @param prompt 提示词 + * @param caseId 案件ID + * @return 笔录或证据ID + */ + private @NotNull List getIds(TaskRecordVo taskRecordVo, TaskRecord taskRecord, NotePrompt prompt, String caseId) { + //查出当前案件相关笔录或证据 + List ids = new ArrayList<>(); + //如果类型为指定笔录或证据,直接取传入的id + if (TASK_TYPE_SPECIFIED_RECORD.equals(taskRecord.getType())) { + ids = List.of(taskRecordVo.getRecordId().split(",")); + } else if (TASK_TYPE_SPECIFIED_EVIDENCE.equals(taskRecord.getType())) { + ids = List.of(taskRecordVo.getEvidenceId().split(",")); + } else { + //如果是案件维度,根据案件ID查找笔录或证据 + if (TYPE_GRAPH_REASONING.equals(prompt.getType())) { + ids = noteRecordService.lambdaQuery().eq(NoteRecord::getCaseId, caseId).eq(NoteRecord::getDataStatus, DataStatus.AVAILABLE.getCode()).list().stream().map(NoteRecord::getId).toList(); + } else if (TYPE_STRUCTURAL_REASONING.equals(prompt.getType())) { + ids = caseEvidenceService.lambdaQuery().eq(CaseEvidence::getCaseId, caseId).list().stream().map(CaseEvidence::getId).toList(); + } + } + return ids; + } + + /** + * 调用xxl-job执行任务 + * + * @param taskRecordVo 任务记录 + * @param taskRecord 任务 + * @param caseId 案件ID + * @param ids 笔录或证据ID + */ + private void invokeXxlJob(TaskRecordVo taskRecordVo, TaskRecord taskRecord, String caseId, List ids) { + TaskCaseRecord taskCaseRecord = new TaskCaseRecord(); + taskCaseRecord.setTaskRecordId(taskRecord.getId()); + taskCaseRecord.setCaseId(caseId); + taskCaseRecord.setWaitingId(ids.stream().reduce((a, b) -> a + "," + b).orElse("")); + taskCaseRecord.setStatus(TaskRecordConstants.TASK_STATUS_WAITING); + taskCaseRecordService.save(taskCaseRecord); + for (String id : ids) { + Map params = new HashMap<>(); + params.put("taskId", taskRecord.getId()); + params.put("caseId", caseId); + params.put("executeId", id); + params.put("promptId", taskRecordVo.getPromptId()); + //map转String作为参数 + xxlJobService.executeTaskByJobHandler(TASK_NAME_PROMPT_EXTRACT_TASK, new JSONObject(params).toString()); + } + } + + /** + * 根据任务类型查找案件 + * + * @param taskRecordVo 任务记录 + * @param taskRecord 任务 + * @return 案件列表 + */ + private List getModelCases(TaskRecordVo taskRecordVo, TaskRecord taskRecord) { List modelCases; LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ModelCase::getDataStatus, DataStatus.AVAILABLE.getCode()); @@ -68,49 +153,10 @@ public class TaskRecordServiceImpl extends ServiceImpl ids = new ArrayList<>(); - //如果类型为指定笔录或证据,直接取传入的id - if (TASK_TYPE_SPECIFIED_RECORD.equals(taskRecord.getType())) { - ids = List.of(taskRecordVo.getRecordId().split(",")); - } else if (TASK_TYPE_SPECIFIED_EVIDENCE.equals(taskRecord.getType())) { - ids = List.of(taskRecordVo.getEvidenceId().split(",")); - } else { - //如果是案件维度,根据案件ID查找笔录或证据 - if (TYPE_GRAPH_REASONING.equals(prompt.getType())) { - ids = noteRecordService.lambdaQuery().eq(NoteRecord::getCaseId, caseId).eq(NoteRecord::getDataStatus, DataStatus.AVAILABLE.getCode()).list().stream().map(NoteRecord::getId).toList(); - } else if (TYPE_STRUCTURAL_REASONING.equals(prompt.getType())) { - ids = caseEvidenceService.lambdaQuery().eq(CaseEvidence::getCaseId, caseId).list().stream().map(CaseEvidence::getId).toList(); - } - } - if (!ids.isEmpty()) { - TaskCaseRecord taskCaseRecord = new TaskCaseRecord(); - taskCaseRecord.setTaskRecordId(taskRecord.getId()); - taskCaseRecord.setCaseId(caseId); - taskCaseRecord.setWaitingId(ids.stream().reduce((a, b) -> a + "," + b).orElse("")); - taskCaseRecord.setStatus(TaskRecordConstants.TASK_STATUS_WAITING); - taskCaseRecordService.save(taskCaseRecord); - for (String id : ids) { - Map params = new HashMap<>(); - params.put("taskId", taskRecord.getId()); - params.put("caseId", caseId); - params.put("executeId", id); - params.put("promptId", taskRecordVo.getPromptId()); - //map转String作为参数 - xxlJobService.executeTaskByJobHandler(TASK_NAME_PROMPT_EXTRACT_TASK, new JSONObject(params).toString()); - } - } else { - log.info("案件【{}】没有笔录", caseId); - } - } - } else { - log.info("没有找到案件"); - } + return modelCases; } + @Override public IPage queryTaskList(TaskInfoReqVO taskInfo, Integer page, Integer size) { return super.getBaseMapper().queryTaskList(taskInfo, Page.of(page, size));