Procházet zdrojové kódy

feat: 执行预处理逻辑/虚警抑制/故障诊断

wanggaokun před 1 rokem
rodič
revize
f90d4f20db

+ 1 - 1
als-common/common-core/src/main/java/org/eco/common/core/utils/HttpUtils.java

@@ -202,7 +202,7 @@ public class HttpUtils {
     public static String postJson(String url, Object jsonBody) {
         log.info("请求参数:{}", jsonBody.toString());
         Mono<String> resp = createWebClientWithConnectAndReadTimeOuts().post().uri(url)
-            .contentType(MediaType.APPLICATION_JSON_UTF8).body(Mono.just(jsonBody), Object.class).retrieve()
+            .contentType(MediaType.APPLICATION_JSON).body(Mono.just(jsonBody), Object.class).retrieve()
             .bodyToMono(String.class).timeout(Duration.ofMillis(DEFAULT_REQUEST_TIMEOUT));
         return resp.block();
     }

+ 18 - 2
als-modules/agile-assurance/src/main/java/org/eco/als/controller/AlgorithmController.java

@@ -1,6 +1,7 @@
 package org.eco.als.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.util.StrUtil;
 import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import org.eco.als.domain.bo.AlgorithmBo;
@@ -26,10 +27,25 @@ import org.springframework.web.bind.annotation.RestController;
 public class AlgorithmController {
     @Resource
     private IAlgorithmService algorithmService;
+
     @SaCheckPermission("als:algorithm:execute")
-    @Log(title = "执行算法", businessType = BusinessType.EXECUTE)
+    @Log(title = "执行预处理算法", businessType = BusinessType.EXECUTE)
     @PostMapping("/execute/pro")
     public CommonResult<String> executePro(@Validated @RequestBody AlgorithmBo algorithmBo) {
-        return CommonResult.success(algorithmService.executePro(algorithmBo));
+        return StrUtil.isBlank(algorithmService.executePro(algorithmBo)) ? CommonResult.fail() : CommonResult.success();
+    }
+
+    @SaCheckPermission("als:algorithm:execute")
+    @Log(title = "执行虚警抑制算法", businessType = BusinessType.EXECUTE)
+    @PostMapping("/execute/falseAlarm")
+    public CommonResult<String> executeFalseAlarm(@Validated @RequestBody AlgorithmBo algorithmBo) {
+        return StrUtil.isBlank(algorithmService.executeFalseAlarm(algorithmBo)) ? CommonResult.fail() : CommonResult.success();
+    }
+
+    @SaCheckPermission("als:algorithm:execute")
+    @Log(title = "执行故障诊断算法", businessType = BusinessType.EXECUTE)
+    @PostMapping("/execute/fault")
+    public CommonResult<String> executeFault(@Validated @RequestBody AlgorithmBo algorithmBo) {
+        return StrUtil.isBlank(algorithmService.executeFalseAlarm(algorithmBo)) ? CommonResult.fail() : CommonResult.success();
     }
 }

+ 7 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/AlgorithmBo.java

@@ -6,6 +6,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.eco.common.orm.core.domain.BaseEntity;
 
+import java.util.List;
+
 /**
  * 模型信息业务对象 als_model_t
  *
@@ -39,5 +41,10 @@ public class AlgorithmBo extends BaseEntity {
     @NotNull(message = "数据列不能为空")
     private String[] columnData;
 
+    /**
+     * 警告列表
+     */
+    private Long[] warningIds;
+
 
 }

+ 3 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/service/IAlgorithmService.java

@@ -9,4 +9,7 @@ import org.eco.als.domain.bo.AlgorithmBo;
  */
 public interface IAlgorithmService {
     String executePro(AlgorithmBo algorithmBo);
+
+    String executeFalseAlarm(AlgorithmBo algorithmBo);
+    String executeFault(AlgorithmBo algorithmBo);
 }

+ 135 - 15
als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/AlgorithmService.java

@@ -5,6 +5,7 @@ import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import org.eco.als.domain.Warning;
 import org.eco.als.domain.bo.AlgorithmBo;
 import org.eco.als.domain.bo.PreProcessingBo;
 import org.eco.als.domain.vo.DataImportVo;
@@ -14,8 +15,8 @@ import org.eco.als.service.IAlgorithmService;
 import org.eco.als.service.IDataImportService;
 import org.eco.als.service.IModelService;
 import org.eco.als.service.IPreProcessingService;
+import org.eco.als.service.IWarningService;
 import org.eco.als.utils.CsvUtils;
-import org.eco.common.core.config.EcoConfig;
 import org.eco.common.core.exception.BusinessException;
 import org.eco.common.core.utils.HttpUtils;
 import org.eco.system.domain.vo.SysOssVo;
@@ -24,7 +25,9 @@ import org.springframework.stereotype.Service;
 
 import java.io.File;
 import java.io.InputStream;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -47,6 +50,9 @@ public class AlgorithmService implements IAlgorithmService {
     @Resource
     private IPreProcessingService processingService;
 
+    @Resource
+    private IWarningService warningService;
+
     /**
      * executePro 预处理
      *
@@ -73,18 +79,127 @@ public class AlgorithmService implements IAlgorithmService {
         Map<String, Object> map = new HashMap<>(JSONUtil.parseObj(param));
         try (InputStream inputStream = ossService.getFileStream(dataVo.getOssId())) {
             File file = CsvUtils.excelToFileCsvByColumns(inputStream, algorithmBo.getColumnData());
-            SysOssVo sysOssVo = ossService.upload(file);
+            SysOssVo sysOssVo1 = ossService.upload(file);
+            // 请求
+            map.put("url", sysOssVo1.getUrl());
+            ModelHttpVo httpVo = sendHttp(modelVo, map);
+            PreProcessingBo bo = new PreProcessingBo();
+            if (httpVo != null && httpVo.getStatus() == 200) {
+                File resultFile = CsvUtils.jsonToFileCsv(httpVo.getData(), CsvUtils.extractFilename("model_result"));
+                SysOssVo sysOssVo2 = ossService.upload(resultFile);
+                bo.setOssId(sysOssVo2.getOssId());
+            } else {
+                bo.setStatus("0");
+            }
+            bo.setAircraftNo(dataVo.getAircraftNo()).setSortieNo(dataVo.getSortieNo());
+            processingService.insert(bo);
+            return httpVo != null ? httpVo.getData() : null;
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+        return null;
+    }
+
+    /**
+     * executeFalseAlarm 虚警抑制
+     *
+     * @param algorithmBo 参数
+     * @return java.lang.String
+     **/
+    @Override
+    public String executeFalseAlarm(AlgorithmBo algorithmBo) {
+        // 模型相关信息
+        ModelVo modelVo = modelService.selectById(algorithmBo.getModelId());
+        if (ObjectUtil.isNull(modelVo)) {
+            throw new BusinessException("模型信息为空,请检查!");
+        }
+
+        // 虚警抑制校验警告列表
+        if (ObjectUtil.isNull(algorithmBo.getWarningIds())) {
+            throw new BusinessException("警告信息不能为空,请检查!");
+        }
+        // 警告列表
+        List<Warning> warnings = warningService.listByIds(Arrays.asList(algorithmBo.getWarningIds()));
+
+        warnings.forEach(el -> {
+
+        });
+
+
+
+
+
+        // 数据相关信息
+        DataImportVo dataVo = dataImportService.selectById(algorithmBo.getDataId());
+        if (ObjectUtil.isNull(dataVo)) {
+            throw new BusinessException("数据为空,请检查!");
+        }
+        // 参数
+        String param = algorithmBo.getParam();
+        Map<String, Object> map = new HashMap<>(JSONUtil.parseObj(param));
+        try (InputStream inputStream = ossService.getFileStream(dataVo.getOssId())) {
+            File file = CsvUtils.excelToFileCsvByColumns(inputStream, algorithmBo.getColumnData());
+            SysOssVo sysOssVo1 = ossService.upload(file);
+            // 请求
+            map.put("url", sysOssVo1.getUrl());
+            ModelHttpVo httpVo = sendHttp(modelVo, map);
+            PreProcessingBo bo = new PreProcessingBo();
+            if (httpVo != null && httpVo.getStatus() == 200) {
+                File resultFile = CsvUtils.jsonToFileCsv(httpVo.getData(), CsvUtils.extractFilename("model_result"));
+                SysOssVo sysOssVo2 = ossService.upload(resultFile);
+                bo.setOssId(sysOssVo2.getOssId());
+            } else {
+                bo.setStatus("0");
+            }
+            bo.setAircraftNo(dataVo.getAircraftNo()).setSortieNo(dataVo.getSortieNo());
+            processingService.insert(bo);
+            return httpVo != null ? httpVo.getData() : null;
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+        return null;
+    }
+
+    /**
+     * executeFault 故障诊断
+     *
+     * @param algorithmBo 参数
+     * @return java.lang.String
+     **/
+
+    @Override
+    public String executeFault(AlgorithmBo algorithmBo) {
+        // 模型相关信息
+        ModelVo modelVo = modelService.selectById(algorithmBo.getModelId());
+        if (ObjectUtil.isNull(modelVo)) {
+            throw new BusinessException("模型信息为空,请检查!");
+        }
+
+        // 数据相关信息
+        DataImportVo dataVo = dataImportService.selectById(algorithmBo.getDataId());
+        if (ObjectUtil.isNull(dataVo)) {
+            throw new BusinessException("数据为空,请检查!");
+        }
+        // 参数
+        String param = algorithmBo.getParam();
+        Map<String, Object> map = new HashMap<>(JSONUtil.parseObj(param));
+        try (InputStream inputStream = ossService.getFileStream(dataVo.getOssId())) {
+            File file = CsvUtils.excelToFileCsvByColumns(inputStream, algorithmBo.getColumnData());
+            SysOssVo sysOssVo1 = ossService.upload(file);
             // 请求
-            map.put("url", sysOssVo.getUrl());
+            map.put("url", sysOssVo1.getUrl());
             ModelHttpVo httpVo = sendHttp(modelVo, map);
-            String csvFilePath = "resultData" + CsvUtils.extractFilename("model_result");
-            // 将csv文件持久化到磁盘
-            CsvUtils.jsonToFileCsv(httpVo.getData(), EcoConfig.getUploadPath() + csvFilePath);
-            File resultFile = CsvUtils.jsonToFileCsv(httpVo.getData(), "model_result.csv");
-            sysOssVo = ossService.upload(resultFile);
             PreProcessingBo bo = new PreProcessingBo();
-            bo.setAircraftNo(dataVo.getAircraftNo()).setSortieNo(dataVo.getSortieNo()).setOssId(sysOssVo.getOssId());
+            if (httpVo != null && httpVo.getStatus() == 200) {
+                File resultFile = CsvUtils.jsonToFileCsv(httpVo.getData(), CsvUtils.extractFilename("model_result"));
+                SysOssVo sysOssVo2 = ossService.upload(resultFile);
+                bo.setOssId(sysOssVo2.getOssId());
+            } else {
+                bo.setStatus("0");
+            }
+            bo.setAircraftNo(dataVo.getAircraftNo()).setSortieNo(dataVo.getSortieNo());
             processingService.insert(bo);
+            return httpVo != null ? httpVo.getData() : null;
         } catch (Exception e) {
             log.error(e.getMessage());
         }
@@ -92,11 +207,16 @@ public class AlgorithmService implements IAlgorithmService {
     }
 
     private static ModelHttpVo sendHttp(ModelVo modelVo, Map<String, Object> map) {
-        String result = HttpUtils.postJson(modelVo.getUrl(), map);
-        JSONObject jsonObject = JSONUtil.parseObj(result);
-        String data = jsonObject.getStr("data");
-        String status = jsonObject.getStr("status");
-        String msg = jsonObject.getStr("msg");
-        return ModelHttpVo.builder().data(data).status(Integer.valueOf(status)).msg(msg).build();
+        try {
+            String result = HttpUtils.postJson(modelVo.getUrl(), map);
+            JSONObject jsonObject = JSONUtil.parseObj(result);
+            String data = jsonObject.getStr("data");
+            String status = jsonObject.getStr("status");
+            String msg = jsonObject.getStr("msg");
+            return ModelHttpVo.builder().data(data).status(Integer.valueOf(status)).msg(msg).build();
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw new BusinessException("算法服务连接异常,请联系管理员!");
+        }
     }
 }

+ 1 - 1
als-modules/agile-assurance/src/main/java/org/eco/als/utils/CsvUtils.java

@@ -40,7 +40,7 @@ public class CsvUtils {
      * 编码文件名
      */
     public static final String extractFilename(String fileName) {
-        return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), fileName, Seq.getId(Seq.uploadSeqType),
+        return StringUtils.format("{}_{}.{}", fileName, Seq.getId(Seq.uploadSeqType),
             CSV_TYPE);
     }