package com.sandu.ximon.admin.service; import com.alibaba.fastjson.JSON; 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.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 { private final IpVolumeFileMapper ipVolumeFileMapper; private final ClientService clientService; private MinIoUtil minIoUtil; public boolean addFile(IpVolumeFileParam fileParam) { IpVolumeFile file = new IpVolumeFile(); file.setUserName(SecurityUtils.getUsername()); file.setUserId(SecurityUtils.getClientId()); file.setClientId(clientService.getClientId()); file.setFileName(fileParam.getFileName()); 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 List ipVolumeFileList(BaseConditionVO baseConditionVO, String keyword, Integer order, Integer seq) { LambdaQueryWrapper 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; PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize(), orderBy); List list = list(wrapper); return list; } public List listFiles() { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(IpVolumeFile.class); //不是超管 if (SecurityUtils.getClientId() != null) { wrapper = wrapper.eq(IpVolumeFile::getClientId, SecurityUtils.getUserId()) .or(file -> { file.eq(IpVolumeFile::getUserId, SecurityUtils.getUserId()); }); } 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; } }