Quellcode durchsuchen

新牧场添加3

wwh vor 1 Jahr
Ursprung
Commit
703e3734eb

+ 6 - 0
huimv-env-admin/pom.xml

@@ -102,12 +102,18 @@
             <artifactId>httpclient</artifactId>
             <version>4.5.14</version>
         </dependency>
+        <!--sftp文件上传-->
         <dependency>
             <groupId>com.jcraft</groupId>
             <artifactId>jsch</artifactId>
             <version>0.1.54</version>
         </dependency>
         <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.jxls</groupId>
             <artifactId>jxls</artifactId>
             <version>2.6.0</version>

+ 14 - 4
huimv-env-admin/src/main/java/com/huimv/env/admin/controller/EnergyEnvDeviceController.java

@@ -6,12 +6,11 @@ import com.huimv.env.common.entity.EnergyEnvDevice;
 import com.huimv.env.common.service.IEnergyEnvDeviceService;
 import com.huimv.env.common.utils.Result;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -53,6 +52,17 @@ public class EnergyEnvDeviceController {
         return energyEnvDeviceService.deviceCount(httpServletRequest,paramsMap);
     }
 
+    @PostMapping("/importData")
+    public Result importData(HttpServletRequest httpServletRequest, @RequestParam(name = "file") MultipartFile file,
+                             @RequestParam(name = "farmId") String farmId,
+                             @RequestParam(name = "unitId") String unitId,
+                             @RequestParam(name = "farmName") String farmName) throws Exception {
+        Map<String, String> map = new HashMap<>();
+        map.put("farmId", farmId);
+        map.put("unitId", unitId);
+        map.put("farmName", farmName);
+        return energyEnvDeviceService.importData(httpServletRequest, map, file);
+    }
 
     @RequestMapping("/bandingUnitId")
     public Result bandingUnitId(HttpServletRequest httpServletRequest, @RequestBody EnergyEnvDevice envDevice) {

+ 98 - 0
huimv-env-admin/src/main/java/com/huimv/env/admin/timer/WaterAndElectricity.java

@@ -712,4 +712,102 @@ public class WaterAndElectricity {
                 .headerMap(paramsMap, false).body(jsonObject.toJSONString()).timeout(30 * 1000).execute().body();
         System.out.println(post);
     }
+
+    //里塘36
+    @Scheduled(cron = "0 59 * * * ? ")
+    private void sendDate14() throws Exception {
+        QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", 36);
+        List<EnergyEnvDevice> devices = envDeviceMapper.selectList(queryWrapper);
+        Date date = new Date();//获取当前时间
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.HOUR, -1);// 20分钟前
+        //获取到完整的时间
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        JSONArray jsonArray = new JSONArray();
+
+        for (EnergyEnvDevice device : devices) {
+            JSONObject jsonObject = new JSONObject();
+            if (device.getDeviceType() == 3) {
+                //电
+                QueryWrapper<EnergyElectricity> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.eq("farm_id", 36).eq("chip_code", device.getDeviceCode());
+                queryWrapper1.between("upload_date", sdf.format(calendar.getTime()), sdf.format(date));
+                queryWrapper1.select(" IFNULL(SUM(electricity_value),0) electricityValue");
+                EnergyElectricity electricity = electricityMapper.selectOne(queryWrapper1);
+                jsonObject.put("electricity", electricity.getElectricityValue());
+                jsonObject.put("water", 0);
+            } else {
+                //水
+                QueryWrapper<EnergyWater> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.eq("farm_id", 36).eq("chip_code", device.getDeviceCode());
+                queryWrapper1.between("upload_date", sdf.format(calendar.getTime()), sdf.format(date));
+                queryWrapper1.select(" IFNULL(SUM(water_value),0) waterValue");
+                EnergyWater water = waterMapper.selectOne(queryWrapper1);
+                jsonObject.put("water", water.getWaterValue());
+                jsonObject.put("electricity", 0);
+            }
+            jsonObject.put("deviceCode", device.getDeviceCode());
+            jsonObject.put("time", sdf.format(date));
+            jsonArray.add(jsonObject);
+        }
+        HashMap<String, String> paramsMap = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("result", jsonArray);
+        System.out.println(jsonObject);
+        paramsMap.put("Content-Type", "application/json;charset=utf-8");
+        String post = HttpRequest.post("https://huatong.ifarmcloud.com/huatongApi/energy-data/getData14")
+                .headerMap(paramsMap, false).body(jsonObject.toJSONString()).timeout(30 * 1000).execute().body();
+        System.out.println(post);
+    }
+
+    //苍杭37
+    @Scheduled(cron = "0 59 * * * ? ")
+    private void sendDate15() throws Exception {
+        QueryWrapper<EnergyEnvDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_id", 37);
+        List<EnergyEnvDevice> devices = envDeviceMapper.selectList(queryWrapper);
+        Date date = new Date();//获取当前时间
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.HOUR, -1);// 20分钟前
+        //获取到完整的时间
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        JSONArray jsonArray = new JSONArray();
+
+        for (EnergyEnvDevice device : devices) {
+            JSONObject jsonObject = new JSONObject();
+            if (device.getDeviceType() == 3) {
+                //电
+                QueryWrapper<EnergyElectricity> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.eq("farm_id", 37).eq("chip_code", device.getDeviceCode());
+                queryWrapper1.between("upload_date", sdf.format(calendar.getTime()), sdf.format(date));
+                queryWrapper1.select(" IFNULL(SUM(electricity_value),0) electricityValue");
+                EnergyElectricity electricity = electricityMapper.selectOne(queryWrapper1);
+                jsonObject.put("electricity", electricity.getElectricityValue());
+                jsonObject.put("water", 0);
+            } else {
+                //水
+                QueryWrapper<EnergyWater> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.eq("farm_id", 37).eq("chip_code", device.getDeviceCode());
+                queryWrapper1.between("upload_date", sdf.format(calendar.getTime()), sdf.format(date));
+                queryWrapper1.select(" IFNULL(SUM(water_value),0) waterValue");
+                EnergyWater water = waterMapper.selectOne(queryWrapper1);
+                jsonObject.put("water", water.getWaterValue());
+                jsonObject.put("electricity", 0);
+            }
+            jsonObject.put("deviceCode", device.getDeviceCode());
+            jsonObject.put("time", sdf.format(date));
+            jsonArray.add(jsonObject);
+        }
+        HashMap<String, String> paramsMap = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("result", jsonArray);
+        System.out.println(jsonObject);
+        paramsMap.put("Content-Type", "application/json;charset=utf-8");
+        String post = HttpRequest.post("https://huatong.ifarmcloud.com/huatongApi/energy-data/getData15")
+                .headerMap(paramsMap, false).body(jsonObject.toJSONString()).timeout(30 * 1000).execute().body();
+        System.out.println(post);
+    }
 }

+ 69 - 0
huimv-env-common/pom.xml

@@ -186,5 +186,74 @@
                 <artifactId>huimv-env-common</artifactId>
                 <version>${huimvEnvCommon.version}</version>
             </dependency>
+
+            <!--sftp文件上传-->
+            <dependency>
+                <groupId>com.jcraft</groupId>
+                <artifactId>jsch</artifactId>
+                <version>0.1.54</version>
+            </dependency>
+            <dependency>
+                <groupId>junit</groupId>
+                <artifactId>junit</artifactId>
+            </dependency>
+
+            <dependency>
+                <groupId>org.jxls</groupId>
+                <artifactId>jxls</artifactId>
+                <version>2.6.0</version>
+            </dependency>
+            <dependency>
+                <groupId>org.jxls</groupId>
+                <artifactId>jxls-poi</artifactId>
+                <version>1.1.0</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi</artifactId>
+                <version>3.15</version>
+            </dependency>
+
+            <!-- poi 读取word doc-->
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi-scratchpad</artifactId>
+                <version>3.15</version>
+            </dependency>
+
+            <!-- poi 读取word docx-->
+            <!--        <dependency>-->
+            <!--            <groupId>fr.opensagres.xdocreport</groupId>-->
+            <!--            <artifactId>xdocreport</artifactId>-->
+            <!--            <version>1.0.6</version>-->
+            <!--        </dependency>-->
+
+            <!-- poi xml-->
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi-ooxml</artifactId>
+                <version>3.15</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi-ooxml-schemas</artifactId>
+                <version>3.15</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.projectlombok</groupId>
+                <artifactId>lombok</artifactId>
+                <version>1.18.12</version>
+                <scope>provided</scope>
+            </dependency>
+
+
+            <dependency>
+                <groupId>fr.opensagres.xdocreport</groupId>
+                <artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId>
+                <version>1.0.6</version>
+            </dependency>
         </dependencies>
 </project>

+ 12 - 0
huimv-env-common/src/main/java/com/huimv/env/common/entity/vo/EnergyEnvImport.java

@@ -0,0 +1,12 @@
+package com.huimv.env.common.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class EnergyEnvImport {
+    private String deviceName;
+    private String deviceCode;
+    private String type;
+    private Integer trans;
+    private String id;
+}

+ 2 - 1
huimv-env-common/src/main/java/com/huimv/env/common/service/IEnergyEnvDeviceService.java

@@ -3,6 +3,7 @@ package com.huimv.env.common.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.huimv.env.common.entity.EnergyEnvDevice;
 import com.huimv.env.common.utils.Result;
+import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.servlet.http.HttpServletRequest;
@@ -30,5 +31,5 @@ public interface IEnergyEnvDeviceService extends IService<EnergyEnvDevice> {
 
     Result deviceCount(HttpServletRequest httpServletRequest, Map<String, String> paramsMap);
 
-    Result importData(HttpServletRequest httpServletRequest, Map<String, String> paramsMap);
+    Result importData(HttpServletRequest httpServletRequest, Map<String, String> paramsMap, MultipartFile files) throws Exception;
 }

+ 63 - 2
huimv-env-common/src/main/java/com/huimv/env/common/service/impl/EnergyEnvDeviceServiceImpl.java

@@ -1,5 +1,7 @@
 package com.huimv.env.common.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -8,17 +10,27 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import com.huimv.env.common.entity.BaseFarm;
 import com.huimv.env.common.entity.EnergyEnvDevice;
+import com.huimv.env.common.entity.vo.EnergyEnvImport;
 import com.huimv.env.common.mapper.BaseFarmMapper;
 import com.huimv.env.common.mapper.BasePigpenMapper;
 import com.huimv.env.common.mapper.EnergyEnvDeviceMapper;
 import com.huimv.env.common.service.IEnergyEnvDeviceService;
+import com.huimv.env.common.utils.ExcelImportSheet;
 import com.huimv.env.common.utils.Result;
 import com.huimv.env.common.utils.ResultCode;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.hibernate.engine.jdbc.batch.spi.Batch;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import java.io.InputStream;
 import java.text.NumberFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -169,8 +181,57 @@ public class EnergyEnvDeviceServiceImpl extends ServiceImpl<EnergyEnvDeviceMappe
     }
 
     @Override
-    public Result importData(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
+    public Result importData(HttpServletRequest httpServletRequest, Map<String, String> paramsMap, MultipartFile files) throws Exception {
+        String farmId = paramsMap.get("farmId");
+        String unitId = paramsMap.get("unitId");
+        String farmName = paramsMap.get("farmName");
+        int anInt = Integer.parseInt(unitId);
+        Map<String, String> map = new HashMap<>();
+        //表头与键值对的映射关系
+        map.put("序号", "id");
+        map.put("网关类型", "type");
+        map.put("设备编号", "deviceCode");
+        map.put("互感器参数", "trans");
+        map.put("位置", "deviceName");
+        try (
+                //这里面的对象会自动关闭
+                InputStream in = files.getInputStream();
+                Workbook workbook = ExcelImportSheet.getTypeFromExtends(in, files.getOriginalFilename())
+        ) {
+
+            //根据名称获取单张表对象 也可以使用getSheetAt(int index)获取单张表的对象 获取第一张表
+            Sheet sheet = workbook.getSheetAt(0);
+            List<EnergyEnvImport> list = ExcelImportSheet.getListFromExcel(sheet, EnergyEnvImport.class, map);
+            for (EnergyEnvImport energyEnvImport : list) {
+                if (StringUtils.isNotBlank(energyEnvImport.getDeviceName())) {
+                    EnergyEnvDevice envDevice = new EnergyEnvDevice();
+                    envDevice.setUnitName(energyEnvImport.getDeviceName());
+                    envDevice.setUnitId(anInt);
+                    envDevice.setDeviceName(energyEnvImport.getDeviceName());
+                    envDevice.setFarmId(Integer.parseInt(farmId));
+                    envDevice.setRemark(farmName);
+                    if ("电表".equals(energyEnvImport.getType())) {
+                        envDevice.setDeviceType(3);
+                        envDevice.setTransformer(energyEnvImport.getTrans());
+                    } else if ("水表(大口径)".equals(energyEnvImport.getType())) {
+                        envDevice.setDeviceType(2);
+                    } else if ("水表(小口径)".equals(energyEnvImport.getType())) {
+                        envDevice.setDeviceType(1);
+                    }
+                    String deviceCode = energyEnvImport.getDeviceCode();
+                    envDevice.setDeviceCode(deviceCode.substring(deviceCode.length() - 8));
+                    energyEnvDeviceMapper.insert(envDevice);
+                    anInt++;
+                }
+            }
 
-        return null;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new Result(10001, "数据格式异常!", false);
+        } finally {
+            //写着好看的
+        }
+        return new Result(10000, "保存成功!", true);
     }
+
 }

+ 192 - 0
huimv-env-common/src/main/java/com/huimv/env/common/utils/ExcelImportSheet.java

@@ -0,0 +1,192 @@
+package com.huimv.env.common.utils;
+
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * @author 三文鱼先生
+ * @title
+ * @description 导入工具类
+ * @date 2022/8/17
+ **/
+public class ExcelImportSheet {
+
+    /**
+     * @description 根据文件后缀获取相应的Workbook对象
+     * @author 三文鱼先生
+     * @date 9:46 2022/8/17
+     * @param in 用于构建Workbook对象的输入流
+     * @param fileName 文件名称
+     * @return org.apache.poi.ss.usermodel.Workbook
+     **/
+    public static Workbook getTypeFromExtends(InputStream in , String fileName) throws Exception {
+        String[] str = fileName.split("\\.");
+        //获取文件后缀
+        String extend = str[1];
+        if(extend.equals("xls")) {
+            //2003版的excel
+            return new HSSFWorkbook(in);
+        } else if(extend.equals("xlsx")){
+            //2007版的excel
+            return new XSSFWorkbook(in);
+        }else {
+            throw new Exception("请检查文件类型是否正确。");
+        }
+    }
+
+    /**
+     * @description 将单个sheet里的数据获取到List<T>的泛型列表里面
+     * @author 三文鱼先生
+     * @date 9:47 2022/8/17
+     * @param sheet 单个的工作表
+     * @param cs 生成的对象类名
+     * @param map 表头与对象属性映射
+     * @return java.util.List<T>
+     **/
+    public static <T> List<T> getListFromExcel(Sheet sheet , Class cs , Map<String , String> map) throws Exception {
+        T e;
+        List<T> list = new ArrayList<>();
+        //根据第一行获取表头对应的属性顺序
+        List<String> paramsList = getMethodFromFirstRow(sheet , map);
+        //根据类和属性顺序的List 获取属性对应的类型属性
+        List<Class> typeClass = getParamsType(cs , paramsList);
+        //遍历所有行 从第二行开始 首行是表头字段
+        for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getLastRowNum(); i++) {
+            //单元行
+            Row row = sheet.getRow(i);
+            //一行对应一个T,将对象强转为泛型
+            e = (T) cs.newInstance();
+            //遍历单元行的每一列 设置值给泛型e
+
+            for (int j = 0; j < row.getLastCellNum(); j++) {
+                //获取一个单元格
+                Cell cell = row.getCell(j);
+
+                //调用泛型对象的set方法设置单元格里的值 这也就是为什么我们要获取属性顺序以及其对应的类型
+                cs.getMethod(getSetterMethodName(paramsList.get(j)) , typeClass.get(j))
+                        .invoke(e , getValueFromType(cell , typeClass.get(j)));
+            }
+            list.add(e);
+        }
+        return list;
+    }
+
+    /**
+     * @description 获取属性的setter方法
+     * @author 三文鱼先生
+     * @date 9:54 2022/8/17
+     * @param param 属性
+     * @return java.lang.String 返回一个setXxx
+     **/
+    public static String getSetterMethodName(String param) {
+        char[] chars = param.toCharArray();
+        //首字母大写
+        if(Character.isLowerCase(chars[0])) {
+            chars[0] -= 32;
+        }
+        //拼接set方法
+        return "set" + new String(chars);
+    }
+
+    /**
+     * @description 从第一行(表头)获取字段对应的属性的顺序
+     * @author 三文鱼先生
+     * @date 9:51 2022/8/17
+     * @param sheet 工作表
+     * @param map 表头字段与对象属性的映射
+     * @return java.util.List<java.lang.String> 属性的集合
+     **/
+    public static List<String> getMethodFromFirstRow(Sheet sheet , Map<String,String> map) throws Exception {
+        //获取表头
+        Row row = sheet.getRow(sheet.getFirstRowNum());
+        //获取到的属性列表
+        List<String> paramsList = new ArrayList<>();
+        //遍历表头
+        for(int i = row.getFirstCellNum(); i  < row.getLastCellNum(); i++) {
+            Cell cell = row.getCell(i);
+            //获取行字符串的值
+            String str = cell.getStringCellValue();
+            //键值对映射获取对应方法名称
+            if(map.containsKey(str)) {
+                //获取对应属性的set方法
+                paramsList.add(map.get(str));
+            } else {
+                throw new Exception("请检查首行数据是否正确。");
+            }
+        }
+        return  paramsList;
+    }
+
+    /**
+     * @description  根据对象和属性顺序列表,返回对应顺序的参数类型List
+     * @author 三文鱼先生
+     * @date 9:55 2022/8/17
+     * @param cs 对象类
+     * @param paramsList 表头对应的属性顺序List
+     * @return java.util.List<java.lang.Class>
+     **/
+    public static List<Class> getParamsType(Class cs , List<String> paramsList) {
+        List<Class> typeClass = new ArrayList<>();
+        //对象的所有属性
+        Field[] fields = cs.getDeclaredFields();
+        //临时的属性 - 类型映射
+        Map<String , Class> map = new HashMap();
+        //获取属性名称及类型
+        for (Field field : fields) {
+            map.put(field.getName(), field.getType());
+        }
+        //遍历属性List获取对应的类型List
+        for (String s : paramsList) {
+            typeClass.add(map.get(s));
+        }
+        return typeClass;
+    }
+
+
+    /**
+     * @description 根据对应的Class获取将对应的值类型
+     * @author 三文鱼先生
+     * @date 9:59 2022/8/17
+     * @param cell
+     * @param cs
+     * @return java.lang.Object
+     **/
+    public static Object getValueFromType(Cell cell , Class cs) {
+        if(boolean.class.equals(cs)){
+            //boolean类型
+            cell.setCellType(CellType.BOOLEAN);
+            return cell.getBooleanCellValue();
+        }else if (Date.class.equals(cs)) {
+            //日期类型 此种数据并未测试
+            return cell.getDateCellValue();
+        } else if (int.class.equals(cs) || Integer.class.equals(cs)){
+            //int类型
+            cell.setCellType(CellType.NUMERIC);
+            return (int)cell.getNumericCellValue();
+        } else if(double.class.equals(cs) || Double.class.equals(cs)) {
+            //double类型
+            cell.setCellType(CellType.NUMERIC);
+            return cell.getNumericCellValue();
+        }else if(BigDecimal.class.equals(cs) || BigDecimal.class.equals(cs)) {
+            //bigdecimal类型
+            cell.setCellType(CellType.NUMERIC);
+            return cell.getNumericCellValue();
+        }  //字符串类型
+        if (cs.equals(String.class)) {
+            //设置对应的类型
+            cell.setCellType(CellType.STRING);
+            return cell.getStringCellValue();
+        }
+        //这里还可以填充其他类型
+        else {
+            //未知类型 默认为错误类型
+            return cell.getErrorCellValue();
+        }
+    }
+}

+ 117 - 0
huimv-env-common/src/main/java/com/huimv/env/common/utils/ProcessUtil.java

@@ -0,0 +1,117 @@
+package com.huimv.env.common.utils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.List;
+
+public class ProcessUtil extends Thread{
+
+
+    public static String execute(List<String> command) {
+        StringBuffer inputStringBuffer = new StringBuffer();
+        StringBuffer errorStringBuffer = new StringBuffer();
+        try {
+            ProcessBuilder builder = new ProcessBuilder(command);
+            Process process = builder.start();
+            System.out.println("============inputStream============");
+            // 处理InputStream
+
+            Thread t1 = new Thread(() -> {
+                InputStream input = null;
+                InputStreamReader reader = null;
+                BufferedReader buffer = null;
+
+                try {
+                    input = process.getInputStream();
+                    reader = new InputStreamReader(input);
+                    buffer = new BufferedReader(reader);
+                    String inputLine = "";
+                    while ((inputLine = buffer.readLine()) != null) {
+                        System.out.println(inputLine);
+                        inputStringBuffer.append(inputLine);
+
+                    }
+                    //退出循环后表示结束流
+                    System.out.println("===》》退出循环后表示结束流");
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } finally {
+                    try {
+                        if (buffer != null) {
+                            buffer.close();
+                        }
+                        if (reader != null) {
+                            reader.close();
+                        }
+                        if (input != null) {
+                            input.close();
+                        }
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            });
+
+            t1.setName("deviceName");
+            t1.start();
+
+            System.out.println("============errorStream============");
+            // 处理ErrorStream
+            new Thread(() -> {
+                InputStream input = null;
+                InputStreamReader reader = null;
+                BufferedReader buffer = null;
+                try {
+                    input = process.getErrorStream();
+                    reader = new InputStreamReader(input);
+                    buffer = new BufferedReader(reader);
+                    String errorLine = "";
+                    while ((errorLine = buffer.readLine()) != null) {
+                        System.out.println(errorLine);
+                        errorStringBuffer.append(errorLine);
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } finally {
+                    try {
+                        if (buffer != null) {
+                            buffer.close();
+                        }
+                        if (reader != null) {
+                            reader.close();
+                        }
+                        if (input != null) {
+                            input.close();
+                        }
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }).start();
+
+            // 这里进程阻塞,将等待外部转换成功后,才往下执行
+//            process.waitFor();
+            synchronized (t1) {
+                t1.wait(100);
+            }
+
+
+            /**
+             * 只会存在一个输入流返回
+             */
+            if (inputStringBuffer != null) {
+                return inputStringBuffer.toString();
+            }
+            if (errorStringBuffer != null) {
+                return errorStringBuffer.toString();
+            }
+
+        } catch (InterruptedException | IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+        return null;
+    }
+}