Bläddra i källkod

MultipartFile和File互转工具类

wanggaokun 1 år sedan
förälder
incheckning
4634943ea6

+ 1 - 1
PHM-admin/phm-admin/src/main/resources/application.yml

@@ -11,7 +11,7 @@ phm:
   # 文件路径 示例( Windows配置D:/phm/uploadPath,Linux配置 /home/phm/uploadPath)
   profile: D:/phm/uploadPath
   # 文件路径 示例( Windows配置D:/phm/dataPath/csv,Linux配置 /home/phm/dataPath/csv)
-  csvFile: D:/phm/dataPath/csv
+  csvFilePath: D:/phm/dataPath/csv
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数字计算 char 字符验证

+ 67 - 8
PHM-admin/phm-common/src/main/java/com/phm/common/config/PHMConfig.java

@@ -3,9 +3,6 @@ package com.phm.common.config;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
-import lombok.Data;
-import lombok.Getter;
-
 /**
  * 读取项目相关配置
  *
@@ -13,7 +10,6 @@ import lombok.Getter;
  */
 @Component
 @ConfigurationProperties(prefix = "phm")
-@Data
 public class PHMConfig {
     /**
      * 项目名称
@@ -38,14 +34,12 @@ public class PHMConfig {
     /**
      * 上传路径
      */
-    @Getter
     private static String profile;
 
     /**
-     * csvFile上传路径
+     * csv数据路径
      */
-    @Getter
-    private static String csvFile;
+    private static String csvFilePath;
 
     /**
      * 获取地址开关
@@ -57,6 +51,71 @@ public class PHMConfig {
      */
     private static String captchaType;
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getCopyrightYear() {
+        return copyrightYear;
+    }
+
+    public void setCopyrightYear(String copyrightYear) {
+        this.copyrightYear = copyrightYear;
+    }
+
+    public boolean isDemoEnabled() {
+        return demoEnabled;
+    }
+
+    public void setDemoEnabled(boolean demoEnabled) {
+        this.demoEnabled = demoEnabled;
+    }
+
+    public static String getProfile() {
+        return profile;
+    }
+
+    public void setProfile(String profile) {
+        PHMConfig.profile = profile;
+    }
+
+    public static String getCsvFilePath() {
+        return csvFilePath;
+    }
+
+    public void setCsvFilePath(String csvFilePath) {
+        PHMConfig.csvFilePath = csvFilePath;
+    }
+
+
+    public static boolean isAddressEnabled() {
+        return addressEnabled;
+    }
+
+    public void setAddressEnabled(boolean addressEnabled) {
+        PHMConfig.addressEnabled = addressEnabled;
+    }
+
+    public static String getCaptchaType() {
+        return captchaType;
+    }
+
+    public void setCaptchaType(String captchaType) {
+        PHMConfig.captchaType = captchaType;
+    }
+
     /**
      * 获取导入上传路径
      */

+ 5 - 0
PHM-admin/phm-manage/pom.xml

@@ -47,6 +47,11 @@
             <groupId>org.dromara.easy-es</groupId>
             <artifactId>easy-es-boot-starter</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>5.3.29</version>
+        </dependency>
     </dependencies>
 
 </project>

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

@@ -1,11 +1,15 @@
 package com.phm.manage.service.impl;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.phm.common.config.PHMConfig;
+import com.phm.common.utils.file.FileUploadUtils;
+import com.phm.manage.util.CsvUtils;
 import com.phm.manage.util.HttpClientUtils;
 import com.phm.manage.util.JsonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,6 +18,7 @@ import org.springframework.stereotype.Service;
 import com.phm.manage.domain.ModelInfo;
 import com.phm.manage.mapper.ModelInfoMapper;
 import com.phm.manage.service.IModelService;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 /**
  * 深度隔离模型Service业务层处理
@@ -23,6 +28,8 @@ import com.phm.manage.service.IModelService;
  */
 @Service
 public class ModelServiceImpl implements IModelService {
+
+    private static final String MODEL_DATA_PATH = "modelData";
     @Autowired
     ModelInfoMapper modelInfoMapper;
 
@@ -64,15 +71,25 @@ public class ModelServiceImpl implements IModelService {
         String  modelParms = modelInfo.getModelParms();
         // 数据参数
         String  dataParms = modelInfo.getDataParms();
+        modelInfo.setUrl("http://127.0.0.1:8858/abnormal");
         // TODO 根据数据参数获取数据,生成csv在文件,返回csv文件服务器路径
+
+        // 上传文件路径
+        String filePath = PHMConfig.getCsvFilePath() + MODEL_DATA_PATH;
+        // 上传并返回新文件名称
+        try {
+            String fileName = FileUploadUtils.upload(filePath, null);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
         Map<String, String> parms = new HashMap<>();
         parms.put("data_url", "http://127.0.0.1:8080/profile/upload/2023/11/13/origin.csv");
-        String result = HttpClientUtils.postJson(modelInfo.getUrl(), parms);
+        String result = HttpClientUtils.postJson("http://127.0.0.1:8858/abnormal", parms);
         JSONObject jsonObject = JSONUtil.parseObj(result);
         String jsonString = jsonObject.getStr("data");
         // CSV文件路径
         String csvFilePath = "D:\\phm/output.csv";
-        JsonUtils.jsonToFileCsv(jsonString, csvFilePath);
+        CsvUtils.jsonToFileCsv(jsonString, csvFilePath);
         return jsonString;
     }
 }

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

@@ -0,0 +1,84 @@
+package com.phm.manage.util;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.text.csv.CsvData;
+import cn.hutool.core.text.csv.CsvReader;
+import cn.hutool.core.text.csv.CsvRow;
+import cn.hutool.core.text.csv.CsvUtil;
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description CsvUtils
+ * @Author WGK
+ * @Date 2023/11/20 18:03
+ */
+@Slf4j
+public class CsvUtils {
+
+    /**
+     * json 转 csv
+     *
+     * @param jsonArray 数组
+     * @return csv 结果
+     */
+    public static List<String> jsonArrayToCsv(JSONArray jsonArray) {
+        // 获取CSV的表头
+        List<String> headers = new ArrayList<>(jsonArray.getJSONObject(0).keySet());
+        // 构造CSV行列表
+        List<String> csvLines = jsonArray.stream().map(jsonObject -> {
+            StringBuilder line = new StringBuilder();
+            for (String header : headers) {
+                // 根据表头获取对应的值,并追加到CSV行中
+                line.append(((JSONObject)jsonObject).get(header)).append(",");
+            }
+            // 移除末尾的逗号
+            return line.substring(0, line.length() - 1);
+        }).collect(Collectors.toList());
+        // 在CSV行列表开头添加表头
+        csvLines.add(0, String.join(",", headers));
+        return csvLines;
+    }
+
+    /**
+     * json转csv文件
+     *
+     * @param jsonString data
+     * @param csvFilePath path
+     */
+    public static void jsonToFileCsv(String jsonString, String csvFilePath) {
+        try {
+            // 将JSON字符串转换为JSON数组
+            JSONArray jsonArray = JSONUtil.parseArray(jsonString);
+            // 将JSON数组写入CSV文件
+            FileUtil.writeLines(jsonArrayToCsv(jsonArray), csvFilePath, CharsetUtil.CHARSET_GBK);
+        } catch (Exception e) {
+            log.error("json转csv文件错误:{}", e.getMessage());
+        }
+    }
+
+    /**
+     * csv文件转Json
+     *
+     * @param csvFilePath path
+     */
+    public static String fileCsvToJson(String csvFilePath) {
+        // TODO csv文件转Json
+        CsvReader reader = CsvUtil.getReader();
+        // 从文件中读取CSV数据
+        CsvData data = reader.read(FileUtil.file(csvFilePath), CharsetUtil.CHARSET_GBK);
+        List<CsvRow> rows = data.getRows();
+        // 遍历行
+        for (CsvRow csvRow : rows) {
+            // getRawList返回一个List列表,列表的每一项为CSV中的一个单元格(既逗号分隔部分)
+        }
+        return "";
+    }
+}

+ 12 - 58
PHM-admin/phm-manage/src/main/java/com/phm/manage/util/JsonUtils.java

@@ -1,18 +1,23 @@
 package com.phm.manage.util;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.phm.manage.domain.common.CommonResult;
+
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.text.csv.CsvData;
+import cn.hutool.core.text.csv.CsvReader;
+import cn.hutool.core.text.csv.CsvRow;
+import cn.hutool.core.text.csv.CsvUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.phm.manage.domain.common.CommonResult;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
 /**
  * @Description JsonUtils
  * @Author WGK
@@ -32,55 +37,4 @@ public class JsonUtils {
         ObjectMapper objectMapper = new ObjectMapper();
         return objectMapper.writeValueAsString(commonResult);
     }
-
-    /**
-     * json 转 csv
-     *
-     * @param jsonArray 数组
-     * @return csv 结果
-     */
-    public static List<String> jsonArrayToCsv(JSONArray jsonArray) {
-        // 获取CSV的表头
-        List<String> headers = new ArrayList<>(jsonArray.getJSONObject(0).keySet());
-        // 构造CSV行列表
-        List<String> csvLines = jsonArray.stream().map(jsonObject -> {
-            StringBuilder line = new StringBuilder();
-            for (String header : headers) {
-                // 根据表头获取对应的值,并追加到CSV行中
-                line.append(((JSONObject) jsonObject).get(header)).append(",");
-            }
-            // 移除末尾的逗号
-            return line.substring(0, line.length() - 1);
-        }).collect(Collectors.toList());
-        // 在CSV行列表开头添加表头
-        csvLines.add(0, String.join(",", headers));
-        return csvLines;
-    }
-
-    /**
-     * json转csv文件
-     *
-     * @param jsonString data
-     * @param csvFilePath path
-     */
-    public static void jsonToFileCsv(String jsonString, String csvFilePath) {
-        try {
-            // 将JSON字符串转换为JSON数组
-            JSONArray jsonArray = JSONUtil.parseArray(jsonString);
-            // 将JSON数组写入CSV文件
-            FileUtil.writeUtf8Lines(JsonUtils.jsonArrayToCsv(jsonArray), csvFilePath);
-        } catch (Exception e) {
-            log.info("json转csv文件错误:{}", e.getMessage());
-        }
-    }
-
-    /**
-     * csv文件转Json
-     *
-     * @param csvFilePath path
-     */
-    public static String fileCsvToJson(String csvFilePath) {
-        // TODO csv文件转Json
-        return "";
-    }
 }

+ 37 - 0
PHM-admin/phm-manage/src/main/java/com/phm/manage/util/MultipartFileUtil.java

@@ -0,0 +1,37 @@
+package com.phm.manage.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.entity.ContentType;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @Description MultipartFile和File互转工具类
+ * @Author WGK
+ * @Date 2023/11/21 10:21
+ */
+@Slf4j
+public class MultipartFileUtil {
+
+    /**
+     * File 转MultipartFile
+     *
+     * @param file file
+     * @return MultipartFile
+     */
+    public static MultipartFile getMultipartFile(File file) {
+        FileInputStream fileInputStream;
+        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;
+    }
+}

+ 19 - 28
PHM-admin/phm-netty/src/main/java/com/phm/netty/domain/Message.java

@@ -1,22 +1,20 @@
 package com.phm.netty.domain;
 
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ObjectUtil;
+import java.io.Serializable;
+import java.util.Arrays;
+
 import com.alibaba.fastjson2.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.phm.manage.domain.common.CommonResult;
 import com.phm.netty.enums.OrderEnum;
 import com.phm.netty.utils.BitUtils;
-import com.phm.netty.utils.ByteUtils;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import io.netty.util.CharsetUtil;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
-import javax.xml.bind.annotation.XmlRootElement;
-import java.io.Serializable;
-import java.util.Arrays;
-
 /**
  * @Description Message
  * @Author WGK
@@ -36,12 +34,7 @@ public class Message implements Serializable {
     private String data;
 
     /**
-     * 消息类型
-     * 0:参数传输
-     * 1:通用指令发送,具体指令类型有指令本身定义
-     * 2:指令应答
-     * 3:校时
-     * 4:心跳包
+     * 消息类型 0:参数传输 1:通用指令发送,具体指令类型有指令本身定义 2:指令应答 3:校时 4:心跳包
      */
     private short type;
 
@@ -65,8 +58,7 @@ public class Message implements Serializable {
      */
     private int reserver = 0;
 
-    public Message() {
-    }
+    public Message() {}
 
     /**
      * 字节数组解析为 Message 对象
@@ -108,25 +100,29 @@ public class Message implements Serializable {
 
     public static byte[] testMsg() {
         Message message = new Message();
-        message.setType(OrderEnum.COMMON.getType()).setTarget("GPHM").setSource("SPHM").setData("{\"id\": \"ZL001\",\"orderCode\":\"ZL001\"}");
+        message.setType(OrderEnum.COMMON.getType()).setTarget("GPHM").setSource("SPHM")
+            .setData("{\"id\": \"ZL001\",\"orderCode\":\"ZL001\"}");
         return Message.msgToBytes(message);
     }
 
     public static byte[] testMsg2() {
         Message message = new Message();
-        message.setType(OrderEnum.RESPONSE.getType()).setTarget("GPHM").setSource("SPHM").setData("{\"id\": \"ZL001\",\"response\":200}");
+        message.setType(OrderEnum.RESPONSE.getType()).setTarget("GPHM").setSource("SPHM")
+            .setData("{\"id\": \"ZL001\",\"response\":200}");
         return Message.msgToBytes(message);
     }
 
     public static byte[] testMsg3() {
         Message message = new Message();
-        message.setType(OrderEnum.TIMING.getType()).setTarget("GPHM").setSource("SPHM").setData("{\"id\": \"ZL001\",\"response\":200}");
+        message.setType(OrderEnum.TIMING.getType()).setTarget("GPHM").setSource("SPHM")
+            .setData("{\"id\": \"ZL001\",\"response\":200}");
         return Message.msgToBytes(message);
     }
 
     public static byte[] testMsg4() {
         Message message = new Message();
-        message.setType(OrderEnum.ORDER_CONFIG.getType()).setTarget("GPHM").setSource("SPHM").setData("{\"cmdId\": \"getConfig\"}");
+        message.setType(OrderEnum.ORDER_CONFIG.getType()).setTarget("GPHM").setSource("SPHM")
+            .setData("{\"cmdId\": \"getConfig\"}");
         return Message.msgToBytes(message);
     }
 
@@ -182,14 +178,9 @@ public class Message implements Serializable {
     }
 
     public String toJsonString() {
-        return "{" +
-                "\n  \"len\": " + len + ",\n" +
-                "  \"type\": " + type + ",\n" +
-                "  \"source\": " + source + ",\n" +
-                "  \"target\": " + target + ",\n" +
-                "  \"timestamp\": " + timestamp + ",\n" +
-                "  \"data\": " + data + "\n" +
-                "}";
+        return "{" + "\n  \"len\": " + len + ",\n" + "  \"type\": " + type + ",\n" + "  \"source\": " + source + ",\n"
+            + "  \"target\": " + target + ",\n" + "  \"timestamp\": " + timestamp + ",\n" + "  \"data\": " + data + "\n"
+            + "}";
     }
 
     public String errorDate(String code) throws JsonProcessingException {