zss
2024-12-10 8d4ad0d13ef71e22cc1036e2c6c00aafb20ed597
电路试验的驻波比csv报告解析
已修改6个文件
已添加2个文件
388 ■■■■■ 文件已修改
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/dto/InsProductResultDtos.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/excel/TianXianData.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/utils/DianLuUtils.java 295 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/impl/UserServiceImp.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
@@ -5,10 +5,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.annotation.ValueAuth;
import com.yuanchu.mom.annotation.ValueClassify;
import com.yuanchu.mom.dto.InsOrderPlanDTO;
import com.yuanchu.mom.dto.InsProductDto;
import com.yuanchu.mom.dto.InsProductResultDto;
import com.yuanchu.mom.dto.SubmitPlanDto;
import com.yuanchu.mom.dto.*;
import com.yuanchu.mom.mapper.InsSampleUserMapper;
import com.yuanchu.mom.pojo.InsOrderFile;
import com.yuanchu.mom.pojo.InsOrderState;
@@ -150,6 +147,13 @@
        return Result.success(insOrderPlanService.saveInsContext2(insProductResultDtos));
    }
    @ApiOperation(value = "电路试验的保存检验内容(返回/提交)")
    @PostMapping("/saveInsContext2s")
    @ValueAuth
    public Result<?> saveInsContext2s(@RequestBody InsProductResultDtos insProductResultDtos) {
        return Result.success(insOrderPlanService.saveInsContext2s(insProductResultDtos));
    }
    @ApiOperation(value = "温湿度试验+功率试验的保存检验内容")
    @PostMapping("/saveInsContext3")
    @ValueAuth
inspect-server/src/main/java/com/yuanchu/mom/dto/InsProductResultDtos.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.yuanchu.mom.dto;
import lombok.Data;
import java.util.List;
@Data
public class InsProductResultDtos {
    private List<InsProductResultDto> insProductResultDtos;
}
inspect-server/src/main/java/com/yuanchu/mom/excel/TianXianData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package com.yuanchu.mom.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@Data
public class TianXianData {
    @ExcelProperty(index = 0)
    private String no;
    @ExcelProperty(index = 1)
    private String code;
    @ExcelProperty(index = 2)
    private String port;
    @ExcelProperty(index = 3)
    private String name;
    @ExcelProperty(index = 4)
    private String angle;
    @ExcelProperty(index = 5)
    private String start;
    @ExcelProperty(index = 6)
    private String end;
    @ExcelProperty(index = 7)
    private String ask;
    @ExcelProperty(index = 8)
    private String value;
    @ExcelProperty(index = 9)
    private String result;
    public String frequency() {
        return (int)Double.parseDouble(start) + "-" + (int)Double.parseDouble(end) + "MHz";
    }
}
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.dto.InsOrderPlanDTO;
import com.yuanchu.mom.dto.InsProductResultDto;
import com.yuanchu.mom.dto.InsProductResultDtos;
import com.yuanchu.mom.dto.SubmitPlanDto;
import com.yuanchu.mom.pojo.InsOrderFile;
import com.yuanchu.mom.pojo.InsOrderUser;
@@ -66,4 +67,5 @@
    int saveInsContext3(InsProductResult insProductResult);
    int saveInsContext2s(InsProductResultDtos insProductResultDtos);
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -17,10 +17,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.dto.InsOrderPlanDTO;
import com.yuanchu.mom.dto.InsProductResultDto;
import com.yuanchu.mom.dto.SampleProductDto;
import com.yuanchu.mom.dto.SubmitPlanDto;
import com.yuanchu.mom.dto.*;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
@@ -347,7 +344,6 @@
            file.transferTo(new File(urlString));
            insOrderFile.setFileUrl(pathName);
            insOrderFileMapper.insert(insOrderFile);
            //如果是辐射试验(近场/远程上传的csv文件)
            String[] split = filename.split("\\.");
            if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("近场") && split[split.length - 1].equals("csv")) {
                fuSheUtils.getFuSheWord1(sonLaboratory, insOrderFile);
@@ -355,6 +351,8 @@
                fuSheUtils.getFuSheWord2(sonLaboratory, insOrderFile);
            }else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("xlsx") && filename.contains("交调")) {
               dianLuUtils.readDianLuFile1(sampleId,insOrderFile);
            } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("csv") && filename.contains("驻波")) {
                dianLuUtils.readDianLuFile2(sampleId, insOrderFile);
            }
        } catch (Exception e) {
            System.err.println("附件上传错误");
@@ -877,6 +875,15 @@
        return list;
    }
    //电路试验的保存检验内容(返回/提交)
    @Override
    public int saveInsContext2s(InsProductResultDtos insProductResultDtos) {
        for (InsProductResultDto insProductResultDto : insProductResultDtos.getInsProductResultDtos()) {
            saveInsContext2(insProductResultDto);
        }
       return  1;
    }
    //温湿度试验+功率试验的保存检验内容
    @Override
    public int saveInsContext3(InsProductResult insProductResult) {
inspect-server/src/main/java/com/yuanchu/mom/utils/DianLuUtils.java
@@ -7,17 +7,26 @@
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yuanchu.mom.excel.HuTiaoData;
import com.yuanchu.mom.excel.TianXianData;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.InsOrderStateMapper;
import com.yuanchu.mom.mapper.InsProductMapper;
import com.yuanchu.mom.mapper.InsProductResult2Mapper;
import com.yuanchu.mom.mapper.InsSampleMapper;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.service.InsOrderPlanService;
import com.yuanchu.mom.service.InsProductResult2Service;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
@@ -31,31 +40,39 @@
    private InsProductMapper insProductMapper;
    @Resource
    private InsSampleMapper insSampleMapper;
    private InsProductResult2Mapper insProductResult2Mapper;
    @Resource
    private InsProductResult2Mapper insProductResult2Mapper;
    private InsProductResult2Service insProductResult2Service;
    @Resource
    private InsOrderStateMapper insOrderStateMapper;
    //读取互调的文件
    public void readDianLuFile1(Integer sampleId,InsOrderFile insOrderFile) {
        List<InsProductResult2> insProductResult2s = new ArrayList<>();
        String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // æ›´æ–°ä¸ºä½ çš„æ–‡ä»¶è·¯å¾„
        List<HuTiaoData> huTiaoData = readExcelData(excelFilePath);
        //查询该样品的互调项目id
        List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
        List<HuTiaoData> huTiaoData = readExcelData1(excelFilePath);
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .eq(InsProduct::getState, 1)
                .eq(InsProduct::getInsSampleId, sampleId)
                .eq(InsProduct::getInspectionItemSubclass, "互调"));
                .eq(InsProduct::getInsSampleId, sampleId));
        //查询该样品的互调项目id
        List<InsProduct> products = insProducts.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("互调")).collect(Collectors.toList());
        if (ObjectUtils.isEmpty(products)) {
            throw new ErrorException("该样品没有互调项目");
        }
        //查询检验任务id
        List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
                .eq(InsOrderState::getInsSampleId, sampleId)
                .eq(InsOrderState::getLaboratory, "电路试验"));
        //查询原有检验数据
        List<InsProduct> productList = getInsProduct(sampleId, "电路试验");
        List<InsProductResult2> result2s = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
                .eq(InsProductResult2::getNum, orderStates.get(0).getNum())
                .in(InsProductResult2::getInsProductId, insProducts.stream().distinct().map(InsProduct::getId).collect(Collectors.toList())));
        //List<InsProduct> productList = getInsProduct(sampleId, "电路试验");
        //根据频点分类
        Map<String, List<HuTiaoData>> collect = huTiaoData.stream().collect(Collectors.groupingBy(HuTiaoData::getOften,LinkedHashMap::new, Collectors.toList()));
        Map<String, List<HuTiaoData>> collect = huTiaoData.stream()
                .collect(Collectors.groupingBy(HuTiaoData::getOften, LinkedHashMap::new, Collectors.toList()));
        for (Map.Entry<String, List<HuTiaoData>> stringListEntry : collect.entrySet()) {
            InsProductResult2 insProductResult2 = new InsProductResult2();
            insProductResult2.setOften(stringListEntry.getKey()+"(M)");//频点
@@ -84,15 +101,214 @@
            //次数
            insProductResult2.setNum(orderStates.get(0).getNum());
            //频段(先判断原有数据是否有)
            if (ObjectUtils.isNotEmpty(productList.get(0).getInsProductResult2())) {
                insProductResult2.setFrequency(productList.get(0).getInsProductResult2().get(0).getFrequency());
            if (ObjectUtils.isNotEmpty(result2s)) {
                List<String> list = result2s.stream().map(InsProductResult2::getFrequency).distinct().collect(Collectors.toList());
                for (String s : list) {
                    String[] mHzs = s.split("MHz")[0].split("-");
                    //再判断这个频点是否在频段的范围内
                    if (Integer.parseInt(stringListEntry.getKey()) <= Integer.parseInt(mHzs[1]) && Integer.parseInt(stringListEntry.getKey()) >= Integer.parseInt(mHzs[0])) {
                        insProductResult2.setFrequency(s);
                        break;
            }
            insProductResult2Mapper.insert(insProductResult2);
                }
                if (ObjectUtils.isEmpty(insProductResult2.getFrequency())) {
                    throw new ErrorException("没有找到" + stringListEntry.getKey() + "对应的频段");
                }
            }
            insProductResult2s.add(insProductResult2);
        }
        insProductResult2Service.saveBatch(insProductResult2s);
    }
    //读取天线的文件
    public void readDianLuFile2(Integer sampleId, InsOrderFile insOrderFile) {
        List<InsProductResult2> insProductResult2s = new ArrayList<>();
        String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // æ›´æ–°ä¸ºä½ çš„æ–‡ä»¶è·¯å¾„
        List<TianXianData> tianXianData = readExcelData2(excelFilePath);
        //查询检验任务id
        List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
                .eq(InsOrderState::getInsSampleId, sampleId)
                .eq(InsOrderState::getLaboratory, "电路试验"));
        List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .eq(InsProduct::getState, 1)
                .eq(InsProduct::getInsSampleId, sampleId));
        //查询该样品的电压驻波比项目id
        List<InsProduct> products1 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("电压驻波比")).collect(Collectors.toList());
        //查询该样品的同极化隔离度项目id
        List<InsProduct> products2 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("同极化隔离度")).collect(Collectors.toList());
        //查询该样品的异极化隔离度项目id
        List<InsProduct> products3 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("异极化隔离度")).collect(Collectors.toList());
        //查询该样品的幅度偏差项目id
        List<InsProduct> products4 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("幅度偏差")).collect(Collectors.toList());
        //查询该样品的最大相位偏差项目id
        List<InsProduct> products5 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("最大相位偏差")).collect(Collectors.toList());
        //获取所有频段,根据频段进行分类
        Map<String, List<TianXianData>> map = tianXianData.stream().collect(Collectors.groupingBy(TianXianData::frequency, LinkedHashMap::new, Collectors.toList()));
        for (Map.Entry<String, List<TianXianData>> listEntry : map.entrySet()) {
            //获取信息,根据检验项目进行分类
            Map<String, List<TianXianData>> collect = listEntry.getValue().stream().collect(Collectors.groupingBy(TianXianData::getName, LinkedHashMap::new, Collectors.toList()));
            for (Map.Entry<String, List<TianXianData>> entry : collect.entrySet()) {
                InsProductResult2 insProductResult2 = new InsProductResult2();
                if (entry.getKey().contains("驻波")) {
                    if (products1.size() <= 0) {
                        throw new ErrorException("电压驻波比项目未找到");
                    }
                    insProductResult2.setInsProductId(products1.get(0).getId());//电压驻波比
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    insProductResult2.setAngle("0°");//角度
                    insProductResult2.setNum(orderStates.get(0).getNum());//次数
                    //获取端口
                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
                    insProductResult2.setPort(port);//端口
                    //获取检验值
                    String value = entry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
                    insProductResult2.setValue("[[" + value + "]]");//值
                    insProductResult2s.add(insProductResult2);
                } else if (entry.getKey().contains("同极化隔离") || entry.getKey().contains("同列隔离")) {
                    if (products2.size() <= 0) {
                        throw new ErrorException("同极化隔离项目未找到");
                    }
                    insProductResult2.setInsProductId(products2.get(0).getId());//同极化隔离
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    insProductResult2.setAngle("0°");//角度
                    insProductResult2.setNum(orderStates.get(0).getNum());//次数
                    //获取端口
                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
                    insProductResult2.setPort(port);//端口
                    //获取检验值
                    String value = entry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
                    insProductResult2.setValue("[[" + value + "]]");//值
                    insProductResult2s.add(insProductResult2);
                } else if (entry.getKey().contains("异极化隔离") || entry.getKey().contains("端口间隔离")) {
                    if (products3.size() <= 0) {
                        throw new ErrorException("异极化隔离项目未找到");
                    }
                    insProductResult2.setInsProductId(products3.get(0).getId());//异极化隔离
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    insProductResult2.setAngle("0°");//角度
                    insProductResult2.setNum(orderStates.get(0).getNum());//次数
                    //获取端口
                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
                    insProductResult2.setPort(port);//端口
                    //获取检验值
                    String value = entry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
                    insProductResult2.setValue("[[" + value + "]]");//值
                    insProductResult2s.add(insProductResult2);
                }
            }
        }
        /*幅度和相位需要另外写功能*/
        //先过滤出端口号一栏为偏差值的数据
        List<TianXianData> dataList = tianXianData.stream().filter(tianXianData1 -> tianXianData1.getPort().equals("偏差值")).collect(Collectors.toList());
        //再根据检验项目进行分组
        Map<String, List<TianXianData>> collect = dataList.stream().collect(Collectors.groupingBy(TianXianData::getName, LinkedHashMap::new, Collectors.toList()));
        for (Map.Entry<String, List<TianXianData>> entry : collect.entrySet()) {
            if (entry.getKey().contains("幅度")) {
                if (products4.size() <= 0) {
                    throw new ErrorException("幅度偏差项目未找到");
                }
                Map<String, List<TianXianData>> listHashMap = new HashMap<>();
                for (TianXianData xianData : entry.getValue()) {
                    //获取频段(先根据start字段判断这个频点在哪个频段之间)
                    List<String> strings = map.keySet().stream().filter(s ->
                            !s.split("MHz")[0].split("-")[0].equals(s.split("MHz")[0].split("-")[1])
                    ).collect(Collectors.toList());
                    for (String s : strings) {
                        String[] mHzs = s.split("MHz")[0].split("-");
                        //再判断这个频点是否在频段的范围内
                        if (Double.parseDouble(xianData.getStart()) <= Double.parseDouble(mHzs[1]) && Double.parseDouble(xianData.getStart()) >= Double.parseDouble(mHzs[0])) {
                            // æ£€æŸ¥æ˜¯å¦å·²ç»å­˜åœ¨è¿™ä¸ªé”®çš„æ¡ç›®
                            List<TianXianData> xianDataList = listHashMap.getOrDefault(s, new ArrayList<>());
                            // å°†æ•°æ®æ·»åŠ åˆ°åˆ—è¡¨ä¸­ï¼Œè€Œä¸æ˜¯è¦†ç›–æ—§å€¼
                            xianDataList.add(xianData);
                            // å°†æ›´æ–°åŽçš„列表放回map中
                            listHashMap.put(s, xianDataList);
                            break;
                        }
                    }
                }
                for (Map.Entry<String, List<TianXianData>> listEntry : listHashMap.entrySet()) {
                    InsProductResult2 insProductResult2 = new InsProductResult2();
                    insProductResult2.setInsProductId(products4.get(0).getId());//幅度偏差
                    insProductResult2.setAngle("0°");//角度
                    insProductResult2.setNum(orderStates.get(0).getNum());//次数
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    //获取端口
                    String port = listEntry.getValue().stream().map(tianXianData1 -> String.valueOf((int) Double.parseDouble(tianXianData1.getStart()))).collect(Collectors.joining(","));
                    insProductResult2.setPort(port);//端口
                    //获取检验值
                    String value = listEntry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
                    insProductResult2.setValue("[[" + value + "]]");//值
                    insProductResult2s.add(insProductResult2);
                }
            } else if (entry.getKey().contains("相位")) {
                if (products5.size() <= 0) {
                    throw new ErrorException("最大相位偏差项目未找到");
                }
                Map<String, List<TianXianData>> listHashMap = new HashMap<>();
                for (TianXianData xianData : entry.getValue()) {
                    //获取频段(先根据start字段判断这个频点在哪个频段之间)
                    List<String> strings = map.keySet().stream().filter(s ->
                            !s.split("MHz")[0].split("-")[0].equals(s.split("MHz")[0].split("-")[1])
                    ).collect(Collectors.toList());
                    for (String s : strings) {
                        String[] mHzs = s.split("MHz")[0].split("-");
                        //再判断这个频点是否在频段的范围内
                        if (Double.parseDouble(xianData.getStart()) <= Double.parseDouble(mHzs[1]) && Double.parseDouble(xianData.getStart()) >= Double.parseDouble(mHzs[0])) {
                            // æ£€æŸ¥æ˜¯å¦å·²ç»å­˜åœ¨è¿™ä¸ªé”®çš„æ¡ç›®
                            List<TianXianData> xianDataList = listHashMap.getOrDefault(s, new ArrayList<>());
                            // å°†æ•°æ®æ·»åŠ åˆ°åˆ—è¡¨ä¸­ï¼Œè€Œä¸æ˜¯è¦†ç›–æ—§å€¼
                            xianDataList.add(xianData);
                            // å°†æ›´æ–°åŽçš„列表放回map中
                            listHashMap.put(s, xianDataList);
                        }
                    }
                }
                for (Map.Entry<String, List<TianXianData>> listEntry : listHashMap.entrySet()) {
                    InsProductResult2 insProductResult2 = new InsProductResult2();
                    insProductResult2.setInsProductId(products5.get(0).getId());//最大相位偏差
                    insProductResult2.setAngle("0°");//角度
                    insProductResult2.setNum(orderStates.get(0).getNum());//次数
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    //获取端口
                    String port = listEntry.getValue().stream().map(tianXianData1 -> String.valueOf((int) Double.parseDouble(tianXianData1.getStart()))).collect(Collectors.joining(","));
                    insProductResult2.setPort(port);//端口
                    //获取检验值
                    String value = listEntry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
                    insProductResult2.setValue("[[" + value + "]]");//值
                    insProductResult2s.add(insProductResult2);
                }
        }
    }
        Map<String, List<InsProductResult2>> groupedMap = insProductResult2s.stream()
                .collect(Collectors.groupingBy(item -> item.getInsProductId() + "_" + item.getFrequency()));
        // è¿‡æ»¤å‡ºåˆ†ç»„后数量等于1的组
        List<InsProductResult2> filteredList = groupedMap.values().stream()
                .filter(list -> list.size() == 1)
                .flatMap(List::stream)
                .collect(Collectors.toList());
        for (Map.Entry<String, List<InsProductResult2>> entry : groupedMap.entrySet()) {
            if (entry.getValue().size() > 1) {
                InsProductResult2 result2 = new InsProductResult2();
                result2.setInsProductId(Integer.parseInt(entry.getKey().split("_")[0]));
                result2.setFrequency(entry.getKey().split("_")[1]);
                result2.setPort(entry.getValue().stream().map(InsProductResult2::getPort).collect(Collectors.joining(",")));
                String value = entry.getValue().stream().map(insProductResult2 -> {
                    return insProductResult2.getValue().replace("[[", "").replace("]]", "");
                }).collect(Collectors.joining(","));
                result2.setValue("[[" + value + "]]");
                result2.setAngle("0°");
                result2.setOften(entry.getValue().stream().map(InsProductResult2::getOften).collect(Collectors.joining(",")));
                filteredList.add(result2);
            }
        }
        System.out.println(filteredList);
        //insProductResult2Service.saveBatch(filteredList);
    }
    public static List<HuTiaoData> readExcelData(String filePath) {
    public static List<HuTiaoData> readExcelData1(String filePath) {
        List<HuTiaoData> dataList = new ArrayList<>();
        // åˆå§‹åŒ–监听器
@@ -115,21 +331,46 @@
        return dataList;
    }
    public List<InsProduct> getInsProduct(Integer id, String laboratory) {
        List<InsProduct> insProducts = new ArrayList<>();
        //样品
        insProducts = insSampleMapper.getInsProduct1(id, laboratory);
        if (insProducts.size() == 0) {
            insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getInsSampleId, id)
                    .eq(InsProduct::getState, 1)
                    .eq(InsProduct::getSonLaboratory, laboratory));
            for (InsProduct insProduct : insProducts) {
                List<InsProductResult2> insProductResult2List = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
                        .eq(InsProductResult2::getInsProductId, insProduct.getId()).isNull(InsProductResult2::getNum));
                insProduct.setInsProductResult2(insProductResult2List);
    public static List<TianXianData> readExcelData2(String filePath) {
        List<TianXianData> dataList = new ArrayList<>();
        // åˆå§‹åŒ–监听器
        AnalysisEventListener<TianXianData> listener = new AnalysisEventListener<TianXianData>() {
            @Override
            public void invoke(TianXianData data, AnalysisContext context) {
                // å¤„理每行数据,这里简单地添加到数据列表中
                dataList.add(data);
            }
            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                // æ‰€æœ‰æ•°æ®è§£æžå®ŒæˆåŽçš„æ“ä½œï¼Œè¿™é‡Œæš‚不实现
            }
        };
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "GB2312"));
             Workbook workbook = new XSSFWorkbook();
             FileOutputStream fileOut = new FileOutputStream(filePath.replace("csv", "xlsx"))) {
            Sheet sheet = workbook.createSheet("Sheet1");
            String line;
            int rowNum = 0;
            while ((line = reader.readLine()) != null) {
                Row row = sheet.createRow(rowNum++);
                String[] columns = line.split(",");
                for (int i = 0; i < columns.length; i++) {
                    Cell cell = row.createCell(i);
                    cell.setCellValue(columns[i]);
            }
        }
        return insProducts;
            workbook.write(fileOut);
            System.out.println("CSV æ–‡ä»¶å·²æˆåŠŸè½¬æ¢ä¸º Excel æ–‡ä»¶");
        } catch (IOException e) {
            e.printStackTrace();
    }
        // è¯»å–Excel文件
        EasyExcel.read(filePath.replace("csv", "xlsx"), TianXianData.class, listener).sheet().headRowNumber(-1).doRead();
        return dataList;
    }
}
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
@@ -36,7 +36,7 @@
    @Test
    void contextLoads() {
        //dianLuUtils.readDianLuFile1();
        //dianLuUtils.readDianLuFile2();
    }
user-server/src/main/java/com/yuanchu/mom/service/impl/UserServiceImp.java
@@ -158,7 +158,8 @@
                user.setAccount(person.getEmployeeID());
                user.setPhone(person.getPhoneNumber());
                user.setEmail(person.getCompanyEmail());
                user.setIsCustom(person.getCompanyId().equals("SC2463") ? 0 : 1);
                //todo æ ¹æ®å®¢æˆ·å…¬å¸çš„编号而改变
                user.setIsCustom(person.getCompanyId().equals("SC2301") ? 0 : 1);
                user.setPassword(DigestUtils.md5DigestAsHex("zttZTT123!".getBytes()));
                user.setCompany(BeanUtil.isNotEmpty(custom) ? (custom.getId() + "") : companyName);
                user.setAddress("未填写");