package com.supervision.police.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.supervision.police.domain.ModelCase; import com.supervision.police.domain.TaskCaseRecord; import com.supervision.police.dto.AnalyseCaseDTO; import com.supervision.police.dto.CaseProcessDTO; import com.supervision.police.dto.TaskInfoDTO; import com.supervision.police.service.*; import com.supervision.police.vo.CaseProcessReqVO; import com.supervision.police.vo.TaskInfoReqVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.HashSet; import java.util.List; import java.util.Set; @Slf4j @Service @RequiredArgsConstructor public class MroServiceImpl implements MroService { private final ModelCaseService modelCaseService; private final ModelService modelService; private final TaskCaseRecordService caseRecordService; private final TaskRecordService taskRecordService; @Override public IPage queryCaseList(CaseProcessReqVO caseProcessReqVO, Integer page, Integer size) { Page paged = modelCaseService.lambdaQuery() .like(StrUtil.isNotEmpty(caseProcessReqVO.getCaseName()), ModelCase::getCaseName, caseProcessReqVO.getCaseName()) .in(CollUtil.isNotEmpty(caseProcessReqVO.getIdentifyResult()), ModelCase::getIdentifyResult, caseProcessReqVO.getIdentifyResult()) .in(CollUtil.isNotEmpty(caseProcessReqVO.getAnalysisStatus()), ModelCase::getCaseAnalysisStatus, caseProcessReqVO.getAnalysisStatus()) .orderBy(true, StrUtil.equalsIgnoreCase(caseProcessReqVO.getSort(), "asc"), ModelCase::getCaseAnalysisSuccessTime) .page(Page.of(page, size)); final Set processCaseIds = new HashSet<>(); if (!paged.getRecords().isEmpty()){ caseRecordService.queryProcessingTaskList().stream().map(TaskCaseRecord::getCaseId).forEach(processCaseIds::add); } return paged.convert(r->{ CaseProcessDTO caseProcessDTO = new CaseProcessDTO(r); caseProcessDTO.setEnableAnalyse(processCaseIds.contains(r.getId()) ? "0" : "1"); return caseProcessDTO; }); } @Override public void analysisCase(List caseIds) { Assert.notEmpty(caseIds, "案件id不能为空!"); List modelCases = modelCaseService.listByIds(caseIds); Assert.notEmpty(modelCases, "案件不存在!"); for (ModelCase modelCase : modelCases) { int caseAnalysisStatus = modelCase.getCaseAnalysisStatus(); if (1 == caseAnalysisStatus) { log.info("案件【{}】正在分析中,跳过", modelCase.getCaseName()); continue; } AnalyseCaseDTO analyseCaseDTO = new AnalyseCaseDTO(); analyseCaseDTO.setCaseId(modelCase.getId()); modelService.analyseCaseWrapper(analyseCaseDTO); } } @Override public IPage queryTaskList(TaskInfoReqVO taskInfoReqVO, Integer page, Integer size) { return taskRecordService.queryTaskList(taskInfoReqVO, page, size); } @Override @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) public Boolean cancelTask(List taskIds) { if (CollUtil.isEmpty(taskIds)){ log.info("cancelTask:取消任务失败,参数为空"); return false; } taskRecordService.cancelTask(taskIds); return true; } @Override @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) public Boolean deleteTask(List taskIds) { if (CollUtil.isEmpty(taskIds)){ log.info("deleteTask:删除任务失败,参数为空"); return false; } taskRecordService.deleteTask(taskIds); return true; } }