2021与蓝度共同重构项目,服务端
liuhaonan
2022-10-25 d495f9b8cdc83663e4189bc3cc72ac9543ff5555
ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeFileService.java
@@ -1,55 +1,208 @@
package com.sandu.ximon.admin.service;
import com.alibaba.fastjson.JSON;
import com.alipay.service.schema.util.StringUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.file.FileUploadDto;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.minio.BroadcastFileUtils;
import com.sandu.ximon.admin.minio.entity.FileSuffix;
import com.sandu.ximon.admin.minio.entity.MinIoConstant;
import com.sandu.ximon.admin.minio.utils.MinIoUtil;
import com.sandu.ximon.admin.param.IpVolumeFileParam;
import com.sandu.ximon.admin.param.ReceiveParam;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
import com.sandu.ximon.dao.domain.IpVolumeFile;
import com.sandu.ximon.dao.enums.OrderByEnums;
import com.sandu.ximon.dao.mapper.IpVolumeFileMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
 * @Author liuhaonan
 * @Date 2021/12/16 10:48
 * @Version 1.0
 */
@Service
@AllArgsConstructor
public class IpVolumeFileService extends BaseServiceImpl<IpVolumeFileMapper, IpVolumeFile> {
    private final IpVolumeFileMapper ipVolumeFileMapper;
    private final ClientService clientService;
    private MinIoUtil minIoUtil;
    public boolean addFile(IpVolumeFileParam fileParam) {
        IpVolumeFile file = new IpVolumeFile();
        file.setUserId(SecurityUtils.getClientId());
        file.setUserName(SecurityUtils.getUsername());
        file.setUserId(SecurityUtils.getClientId());
        file.setClientId(clientService.getClientId());
        file.setFileName(fileParam.getFileName());
        file.setFileSize(fileParam.getFileSize());
        file.setFileBase64(fileParam.getFileBase64());
        file.setFileUrl(fileParam.getFileUrl());
        file.setOriginSize(fileParam.getOriginSize());
        /**
         * 音柱文件新增 日志记录开始
         */
        String content = "音柱文件名称:" + fileParam.getFileName() + ",文件大小:" + fileParam.getOriginSize() + ",文件路径:" + fileParam.getFileUrl();
        StoreOperationRecordsUtils.storeOperationData(null, null, "音柱文件新增", content);
        /**
         * 音柱文件新增 日志记录结束
         */
        return save(file);
    }
    public boolean deleteFile(Long fileId) {
        IpVolumeFile byId = getById(fileId);
        String bucketName;
        if (SecurityUtils.getClientId() == null) {
            bucketName = MinIoConstant.ADMIN_BROADCAST_FILE.getBucketName();
        } else {
            bucketName = MinIoConstant.BROADCAST_FILE.getBucketName() + SecurityUtils.getUserId();
        }
        if (byId == null) {
            throw new BusinessException("找不到对应文件");
        }
        boolean b = minIoUtil.deleteFile(bucketName, byId.getFileName());
//        if (!b) {
//            throw new BusinessException("服务器删除失败");
//        }
        /**
         * 音柱文件删除 日志记录开始
         */
        String content = "删除文件id:" + fileId + "音柱文件名称:" + byId.getFileName() + ",文件大小:" + byId.getOriginSize() + ",文件路径:" + byId.getFileUrl();
        StoreOperationRecordsUtils.storeOperationData(null, null, "音柱文件删除", content);
        /**
         * 音柱文件删除 日志记录结束
         */
        return removeById(fileId);
    }
    public LambdaQueryWrapper<IpVolumeFile> listFile(ReceiveParam receiveParam) {
        LambdaQueryWrapper<IpVolumeFile> wrapper = Wrappers.lambdaQuery(IpVolumeFile.class).eq(IpVolumeFile::getClientId, clientService.getClientId());
        if (receiveParam.getKeyWord() == null) {
            return wrapper;
        } else {
          return   wrapper.like(IpVolumeFile::getFileName,receiveParam.getKeyWord());
    public List<IpVolumeFile> ipVolumeFileList(BaseConditionVO baseConditionVO, String keyword, Integer order, Integer seq) {
        LambdaQueryWrapper<IpVolumeFile> wrapper = Wrappers.lambdaQuery(IpVolumeFile.class);
        //不是超管
        if (SecurityUtils.getClientId() != null) {
            wrapper = wrapper.eq(IpVolumeFile::getClientId, SecurityUtils.getUserId())
                    .or(file -> {
                        file.eq(IpVolumeFile::getUserId, SecurityUtils.getUserId());
                    });
        }
        if (keyword != null && !keyword.isEmpty()) {
            wrapper.like(IpVolumeFile::getFileName, keyword);
        }
        //排序字段
        String orderByResult = "id";
        //正序、倒叙
        String orderBySeq = OrderByEnums.ASC.getCode();
        if (order != null) {
            switch (order) {
                case 1:
                    orderByResult = OrderByEnums.IP_VOLUME_FILE_CREATE_TIME.getCode();
                    break;
                default:
            }
        }
        if (seq != null) {
            switch (seq) {
                case 1:
                    orderBySeq = OrderByEnums.ASC.getCode();
                    break;
                case 2:
                    orderBySeq = OrderByEnums.DESC.getCode();
                    break;
                default:
                    break;
            }
        }
        //排序方式
        String orderBy = orderByResult + " " + orderBySeq;
        if (baseConditionVO != null) {
            PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize(), orderBy);
        }
        List<IpVolumeFile> list = list(wrapper);
        return list;
    }
    public List<IpVolumeFile> listFiles(String keyword) {
        LambdaQueryWrapper<IpVolumeFile> wrapper = Wrappers.lambdaQuery(IpVolumeFile.class);
        //不是超管
        if (SecurityUtils.getClientId() != null) {
            wrapper = wrapper.eq(IpVolumeFile::getClientId, SecurityUtils.getUserId())
                    .or(file -> {
                        file.eq(IpVolumeFile::getUserId, SecurityUtils.getUserId());
                    });
        }
        if (keyword != null && !StringUtil.isEmpty(keyword)) {
            wrapper.like(IpVolumeFile::getFileName, keyword);
        }
        return list(wrapper);
    }
    /**
     * 文件上传
     *
     * @param file
     * @param
     * @return
     */
    public FileUploadDto upload(MultipartFile file) {
        log.error("音柱文件上传:(filename:" + file.getOriginalFilename() + "),(size: " + file.getSize() + "),用户id:" + SecurityUtils.getUserId());
        //  校验是否为mp3文件
        if (!BroadcastFileUtils.isMp3File(file.getOriginalFilename(), FileSuffix.MP3)) {
            log.error("音柱文件上传:(上传失败, 非MP3文件) (filename:" + file.getOriginalFilename() + "),(size: " + file.getSize() + "),用户id:" + SecurityUtils.getUserId());
            throw new BusinessException("上传失败, 非MP3文件");
        }
        //  判断该文件是否存在
        String bucketName;
        if (SecurityUtils.getClientId() == null) {
            bucketName = MinIoConstant.ADMIN_BROADCAST_FILE.getBucketName();
        } else {
            bucketName = MinIoConstant.BROADCAST_FILE.getBucketName() + SecurityUtils.getUserId();
        }
        if (minIoUtil.objectExists(bucketName, file.getOriginalFilename())) {
            log.error("音柱文件上传:(上传失败, 同名文件已存在) (filename:" + file.getOriginalFilename() + "),(size: " + file.getSize() + "),用户id:" + SecurityUtils.getUserId());
            throw new BusinessException("上传失败, 同名文件已存在");
        }
        String upload = minIoUtil.upload(bucketName, file);
        if (null == upload) {
            log.error("音柱文件上传:(上传失败, 文件服务器出错) (filename:" + file.getOriginalFilename() + "),(size: " + file.getSize() + "),用户id:" + SecurityUtils.getUserId());
            throw new BusinessException("上传失败, 文件服务器出错");
        }
        FileUploadDto fileUploadDto = new FileUploadDto();
        fileUploadDto.setFileUrl(upload);
        fileUploadDto.setFileSize(file.getSize());
        fileUploadDto.setFileName(file.getOriginalFilename());
        fileUploadDto.setFileType(file.getContentType());
        /**
         * 音柱文件上传 日志记录开始
         */
        String content = "文件内容:" + JSON.toJSONString(fileUploadDto);
        StoreOperationRecordsUtils.storeOperationData(null, null, "音柱文件上传", content);
        /**
         * 音柱文件上传 日志记录结束
         */
        return fileUploadDto;
    }
}