zss
2024-11-15 ad8f321d123f7ccf6793e550dd1eff9fc48faa31
辐射试验的文件上传csv文件有第二种样式,需要不同形式不同解析
已修改4个文件
438 ■■■■■ 文件已修改
inspect-server/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java 379 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/pom.xml
@@ -77,5 +77,11 @@
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>5.5.2</version>
        </dependency>
    </dependencies>
</project>
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -327,7 +327,7 @@
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = file.getOriginalFilename().replace("#","&");
            pathName = file.getOriginalFilename().replace("#", "&");
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            insOrderFile.setFileUrl(pathName);
@@ -354,7 +354,12 @@
            String[] split = filename.split("\\.");
            if (ObjectUtils.isNotEmpty(sonLaboratory) && (sonLaboratory.equals("近场") || sonLaboratory.equals("远场")) &&
                    split[split.length - 1].equals("csv")) {
                fuSheUtils.getFuSheWord(sonLaboratory, insOrderFile);
                //判断是哪种csv文件,是否有——
                if (!file.getOriginalFilename().contains("——")) {
                    fuSheUtils.getFuSheWord1(sonLaboratory, insOrderFile);
                } else {
                    fuSheUtils.getFuSheWord2(sonLaboratory, insOrderFile);
                }
            }
        } catch (Exception e) {
            System.err.println("附件上传错误");
@@ -826,8 +831,8 @@
        insProductResultMapper.delete(Wrappers.<InsProductResult>lambdaQuery()
                .eq(InsProductResult::getInsProductId, insProductResult.getInsProductId())
                .eq(InsProductResult::getNum, insProductResult.getNum()));
        insProductResult.setEquipValue("[{\"v\":\""+insProductResult.getEquipValue()+"\"}]");
        insProductResult.setEquipName("[{\"v\":\""+insProductResult.getEquipName()+"\"}]");
        insProductResult.setEquipValue("[{\"v\":\"" + insProductResult.getEquipValue() + "\"}]");
        insProductResult.setEquipName("[{\"v\":\"" + insProductResult.getEquipName() + "\"}]");
        insProductResultMapper.insert(insProductResult);
        return 0;
    }
@@ -1113,7 +1118,7 @@
        info.setJumpPath("b1-inspect-order-plan");
        informationNotificationService.addInformationNotification(info);
        // todo 企业微信消息推送@zss
            /*HashMap<String, Object> map = new HashMap<>();
            HashMap<String, Object> map = new HashMap<>();
            String account = userMapper.selectById(userId).getAccount();
            map.put("touser", account);//接收消息成员的账号'ZT-031292'这种类型(如果有多个用'|'分隔)
            map.put("toparty", "");//接收部门id
@@ -1126,7 +1131,7 @@
            map.put("safe", 0);//是否保密消息.0否
            map.put("enable_id_trans", 0);//是否开启id转译.0否
            map.put("enable_duplicate_check", 0);//是否开启重复消息检查.0否
            qywxApi.send(map);*/
            qywxApi.send(map);
//        }
        //复核人--检验单相关负责人
        InsSampleUser insSampleUser = new InsSampleUser();
@@ -1137,13 +1142,13 @@
        insSampleUserMapper.insert(insSampleUser);
        /*生成电路试验的站点报告并上传到附件中*/
        if (submitPlanDto.getLaboratory().equals("电路试验")) {
            wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
            //wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
            //todo 电路站点报告 正式库部署放开
            /*try {
            try {
                wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
            } catch (Exception e) {
                throw new ErrorException("电路试验的站点报告生成有误,请联系开发人员调整!");
            }*/
            }
        }
        /*// 删除数采采集次数
        String key = "frequency" + ":" + submitPlanDto.getEntrustCode() + ":*";
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -287,6 +287,21 @@
                }
            }
        }
        //todo 根据订单类型判断是否需要推送企业微信 @zss
        if (!insOrder.getFormType().equals("其他成品")) {
            String account = userMapper.selectById(insOrder.getIssueUser()).getAccount();
            HashMap<String, Object> map = new HashMap<>();
            map.put("touser", account);//接收消息成员的账号'ZT-031292'这种类型(如果有多个用'|'分隔)
            map.put("msgtype", "text");//消息类型 text:文本
            map.put("agentid", 1000517);//应用id
            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("content", "您有一条订单需要完成,请前往LIMS系统查看。订单号是:"+insOrder.getEntrustCode()+",请前往LIMS系统查看。<a href=\"https://ztwxlims.ztt.cn:7443/enter\">中天通信LIMS系统 </a>");
            map.put("text", hashMap);//消息内容
            map.put("safe", 0);//是否保密消息.0否
            map.put("enable_id_trans", 0);//是否开启id转译.0否
            map.put("enable_duplicate_check", 0);//是否开启重复消息检查.0否
            qywxApi.send(map);
        }
        return insOrder.getId();
    }
@@ -329,21 +344,6 @@
            //审核通过才会生成委托编号
            insOrder.setEntrustCode(giveCode.giveCode2("WT-", "ins_order", "-", "yyMMdd"));
            insOrder.setSendTime(LocalDateTime.now());
            //todo 根据订单类型判断是否需要推送企业微信 @zss
           /* if (!order.getFormType().equals("其他成品")) {
                String account = userMapper.selectById(order.getIssueUser()).getAccount();
                HashMap<String, Object> map = new HashMap<>();
                map.put("touser", account);//接收消息成员的账号'ZT-031292'这种类型(如果有多个用'|'分隔)
                map.put("msgtype", "text");//消息类型 text:文本
                map.put("agentid", 1000517);//应用id
                HashMap<String, Object> hashMap = new HashMap<>();
                hashMap.put("content", "您有一条订单需要完成,请前往LIMS系统查看。订单号是:"+order.getEntrustCode()+",请前往LIMS系统查看。<a href=\"https://ztwxlims.ztt.cn:7443/enter\">中天通信LIMS系统 </a>");
                map.put("text", hashMap);//消息内容
                map.put("safe", 0);//是否保密消息.0否
                map.put("enable_id_trans", 0);//是否开启id转译.0否
                map.put("enable_duplicate_check", 0);//是否开启重复消息检查.0否
                qywxApi.send(map);
            }*/
        }
        return insOrderMapper.updateById(insOrder);
    }
inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java
@@ -6,6 +6,7 @@
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.deepoove.poi.util.TableTools;
import com.opencsv.CSVReader;
import com.yuanchu.mom.dto.Exceldata;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.InsOrderFileMapper;
@@ -45,7 +46,7 @@
    @Resource
    InsOrderMapper insOrderMapper;
    public void getFuSheWord(String sonLaboratory, InsOrderFile insOrderFile) {
    public void getFuSheWord1(String sonLaboratory, InsOrderFile insOrderFile) {
        //读取excel文件内容
        String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // 更新为你的文件路径
        FileInputStream fileInputStream = null;
@@ -86,7 +87,8 @@
                                    default:
                                        System.out.print("NULL\t");
                                }
                            } else {
                            }
                            else {
                                switch (cell.getCellType()) {
                                    case STRING:
                                        if (StringUtils.isNotEmpty(s)) {
@@ -126,7 +128,6 @@
            exceldata.setProject(project);
            exceldata.setDataRow(datas1);
            System.out.println(exceldata);
            HashMap<String, Object> map = new HashMap<>();
            for (String s : datas1.keySet()) {
                Map<String, List<HashMap<String, Object>>> numbers = (Map<String, List<HashMap<String, Object>>>) datas1.get(s);
@@ -186,6 +187,149 @@
                e.printStackTrace();
            }
        }
    }
    public void getFuSheWord2(String sonLaboratory, InsOrderFile insOrderFile) {
        //读取excel文件内容
        String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // 更新为你的文件路径
        String fileEncoding = "GBK"; // 或其他编码格式,如GBK, ISO-8859-1 等
        Exceldata exceldata = new Exceldata();
        HashMap<Integer, Object> project = new HashMap<>();
        HashMap<String, Object> biaozhun = new HashMap<>();
        HashMap<String, Object> pingjunzhi = new HashMap<>();
        HashMap<String, Object> datas1 = new HashMap<>();
        HashMap<String, Object> map2 = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<>();
        XWPFDocument document = new XWPFDocument();
        String jiaodu="";
        String port="";
        try (CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(excelFilePath), fileEncoding))) {
            List<String[]> records = reader.readAll();
            for (int i = 0; i < records.size(); i++) {
                HashMap<String, Object> map1 = new HashMap<>();
                HashMap<String, Object> pingjun = new HashMap<>();
                String[] record = records.get(i);
                for (int i1 = 0; i1 < record.length; i1++) {
                    String value = record[i1];
                    if (i == 0) {
                        project.put(i1,value);
                    }
                    if (i == 1) {
                        biaozhun.put(project.get(i1).toString(),value);
                    }
                    if (i>2) {
                        if (i1==0&&StringUtils.isNotEmpty(value)) {
                            if (map2.size() != 0) {
                                map2.put(port, list);
                                datas1.put(jiaodu, map2);
                                map2 = new HashMap<>();
                            }
                            datas1.put(value, "");
                            jiaodu=value;
                        } else if (i1 == 1 && StringUtils.isNotEmpty(value)) {
                            if (list.size() != 0) {
                                map2.put(port, list);
                                list = new ArrayList<>();
                            }
                            map2.put(value, "");
                            port=value;
                        } else if (StringUtils.isNotEmpty(value)) {
                            if (value.equals("最大值")||value.equals("最小值")||value.equals("指标")||value.equals("类别")) {
                                break;
                            } else if (value.equals("平均值")) {
                                for (int i2 = 0; i2 < record.length; i2++) {
                                    String value1 = record[i2];
                                    if (value1.equals("平均值")) {
                                        continue;
                                    }
                                    pingjun.put(project.get(i2).toString(),value1);
                                }
                                break;
                            }
                            map1.put(project.get(i1).toString(),value);
                        }
                    }
                    System.out.print(value + " ");
                }
                if (map1.size()!=0) {
                    list.add(map1);
                }
                if (pingjun.size()!=0) {
                    pingjunzhi.put(jiaodu,pingjun);
                }
                if (i==records.size()-1) {
                    map2.put(port,list);
                    datas1.put(jiaodu,map2);
                }
                System.out.println();
            }
            System.out.println("-----------------");
        } catch (Exception e) {
            e.printStackTrace();
        }
        exceldata.setProject(project);
        exceldata.setDataRow(datas1);
        System.out.println(exceldata);
        HashMap<String, Object> map = new HashMap<>();
        for (String s : datas1.keySet()) {
            Map<String, List<HashMap<String,Object>>> numbers = (Map<String, List<HashMap<String,Object>>>) datas1.get(s);
            for (String s1 : numbers.keySet()) {
                List<HashMap<String, Object>> hashMaps = numbers.get(s1);
                List<Integer> floatList = new ArrayList<>();
                for (Map<String, Object> number : hashMaps) {
                    number.put("端口", s1);
                    floatList.add( Integer.parseInt((String) number.get("测试频率(MHZ)")));
                }
                Integer maxValue = Collections.max(floatList);
                Integer minValue = Collections.min(floatList);
                if (map.get(minValue + "-" + maxValue+"-"+s) == null) {
                    map.put(minValue + "-" + maxValue+"-"+s, s1);
                } else {
                    Object o = map.get(minValue + "-" + maxValue+"-"+s);
                    map.put(minValue + "-" + maxValue+"-"+s, s1 + "," + o);
                }
            }
        }
        System.out.println(map);
        int size = map.size();
        for (String s1 : map.keySet()) {
            String o = map.get(s1).toString();
            List<String> collect = Arrays.stream(o.split(",")).collect(Collectors.toList());
            int size1 = -1;
            for (String s : datas1.keySet()) {
                Map<String, List<HashMap<String,Object>>> o1 = (Map<String, List<HashMap<String,Object>>>)datas1.get(s);
                for (String s3 : o1.keySet()) {
                    List<HashMap<String, Object>> numbers =  o1.get(s3);
                    for (String s2 : collect) {
                        if (s3.equals(s2)) {
                            if (numbers.size() > size1) {
                                size1 = numbers.size();
                            }
                        }
                    }
                    map.put(s1, o + "," + size1);
                }
            }
        }
        System.out.println(map);
        try {
            createWord2(sonLaboratory,document,exceldata, map,pingjunzhi,biaozhun,insOrderFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
@@ -401,6 +545,235 @@
        }
    }
    public void createWord2(String sonLaboratory,XWPFDocument document,Exceldata exceldata, HashMap<String, Object> map,HashMap<String,Object> pj,HashMap<String,Object> bz,InsOrderFile insOrderFile) throws IOException {
        int size = 1;
        for (String s : map.keySet()) {
            Map<String, Object> dataRow = exceldata.getDataRow();
            String result = s.substring(s.lastIndexOf("-") + 1);
            String result1 = s.substring(0,s.lastIndexOf("-"));
            String o = map.get(s).toString();
            String[] split = o.split(",");
            Integer s1 = Integer.parseInt(split[split.length - 1]);
            Integer i1 = split.length - 1;
            int row = 3 + s1;
            int cell = 6 + i1;
            HashMap<String,Object> o2 =(HashMap<String,Object>) pj.get(result);
            XWPFTable table1 = document.createTable(2, cell);
            mergeCellsHorizontally(table1, 1, 0, cell - 1);
            mergeCellsHorizontally(table1, 0, 4, cell - 2);
            XWPFParagraph paragraph12 = table1.getRow(0).getCell(0).getParagraphArray(0);
            XWPFRun run12 = paragraph12.createRun();
            run12.setText("序号");
            XWPFParagraph paragraph13 = table1.getRow(0).getCell(1).getParagraphArray(0);
            XWPFRun run13 = paragraph13.createRun();
            run13.setText("检验项目");
            XWPFParagraph paragraph14 = table1.getRow(0).getCell(2).getParagraphArray(0);
            XWPFRun run14 = paragraph14.createRun();
            run14.setText("单位");
            XWPFParagraph paragraph15 = table1.getRow(0).getCell(3).getParagraphArray(0);
            XWPFRun run15 = paragraph15.createRun();
            run15.setText("标准要求");
            XWPFParagraph paragraph16 = table1.getRow(0).getCell(cell-1).getParagraphArray(0);
            XWPFRun run16 = paragraph16.createRun();
            run16.setText("检验结论");
            XWPFParagraph paragraph17 = table1.getRow(0).getCell(4).getParagraphArray(0);
            XWPFRun run17 = paragraph17.createRun();
            run17.setText("检验结果");
            XWPFParagraph paragraph18 = table1.getRow(1).getCell(0).getParagraphArray(0);
            XWPFRun run18 = paragraph18.createRun();
            run18.setText("频段: "+result1+"MHz "+"下倾角"+result);
            List<String> collect = Arrays.stream(split).collect(Collectors.toList());
            int size1 = 0;
            List<Map<String, Object>> list = new ArrayList<>();
            // 对所有的键聚合
            Map<String, List<Map<String, Object>>> aggregatedMap = new HashMap<>();
            Map<String, List<Map<String, Object>>> o1 = (Map<String, List<Map<String, Object>>>) dataRow.get(result);
            for (String s2 : collect) {
                if (s2.contains("端口")||s2.contains("P")) {
                    List<Map<String, Object>> mapList = o1.get(s2);
                    list.addAll(mapList);
                }
            }
            // 遍历每一个项目
            for (Map<String, Object> item : list) {
                for (String key : item.keySet()) {
                    // 如果该键在 aggregatedMap 中不存在,则创建一个新的 List
                    aggregatedMap.putIfAbsent(key, new ArrayList<>());
                    // 将当前项目添加到对应键的 List 中
                    aggregatedMap.get(key).add(item);
                }
            }
            for (String s2 : aggregatedMap.keySet()) {
                if (s2.equals("端口")||s2.equals("测试频率(MHZ)")) {
                    continue;
                }
                List<Map<String, Object>> mapList = aggregatedMap.get(s2);
                // 创建一个表格
                XWPFTable table = document.createTable(row, cell);
                table.setWidth("100%");
           /* // 合并单元格
            mergeCellsHorizontally(table, 0, 0, 7);*/
                //垂直
                mergeCellsVertically(table, 0, 0, row - 1);
                mergeCellsVertically(table, 1, 0, row - 1);
                mergeCellsVertically(table, 2, 0, row - 1);
                mergeCellsVertically(table, 3, 0, row - 1);
                mergeCellsVertically(table, 4, 0, 1);
                mergeCellsVertically(table, cell - 1, 0, 1);
                mergeCellsVertically(table, cell - 1, 2, row - 2);
                //水平
                mergeCellsHorizontally(table, 0, 5, cell - 2);
                mergeCellsHorizontally(table, row - 1, 5, cell - 2);
                // 设置单元格文本并居中
                XWPFParagraph paragraph = table.getRow(0).getCell(0).getParagraphArray(0);
                XWPFRun run = paragraph.createRun();
                run.setText(String.valueOf(size));
                XWPFParagraph paragraph1 = table.getRow(0).getCell(1).getParagraphArray(0);
                XWPFRun run1 = paragraph1.createRun();
                run1.setText(s2);
                // 调用方法提取第一个括号内的内容
                String firstContent = extractFirstContentFromBrackets(s2);
                if (firstContent != null) {
                    XWPFParagraph paragraph2 = table.getRow(0).getCell(2).getParagraphArray(0);
                    XWPFRun run2 = paragraph2.createRun();
                    run2.setText(firstContent);
                } else {
                    System.out.println("没有找到括号内的内容。");
                }
                XWPFParagraph paragraph3 = table.getRow(0).getCell(3).getParagraphArray(0);
                XWPFRun run3 = paragraph3.createRun();
                run3.setText(bz.get(s2).toString());
                XWPFParagraph paragraph4 = table.getRow(0).getCell(4).getParagraphArray(0);
                XWPFRun run4 = paragraph4.createRun();
                run4.setText("频率(MHz)");
                XWPFParagraph paragraph5 = table.getRow(0).getCell(5).getParagraphArray(0);
                XWPFRun run5 = paragraph5.createRun();
                run5.setText("端口");
                XWPFParagraph paragraph6 = table.getRow(0).getCell(cell - 1).getParagraphArray(0);
                XWPFRun run6 = paragraph6.createRun();
                run6.setText("/");
                XWPFParagraph paragraph7 = table.getRow(1).getCell(cell - 1).getParagraphArray(0);
                XWPFRun run7 = paragraph7.createRun();
                run7.setText("合格");
                XWPFParagraph paragraph8 = table.getRow(row - 1).getCell(4).getParagraphArray(0);
                XWPFRun run8 = paragraph8.createRun();
                run8.setText("平均值");
                XWPFParagraph paragraph9 = table.getRow(row - 1).getCell(cell - 1).getParagraphArray(0);
                XWPFRun run9 = paragraph9.createRun();
                run9.setText("/");
                for (int i = 0; i < collect.size(); i++) {
                    String s3 = collect.get(i);
                    if (s3.contains("端口")||s3.contains("P")) {
                        XWPFParagraph paragraph10 = table.getRow(1).getCell(5 + i).getParagraphArray(0);
                        XWPFRun run10 = paragraph10.createRun();
                        run10.setText(s3);
                    }
                }
                Map<Integer, List<Map<String, Object>>> group = mapList.stream()
                        .collect(Collectors.groupingBy(item -> Integer.parseInt(item.get("测试频率(MHZ)").toString()) ));
                int hang = 2;
                Double count = 0.0;
                for (Integer aDouble : group.keySet()) {
                    List<Map<String, Object>> mapList1 = group.get(aDouble);
                    for (Map<String, Object> stringObjectMap : mapList1) {
                        String port = stringObjectMap.get("端口").toString();
                        for (int i = 5; i < cell - 1; i++) {
                            String text = table.getRow(1).getCell(i).getText();
                            if (text.equals(port)) {
                                XWPFParagraph paragraph10 = table.getRow(hang).getCell(i).getParagraphArray(0);
                                XWPFRun run10 = paragraph10.createRun();
                                count=Double.parseDouble(stringObjectMap.get(s2).toString())+count;
                                String project = stringObjectMap.get(s2).toString();
                                run10.setText(project);
                            }
                        }
                    }
                    XWPFParagraph paragraph10 = table.getRow(hang).getCell(4).getParagraphArray(0);
                    XWPFRun run10 = paragraph10.createRun();
                    run10.setText(String.valueOf(aDouble));
                    hang++;
                }
                XWPFParagraph paragraph11 = table.getRow(row-1).getCell(5).getParagraphArray(0);
                XWPFRun run11 = paragraph11.createRun();
                double v = count / (Double.parseDouble(s1.toString()) * Double.parseDouble(i1.toString()));
                run11.setText(o2.get(s2).toString());
                size++;
            }
        }
        // 输出到文件
        try {
            InsOrder insOrder = insOrderMapper.selectById(insOrderFile.getInsOrderId());
            String[] split = insOrderFile.getFileName().split("\\.");
            String name = insOrderFile.getFileName().replace("#","&").substring(0, (insOrderFile.getFileName().length() - split[split.length - 1].length()));
            FileOutputStream out = new FileOutputStream(wordUrl + "/" + insOrder.getEntrustCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx");
            document.write(out);
            out.close();
            document.close();
            InsOrderFile orderFile = new InsOrderFile();
            orderFile.setInsOrderId(insOrderFile.getInsOrderId());
            orderFile.setFileUrl(insOrder.getEntrustCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx");
            orderFile.setType(2);
            orderFile.setFileName(insOrder.getEntrustCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx");
            orderFile.setSonLaboratory(sonLaboratory);
            insOrderFileMapper.insert(orderFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 水平合并单元格
    private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {