fei
8 天以前 fc3ccbfc30b83e432c71c508ef2b9c1052816ed2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/archive/DocumentMaterialsController.java
@@ -8,30 +8,52 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.HashMap;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.aspose.words.License;
import com.deepoove.poi.XWPFTemplate;
import com.drew.imaging.ImageMetadataReader;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifIFD0Directory;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.poi.ExcelExp;
import com.ruoyi.common.utils.poi.ExcelUtilManySheet;
import com.ruoyi.common.utils.poi.ExcelUtilManySheetSecond;
import com.ruoyi.domain.ArchiveCategory;
import com.ruoyi.domain.ArchiveProjectName;
import com.ruoyi.domain.ArchiveRecords;
import com.ruoyi.domain.DocumentMaterials;
import com.ruoyi.domain.vo.DocumentMaterialFileSmallVo;
import com.ruoyi.domain.vo.*;
import com.ruoyi.framework.config.ServerConfig;
import com.ruoyi.framework.web.domain.server.Sys;
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 com.sun.xml.internal.ws.api.addressing.WSEndpointReference;
import org.apache.commons.imaging.ImageInfo;
import org.apache.commons.imaging.Imaging;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
@@ -47,6 +69,7 @@
import static com.ruoyi.common.core.page.TableSupport.PAGE_NUM;
import static com.ruoyi.common.core.page.TableSupport.PAGE_SIZE;
import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log;
/**
 * 【文件材料综合信息】Controller
@@ -59,12 +82,23 @@
public class DocumentMaterialsController extends BaseController
{
    @Autowired
    private IArchiveProjectNameService iArchiveProjectNameService;
    @Autowired
    private BarcodeService barcodeService;
    @Autowired
    private ServerConfig serverConfig;
    @Autowired
    private pdfGenerateService pdfGenerateService;
    @Autowired
    private IDocumentMaterialsService documentMaterialsService;
    @Autowired
    private IArchiveRecordsService iArchiveRecordsService;
    /**
     * 文件分隔符
     */
    private static final String FILE_DELIMETER = ",";
    /**
     * 判断PageNumber是否连续
     */
@@ -81,7 +115,7 @@
        return AjaxResult.success(data);
    }
    /**
     * 拿到除了其它类型材料的个数
     * 拿到对应的案卷材料个数
     */
    @PreAuthorize("@ss.hasPermi('system:materials:list')")
    @GetMapping("/getFileCount/{recordId}")
@@ -90,6 +124,29 @@
        int cnt = documentMaterialsService.getFileCount(recordId);
        return AjaxResult.success(cnt);
    }
    /**
     * 判断卷内目录是否上传了附件
     */
    @PreAuthorize("@ss.hasPermi('system:materials:list')")
    @GetMapping("/judge/{recordId}")
    public AjaxResult judge(@PathVariable("recordId") Integer recordId)
    {
        Boolean cnt = documentMaterialsService.judgeInfo(recordId);
        return AjaxResult.success(cnt);
    }
    /**
     * 根据页号添加中间记录的接口
     * 例如页号1,5,7,则添加页号为2,3,4(信息与1保持一致),6(信息与5保持一致)
     */
    @PreAuthorize("@ss.hasPermi('system:materials:edit')")
    @GetMapping("/addMiddleRecords/{recordId}/{maxPageNumber}")
    public AjaxResult addMiddleRecords(@PathVariable("recordId") Long recordId,@PathVariable("maxPageNumber")  Long maxPageNumber)
    {
        return documentMaterialsService.addMiddleRecordsByPageNumbers(recordId, maxPageNumber);
    }
    /**
     * 查询【文件材料综合信息】列表
@@ -120,9 +177,61 @@
            list = documentMaterialsService.selectDocumentMaterialsList(documentMaterials);
        }
        ExcelUtil<DocumentMaterials> util = new ExcelUtil<DocumentMaterials>(DocumentMaterials.class);
        util.exportExcel(response, list, "【文件材料综合信息】数据");
        util.exportExcel(response, list, "电子文件目录");
    }
    @PreAuthorize("@ss.hasPermi('system:materials:export')")
    @Log(title = "【导出卷内目录】", businessType = BusinessType.EXPORT)
    @PostMapping("/exportDir")
    public void exportDir(HttpServletResponse response, DocumentMaterials documentMaterials, @RequestParam(value = "ids", required = false) Long[] ids)
    {
        ArchiveRecords archiveRecords = iArchiveRecordsService.selectArchiveRecordsById(documentMaterials.getRecordId());
        List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(documentMaterials.getRecordId().toString(), archiveRecords.getPageCount());
        List<DocumentMaterialsVoSmall> list2 = dsvs.stream().map(res1 -> new DocumentMaterialsVoSmall(res1.getNum(), res1.getDocumentNumber(),res1.getCreator(),
                res1.getTitle(), res1.getDate(), res1.getPageNumberFormatted(), res1.getRemarks())).collect(Collectors.toList());
//        List<DocumentMaterials> list;
//        System.out.println(ids);
//        // 如果提供了ids参数,则根据ids导出指定记录
//        if (ids != null && ids.length > 0) {
//            list = documentMaterialsService.selectDocumentMaterialsByIds(ids);
//        } else {
//            list = documentMaterialsService.selectDocumentMaterialsList(documentMaterials);
//
//        }
//        // 根据visible字段筛选,只保留visible为1的记录
//        List<DocumentMaterials> filteredList = list.stream()
//                .filter(doc -> doc.getVisible() != null && doc.getVisible() == 1 && !Objects.equals(doc.getFileStyle(), "其他材料"))
//                .collect(Collectors.toList());
//
//        // 使用AtomicLong实现序号的递增
//        AtomicLong nm = new AtomicLong(1L);
//        // 将筛选后的DocumentMaterials转换为DocumentMaterialsVo
//        List<DocumentMaterialsVoSmall> list1 = filteredList.stream().map(doc -> {
//            DocumentMaterialsVoSmall vo = new DocumentMaterialsVoSmall();
//            // 手动映射字段,使用getAndIncrement()方法获取当前值并递增
//            vo.setNum(nm.getAndIncrement());
//
//            vo.setDocumentNumber(doc.getDocumentNumber());
//            vo.setCreator(doc.getCreator());
//            vo.setTitle(doc.getTitle());
//            vo.setDate(doc.getDate());
//            vo.setPageNumberFormatted(doc.getPageNumber().toString());
//            vo.setRemarks(doc.getRemarks());
////            vo.setRecordId(doc.getRecordId() != null ? doc.getRecordId().toString() : null);
////            vo.setPublicity(doc.getPublicity());
//            return vo;
//        }).collect(Collectors.toList());
        ExcelUtil<DocumentMaterialsVoSmall> util = new ExcelUtil<DocumentMaterialsVoSmall>(DocumentMaterialsVoSmall.class);
        util.exportExcel(response, list2, "卷内目录");
    }
   // List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(id.toString());
    /**
     * 获取【文件材料综合信息】详细信息
@@ -142,6 +251,7 @@
    @PostMapping
    public AjaxResult add(@RequestBody DocumentMaterials documentMaterials)
    {
        documentMaterials.setVisible(1);
        int res = documentMaterialsService.insertDocumentMaterials(documentMaterials);
        System.out.println(res+"][[[[[[[[[[[[[[[[[[");
        return toAjax(res);
@@ -173,13 +283,13 @@
    public String getPageSize(double du)
    {
        if(du <= 8699840)
        if(du <= 8699840 * 1.5)
            return "A4";
        else if(du <= 17403188)
        else if(du <= 17403188 * 1.5)
            return "A3";
        else if(du <= 34811347)
        else if(du <= 34811347 * 1.5)
            return "A2";
        else if(du <= 69622674)
        else if(du <= 69622674 * 1.5)
            return "A1";
        else
            return "A0";
@@ -204,15 +314,17 @@
            AjaxResult ajax = AjaxResult.success();
            //分割文件名
            String [] nams = fname.split("\\.");
            System.out.println(fname);
            Long nam = Long.parseLong(nams[0]);
            //根据页号拿到案卷的详细信息
            System.out.println("0-------------");
            System.out.println(recordId);
            System.out.println("0-------------");
            DocumentMaterials doc = documentMaterialsService.selectByPageNumber(nam, Math.toIntExact(recordId));
            if(doc==null)
                return AjaxResult.error("无对应页号,请检查清楚附件以及对应的输入!");
            else{
                if(doc.getSecurityLevel().equals("该页另存"))
                if(doc.getSecurityLevel()!=null&&doc.getSecurityLevel().equals("该页另存"))
                {
                    //替换为了准备好的图像
@@ -300,7 +412,7 @@
                    int wdpi = info.getPhysicalWidthDpi() ;
                    int hdpi = info.getPhysicalHeightDpi();
                    System.out.println("DPI: " + info.getPhysicalWidthDpi());
                    System.out.println("DPI: " + info.getPhysicalWidthDpi()+nam+"dds");
                    //计算fileNumber
                    Long fileNumber = documentMaterialsService.getFiNum(nam, recordId);
                    //计算sizeType
@@ -320,6 +432,7 @@
        }
        catch (Exception e)
        {
            System.out.println("88888888882222222222222");
            System.out.println(e);
            return AjaxResult.error(e.getMessage());
        }
@@ -340,6 +453,437 @@
        ExcelUtil<DocumentMaterialFileSmallVo> util = new ExcelUtil<>(DocumentMaterialFileSmallVo.class);
        util.exportExcel(response,list,"档案详细信息导入模板");
    }
    public  boolean getLicense() {
        boolean result = false;
        try {
            InputStream is = null;
    //导出material
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            org.springframework.core.io.Resource[] resources = resolver.getResources("classpath:words.xml");
            is = resources[0].getInputStream();
            // ��Ŀ��lincense.xml��·��
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    //导出备考表
    @PostMapping("/exportBack/{id}/{recordId}")
    public void exportBackInfo(HttpServletResponse response, @PathVariable Long id, @PathVariable String recordId)
    {
        //09-备考表.pdf
        String pdf09Path = "09-备考表.pdf";
        //根据项目名称拿到公司名称和项目负责人
        String compName = "广州盈家档案管理有限公司";
        String li_person = "仇翀";
        String sh_person = "曾瑞莹";
        ArchiveRecords archiveRecords = iArchiveRecordsService.selectArchiveRecordsById(id);
        if(!StringUtils.isEmpty(archiveRecords.getLiPerson()))
            li_person = archiveRecords.getLiPerson();
        String note_remark = "";
        if(!StringUtils.isEmpty(archiveRecords.getNoteRemark()))
            note_remark = ","+archiveRecords.getNoteRemark();
        System.out.println(note_remark+"{{{{");
        ArchiveProjectName tmp = new ArchiveProjectName();
        tmp.setName(archiveRecords.getProjectName());
        List<ArchiveProjectName> projectName = iArchiveProjectNameService.selectArchiveProjectNameList(tmp);
        if(!projectName.isEmpty())
        {
            System.out.println(projectName.get(0).getCompanyName());
            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();
            System.out.println(compName+"--+"+sh_person);
        }
        System.out.println(compName+"--+"+sh_person);
        //  pdfGenerateService.generateFileStyleInfo(pdf09Path, aIV.getRecordId(), id);
        //拿到相关数据
        List<DocumentMaterialFileStyle> dmfs = documentMaterialsService.findFileStyleInfo(Math.toIntExact(id));
        LocalDate currentDate = LocalDate.now();
        String cdt = currentDate.getYear()+"年"+currentDate.getMonthValue()+"月"+currentDate.getDayOfMonth()+"日";
        HashMap<String, Object> hs = new HashMap<String, Object>();
        int allPages = 0;
        int texPages = 0;
        int picPages = 0;
        int patPages = 0;
        if(!dmfs.isEmpty())
        {
            for(DocumentMaterialFileStyle documentMaterialFileStyle:dmfs)
            {
                if(documentMaterialFileStyle.getFileStyle()!=null&&documentMaterialFileStyle.getFileStyle().equals("文字材料"))
                    texPages = documentMaterialFileStyle.getCnt();
                if(documentMaterialFileStyle.getFileStyle()!=null&&documentMaterialFileStyle.getFileStyle().equals("图样材料"))
                    patPages = documentMaterialFileStyle.getCnt();
                if(documentMaterialFileStyle.getFileStyle()!=null&&documentMaterialFileStyle.getFileStyle().equals("照片材料"))
                    picPages = documentMaterialFileStyle.getCnt();
            }
        }
        allPages = texPages + picPages + patPages;
        hs.put("pages", allPages);
        hs.put("patPages", patPages);
        hs.put("picPages", picPages);
        hs.put("texPages", texPages);
        hs.put("volumeNumber", recordId);
        hs.put("company", compName);
        hs.put("liPerson", li_person);
        hs.put("shPerson", sh_person);
        hs.put("noteRemark", note_remark);
        hs.put("time", cdt);
        if (!getLicense()) {
            System.out.println("没有相关证书!");
        }
        try {
            // 获取 Word 模板所在路径
//            String filepath = "09-备考表.docx";
//            // 通过 XWPFTemplate 编译文件并渲染数据到模板中
//            XWPFTemplate template = XWPFTemplate.compile(filepath).render(hs
//            );
            // 获取 Word 模板所在路径
            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);
            try {
                // 将完成数据渲染的文档写出
                template.writeAndClose(new FileOutputStream(renderedFile));
            } catch (IOException e) {
                e.printStackTrace();
            }
            com.aspose.words.Document doc = new com.aspose.words.Document("rendered_output.docx");
            // 创建临时字节输出流
            ByteArrayOutputStream baobk = new ByteArrayOutputStream();
            // 将Word文档转换为PDF字节数组
            doc.save(response.getOutputStream(), com.aspose.words.SaveFormat.PDF);//ȫ��֧��DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF �໥ת��
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //导出卷内目录
    @PostMapping("/exportJuan/{id}")
    public void exportJuanInfo(HttpServletResponse response, @PathVariable Long id) throws IOException {
        ArchiveRecords archiveRecords = iArchiveRecordsService.selectArchiveRecordsById(id);
        List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(id.toString(), archiveRecords.getPageCount());
        //拿到卷内目录的excel
        List<DocumentMaterialsVoSmall> list2 = dsvs.stream().map(res1 -> new DocumentMaterialsVoSmall(res1.getNum(), res1.getDocumentNumber(),res1.getCreator(),
                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);
            ExcelExp e1 = new ExcelExp("卷内目录数据", dsvs, DocumentMaterialsVo.class);
            ExcelExp e2 = new ExcelExp("卷内数据", list2, recordId, imgr, DocumentMaterialsVoSmall.class);
            List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
            mysheet.add(e1);
            mysheet.add(e2);
            ExcelUtilManySheet<List<ExcelExp>> util2 = new ExcelUtilManySheet<List<ExcelExp>>(mysheet);
          //  ZipEntry entr = new ZipEntry(fna + adir + "/" + "卷内目录" + ".xls");
            // ExcelUtil<DocumentMaterialsVo> util1 = new ExcelUtil<DocumentMaterialsVo>(DocumentMaterialsVo.class);
         //   System.out.println(dsvs);
         //  zos.putNextEntry(entr);
            ByteOutputStream bos8 = new ByteOutputStream();
            util2.exportExcelManySheet(bos8, mysheet);
            bos8.writeTo( response.getOutputStream());
        }
    }
    //导出案卷封面
    @PostMapping("/exportPageInfo/{id}/{recordId}")
    public void exportPageInfo(HttpServletResponse response, @PathVariable Long id, @PathVariable String recordId) throws IOException, ParseException {
        ArchiveInfoVo aIV = iArchiveRecordsService.selectByRecordId(id);
        List<ArchiveInfoVo> arsi = new ArrayList<>();
        arsi.add(aIV);
        String recordId1 = recordId;
        if(aIV!=null)
        {
            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 tmp = "档号:" +
                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();
        byte[] imgr1 = barcodeService.generateBarcodeImage(recordId1);
        byte[] sedcode = pdfGenerateService.createQrCodeN(tmp, 210, 210);
        ExcelExp e3 = new ExcelExp("案卷封面数据",arsi, ArchiveInfoVo.class);
        ExcelExp e4 = new ExcelExp("案卷封面",  arsi, recordId1, imgr1,sedcode, ArchiveInfoVo.class);
        List<ExcelExp> mysheet1 = new ArrayList<ExcelExp>();
        mysheet1.add(e3);
        mysheet1.add(e4);
        ByteOutputStream bos2 = new ByteOutputStream();
        ExcelUtilManySheetSecond<List<ExcelExp>> util3 = new ExcelUtilManySheetSecond<List<ExcelExp>>(mysheet1);
        util3.exportExcelManySheet(bos2, mysheet1);
        //  System.out.println(bos2);
        bos2.writeTo(response.getOutputStream());
        }
    }
    @PreAuthorize("@ss.hasPermi('system:materials:list')")
    @GetMapping("/getFileCounts/{recordId}")
    public AjaxResult getFileCounts(@PathVariable("recordId") Integer recordId) throws IOException {
        //上传的时候判断最多只能上传多少个
        // 上传文件路径
        String filePath = RuoYiConfig.getUploadPath();
        AjaxResult ajax = AjaxResult.success();
        String path = filePath + File.separator + recordId;
        File desc = new File(filePath + File.separator + recordId);
        System.out.println("44444444444444456666666666666666");
        if (!desc.exists())
        {
            ajax.put("length", 0);
//                ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
//                ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
//                ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
            return ajax;
        }
        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
                    ));
            System.out.println(fileMap);
            ajax.put("length", fileMap.size());
//                ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
//                ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
//                ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
            return ajax;
        }
    }
    @PostMapping("/uploads/{recordId}")
    public AjaxResult uploadFiles(MultipartFile file, @PathVariable Long recordId) throws Exception {
        try {
            //上传的时候判断最多只能上传多少个
            // 上传文件路径
            String filePath = RuoYiConfig.getUploadPath();
            String path = filePath + File.separator + recordId;
            File desc = new File(filePath + File.separator + recordId);
            System.out.println("44444444444444456666666666666666");
            if (!desc.exists())
            {
                System.out.println("4444444444444445688888666666666666666");
                System.out.println(desc.getParentFile().exists());
                if (!desc.exists())
                {
                    desc.mkdirs();
                }
            }
            String fileName = FileUploadUtils.uploadImg(filePath + File.separator + recordId, file);
            List<String> urls = new ArrayList<>();
            List<String> fileNames = new ArrayList<>();
            List<String> newFileNames = new ArrayList<>();
            List<String> originalFilenames = new ArrayList<>();
            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
                        ));
                System.out.println(fileMap);
                AjaxResult ajax = AjaxResult.success();
                ajax.put("length", file.getSize());
//                ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
//                ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
//                ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
                return ajax;
            }
                //读取
            //
//
//            // 批量处理文件上传
//            for (MultipartFile file : files) {
//                // 根据文件名称,然后修改对应数据的url
//                String fname = file.getOriginalFilename();
//                if (StringUtils.isBlank(fname)) {
//                    continue;
//                }
//
//                // 上传并返回新文件名称
//                String fileName = FileUploadUtils.upload(filePath, file);
//                String url = serverConfig.getUrl() + fileName;
//
//                // 分割文件名
//                String[] nams = fname.split("\\.");
//                if (nams.length < 2) {
//                    continue;
//                }
//
//                Long nam = Long.parseLong(nams[0]);
//
//                // 根据页号拿到案卷的详细信息
//                DocumentMaterials doc = documentMaterialsService.selectByPageNumber(nam, Math.toIntExact(recordId));
//                if (doc != null) {
//                    if (doc.getSecurityLevel() != null && (doc.getSecurityLevel().equals("该页另存")||
//                            doc.getSecurityLevel().equals("秘密")||doc.getSecurityLevel().equals("内部用途")||
//                            doc.getSecurityLevel().equals("内部用图"))) {
//                        // 替换为了准备好的图像
//                        String fp = filePath + "\\glc.jpg";
//                        Path path = Paths.get(fp);
//                        // 拿到图像属性
//                        BufferedImage bufferedImage = ImageIO.read(Files.newInputStream(path));
//                        int wid = bufferedImage.getWidth();
//                        int hei = bufferedImage.getHeight();
//                        double sz = Double.parseDouble(String.format("%.2f", Files.size(path) * 1.0 / 1024));
//
//                        // 拿到图像的dpi信息
//                        ImageInfo info = Imaging.getImageInfo(Files.readAllBytes(path));
//                        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 Font("Arial", Font.BOLD, 80));
//                        g2d.setColor(Color.black);
//                        String pageNumber = doc.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 os = new ByteArrayOutputStream();
//                        ImageIO.write(bufferedImage, "jpg", os);
//                        InputStream input = new ByteArrayInputStream(os.toByteArray());
//                        multipartFile = new MockMultipartFile(pageNumber, pageNumber + ".jpg", "text/plain", input);
//
//                        // 上传并返回新文件名称
//                        String fileName1 = FileUploadUtils.upload(filePath, multipartFile);
//
//                        // 更新数据库
//                        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];
//
//                        // 拿到图像属性
//                        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);
//                    }
//                }
//            }
        } catch (Exception e) {
            log.error("批量上传文件失败", e);
            return AjaxResult.error(e.getMessage());
        }
    }
}