方法提取

异常处理
jinan_dev
yaxin 4 months ago committed by longbao
parent 0e7c6e6b4d
commit 90b4e1f792

@ -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);

@ -9,5 +9,4 @@ public class TaskRecordVo {
private String evidenceId;
private String promptId;
private String type;
private String status;
}

@ -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<TaskRecordMapper, TaskRec
TaskRecord taskRecord = new TaskRecord();
BeanUtils.copyProperties(taskRecordVo, taskRecord);
super.save(taskRecord);
NotePrompt prompt = notePromptService.getById(taskRecordVo.getPromptId());
try {
NotePrompt prompt = notePromptService.getById(taskRecordVo.getPromptId());
List<ModelCase> modelCases = this.getModelCases(taskRecordVo, taskRecord);
if (!CollUtil.isEmpty(modelCases)) {
for (ModelCase modelCase : modelCases) {
String caseId = modelCase.getId();
List<String> 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<String> getIds(TaskRecordVo taskRecordVo, TaskRecord taskRecord, NotePrompt prompt, String caseId) {
//查出当前案件相关笔录或证据
List<String> 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<String> 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<String, String> 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<ModelCase> getModelCases(TaskRecordVo taskRecordVo, TaskRecord taskRecord) {
List<ModelCase> modelCases;
LambdaQueryWrapper<ModelCase> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ModelCase::getDataStatus, DataStatus.AVAILABLE.getCode());
@ -68,49 +153,10 @@ public class TaskRecordServiceImpl extends ServiceImpl<TaskRecordMapper, TaskRec
queryWrapper.eq(ModelCase::getId, taskRecord.getCaseId());
}
modelCases = modelCaseService.list(queryWrapper);
if (!CollUtil.isEmpty(modelCases)) {
for (ModelCase modelCase : modelCases) {
String caseId = modelCase.getId();
//查出当前案件相关笔录或证据
List<String> 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<String, String> 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<TaskInfoDTO> queryTaskList(TaskInfoReqVO taskInfo, Integer page, Integer size) {
return super.getBaseMapper().queryTaskList(taskInfo, Page.of(page, size));

Loading…
Cancel
Save