package com.fzzy.igds.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fzzy.igds.domain.FileInfo; import com.fzzy.igds.mapper.FileMapper; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.config.FrameworkConfig; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.ruoyi.common.utils.StringUtils; import javax.annotation.Resource; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.List; /** * @Description * @Author CZT * @Date 2025/12/4 17:36 */ @Service public class FileService { @Resource private FileMapper fileMapper; /** * 异步执行附件保存 * @param files 附件信息 * @param bizId 业务id * @param bizTag 标签 * @param pathTag 文件路径标识 */ @Async public void saveInoutFiles(List files, String bizId, String bizTag, String pathTag) { if (null == files || files.isEmpty()) { return; } for (FileInfo data : files) { // 如果没有附件名称,则不保存附件信息 if (StringUtils.isBlank(data.getFileName())) { continue; } data.setId(ContextUtil.generateId()); data.setCompanyId(ContextUtil.getCompanyId()); //文件全路径 String filePath = getFileSavePath(pathTag) + data.getFileName(); filePath = filePath.replace(FrameworkConfig.getProfile(), "/profile/"); data.setFilePath(filePath); if (StringUtils.isNotEmpty(bizId)) { data.setBizId(bizId); } if (StringUtils.isNotEmpty(bizTag)) { data.setBizTag(bizTag); } data.setCreateTime(new Date()); data.setCreateBy(ContextUtil.getLoginUserName()); data.setUpdateTime(new Date()); data.setUpdateBy(ContextUtil.getLoginUserName()); fileMapper.insert(data); } } /** * 根据条件查询数据 * @param companyId * @param deptId * @param bizId * @return */ public List listFile(String companyId, String deptId, String bizId, String bizTag) { QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(companyId)) { queryWrapper.eq("company_id", companyId); } if (StringUtils.isNotBlank(deptId)) { queryWrapper.eq("dept_id", deptId); } if (StringUtils.isNotBlank(bizId)) { queryWrapper.eq("biz_id", bizId); } if (StringUtils.isNotBlank(bizTag)) { queryWrapper.eq("biz_tag", bizTag); } return fileMapper.selectList(queryWrapper); } /** * * @param id */ public void delFile(String id) { fileMapper.deleteById(id); } /** * 获取出入库文件路径 * @param pathTag * @return */ public String getFileSavePath(String pathTag) { if(StringUtils.isBlank(pathTag)){ pathTag = "COMMON"; } if("INOUT".equals(pathTag)) return getInoutFilePath(); if("PATROL".equals(pathTag)) return getPatrolFilePath(); if("DEPT".equals(pathTag)) return getDeptFilePath(); return getCommonFilePath(); } /** * 获取出入库文件路径 * @return */ public String getPatrolFilePath() { String basePath = FrameworkConfig.getProfile() + "INOUT/" + DateFormatUtils.format(new Date(), "yyyyMM") + "/"; File file = new File(basePath); if (!file.exists()) { file.mkdirs(); } return basePath; } /** * 获取出入库文件路径 * @return */ public String getInoutFilePath() { String basePath = FrameworkConfig.getProfile() + "INOUT/" + DateFormatUtils.format(new Date(), "yyyyMM") + "/"; File file = new File(basePath); if (!file.exists()) { file.mkdirs(); } return basePath; } /** * 获取库区路径下文件 * @return */ public String getDeptFilePath() { String basePath = FrameworkConfig.getProfile() + "IMG/"+ FrameworkConfig.getCompanyId() + "/SECURITY/"; File file = new File(basePath); if (!file.exists()) { file.mkdirs(); } return basePath; } /** * 获取公共路径 * @return */ public String getCommonFilePath() { String basePath = FrameworkConfig.getProfile() + "COMMON/" + DateFormatUtils.format(new Date(), "yyyyMM") + "/"; File file = new File(basePath); if (!file.exists()) { file.mkdirs(); } return basePath; } /** * 压缩图片 * * @param filePath 压缩前路径 * @param scale 压缩比例 * @param outputPath 压缩后路径 * @throws IOException */ public void compressedImage(String filePath, double scale, String outputPath) throws IOException { BufferedImage bufferedImage = ImageIO.read(new File(filePath)); int newWidth = (int) (bufferedImage.getWidth() * scale); int newHeight = (int) (bufferedImage.getHeight() * scale); //创建压缩后的图片 BufferedImage compressedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); Graphics2D graphics2D = compressedImage.createGraphics(); //绘制原始图片到压缩后的图片上 graphics2D.drawImage(bufferedImage, 0, 0, newWidth, newHeight, null); graphics2D.dispose(); ImageIO.write(compressedImage, "jpg", new File(outputPath)); } }