Эх сурвалжийг харах

获取到数链仿真系统数据后解析, 保存,以及数据生成csv文件

wanggaokun 1 жил өмнө
parent
commit
d5dcda2714

+ 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) {

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

@@ -29,7 +29,6 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile;
 @Service
 public class ModelServiceImpl implements IModelService {
 
-    private static final String MODEL_DATA_PATH = "modelData";
     @Autowired
     ModelInfoMapper modelInfoMapper;
 
@@ -75,7 +74,7 @@ public class ModelServiceImpl implements IModelService {
         // TODO 根据数据参数获取数据,生成csv在文件,返回csv文件服务器路径
 
         // 上传文件路径
-        String filePath = PHMConfig.getCsvFilePath() + MODEL_DATA_PATH;
+        String filePath = PHMConfig.getCsvFilePath() + CsvUtils.MODEL_DATA_PATH;
         // 上传并返回新文件名称
         try {
             String fileName = FileUploadUtils.upload(filePath, null);
@@ -88,7 +87,8 @@ public class ModelServiceImpl implements IModelService {
         JSONObject jsonObject = JSONUtil.parseObj(result);
         String jsonString = jsonObject.getStr("data");
         // CSV文件路径
-        String csvFilePath = "D:\\phm/output.csv";
+        String csvFilePath = PHMConfig.getCsvFilePath() + CsvUtils.RESULT_DATA_PATH +
+                "result";
         CsvUtils.jsonToFileCsv(jsonString, csvFilePath);
         return jsonString;
     }

+ 7 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/util/CsvUtils.java

@@ -23,6 +23,13 @@ import java.util.stream.Collectors;
 @Slf4j
 public class CsvUtils {
 
+    public static final String MODEL_DATA_PATH = "/modelData/";
+
+    public static final String RESULT_DATA_PATH = "/resultData/";
+
+    public static final String PARAMETER_DATA_PATH = "/parameterData/";
+    public static final String CSV_TYPE = ".csv";
+
     /**
      * json 转 csv
      *

+ 22 - 15
PHM-admin/phm-netty/src/main/java/com/phm/netty/client/handler/NettyUdpClientHandler.java

@@ -2,37 +2,47 @@ package com.phm.netty.client.handler;
 
 import com.phm.netty.domain.Message;
 import com.phm.netty.enums.OrderEnum;
+
+import com.phm.netty.service.IProcessService;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
+import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.SimpleChannelInboundHandler;
 import io.netty.channel.socket.DatagramPacket;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
 
 /**
  * @Description NettyUdpClientHandler
  * @Author WGK
  * @Date 2023/10/30 15:30
  */
+@ChannelHandler.Sharable
 @Slf4j
+@Component
 public class NettyUdpClientHandler extends SimpleChannelInboundHandler<DatagramPacket> {
+
+    @Autowired
+    IProcessService processService;
+
+
     @Override
-    protected void channelRead0(ChannelHandlerContext ctx,DatagramPacket packet) throws Exception {
+    protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {
         final ByteBuf buf = packet.content();
         try {
             log.info("channelId---:{}", ctx.channel().id().toString());
             byte[] bytes = ByteBufUtil.getBytes(buf);
             Message msg = Message.getMessage(bytes);
             if (msg == null) {
+                log.info("无数据传输");
                 return;
             }
-            short type = msg.getType();
-            // 打印收到的消息
-            log.info("msg---:{}", msg);
-            if (OrderEnum.ORDER_CONFIG.getType() != type) {
-                // 数据
-                log.info("数据数据数据");
-            }
+            // 处理数据
+            List<String> list = processService.handleData(msg);
             ctx.close();
         } catch (Exception e) {
             log.error(e.getMessage());
@@ -40,14 +50,11 @@ public class NettyUdpClientHandler extends SimpleChannelInboundHandler<DatagramP
     }
 
     /**
-     * 重写方法
-     * 结构:
-     * 1.public class BootNettyUdpClientSimpleChannelInboundHandler extends SimpleChannelInboundHandler<DatagramPacket>
-     * 2.public abstract class SimpleChannelInboundHandler<I> extends ChannelInboundHandlerAdapter
-     * 3.public class ChannelInboundHandlerAdapter extends ChannelHandlerAdapter implements ChannelInboundHandler
-     * ChannelInboundHandlerAdapter类有诸多方法可以重写,可以根据具体需求来写
+     * 重写方法 结构: 1.public class BootNettyUdpClientSimpleChannelInboundHandler extends
+     * SimpleChannelInboundHandler<DatagramPacket> 2.public abstract class SimpleChannelInboundHandler<I> extends
+     * ChannelInboundHandlerAdapter 3.public class ChannelInboundHandlerAdapter extends ChannelHandlerAdapter implements
+     * ChannelInboundHandler ChannelInboundHandlerAdapter类有诸多方法可以重写,可以根据具体需求来写
      */
-
     @Override
     public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
         super.channelReadComplete(ctx);

+ 2 - 0
PHM-admin/phm-netty/src/main/java/com/phm/netty/enums/OrderEnum.java

@@ -21,6 +21,8 @@ public enum OrderEnum {
     RESPONSE((short) 2, "指令应答"),
     TIMING((short) 3, "校时"),
     ORDER_CONFIG((short) 4, "指令配置获取"),
+    SIMULATION((short) 5, "数链仿真系统获取数据"),
+    AIRBORNE((short) 6, "机载PHM获取数据"),
     HEARTBEAT((short) 5, "心跳包");
 
     public final short type;

+ 1 - 1
PHM-admin/phm-netty/src/main/java/com/phm/netty/service/IProcessService.java

@@ -45,5 +45,5 @@ public interface IProcessService {
      * @return res
      * @throws Exception ex
      */
-    List<String> proData(Message message) throws Exception;
+    List<String> handleData(Message message) throws Exception;
 }

+ 56 - 14
PHM-admin/phm-netty/src/main/java/com/phm/netty/service/impl/ProcessService.java

@@ -1,14 +1,20 @@
 package com.phm.netty.service.impl;
 
 import cn.hutool.json.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.phm.common.config.PHMConfig;
 import com.phm.manage.domain.OrderConfig;
 import com.phm.manage.domain.OrderInfo;
+import com.phm.manage.domain.SortieParameter;
 import com.phm.manage.domain.common.CommonResult;
 import com.phm.manage.enums.OrderStatus;
+import com.phm.manage.service.IDataDownResultService;
 import com.phm.manage.service.IOrderConfigService;
 import com.phm.manage.service.IOrderInfoService;
+import com.phm.manage.service.ISortieParameterService;
 import com.phm.manage.service.ISortieService;
+import com.phm.manage.util.CsvUtils;
 import com.phm.netty.domain.Message;
 import com.phm.netty.enums.OrderEnum;
 import com.phm.netty.service.IProcessService;
@@ -18,6 +24,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -42,11 +49,17 @@ public class ProcessService implements IProcessService {
     @Autowired
     private IOrderConfigService orderConfigService;
 
+    @Autowired
+    private IDataDownResultService resultService;
+
+    @Autowired
+    private ISortieParameterService sortieParameterService;
+
     @Override
     public Message orderHandle(Message message) throws Exception {
-        JSONObject jsonObject = JSONObject.parseObject(message.getData());
-        String orderBatchId = jsonObject.getString("id");
-        String orderCode = jsonObject.getString("orderCode");
+        JSONObject jsonObject = JSONUtil.parseObj(message.getData());
+        String orderBatchId = jsonObject.getStr("id");
+        String orderCode = jsonObject.getStr("orderCode");
         OrderConfig orderConfig = orderConfigService.selectOrderConfigByCode(orderCode);
         // 保存要执行的指令信息
         OrderInfo orderInfo = new OrderInfo();
@@ -58,16 +71,16 @@ public class ProcessService implements IProcessService {
         orderInfo.setStatus(OrderStatus.S_0.getCode());
         orderInfoService.insertOrderInfo(orderInfo);
         Message msg = new Message();
-        msg.setType(OrderEnum.RESPONSE.getType())
-                .setData(JsonUtils.convertJson(CommonResult.success("{\"id\": " + orderBatchId + ",orderCode:" + orderCode + "}")));
+        msg.setType(OrderEnum.RESPONSE.getType()).setData(
+            JsonUtils.convertJson(CommonResult.success("{\"id\": " + orderBatchId + ",orderCode:" + orderCode + "}")));
         return msg;
     }
 
     @Override
     public void timing(Message message) throws Exception {
         log.info("校时功能");
-        JSONObject jsonObject = JSONObject.parseObject(message.getData());
-        String timestamp = jsonObject.getString("timestamp");
+        JSONObject jsonObject = JSONUtil.parseObj(message.getData());
+        String timestamp = jsonObject.getStr("timestamp");
         String osName = System.getProperty("os.name").toLowerCase();
         try {
             if (osName.contains("windows")) {
@@ -93,12 +106,41 @@ public class ProcessService implements IProcessService {
     }
 
     @Override
-    public List<String> proData(Message message) throws Exception {
-        JSONObject jsonObject = JSONObject.parseObject(message.getData());
-        String cmdId = jsonObject.getString("cmdid");
-        String params = jsonObject.getString("params");
-        JSONArray jsonArray = new JSONArray(params);
-        // 解析数据集合,保存 TODO
+    public List<String> handleData(Message message) throws Exception {
+        JSONObject jsonObject = JSONUtil.parseObj(message.getData());
+        short type = message.getType();
+        // TODO mock参数数据
+        String dataJson =
+            "[{\"参数一\":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\"}]";
+        String sortieNo = "JC000001121";
+        log.info("msg---:{}", message);
+        // 数链仿真系统获取数据
+        if (OrderEnum.SIMULATION.getType() != type) {
+            String cmdId = jsonObject.getStr("cmdid");
+            String params = jsonObject.getStr("params");
+            JSONArray jsonArray = JSONUtil.parseArray(dataJson);
+            // TODO 参数存放位置
+            String parameterDataPath =
+                PHMConfig.getCsvFilePath() + CsvUtils.PARAMETER_DATA_PATH + sortieNo + CsvUtils.CSV_TYPE;
+            CsvUtils.jsonToFileCsv(dataJson, parameterDataPath);
+            JSONObject obj = jsonArray.getJSONObject(0);
+            List<SortieParameter> parameterList = new ArrayList<>();
+            // 遍历JSONObject的所有键
+            for (String key : obj.keySet()) {
+                parameterList.add(new SortieParameter("sortieNo", key, parameterDataPath));
+            }
+            CsvUtils.jsonToFileCsv(params, "");
+            // 解析数据集合,保存 TODO 参数数据映射表PHM_SORTIE_PARAMETER
+            parameterList.forEach(parameter -> sortieParameterService.insertSortieParameter(parameter));
+            // 数据
+            log.info("数链仿真系统获取数据");
+        }
+
+        // 机载PHM获取数据
+        if (OrderEnum.AIRBORNE.getType() != type) {
+            // 数据
+            log.info("机载PHM获取数据");
+        }
 
         return null;
     }