/* * Copyright 2019-2020 Zheng Jie * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package me.zhengjie.service.impl; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import me.zhengjie.config.FileProperties; import me.zhengjie.domain.LocalStorage; import me.zhengjie.service.dto.LocalStorageDto; import me.zhengjie.service.dto.LocalStorageQueryCriteria; import me.zhengjie.service.mapstruct.LocalStorageMapper; import me.zhengjie.exception.BadRequestException; import me.zhengjie.utils.*; import me.zhengjie.repository.LocalStorageRepository; import me.zhengjie.service.LocalStorageService; import org.springframework.beans.factory.annotation.Value; 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 Zheng Jie * @date 2019-09-05 */ @Service @RequiredArgsConstructor public class LocalStorageServiceImpl implements LocalStorageService { @Value("${localUrl}") private String localUrl; private final LocalStorageRepository localStorageRepository; private final LocalStorageMapper localStorageMapper; private final FileProperties properties; @Override public Object queryAll(LocalStorageQueryCriteria criteria, Pageable pageable){ Page page = localStorageRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); return PageUtil.toPage(page.map(localStorageMapper::toDto)); } @Override public List 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() + File.separator); if(ObjectUtil.isNull(file)){ throw new BadRequestException("上传失败"); } String url = localUrl + file.getName(); try { name = StringUtils.isBlank(name) ? FileUtil.getFileNameNoEx(multipartFile.getOriginalFilename()) : name; LocalStorage localStorage = new LocalStorage( file.getName(), name, suffix, file.getPath(), url, type, FileUtil.getSize(multipartFile.getSize()) ); 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 queryAll, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); for (LocalStorageDto localStorageDTO : queryAll) { Map 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); } }