fei
8 天以前 fc3ccbfc30b83e432c71c508ef2b9c1052816ed2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/archive/archiveAllExportController.java
@@ -1,33 +1,54 @@
package com.ruoyi.web.controller.archive;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.aspose.cells.PdfCompliance;
import com.aspose.words.License;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.deepoove.poi.XWPFTemplate;
import com.itextpdf.text.*;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfPCell;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.poi.*;
import com.ruoyi.domain.ArchiveProjectName;
import com.ruoyi.domain.ArchiveRecords;
import com.ruoyi.domain.DocumentMaterials;
import com.ruoyi.domain.vo.*;
import com.ruoyi.service.IArchiveProjectNameService;
import com.ruoyi.service.IArchiveRecordsService;
import com.ruoyi.service.IDocumentMaterialsService;
import com.ruoyi.service.impl.BarcodeService;
import com.ruoyi.service.impl.pdfGenerateService;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
import org.apache.commons.imaging.ImageInfo;
import org.apache.commons.imaging.Imaging;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@@ -35,6 +56,7 @@
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@@ -53,7 +75,8 @@
    private BarcodeService barcodeService;
    @Autowired
    private IDocumentMaterialsService documentMaterialsService;
    @Autowired
    private IArchiveProjectNameService iArchiveProjectNameService;
    @Autowired
    private IArchiveRecordsService iArchiveRecordsService;
@@ -328,9 +351,33 @@
        List<ArchiveInfoVo> arsi = new ArrayList<>();
        arsi.add(aIV);
        String date = "";
        if(arsi.get(0).getPreparationDate()!=null) {
            System.out.println(arsi.get(0).getPreparationDate().toString() + "]]]]]]]]");
            System.out.println(DateUtil.parseCST(arsi.get(0).getPreparationDate().toString()));
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            DateTime dat = DateUtil.parseCST(arsi.get(0).getPreparationDate().toString());
            date = new SimpleDateFormat("yyyy-MM-dd").format(dat);
        }
        String tmpSec = "档号:" +
                arsi.get(0).getRecordId() +
                ";档案馆(室)号:" + arsi.get(0).getArchiveRoomNumber()+
                ";缩微号:" + arsi.get(0).getMicrofilmNumber()+
                ";发文号:" + arsi.get(0).getInquiryNumber()+
                ";案卷题名:" + arsi.get(0).getCaseTitle() +
                ";编制日期:" +  date +
                ";编制单位:" + arsi.get(0).getPreparationUnit() +
                ";保管期限:" + arsi.get(0).getRetentionPeriod() +
                ";密级:" + arsi.get(0).getSecurityClassification();
        String recordId = aIV.getRecordId();
        byte[] imgr = barcodeService.generateBarcodeImage(recordId);
        byte[] sedcode = pdfGenerateService.createQrCodeN(recordId, 30, 30);
        byte[] sedcode = pdfGenerateService.createQrCodeN(tmpSec, 100, 100);
        ExcelExp e1 = new ExcelExp("案卷封面数据",arsi, ArchiveInfoVo.class);
        ExcelExp e2 = new ExcelExp("案卷封面",  arsi, recordId, imgr,sedcode, ArchiveInfoVo.class);
        List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
@@ -445,7 +492,7 @@
            ExcelExp e6 = new ExcelExp("移交清单",lrs, ArchiveRecordSmall.class);
            ExcelExp e6 = new ExcelExp("移交清单","GH" + formattedDate + sequence,  lrs, ArchiveRecordSmall.class);
          //  ExcelExp e4 = new ExcelExp("案卷封面",  arsi, recordId1, imgr1,sedcode, ArchiveInfoVo.class);
            List<ExcelExp> mysheet6 = new ArrayList<ExcelExp>();
            mysheet6.add(e6);
@@ -464,20 +511,26 @@
            for(int i = 0; i < ids.length; i++) {
            System.out.println(ids.length);
            System.out.println("------------------");
            for(int i = 0; i < ids.length; i++) {
                System.out.println(ids[i]);
                ArchiveRecords archiveRecords1 = iArchiveRecordsService.selectArchiveRecordsById(ids[i]);
                // 获取文件的保存位置,读取数据库,
                DocumentMaterials documentMaterials = new DocumentMaterials();
                documentMaterials.setRecordId(ids[i]);
                List<DocumentMaterialsVoLarge> docs = documentMaterialsService.selectDocumentMaterialsAllByRecordId(ids[i]);
                System.out.println(docs.size()+"----009");
                System.out.println(docs.size()+"----7777");
                //.selectDocumentMaterialsList(documentMaterials);
                List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(ids[i].toString());
                List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(ids[i].toString(), archiveRecords1.getPageCount());
                ArchiveInfoVo aIV = iArchiveRecordsService.selectByRecordId(ids[i]);
                System.out.println(aIV.getInquiryNumber());
                System.out.println(aIV.getRecordId());
                String adir = aIV.getInquiryNumber() + " " + aIV.getRecordId();
                System.out.println(adir);
                System.out.println(fna+adir);
                zos.putNextEntry(new ZipEntry(fna + adir + "/"));
@@ -494,39 +547,26 @@
                }
                //添加07  的pdf
                //pdf目录封面
                String pdfPathF = "07-案卷封面.pdf";
                pdfGenerateService.generatePdf(pdfPathF, ids[i]);
                // 2. 压缩PDF到ZIP文件
                // 添加PDF文件到ZIP
                ZipEntry zipEntry2 = new ZipEntry(fna + adir +"/"+pdfPathF);
                zos.putNextEntry(zipEntry2);
//                String pdfPathF = "07-案卷封面.pdf";
//                pdfGenerateService.generatePdf(pdfPathF, ids[i]);
//                // 2. 压缩PDF到ZIP文件
//                // 添加PDF文件到ZIP
//                ZipEntry zipEntry2 = new ZipEntry(fna + adir +"/"+pdfPathF);
//                zos.putNextEntry(zipEntry2);
//
//                // 读取PDF文件内容并写入ZIP
//                try (FileInputStream fis = new FileInputStream(pdfPathF)) {
//                    byte[] buffer = new byte[1024];
//                    int len;
//                    while ((len = fis.read(buffer)) > 0) {
//                        zos.write(buffer, 0, len);
//                    }
//                }
                // 读取PDF文件内容并写入ZIP
                try (FileInputStream fis = new FileInputStream(pdfPathF)) {
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = fis.read(buffer)) > 0) {
                        zos.write(buffer, 0, len);
                    }
                }
                //08-卷内卷内目录的pdf
                String pdf08Path= "08-卷内目录.pdf";
                List<DocumentMaterialsVo> list3 = dsvs;
                if(list3.size()>0) {
                    pdfGenerateService.generateFileDirectoryPdf(pdf08Path, list3);
                    ZipEntry zipEntry3 = new ZipEntry(fna + adir +"/"+pdf08Path);
                    zos.putNextEntry(zipEntry3);
                    // 读取PDF文件内容并写入ZIP
                    try (FileInputStream fis = new FileInputStream(pdf08Path)) {
                        byte[] buffer = new byte[1024];
                        int len;
                        while ((len = fis.read(buffer)) > 0) {
                            zos.write(buffer, 0, len);
                        }
                    }
                }
                //09-备考表.pdf
@@ -568,13 +608,31 @@
                {
                    for(DocumentMaterialFileStyle documentMaterialFileStyle:dmfs)
                    {
                        if(documentMaterialFileStyle.getFileStyle().equals("文字材料"))
                        if(documentMaterialFileStyle.getFileStyle()!=null&&documentMaterialFileStyle.getFileStyle().equals("文字材料"))
                            texPages = documentMaterialFileStyle.getCnt();
                        if(documentMaterialFileStyle.getFileStyle().equals("图样材料"))
                        if(documentMaterialFileStyle.getFileStyle()!=null&&documentMaterialFileStyle.getFileStyle().equals("图样材料"))
                            patPages = documentMaterialFileStyle.getCnt();
                        if(documentMaterialFileStyle.getFileStyle().equals("照片材料"))
                        if(documentMaterialFileStyle.getFileStyle()!=null&&documentMaterialFileStyle.getFileStyle().equals("照片材料"))
                            picPages = documentMaterialFileStyle.getCnt();
                    }
                }
                String compName = "广州盈家档案管理有限公司";
                String li_person = "仇翀";
                String sh_person = "曾瑞莹";
                if(!StringUtils.isEmpty(archiveRecords1.getLiPerson()))
                    li_person = archiveRecords1.getLiPerson();
                ArchiveProjectName tmp = new ArchiveProjectName();
                tmp.setName(archiveRecords1.getProjectName());
                List<ArchiveProjectName> projectName = iArchiveProjectNameService.selectArchiveProjectNameList(tmp);
                if(!projectName.isEmpty())
                {
                    if(!StringUtils.isEmpty(projectName.get(0).getCompanyName()))
                        compName = projectName.get(0).getCompanyName();
                    if(!StringUtils.isEmpty(projectName.get(0).getCreatePerson()))
                        sh_person = projectName.get(0).getCreatePerson();
                }
                allPages = texPages + picPages + patPages;
                hs.put("pages", allPages);
@@ -582,6 +640,9 @@
                hs.put("picPages", picPages);
                hs.put("texPages", texPages);
                hs.put("volumeNumber", aIV.getRecordId());
                hs.put("company", compName);
                hs.put("liPerson", li_person);
                hs.put("shPerson", sh_person);
                hs.put("time", cdt);
                if (!getLicense()) {
@@ -591,10 +652,16 @@
                try {
                    // 获取 Word 模板所在路径
                    String filepath = "09-备考表.docx";
                    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
                    org.springframework.core.io.Resource resource = resolver.getResource("classpath:09.docx");
//                String filepath = resource.getFile().getAbsolutePath();
//                // 通过 XWPFTemplate 编译文件并渲染数据到模板中
//                XWPFTemplate template = XWPFTemplate.compile(filepath).render(hs
//                       );
                    InputStream inputStream = resource.getInputStream();
                    // 通过 XWPFTemplate 编译文件并渲染数据到模板中
                    XWPFTemplate template = XWPFTemplate.compile(filepath).render(hs
                    XWPFTemplate template = XWPFTemplate.compile(inputStream).render(hs
                    );
                    String renderedDocPath = "rendered_output.docx";
@@ -636,9 +703,33 @@
                List<ArchiveInfoVo> arsi = new ArrayList<>();
                arsi.add(aIV);
                String dates = "";
                if(arsi.get(0).getPreparationDate()!=null) {
                    System.out.println(arsi.get(0).getPreparationDate().toString() + "]]]]]]]]");
                    System.out.println(DateUtil.parseCST(arsi.get(0).getPreparationDate().toString()));
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    DateTime dat = DateUtil.parseCST(arsi.get(0).getPreparationDate().toString());
                    dates = new SimpleDateFormat("yyyy-MM-dd").format(dat);
                }
                String tmpSec = "档号:" +
                        arsi.get(0).getRecordId() +
                        ";档案馆(室)号:" + arsi.get(0).getArchiveRoomNumber()+
                        ";缩微号:" + arsi.get(0).getMicrofilmNumber()+
                        ";发文号:" + arsi.get(0).getInquiryNumber()+
                        ";案卷题名:" + arsi.get(0).getCaseTitle() +
                        ";编制日期:" +  dates +
                        ";编制单位:" + arsi.get(0).getPreparationUnit() +
                        ";保管期限:" + arsi.get(0).getRetentionPeriod() +
                        ";密级:" + arsi.get(0).getSecurityClassification();
                String recordId1 = aIV.getRecordId();
                byte[] imgr1 = barcodeService.generateBarcodeImage(recordId1);
                byte[] sedcode = pdfGenerateService.createQrCodeN(recordId1, 30, 30);
                byte[] sedcode = pdfGenerateService.createQrCodeN(tmpSec, 200, 200);
                ExcelExp e3 = new ExcelExp("案卷封面数据",arsi, ArchiveInfoVo.class);
                ExcelExp e4 = new ExcelExp("案卷封面",  arsi, recordId1, imgr1,sedcode, ArchiveInfoVo.class);
                List<ExcelExp> mysheet1 = new ArrayList<ExcelExp>();
@@ -652,6 +743,64 @@
                //  System.out.println(bos2);
                zos.putNextEntry(entryiv);
                bos2.writeTo(zos);
                //pdf目录封面
                String pdfPathF = "07-案卷封面.pdf";
                // pdfGenerateService.generatePdf(pdfPathF, id);
                try {
                    if (!getLicenseExcel()) {
                        System.out.println("授权失败");
                        // return ;
                    }
                    // 读取Excel文件
                    com.aspose.cells.Workbook wb = poiToAspose(util3.getWb());
                    // 获取需要导出的sheet(索引从0开始)
                    int targetSheetIndex = 1;
                    com.aspose.cells.Worksheet targetSheet = wb.getWorksheets().get(targetSheetIndex);
                    targetSheet.autoFitRows(true);
                    System.out.println("当前sheet名称:" + targetSheet.getName());
                    System.out.println("当前sheet索引:" + targetSheet.getIndex());
                    // 隐藏所有其他工作表
                    for (int j = 0; j < wb.getWorksheets().getCount(); j++) {
                        if (j != targetSheetIndex) {
                            wb.getWorksheets().get(j).setVisible(false);
                        }
                    }
                    // 设置活动工作表为目标工作表
                    wb.getWorksheets().setActiveSheetIndex(targetSheetIndex);
                    // 创建PDF保存选项
                    com.aspose.cells.PdfSaveOptions pdfSaveOptions = new com.aspose.cells.PdfSaveOptions();
                    pdfSaveOptions.setCompliance(com.aspose.cells.PdfCompliance.PDF_A_1_B);
                    // 创建临时字节输出流
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    // 将新的Workbook保存为PDF到临时流
                    //   newWorkbook.save(baos, com.aspose.cells.SaveFormat.PDF);
                    wb.save(baos, pdfSaveOptions);
                    // 将PDF添加到ZIP文件
                    ZipEntry entry07 = new ZipEntry(fna + adir +"/"+pdfPathF);
                    zos.putNextEntry(entry07);
                    zos.write(baos.toByteArray());
                    //  zos.closeEntry();
                    // 直接将原始工作簿保存为PDF(只包含可见的工作表)
                    long now = System.currentTimeMillis();
                    //   System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒");
                } catch (Exception e) {
                    e.printStackTrace();
                    // 打印详细错误信息
                    System.err.println("转换失败:" + e.getMessage());
                    e.printStackTrace(System.err);
                }
//            ExcelUtil<ArchiveInfoVo> utilsv = new ExcelUtil<ArchiveInfoVo>(ArchiveInfoVo.class);
//
//
@@ -659,7 +808,7 @@
//            List<ArchiveInfoVo> aivs = new ArrayList<>();
//            aivs.add(aIV);
//            utilsv.byteOutputStreamExcel(boss, aivs,"Date List", "");
                bos2.writeTo(zos);
@@ -675,7 +824,7 @@
                //拿到卷内目录的excel
                List<DocumentMaterialsVoSmall> list2 = dsvs.stream().map(res1 -> new DocumentMaterialsVoSmall(res1.getNum(), res1.getDocumentNumber(),res1.getCreator(),
                        res1.getTitle(), res1.getDate(), res1.getPageNumber(), res1.getRemarks())).collect(Collectors.toList());
                        res1.getTitle(), res1.getDate(), res1.getPageNumberFormatted(), res1.getRemarks())).collect(Collectors.toList());
                if(!dsvs.isEmpty()) {
                    String recordId = dsvs.get(0).getRecordId();
                    byte[] imgr = barcodeService.generateBarcodeImage(recordId);
@@ -691,12 +840,90 @@
                    zos.putNextEntry(entr);
                    ByteOutputStream bos8 = new ByteOutputStream();
                    util2.exportExcelManySheet(bos6, mysheet);
                    util2.exportExcelManySheet(bos8, mysheet);
                    //   util1.byteOutputStreamExcel(bos1, dsvs,"Date List", "");
                    bos8.writeTo(zos);
                    //08-卷内卷内目录的pdf
                    String pdf08Path= "08-卷内目录.pdf";
                    try {
                        if (!getLicenseExcel()) {
                            System.out.println("授权失败");
                            // return ;
                        }
                        // 读取Excel文件
                        com.aspose.cells.Workbook wb1 = poiToAspose(util2.getWb());
                        // 获取需要导出的sheet(索引从0开始)
                        int targetSheetIndex = 1;
                        com.aspose.cells.Worksheet targetSheet = wb1.getWorksheets().get(targetSheetIndex);
                        targetSheet.autoFitRows(true);
                        System.out.println("当前sheet名称:" + targetSheet.getName());
                        System.out.println("当前sheet索引:" + targetSheet.getIndex());
                        // 隐藏所有其他工作表
                        for (int j = 0; j < wb1.getWorksheets().getCount(); j++) {
                            if (j != targetSheetIndex) {
                                wb1.getWorksheets().get(j).setVisible(false);
                            }
                        }
                        // 设置活动工作表为目标工作表
                        wb1.getWorksheets().setActiveSheetIndex(targetSheetIndex);
                        // 创建PDF保存选项
                        com.aspose.cells.PdfSaveOptions pdfSaveOptions = new com.aspose.cells.PdfSaveOptions();
                        pdfSaveOptions.setCompliance(com.aspose.cells.PdfCompliance.PDF_A_1_B);
                        // 创建临时字节输出流
                        ByteArrayOutputStream baosm = new ByteArrayOutputStream();
                        // 将新的Workbook保存为PDF到临时流
                        //   newWorkbook.save(baos, com.aspose.cells.SaveFormat.PDF);
                        wb1.save(baosm, pdfSaveOptions);
                        // 将PDF添加到ZIP文件
                        ZipEntry entry2 = new ZipEntry(fna + adir +"/"+pdf08Path);
                        zos.putNextEntry(entry2);
                        zos.write(baosm.toByteArray());
                        //  zos.closeEntry();
                        // 直接将原始工作簿保存为PDF(只包含可见的工作表)
                        long now = System.currentTimeMillis();
                        //   System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒");
                    } catch (Exception e) {
                        e.printStackTrace();
                        // 打印详细错误信息
                        System.err.println("转换失败:" + e.getMessage());
                        e.printStackTrace(System.err);
                    }
                }
                //把excel转为pdf
//
//                //08-卷内卷内目录的pdf
//                String pdf08Path= "08-卷内目录.pdf";
//                List<DocumentMaterialsVo> list3 = dsvs;
//                if(list3.size()>0) {
//                    pdfGenerateService.generateFileDirectoryPdf(pdf08Path, list3);
//                    ZipEntry zipEntry3 = new ZipEntry(fna + adir +"/"+pdf08Path);
//                    zos.putNextEntry(zipEntry3);
//
//                    // 读取PDF文件内容并写入ZIP
//                    try (FileInputStream fis = new FileInputStream(pdf08Path)) {
//                        byte[] buffer = new byte[1024];
//                        int len;
//                        while ((len = fis.read(buffer)) > 0) {
//                            zos.write(buffer, 0, len);
//                        }
//                    }
//                }
//
//
@@ -713,38 +940,40 @@
                    //在压缩包中添加文件夹
                    //得到文件名frontCompWithZore(4, dc.get)+
                    String fname = frontCompWithZore(4, dc.getFileNumber().intValue())+"-"+dc.getTitle()+"-"+frontCompWithZore(4,dc.getPageNumber().intValue())+"."
                            +dc.getUrl().split("\\.")[1];
                    if(dc.getStage().equals("01-申请材料"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/01-申请材料/"+fname));
                    else if(dc.getStage().equals("02-办案过程材料"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/02-办案过程材料/"+fname));
                    else if(dc.getStage().equals("03-结论性文件"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/03-结论性文件/"+fname));
                    else if(dc.getStage().equals("04-其他材料")) {
                        zos.putNextEntry(new ZipEntry(fna + adir + "/04-其他材料/" + fname));
                    }
                    else if(dc.getStage().equals("05-档案变更材料"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/05-档案变更材料/"+fname));
                    else if(dc.getStage().equals("06-业务数据"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/06-业务数据/"+fname));
                    else
                        zos.putNextEntry(new ZipEntry(fna + adir + "/"+fname));
                    String fname = "";
                    if(dc.getFileNumber()!=null&&dc.getPageNumber()!=null) {
                        fname = frontCompWithZore(4, dc.getFileNumber().intValue()) + "-" + dc.getTitle() + "-" + frontCompWithZore(4, dc.getPageNumber().intValue()) + "."
                                + dc.getUrl().split("\\.")[1];
                        if (dc.getStage().equals("01-申请材料"))
                            zos.putNextEntry(new ZipEntry(fna + adir + "/01-申请材料/" + fname));
                        else if (dc.getStage().equals("02-办案过程材料"))
                            zos.putNextEntry(new ZipEntry(fna + adir + "/02-办案过程材料/" + fname));
                        else if (dc.getStage().equals("03-结论性文件"))
                            zos.putNextEntry(new ZipEntry(fna + adir + "/03-结论性文件/" + fname));
                        else if (dc.getStage().equals("04-其他材料")) {
                            zos.putNextEntry(new ZipEntry(fna + adir + "/04-其他材料/" + fname));
                        } else if (dc.getStage().equals("05-档案变更材料"))
                            zos.putNextEntry(new ZipEntry(fna + adir + "/05-档案变更材料/" + fname));
                        else if (dc.getStage().equals("06-业务数据"))
                            zos.putNextEntry(new ZipEntry(fna + adir + "/06-业务数据/" + fname));
                        else
                            zos.putNextEntry(new ZipEntry(fna + adir + "/" + fname));
                    int len;
                    FileInputStream in = new FileInputStream(tempFile);
                    while ((len = in.read(buf)) != -1){
                        zos.write(buf, 0, len);
                    }
                    //  zos.putNextEntry(new ZipEntry("04-其他材料"));
                    zos.closeEntry();
                    in.close();
                }
            }
            //删除压缩包
                int len;
                FileInputStream in = new FileInputStream(tempFile);
                while ((len = in.read(buf)) != -1){
                    zos.write(buf, 0, len);
                }
                  //  zos.putNextEntry(new ZipEntry("04-其他材料"));
                zos.closeEntry();
                in.close();
            }
        }
        //删除压缩包
//            if(file.exists()){
//                file.delete();
//            }
@@ -780,8 +1009,6 @@
    /**
     * 打包下载
     * @param response
@@ -790,20 +1017,174 @@
    @PostMapping("/export/{id}")
    public void packDownload(HttpServletResponse response,  @PathVariable Long id) throws Exception {
        // 获取文件的保存位置,读取数据库,
        DocumentMaterials documentMaterials = new DocumentMaterials();
        documentMaterials.setRecordId(id);
        List<DocumentMaterialsVoLarge> docs = documentMaterialsService.selectDocumentMaterialsAllByRecordId(id);
       System.out.println(docs.size()+"----009");
     //   List<DocumentMaterialsVoLarge> docs = documentMaterialsService.selectDocumentMaterialsAllByRecordId(id);
        //根据id拿到pageNumber
        ArchiveInfoVo aIV = iArchiveRecordsService.selectByRecordId(id);
        System.out.println(aIV.getPageCount()+"++++++++++++++++==");
        //生成新的记录,不保存再数据库
        List<DocumentMaterials> docAllInfo = documentMaterialsService.SelectAllRecordsByPageNumbersToList(id, aIV.getPageCount());
        //把DocumentMaterils转到docs
        List<DocumentMaterialsVoLarge> docs = new ArrayList<>();
        int nstar = 1;
        for (DocumentMaterials mater : docAllInfo) {
            // physcialService.mySave(physcial);
            DocumentMaterialsVoLarge docum = new DocumentMaterialsVoLarge();
            BeanUtils.copyProperties(mater, docum);
            docum.setRecordId(aIV.getRecordId());
            docum.setNum(nstar++);
            docs.add(docum);
        }
        System.out.println(docs.size()+"----009");
                //.selectDocumentMaterialsList(documentMaterials);
        List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(id.toString());
        if(dsvs==null||dsvs.isEmpty())
        //把附件和记录一一对应
        String fileSysPath = RuoYiConfig.getUploadPath();
        AjaxResult ajax = AjaxResult.success();
        String path = fileSysPath + File.separator + id;
        File desc = new File(fileSysPath + File.separator + id);
        System.out.println("44444444444444456666666666666666");
        if (!desc.exists())
        {
            throw new RuntimeException("电子文件信息没有上传,请补充!");
        }
        ArchiveInfoVo aIV = iArchiveRecordsService.selectByRecordId(id);
        Map<String, String> fileMap = new HashMap<>();
        try (Stream<Path> paths = Files.walk(Paths.get(path))) {
            fileMap = paths
                    .filter(Files::isRegularFile)
                    .collect(Collectors.toMap(
                            // Key: 文件名前缀(不带扩展名)
                            Path -> {
                                String fileNam = Path.getFileName().toString();
                                int dotIndex = fileNam.lastIndexOf('.');
                                return dotIndex > 0 ? fileNam.substring(0, dotIndex) : fileNam;
                            },
                            // Value: 文件全路径
                            Path::toString,
                            // 处理重复键的情况(如果有相同前缀的文件)
                            (existing, replacement) -> existing
                    ));
        }
        List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(id.toString(), aIV.getPageCount());
        //重新封装一下docs,和附件绑定再一起
        for (int i = 0; i < docs.size(); i++) {
            DocumentMaterialsVoLarge dc = docs.get(i);
            if (dc.getSecurityLevel() != null && (dc.getSecurityLevel().equals("该页另存") ||
                    dc.getSecurityLevel().equals("秘密") || dc.getSecurityLevel().equals("内部用途") ||
                    dc.getSecurityLevel().equals("内部用图"))) {
                // 替换为了准备好的图像
                String fp = fileSysPath + "\\glc.jpg";
                Path path1 = Paths.get(fp);
                // 拿到图像属性
                BufferedImage bufferedImage = ImageIO.read(Files.newInputStream(path1));
                int wid = bufferedImage.getWidth();
                int hei = bufferedImage.getHeight();
                double sz = Double.parseDouble(String.format("%.2f", Files.size(path1) * 1.0 / 1024));
                // 拿到图像的dpi信息
                ImageInfo info = Imaging.getImageInfo(Files.readAllBytes(path1));
                int wdpi = info.getPhysicalWidthDpi();
                int hdpi = info.getPhysicalHeightDpi();
                // 计算fileNumber
                //    Long fileNumber = documentMaterialsService.getFiNum(nam, recordId);
                // 计算sizeType
                String sizeType = getPageSize(wid * hei);
                Graphics2D g2d = bufferedImage.createGraphics();
                g2d.setFont(new java.awt.Font("宋体", Font.BOLD, 80)); // 设置字体样式和大小
                g2d.setColor(Color.black);
                String pageNumber = dc.getPageNumber() + "";
                int fontHeight = g2d.getFontMetrics().getHeight();
                int x = bufferedImage.getWidth() - g2d.getFontMetrics().stringWidth(pageNumber) - 80;
                int y = bufferedImage.getHeight() - fontHeight / 2 - 100;
                g2d.drawString(pageNumber, x, y);
                g2d.dispose();
                // 将BufferedImage转换为MultipartFile
                MultipartFile multipartFile = null;
                ByteArrayOutputStream ost = new ByteArrayOutputStream();
                ImageIO.write(bufferedImage, "jpg", ost);
                InputStream input = new ByteArrayInputStream(ost.toByteArray());
                multipartFile = new MockMultipartFile(pageNumber, pageNumber + ".jpg", "text/plain", input);
                // 上传并返回新文件名称
                String fileName1 = FileUploadUtils.upload(fileSysPath, multipartFile);
               // filePath = fileName1;
                dc.setWidth((long) wid);
                dc.setHeight((long) hei);
                dc.setFileSize(sz);
                dc.setFormat(".jpg");
                dc.setHorizontalResolution((long) wdpi);
                dc.setVerticalResolution((long) hdpi);
                dc.setSizeType(sizeType);
                fileMap.put(dc.getPageNumber()+"", fp);
             //   dc.set
                // 更新数据库
                //   documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber, wid, hei, wdpi, hdpi, sz, fileName1, "jpg", recordId);
//                        urls.add(serverConfig.getUrl() + fileName1);
//                        fileNames.add(fileName1);
//                        newFileNames.add(FileUtils.getName(fileName1));
//                        originalFilenames.add(pageNumber + ".jpg");
            }
            else {
                //文件名称
              //  String pname = nams[1];
             //   ajax.put("url", url);
                //拿到图像属性
                System.out.println(dc.getPageNumber());
                String fip = fileMap.get(dc.getPageNumber().toString());
// 创建 File 对象
                File file = new File(fip);
// 使用 ImageIO 读取图片
                BufferedImage image = ImageIO.read(file);
                BufferedImage bufferedImage = ImageIO.read(file);
                int wid = bufferedImage.getWidth();
                int hei = bufferedImage.getHeight();
                double sz =  Double.parseDouble(String.format("%.2f", file.length()*1.0/1024));
                System.out.println(wid+":"+hei+":"+sz);
                //拿到图像的dpi信息
                byte[] bytesArray = new byte[(int) file.length()];
                FileInputStream fis = new FileInputStream(file);
                fis.read(bytesArray); //read file into bytes[]
                ImageInfo info = Imaging.getImageInfo(bytesArray);
                int wdpi = info.getPhysicalWidthDpi() ;
                int hdpi = info.getPhysicalHeightDpi();
          //      System.out.println("DPI: " + info.getPhysicalWidthDpi()+nam+"dds");
                fis.close();
                //计算fileNumber
              //  Long fileNumber = documentMaterialsService.getFiNum(dc.getPageNumber(), id);
                //计算sizeType
                String sizeType = getPageSize(wid*hei);
                dc.setWidth((long) wid);
                dc.setHeight((long) hei);
                dc.setFileSize(sz);
                dc.setFormat(".jpg");
                dc.setHorizontalResolution((long) wdpi);
                dc.setVerticalResolution((long) hdpi);
                dc.setSizeType(sizeType);
            }
        }
        System.out.println(dsvs.size());
        List<String> paths = new ArrayList<>();
//        System.out.println(docs);
@@ -824,7 +1205,8 @@
            String datumName = "user";
            //压缩文件
            List<String> filePathList = paths;
            File file = compressedFileToZip(docs, dsvs, aIV, id);
            //把docmentMaterial转为
            File file = compressedFileToZip(docs, dsvs, aIV, id, fileMap);
            System.out.println(file.getName());
            String fileName =aIV.getRecordId()+".zip";
@@ -918,7 +1300,7 @@
    // 压缩文件
    private File compressedFileToZip(List<DocumentMaterialsVoLarge> docs, List<DocumentMaterialsVo> dsvs,   ArchiveInfoVo aIV, Long id) throws Exception {
    private File compressedFileToZip(List<DocumentMaterialsVoLarge> docs, List<DocumentMaterialsVo> dsvs,   ArchiveInfoVo aIV, Long id,   Map<String, String> fileMap) throws Exception {
        //压缩包具体名称(拼接时间戳防止重名)
        String datumName = "";
        String zipFileName =dsvs.get(0).getDocumentNumber()+aIV.getRecordId()+ ".zip";
@@ -958,20 +1340,41 @@
            {
                for(DocumentMaterialFileStyle documentMaterialFileStyle:dmfs)
                {
                    if(documentMaterialFileStyle.getFileStyle().equals("文字材料"))
                    if(documentMaterialFileStyle.getFileStyle()!=null&&documentMaterialFileStyle.getFileStyle().equals("文字材料"))
                        texPages = documentMaterialFileStyle.getCnt();
                    if(documentMaterialFileStyle.getFileStyle().equals("图样材料"))
                    if(documentMaterialFileStyle.getFileStyle()!=null&&documentMaterialFileStyle.getFileStyle().equals("图样材料"))
                        patPages = documentMaterialFileStyle.getCnt();
                    if(documentMaterialFileStyle.getFileStyle().equals("照片材料"))
                    if(documentMaterialFileStyle.getFileStyle()!=null&&documentMaterialFileStyle.getFileStyle().equals("照片材料"))
                        picPages = documentMaterialFileStyle.getCnt();
                }
            }
            String compName = "广州盈家档案管理有限公司";
            String li_person = "仇翀";
            String sh_person = "曾瑞莹";
            ArchiveRecords archiveRecords = iArchiveRecordsService.selectArchiveRecordsById(id);
            if(!StringUtils.isEmpty(archiveRecords.getLiPerson()))
                li_person = archiveRecords.getLiPerson();
            ArchiveProjectName tmp = new ArchiveProjectName();
            tmp.setName(archiveRecords.getProjectName());
            List<ArchiveProjectName> projectName = iArchiveProjectNameService.selectArchiveProjectNameList(tmp);
            if(!projectName.isEmpty())
            {
                if(!StringUtils.isEmpty(projectName.get(0).getCompanyName()))
                    compName = projectName.get(0).getCompanyName();
                if(!StringUtils.isEmpty(projectName.get(0).getCreatePerson()))
                    sh_person = projectName.get(0).getCreatePerson();
            }
            allPages = texPages + picPages + patPages;
            hs.put("pages", allPages);
            hs.put("patPages", patPages);
            hs.put("picPages", picPages);
            hs.put("texPages", texPages);
            hs.put("volumeNumber", aIV.getRecordId());
            hs.put("company", compName);
            hs.put("liPerson", li_person);
            hs.put("shPerson", sh_person);
            hs.put("time", cdt);
            if (!getLicense()) {
@@ -982,10 +1385,22 @@
            try {
                // 获取 Word 模板所在路径
                String filepath = "09-备考表.docx";
                // 通过 XWPFTemplate 编译文件并渲染数据到模板中
                XWPFTemplate template = XWPFTemplate.compile(filepath).render(hs
                       );
                ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
                org.springframework.core.io.Resource resource = resolver.getResource("classpath:09.docx");
//                String filepath = resource.getFile().getAbsolutePath();
//                // 通过 XWPFTemplate 编译文件并渲染数据到模板中
//                XWPFTemplate template = XWPFTemplate.compile(filepath).render(hs
//                       );
                InputStream inputStream = resource.getInputStream();
                    // 通过 XWPFTemplate 编译文件并渲染数据到模板中
                    XWPFTemplate template = XWPFTemplate.compile(inputStream).render(hs
                    );
                String renderedDocPath = "rendered_output.docx";
                File renderedFile = new File(renderedDocPath);
@@ -1017,7 +1432,7 @@
            com.aspose.words.Document doc = new com.aspose.words.Document("09-备考表.docx");
           // com.aspose.words.Document doc = new com.aspose.words.Document("09.docx");
@@ -1046,9 +1461,33 @@
            List<ArchiveInfoVo> arsi = new ArrayList<>();
            arsi.add(aIV);
            String date = "";
            if(arsi.get(0).getPreparationDate()!=null) {
                System.out.println(arsi.get(0).getPreparationDate().toString() + "]]]]]]]]");
                System.out.println(DateUtil.parseCST(arsi.get(0).getPreparationDate().toString()));
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                DateTime dat = DateUtil.parseCST(arsi.get(0).getPreparationDate().toString());
                date = new SimpleDateFormat("yyyy-MM-dd").format(dat);
            }
            String tmpSec = "档号:" +
                    arsi.get(0).getRecordId() +
                    ";档案馆(室)号:" + arsi.get(0).getArchiveRoomNumber()+
                    ";缩微号:" + arsi.get(0).getMicrofilmNumber()+
                    ";发文号:" + arsi.get(0).getInquiryNumber()+
                    ";案卷题名:" + arsi.get(0).getCaseTitle() +
                    ";编制日期:" +  date +
                    ";编制单位:" + arsi.get(0).getPreparationUnit() +
                    ";保管期限:" + arsi.get(0).getRetentionPeriod() +
                    ";密级:" + arsi.get(0).getSecurityClassification();
            String recordId1 = aIV.getRecordId();
            byte[] imgr1 = barcodeService.generateBarcodeImage(recordId1);
            byte[] sedcode = pdfGenerateService.createQrCodeN(recordId1, 30, 30);
            byte[] sedcode = pdfGenerateService.createQrCodeN(tmpSec, 200, 200);
            ExcelExp e3 = new ExcelExp("案卷封面数据",arsi, ArchiveInfoVo.class);
            ExcelExp e4 = new ExcelExp("案卷封面",  arsi, recordId1, imgr1,sedcode, ArchiveInfoVo.class);
            List<ExcelExp> mysheet1 = new ArrayList<ExcelExp>();
@@ -1140,7 +1579,7 @@
            //拿到卷内目录的excel
            List<DocumentMaterialsVoSmall> list2 = dsvs.stream().map(res -> new DocumentMaterialsVoSmall(res.getNum(), res.getDocumentNumber(),res.getCreator(),
                    res.getTitle(), res.getDate(), res.getPageNumber(), res.getRemarks())).collect(Collectors.toList());
                    res.getTitle(), res.getDate(), res.getPageNumberFormatted(), res.getRemarks())).collect(Collectors.toList());
            String recordId = dsvs.get(0).getRecordId();
            byte[] imgr = barcodeService.generateBarcodeImage(recordId);
@@ -1241,13 +1680,45 @@
            byte[] buf = new byte[1024];
            for (DocumentMaterialsVoLarge dc : docs) {
                String filePath = dc.getUrl();
                String filePath = fileMap.get(dc.getPageNumber().toString());
                if(filePath==null)
                    continue;
                filePath = filePath.replace("/profile/", RuoYiConfig.getProfile() + "/");
                System.out.println(filePath);
//                    else {
//                        // 文件名称
//                        String pname = nams[1];
//
//                        // 拿到图像属性
//                        BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
//                        int wid = bufferedImage.getWidth();
//                        int hei = bufferedImage.getHeight();
//                        double sz = Double.parseDouble(String.format("%.2f", file.getSize() * 1.0 / 1024));
//
//                        // 拿到图像的dpi信息
//                        ImageInfo info = Imaging.getImageInfo(file.getBytes());
//                        int wdpi = info.getPhysicalWidthDpi();
//                        int hdpi = info.getPhysicalHeightDpi();
//                        // 计算fileNumber
//                        Long fileNumber = documentMaterialsService.getFiNum(nam, recordId);
//                        // 计算sizeType
//                        String sizeType = getPageSize(wid * hei);
//
//                        // 更新数据库
//                   //     documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber, wid, hei, wdpi, hdpi, sz, fileName, pname, recordId);
////
////                        urls.add(url);
////                        fileNames.add(fileName);
////                        newFileNames.add(FileUtils.getName(fileName));
////                        originalFilenames.add(fname);
//                    }
//
                File tempFile = new File(filePath);
                System.out.println(filePath);
                System.out.println(tempFile.length());
                //在压缩包中添加文件夹
                if(res) {
                    zos.putNextEntry(new ZipEntry("01-申请材料/"));
@@ -1260,9 +1731,15 @@
                }
                //得到文件名frontCompWithZore(4, dc.get)+
                String fname = "";
                if(dc.getFileNumber()!=null&&dc.getPageNumber()!=null) {
                    fname = frontCompWithZore(4, dc.getFileNumber().intValue()) + "-" + dc.getTitle() + "-" + frontCompWithZore(4, dc.getPageNumber().intValue()) + "."
                            + dc.getUrl().split("\\.")[1];
             //   if(dc.getFileNumber()!=null&&dc.getPageNumber()!=null) {
                    if(dc.getPageNumber()!=null) {
                    //    fname = frontCompWithZore(4, dc.getFileNumber().intValue()) + "-" + dc.getTitle() + "-" + frontCompWithZore(4, dc.getPageNumber().intValue()) + "."
                          //      + filePath.split("\\.")[1];
                    fname = "-" + dc.getTitle() + "-" + frontCompWithZore(4, dc.getPageNumber().intValue()) + "."
                            + filePath.split("\\.")[1];
                    System.out.println(fname);
                    if (dc.getStage().equals("01-申请材料"))
                        zos.putNextEntry(new ZipEntry("01-申请材料/" + fname));
                    else if (dc.getStage().equals("02-办案过程材料"))
@@ -1314,7 +1791,19 @@
        }
        return file;
    }
    public String getPageSize(double du)
    {
        if(du <= 8699840 * 1.5)
            return "A4";
        else if(du <= 17403188 * 1.5)
            return "A3";
        else if(du <= 34811347 * 1.5)
            return "A2";
        else if(du <= 69622674 * 1.5)
            return "A1";
        else
            return "A0";
    }
}