fei
7 天以前 ee98daf76231cb373d20803dfa1a309fefd82644
ruoyi-admin/src/main/java/com/ruoyi/web/controller/archive/DocumentMaterialsController.java
@@ -2,9 +2,14 @@
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.*;
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.util.List;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
@@ -18,13 +23,16 @@
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.domain.ArchiveCategory;
import com.ruoyi.domain.ArchiveRecords;
import com.ruoyi.domain.DocumentMaterials;
import com.ruoyi.domain.vo.DocumentMaterialFileSmallVo;
import com.ruoyi.framework.config.ServerConfig;
import com.ruoyi.framework.web.domain.server.Sys;
import com.ruoyi.service.IDocumentMaterialsService;
import com.sun.xml.internal.ws.api.addressing.WSEndpointReference;
import org.apache.commons.imaging.ImageInfo;
import org.apache.commons.imaging.Imaging;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -41,7 +49,7 @@
import static com.ruoyi.common.core.page.TableSupport.PAGE_SIZE;
/**
 * 【请填写功能名称】Controller
 * 【文件材料综合信息】Controller
 *
 * @author ruoyi
 * @date 2025-07-28
@@ -56,34 +64,68 @@
    @Autowired
    private IDocumentMaterialsService documentMaterialsService;
    /**
     * 查询【请填写功能名称】列表
     * 判断PageNumber是否连续
     */
    @PreAuthorize("@ss.hasPermi('system:materials:list')")
    @GetMapping("/isPageNubLegal/{recordId}")
    public AjaxResult judgePageLegal(@PathVariable("recordId") Integer recordId)
    {
        boolean res = documentMaterialsService.isPageNumberIslegal(recordId);
        int cnt = documentMaterialsService.getFileCount(recordId);
        HashMap<String, Object> data = new HashMap<>();
        data.put("res",res);
        data.put("total",cnt);
        return AjaxResult.success(data);
    }
    /**
     * 拿到除了其它类型材料的个数
     */
    @PreAuthorize("@ss.hasPermi('system:materials:list')")
    @GetMapping("/getFileCount/{recordId}")
    public AjaxResult getFileCount(@PathVariable("recordId") Integer recordId)
    {
        int cnt = documentMaterialsService.getFileCount(recordId);
        return AjaxResult.success(cnt);
    }
    /**
     * 查询【文件材料综合信息】列表
     */
    @PreAuthorize("@ss.hasPermi('system:materials:list')")
    @GetMapping("/list")
    public AjaxResult list(DocumentMaterials documentMaterials)
    {
        Integer pageNum = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1);
        Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10);
        return documentMaterialsService.selectDataList(documentMaterials, pageNum, pageSize);
    }
    /**
     * 导出【请填写功能名称】列表
     * 导出【文件材料综合信息】列表
     */
    @PreAuthorize("@ss.hasPermi('system:materials:export')")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
    @Log(title = "【文件材料综合信息】", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, DocumentMaterials documentMaterials)
    public void export(HttpServletResponse response, DocumentMaterials documentMaterials, @RequestParam(value = "ids", required = false) Long[] ids)
    {
        List<DocumentMaterials> list = documentMaterialsService.selectDocumentMaterialsList(documentMaterials);
        List<DocumentMaterials> list;
        System.out.println(ids);
        // 如果提供了ids参数,则根据ids导出指定记录
        if (ids != null && ids.length > 0) {
            list = documentMaterialsService.selectDocumentMaterialsByIds(ids);
        } else {
            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:query')")
    @GetMapping(value = "/{materialId}")
@@ -93,10 +135,10 @@
    }
    /**
     * 新增【请填写功能名称】
     * 新增【文件材料综合信息】
     */
    @PreAuthorize("@ss.hasPermi('system:materials:add')")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
    @Log(title = "【文件材料综合信息】", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody DocumentMaterials documentMaterials)
    {
@@ -106,12 +148,12 @@
    }
    /**
     * 修改【请填写功能名称】
     * 修改【文件材料综合信息】
     *
     * system:materials:edit
     */
    @PreAuthorize("@ss.hasPermi('system:materials:edit')")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
    @Log(title = "【文件材料综合信息】", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody DocumentMaterials documentMaterials)
    {
@@ -119,10 +161,10 @@
    }
    /**
     * 删除【请填写功能名称】
     * 删除【文件材料综合信息】
     */
    @PreAuthorize("@ss.hasPermi('system:materials:remove')")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
    @Log(title = "【文件材料综合信息】", businessType = BusinessType.DELETE)
    @DeleteMapping("/{materialIds}")
    public AjaxResult remove(@PathVariable String[] materialIds)
    {
@@ -143,8 +185,8 @@
            return "A0";
    }
    @PostMapping("/upload")
    public AjaxResult uploadFile(MultipartFile file) throws Exception
    @PostMapping("/upload/{recordId}")
    public AjaxResult uploadFile(MultipartFile file, @PathVariable Long recordId) throws Exception
    {
        // System.out.println("sdfd9999999999999999999999999999999");
        try
@@ -163,30 +205,112 @@
            //分割文件名
            String [] nams = fname.split("\\.");
            Long nam = Long.parseLong(nams[0]);
            //文件名称
            String pname = nams[1];
            ajax.put("url", url);
            //拿到图像属性
            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));
            System.out.println(wid+":"+hei+":"+sz);
            //拿到图像的dpi信息
            //根据页号拿到案卷的详细信息
            System.out.println("0-------------");
            System.out.println(recordId);
            DocumentMaterials doc = documentMaterialsService.selectByPageNumber(nam, Math.toIntExact(recordId));
            if(doc==null)
                return AjaxResult.error("无对应页号,请检查清楚附件以及对应的输入!");
            else{
                if(doc.getSecurityLevel().equals("该页另存"))
                {
            ImageInfo info = Imaging.getImageInfo(file.getBytes());
                    //替换为了准备好的图像
                    //读取服务器上的图像
                 //   new InputStream();
                    String fp = filePath + "\\glc.jpg";
                    Path path = Paths.get(fp);
                    File fil = new File(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));
                    System.out.println("ddsdsdsd");
                    System.out.println(wid+":"+hei+":"+sz);
                    //拿到图像的dpi信息
                    ImageInfo info = Imaging.getImageInfo(Files.readAllBytes(path));
            int wdpi = info.getPhysicalWidthDpi() ;
            int hdpi = info.getPhysicalHeightDpi();
            System.out.println("DPI: " + info.getPhysicalWidthDpi());
            //计算fileNumber
            Long fileNumber = documentMaterialsService.getFiNum(nam);
            //计算sizeType
            String sizeType = getPageSize(wid*hei);
            //插入数据库对应的url当中
            documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber,wid, hei,wdpi, hdpi,  sz, fileName, pname);
//            System.out.println(url);
                    int wdpi = info.getPhysicalWidthDpi() ;
                    int hdpi = info.getPhysicalHeightDpi();
                    System.out.println("DPI: " + info.getPhysicalWidthDpi());
                    //计算fileNumber
                    Long fileNumber = documentMaterialsService.getFiNum(nam,recordId);
                    //计算sizeType
                    String sizeType = getPageSize(wid*hei);
                    Graphics2D g2d = bufferedImage.createGraphics(); // 获取Graphics2D对象用于绘制
                    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; // 计算文本X坐标位置,确保在右下角附近
                    int y = bufferedImage.getHeight() - fontHeight / 2 - 100; // 计算文本Y坐标位置,垂直居中显示文本
                    g2d.drawString(pageNumber, x, y); // 在图片上绘制页码文本
                    System.out.println(pageNumber+"[[[[[[[[[[[[[[[");
                    g2d.dispose(); // 释放Graphics2D资源
//                    File outputFile = new File(filePath+"/output_image.jpg"); // 输出文件路径
//                    ImageIO.write(bufferedImage, "jpg", outputFile); // 保
                    //得到BufferedImage对象
                    MultipartFile multipartFile = null;
                    try {
                        //创建一个ByteArrayOutputStream
                        ByteArrayOutputStream os = new ByteArrayOutputStream();
                        //把BufferedImage写入ByteArrayOutputStream
                        ImageIO.write(bufferedImage, "jpg", os);
                        //ByteArrayOutputStream转成InputStream
                        InputStream input = new ByteArrayInputStream(os.toByteArray());
                        //InputStream转成MultipartFile
                        multipartFile = new MockMultipartFile(pageNumber, pageNumber+".jpg", "text/plain", input);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    // 上传并返回新文件名称
                    String fileName1 = FileUploadUtils.upload(filePath, multipartFile);
                    String url1 = serverConfig.getUrl() + fileName;
                    String us = "/profile/upload/0071.jpg";
                    documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber,wid, hei,wdpi, hdpi,  sz, fileName1, "jpg", recordId);
                }
                else
                {
                    //文件名称
                    String pname = nams[1];
                    ajax.put("url", url);
                    //拿到图像属性
                    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));
                    System.out.println(wid+":"+hei+":"+sz);
                    //拿到图像的dpi信息
                    ImageInfo info = Imaging.getImageInfo(file.getBytes());
                    int wdpi = info.getPhysicalWidthDpi() ;
                    int hdpi = info.getPhysicalHeightDpi();
                    System.out.println("DPI: " + info.getPhysicalWidthDpi());
                    //计算fileNumber
                    Long fileNumber = documentMaterialsService.getFiNum(nam, recordId);
                    //计算sizeType
                    String sizeType = getPageSize(wid*hei);
                    //插入数据库对应的url当中
                    documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber,wid, hei,wdpi, hdpi,  sz, fileName, pname, recordId);
//
                }
            }
           System.out.println(url);
//            System.out.println(fileName);
            ajax.put("fileName", fileName);
//            System.out.println(FileUtils.getName(fileName));
@@ -216,4 +340,6 @@
        ExcelUtil<DocumentMaterialFileSmallVo> util = new ExcelUtil<>(DocumentMaterialFileSmallVo.class);
        util.exportExcel(response,list,"档案详细信息导入模板");
    }
    //导出material
}