content: 
  package com.platform.service.impl;
  
  import cn.hutool.core.util.ObjectUtil;
  import lombok.RequiredArgsConstructor;
  import com.platform.config.FileProperties;
  import com.platform.domain.LocalStorage;
  import com.platform.service.dto.LocalStorageDto;
  import com.platform.service.dto.LocalStorageQueryCriteria;
  import com.platform.service.mapstruct.LocalStorageMapper;
  import com.platform.exception.BadRequestException;
  import com.platform.utils.*;
  import com.platform.repository.LocalStorageRepository;
  import com.platform.service.LocalStorageService;
  import org.springframework.stereotype.Service;
  import org.springframework.transaction.annotation.Transactional;
  import java.io.File;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.LinkedHashMap;
  import java.util.List;
  import java.util.Map;
  import org.springframework.data.domain.Page;
  import org.springframework.data.domain.Pageable;
  import org.springframework.web.multipart.MultipartFile;
  import javax.servlet.http.HttpServletResponse;
  
  /**
  * @author AllDataDC
  * @date 2023-01-27
  */
  @Service
  @RequiredArgsConstructor
  public class LocalStorageServiceImpl implements LocalStorageService {
  
      private final LocalStorageRepository localStorageRepository;
      private final LocalStorageMapper localStorageMapper;
      private final FileProperties properties;
  
      @Override
      public Object queryAll(LocalStorageQueryCriteria criteria, Pageable pageable){
          Page<LocalStorage> page = localStorageRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
          return PageUtil.toPage(page.map(localStorageMapper::toDto));
      }
  
      @Override
      public List<LocalStorageDto> queryAll(LocalStorageQueryCriteria criteria){
          return localStorageMapper.toDto(localStorageRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
      }
  
      @Override
      public LocalStorageDto findById(Long id){
          LocalStorage localStorage = localStorageRepository.findById(id).orElseGet(LocalStorage::new);
          ValidationUtil.isNull(localStorage.getId(),"LocalStorage","id",id);
          return localStorageMapper.toDto(localStorage);
      }
  
      @Override
      @Transactional(rollbackFor = Exception.class)
      public LocalStorage create(String name, MultipartFile multipartFile) {
          FileUtil.checkSize(properties.getMaxSize(), multipartFile.getSize());
          String suffix = FileUtil.getExtensionName(multipartFile.getOriginalFilename());
          String type = FileUtil.getFileType(suffix);
          File file = FileUtil.upload(multipartFile, properties.getPath().getPath() + type +  File.separator);
          if(ObjectUtil.isNull(file)){
              throw new BadRequestException("上传失败");
          }
          try {
              name = StringUtils.isBlank(name) ? FileUtil.getFileNameNoEx(multipartFile.getOriginalFilename()) : name;
              LocalStorage localStorage = new LocalStorage(
                      file.getName(),
                      name,
                      suffix,
                      file.getPath(),
                      type,
                      FileUtil.getSize(file.length())
              );
              return localStorageRepository.save(localStorage);
          }catch (Exception e){
              FileUtil.del(file);
              throw e;
          }
      }
  
      @Override
      @Transactional(rollbackFor = Exception.class)
      public void update(LocalStorage resources) {
          LocalStorage localStorage = localStorageRepository.findById(resources.getId()).orElseGet(LocalStorage::new);
          ValidationUtil.isNull( localStorage.getId(),"LocalStorage","id",resources.getId());
          localStorage.copy(resources);
          localStorageRepository.save(localStorage);
      }
  
      @Override
      @Transactional(rollbackFor = Exception.class)
      public void deleteAll(Long[] ids) {
          for (Long id : ids) {
              LocalStorage storage = localStorageRepository.findById(id).orElseGet(LocalStorage::new);
              FileUtil.del(storage.getPath());
              localStorageRepository.delete(storage);
          }
      }
  
      @Override
      public void download(List<LocalStorageDto> queryAll, HttpServletResponse response) throws IOException {
          List<Map<String, Object>> list = new ArrayList<>();
          for (LocalStorageDto localStorageDTO : queryAll) {
              Map<String,Object> map = new LinkedHashMap<>();
              map.put("文件名", localStorageDTO.getRealName());
              map.put("备注名", localStorageDTO.getName());
              map.put("文件类型", localStorageDTO.getType());
              map.put("文件大小", localStorageDTO.getSize());
              map.put("创建者", localStorageDTO.getCreateBy());
              map.put("创建日期", localStorageDTO.getCreateTime());
              list.add(map);
          }
          FileUtil.downloadExcel(list, response);
      }
  }
  