Переглянути джерело

执行模型后 保存对应的模型数据

wanggaokun 1 рік тому
батько
коміт
7195e0125f

+ 2 - 1
PHM-admin/phm-manage/src/main/java/com/phm/manage/controller/ModelApiController.java

@@ -2,6 +2,7 @@ package com.phm.manage.controller;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -26,7 +27,7 @@ public class ModelApiController extends BaseController {
     private IModelService modelService;
 
     @PostMapping("/execute")
-    public CommonResult<String> executeModel(ModelRequest modelRequest) {
+    public CommonResult<String> executeModel(@RequestBody ModelRequest modelRequest) {
         if (ObjectUtil.isEmpty(modelRequest)) {
             return CommonResult.error("模型参数,不能为空");
         }

+ 1 - 1
PHM-admin/phm-manage/src/main/java/com/phm/manage/controller/ModelInfoController.java

@@ -71,7 +71,7 @@ public class ModelInfoController extends BaseController {
     /**
      * 新增模型
      */
-    // @PreAuthorize("@ss.hasPermi('manage:model:add')")
+    @PreAuthorize("@ss.hasPermi('manage:model:add')")
     @Log(title = "模型信息", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody ModelInfo modelInfo) {

+ 7 - 1
PHM-admin/phm-manage/src/main/java/com/phm/manage/domain/dto/ModelRequest.java

@@ -17,6 +17,12 @@ public class ModelRequest {
     private String sortieNo;
 
     // 批次号
-    private String batchNo;
+    private long batchNo;
+
+    // 选择的数据类型
+    private Integer dataType;
+
+    // 选择的数据类型
+    private long dataId;
 
 }

+ 36 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/enums/DataTypeEnum.java

@@ -0,0 +1,36 @@
+package com.phm.manage.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Description 模型类型
+ *
+ * @Author WGK
+ * @Date 2023/9/6 15:19
+ */
+@AllArgsConstructor
+@Getter
+public enum DataTypeEnum {
+
+    /*
+     * 虚警抑制模型
+     */
+    FALSE_ALARM("虚警抑制结果", "FALSE_ALARM"),
+
+    /*
+     * 地面诊断模型
+     */
+    DIAGNOSIS("地面诊断结果", "GROUND_DIAGNOSIS"),
+
+    /*
+     * 深度隔离模型
+     */
+    DEEP_ISOLATION("深度隔离结果", "DEEP_ISOLATION");
+
+
+    private final String name;
+
+    private final String type;
+
+}

+ 73 - 13
PHM-admin/phm-manage/src/main/java/com/phm/manage/service/impl/ModelServiceImpl.java

@@ -1,5 +1,6 @@
 package com.phm.manage.service.impl;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
@@ -9,17 +10,28 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.phm.common.config.PHMConfig;
+import com.phm.common.constant.Constants;
+import com.phm.common.exception.GlobalException;
 import com.phm.common.utils.file.FileUploadUtils;
+import com.phm.common.utils.ip.IpUtils;
+import com.phm.common.utils.uuid.Seq;
 import com.phm.manage.domain.ModelInfo;
+import com.phm.manage.domain.SortieParameter;
 import com.phm.manage.domain.dto.ModelRequest;
 import com.phm.manage.mapper.ModelInfoMapper;
 import com.phm.manage.service.IModelService;
+import com.phm.manage.service.ISortieParameterService;
 import com.phm.manage.util.CsvUtils;
+import com.phm.manage.util.FileUtil;
 import com.phm.manage.util.HttpClientUtils;
 import com.phm.manage.util.SnowFlakeIdGenerator;
 
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * 深度隔离模型Service业务层处理
@@ -28,6 +40,7 @@ import cn.hutool.json.JSONUtil;
  * @date 2023-08-22
  */
 @Service
+@Slf4j
 public class ModelServiceImpl implements IModelService {
 
     @Autowired
@@ -35,6 +48,9 @@ public class ModelServiceImpl implements IModelService {
     @Autowired
     private SnowFlakeIdGenerator snowFlakeIdGenerator;
 
+    @Autowired
+    private ISortieParameterService sortieParameterService;
+
     @Override
     public ModelInfo selectModelById(Long id) {
         return modelInfoMapper.selectModelById(id);
@@ -68,30 +84,74 @@ public class ModelServiceImpl implements IModelService {
 
     @Override
     public String executeModel(ModelRequest modelRequest) {
+
         // 查询对应模型参数
         ModelInfo modelInfo = modelInfoMapper.selectModelById(modelRequest.getModelId());
-        // 模型参数
-        String modelParms = modelInfo.getModelParms();
-        // 数据参数
-        String dataParms = modelInfo.getDataParms();
-        // TODO 根据数据参数获取数据,生成csv在文件,返回csv文件服务器路径
-
-        // 上传文件路径
-        String filePath = PHMConfig.getCsvFilePath() + CsvUtils.MODEL_DATA_PATH;
-        // 上传并返回新文件名称
+        if (ObjectUtil.isEmpty(modelInfo)) {
+            throw new GlobalException("模型参数信息为空,请检查!");
+        }
+        // TODO 模型参数
+        Map<String, String> parmsMap = getParmsMap(modelInfo);
+        SortieParameter sortieParameter = sortieParameterService.selectSortieParameterById(modelRequest.getDataId());
+        if (ObjectUtil.isEmpty(sortieParameter)) {
+            throw new GlobalException("选择的架次数据为空,请检查!");
+        }
+        String url;
         try {
-            String fileName = FileUploadUtils.upload(filePath, null);
+            url = getFileUrl(modelInfo.getDataParms(), sortieParameter.getDataPath());
         } catch (IOException e) {
-            throw new RuntimeException(e);
+            log.error(e.getMessage());
+            throw new GlobalException("上传文件失败");
         }
         Map<String, String> parms = new HashMap<>();
-        parms.put("data_url", "http://127.0.0.1:8080/profile/upload/2023/11/13/origin.csv");
+        parms.put("data_url", url);
         String result = HttpClientUtils.postJson(modelInfo.getUrl(), parms);
         JSONObject jsonObject = JSONUtil.parseObj(result);
         String jsonString = jsonObject.getStr("data");
         // CSV文件路径
-        String csvFilePath = PHMConfig.getCsvFilePath() + CsvUtils.RESULT_DATA_PATH + "result";
+        String csvFilePath = PHMConfig.getCsvFilePath() + CsvUtils.RESULT_DATA_PATH + "model_result"
+            + Seq.getId(Seq.uploadSeqType) + ".csv";
         CsvUtils.jsonToFileCsv(jsonString, csvFilePath);
+        SortieParameter parameter = new SortieParameter();
+        parameter.setDataPath(csvFilePath).setSortieNo(sortieParameter.getSortieNo())
+            .setBatchNo(IdUtil.getSnowflakeNextIdStr());
+        sortieParameterService.insertSortieParameter(parameter);
         return jsonString;
+
+    }
+
+    private static Map<String, String> getParmsMap(ModelInfo modelInfo) {
+        String modelParms = modelInfo.getModelParms();
+        if (ObjectUtil.isEmpty(modelParms)) {
+            return new HashMap<>();
+        }
+        JSONArray modelParamsArray = new JSONArray(modelParms);
+        Map<String, String> parmsMap = new HashMap<>();
+        for (Object obj : modelParamsArray) {
+            if (obj instanceof JSONObject) {
+                JSONObject jsonObj = (JSONObject)obj;
+                String name = jsonObj.getStr("name");
+                String value = jsonObj.getStr("value");
+                if (ObjectUtil.isNotEmpty(name) && ObjectUtil.isNotEmpty(value)) {
+                    parmsMap.put(name, value);
+                }
+            }
+        }
+        return parmsMap;
+    }
+
+    private String getFileUrl(String dataParms, String dataPath) throws IOException {
+        JSONArray jsonArray = new JSONArray(dataParms);
+        // 查询数据源
+        JSONArray dataJson = CsvUtils.getCsvDataByHeaders(dataPath, jsonArray.toList(String.class));
+        // 生成新的csv文件
+        String filePath = PHMConfig.getCsvFilePath() + CsvUtils.TEMP + "parameter_result.csv";
+        File file = CsvUtils.jsonToFileCsvByJsonArray(dataJson, filePath);
+        // 上传并返回新文件名称以及路径
+        String fileName = FileUploadUtils.upload(PHMConfig.getUploadPath(), FileUtil.fileToMultipartFile(file));
+        log.info("上传的文件名称:{}", fileName);
+        String url = Constants.HTTP + IpUtils.getIpAddr() + ":8080" + fileName;
+        log.info("上传的文件地址:{}", url);
+        return url;
     }
 }

+ 26 - 4
PHM-admin/phm-manage/src/main/java/com/phm/manage/util/CsvUtils.java

@@ -1,5 +1,6 @@
 package com.phm.manage.util;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -24,7 +25,9 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public class CsvUtils {
 
-    public static final String MODEL_DATA_PATH = "/modelData/";
+    public static final String MODEL_DATA_PATH = "/modelData";
+
+    public static final String TEMP = "/temp/";
 
     public static final String RESULT_DATA_PATH = "/resultData/";
 
@@ -32,7 +35,7 @@ public class CsvUtils {
     public static final String CSV_TYPE = ".csv";
 
     /**
-     * json 转 csv
+     * json 转 csv数据
      *
      * @param jsonArray 数组
      * @return csv 结果
@@ -61,15 +64,33 @@ public class CsvUtils {
      * @param jsonString data
      * @param csvFilePath path
      */
-    public static void jsonToFileCsv(String jsonString, String csvFilePath) {
+    public static File jsonToFileCsv(String jsonString, String csvFilePath) {
         try {
             // 将JSON字符串转换为JSON数组
             JSONArray jsonArray = JSONUtil.parseArray(jsonString);
             // 将JSON数组写入CSV文件
-            FileUtil.writeLines(jsonArrayToCsv(jsonArray), csvFilePath, CharsetUtil.CHARSET_GBK);
+            return jsonToFileCsvByJsonArray(jsonArray, csvFilePath);
+        } catch (Exception e) {
+            log.error("json转csv文件错误:{}", e.getMessage());
+        }
+        return null;
+    }
+
+    /**
+     * json转csv文件
+     *
+     * @param jsonArray data
+     * @param csvFilePath path
+     */
+    public static File jsonToFileCsvByJsonArray(JSONArray jsonArray, String csvFilePath) {
+        try {
+            // 将JSON数组写入CSV文件
+            return FileUtil.writeLines(jsonArrayToCsv(jsonArray), csvFilePath,
+                    CharsetUtil.CHARSET_GBK);
         } catch (Exception e) {
             log.error("json转csv文件错误:{}", e.getMessage());
         }
+        return null;
     }
 
     /**
@@ -109,6 +130,7 @@ public class CsvUtils {
      * 根据头名称(参数名称)获取csv文件中参数数据
      *
      * @param csvFilePath csv文件地址
+     * @param headerNames 参数名称
      * @return 参数名称列表
      */
     public static JSONArray getCsvDataByHeaders(String csvFilePath, List<String> headerNames) {

+ 31 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/util/FileUtil.java

@@ -0,0 +1,31 @@
+package com.phm.manage.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.entity.ContentType;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @Description FileUtil
+ * @Author WGK
+ * @Date 2023/11/26 12:27
+ */
+@Slf4j
+public class FileUtil {
+    public static MultipartFile fileToMultipartFile(File file) throws IOException {
+        FileInputStream fileInputStream = null;
+        MultipartFile multipartFile = null;
+        try {
+            fileInputStream = new FileInputStream(file);
+            multipartFile = new MockMultipartFile(file.getName(), file.getName(),
+                ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+        return multipartFile;
+    }
+}

+ 1 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/util/HttpClientUtils.java

@@ -5,6 +5,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
 import org.springframework.http.client.reactive.ClientHttpConnector;
 import org.springframework.http.client.reactive.ReactorClientHttpConnector;

+ 10 - 6
PHM-admin/phm-netty/src/main/java/com/phm/netty/service/impl/ProcessService.java

@@ -138,12 +138,16 @@ public class ProcessService implements IProcessService {
     }
 
     public static void main(String[] args) {
-        List<String> ss = new ArrayList<>();
-        ss.add("参数一");
-        JSONArray jsonArray = CsvUtils.getCsvDataByHeaders("D:\\phm\\dataPath\\csv" +
-                "\\parameterData\\JC02" + ".csv", ss);
-        // 打印JSON数组对象
-        Console.log(jsonArray);
+        // List<String> ss = new ArrayList<>();
+        // ss.add("参数一");
+        // JSONArray jsonArray = CsvUtils.getCsvDataByHeaders("D:\\phm\\dataPath\\csv" +
+        //         "\\parameterData\\JC02" + ".csv", ss);
+        // // 打印JSON数组对象
+        // Console.log(jsonArray);
+
+        List<String> t = CsvUtils.getCsvHeaders("D:\\phm\\dataPath\\csv" +
+                "\\parameterData\\JC02" + ".csv");
+        Console.log(t);
         // System.out.println(jsonArray.toString());
         // int numberOfRandomNumbers = 10000;
         // double minValue = 0.0000;