From a48d5a7ef1578c0cafccb475c2b63c3705ca6079 Mon Sep 17 00:00:00 2001 From: yaxin Date: Wed, 25 Dec 2024 17:40:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=BB=BB=E5=8A=A1=E8=A7=A6?= =?UTF-8?q?=E5=8F=91xxl-job=20task=E5=A4=96=E5=B1=82=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/TaskRecordConstants.java | 3 - .../java/com/supervision/job/XxlJobTask.java | 91 ++++++++++++++----- .../police/domain/TaskCaseRecord.java | 5 - .../supervision/police/domain/TaskRecord.java | 10 +- .../police/dto/taskRecord/TaskRecordVo.java | 2 +- .../service/impl/TaskRecordServiceImpl.java | 50 ++++++++-- 6 files changed, 115 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/supervision/common/constant/TaskRecordConstants.java b/src/main/java/com/supervision/common/constant/TaskRecordConstants.java index d277886..fe87e8e 100644 --- a/src/main/java/com/supervision/common/constant/TaskRecordConstants.java +++ b/src/main/java/com/supervision/common/constant/TaskRecordConstants.java @@ -19,7 +19,4 @@ public class TaskRecordConstants { public static final String TASK_STATUS_CANCELED = "3"; public static final String TASK_STATUS_SUCCESS = "4"; public static final String TASK_STATUS_FAIL = "5"; - // 任务提取方式 - public static final String TASK_EXTRACT_RECORD = "record"; - public static final String TASK_EXTRACT_EVIDENCE = "evidence"; } diff --git a/src/main/java/com/supervision/job/XxlJobTask.java b/src/main/java/com/supervision/job/XxlJobTask.java index af8dbc8..432f0e0 100644 --- a/src/main/java/com/supervision/job/XxlJobTask.java +++ b/src/main/java/com/supervision/job/XxlJobTask.java @@ -1,17 +1,31 @@ package com.supervision.job; -import com.supervision.police.service.CaseEvidenceService; +import com.alibaba.fastjson.JSON; +import com.supervision.police.domain.NotePrompt; +import com.supervision.police.domain.TaskCaseRecord; +import com.supervision.police.domain.TaskRecord; +import com.supervision.police.service.*; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Map; + +import static com.supervision.common.constant.NotePromptConstants.TYPE_GRAPH_REASONING; +import static com.supervision.common.constant.NotePromptConstants.TYPE_STRUCTURAL_REASONING; +import static com.supervision.common.constant.TaskRecordConstants.*; + @Slf4j @Component +@RequiredArgsConstructor public class XxlJobTask { - @Autowired private CaseEvidenceService caseEvidenceService; + private TaskRecordService taskRecordService; + private TaskCaseRecordService taskCaseRecordService; + private ModelCaseService modelCaseService; + private NotePromptService notePromptService; /** * 睡觉通知 @@ -30,34 +44,61 @@ public class XxlJobTask { } /** - * 根据任务提取证据 + * 提取任务 */ - @XxlJob("extractEvidenceByTask") + @XxlJob("extractTask") public void extractEvidenceByTask() { - String param = XxlJobHelper.getJobParam(); - log.info("【证据解析】任务开始。ID: 【{}】", param); + Map map = JSON.parseObject(XxlJobHelper.getJobParam(), Map.class); + log.info("【提取任务】任务开始。参数: 【{}】", map.toString()); + String taskId = map.get("taskId"); + String caseId = map.get("caseId"); + String promptId = map.get("promptId"); + NotePrompt prompt = notePromptService.getById(promptId); + boolean executable = true; try { - caseEvidenceService.evidenceAnalysis(param); + TaskRecord taskRecord = taskRecordService.getById(taskId); + switch (taskRecord.getStatus()) { + case TASK_STATUS_WAITING: + log.info("任务状态为等待中,任务状态更新为处理中,任务ID: 【{}】", taskId); + taskRecord.setStatus(TASK_STATUS_PROCESSING); + taskRecordService.updateById(taskRecord); + break; + case TASK_STATUS_CANCELLING: + log.info("任务状态为取消中,任务状态更新为已取消,任务ID: 【{}】", taskId); + taskRecord.setStatus(TASK_STATUS_CANCELED); + taskRecordService.updateById(taskRecord); + executable = false; + break; + case TASK_STATUS_CANCELED: + log.info("任务状态为已取消,任务不可执行,任务ID: 【{}】", taskId); + executable = false; + break; + default: + break; + } + if (executable) { + TaskCaseRecord taskCaseRecord = taskCaseRecordService.lambdaQuery().eq(TaskCaseRecord::getCaseId, caseId).eq(TaskCaseRecord::getTaskRecordId, taskId).one(); + if (TASK_STATUS_WAITING.equals(taskCaseRecord.getStatus())) { + log.info("任务状态为等待中,任务状态更新为处理中,任务案件ID: 【{}】", taskCaseRecord.getId()); + taskCaseRecord.setStatus(TASK_STATUS_PROCESSING); + taskCaseRecordService.updateById(taskCaseRecord); + } + switch (prompt.getType()) { + case TYPE_GRAPH_REASONING: + // TODO: 笔录处理 + break; + case TYPE_STRUCTURAL_REASONING: + // TODO: 证据处理 + break; + default: + log.error("未知的任务类型"); + break; + } + } } catch (Exception e) { log.error("任务执行失败", e); } finally { - log.info("任务执行完成"); - } - } - - /** - * 根据任务提取笔录 - */ - @XxlJob("extractRecordByTask") - public void extractRecordByTask() { - String param = XxlJobHelper.getJobParam(); - log.info("【证据解析】任务开始。ID: 【{}】", param); - try { - caseEvidenceService.evidenceAnalysis(param); - } catch (Exception e) { - log.error("任务执行失败", e); - } finally { - log.info("任务执行完成"); + log.info("【提取任务】任务结束。"); } } diff --git a/src/main/java/com/supervision/police/domain/TaskCaseRecord.java b/src/main/java/com/supervision/police/domain/TaskCaseRecord.java index 8fcbe53..e8c6207 100644 --- a/src/main/java/com/supervision/police/domain/TaskCaseRecord.java +++ b/src/main/java/com/supervision/police/domain/TaskCaseRecord.java @@ -60,11 +60,6 @@ public class TaskCaseRecord implements Serializable { */ private Date updateTime; - /** - * 提取笔录还是证据 record:笔录 evidence:证据 - */ - private String recordOrEvidence; - @TableField(exist = false) private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/src/main/java/com/supervision/police/domain/TaskRecord.java b/src/main/java/com/supervision/police/domain/TaskRecord.java index 8b5b2fe..67eb71e 100644 --- a/src/main/java/com/supervision/police/domain/TaskRecord.java +++ b/src/main/java/com/supervision/police/domain/TaskRecord.java @@ -26,6 +26,11 @@ public class TaskRecord implements Serializable { */ private String name; + /** + * 提示词ID + */ + private String promptId; + /** * 案件ID,英文逗号分隔 */ @@ -41,11 +46,6 @@ public class TaskRecord implements Serializable { */ private String evidenceId; - /** - * 提取笔录还是证据 record:笔录 evidence:证据 - */ - private String recordOrEvidence; - /** * 0:全部案件 1:部分案件 2:部分笔录 3:部分证据 */ 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 373950a..f60a8cb 100644 --- a/src/main/java/com/supervision/police/dto/taskRecord/TaskRecordVo.java +++ b/src/main/java/com/supervision/police/dto/taskRecord/TaskRecordVo.java @@ -7,7 +7,7 @@ public class TaskRecordVo { private String caseId; private String recordId; private String evidenceId; - private String recordOrEvidence; + 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 0dcc8b6..622aacd 100644 --- a/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/TaskRecordServiceImpl.java @@ -1,35 +1,71 @@ package com.supervision.police.service.impl; +import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.common.constant.TaskRecordConstants; +import com.supervision.constant.DataStatus; +import com.supervision.police.domain.ModelCase; +import com.supervision.police.domain.NotePrompt; +import com.supervision.police.domain.NoteRecord; import com.supervision.police.domain.TaskRecord; import com.supervision.police.dto.taskRecord.TaskRecordVo; -import com.supervision.police.service.TaskCaseRecordService; -import com.supervision.police.service.TaskRecordService; import com.supervision.police.mapper.TaskRecordMapper; +import com.supervision.police.service.*; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.supervision.common.constant.NotePromptConstants.TYPE_GRAPH_REASONING; +import static com.supervision.common.constant.NotePromptConstants.TYPE_STRUCTURAL_REASONING; + /** -* @author dxy -* @description 针对表【task_record】的数据库操作Service实现 -* @createDate 2024-12-24 14:44:43 -*/ + * @author dxy + * @description 针对表【task_record】的数据库操作Service实现 + * @createDate 2024-12-24 14:44:43 + */ @Service @RequiredArgsConstructor public class TaskRecordServiceImpl extends ServiceImpl - implements TaskRecordService{ + implements TaskRecordService { final TaskCaseRecordService taskCaseRecordService; + final ModelCaseService modelCaseService; + final NoteRecordService noteRecordService; + final CaseEvidenceService caseEvidenceService; + final NotePromptService notePromptService; + final XxlJobService xxlJobService; @Override public void executePromptExtractTask(TaskRecordVo taskRecordVo) { TaskRecord taskRecord = new TaskRecord(); BeanUtils.copyProperties(taskRecordVo, taskRecord); save(taskRecord); + NotePrompt prompt = notePromptService.getById(taskRecordVo.getPromptId()); switch (taskRecord.getType()) { case TaskRecordConstants.TASK_TYPE_ALL_CASE: + if (TYPE_GRAPH_REASONING.equals(prompt.getType())) { + //笔录 + List modelCases = modelCaseService.lambdaQuery().eq(ModelCase::getDataStatus, DataStatus.AVAILABLE.getCode()).list(); + for (ModelCase modelCase : modelCases) { + List noteRecords = noteRecordService.lambdaQuery().eq(NoteRecord::getCaseId, modelCase.getId()).list(); + for (NoteRecord noteRecord : noteRecords) { + Map params = new HashMap<>(); + params.put("taskId", taskRecord.getId()); + params.put("caseId", modelCase.getId()); + params.put("executeId", noteRecord.getId()); + params.put("promptId", taskRecordVo.getPromptId()); + //map转String作为参数 + xxlJobService.executeTaskByJobHandler("extractRecordByTask", new JSONObject(params).toString()); + } + } + } else if (TYPE_STRUCTURAL_REASONING.equals(prompt.getType())) { + //证据 + + } break; case TaskRecordConstants.TASK_TYPE_SPECIFIED_CASE: break;