Browse Source

架次号查询对应参数/定义备份和恢复接口

wanggaokun 1 year ago
parent
commit
72d5353b70

+ 56 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/controller/BackupRestoreController.java

@@ -0,0 +1,56 @@
+package com.phm.manage.controller;
+
+import com.phm.common.core.controller.BaseController;
+import com.phm.manage.domain.common.CommonResult;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Description BackupRestoreController
+ * @Author WGK
+ * @Date 2023/11/27 15:23
+ */
+@RestController
+@RequestMapping("/manage")
+public class BackupRestoreController extends BaseController {
+    /**
+     * 备份文件
+     *
+     * @return res
+     */
+    @PostMapping("/file/backup")
+    public CommonResult<String> backupFile() {
+        // TODO 服务都需要开发
+        return CommonResult.buildSuccess();
+    }
+
+    /**
+     * 恢复文件
+     *
+     * @return res
+     */
+    @PostMapping("/file/restore")
+    public CommonResult<String> restoreFile() {
+        return CommonResult.buildSuccess();
+    }
+
+    /**
+     * 备份数据库表数据
+     *
+     * @return res
+     */
+    @PostMapping("/db/backup")
+    public CommonResult<String> backupDb() {
+        return CommonResult.buildSuccess();
+    }
+    /**
+     * 恢复数据库表数据
+     *
+     * @return res
+     */
+    @PostMapping("/db/restore")
+    public CommonResult<String> restoreDb() {
+        return CommonResult.buildSuccess();
+    }
+}

+ 29 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/controller/SortieParameterController.java

@@ -0,0 +1,29 @@
+package com.phm.manage.controller;
+
+import com.phm.manage.service.ISortieParameterService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.phm.manage.domain.SortieParameter;
+import com.phm.manage.domain.common.CommonResult;
+
+/**
+ * @Description SortieParameterController
+ * @Author WGK
+ * @Date 2023/11/27 10:34
+ */
+@RestController
+@RequestMapping("/manage/sortieParameter")
+public class SortieParameterController {
+
+    @Autowired
+    private ISortieParameterService sortieParameterService;
+
+    @GetMapping(value = "/{id}")
+    public CommonResult<String> importData(@PathVariable("id") Long id) {
+        return CommonResult.success(sortieParameterService.getSortieData(id));
+    }
+}

+ 1 - 1
PHM-admin/phm-manage/src/main/java/com/phm/manage/domain/ModelInfo.java

@@ -35,7 +35,7 @@ public class ModelInfo extends BaseEntity {
      * 模型类型
      */
     @Excel(name = "模型类型")
-    private String type;
+    private Integer type;
 
     /**
      * 算法连接

+ 3 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/domain/SortieParameter.java

@@ -32,6 +32,9 @@ public class SortieParameter extends BaseEntity {
     @Excel(name = "批次号")
     private String batchNo;
 
+    /** 数据类型 */
+    private Integer type;
+
     /** 参数数据路径 */
     @Excel(name = "参数数据路径")
     private String dataPath;

+ 8 - 18
PHM-admin/phm-manage/src/main/java/com/phm/manage/enums/DataTypeEnum.java

@@ -12,25 +12,15 @@ import lombok.Getter;
 @AllArgsConstructor
 @Getter
 public enum DataTypeEnum {
-
-    /*
-     * 虚警抑制模型
-     */
-    FALSE_ALARM("虚警抑制结果", "FALSE_ALARM"),
-
-    /*
-     * 地面诊断模型
-     */
-    DIAGNOSIS("地面诊断结果", "GROUND_DIAGNOSIS"),
-
-    /*
-     * 深度隔离模型
-     */
-    DEEP_ISOLATION("深度隔离结果", "DEEP_ISOLATION");
-
-
+    SOURCE_DATA("源数据", 0),
+    ABNORMAL("异常值剔除", 1),
+    COMPLETION("缺失值补全", 2),
+    FALSE_ALARM("虚警抑制", 3),
+    GROUND_DIAGNOSIS("地面诊断", 4),
+    DEEP_ISOLATION("深度隔离", 5),
+    FORECAST("故障预测", 6);
     private final String name;
 
-    private final String type;
+    private final Integer type;
 
 }

+ 2 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/service/ISortieParameterService.java

@@ -57,4 +57,6 @@ public interface ISortieParameterService {
      * @return 结果
      */
     public int deleteSortieParameterById(Long id);
+
+    String getSortieData(Long id);
 }

+ 8 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/service/ISortieService.java

@@ -20,6 +20,14 @@ public interface ISortieService {
      */
     public Sortie selectSortieById(Long id);
 
+    /**
+     * 查询架次信息
+     *
+     * @param number 架次信息
+     * @return 架次信息
+     */
+    public Sortie selectSortieByNumber(String number);
+
     /**
      * 查询架次信息列表
      *

+ 19 - 6
PHM-admin/phm-manage/src/main/java/com/phm/manage/service/impl/ModelServiceImpl.java

@@ -5,7 +5,10 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
+import com.phm.manage.enums.DataTypeEnum;
+import com.phm.manage.service.IFaultCaseService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -45,12 +48,16 @@ public class ModelServiceImpl implements IModelService {
 
     @Autowired
     ModelInfoMapper modelInfoMapper;
+
     @Autowired
     private SnowFlakeIdGenerator snowFlakeIdGenerator;
 
     @Autowired
     private ISortieParameterService sortieParameterService;
 
+    @Autowired
+    private IFaultCaseService faultCaseService;
+
     @Override
     public ModelInfo selectModelById(Long id) {
         return modelInfoMapper.selectModelById(id);
@@ -92,6 +99,7 @@ public class ModelServiceImpl implements IModelService {
         }
         // TODO 模型参数
         Map<String, String> parmsMap = getParmsMap(modelInfo);
+        // 数据
         SortieParameter sortieParameter = sortieParameterService.selectSortieParameterById(modelRequest.getDataId());
         if (ObjectUtil.isEmpty(sortieParameter)) {
             throw new GlobalException("选择的架次数据为空,请检查!");
@@ -108,16 +116,20 @@ public class ModelServiceImpl implements IModelService {
         String result = HttpClientUtils.postJson(modelInfo.getUrl(), parms);
         JSONObject jsonObject = JSONUtil.parseObj(result);
         String jsonString = jsonObject.getStr("data");
+        // 故障深度隔离无结果。需要匹配故障案例
+        if (Objects.equals(modelInfo.getType(), DataTypeEnum.DEEP_ISOLATION.getType())) {
+            // TODO 故障案例 传入故障要素
+            faultCaseService.findFaultCaseList(jsonString);
+        }
         // CSV文件路径
-        String csvFilePath = PHMConfig.getCsvFilePath() + CsvUtils.RESULT_DATA_PATH + "model_result"
-            + Seq.getId(Seq.uploadSeqType) + ".csv";
+        String csvFilePath =
+                PHMConfig.getCsvFilePath() + CsvUtils.RESULT_DATA_PATH + CsvUtils.extractFilename("model_result");
         CsvUtils.jsonToFileCsv(jsonString, csvFilePath);
         SortieParameter parameter = new SortieParameter();
         parameter.setDataPath(csvFilePath).setSortieNo(sortieParameter.getSortieNo())
-            .setBatchNo(IdUtil.getSnowflakeNextIdStr());
+            .setBatchNo(IdUtil.getSnowflakeNextIdStr()).setType(modelInfo.getType());
         sortieParameterService.insertSortieParameter(parameter);
         return jsonString;
-
     }
 
     private static Map<String, String> getParmsMap(ModelInfo modelInfo) {
@@ -130,7 +142,7 @@ public class ModelServiceImpl implements IModelService {
         for (Object obj : modelParamsArray) {
             if (obj instanceof JSONObject) {
                 JSONObject jsonObj = (JSONObject)obj;
-                String name = jsonObj.getStr("name");
+                String name = jsonObj.getStr("key");
                 String value = jsonObj.getStr("value");
                 if (ObjectUtil.isNotEmpty(name) && ObjectUtil.isNotEmpty(value)) {
                     parmsMap.put(name, value);
@@ -145,7 +157,8 @@ public class ModelServiceImpl implements IModelService {
         // 查询数据源
         JSONArray dataJson = CsvUtils.getCsvDataByHeaders(dataPath, jsonArray.toList(String.class));
         // 生成新的csv文件
-        String filePath = PHMConfig.getCsvFilePath() + CsvUtils.TEMP + "parameter_result.csv";
+        String filePath =
+            PHMConfig.getCsvFilePath() + CsvUtils.MODEL_DATA_PATH + CsvUtils.extractFilename("parameter_result");
         File file = CsvUtils.jsonToFileCsvByJsonArray(dataJson, filePath);
         // 上传并返回新文件名称以及路径
         String fileName = FileUploadUtils.upload(PHMConfig.getUploadPath(), FileUtil.fileToMultipartFile(file));

+ 8 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/service/impl/SortieParameterService.java

@@ -2,6 +2,8 @@ package com.phm.manage.service.impl;
 
 import java.util.List;
 
+import cn.hutool.json.JSONArray;
+import com.phm.manage.util.CsvUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -92,4 +94,10 @@ public class SortieParameterService implements ISortieParameterService {
     public int deleteSortieParameterById(Long id) {
         return sortieParameterMapper.deleteSortieParameterById(id);
     }
+
+    @Override
+    public String getSortieData(Long id) {
+        SortieParameter sortieParameter = sortieParameterMapper.selectSortieParameterById(id);
+        return CsvUtils.fileCsvToJson(sortieParameter.getDataPath()).toString();
+    }
 }

+ 5 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/service/impl/SortieServiceImpl.java

@@ -45,6 +45,11 @@ public class SortieServiceImpl implements ISortieService {
         return sortieMapper.selectSortieById(id);
     }
 
+    @Override
+    public Sortie selectSortieByNumber(String number) {
+        return sortieMapper.selectSortieByNumber(number);
+    }
+
     /**
      * 查询架次信息列表
      *

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

@@ -5,6 +5,10 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import com.phm.common.utils.DateUtils;
+import com.phm.common.utils.StringUtils;
+import com.phm.common.utils.uuid.Seq;
+
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.text.csv.CsvData;
@@ -25,15 +29,24 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public class CsvUtils {
 
+    // 模型需要的数据
     public static final String MODEL_DATA_PATH = "/modelData";
 
-    public static final String TEMP = "/temp/";
-
+    // 执行模型后的结果数据
     public static final String RESULT_DATA_PATH = "/resultData/";
 
+    // 源参数数据
     public static final String PARAMETER_DATA_PATH = "/parameterData/";
     public static final String CSV_TYPE = ".csv";
 
+    /**
+     * 编码文件名
+     */
+    public static final String extractFilename(String fileName) {
+        return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), fileName, Seq.getId(Seq.uploadSeqType),
+            CSV_TYPE);
+    }
+
     /**
      * json 转 csv数据
      *
@@ -85,8 +98,7 @@ public class CsvUtils {
     public static File jsonToFileCsvByJsonArray(JSONArray jsonArray, String csvFilePath) {
         try {
             // 将JSON数组写入CSV文件
-            return FileUtil.writeLines(jsonArrayToCsv(jsonArray), csvFilePath,
-                    CharsetUtil.CHARSET_GBK);
+            return FileUtil.writeLines(jsonArrayToCsv(jsonArray), csvFilePath, CharsetUtil.CHARSET_GBK);
         } catch (Exception e) {
             log.error("json转csv文件错误:{}", e.getMessage());
         }

+ 16 - 1
PHM-admin/phm-manage/src/main/resources/mapper/manage/SortieParameterMapper.xml

@@ -8,6 +8,7 @@
         <result property="id"    column="ID"    />
         <result property="sortieNo"    column="SORTIE_NO"    />
         <result property="batchNo"    column="BATCH_NO"    />
+        <result property="type"    column="TYPE"    />
         <result property="dataPath"    column="DATA_PATH"    />
         <result property="isDelete"    column="IS_DELETE"    />
         <result property="createBy"    column="CREATE_BY"    />
@@ -17,7 +18,17 @@
     </resultMap>
 
     <sql id="selectSortieParameterVo">
-        select ID, SORTIE_NO, BATCH_NO, DATA_PATH, IS_DELETE, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME from PHM_SORTIE_PARAMETER
+        select ID,
+               SORTIE_NO,
+               BATCH_NO,
+               TYPE,
+               DATA_PATH,
+               IS_DELETE,
+               CREATE_BY,
+               CREATE_TIME,
+               UPDATE_BY,
+               UPDATE_TIME
+        from PHM_SORTIE_PARAMETER
     </sql>
 
     <select id="selectSortieParameterList" parameterType="SortieParameter" resultMap="SortieParameterResult">
@@ -26,6 +37,7 @@
             <if test="id != null "> and ID = #{id}</if>
             <if test="sortieNo != null  and sortieNo != ''"> and SORTIE_NO = #{sortieNo}</if>
             <if test="batchNo != null  and batchNo != ''"> and BATCH_NO like concat('%', #{batchNo}, '%')</if>
+            <if test="type != null "> and TYPE = #{type}</if>
             <if test="dataPath != null  and dataPath != ''"> and DATA_PATH = #{dataPath}</if>
             <if test="isDelete != null "> and IS_DELETE = #{isDelete}</if>
             <if test="createBy != null  and createBy != ''"> and CREATE_BY = #{createBy}</if>
@@ -46,6 +58,7 @@
             <if test="id != null">ID,</if>
             <if test="sortieNo != null">SORTIE_NO,</if>
             <if test="batchNo != null">BATCH_NO,</if>
+            <if test="type != null">TYPE,</if>
             <if test="dataPath != null">DATA_PATH,</if>
             <if test="isDelete != null">IS_DELETE,</if>
             <if test="createBy != null">CREATE_BY,</if>
@@ -57,6 +70,7 @@
             <if test="id != null">#{id},</if>
             <if test="sortieNo != null">#{sortieNo},</if>
             <if test="batchNo != null">#{batchNo},</if>
+            <if test="type != null">#{TYPE},</if>
             <if test="dataPath != null">#{dataPath},</if>
             <if test="isDelete != null">#{isDelete},</if>
             <if test="createBy != null">#{createBy},</if>
@@ -71,6 +85,7 @@
         <trim prefix="SET" suffixOverrides=",">
             <if test="sortieNo != null">SORTIE_NO = #{sortieNo},</if>
             <if test="batchNo != null">BATCH_NO = #{batchNo},</if>
+            <if test="type != null">BATCH_NO = #{TYPE},</if>
             <if test="dataPath != null">DATA_PATH = #{dataPath},</if>
             <if test="isDelete != null">IS_DELETE = #{isDelete},</if>
             <if test="createBy != null">CREATE_BY = #{createBy},</if>

+ 11 - 8
PHM-admin/phm-netty/src/main/java/com/phm/netty/client/handler/NettyUdpClientHandler.java

@@ -4,6 +4,9 @@ import java.util.List;
 
 import javax.annotation.PostConstruct;
 
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.CharsetUtil;
+import com.phm.netty.enums.OrderEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -41,20 +44,20 @@ public class NettyUdpClientHandler extends SimpleChannelInboundHandler<DatagramP
 
     @Override
     protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {
-        // String data =
-        // FileUtil.readString("D:\\phm\\dataPath\\csv" + "\\parameterData\\参数数据.json", CharsetUtil.CHARSET_UTF_8);
-        // // TODO 这里测试数据
-        // Message message = new Message();
-        // message.setType(OrderEnum.ORDER_CONFIG.getType()).setTarget("GPHM").setSource("SPHM")
-        // .setData("{\"cmdId\": \"getConfig\", \"params\":" + data + "}");
+        String data =
+        FileUtil.readString("D:\\phm\\dataPath\\参数数据.json", CharsetUtil.CHARSET_UTF_8);
+        // TODO 这里测试数据
+        Message message = new Message();
+        message.setType(OrderEnum.ORDER_CONFIG.getType()).setTarget("GPHM").setSource("SPHM")
+        .setData("{\"cmdId\": \"getConfig\", \"params\":" + data + "}");
         // 获取自定义值
         String sortieNo = ctx.channel().attr(AttributeKey.valueOf("customKey")).get().toString();
         final ByteBuf buf = packet.content();
         try {
             log.info("channelId---:{}", ctx.channel().id().toString());
             byte[] bytes = ByteBufUtil.getBytes(buf);
-            // Message msg = Message.getMessage(Message.msgToBytes(message));
-            Message msg = Message.getMessage(bytes);
+            Message msg = Message.getMessage(Message.msgToBytes(message));
+            // Message msg = Message.getMessage(bytes);
             if (msg == null) {
                 log.info("无数据传输");
                 return;

+ 3 - 3
PHM-admin/phm-netty/src/main/java/com/phm/netty/controller/NettyUdpClientController.java

@@ -46,14 +46,14 @@ public class NettyUdpClientController extends BaseController {
      *
      * @return res
      */
-    @GetMapping("/airborne/{id}")
-    public CommonResult<String> getAirborneInfo(@PathVariable("id") Long id) {
+    @GetMapping("/airborne/{sortieNo}")
+    public CommonResult<String> getAirborneInfo(@PathVariable("sortieNo") String sortieNo) {
         // TODO 这里入参需要确定
         Message message = new Message();
         message.setType(OrderEnum.ORDER_CONFIG.getType()).setTarget("GPHM").setSource("SPHM").setData(
             "{\"cmdId\": \"getConfig\", \"params\": [{\"参数一\":0.1079,\"参数三\":0.6007,\"参数二\":0.0116,\"参数五\":0.0689,\"参数四\":1.1915,\"时间\":\"2022/6/3013:08\"},{\"参数一\":0.8088,\"参数三\":2.9169,\"参数二\":0.6541,\"参数五\":0.6229,\"参数四\":5.5326,\"时间\":\"2022/6/3013:09\"},\t{\"参数一\":0.9088,\"参数三\":2.7169,\"参数二\":0.0541,\"参数五\":0.4229,\"参数四\":3.5326,\"时间\":\"2022/6/3013:10\"}]}");
         // udp客户端,向服务端发送获取数据请求服务
-        udpClient.bind("127.0.0.1", 19000, Message.msgToBytes(message), "JC02");
+        udpClient.bind("127.0.0.1", 19000, Message.msgToBytes(message), sortieNo);
         return CommonResult.buildSuccess();
     }
 }

+ 24 - 12
PHM-admin/phm-netty/src/main/java/com/phm/netty/service/impl/ProcessService.java

@@ -3,6 +3,9 @@ package com.phm.netty.service.impl;
 import java.util.ArrayList;
 import java.util.List;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.phm.manage.domain.Sortie;
+import com.phm.manage.enums.DataTypeEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -114,18 +117,13 @@ public class ProcessService implements IProcessService {
         JSONObject jsonObject = JSONUtil.parseObj(message.getData());
         short type = message.getType();
         log.info("msg---:{}", message);
+        String dataJson = "";
+
         // 数链仿真系统获取数据
         if (OrderEnum.SIMULATION.getType() != type) {
-            String cmdId = jsonObject.getStr("cmdid");
-            String params = jsonObject.getStr("params");
-            // 参数数据存放位置
-            String parameterDataPath =
-                PHMConfig.getCsvFilePath() + CsvUtils.PARAMETER_DATA_PATH + sortieNo + CsvUtils.CSV_TYPE;
-            CsvUtils.jsonToFileCsv(params, parameterDataPath);
-            SortieParameter parameter = new SortieParameter();
-            parameter.setDataPath(parameterDataPath).setSortieNo(sortieNo).setBatchNo(IdUtil.getSnowflakeNextIdStr());
-            sortieParameterService.insertSortieParameter(parameter);
             log.info("数链仿真系统获取数据");
+            String cmdId = jsonObject.getStr("cmdid");
+            dataJson = jsonObject.getStr("params");
         }
 
         // 机载PHM获取数据
@@ -133,6 +131,21 @@ public class ProcessService implements IProcessService {
             // 数据
             log.info("机载PHM获取数据");
         }
+        // 参数数据存放位置
+        String parameterDataPath =
+                PHMConfig.getCsvFilePath() + CsvUtils.PARAMETER_DATA_PATH + CsvUtils.extractFilename(sortieNo);
+        CsvUtils.jsonToFileCsv(dataJson, parameterDataPath);
+        SortieParameter parameter = new SortieParameter();
+        parameter.setDataPath(parameterDataPath).setSortieNo(sortieNo).setBatchNo(IdUtil.getSnowflakeNextIdStr())
+                .setType(DataTypeEnum.SOURCE_DATA.getType());
+        sortieParameterService.insertSortieParameter(parameter);
+        Sortie sortie = sortieService.selectSortieByNumber(sortieNo);
+        // 新增架次信息
+        if (ObjectUtil.isEmpty(sortie)) {
+            sortie = new Sortie();
+            sortie.setSortieNumber(sortieNo);
+            sortieService.insertSortie(sortie);
+        }
 
         return null;
     }
@@ -141,12 +154,11 @@ public class ProcessService implements IProcessService {
         // List<String> ss = new ArrayList<>();
         // ss.add("参数一");
         // JSONArray jsonArray = CsvUtils.getCsvDataByHeaders("D:\\phm\\dataPath\\csv" +
-        //         "\\parameterData\\JC02" + ".csv", ss);
+        // "\\parameterData\\JC02" + ".csv", ss);
         // // 打印JSON数组对象
         // Console.log(jsonArray);
 
-        List<String> t = CsvUtils.getCsvHeaders("D:\\phm\\dataPath\\csv" +
-                "\\parameterData\\JC02" + ".csv");
+        List<String> t = CsvUtils.getCsvHeaders("D:\\phm\\dataPath\\csv" + "\\parameterData\\JC02" + ".csv");
         Console.log(t);
         // System.out.println(jsonArray.toString());
         // int numberOfRandomNumbers = 10000;