package com.fjhx.service.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.UUID; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fjhx.base.BaseEntity; import com.fjhx.entity.FileInfo; import com.fjhx.mapper.FileInfoMapper; import com.fjhx.service.FileInfoService; import org.springblade.core.launch.BladeApplication; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.tool.utils.DateUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.*; import java.util.stream.Collectors; /** *

* 文件 服务实现类 *

* * @author ${author} * @since 2022-07-07 */ @Service public class FileInfoServiceImpl extends ServiceImpl implements FileInfoService { @Value("${spring.application.name}") public String applicationName; @Override public Map uploadFile(MultipartFile file) { String fileName = file.getOriginalFilename(); String suffix = FileUtil.getSuffix(fileName); String path = getFilePath(); String filePath = path + UUID.randomUUID() + "." + suffix; FileUtil.mkdir(path); FileOutputStream fileOutputStream = null; InputStream inputStream = null; try { inputStream = file.getInputStream(); fileOutputStream = new FileOutputStream(filePath); int index; byte[] bytes = new byte[1024]; while ((index = inputStream.read(bytes)) != -1) { fileOutputStream.write(bytes, 0, index); fileOutputStream.flush(); } } catch (IOException e) { e.printStackTrace(); throw new ServiceException("上传文件失败"); } finally { try { if (fileOutputStream != null) { fileOutputStream.close(); } if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } FileInfo fileInfo = new FileInfo(); fileInfo.setFileName(fileName); fileInfo.setFileSuffix(suffix); fileInfo.setContentType(file.getContentType()); fileInfo.setFileSize(file.getSize()); fileInfo.setFilePath(filePath); save(fileInfo); Map map = new HashMap<>(); map.put("fileName", fileName); map.put("filePath", filePath); map.put("id", fileInfo.getId().toString()); return map; } @Override public void addFile(Long businessId, Integer businessType, List fileInfoList) { if (fileInfoList.size() == 0) { return; } fileInfoList.forEach(item -> { item.setBusinessId(businessId); item.setBusinessType(businessType); }); updateBatchById(fileInfoList); } @Override public void updateFile(Long businessId, Integer businessType, List fileInfoList) { List excludeIdList = new ArrayList<>(); List collect = fileInfoList.stream().filter(fileInfo -> { if (ObjectUtil.isNotEmpty(fileInfo.getBusinessId())) { excludeIdList.add(fileInfo.getId()); return false; } fileInfo.setId(businessId); fileInfo.setBusinessType(businessType); return true; }).collect(Collectors.toList()); remove(Wrappers.lambdaQuery() .eq(FileInfo::getBusinessId, businessId) .eq(FileInfo::getBusinessType, businessType) .notIn(excludeIdList.size() > 0, BaseEntity::getId, collect)); if (collect.size() > 0) { saveBatch(collect); } } @Override public void deleteFile(Long businessId) { remove(FileInfo::getBusinessId, businessId); } private String getFilePath() { StringJoiner joiner = new StringJoiner("/"); boolean localDev = BladeApplication.isLocalDev(); if (localDev) { joiner.add("D:/hx"); } else { joiner.add("/mnt/file"); } joiner.add(applicationName).add(DateUtil.format(new Date(), "yyyy-MM/dd/")); return joiner.toString(); } }