zss
2025-01-13 476740c4330135b38be6a32f54dbe1bbcd32476a
Merge branch 'master' into cnas
已修改8个文件
已添加2个文件
783 ■■■■■ 文件已修改
inspect-server/src/main/java/com/yuanchu/mom/controller/InsProductTemplateController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/InsProductResult2Mapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsProductTemplateService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductTemplateServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/utils/DianLuUtils.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java 512 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/vo/InsProductResult2VO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsProductResult2Mapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/static/word2.docx 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsProductTemplateController.java
@@ -42,8 +42,8 @@
    @ValueAuth
    @ApiOperation(value = "选择电路试验检验模版")
    @PostMapping("/chooseInsProductTemplate")
    public Result chooseInsProductTemplate() {
        return Result.success(insProductTemplateService.list());
    public Result chooseInsProductTemplate(String version) {
        return Result.success(insProductTemplateService.chooseInsProductTemplate(version));
    }
    @ValueAuth
inspect-server/src/main/java/com/yuanchu/mom/mapper/InsProductResult2Mapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.mom.pojo.InsProductResult;
import com.yuanchu.mom.pojo.InsProductResult2;
import com.yuanchu.mom.vo.InsProductResult2VO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -16,6 +17,7 @@
public interface InsProductResult2Mapper extends BaseMapper<InsProductResult2> {
    void saveBatch(@Param("result2s") List<InsProductResult2> result2s);
    List<InsProductResult2VO> selectWordHang(@Param("num") Integer num, @Param("ids") List<Integer> ids);
}
inspect-server/src/main/java/com/yuanchu/mom/service/InsProductTemplateService.java
@@ -3,6 +3,8 @@
import com.yuanchu.mom.pojo.InsProductTemplate;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
 * <p>
 * ç”¨äºŽç”µè·¯è¯•验的模版 æœåŠ¡ç±»
@@ -13,4 +15,6 @@
 */
public interface InsProductTemplateService extends IService<InsProductTemplate> {
    List<InsProductTemplate> chooseInsProductTemplate(String version);
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -311,6 +311,7 @@
    @Override
    public Object uploadFile(Integer orderId, MultipartFile file, String sonLaboratory, Integer sampleId) {
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        String urlString;
        String pathName;
        String path;
@@ -353,6 +354,8 @@
                dianLuUtils.readDianLuFile1(sampleId, insOrderFile);
            } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("csv") && filename.contains("驻波")) {
                dianLuUtils.readDianLuFile2(sampleId, insOrderFile);
            }else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("电路试验") && split[split.length - 1].equals("csv") && insOrder.getSampleType().equals("无源器件")) {
                dianLuUtils.readDianLuFile3(sampleId, insOrderFile);
            }
        } catch (Exception e) {
            throw new ErrorException(e.getMessage());
@@ -1189,13 +1192,21 @@
        insSampleUserMapper.insert(insSampleUser);
        /*生成电路试验的站点报告并上传到附件中*/
        if (submitPlanDto.getLaboratory().equals("电路试验")) {
//            wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
            //todo ç”µè·¯ç«™ç‚¹æŠ¥å‘Š æ­£å¼åº“éƒ¨ç½²æ”¾å¼€
            try {
            if (!insOrder.getSampleType().equals("无源器件")) {
                wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
            } catch (Exception e) {
                throw new ErrorException("电路试验的站点报告生成有误,请联系开发人员调整!");
            }else {
                wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
            }
            //todo ç”µè·¯ç«™ç‚¹æŠ¥å‘Š æ­£å¼åº“éƒ¨ç½²æ”¾å¼€
//            try {
//                if (!insOrder.getSampleType().equals("无源器件")) {
//                    wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
//                }else {
//                    wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
//                }
//            } catch (Exception e) {
//                throw new ErrorException("电路试验的站点报告生成有误,请联系开发人员调整!");
//            }
        }
        /*生成产量工时*/
        //校验如果这个人这个检测项目已经添加过了则不需要再新增
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductTemplateServiceImpl.java
@@ -1,10 +1,15 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yuanchu.mom.pojo.InsProductTemplate;
import com.yuanchu.mom.mapper.InsProductTemplateMapper;
import com.yuanchu.mom.service.InsProductTemplateService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
@@ -17,4 +22,15 @@
@Service
public class InsProductTemplateServiceImpl extends ServiceImpl<InsProductTemplateMapper, InsProductTemplate> implements InsProductTemplateService {
    @Resource
    private InsProductTemplateMapper insProductTemplateMapper;
    @Override
    public List<InsProductTemplate> chooseInsProductTemplate(String version) {
        if (ObjectUtils.isNotEmpty(version) && version.equals("2")){
            return insProductTemplateMapper.selectList(Wrappers.<InsProductTemplate>lambdaQuery().eq(InsProductTemplate::getVersion,2));
        }else {
            return insProductTemplateMapper.selectList(Wrappers.<InsProductTemplate>lambdaQuery().ne(InsProductTemplate::getVersion,2));
        }
    }
}
inspect-server/src/main/java/com/yuanchu/mom/utils/DianLuUtils.java
@@ -28,6 +28,8 @@
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Component
@@ -69,7 +71,6 @@
        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()));
@@ -176,7 +177,7 @@
                    if (products6.size() <= 0) {
                        throw new ErrorException("隔离度项目未找到");
                    }
                    insProductResult2.setInsProductId(products6.get(0).getId());//同极化隔离
                    insProductResult2.setInsProductId(products6.get(0).getId());//同列隔离
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    insProductResult2.setAngle("0°");//角度
                    insProductResult2.setNum(orderStates.get(0).getNum());//次数
@@ -191,7 +192,7 @@
                    if (products7.size() <= 0) {
                        throw new ErrorException("端口间隔离项目未找到");
                    }
                    insProductResult2.setInsProductId(products7.get(0).getId());//同极化隔离
                    insProductResult2.setInsProductId(products7.get(0).getId());//端口间隔离
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    insProductResult2.setAngle("0°");//角度
                    insProductResult2.setNum(orderStates.get(0).getNum());//次数
@@ -339,6 +340,175 @@
                result2.setValue("[[" + value + "]]");
                result2.setAngle("0°");
                result2.setOften(entry.getValue().stream().map(InsProductResult2::getOften).collect(Collectors.joining(",")));
                result2.setNum(orderStates.get(0).getNum());
                filteredList.add(result2);
            }
        }
        insProductResult2Service.saveBatch(filteredList);
    }
    //读取csv的文件(无源器件)
    public void readDianLuFile3(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());
        //查询该样品的最大耦合度项目id
        List<InsProduct> products6 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("最大耦合度")).collect(Collectors.toList());
        //查询该样品的最小耦合度项目id
        List<InsProduct> products7 = 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.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("隔离度")) {
                    if (products2.size() <= 0) {
                        throw new ErrorException("隔离度项目未找到");
                    }
                    insProductResult2.setInsProductId(products2.get(0).getId());//无源器件隔离度
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    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("插入损耗")) {
                    if (products3.size() <= 0) {
                        throw new ErrorException("插入损耗项目未找到");
                    }
                    insProductResult2.setInsProductId(products3.get(0).getId());//插入损耗
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    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("带内波动")) {
                    if (products4.size() <= 0) {
                        throw new ErrorException("带内波动项目未找到");
                    }
                    insProductResult2.setInsProductId(products4.get(0).getId());//带内波动
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    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("带外抑制")) {
                    if (products5.size() <= 0) {
                        throw new ErrorException("带外抑制项目未找到");
                    }
                    insProductResult2.setInsProductId(products5.get(0).getId());//带外抑制
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    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("耦合度")) {
                    if (products6.size() <= 0 || products7.size()<=0) {
                        throw new ErrorException("耦合度项目未找到");
                    }
                    /*最大耦合度*/
                    insProductResult2.setFrequency(listEntry.getKey());//频段
                    insProductResult2.setNum(orderStates.get(0).getNum());//次数
                    //获取端口
                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
                    insProductResult2.setPort(port);//端口
                    insProductResult2.setInsProductId(products6.get(0).getId());//最大耦合度
                    //获取检验值
                    String value = entry.getValue().stream().map(tianXianData1 -> {
                        String input = tianXianData1.getValue().replace("[", "").replace("]", "");
                        String[] parts = input.split("--");
                        return "\"" + "-"+parts[1] + "\"" ; }).collect(Collectors.joining(","));
                    insProductResult2.setValue("[[" + value + "]]");//值
                    insProductResult2s.add(insProductResult2);
                    /*最小耦合度*/
                    InsProductResult2 insProductResult22 = new InsProductResult2();
                    insProductResult22.setFrequency(listEntry.getKey());//频段
                    insProductResult22.setNum(orderStates.get(0).getNum());//次数
                    //获取端口
                    insProductResult22.setPort(port);//端口
                    insProductResult22.setInsProductId(products7.get(0).getId());//最小耦合度
                    String value1 = entry.getValue().stream().map(tianXianData1 -> {
                        String input = tianXianData1.getValue().replace("[", "").replace("]", "");
                        String[] parts = input.split("--");
                        return "\"" +parts[0] + "\"" ; }).collect(Collectors.joining(","));
                    insProductResult22.setValue("[[" + value1 + "]]");//值
                    insProductResult2s.add(insProductResult22);
                }
            }
        }
        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.setOften(entry.getValue().stream().map(InsProductResult2::getOften).collect(Collectors.joining(",")));
                result2.setNum(orderStates.get(0).getNum());
                filteredList.add(result2);
            }
        }
inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
@@ -18,6 +18,7 @@
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.vo.InsProductResult2VO;
import org.apache.commons.io.IOUtils;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.xwpf.usermodel.*;
@@ -25,6 +26,7 @@
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@@ -94,7 +96,7 @@
    GiveCode giveCode;
    //生成站点电路试验报告
    //生成站点电路试验报告(天线)
    public void generateWord(String term, InsOrderState insOrderState) {
        AtomicInteger lable = new AtomicInteger(1);
        AtomicInteger index = new AtomicInteger();
@@ -2050,6 +2052,303 @@
        insOrderFileMapper.insert(insOrderFile);
    }
    //生成站点电路试验报告(无源器件)
    public void generateWord2(String term, InsOrderState insOrderState) {
        AtomicInteger index = new AtomicInteger();
        String title = term + "电路参数";
        List<Map<String, Object>> tables = new ArrayList<>();
        //查询订单
        InsOrder insOrder = insOrderMapper.selectById(insOrderState.getInsOrderId());
        //查询样品
        InsSample insSample = insSampleMapper.selectById(insOrderState.getInsSampleId());
        //查询项目
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .eq(InsProduct::getState,1)
                .eq(InsProduct::getInsSampleId, insSample.getId())
                .eq(InsProduct::getSonLaboratory, "电路试验"));
        //计算行数
        List<InsProductResult2VO> result2VOS = new ArrayList<>();
        List<InsProductResult2VO> insProductResult2VOS = insProductResult2Mapper.selectWordHang(insOrderState.getNum(), insProducts.stream().map(InsProduct::getId).collect(Collectors.toList()));
        for (InsProductResult2VO insProductResult2VO : insProductResult2VOS) {
            String[] split = insProductResult2VO.getPort().split(",");
            String value = insProductResult2VO.getValue().replace("[[", "").replace("]]", "");
            if (split.length>1){
                for (int i = 0; i < split.length; i++) {
                    InsProductResult2VO insProductResult2VO1 = new InsProductResult2VO();
                    BeanUtils.copyProperties(insProductResult2VO,insProductResult2VO1);
                    //端口
                    insProductResult2VO1.setPort(split[i]);
                    //值
                    try{
                        insProductResult2VO1.setValue(value.split(",")[i].replace("\"",""));
                    }catch (Exception e){
                        insProductResult2VO1.setValue("");
                    }
                    result2VOS.add(insProductResult2VO1);
                }
            }
            else {
                insProductResult2VO.setValue(value.replace("\"",""));
                result2VOS.add(insProductResult2VO);
            }
        }
        List<RowRenderData> rows = new ArrayList<>();
        Set<String> itemSet = new HashSet<>();
        //表格的行数
        for (int i = 0; i < result2VOS.size(); i++) {
                RowRenderData rowRenderData = new RowRenderData();
                RowStyle rowStyle = new RowStyle();
                rowStyle.setHeight(40);
                rowRenderData.setRowStyle(rowStyle);
                List<CellRenderData> cells = new ArrayList<>();
                //表格的列数
                for (int j = 0; j < 8; j++) {
                    CellRenderData cellRenderData = new CellRenderData();
                    CellStyle cellStyle = new CellStyle();
                    cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                    cellRenderData.setCellStyle(cellStyle);
                    List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                    ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                    ParagraphStyle paragraphStyle = new ParagraphStyle();
                    paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                    paragraphRenderData.setParagraphStyle(paragraphStyle);
                    List<RenderData> renderData = new ArrayList<>();
                    TextRenderData textRenderData = new TextRenderData();
                    Style style = new Style();
                    style.setFontFamily("宋体");
                    style.setColor("000000");
                    textRenderData.setStyle(style);
                    if (j==0){
                        //第一列(序号)
                        if (itemSet.add(result2VOS.get(i).getInspectionItemSubclass())) {
                            index.getAndIncrement();
                        }
                        textRenderData.setText(index + "∑1" + index);
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                    else if (j==1){
                        //第二列(检验项目)
                        textRenderData.setText(result2VOS.get(i).getInspectionItemSubclass()+ "∑2" + index);
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                    else if (j==2){
                        //第三列(单位)
                        textRenderData.setText(result2VOS.get(i).getUnit()+ "∑3" + index);
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                    else if (j==3){
                        //第四列(标准与要求)
                        textRenderData.setText(result2VOS.get(i).getAsk());
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                    else if (j==4){
                        //第五列(端口)
                        try{
                            textRenderData.setText(result2VOS.get(i).getPort());
                        }catch (Exception e){
                            textRenderData.setText("");
                        }
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                    else if (j==5){
                        //第六列(频段)
                        try{
                            textRenderData.setText(result2VOS.get(i).getFrequency());
                        }catch (Exception e){
                            textRenderData.setText("");
                        }
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                    else if (j==6){
                        //第七列(检验值)
                        try{
                            textRenderData.setText(result2VOS.get(i).getValue());
                        }catch (Exception e){
                            textRenderData.setText("");
                        }
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                    else {
                        //最后一列(结论)
                        try{
                            if (result2VOS.get(i).getResult().equals("1")) {
                                textRenderData.setText("合格");
                            }else if (result2VOS.get(i).getResult().equals("0")){
                                textRenderData.setText("不合格");
                            }else {
                                textRenderData.setText("不判定");
                            }
                        }catch (Exception e){
                            textRenderData.setText("");
                        }
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                }
                rowRenderData.setCells(cells);
                if (rowRenderData.getCells().size() != 0) {
                    rows.add(rowRenderData);
                }
            }
        TableRenderData tableRenderData = new TableRenderData();
        tableRenderData.setRows(rows);
        int countSize = tableRenderData.getRows().get(0).getCells().size();
        for (RowRenderData row : tableRenderData.getRows()) {
                if (row.getCells().size() != countSize) {
                    throw new ErrorException("每行单元格不相等");
                }
        }
        TableStyle tableStyle = new TableStyle();
        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
        tableStyle.setAlign(TableRowAlign.CENTER);
        BorderStyle borderStyle = new BorderStyle();
        borderStyle.setColor("000000");
        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
        borderStyle.setSize(4);
        tableStyle.setLeftBorder(borderStyle);
        tableStyle.setTopBorder(borderStyle);
        tableStyle.setRightBorder(borderStyle);
        tableStyle.setBottomBorder(borderStyle);
        tableRenderData.setTableStyle(tableStyle);
        Map<String, Object> table = new HashMap<>();
        table.put("table", tableRenderData);
        tables.add(table);
        ZipSecureFile.setMinInflateRatio(0.0001);
        InputStream inputStream = this.getClass().getResourceAsStream("/static/word2.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("title", title);
                    put("tables", tables);
                }});
        String name = insOrder.getEntrustCode().replace("/", "") + "-" +insSample.getSampleCode()+"-"+ title + ".docx";
        String url = UUID.randomUUID() + "_" + name;
        try {
            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + url)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // å¤„理合并单元格的问题
        String path = wordUrl + "/" + url;
        try {
            ZipSecureFile.setMinInflateRatio(0.0001);
            FileInputStream stream = new FileInputStream(path);
            XWPFDocument document = new XWPFDocument(stream);
            List<XWPFTable> xwpfTables = document.getTables();
            for (int i = 0; i < xwpfTables.size(); i++) {
                Set<String> set1 = new HashSet<>();
                Map<String, Map<String, Integer>> maps = new HashMap<>();
                for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
                    for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
                        if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("∑") > -1) {
                            String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("∑");
                            if (set1.add(split[1])) {
                                Map<String, Integer> map = new HashMap<>();
                                map.put("sr", j);
                                map.put("sc", k);
                                map.put("er", j + 0);
                                map.put("ec", k + 0);
                                maps.put(split[1], map);
                            } else {
                                Map<String, Integer> map1 = maps.get(split[1]);
                                if (j == map1.get("sr")) {
                                    map1.put("ec", map1.get("ec") + 1);
                                } else if (k == map1.get("sc")) {
                                    map1.put("er", map1.get("er") + 1);
                                }
                            }
                            String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("∑")[0];
                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(org.apache.poi.xwpf.usermodel.ParagraphAlignment.CENTER);
                        }
                    }
                }
                // å•元格排序, é¿å…æ ¼å¼é”™ä¹±
                List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
                entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
                // æŒ‰ç…§é¡ºåºæ·»åŠ è¿›é›†åˆ
                List<String> list = new ArrayList<>();
                for (Map.Entry<String, Map<String, Integer>> entry : entries) {
                    list.add(entry.getKey());
                }
                /*List<String> list = new ArrayList<>();
                for (String s : maps.keySet()) {
                    list.add(s);
                }*/
                for (int a = list.size() - 1; a >= 0; a--) {
                    Map<String, Integer> v = maps.get(list.get(a));
                    for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
                        if (v.get("ec") > v.get("sc")) {
                            try {
                                TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
                            } catch (Exception e) {
                            }
                        }
                    }
                    if (v.get("er") > v.get("sr")) {
                        try {
                            TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
                        } catch (Exception e) {
                        }
                    }
                }
            }
            FileOutputStream fileOutputStream = new FileOutputStream(path);
            document.write(fileOutputStream);
            fileOutputStream.close();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        InsOrderFile insOrderFile = new InsOrderFile();
        insOrderFile.setInsOrderId(insOrderState.getInsOrderId());
        insOrderFile.setInsSampleId(insOrderState.getInsSampleId());
        insOrderFile.setFileName(name);
        insOrderFile.setType(2);
        insOrderFile.setFileUrl(url);
        insOrderFile.setSonLaboratory("电路试验");
        insOrderFileMapper.insert(insOrderFile);
    }
    //生成总报告
    public void generateReport(Integer orderId, InsReportDto1 insReportDto1) {
        LocalDateTime now = LocalDateTime.now();
@@ -2421,7 +2720,11 @@
                InsOrderState orderState = insOrderStateMapper.selectById(insOrderUser.getInsOrderStateId());
                if (orderState.getLaboratory().equals("电路试验")) {
                    orderState.setNum(insOrderUser.getNum());
                    getWord1(insOrderUser.getTerm(), orderState, tables2);
                    if(!insOrder.getSampleType().equals("无源器件")){
                        getWord1(insOrderUser.getTerm(), orderState, tables2);
                    }else {
                        getWord2(insOrderUser.getTerm(), orderState, tables2);
                    }
                }
            }
        }
@@ -2783,25 +3086,24 @@
    }
    //电路报告用于总报告的方法
    //电路报告用于总报告的方法(天线)
    private void getWord1(String term, InsOrderState insOrderState,List<Map<String, Object>> tables2) {
        AtomicInteger lable = new AtomicInteger(1);
        AtomicInteger index = new AtomicInteger();
        String title = term + "电路参数";
        InsSample insSample = insSampleMapper.selectById(insOrderState.getInsSampleId());
            //查询项目
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
        //查询项目
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState,1)
                    .eq(InsProduct::getInsSampleId, insSample.getId())
                    .eq(InsProduct::getSonLaboratory, "电路试验"));
            //获取最大端口数量,角度数量,频段数量
            List<InsProductResult2> insProductResult2s = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
        //获取最大端口数量,角度数量,频段数量
        List<InsProductResult2> insProductResult2s = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
                    .eq(InsProductResult2::getNum, insOrderState.getNum())
                    .in(InsProductResult2::getInsProductId, insProducts.stream().map(InsProduct::getId).collect(Collectors.toList())));
            //按照频段分表(查询所有频段)
            List<String> frequencys = insProductResult2s.stream().map(InsProductResult2::getFrequency).distinct().collect(Collectors.toList());
            frequencys.forEach(s -> {
        //按照频段分表(查询所有频段)
        List<String> frequencys = insProductResult2s.stream().map(InsProductResult2::getFrequency).distinct().collect(Collectors.toList());
        frequencys.forEach(s -> {
                int ports = 0;//端口数
                int angles = 0;//角度数
                List<InsProductResult2> productResult2s = insProductResult2s.stream().filter(insProductResult2 -> insProductResult2.getFrequency().equals(s)).collect(Collectors.toList());
@@ -4636,6 +4938,194 @@
            });
    }
    //电路报告用于总报告的方法(无源器件)
    private void getWord2(String term, InsOrderState insOrderState,List<Map<String, Object>> tables2){
        AtomicInteger index = new AtomicInteger();
        String title = term + "电路参数";
        //查询样品
        InsSample insSample = insSampleMapper.selectById(insOrderState.getInsSampleId());
        //查询项目
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .eq(InsProduct::getState,1)
                .eq(InsProduct::getInsSampleId, insSample.getId())
                .eq(InsProduct::getSonLaboratory, "电路试验"));
        //计算行数
        List<InsProductResult2VO> result2VOS = new ArrayList<>();
        List<InsProductResult2VO> insProductResult2VOS = insProductResult2Mapper.selectWordHang(insOrderState.getNum(), insProducts.stream().map(InsProduct::getId).collect(Collectors.toList()));
        for (InsProductResult2VO insProductResult2VO : insProductResult2VOS) {
            String[] split = insProductResult2VO.getPort().split(",");
            String value = insProductResult2VO.getValue().replace("[[", "").replace("]]", "");
            if (split.length>1){
                for (int i = 0; i < split.length; i++) {
                    InsProductResult2VO insProductResult2VO1 = new InsProductResult2VO();
                    BeanUtils.copyProperties(insProductResult2VO,insProductResult2VO1);
                    //端口
                    insProductResult2VO1.setPort(split[i]);
                    //值
                    insProductResult2VO1.setValue(value.split(",")[i].replace("\"",""));
                    result2VOS.add(insProductResult2VO1);
                }
            }
            else {
                insProductResult2VO.setValue(value.replace("\"",""));
                result2VOS.add(insProductResult2VO);
            }
        }
        List<RowRenderData> rows = new ArrayList<>();
        Set<String> itemSet = new HashSet<>();
        //表格的行数
        for (int i = 0; i < result2VOS.size(); i++) {
            RowRenderData rowRenderData = new RowRenderData();
            RowStyle rowStyle = new RowStyle();
            rowStyle.setHeight(40);
            rowRenderData.setRowStyle(rowStyle);
            List<CellRenderData> cells = new ArrayList<>();
            //表格的列数
            for (int j = 0; j < 8; j++) {
                CellRenderData cellRenderData = new CellRenderData();
                CellStyle cellStyle = new CellStyle();
                cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                cellRenderData.setCellStyle(cellStyle);
                List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                ParagraphStyle paragraphStyle = new ParagraphStyle();
                paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                paragraphRenderData.setParagraphStyle(paragraphStyle);
                List<RenderData> renderData = new ArrayList<>();
                TextRenderData textRenderData = new TextRenderData();
                Style style = new Style();
                style.setFontFamily("宋体");
                style.setColor("000000");
                textRenderData.setStyle(style);
                if (j==0){
                    //第一列(序号)
                    if (itemSet.add(result2VOS.get(i).getInspectionItemSubclass())) {
                        index.getAndIncrement();
                    }
                    textRenderData.setText(index + "∑1" + index);
                    renderData.add(textRenderData);
                    paragraphRenderData.setContents(renderData);
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                }
                else if (j==1){
                    //第二列(检验项目)
                    textRenderData.setText(result2VOS.get(i).getInspectionItemSubclass()+ "∑2" + index);
                    renderData.add(textRenderData);
                    paragraphRenderData.setContents(renderData);
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                }
                else if (j==2){
                    //第三列(单位)
                    textRenderData.setText(result2VOS.get(i).getUnit()+ "∑3" + index);
                    renderData.add(textRenderData);
                    paragraphRenderData.setContents(renderData);
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                }
                else if (j==3){
                    //第四列(标准与要求)
                    textRenderData.setText(result2VOS.get(i).getAsk());
                    renderData.add(textRenderData);
                    paragraphRenderData.setContents(renderData);
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                }
                else if (j==4){
                    //第五列(端口)
                    try{
                        textRenderData.setText(result2VOS.get(i).getPort());
                    }catch (Exception e){
                        textRenderData.setText("");
                    }
                    renderData.add(textRenderData);
                    paragraphRenderData.setContents(renderData);
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                }
                else if (j==5){
                    //第六列(频段)
                    try{
                        textRenderData.setText(result2VOS.get(i).getFrequency());
                    }catch (Exception e){
                        textRenderData.setText("");
                    }
                    renderData.add(textRenderData);
                    paragraphRenderData.setContents(renderData);
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                }
                else if (j==6){
                    //第七列(检验值)
                    try{
                        textRenderData.setText(result2VOS.get(i).getValue());
                    }catch (Exception e){
                        textRenderData.setText("");
                    }
                    renderData.add(textRenderData);
                    paragraphRenderData.setContents(renderData);
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                }
                else {
                    //最后一列(结论)
                    try{
                        if (result2VOS.get(i).getResult().equals("1")) {
                            textRenderData.setText("合格");
                        }else if (result2VOS.get(i).getResult().equals("0")){
                            textRenderData.setText("不合格");
                        }else {
                            textRenderData.setText("不判定");
                        }
                    }catch (Exception e){
                        textRenderData.setText("");
                    }
                    renderData.add(textRenderData);
                    paragraphRenderData.setContents(renderData);
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                }
            }
            rowRenderData.setCells(cells);
            if (rowRenderData.getCells().size() != 0) {
                rows.add(rowRenderData);
            }
        }
        TableRenderData tableRenderData = new TableRenderData();
        tableRenderData.setRows(rows);
        int countSize = tableRenderData.getRows().get(0).getCells().size();
        for (RowRenderData row : tableRenderData.getRows()) {
            if (row.getCells().size() != countSize) {
                throw new ErrorException("每行单元格不相等");
            }
        }
        TableStyle tableStyle = new TableStyle();
        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
        tableStyle.setAlign(TableRowAlign.CENTER);
        BorderStyle borderStyle = new BorderStyle();
        borderStyle.setColor("000000");
        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
        borderStyle.setSize(4);
        tableStyle.setLeftBorder(borderStyle);
        tableStyle.setTopBorder(borderStyle);
        tableStyle.setRightBorder(borderStyle);
        tableStyle.setBottomBorder(borderStyle);
        tableRenderData.setTableStyle(tableStyle);
        Map<String, Object> table2 = new HashMap<>();
        table2.put("table2", tableRenderData);
        table2.put("title", title);
        tables2.add(table2);
    }
    // æ°´å¹³åˆå¹¶å•元格
    private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
        for (int i = fromCol; i <= toCol; i++) {
inspect-server/src/main/java/com/yuanchu/mom/vo/InsProductResult2VO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.yuanchu.mom.vo;
import lombok.Data;
//无源器件的电路试验生成报告所用
@Data
public class InsProductResult2VO {
    //检验项目
    private String inspectionItemSubclass;
    //单位
    private String unit;
    //标准要求
    private String ask;
    //端口
    private String port;
    //频段
    private String frequency;
    //检验值
    private String value;
    //结论
    private String result;
}
inspect-server/src/main/resources/mapper/InsProductResult2Mapper.xml
@@ -35,4 +35,23 @@
             #{result2.num})
        </foreach>
    </insert>
    <select id="selectWordHang" resultType="com.yuanchu.mom.vo.InsProductResult2VO">
        select
        inspection_item_subclass,
        unit,
        ask,
        result,
        frequency,
        port,
        value,
        result
        from  ins_product_result_2 ipr2
                          left join ins_product ip on ipr2.ins_product_id = ip.id
        where num=#{num}
          and ip.id in
            <foreach collection="ids" separator="," item="id" open="(" close=")" >
                #{id}
            </foreach>
        order by inspection_item_subclass
    </select>
</mapper>
inspect-server/src/main/resources/static/word2.docx
Binary files differ