zss
2024-09-27 a14a26c04bc5863248b9a9d387610a143c3a4efd
电路站点报告ing
已修改9个文件
已添加1个文件
449 ■■■■ 文件已修改
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrder.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsProductResult2.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/controller/UserController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/CustomService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/impl/CustomServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
@@ -225,10 +225,24 @@
    }
    @ValueClassify("检验任务")
    @ApiOperation(value = "扫码报检")
    @ApiOperation(value = "扫码报检(入库)")
    @PostMapping("/scanInsOrderState")
    public Result scanInsOrderState(String sonLaboratory,String sampleCode) {
        return Result.success(insOrderPlanService.scanInsOrderState(sonLaboratory,sampleCode));
    public Result scanInsOrderState(String sonLaboratory,String sampleCode,String trees) {
        return Result.success(insOrderPlanService.scanInsOrderState(sonLaboratory,sampleCode,trees));
    }
    @ValueClassify("检验任务")
    @ApiOperation(value = "扫码出库")
    @PostMapping("/outInsOrderState")
    public Result outInsOrderState(String sonLaboratory,String sampleCode) {
        return Result.success(insOrderPlanService.outInsOrderState(sonLaboratory,sampleCode));
    }
    @ValueAuth
    @PostMapping("/preview")
    @ApiOperation("预览文件")
    public Result<?> preview(Integer id)throws Exception {
        return Result.success(insOrderPlanService.preview(id));
    }
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrder.java
@@ -249,5 +249,8 @@
    @ApiModelProperty("下发对象(除了其他成品外这个字段必选,用于企业微信推送)")
    private Integer issueUser;
    @ApiModelProperty("零件号(其他成品这个字段需要填写的信息)")
    private String partNo;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsProductResult2.java
@@ -74,7 +74,7 @@
    @ApiModelProperty("值")
    private String value;
    @ApiModelProperty("结论 0不合格 1合格")
    @ApiModelProperty("结论 0不合格 1合格 3不判定")
    private Integer result;
    /**
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java
@@ -51,8 +51,14 @@
    int deleteInsContext(InsProductResultVo insProductResultVo);
    //扫码报检
    int scanInsOrderState(String sonLaboratory, String sampleCode);
    //扫码报检(入库)
    int scanInsOrderState(String sonLaboratory, String sampleCode,String trees);
    //扫码出库
    int outInsOrderState(String sonLaboratory, String sampleCode);
    List<InsOrderUser> getInsOrderUserList(Integer insOrderStateId);
    //预览文件
    Object preview(Integer id) throws Exception;
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -37,6 +37,7 @@
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.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.beans.factory.annotation.Value;
@@ -95,11 +96,17 @@
    @Resource
    private WarehouseHistoryMapper warehouseHistoryMapper;
    @Resource
    private WarehouseService warehouseService;
    @Value("${wordUrl}")
    private String wordUrl;
    @Value("${twoCode}")
    private String twoCode;
    @Resource
    WordUtils  wordUtils;
    @Resource
    private InsReportMapper insReportMapper;
@@ -142,13 +149,9 @@
        Map<String, Object> map = new HashMap<>();
        map.put("head", PrintChina.printChina(InsOrderPlanVO.class));
        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
        User user = userMapper.selectById(map1.get("userId"));//当前登录的人
        String laboratory = null;
        String userName = null;
        Integer userId = null;
        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
            userId = map1.get("userId");
            userName = userMapper.selectById(map1.get("userId")).getName();
            insOrderPlanDTO.setUserId(null);
        }
@@ -340,7 +343,10 @@
    //扫码报检
    @Override
    public int scanInsOrderState(String sonLaboratory, String sampleCode) {
    public int scanInsOrderState(String sonLaboratory, String sampleCode, String trees) {
        /*样品入库*/
        warehouseService.inWarehouse(trees, sampleCode);
        /*新增检验任务*/
        //先判断该订单是否有这个站点的项目
        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode));
        List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
@@ -367,9 +373,9 @@
                orderState.setInsState(0);
                orderState.setNum(orderState.getNum() + 1);//递增
                insOrderStateMapper.updateById(orderState);
            } else {
            } /*else {
                throw new ErrorException("该订单站点的任务已创建,无法再次创建!");
            }
            }*/
        } else {
            InsOrderState insOrderState = new InsOrderState();
            insOrderState.setInsOrderId(insSample.getInsOrderId());
@@ -381,9 +387,90 @@
        return 1;
    }
    //扫码出库
    @Override
    public int outInsOrderState(String sonLaboratory, String sampleCode) {
        //判断该样品的检验任务是否已经结束(继续试验或者是结束试验)
        //先判断该订单是否有这个站点的项目
        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode));
        List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
                .eq(InsSample::getInsOrderId, insSample.getInsOrderId())).stream().map(InsSample::getId).collect(Collectors.toList());
        List<String> collect = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .eq(InsProduct::getState, 1)
                .in(InsProduct::getInsSampleId, sampleIds)).stream().map(InsProduct::getSonLaboratory).collect(Collectors.toList());
        if (!collect.contains(sonLaboratory)) {
            throw new ErrorException("该订单没有" + sonLaboratory + "站点的相关项目,请查看下单详情!");
        }
        //判断该订单是否站点任务有(继续试验或者是结束试验)
        List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
                .and(wrapper -> wrapper
                        .eq(InsOrderState::getInsState, 5)
                        .or()
                        .eq(InsOrderState::getInsState, 6)
                ));
        if (CollectionUtils.isEmpty(orderStates)) {
            throw new ErrorException("该样品的检验任务还没有结束试验,暂时无法出库!");
        }
        warehouseService.outWarehouse(sampleCode);
        return 0;
    }
    @Override
    public List<InsOrderUser> getInsOrderUserList(Integer insOrderStateId) {
        return insOrderUserMapper.getInsOrderUserList(insOrderStateId);
    }
    private static final String splitIdentifier = "@-@"; // è‡ªå®šä¹‰å”¯ä¸€æ ‡è¯†åˆ†å‰²ç¬¦
    //预览文件
    @Override
    public Object preview(Integer id) throws Exception {
        InsOrderFile insOrderFile = insOrderFileMapper.selectById(id);
        File file = new File(wordUrl + "/" + insOrderFile.getFileUrl());
        StringBuilder stringBuilder = new StringBuilder();
        // åˆ›å»º reader
        try (BufferedReader br = Files.newBufferedReader(file.toPath())) {
            // CSV文件的分隔符
            String DELIMITER = ",";
            // æŒ‰è¡Œè¯»å–
            String line;
            while ((line = br.readLine()) != null) {
                // åˆ†å‰²
                String[] columns = line.split(DELIMITER);
                // æ‰“印行
                stringBuilder.append(String.join(splitIdentifier, columns)).append("\n");
            }
        } catch (Exception ex) {
            List<Object> list = new ArrayList<>();
            //创建工作簿对象
            XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(file));
            //获取工作簿下sheet的个数 åªè¯»å–第一个sheet
            int sheetNum = xssfWorkbook.getNumberOfSheets();
            //遍历工作簿中的所有数据
            for (int i = 0; i < sheetNum; i++) {
                Map<String, Object> map = new HashMap<>();
                StringBuilder result = new StringBuilder();
                XSSFSheet sheet = xssfWorkbook.getSheetAt(i);
                //获取最后一行的num,即总行数。此处从0开始
                int maxRow = sheet.getLastRowNum();
                for (int row = 0; row <= maxRow; row++) {
                    //获取最后单元格num,即总单元格数 ***注意:此处从1开始计数***
                    int maxRol = sheet.getRow(row).getLastCellNum();
                    StringBuilder aLine = new StringBuilder();
                    for (int rol = 0; rol < maxRol; rol++) {
                        aLine.append(sheet.getRow(row).getCell(rol)).append(",");
                    }
                    String substring = aLine.substring(0, aLine.length() - 1);
                    result.append(substring).append("\n");
                }
                map.put("sheetName", sheet.getSheetName());
                map.put("content", result.toString());
                list.add(map);
            }
            return list;
        }
        return stringBuilder.toString();
    }
@@ -662,6 +749,9 @@
                int ressult = 1;
                String valueStr = insProductResult2.getValue();
                if (!insProduct.getAsk().contains(",")) {
                    if (insProduct.getAsk().equals("/")) {
                        ressult = 3; //不判定
                    }
                    if (!isValueValid(valueStr, new String[]{insProduct.getAsk()})) {
                        ressult = 0; //不合格
                    }
@@ -673,7 +763,6 @@
                        String[] askSplit = s.split("°");
                        String angleKey = askSplit[0];
                        String angleValue = askSplit[1];
                        for (int i = 0; i < angles.length; i++) {
                            if (angles[i].split("°")[0].equals(angleKey)) {
                                try {
@@ -692,7 +781,6 @@
                                } finally {
                                    continue;
                                }
                            }
                        }
                    }
@@ -918,8 +1006,7 @@
                    .set(InsOrderUser::getTell, tell));
            switch (type) {
                case 0:
                    /*再次试验:该单子退回到检验状态(排序改成当前的最后),次数递增(保留以前的数据);*/
                    //更新原来的检验任务
                    //再次试验:该单子退回到检验状态(排序改成当前的最后),次数递增(保留以前的数据);
                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                            .eq(InsOrderState::getId, record.getId())
                            .set(InsOrderState::getInsTime, now)
@@ -930,7 +1017,7 @@
                            .set(InsOrderState::getCreateTime, LocalDateTime.now()));
                    break;
                case 1:
                    //继续试验:则继续将检验任务转接至下一站点;
                    //继续试验:该站点任务结束(可以再次扫码检验);
                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                            .eq(InsOrderState::getInsOrderId, orderId)
                            .eq(InsOrderState::getLaboratory, laboratory)
@@ -940,7 +1027,7 @@
                            .set(InsOrderState::getVerifyUser, userId));
                    break;
                case 2:
                    //结束试验:此委托单停止试验,直接生成最终报告和费用统计。
                    //结束试验:此委托单停止试验(无法再次检验)。
                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                            .eq(InsOrderState::getInsOrderId, orderId)
                            .eq(InsOrderState::getLaboratory, laboratory)
@@ -957,52 +1044,7 @@
                    break;
            }
        }
        /*复核完成之后生成他自己的站点报告(仅限辐射试验检测(近场,远场)和电路试验)*/
        /*switch (laboratory) {
            case "近场":
                uploadFile(orderId, null);
                break;
            case "远场":
                uploadFile(orderId, null);
                break;
            case "电路试验":
                uploadFile(orderId, generateExcelFile(orderId,laboratory));
                break;
            default:
                break;
        }*/
        return 1;
    }
    //生成电路试验的excel文件
    private MultipartFile generateExcelFile(Integer orderId, String laboratory) throws IOException {
        // åˆ›å»ºä¸€ä¸ªWorkbook对象
        Workbook workbook = new XSSFWorkbook();
        // åˆ›å»ºç¬¬ä¸€ä¸ªSheet
        Sheet sheet1 = workbook.createSheet("Sheet1");
        Row row1 = sheet1.createRow(0);
        Cell cell1 = row1.createCell(0);
        cell1.setCellValue("Hello, Sheet1");
        // åˆ›å»ºç¬¬äºŒä¸ªSheet
        Sheet sheet2 = workbook.createSheet("Sheet2");
        Row row2 = sheet2.createRow(0);
        Cell cell2 = row2.createCell(0);
        cell2.setCellValue("Hello, Sheet2");
        // å°†Workbook写入到字节数组中
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        workbook.write(outputStream);
        workbook.close();
        byte[] excelBytes = outputStream.toByteArray();
        // åˆ›å»ºMultipartFile对象
        MultipartFile multipartFile = new MockMultipartFile(
                "file", "example.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", new ByteArrayInputStream(excelBytes));
        return multipartFile;
    }
    private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
@@ -1094,15 +1136,15 @@
                .set(InsOrderState::getInsTime, LocalDateTime.now())
                .set(InsOrderState::getInsState, 3)
                .set(InsOrderState::getVerifyUser, verifyUser));
        /*如果是C类订单且是下发到质量部,则直接复核通过(结束试验)*/
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("质量部")) {
            try {
                verifyPlan(orderId, laboratory, 2, null);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
        /*这个情况先关闭----如果是C类订单且是下发到质量部,则直接复核通过(结束试验)*/
//        InsOrder insOrder = insOrderMapper.selectById(orderId);
//        if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("质量部")) {
//            try {
//                verifyPlan(orderId, laboratory, 2, null);
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        } else {
            Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
            //LIMS系统消息推送
            InformationNotification info = new InformationNotification();
@@ -1130,7 +1172,7 @@
            map.put("enable_id_trans", 0);//是否开启id转译.0否
            map.put("enable_duplicate_check", 0);//是否开启重复消息检查.0否
            qywxApi.send(map);*/
        }
//        }
        //复核人--检验单相关负责人
        InsSampleUser insSampleUser = new InsSampleUser();
        insSampleUser.setUserId(verifyUser);
@@ -1153,6 +1195,11 @@
            }
            return null;
        });
        /*生成电路试验的站点报告并上传到附件中*/
        /*if (laboratory.equals("电路试验")) {
            MultipartFile file = wordUtils.generateWord(note, term, orderState);
            uploadFile(orderId,file);
        }*/
        // åˆ é™¤æ•°é‡‡é‡‡é›†æ¬¡æ•°
        String key = "frequency" + ":" + entrustCode + ":*";
        RedisUtil.delsLike(key);
@@ -1194,4 +1241,6 @@
                return "未知";
        }
    }
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -124,7 +124,7 @@
    public int upInsOrder(Integer orderId, Integer sampleId, String appointed, Integer userId, String sonLaboratory) {
        InsOrder insOrder = new InsOrder();
        insOrder.setId(orderId);
        insOrder.setAppointed(LocalDate.parse(appointed));
        //insOrder.setAppointed(LocalDate.parse(appointed));
        insOrder.setSendTime(LocalDateTime.now());
        insOrderMapper.updateById(insOrder);
        //修改成只给当前选择的试验室下发单子
@@ -271,9 +271,9 @@
        if (insOrder.getState() == 1) {
            //审核通过才会生成委托编号
            insOrder.setEntrustCode(giveCode.giveCode2("WT-", "ins_order", "-", "yyMMdd"));
            int day = insProductService.selectOrderManDay(insOrder.getId());//预计完成时间
            //确定订单的下发时间和约定时间
            insOrder.setAppointed(LocalDate.parse(LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
            //int day = insProductService.selectOrderManDay(insOrder.getId());//预计完成时间
            //insOrder.setAppointed(LocalDate.parse(LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
            insOrder.setSendTime(LocalDateTime.now());
            /*todo æ ¹æ®è®¢å•类型判断是否需要推送企业微信 @zss*/
            if (!order.getFormType().equals("其他成品")) {
inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,215 @@
package com.yuanchu.mom.utils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yuanchu.mom.controller.InsOrderPlanController;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.InsOrderState;
import com.yuanchu.mom.pojo.InsProduct;
import com.yuanchu.mom.pojo.InsProductResult2;
import com.yuanchu.mom.pojo.InsSample;
import com.yuanchu.mom.service.impl.InsOrderPlanServiceImpl;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@Component
public class WordUtils {
    @Resource
    private InsOrderMapper insOrderMapper;
    @Resource
    private InsOrderStateMapper insOrderStateMapper;
    @Resource
    private InsSampleMapper insSampleMapper;
    @Resource
    private InsProductMapper insProductMapper;
    @Resource
    private InsProductResult2Mapper insProductResult2Mapper;
    private void writeText(XWPFParagraph xwpfParagraph, String text, Integer size, String bold) {
        // åˆ›å»ºæ–°çš„æ–‡æœ¬è¿è¡Œ
        XWPFRun run = xwpfParagraph.createRun();
        // è®¾ç½®æ–°çš„æ•°æ®
        run.setText(text);
        if (ObjectUtils.isNotEmpty(size)) {
            run.setFontSize(size);
        }
        if (ObjectUtils.isNotEmpty(bold)) {
            run.setBold(true);
        }
    }
    //生成电路试验的站点报告
    public MultipartFile generateWord(String note, String term, InsOrderState insOrderState) {
        AtomicInteger index = new AtomicInteger();
        // åˆ›å»ºä¸€ä¸ªç©ºçš„Word文档
        XWPFDocument document = new XWPFDocument();
        //创建一个段落标题
        XWPFParagraph paragraph = document.createParagraph();
        writeText(paragraph, term + "电路参数", 20, "加粗");
        //查询样品
        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insOrderState.getInsOrderId()));
        insSamples.forEach(insSample -> {
            //查询项目
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getInsSampleId, insSample.getId())
                    .eq(InsProduct::getSonLaboratory, "电路试验"));
            //获取最大端口数量,角度数量,频段数量
            List<InsProductResult2> insProductResult2s = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
                    .eq(InsProductResult2::getNum, insOrderState.getNum())
                    .in(InsProductResult2::getInsProductId, insProducts.stream().map(InsProduct::getId).collect(Collectors.toList())));
            int ports = 0;
            int angles = 0;
            for (InsProductResult2 insProductResult2 : insProductResult2s) {
                if (insProductResult2.getPort().split(",").length > ports) {
                    ports = insProductResult2.getPort().split(",").length;
                }
                if (insProductResult2.getAngle().split(",").length > angles) {
                    angles = insProductResult2.getAngle().split(",").length;
                }
            }
            List<String> frequencyses = insProductResult2s.stream().map(InsProductResult2::getFrequency).distinct().collect(Collectors.toList());
            int frequencys = frequencyses.size();
            List<String> inspectionItemSubclass = insProducts.stream().map(InsProduct::getInspectionItemSubclass).collect(Collectors.toList());
            //先判断是1简单版还是0复杂版
            if (insOrderState.getVersion() == 1) {
                //(列数是端口数+6,行数是(驻波比*2+隔离度+互调*(角度+1)+1)*频段+1)
                int portRow = ports % 8 == 0 ? ports / 8 : ports / 8 + 1;
                //行数
                int rows = 0;
                if (inspectionItemSubclass.contains("电压驻波比")) {
                    rows += 2 * portRow;
                }
                if (inspectionItemSubclass.contains("同极化隔离度")) {
                    rows += 1 * portRow;
                }
                if (inspectionItemSubclass.contains("异极化隔离度")) {
                    rows += 1 * portRow;
                }
                if (inspectionItemSubclass.contains("互调")) {
                    rows += (angles + 1) * portRow;
                }
                //列数
                int cols = ports > 8 ? 14 : ports + 6;
                //创建一个表格
                XWPFTable table = document.createTable((rows + 1) * frequencys + 1, cols);
                // å¡«å……表格内容
                for (int rowIndex = 0; rowIndex < (rows + 1) * frequencys + 1; rowIndex++) {
                    XWPFTableRow row = table.getRow(rowIndex);
                    for (int colIndex = 0; colIndex < cols; colIndex++) {
                        XWPFTableCell cell = row.getCell(colIndex);
                        if (rowIndex == 0) {
                            //第一行
                            if (colIndex == 0) {
                                //第一列
                                cell.setText("序号");
                            } else if (colIndex == 1) {
                                //第二列
                                cell.setText("检验项目");
                            } else if (colIndex == 2) {
                                //第三列
                                cell.setText("单位");
                            } else if (colIndex == 3) {
                                //第四列
                                cell.setText("标准与要求");
                            } else if (colIndex == cols - 1) {
                                //最后一列
                                cell.setText("检验结论");
                            } else if (colIndex == 4){
                                //其余列
                                cell.setText("检验结果");
                            }
                        }
                        else if (rowIndex == 1 || rowIndex % (rows + 1) == 1) {
                            if (colIndex==0) {
                                //频段所在行
                                cell.setText("频段:" + frequencyses.get(rowIndex / (rows + 1)));
                            }
                        }
                        else {
                            //portRow端口行数
                            if (inspectionItemSubclass.contains("电压驻波比")) {
                            }
                            if (inspectionItemSubclass.contains("同极化隔离度")) {
                            }
                            if (inspectionItemSubclass.contains("异极化隔离度")) {
                            }
                            if (inspectionItemSubclass.contains("互调")) {
                            }
                        }
                    }
                    if (rowIndex == 0) {
                        //第一行的横向合并
                        mergeCellsHorizontal(row, 4, cols - 2);
                    } else if (rowIndex == 1 || rowIndex % (rows + 1) == 1) {
                        //频段行的横向合并
                        mergeCellsHorizontal(row, 0, cols - 1);
                    }
                }
            } else {
            }
        });
        // å†™å…¥åˆ°æ–‡ä»¶
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            document.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] bytes = outputStream.toByteArray();
        return new MockMultipartFile(term + "电路参数", term + "电路参数.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", bytes);
    }
    // ç«–向合并单元格
    private static void mergeCellsVertical(XWPFTable table, int columnIndex, int fromRow, int toRow) {
        for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {
            if (rowIndex == fromRow) {
                // ç¬¬ä¸€ä¸ªå•元格保留,设为合并起始
                CTTcPr tcPr = table.getRow(rowIndex).getCell(columnIndex).getCTTc().addNewTcPr();
                tcPr.addNewVMerge().setVal(STMerge.RESTART);
            } else {
                // éžç¬¬ä¸€ä¸ªå•元格设为合并继续
                CTTcPr tcPr = table.getRow(rowIndex).getCell(columnIndex).getCTTc().addNewTcPr();
                tcPr.addNewVMerge().setVal(STMerge.CONTINUE);
            }
        }
    }
    // æ¨ªå‘合并单元格
    private static void mergeCellsHorizontal(XWPFTableRow row, int fromCell, int toCell) {
        for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {
            if (cellIndex == fromCell) {
                // ç¬¬ä¸€ä¸ªå•元格保留,设为合并起始
                CTTcPr tcPr = row.getCell(cellIndex).getCTTc().addNewTcPr();
                tcPr.addNewHMerge().setVal(STMerge.RESTART);
            } else {
                // éžç¬¬ä¸€ä¸ªå•元格设为合并继续
                CTTcPr tcPr = row.getCell(cellIndex).getCTTc().addNewTcPr();
                tcPr.addNewHMerge().setVal(STMerge.CONTINUE);
            }
        }
    }
}
user-server/src/main/java/com/yuanchu/mom/controller/UserController.java
@@ -153,8 +153,8 @@
    @ValueClassify("客户管理")
    @ApiOperation(value = "删除客户信息")
    @PostMapping("/delCustomById")
    public Result<?> delCustomById(Integer id) {
        return Result.success(customService.delCustomById(id));
    public Result<?> delCustomById(Long id) {
        return Result.success(customService.removeById(id));
    }
    @ValueClassify("客户管理")
    @ApiOperation(value = "新增客户信息")
user-server/src/main/java/com/yuanchu/mom/service/CustomService.java
@@ -16,7 +16,7 @@
    Map<String, Object> selectCustomPageList(IPage<Custom> page, Custom custom);
    int delCustomById(Integer id);
    int delCustomById(Long id);
    int addCustom(Custom custom);
user-server/src/main/java/com/yuanchu/mom/service/impl/CustomServiceImpl.java
@@ -41,7 +41,7 @@
    }
    @Override
    public int delCustomById(Integer id) {
    public int delCustomById(Long id) {
        return customMapper.deleteById(id);
    }