From 5aac77ec1b91ebdc8c58b6f8c01c840e87598c7a Mon Sep 17 00:00:00 2001
From: xueqingkun <xueqingkun@126.com>
Date: Wed, 25 Dec 2024 14:35:42 +0800
Subject: [PATCH] =?UTF-8?q?1.=20=E6=B7=BB=E5=8A=A0=E6=A1=88=E4=BB=B6?=
 =?UTF-8?q?=E6=89=B9=E5=A4=84=E7=90=86=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../police/controller/ModelController.java    |  3 +-
 .../police/controller/MroController.java      | 44 +++++++++++
 .../police/dto/CaseProcessDTO.java            | 50 ++++++++++++
 .../police/service/ModelService.java          |  2 +
 .../police/service/MroService.java            | 13 ++++
 .../police/service/TaskCaseRecordService.java |  8 +-
 .../police/service/impl/ChatServiceImpl.java  |  6 +-
 .../police/service/impl/ModelServiceImpl.java | 19 +++++
 .../police/service/impl/MroServiceImpl.java   | 76 +++++++++++++++++++
 .../impl/TaskCaseRecordServiceImpl.java       |  9 ++-
 .../police/vo/CaseProcessReqVO.java           | 29 +++++++
 11 files changed, 250 insertions(+), 9 deletions(-)
 create mode 100644 src/main/java/com/supervision/police/controller/MroController.java
 create mode 100644 src/main/java/com/supervision/police/dto/CaseProcessDTO.java
 create mode 100644 src/main/java/com/supervision/police/service/MroService.java
 create mode 100644 src/main/java/com/supervision/police/service/impl/MroServiceImpl.java
 create mode 100644 src/main/java/com/supervision/police/vo/CaseProcessReqVO.java

diff --git a/src/main/java/com/supervision/police/controller/ModelController.java b/src/main/java/com/supervision/police/controller/ModelController.java
index d635431..bd8d8ed 100644
--- a/src/main/java/com/supervision/police/controller/ModelController.java
+++ b/src/main/java/com/supervision/police/controller/ModelController.java
@@ -10,7 +10,6 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 @RestController
@@ -25,7 +24,7 @@ public class ModelController {
     @PostMapping("/analyseCase")
     @Operation(summary = "分析指标")
     public R<?> analyseCase(@RequestBody AnalyseCaseDTO analyseCaseDTO) {
-        return modelService.analyseCase(analyseCaseDTO);
+        return modelService.analyseCaseWrapper(analyseCaseDTO);
     }
 
     @GetMapping("/caseScoreDetail")
diff --git a/src/main/java/com/supervision/police/controller/MroController.java b/src/main/java/com/supervision/police/controller/MroController.java
new file mode 100644
index 0000000..628a827
--- /dev/null
+++ b/src/main/java/com/supervision/police/controller/MroController.java
@@ -0,0 +1,44 @@
+package com.supervision.police.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.supervision.common.domain.R;
+import com.supervision.police.dto.CaseProcessDTO;
+import com.supervision.police.service.MroService;
+import com.supervision.police.vo.CaseProcessReqVO;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @ClassName MroController
+ * @Description Maintenance、Repair and Operations,维护、维修和运营 接口
+ * @Date 2024/12/23 15:09
+ **/
+
+@RestController
+@RequestMapping("/mro")
+@RequiredArgsConstructor
+public class MroController {
+
+    private final MroService mroService;
+
+    @Operation(summary = "查询案件列表")
+    @PostMapping("/caseList")
+    public R<IPage<CaseProcessDTO>> queryCaseList(@RequestBody CaseProcessReqVO caseProcessReqVO,
+                                                  @RequestParam(required = false, defaultValue = "1") Integer page,
+                                                  @RequestParam(required = false, defaultValue = "20") Integer size) {
+
+        IPage<CaseProcessDTO> list = mroService.queryCaseList(caseProcessReqVO, page, size);
+        return R.ok(list);
+    }
+
+    @Operation(summary = "案件一键分析")
+    @PostMapping("/caseAnalysis")
+    public R<String> analysisCase(@RequestBody List<String> caseIds) {
+        mroService.analysisCase(caseIds);
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/supervision/police/dto/CaseProcessDTO.java b/src/main/java/com/supervision/police/dto/CaseProcessDTO.java
new file mode 100644
index 0000000..70e356b
--- /dev/null
+++ b/src/main/java/com/supervision/police/dto/CaseProcessDTO.java
@@ -0,0 +1,50 @@
+package com.supervision.police.dto;
+
+import cn.hutool.core.util.StrUtil;
+import com.supervision.police.domain.ModelCase;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class CaseProcessDTO {
+
+    private String caseId;
+
+    private String caseName;
+
+    /**
+     * 分析结果  0:未分析 1:正在分析 2:分析成功  3:分析失败
+     */
+    private String analysisStatus;
+
+    /**
+     * 分析成功时间
+     */
+    private LocalDateTime analysisSuccessTime;
+
+    /**
+     * 认定结果 1:取证不全面  2:认定不一致  3: 认定一致
+     */
+    private String identifyResult;
+
+
+    /**
+     * 是否可以分析 0:不可以分析  1:可以分析
+     */
+    private String enableAnalyse;
+
+    public CaseProcessDTO() {
+    }
+
+    public CaseProcessDTO(ModelCase modelCase) {
+        if (null == modelCase){
+            return;
+        }
+        this.caseId = modelCase.getId();
+        this.caseName = modelCase.getCaseName();
+        this.analysisStatus = StrUtil.toString(modelCase.getCaseAnalysisStatus());
+        this.analysisSuccessTime = modelCase.getCaseAnalysisSuccessTime();
+        this.identifyResult = modelCase.getIdentifyResult();
+    }
+}
diff --git a/src/main/java/com/supervision/police/service/ModelService.java b/src/main/java/com/supervision/police/service/ModelService.java
index b160fe1..7017638 100644
--- a/src/main/java/com/supervision/police/service/ModelService.java
+++ b/src/main/java/com/supervision/police/service/ModelService.java
@@ -11,6 +11,8 @@ public interface ModelService {
 
     R<?> analyseCase(AnalyseCaseDTO analyseCaseDTO);
 
+    R<?> analyseCaseWrapper(AnalyseCaseDTO analyseCaseDTO);
+
 
     /**
      * 获取案件详情
diff --git a/src/main/java/com/supervision/police/service/MroService.java b/src/main/java/com/supervision/police/service/MroService.java
new file mode 100644
index 0000000..65e734f
--- /dev/null
+++ b/src/main/java/com/supervision/police/service/MroService.java
@@ -0,0 +1,13 @@
+package com.supervision.police.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.supervision.police.dto.CaseProcessDTO;
+import com.supervision.police.vo.CaseProcessReqVO;
+
+import java.util.List;
+
+public interface MroService {
+    IPage<CaseProcessDTO> queryCaseList(CaseProcessReqVO caseProcessReqVO, Integer page, Integer size);
+
+    void analysisCase(List<String> caseIds);
+}
diff --git a/src/main/java/com/supervision/police/service/TaskCaseRecordService.java b/src/main/java/com/supervision/police/service/TaskCaseRecordService.java
index c252aa5..9e31396 100644
--- a/src/main/java/com/supervision/police/service/TaskCaseRecordService.java
+++ b/src/main/java/com/supervision/police/service/TaskCaseRecordService.java
@@ -2,7 +2,7 @@ package com.supervision.police.service;
 
 import com.supervision.police.domain.TaskCaseRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.supervision.police.dto.taskRecord.TaskRecordVo;
+import java.util.List;
 
 /**
 * @author dxy
@@ -11,4 +11,10 @@ import com.supervision.police.dto.taskRecord.TaskRecordVo;
 */
 public interface TaskCaseRecordService extends IService<TaskCaseRecord> {
 
+
+    /**
+     * 查询正在处理的任务列表
+     * @return
+     */
+    List<TaskCaseRecord> queryProcessingTaskList();
 }
diff --git a/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java
index 657db4c..34e110d 100644
--- a/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/ChatServiceImpl.java
@@ -133,7 +133,7 @@ public class ChatServiceImpl implements ChatService {
                         log.info("案件【{}】尚未执行模型分析,现在开始执行", modelCase.getCaseName());
                         AnalyseCaseDTO analyseCaseDTO = new AnalyseCaseDTO();
                         analyseCaseDTO.setCaseId(caseId);
-                        modelService.analyseCase(analyseCaseDTO);
+                        modelService.analyseCaseWrapper(analyseCaseDTO);
                     }
                     answerMap = JSON.parseObject(JSON.toJSONString(modelService.caseScoreDetail(caseId)), Map.class);
                 } else if (INTENT_TYPE_TEXT_CASE_OVERVIEW.equals(query)) {
@@ -283,7 +283,7 @@ public class ChatServiceImpl implements ChatService {
             log.info("案件【{}】尚未执行模型分析,现在开始执行", modelCase.getCaseName());
             AnalyseCaseDTO analyseCaseDTO = new AnalyseCaseDTO();
             analyseCaseDTO.setCaseId(caseId);
-            modelService.analyseCase(analyseCaseDTO);
+            modelService.analyseCaseWrapper(analyseCaseDTO);
         }
         indexDetailPage = modelCaseService.getIndexDetail(indexResultQuery, 1, 1);
         if (!indexDetailPage.getRecords().isEmpty()) {
@@ -341,7 +341,7 @@ public class ChatServiceImpl implements ChatService {
                     log.info("案件【{}】尚未执行模型分析,现在开始执行", modelCase.getCaseName());
                     AnalyseCaseDTO analyseCaseDTO = new AnalyseCaseDTO();
                     analyseCaseDTO.setCaseId(caseId);
-                    modelService.analyseCase(analyseCaseDTO);
+                    modelService.analyseCaseWrapper(analyseCaseDTO);
                 }
                 answerMap = JSON.parseObject(JSON.toJSONString(modelService.caseScoreDetail(caseId)), Map.class);
                 break;
diff --git a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java
index 09738dc..280a0ad 100644
--- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java
@@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.deepoove.poi.XWPFTemplate;
+import com.supervision.common.constant.Constants;
 import com.supervision.common.constant.IndexRuleConstants;
 import com.supervision.common.domain.R;
 import com.supervision.common.utils.StringUtils;
@@ -34,6 +35,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.neo4j.driver.Driver;
 import org.neo4j.driver.Result;
 import org.neo4j.driver.Session;
+import org.springframework.aop.framework.AopContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.ResourceLoader;
@@ -253,6 +255,23 @@ public class ModelServiceImpl implements ModelService {
         return R.ok();
     }
 
+    @Override
+    public R<?> analyseCaseWrapper(AnalyseCaseDTO analyseCaseDTO) {
+        Assert.notEmpty(analyseCaseDTO.getCaseId(), "案件ID不能为空");
+        caseStatusManageService.whenAnalyseCaseStart(analyseCaseDTO.getCaseId());
+        try {
+            ModelService modelService = (ModelService) AopContext.currentProxy();
+            R<?> result =modelService.analyseCase(analyseCaseDTO);
+            if (Constants.SUCCESS != result.getCode()){
+                caseStatusManageService.whenAnalyseCaseFail(analyseCaseDTO.getCaseId());
+            }
+            return result;
+        } catch (Exception e) {
+            caseStatusManageService.whenAnalyseCaseFail(analyseCaseDTO.getCaseId());
+            return R.fail(e.getMessage());
+        }
+    }
+
 
     private void removeAtomicResultWithNoReference(String modelIndexId, List<ModelIndexAtomicRelation> modelIndexAtomicRelations,
                                                    List<ModelAtomicResult> modelAtomicResultList) {
diff --git a/src/main/java/com/supervision/police/service/impl/MroServiceImpl.java b/src/main/java/com/supervision/police/service/impl/MroServiceImpl.java
new file mode 100644
index 0000000..87d7a26
--- /dev/null
+++ b/src/main/java/com/supervision/police/service/impl/MroServiceImpl.java
@@ -0,0 +1,76 @@
+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.service.ModelCaseService;
+import com.supervision.police.service.ModelService;
+import com.supervision.police.service.MroService;
+import com.supervision.police.service.TaskCaseRecordService;
+import com.supervision.police.vo.CaseProcessReqVO;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+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;
+    @Override
+    public IPage<CaseProcessDTO> queryCaseList(CaseProcessReqVO caseProcessReqVO, Integer page, Integer size) {
+
+        Page<ModelCase> 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<String> 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<String> caseIds) {
+
+        Assert.notEmpty(caseIds, "案件id不能为空!");
+        List<ModelCase> 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);
+        }
+    }
+
+}
diff --git a/src/main/java/com/supervision/police/service/impl/TaskCaseRecordServiceImpl.java b/src/main/java/com/supervision/police/service/impl/TaskCaseRecordServiceImpl.java
index e25badd..4e9540e 100644
--- a/src/main/java/com/supervision/police/service/impl/TaskCaseRecordServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/TaskCaseRecordServiceImpl.java
@@ -3,13 +3,12 @@ package com.supervision.police.service.impl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.supervision.common.constant.TaskRecordConstants;
 import com.supervision.police.domain.TaskCaseRecord;
-import com.supervision.police.domain.TaskRecord;
-import com.supervision.police.dto.taskRecord.TaskRecordVo;
 import com.supervision.police.service.TaskCaseRecordService;
 import com.supervision.police.mapper.TaskCaseRecordMapper;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
 * @author dxy
 * @description 针对表【task_case_record】的数据库操作Service实现
@@ -18,6 +17,10 @@ import org.springframework.stereotype.Service;
 @Service
 public class TaskCaseRecordServiceImpl extends ServiceImpl<TaskCaseRecordMapper, TaskCaseRecord>
     implements TaskCaseRecordService{
+    @Override
+    public List<TaskCaseRecord> queryProcessingTaskList() {
+        return super.lambdaQuery().eq(TaskCaseRecord::getStatus, TaskRecordConstants.TASK_STATUS_PROCESSING).list();
+    }
 }
 
 
diff --git a/src/main/java/com/supervision/police/vo/CaseProcessReqVO.java b/src/main/java/com/supervision/police/vo/CaseProcessReqVO.java
new file mode 100644
index 0000000..3739d04
--- /dev/null
+++ b/src/main/java/com/supervision/police/vo/CaseProcessReqVO.java
@@ -0,0 +1,29 @@
+package com.supervision.police.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CaseProcessReqVO {
+
+    /**
+     * 案件名称
+     */
+    private String caseName;
+
+    /**
+     * 认定结果
+     */
+    private List<String> identifyResult;
+
+    /**
+     * 分析状态
+     */
+    private List<String> analysisStatus;
+
+    /**
+     * 排序字段 asc/desc
+     */
+    private String sort;
+}