package com.sandu.ximon.admin.service; import cn.hutool.core.lang.Snowflake; 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.file.impl.AliOssFileServiceImpl; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.param.AllUserInfoParam; import com.sandu.ximon.admin.param.EditFileParam; import com.sandu.ximon.admin.param.PlatformFilePermissionParam; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.dao.bo.PlatformFileListBo; import com.sandu.ximon.dao.domain.Admin; import com.sandu.ximon.dao.domain.Client; import com.sandu.ximon.dao.domain.PlatformFile; import com.sandu.ximon.dao.domain.PlatformFileUser; import com.sandu.ximon.dao.enums.AdministratorEnums; import com.sandu.ximon.dao.mapper.PlatformFileMapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @author LiuHaoNan * @date 2022/9/14 */ @Slf4j @Service @AllArgsConstructor public class PlatformFileService extends BaseServiceImpl { private final AliOssFileServiceImpl aliOssFileService; private final PlatformFileUserService platformFileUserService; private final AdminService adminService; private final ClientService clientService; private final Snowflake snowflake; /** * 文件上传 * * @param file * @return */ public boolean addProgramFile(MultipartFile file) { PermissionToCheck(); FileUploadDto fileUploadDto = aliOssFileService.uploadFile(file); PlatformFile platformFile = new PlatformFile(); platformFile.setFileId(snowflake.nextId()); platformFile.setFileName(fileUploadDto.getOriginName()); platformFile.setFileSize(fileUploadDto.getFileSize()); platformFile.setFileUrl(fileUploadDto.getFileUrl()); log.error("超管进行文件上传[ 文件名:" + fileUploadDto.getFileName() + ", 文件大小: " + fileUploadDto.getFileSize() + ", url: " + fileUploadDto.getFileUrl() + "]"); return save(platformFile); } /** * 修改文件名称 * * @param param * @return */ public boolean updateFileName(EditFileParam param) { PermissionToCheck(); if (param.getFileId() == null || param.getFileName().isEmpty()) { throw new BusinessException("编辑时参数不能为空!"); } PlatformFile byId = getById(param.getFileId()); if (byId == null) { throw new BusinessException("未找到文件!"); } byId.setFileName(param.getFileName()); return updateById(byId); } /** * 删除文件 * * @param param * @return */ public boolean deleteFile(EditFileParam param) { PermissionToCheck(); if (param.getFileIds() == null || param.getFileIds().size() == 0) { throw new BusinessException("删除时参数不能为空!"); } List platformFiles = listByIds(param.getFileIds()); if (platformFiles == null || platformFiles.size() == 0) { throw new BusinessException("未找到文件!"); } //获取关系 List list = platformFileUserService.list(Wrappers.lambdaQuery(PlatformFileUser.class).in(PlatformFileUser::getFileId, param.getFileIds())); if (!list.isEmpty()) { //删除关系 platformFileUserService.remove(Wrappers.lambdaQuery(PlatformFileUser.class).in(PlatformFileUser::getFileId, param.getFileIds())); } //删除文件 return removeByIds(param.getFileIds()); } /** * 平台文件资源列表 * * @param vo * @param keyword * @return */ public List fileList(BaseConditionVO vo, String keyword) { List platformFileListBos; if (AdministratorEnums.ADMIN.getCode().equals(SecurityUtils.getUserDetails().getAdministratorType())) { PageHelper.startPage(vo.getPageNo(), vo.getPageSize()); platformFileListBos = baseMapper.fileList(keyword, null); } else { List platformFileUsers = SpringContextHolder.getBean(PlatformFileUserService.class) .list(Wrappers.lambdaQuery(PlatformFileUser.class).eq(PlatformFileUser::getUserId, SecurityUtils.getUserId())); List fileIdList = platformFileUsers.stream().map(PlatformFileUser::getFileId).collect(Collectors.toList()); if (fileIdList.size() == 0) { fileIdList.add(-1L); } PageHelper.startPage(vo.getPageNo(), vo.getPageSize()); platformFileListBos = baseMapper.fileList(keyword, fileIdList); } return platformFileListBos; } /** * 下载文件 * * @param fileId * @return */ public String downFile(Long fileId) { if (!AdministratorEnums.ADMIN.getCode().equals(SecurityUtils.getUserDetails().getAdministratorType())) { PlatformFileUser one = platformFileUserService.getOne(Wrappers.lambdaQuery(PlatformFileUser.class) .eq(PlatformFileUser::getUserId, SecurityUtils.getUserId()).eq(PlatformFileUser::getFileId, fileId)); if (one == null) { throw new BusinessException("抱歉,你无权下载 !"); } } PlatformFile byId = getById(fileId); return byId.getFileUrl(); } /** * 设置文件浏览权限 * * @param platformFilePermissionParam * @return */ public String setPermission(PlatformFilePermissionParam platformFilePermissionParam) { PermissionToCheck(); //删除旧关系 platformFileUserService.remove(Wrappers.lambdaQuery(PlatformFileUser.class) .eq(PlatformFileUser::getFileId, platformFilePermissionParam.getFileId())); //添加新关系 List list = new ArrayList<>(); PlatformFileUser bean; for (Long userId : platformFilePermissionParam.getUserIdList()) { bean = new PlatformFileUser(); bean.setFileId(platformFilePermissionParam.getFileId()); bean.setUserId(userId); list.add(bean); } if (platformFileUserService.saveBatch(list)) { return "关系存储成功!"; } else { throw new BusinessException("关系存储失败!"); } } /** * 返回所有用户 * * @return */ public List allUserList() { PermissionToCheck(); List adminList = adminService.list(Wrappers.lambdaQuery(Admin.class).ne(Admin::getId, SecurityUtils.getUserId())); List clientList = clientService.list(); List list = new ArrayList<>(); AllUserInfoParam allUserInfoParam; for (Admin admin : adminList) { allUserInfoParam = new AllUserInfoParam(); allUserInfoParam.setId(admin.getId()); allUserInfoParam.setName(admin.getUsername()); allUserInfoParam.setType("管理员"); list.add(allUserInfoParam); } for (Client client : clientList) { allUserInfoParam = new AllUserInfoParam(); allUserInfoParam.setId(client.getId()); allUserInfoParam.setName(client.getClientName()); allUserInfoParam.setType("普通用户"); list.add(allUserInfoParam); } return list; } public List permissionInfo(Long fileId) { PermissionToCheck(); List list = platformFileUserService.list(Wrappers.lambdaQuery(PlatformFileUser.class).eq(PlatformFileUser::getFileId, fileId)); List userIds = list.stream().map(PlatformFileUser::getUserId).collect(Collectors.toList()); List admins = adminService.list(Wrappers.lambdaQuery(Admin.class).in(Admin::getId, userIds)); List clients = clientService.list(Wrappers.lambdaQuery(Client.class).in(Client::getId, userIds)); List infoList = new ArrayList<>(); AllUserInfoParam allUserInfoParam; for (Admin admin : admins) { allUserInfoParam = new AllUserInfoParam(); allUserInfoParam.setId(admin.getId()); allUserInfoParam.setName(admin.getUsername()); allUserInfoParam.setType("管理员"); infoList.add(allUserInfoParam); } for (Client client : clients) { allUserInfoParam = new AllUserInfoParam(); allUserInfoParam.setId(client.getId()); allUserInfoParam.setName(client.getClientName()); allUserInfoParam.setType("普通用户"); infoList.add(allUserInfoParam); } return infoList; } /** * 权限超管校验 */ private void PermissionToCheck() { if (!AdministratorEnums.ADMIN.getCode().equals(SecurityUtils.getUserDetails().getAdministratorType())) { //非超管 throw new BusinessException("非超管不能操作"); } } }