This commit is contained in:
haozq 2025-10-29 09:57:14 +08:00
parent 7054784661
commit e99f62f985
24 changed files with 945 additions and 318 deletions

View File

@ -65,7 +65,6 @@ public class SysLoginController
String token; String token;
String permissions; //权限字符 String permissions; //权限字符
String username= Sm4Utils.decrypt(loginBody.getUsername()); // 解密 String username= Sm4Utils.decrypt(loginBody.getUsername()); // 解密
AjaxResult ajax = AjaxResult.success(); AjaxResult ajax = AjaxResult.success();
if("2".equals(loginBody.getLoginType())){ if("2".equals(loginBody.getLoginType())){
token = loginService.login(loginBody.getUsername(), loginBody.getCode()); token = loginService.login(loginBody.getUsername(), loginBody.getCode());
@ -102,6 +101,7 @@ public class SysLoginController
tokenService.refreshToken(loginUser); tokenService.refreshToken(loginUser);
} }
AjaxResult ajax = AjaxResult.success(); AjaxResult ajax = AjaxResult.success();
user.setPassword("");
ajax.put("user", user); ajax.put("user", user);
ajax.put("roles", roles); ajax.put("roles", roles);
ajax.put("permissions", permissions); ajax.put("permissions", permissions);

View File

@ -120,7 +120,7 @@ pagehelper:
# Swagger配置 # Swagger配置
swagger: swagger:
# 是否开启swagger # 是否开启swagger
enabled: true enabled: false
# 请求前缀 # 请求前缀
pathMapping: /dev-api pathMapping: /dev-api
@ -140,3 +140,12 @@ minio:
accessKey: minio accessKey: minio
secretKey: bonus@admin123 secretKey: bonus@admin123
bucketName: product bucketName: product
management:
server:
port: -1 # 禁用独立管理端口(与业务端口共用)
endpoints:
enabled-by-default: false # 全局禁用所有端点(默认值为 true
endpoint:
# 即使全局禁用后,若需单独启用某个端点,可在此配置(当前需求为关闭全部,故无需配置)
# 例如health:
# enabled: true # 单独启用健康检查端点(此处不需要)

View File

@ -53,7 +53,7 @@ public class DocumentController extends BaseController {
/** /**
* 新增文件夹 * 修改文件夹
* @param vo * @param vo
* @return * @return
*/ */

View File

@ -0,0 +1,57 @@
package com.bonus.business.controller;
import com.bonus.business.domain.DocumentTreeVo;
import com.bonus.business.domain.TbDocumentFolder;
import com.bonus.business.domain.TbUserFiles;
import com.bonus.business.service.DocumentScreenService;
import com.bonus.common.core.controller.BaseController;
import com.bonus.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* 文档中心管理
*/
@RestController
@RequestMapping("/screen/document/")
public class DocumentScreenController extends BaseController {
@Autowired
private DocumentScreenService service;
/**
* 查询文档树
* @param vo
* @return
*/
@PostMapping("/getDocumentTree")
public AjaxResult getDocumentTree(DocumentTreeVo vo) {
return service.getDocumentTree(vo);
}
/**
* 新增文档
* @param vo
* @return
*/
@PostMapping("/addDocument")
public AjaxResult addDocument(TbDocumentFolder vo) {
return service.addDocument(vo);
}
/**
* 新增文档
* @param vo
* @return
*/
@PostMapping("/importFile")
public AjaxResult importFile(@RequestParam(value = "files",required = false) MultipartFile[] file, TbUserFiles vo) {
return service.importFile(file,vo);
}
}

View File

@ -35,6 +35,8 @@ public class DownloadController {
@Resource @Resource
private MinioClient minioClient; private MinioClient minioClient;
/** /**
* 下载文件 根据文件名 * 下载文件 根据文件名
* @param filePath * @param filePath

View File

@ -1,61 +0,0 @@
//package com.bonus.business.controller;
//
//import org.bytedeco.javacv.FFmpegFrameGrabber;
//import org.bytedeco.javacv.FFmpegFrameRecorder;
//import org.bytedeco.javacv.Frame;
//
//public class VideoToMp4Converter {
//
// /**
// * 将视频文件转换为MP4格式
// * @param inputPath 输入视频文件路径
// * @param outputPath 输出MP4文件路径
// * @throws Exception 转换过程中的异常
// */
// public static void convertToMp4(String inputPath, String outputPath) throws Exception {
// // 创建FFmpegFrameGrabber对象读取输入视频
// FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputPath);
// grabber.start();
//
// // 创建FFmpegFrameRecorder对象设置输出视频参数
// FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputPath,
// grabber.getImageWidth(),
// grabber.getImageHeight());
//
// // 设置视频编码为H.264
// recorder.setVideoCodec(org.bytedeco.ffmpeg.global.avcodec.AV_CODEC_ID_H264);
// // 设置输出格式为MP4
// recorder.setFormat("mp4");
// // 设置帧率与原视频保持一致
// recorder.setFrameRate(grabber.getFrameRate());
// // 设置音频通道数
// recorder.setAudioChannels(grabber.getAudioChannels());
// // 设置音频编码
// recorder.setAudioCodec(org.bytedeco.ffmpeg.global.avcodec.AV_CODEC_ID_AAC);
//
// recorder.start();
//
// // 循环读取视频帧并进行录制
// Frame frame;
// while ((frame = grabber.grabFrame()) != null) {
// recorder.record(frame);
// }
//
// // 关闭抓取器和录制器
// recorder.stop();
// grabber.stop();
//
// System.out.println("视频转换完成!输出文件:" + outputPath);
// }
//
// // 测试方法
// public static void main(String[] args) {
// try {
// String inputVideo = "input_video.flv"; // 输入视频文件可以是任何格式
// String outputMp4 = "output_video.mp4"; // 输出MP4文件
// convertToMp4(inputVideo, outputMp4);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
//}

View File

@ -0,0 +1,47 @@
package com.bonus.business.domain;
import lombok.Data;
import java.util.List;
@Data
public class DocumentTreeVo {
/**
* 主键
*/
private String id;
/**
* 上级节点id
*/
private String parentId;
/**
* 上级节点ids
*/
private String parentIds;
/**
* 名称
*/
private String name;
/**
* 类型
*/
private String type;
/**
* 用户id
*/
private String userId;
/**
* 是否是管理员
*/
private String isAdmin;
/**
* 权限
*/
private String auth;
/**
*子集合
*/
private List<DocumentTreeVo> childTree;
}

View File

@ -64,6 +64,10 @@ public class TbDocumentFolder extends BaseEntity
* 备注 * 备注
*/ */
private String remark; private String remark;
private String type;
private String userId;
/** /**
* 权限集合 * 权限集合
*/ */

View File

@ -4,6 +4,7 @@ import java.util.Date;
import com.bonus.common.core.domain.BaseEntity; import com.bonus.common.core.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
import com.bonus.common.annotation.Excel; import com.bonus.common.annotation.Excel;
@ -14,16 +15,17 @@ import com.bonus.common.annotation.Excel;
* @author 黑子 * @author 黑子
* @date 2025-09-10 * @date 2025-09-10
*/ */
@Data
public class TbUserFiles extends BaseEntity public class TbUserFiles extends BaseEntity
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** 主键 */ /** 主键 */
private Long id; private String id;
/** 文件夹id */ /** 文件夹id */
@Excel(name = "文件夹id") @Excel(name = "文件夹id")
private Long folderId; private String folderId;
/** 源文件名称 */ /** 源文件名称 */
@Excel(name = "源文件名称") @Excel(name = "源文件名称")
@ -55,181 +57,49 @@ public class TbUserFiles extends BaseEntity
/** 上传时间 */ /** 上传时间 */
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "上传时间", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "上传时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date uploadTime; private String uploadTime;
/** 上传人 */ /** 上传人 */
@Excel(name = "上传人") @Excel(name = "上传人")
private Long uploadUser; private String uploadUser;
/** 下载次数 */ /** 下载次数 */
@Excel(name = "下载次数") @Excel(name = "下载次数")
private Long downTimes; private int downTimes;
/** 预览次数 */ /** 预览次数 */
@Excel(name = "预览次数") @Excel(name = "预览次数")
private Long seeTimes; private int seeTimes;
/** 文档标签 */ /** 文档标签 */
@Excel(name = "文档标签") @Excel(name = "文档标签")
private String labels; private String labels;
public void setId(Long id) /**
{ * 桶名称
this.id = id; */
} private String bucketName;
/**
* 创建人
*/
private String createUser;
/**
* 数据类型
*/
private String type;
/**
* 文件夹副节点集合
*/
private String parentIds;
/**
* 标签数据id
*/
private String labelIds;
/**
* 重复的是否跳过 1跳过 2 覆盖
*/
private String repeatType;
public Long getId()
{
return id;
}
public void setFolderId(Long folderId)
{
this.folderId = folderId;
}
public Long getFolderId()
{
return folderId;
}
public void setOriginalName(String originalName)
{
this.originalName = originalName;
}
public String getOriginalName()
{
return originalName;
}
public void setFileSuffix(String fileSuffix)
{
this.fileSuffix = fileSuffix;
}
public String getFileSuffix()
{
return fileSuffix;
}
public void setFileSize(String fileSize)
{
this.fileSize = fileSize;
}
public String getFileSize()
{
return fileSize;
}
public void setFilePath(String filePath)
{
this.filePath = filePath;
}
public String getFilePath()
{
return filePath;
}
public void setFileName(String fileName)
{
this.fileName = fileName;
}
public String getFileName()
{
return fileName;
}
public void setFileUrl(String fileUrl)
{
this.fileUrl = fileUrl;
}
public String getFileUrl()
{
return fileUrl;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getDelFlag()
{
return delFlag;
}
public void setUploadTime(Date uploadTime)
{
this.uploadTime = uploadTime;
}
public Date getUploadTime()
{
return uploadTime;
}
public void setUploadUser(Long uploadUser)
{
this.uploadUser = uploadUser;
}
public Long getUploadUser()
{
return uploadUser;
}
public void setDownTimes(Long downTimes)
{
this.downTimes = downTimes;
}
public Long getDownTimes()
{
return downTimes;
}
public void setSeeTimes(Long seeTimes)
{
this.seeTimes = seeTimes;
}
public Long getSeeTimes()
{
return seeTimes;
}
public void setLabels(String labels)
{
this.labels = labels;
}
public String getLabels()
{
return labels;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("folderId", getFolderId())
.append("originalName", getOriginalName())
.append("fileSuffix", getFileSuffix())
.append("fileSize", getFileSize())
.append("filePath", getFilePath())
.append("fileName", getFileName())
.append("fileUrl", getFileUrl())
.append("delFlag", getDelFlag())
.append("uploadTime", getUploadTime())
.append("uploadUser", getUploadUser())
.append("downTimes", getDownTimes())
.append("seeTimes", getSeeTimes())
.append("labels", getLabels())
.toString();
}
} }

View File

@ -0,0 +1,31 @@
package com.bonus.business.domain;
import com.bonus.common.core.domain.BaseEntity;
import lombok.Data;
import com.bonus.common.annotation.Excel;
import lombok.EqualsAndHashCode;
/**
* 个人文档标签记录对象 tb_user_lable
*
* @author 黑子
* @date 2025-09-10
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class TbUserLabel extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 文件id */
private String fileId;
/** 标签id */
private String labelId;
/** 标签名称 */
@Excel(name = "标签名称")
private String labelName;
}

View File

@ -1,66 +0,0 @@
package com.bonus.business.domain;
import com.bonus.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.bonus.common.annotation.Excel;
/**
* 个人文档标签记录对象 tb_user_lable
*
* @author 黑子
* @date 2025-09-10
*/
public class TbUserLable extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 文件id */
private Long fileId;
/** 标签id */
private Long lableId;
/** 标签名称 */
@Excel(name = "标签名称")
private String lableName;
public void setFileId(Long fileId)
{
this.fileId = fileId;
}
public Long getFileId()
{
return fileId;
}
public void setLableId(Long lableId)
{
this.lableId = lableId;
}
public Long getLableId()
{
return lableId;
}
public void setLableName(String lableName)
{
this.lableName = lableName;
}
public String getLableName()
{
return lableName;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("fileId", getFileId())
.append("lableId", getLableId())
.append("lableName", getLableName())
.toString();
}
}

View File

@ -0,0 +1,77 @@
package com.bonus.business.domain;
import java.util.ArrayList;
import java.util.List;
/**
* BuildTree 构建树形结构
*/
public class TreeBuild {
// 保存参与构建树形的所有数据通常数据库查询结果
public List<DocumentTreeVo> nodeList = new ArrayList<>();
/**
* 构造方法
* @param nodeList 将数据集合赋值给nodeList即所有数据作为所有节点
*/
public TreeBuild(List<DocumentTreeVo> nodeList){
this.nodeList = nodeList;
}
/**
* 获取需构建的所有根节点顶级节点 "0"
* @return 所有根节点List集合
*/
public List<DocumentTreeVo> getRootNode(String parentId){
// 保存所有根节点所有根节点的数据
List<DocumentTreeVo> rootNodeList = new ArrayList<>();
// treeNode查询出的每一条数据节点
for (DocumentTreeVo treeNode : nodeList){
// 判断当前节点是否为根节点此处注意若parentId类型是String则要采用equals()方法判断
if (parentId.equals(treeNode.getParentId()) ) {
// 添加
rootNodeList.add(treeNode);
}
}
return rootNodeList;
}
/**
* 根据每一个顶级节点根节点进行构建树形结构
* @return 构建整棵树
*/
public List<DocumentTreeVo> buildTree(String parentId){
// treeNodes保存一个顶级节点所构建出来的完整树形
List<DocumentTreeVo> treeNodes = new ArrayList<DocumentTreeVo>();
// getRootNode()获取所有的根节点
for (DocumentTreeVo treeRootNode : getRootNode(parentId)) {
// 将顶级节点进行构建子树
treeRootNode = buildChildTree(treeRootNode);
// 完成一个顶级节点所构建的树形增加进来
treeNodes.add(treeRootNode);
}
return treeNodes;
}
/**
* 递归-----构建子树形结构
* @param pNode 根节点顶级节点
* @return 整棵树
*/
public DocumentTreeVo buildChildTree(DocumentTreeVo pNode){
List<DocumentTreeVo> childTree = new ArrayList<DocumentTreeVo>();
// nodeList所有节点集合所有数据
for (DocumentTreeVo treeNode : nodeList) {
// 判断当前节点的父节点ID是否等于根节点的ID即当前节点为其下的子节点
if (treeNode.getParentId().equals(pNode.getId())) {
// 再递归进行判断当前节点的情况调用自身方法
childTree.add(buildChildTree(treeNode));
}
}
// for循环结束即节点下没有任何节点树形构建结束设置树结果
pNode.setChildTree(childTree);
return pNode;
}
}

View File

@ -0,0 +1,109 @@
package com.bonus.business.mapper;
import com.bonus.business.domain.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;
import java.util.List;
@Mapper
public interface DocumentScreenMapper {
/**
* 查询文档库数据
* @param vo
* @return
*/
List<DocumentTreeVo> getCompanyChildList(DocumentTreeVo vo);
/**
* 查询每个人自己的文档数据
* @param vo
* @return
*/
List<DocumentTreeVo> getMyChildList(DocumentTreeVo vo);
/**
* 查询其他人共享给我的
* @param vo
* @return
*/
List<DocumentTreeVo> getOtherShare(DocumentTreeVo vo);
/**
* 查询我分享出去的文档
* @param vo
* @return
*/
List<DocumentTreeVo> getMyShareList(DocumentTreeVo vo);
/**
* 查询全部数据
* @param vo
* @return
*/
List<DocumentTreeVo> getDocumentList(DocumentTreeVo vo);
/**
* 新增公司文档
* @param vo
*/
Integer addDocumentCompany(TbDocumentFolder vo);
/**
* 新增文件夹权限数据
* @param auth
*/
void addDocumentAuth(TbDocumentFolderAuth auth);
/**
* 新增个人文档文件夹
* @param vo
*/
void addDocumentUser(TbDocumentFolder vo);
/**
* 插入图片-个人
* @param productCaseImage
*/
void insertUserFile(TbUserFiles productCaseImage);
/**
* 插入文档-公司
* @param productCaseImage
*/
void insertCompanyFile(TbUserFiles productCaseImage);
/**
*
* @param list
* @param id
*/
void addFileLabel(@Param("list") List<TbUserLabel> list, @Param("id") String id);
/**
* 文件标签
* @param list
* @param id
*/
void addUserFileLabel(List<TbUserLabel> list, String id);
/**
* 查询文件夹下存在的文件
* @param vo
* @return
*/
List<TbUserFiles> getCompanyFileList(TbUserFiles vo);
/**
* 查询个人文件数据集合
* @param vo
* @return
*/
List<TbUserFiles> getUserFileList(TbUserFiles vo);
void deleteCompanyFile(@Param("list") List<TbUserFiles> delete);
void deleteUserFile(@Param("list")List<TbUserFiles> delete);
}

View File

@ -0,0 +1,31 @@
package com.bonus.business.service;
import com.bonus.business.domain.DocumentTreeVo;
import com.bonus.business.domain.TbDocumentFolder;
import com.bonus.business.domain.TbUserFiles;
import com.bonus.common.core.domain.AjaxResult;
import org.springframework.web.multipart.MultipartFile;
public interface DocumentScreenService {
/**
* 查询 文档中心
* @param vo
* @return
*/
AjaxResult getDocumentTree(DocumentTreeVo vo);
/**
* 新增文档
* @param vo
* @return
*/
AjaxResult addDocument(TbDocumentFolder vo);
/**
* 文件导入
* @param file
* @param vo
* @return
*/
AjaxResult importFile(MultipartFile[] file, TbUserFiles vo);
}

View File

@ -0,0 +1,387 @@
package com.bonus.business.service.impl;
import cn.hutool.db.handler.StringHandler;
import com.bonus.business.domain.*;
import com.bonus.business.mapper.DocumentScreenMapper;
import com.bonus.business.service.DocumentScreenService;
import com.bonus.common.core.domain.AjaxResult;
import com.bonus.common.utils.DateUtils;
import com.bonus.common.utils.SecurityUtils;
import com.bonus.common.utils.StringUtils;
import com.bonus.file.service.FileUploadService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class DocumentScreenImpl implements DocumentScreenService {
@Autowired
private DocumentScreenMapper mapper;
@Autowired
private FileUploadService service;
public String day= DateUtils.getCurrentDay();
public String month=DateUtils.getCurrentMonth();
public String year=DateUtils.getCurrentYear();
/**
* 查询文档中心树
* @param vo
* @return
*/
@Override
public AjaxResult getDocumentTree(DocumentTreeVo vo) {
List<DocumentTreeVo> list=new ArrayList<>();
try{
String userId= SecurityUtils.getUserId().toString();
vo.setUserId(userId);
// 是否是管理员
boolean administrator=SecurityUtils.hasRole("administrator");
boolean admin=SecurityUtils.hasRole("admin");
//管理员
if(administrator || admin){
vo.setIsAdmin("1");
}else{
//查询共享文档
//个人需要查询
DocumentTreeVo shareDocument=getShareDocument(vo);
list.add(shareDocument);
}
//查询我的文档
DocumentTreeVo myDocument=getMyChildList(vo);
list.add(myDocument);
//查询公共文档数据集合
DocumentTreeVo companyList=getCompanyChildList(vo);
list.add(companyList);
}catch (Exception e){
log.error(e.getMessage());
}
return AjaxResult.success(list);
}
/**
* 新建文件夹
* @param vo
* @return
*/
@Override
public AjaxResult addDocument(TbDocumentFolder vo) {
try{
String userId=SecurityUtils.getUserId().toString();
vo.setCreateUser(userId);
vo.setUpdateUser(userId);
vo.setId(StringUtils.randomUUID());
//类型
String type=vo.getType();
//文档库
vo.setParentIds(vo.getParentIds()+","+vo.getParentId()+",");
if("1".equals(type)){
Integer num= mapper.addDocumentCompany(vo);
if(num!=null && num>0){
TbDocumentFolderAuth auth=new TbDocumentFolderAuth();
auth.setFolderId(vo.getId());
auth.setUserId(userId);
auth.setFolderType("1");
auth.setFolderSource("0");
auth.setFolderAuth("4");
auth.setIsShare("0");
//新增数据
mapper.addDocumentAuth(auth);
}else{
return AjaxResult.error("添加失败");
}
}else{
mapper.addDocumentUser(vo);
}
return AjaxResult.success("添加成功");
}catch (Exception e){
log.error(e.getMessage());
}
return AjaxResult.error("添加失败");
}
/**
* 导入文件
* @param file
* @param vo
* @return
*/
@Override
public AjaxResult importFile(MultipartFile[] file, TbUserFiles vo) {
try{
if(file==null ||file.length==0){
return AjaxResult.error("请上传附件");
}
if(StringUtils.isEmpty(vo.getFolderId())){
return AjaxResult.error("选择文件夹");
}
if(StringUtils.isEmpty(vo.getType())){
return AjaxResult.error("文件夹类型不能为空");
}
vo.setUploadUser(SecurityUtils.getUserId().toString());
vo.setCreateUser(SecurityUtils.getUserId().toString());
String repeatType=vo.getRepeatType();
//
List<TbUserFiles> list;
if("1".equals(vo.getType())){
list=mapper.getCompanyFileList(vo);
}else{
list=mapper.getUserFileList(vo);
}
List<MultipartFile> fileList=new ArrayList<>(list.size());
List<TbUserFiles> delete=new ArrayList<>();
//覆盖 覆盖会删除之前的数据
if("1".equals(repeatType)){
//跳过
for (MultipartFile multipartFile : file) {
String originFileName = multipartFile.getOriginalFilename();
boolean iscz = true;
for (TbUserFiles tbUserFiles : list) {
assert originFileName != null;
if (originFileName.equals(tbUserFiles.getOriginalName())) {
iscz = false;
break;
}
}
if (iscz) {
fileList.add(multipartFile);
}
}
}else{
//覆盖
for (MultipartFile multipartFile : file) {
String originFileName = multipartFile.getOriginalFilename();
for (TbUserFiles tbUserFiles : list) {
fileList.add(multipartFile);
assert originFileName != null;
if (originFileName.equals(tbUserFiles.getOriginalName())) {
delete.add(tbUserFiles);
break;
}
}
}
for (TbUserFiles tbUserFiles : delete) {
//删除文件
service.delFile(tbUserFiles.getFilePath());
}
//个人及公司
if("1".equals(vo.getType())){
mapper.deleteCompanyFile(delete);
}else{
mapper.deleteUserFile(delete);
}
}
// 文件上传
AjaxResult result=uploadFile(fileList,vo);
if(result.isError()){
return result;
}
return AjaxResult.success("上传成功");
}catch (Exception e){
log.error(e.getMessage());
}
return AjaxResult.error("文件上传失败");
}
/**
* 上传附件
* @param
* @return
*/
public AjaxResult uploadFile(List<MultipartFile> multipartFileList,TbUserFiles files){
String type=files.getType();
String filePath ;
if("1".equals(type)){
filePath = "document/company/"+files.getUploadUser() + "/" +
year + "/" + month + "/" + day + "/" ;
}else{
filePath = "document/user/" + files.getUploadUser()+"/" +
year + "/" + month + "/" + day + "/" ;
}
String[] ids=files.getLabelIds().split(",");
String[] name= files.getLabels().split(",");
List<TbUserLabel> list=new ArrayList<TbUserLabel>();
TbUserLabel vo=new TbUserLabel();
for (int i = 0; i <ids.length ; i++) {
vo.setFileId(files.getFolderId());
vo.setLabelId(ids[i]);
vo.setLabelName(name[i]);
list.add(vo);
}
for (MultipartFile file: multipartFileList) {
String uuid = StringUtils.randomUUID();
String originFileName = file.getOriginalFilename();
String suffix=StringUtils.substringAfterLast(originFileName, ".");
//产品 封面
filePath =filePath+uuid + "." + suffix;
String path=service.uploadFile(file, filePath);
if(path==null){
return AjaxResult.error("文件上传失败");
}
files.setDelFlag("0");
files.setDownTimes(0);
files.setSeeTimes(0);
files.setFileName(uuid+"." + suffix);
files.setFilePath(filePath);
files.setBucketName(path);
files.setOriginalName(originFileName);
files.setFileSuffix(suffix);
// 获取文件大小字节
long sizeInBytes = file.getSize();
// 转换为可读格式如KB/MB
String humanReadableSize = convertToHumanReadable(sizeInBytes);
files.setFileSize(humanReadableSize);
if("1".equals(type)){
//公司级别
mapper.insertCompanyFile(files);
mapper.addFileLabel(list,files.getId());
}else{
// 个人级别
mapper.insertUserFile(files);
mapper.addUserFileLabel(list,files.getId());
}
}
return AjaxResult.success();
}
// 辅助方法字节转可读格式
private String convertToHumanReadable(long bytes) {
if (bytes < 1024) return bytes + " B";
else if (bytes < 1024 * 1024) return String.format("%.2f KB", bytes / 1024.0);
else return String.format("%.2f MB", bytes / (1024 * 1024.0));
}
/**
* 查询 我的共享文档和他人贡献给我的文档
* @param vo
* @return
*/
private DocumentTreeVo getShareDocument(DocumentTreeVo vo) {
DocumentTreeVo vo1=new DocumentTreeVo();
vo1.setId("share");
vo1.setParentId("0");
vo1.setName("共享文档");
vo1.setType("3");
List<DocumentTreeVo> list=getShareList(vo);
vo1.setChildTree(list);
return vo1;
}
/**
* 查询共享文档数据集合
* @param vo
* @return
*/
private List<DocumentTreeVo> getShareList(DocumentTreeVo vo) {
List<DocumentTreeVo> allShareList=mapper.getDocumentList(vo);
List<DocumentTreeVo> list=new ArrayList<>();
DocumentTreeVo vo1=new DocumentTreeVo();
vo1.setId("myShare");
vo1.setParentId("share");
vo1.setName("我共享的");
vo1.setType("31");
//我共享出去的文档查询
List<DocumentTreeVo> childerList=getMyShareList(vo,allShareList);
vo1.setChildTree(childerList);
DocumentTreeVo vo2=new DocumentTreeVo();
vo2.setId("otherShare");
vo2.setParentId("share");
vo2.setName("与我共享");
vo2.setType("32");
List<DocumentTreeVo> childList2=getOtherShare(vo,allShareList);
vo2.setChildTree(childList2);
list.add(vo1);
list.add(vo2);
return list;
}
/**
* 其他人共享给我的
* @param vo
* @return
*/
private List<DocumentTreeVo> getOtherShare(DocumentTreeVo vo, List<DocumentTreeVo> allShareList) {
//查询他人分享的 -数据源是 文档库
TreeBuild treeBuild = new TreeBuild(allShareList);
List<DocumentTreeVo> shareList=mapper.getOtherShare(vo);
for(DocumentTreeVo share:allShareList){
List<DocumentTreeVo> list=treeBuild.buildTree(share.getId());
share.setChildTree(list);
}
return shareList;
}
/**
* 查询分享给我的文件夹
* @param vo
* @return
*/
private List<DocumentTreeVo> getMyShareList(DocumentTreeVo vo, List<DocumentTreeVo> allShareList) {
//查询我共享出去的文件夹及文件
TreeBuild treeBuild = new TreeBuild(allShareList);
List<DocumentTreeVo> shareList=mapper.getMyShareList(vo);
for(DocumentTreeVo share:allShareList){
List<DocumentTreeVo> list=treeBuild.buildTree(share.getId());
share.setChildTree(list);
}
return shareList;
}
/**
* 查询我的文档数据集合1
* @param vo
* @return
*/
private DocumentTreeVo getMyChildList(DocumentTreeVo vo) {
DocumentTreeVo vo1=new DocumentTreeVo();
vo1.setId("myDocument");
vo1.setParentId("0");
vo1.setName("我的文档");
vo1.setType("2");
List<DocumentTreeVo> childeList=mapper.getMyChildList(vo);
TreeBuild treeBuild = new TreeBuild(childeList);
List<DocumentTreeVo> list=treeBuild.buildTree("myDocument");
vo1.setChildTree(list);
return vo1;
}
/**
* 公共服务文档数据集合
* @param vo
* @return
*/
public DocumentTreeVo getCompanyChildList(DocumentTreeVo vo){
//查询 文档库集合
DocumentTreeVo vo1=new DocumentTreeVo();
vo1.setId("companyDocument");
vo1.setParentId("0");
vo1.setName("文档库");
vo1.setType("1");
List<DocumentTreeVo> childeList=mapper.getCompanyChildList(vo);
TreeBuild treeBuild = new TreeBuild(childeList);
List<DocumentTreeVo> list=treeBuild.buildTree("companyDocument");
vo1.setChildTree(list);
return vo1;
}
}

View File

@ -62,10 +62,11 @@ public class DocumentServiceImpl implements DocumentService {
} }
//默认层级 //默认层级
vo.setLevel(1); vo.setLevel(1);
vo.setParentId("0"); vo.setParentId("companyDocument");
vo.setParentIds("0,"); vo.setParentIds("companyDocument,");
vo.setCreateUser(SecurityUtils.getUserId().toString()); vo.setCreateUser(SecurityUtils.getUserId().toString());
vo.setUpdateUser(SecurityUtils.getUserId().toString()); vo.setUpdateUser(SecurityUtils.getUserId().toString());
vo.setId(StringUtils.randomUUID());
int num =mapper.addDocument(vo); int num =mapper.addDocument(vo);
if(num<1){ if(num<1){
return AjaxResult.error("文件夹创建失败"); return AjaxResult.error("文件夹创建失败");
@ -130,7 +131,6 @@ public class DocumentServiceImpl implements DocumentService {
public AjaxResult getAjaxResult(TbDocumentFolder vo, String userId) { public AjaxResult getAjaxResult(TbDocumentFolder vo, String userId) {
List<String> ids= Arrays.asList(userId.split(",")); List<String> ids= Arrays.asList(userId.split(","));
int addIds= mapper.addDocumentAuth(ids,vo.getId()); int addIds= mapper.addDocumentAuth(ids,vo.getId());
if(addIds!=ids.size()){ if(addIds!=ids.size()){
return AjaxResult.error("文件夹授权失败"); return AjaxResult.error("文件夹授权失败");

View File

@ -48,7 +48,7 @@ public class ProductServiceImpl implements ProductService {
public FileServiceUtils fileServiceUtils; public FileServiceUtils fileServiceUtils;
public String day= DateUtils.getCurrentYear(); public String day= DateUtils.getCurrentDay();
public String month=DateUtils.getCurrentMonth(); public String month=DateUtils.getCurrentMonth();

View File

@ -5,23 +5,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="com.bonus.business.mapper.DocumentMapper"> <mapper namespace="com.bonus.business.mapper.DocumentMapper">
<!--新增文档内容--> <!--新增文档内容-->
<insert id="addDocument" useGeneratedKeys="true" keyProperty="id"> <insert id="addDocument" useGeneratedKeys="true" keyProperty="id">
insert into tb_document_folder( insert into tb_document_folder(id,
level,folder_name,parent_id, create_time, create_user, update_time,update_user, file_type, del_flag,parent_ids level,folder_name,parent_id, create_time, create_user, update_time,update_user, file_type, del_flag,parent_ids
)values (#{level},#{folderName},#{parentId},now(),#{createUser},now(),#{updateUser},#{fileType},0,#{parentIds}) )values (#{id},#{level},#{folderName},#{parentId},now(),#{createUser},now(),#{updateUser},#{fileType},0,#{parentIds})
</insert> </insert>
<!--新增菜单权限--> <!--新增菜单权限-->
<insert id="addDocumentAuth"> <insert id="addDocumentAuth">
insert into tb_document_folder(folder_id, user_id,folder_type, folder_source, folder_auth, is_share) value insert into tb_document_folder(folder_id, user_id,folder_type, folder_source, folder_auth, is_share) value
<foreach collection="list" item="item" open="(" close=")" separator=","> <foreach collection="list" item="item" open="(" close=")" separator=",">
#{id},#{item},0,1,0,1, #{id},#{item},0,4,2,0
</foreach> </foreach>
</insert> </insert>
<update id="updateDocument"> <update id="updateDocument">
update tb_document_folder set update tb_document_folder set
folder_name=#{folderName},update_time=#{updateTime} ,update_user=#{updateUser} folder_name=#{folderName},update_time=#{updateTime} ,update_user=#{updateUser}
where id=#{id} where id=#{id}
where
</update> </update>
<delete id="deleteAuth"> <delete id="deleteAuth">
delete from tb_document_folder_auth WHERE folder_id=#{id} delete from tb_document_folder_auth WHERE folder_id=#{id}
@ -43,7 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
su.user_name createUser su.user_name createUser
from tb_document_folder tdf from tb_document_folder tdf
left join sys_user su on su.user_id=tdf.create_user left join sys_user su on su.user_id=tdf.create_user
where tdf.parent_id=0 and tdf.del_flag=0 where tdf.parent_id='companyDocument' and tdf.del_flag=0
<if test="folderName!=null and folderName!=''"> <if test="folderName!=null and folderName!=''">
and tdf.folder_name like concat('%',#{folderName},'%') and tdf.folder_name like concat('%',#{folderName},'%')
</if> </if>
@ -69,7 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="getChildNum" resultType="java.lang.Integer"> <select id="getChildNum" resultType="java.lang.Integer">
select
</select> </select>
</mapper> </mapper>

View File

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.business.mapper.DocumentScreenMapper">
<insert id="addDocumentCompany">
insert into tb_document_folder(id,
level,folder_name,parent_id, create_time, create_user, update_time,update_user, file_type, del_flag,parent_ids
)values (#{id},#{level},#{folderName},#{parentId},now(),#{createUser},now(),#{updateUser},#{fileType},0,#{parentIds})
</insert>
<insert id="addDocumentAuth">
insert into tb_document_folder_auth(
folder_id, user_id,folder_type,folder_source,folder_auth,is_share
)values (#{folderId},#{userId},#{folderType},#{folderSource},#{folderAuth},#{isShare} )
</insert>
<insert id="addDocumentUser" keyProperty="id" useGeneratedKeys="true" >
insert into tb_user_folder(
id,parent_id, level, folder_name,
create_user, create_time, is_share, del_flag,update_time,
update_user, parent_ids,
)values (#{id},#{parentId},#{level},#{folderName},#{userId},now(),0,0,now(),#{userId},#{parentIds})
</insert>
<insert id="insertUserFile" keyProperty="id" useGeneratedKeys="true" >
INSERT INTO tb_user_files(
folder_id,original_name,file_suffix,file_size,
file_path,file_name,del_flag,upload_time,upload_user,
down_times,see_times,labels,parent_ids
)values (#{folderId},#{originalName},#{fileSuffix},#{fileSize},#{filePath},#{fileName},
#{delFlag},now(),#{uploadUser},#{downTimes},#{seeTimes},#{labels},#{parentIds})
</insert>
<insert id="insertCompanyFile">
insert into tb_document_files(
folder_id, folder_ids, original_name,
file_suffix, file_size, file_path, file_name, upload_time,
upload_user, down_times, see_times, labels, del_flag
)values (#{folderId},#{parentIds},#{originalName},#{fileSuffix},
#{fileSize},#{filePath},#{fileName},now(),#{uploadUser},#{downTimes},#{seeTimes},#{labels},#{delFlag})
</insert>
<!--添加文件-->
<insert id="addFileLabel">
insert into tb_document_files_label( file_id, label_id, label_name)values (
<foreach collection="list" item="item" separator=",">
#{id},#{item.labelId},#{item.labelName}
</foreach>
)
</insert>
<insert id="addUserFileLabel">
insert into tb_user_label(file_id, label_id, label_name )values (
<foreach collection="list" item="item" separator=",">
#{id},#{item.labelId},#{item.labelName}
</foreach>
)
</insert>
<update id="deleteCompanyFile">
update tb_document_files set del_flag=1 where id IN
(
<foreach collection="list" separator="," item="item">
#{item}
</foreach>
)
</update>
<update id="deleteUserFile">
update tb_user_files set del_flag=1 where id IN
(
<foreach collection="list" separator="," item="item">
#{item}
</foreach>
)
</update>
<select id="getCompanyChildList" resultType="com.bonus.business.domain.DocumentTreeVo">
select fdf.id id, fdf.parent_id parentId, fdf.parent_ids parentIds, fdf.folder_name name,1 type
from tb_document_folder fdf
<if test='isAdmin!=1 or isAdmin!="1"'>
left join tb_document_folder_auth fdfa on fdfa.folder_id=fdf.id
</if>
<where >
tdfa.folder_source !='1' --去除他人分享的
<if test='isAdmin!=1 or isAdmin!="1"'>
and fdfa.user_id=#{userId}
</if>
</where>
</select>
<!--查询自己的文档数据-->
<select id="getMyChildList" resultType="com.bonus.business.domain.DocumentTreeVo">
select fuf.id,fuf.parent_id parentId,fuf.folder_name name,2 type
from tb_user_folder fuf
where create_user=#{userId}
</select>
<select id="getOtherShare" resultType="com.bonus.business.domain.DocumentTreeVo">
select tdf.id ,tdf.folder_name name,'otherShare' parentId,tdfa.is_share,1 type,tdfa.folder_auth auth
from tb_document_folder tdf
left join tb_document_folder_auth tdfa on tdf.id=tdfa.folder_id
where tdfa.user_id=#{userId}
and tdfa.folder_source=1 -- 数据源是他人分享而来的
union ALL
select tuf.id,tuf.folder_name,'otherShare' parentId,tuf.is_share,2 type,tfs.share_type auth
from tb_user_folder tuf
left join tb_files_share tfs on tfs.folder_id=tuf.id
where tfs.user_id=#{userId} -- 数据源是他人分享而来的
</select>
<select id="getMyShareList" resultType="com.bonus.business.domain.DocumentTreeVo">
select tdf.id ,tdf.folder_name name,'myShare' parentId,tdfa.is_share,1 type,
from tb_document_folder tdf
left join tb_document_folder_auth tdfa on tdf.id=tdfa.folder_id
where tdfa.is_share=1 -- 查询分项出去的
and tdfa.user_id=#{userId}
union ALL
select tuf.id,tuf.folder_name,'myShare' parentId,tuf.is_share,2 type
from tb_user_folder tuf
where tuf.is_share=1
and tuf.create_user=#{userId} -- 查询分项出去的
</select>
<select id="getDocumentList" resultType="com.bonus.business.domain.DocumentTreeVo">
select tdf.id ,tdf.folder_name name,parent_id parentId,1 type
from tb_document_folder tdf
union ALL
select tuf.id,tuf.folder_name,parent_id parentId,2 type
from tb_user_folder tuf
</select>
<!--查询存在为文件-->
<select id="getCompanyFileList" resultType="com.bonus.business.domain.TbUserFiles">
SELECT id,original_name originalName,file_path filePath
FROM tb_document_files
where folder_id=#{folderId} and del_flag=0
</select>
<select id="getUserFileList" resultType="com.bonus.business.domain.TbUserFiles">
SELECT id,original_name originalName,file_path filePath
FROM tb_user_files
where folder_id=#{folderId} and del_flag=0
</select>
</mapper>

View File

@ -49,12 +49,6 @@
<version>8.2.1</version> <version>8.2.1</version>
</dependency> </dependency>
<!-- pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<!-- 自定义验证注解 --> <!-- 自定义验证注解 -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
@ -72,7 +66,12 @@
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
</dependency> </dependency>
<!-- pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.boot.version}</version>
</dependency>
<!-- 阿里JSON解析器 --> <!-- 阿里JSON解析器 -->
<dependency> <dependency>
<groupId>com.alibaba.fastjson2</groupId> <groupId>com.alibaba.fastjson2</groupId>

View File

@ -41,8 +41,10 @@ public class TableSupport
public static PageDomain getPageDomain() public static PageDomain getPageDomain()
{ {
PageDomain pageDomain = new PageDomain(); PageDomain pageDomain = new PageDomain();
pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1)); int pageNum=Integer.parseInt(ServletUtils.getParameter(PAGE_NUM));
pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10)); int pageSize=Integer.parseInt(ServletUtils.getParameter(PAGE_SIZE));
pageDomain.setPageNum(Convert.toInt(pageNum, 1));
pageDomain.setPageSize(Convert.toInt(pageSize, 10));
pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN)); pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE)); pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));

View File

@ -57,7 +57,7 @@ public class Sm4Utils {
// 测试方法演示加密和解密过程 // 测试方法演示加密和解密过程
public static void main(String[] args) { public static void main(String[] args) {
String plainText = "18226653236"; String plainText = "15755022653";
System.out.println("原文: " + plainText); System.out.println("原文: " + plainText);
// 加密明文 // 加密明文

View File

@ -1,7 +1,6 @@
package com.bonus.common.utils; package com.bonus.common.utils;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import com.sun.org.apache.bcel.internal.generic.NEW;
import org.hibernate.validator.internal.util.StringHelper; import org.hibernate.validator.internal.util.StringHelper;
import java.util.HashMap; import java.util.HashMap;
@ -79,7 +78,6 @@ public class PhoneUtils {
; map.put("code","200"); ; map.put("code","200");
map.put("msg","发送成功"); map.put("msg","发送成功");
} }
return map; return map;
} }

View File

@ -111,7 +111,6 @@ public class MinioUtil {
} else { } else {
uploadLargeFile(folderPath, file); uploadLargeFile(folderPath, file);
} }
return SysFile.builder() return SysFile.builder()
.name(file.getOriginalFilename()) .name(file.getOriginalFilename())
.url(folderPath).build(); .url(folderPath).build();
@ -130,9 +129,7 @@ public class MinioUtil {
List<String> partNames = new ArrayList<>(); List<String> partNames = new ArrayList<>();
// 创建线程池 // 创建线程池
ExecutorService executor = Executors.newFixedThreadPool(5); ExecutorService executor = Executors.newFixedThreadPool(5);
List<CompletableFuture<Void>> futures = new ArrayList<>(); List<CompletableFuture<Void>> futures = new ArrayList<>();
// 上传每个分片 // 上传每个分片
for (int i = 0; i < partCount; i++) { for (int i = 0; i < partCount; i++) {
long offset = i * PART_SIZE; long offset = i * PART_SIZE;