package com.ruoyi.web.controller.archive;
|
|
|
|
import java.awt.*;
|
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.util.Collections;
|
import java.util.List;
|
import javax.imageio.ImageIO;
|
import javax.servlet.http.HttpServletResponse;
|
|
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.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.*;
|
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.enums.BusinessType;
|
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import static com.ruoyi.common.core.page.TableSupport.PAGE_NUM;
|
import static com.ruoyi.common.core.page.TableSupport.PAGE_SIZE;
|
|
/**
|
* 【文件材料综合信息】Controller
|
*
|
* @author ruoyi
|
* @date 2025-07-28
|
*/
|
@RestController
|
@RequestMapping("/system/materials")
|
public class DocumentMaterialsController extends BaseController
|
{
|
@Autowired
|
private ServerConfig serverConfig;
|
|
@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);
|
return AjaxResult.success(res);
|
}
|
/**
|
* 查询【文件材料综合信息】列表
|
*/
|
@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)
|
@PostMapping("/export")
|
public void export(HttpServletResponse response, DocumentMaterials documentMaterials, @RequestParam(value = "ids", required = false) Long[] ids)
|
{
|
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, "【文件材料综合信息】数据");
|
}
|
|
/**
|
* 获取【文件材料综合信息】详细信息
|
*/
|
@PreAuthorize("@ss.hasPermi('system:materials:query')")
|
@GetMapping(value = "/{materialId}")
|
public AjaxResult getInfo(@PathVariable("materialId") String materialId)
|
{
|
return success(documentMaterialsService.selectDocumentMaterialsByMaterialId(materialId));
|
}
|
|
/**
|
* 新增【文件材料综合信息】
|
*/
|
@PreAuthorize("@ss.hasPermi('system:materials:add')")
|
@Log(title = "【文件材料综合信息】", businessType = BusinessType.INSERT)
|
@PostMapping
|
public AjaxResult add(@RequestBody DocumentMaterials documentMaterials)
|
{
|
int res = documentMaterialsService.insertDocumentMaterials(documentMaterials);
|
System.out.println(res+"][[[[[[[[[[[[[[[[[[");
|
return toAjax(res);
|
}
|
|
/**
|
* 修改【文件材料综合信息】
|
*
|
* system:materials:edit
|
*/
|
@PreAuthorize("@ss.hasPermi('system:materials:edit')")
|
@Log(title = "【文件材料综合信息】", businessType = BusinessType.UPDATE)
|
@PutMapping
|
public AjaxResult edit(@RequestBody DocumentMaterials documentMaterials)
|
{
|
return toAjax(documentMaterialsService.updateDocumentMaterials(documentMaterials));
|
}
|
|
/**
|
* 删除【文件材料综合信息】
|
*/
|
@PreAuthorize("@ss.hasPermi('system:materials:remove')")
|
@Log(title = "【文件材料综合信息】", businessType = BusinessType.DELETE)
|
@DeleteMapping("/{materialIds}")
|
public AjaxResult remove(@PathVariable String[] materialIds)
|
{
|
return toAjax(documentMaterialsService.deleteDocumentMaterialsByMaterialIds(materialIds));
|
}
|
|
public String getPageSize(double du)
|
{
|
if(du <= 8699840)
|
return "A4";
|
else if(du <= 17403188)
|
return "A3";
|
else if(du <= 34811347)
|
return "A2";
|
else if(du <= 69622674)
|
return "A1";
|
else
|
return "A0";
|
}
|
|
@PostMapping("/upload/{recordId}")
|
public AjaxResult uploadFile(MultipartFile file, @PathVariable Long recordId) throws Exception
|
{
|
// System.out.println("sdfd9999999999999999999999999999999");
|
try
|
{
|
//根据文件名称,然后修改对应数据的url
|
String fname = file.getOriginalFilename();
|
|
// System.out.println(fname);
|
// 上传文件路径
|
String filePath = RuoYiConfig.getUploadPath();
|
// System.out.println(filePath);
|
// 上传并返回新文件名称
|
String fileName = FileUploadUtils.upload(filePath, file);
|
String url = serverConfig.getUrl() + fileName;
|
AjaxResult ajax = AjaxResult.success();
|
//分割文件名
|
String [] nams = fname.split("\\.");
|
Long nam = Long.parseLong(nams[0]);
|
//根据页号拿到案卷的详细信息
|
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("该页另存"))
|
{
|
|
//替换为了准备好的图像
|
//读取服务器上的图像
|
// 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,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));
|
ajax.put("newFileName", FileUtils.getName(fileName));
|
ajax.put("originalFilename", file.getOriginalFilename());
|
return ajax;
|
}
|
catch (Exception e)
|
{
|
System.out.println(e);
|
return AjaxResult.error(e.getMessage());
|
}
|
}
|
|
|
@Log(title = "档案详细信息记录导入", businessType = BusinessType.IMPORT)
|
@PostMapping("/importData")
|
public AjaxResult importData(@RequestParam("file") MultipartFile file, @RequestParam("recordId")String recordId) throws Exception
|
{
|
System.out.println(file);
|
return documentMaterialsService.importExcel(file, recordId);
|
}
|
|
@PostMapping("/model")
|
public void getExportModel(HttpServletResponse response){
|
List<DocumentMaterialFileSmallVo> list = Collections.singletonList(new DocumentMaterialFileSmallVo());
|
ExcelUtil<DocumentMaterialFileSmallVo> util = new ExcelUtil<>(DocumentMaterialFileSmallVo.class);
|
util.exportExcel(response,list,"档案详细信息导入模板");
|
}
|
|
//导出material
|
}
|