DgFileServiceImpl.java 5.54 KB
package com.pashanhoo.file.service.impl;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pashanhoo.common.util.fileupload.MinioConfig;
import com.pashanhoo.common.util.fileupload.MinioUtil;
import com.pashanhoo.file.entity.DgFileConverter;
import com.pashanhoo.file.entity.DgFileDO;
import com.pashanhoo.file.entity.vo.*;
import com.pashanhoo.file.mapper.DgFileMapper;
import com.pashanhoo.file.service.DgFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;


import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 档案文件信息 服务实现类
 * </p>
 *
 * @author
 * @since 2021-11-05
 */
@Service
public class DgFileServiceImpl extends ServiceImpl<DgFileMapper, DgFileDO> implements DgFileService {

    @Autowired
    private DgFileConverter dgfileConverter;

    @Autowired
    private DgFileMapper dgfileMapper;

    @Autowired
    MinioUtil minioUtil;

    @Autowired
    MinioConfig minioConfig;

    /**
     * 新增记录
     * @param request
     * @return
     */
    @Override
    public boolean insertDgFile(List<AddDgFileRequest> request) {
        List<DgFileDO> dgFileDOS = dgfileConverter.voList2ListDO(request);
        return this.saveBatch(dgFileDOS);
    }

    /**
     * 根据主键查询记录详情
     * @param id
     * @return
     */
    @Override
    public DgFileDetailVO getDgFileDetailById(String id) {
        DgFileDO dgfileDO = this.getById(id);
        DgFileDetailVO dgFileDetailVO = dgfileConverter.do2DetailVO(dgfileDO);
        String previewUrl = minioUtil.getPreviewUrl(dgFileDetailVO.getFjurl());
        dgFileDetailVO.setFjurl(previewUrl);
        return dgFileDetailVO;
    }

    /**
     * 修改单条记录
     * @param request
     * @return
     */
    @Override
    public boolean updateDgFile(UpdateDgFileRequest request) {
        DgFileDO dgfileDO = dgfileConverter.updateRequest2DO(request);
        return this.updateById(dgfileDO);
    }

    /**
     * 获取附件列表
     * @param bsmArchive
     * @return
     */
    @Override
    public List<DgCatalogWithFileVO> getFileList(String bsmArchive) {
        List<DgCatalogWithFileVO> fileList = dgfileMapper.getFileList(bsmArchive);
        fileList.forEach(item->item.getFileLists().forEach(file->file.setSaveUrl(file.getFjurl())));
        fileList.forEach(catalogWithFiles->catalogWithFiles.getFileLists().forEach(file->file.setFjurl(minioUtil.getPreviewUrl(file.getFjurl()))));
        return fileList;
    }

    /**
     * 修改文件排序
     *
     * @param requests
     * @return
     */
    @Override
    public boolean updateFileSort(List<UpdateDgFileRequest> requests) {
        List<DgFileDO> fileList = dgfileConverter.updateList2DOList(requests);
        return this.updateBatchById(fileList);
    }

    /**
     * 批量删除档案文件信息
     * @param bsmFileList
     * @return
     */
    @Override
    public boolean deleteFile(List<String> bsmFileList) throws Exception {

        //删除minio文件
        List<DgFileDO> fileDOList = dgfileMapper.getFilesById(bsmFileList);
        List<String> urls = fileDOList.stream().map(DgFileDO::getFjurl).collect(Collectors.toList());
        for (String url : urls) {
            minioUtil.removeObject(minioConfig.getBucket(), url);
        }

        //删除数据库记录
        return this.removeByIds(bsmFileList);
    }

    /**
     * 上传材料附件.材料附件信息入库
     *
     * @param uploadFile
     * @param fileRequest
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public List<DgCatalogWithFileVO> upload(MultipartFile uploadFile, AddDgFileRequest fileRequest) throws Exception {
        //文件上传
        FileAttribute fileAttribute = minioUtil.upload(uploadFile);

        Integer firstXh = fileRequest.getXh();
        //如果序号不为空
        if (!StrUtil.isEmptyIfStr(firstXh)) {
            String firstBsmCatalog = fileRequest.getBsmCatalog();
            QueryWrapper<DgFileDO> fileWrapper = new QueryWrapper<>();

            //重新排序
            fileWrapper.lambda().eq(DgFileDO::getBsmCatalog, firstBsmCatalog).ge(DgFileDO::getXh, firstXh + 1);
            List<DgFileDO> list = this.list(fileWrapper);
            list.forEach(item -> item.setXh(item.getXh() + 1));
            this.updateBatchById(list);
        }

        //文件信息入库
        DgFileDO fileDO = new DgFileDO();
        fileDO.setBsmCatalog(fileRequest.getBsmCatalog());
        fileDO.setFjurl(fileAttribute.getSaveUrl());
        fileDO.setFjsize(fileAttribute.getFileSize());
        fileDO.setKzm(fileAttribute.getExpandName());
        fileDO.setScrq(DateTime.now());
        fileDO.setScr(null);
        if (StrUtil.isEmptyIfStr(firstXh)) {
            fileDO.setXh(1);
        }else {
            fileDO.setXh(firstXh + 1);
        }
        this.save(fileDO);

        List<DgCatalogWithFileVO> fileList = dgfileMapper.getFileList(fileRequest.getBsmArchive());
        if (fileList.size() > 0) {
            fileList.forEach(item->item.getFileLists().forEach(file->file.setSaveUrl(file.getFjurl())));
            fileList.forEach(catalogWithFiles->catalogWithFiles.getFileLists().forEach(file->file.setFjurl(minioUtil.getPreviewUrl(file.getFjurl()))));
        }

        return fileList;
    }


}