/* Copyright (c) 2019. 本项目所有源码受中华人民共和国著作权法保护,已登记软件著作权。 * 本项目版权归南昌瀚为云科技有限公司所有,本项目仅供学习交流使用,未经许可不得进行商用,开源(社区版)遵守AGPL-3.0协议。 * */
package com.honvay.hdms.dms.document.service.impl;
import com.honvay.hdms.dms.authorize.service.AuthorizeService;
import com.honvay.hdms.dms.document.entity.Document;
import com.honvay.hdms.dms.document.enums.DocumentAccessibility;
import com.honvay.hdms.dms.document.enums.DocumentType;
import com.honvay.hdms.dms.document.repository.DocumentRepository;
import com.honvay.hdms.dms.document.service.DocumentWriteService;
import com.honvay.hdms.dms.event.*;
import com.honvay.hdms.dms.model.request.*;
import com.honvay.hdms.dms.mount.entity.Mount;
import com.honvay.hdms.dms.mount.service.MountService;
import com.honvay.hdms.dms.permission.enums.PermissionType;
import com.honvay.hdms.dms.storage.Storage;
import com.honvay.hdms.framework.core.exception.ServiceException;
import com.honvay.hdms.user.domain.User;
import com.honvay.hdms.user.enums.UserStatus;
import com.honvay.hdms.user.service.UserService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.validation.annotation.Validated;
import java.util.*;
/**
* @author LIQIU
* created on 2019/2/28
**/
@Validated
@Service
@Transactional
public class DocumentWriteServiceImpl implements DocumentWriteService, ApplicationListener {
@Autowired
private Storage storage;
@Autowired
private MountService mountService;
@Autowired
private UserService userService;
@Autowired
private AuthorizeService authorizeService;
@Autowired
private DocumentRepository documentRepository;
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
/**
* 移动文件夹
*/
@Override
public void move(MoveRequest request) {
Document parent = null;
if (request.getParent() != null) {
parent = this.findById(request.getParent());
}
for (Integer documentId : request.getDocumentIds()) {
Document document = this.findById(documentId);
//TODO 判断子是否有锁定的文件
Assert.isTrue(!document.getLocked(), "已锁定的文件不能移动");
if (DocumentType.isFile(document.getType()) && parent == null && request.getMount().equals(request.getUser().getOrganizationMount().getId())) {
throw new IllegalArgumentException("不能将文件移动到企业文档根目录");
}
Assert.isTrue(authorizeService.checkPermission(request.getUser(), document, PermissionType.REMOVE), "无权限复制文件到其他目录");
if (parent != null) {
if (DocumentType.isFile(document.getType())) {
Assert.isTrue(authorizeService.checkPermission(request.getUser(), parent, PermissionType.CREATE), "无权权限创建文件夹");
} else {
Assert.isTrue(authorizeService.checkPermission(request.getUser(), parent, PermissionType.UPLOAD), "无权权限复制文件");
}
Assert.isTrue(!parent.getId().equals(document.getId()), "不能移动到原文件夹中");
}
Document originalParent = null;
Integer originalMount = document.getMount();
String originalPath = document.getPath();
String originalFullName = document.getFullName();
String originalParentName = null;
//获取原父文件夹名称
if (document.getParent() != -1) {
originalParent = this.findById(document.getParent());
}
//移动到根目录下
if (parent == null) {
Assert.isTrue(!(request.getMount().equals(document.getMount())
&& document.getParent() == -1), "不能移动到自身");
document.setMount(request.getMount());
document.setParent(-1);
} else {
Assert.isTrue(!parent.getId().equals(document.getId()), "不能移动到自身");
document.setMount(parent.getMount());
document.setParent(request.getParent());
}
//设置唯一的名称
this.setUniqueName(document);
//同步父目录的信息
this.syncByParent(document, parent);
this.documentRepository.update(document);
if (DocumentType.isDirectory(document.getType())) {
//this.moveChildren(document);
//批量修改文件
this.documentRepository.batchUpdateChildren(document.getMount(),
originalPath, document.getPath(),
originalFullName, document.getFullName());
}
MoveEvent moveEvent = new MoveEvent(document, originalParent, parent, originalMount, document.getMount(), request.getUser().getId());
applicationEventPublisher.publishEvent(moveEvent);
}
}
private void moveChildren(Document document) {
List<Document> children = this.documentRepository.findByParent(document.getId());
for (Document child : children) {
child.setMount(document.getMount());
this.syncByParent(child, document);
this.documentRepository.update(child);
if (DocumentType.isDirectory(child.getType())) {
this.moveChildren(child);
}
}
}
@Override
public void transfer(Integer source, Integer target) {
User user = this.userService.get(Integer.valueOf(source));
Assert.isTrue(UserStatus.DISABLED.getValue().equals(user.getStatus()), "只能移交已失效用户的文档!");
Assert.isTrue(target != null, "参数错误,移交对象缺失");
Assert.isTrue(!source.equals(target), "参数错误,移交人相同");
List<Document> children = this.documentRepository.findByParent(source);
for (Document document : children) {
//提交到新的用户
document.setMount(target);
this.setUniqueName(document);
this.syncByParent(document);
this.documentRepository.update(document);
if (DocumentType.isDirectory(document.getType())) {
this.transferChildren(document);
}
}
}
@Override
public void update(Document document) {
this.documentRepository.update(document);
}
@Override
public void lock(LockRequest request) {
for (Integer id : request.getDocumentIds()) {
Document document = this.findById(id);
Assert.isTrue(!document.getLocked(), "该文件已经锁定");
Assert.isTrue(!DocumentType.isDirectory(document.getType()), "不能锁定文件夹");
Assert.isTrue(authorizeService.checkPermission(request.getUser(), document, PermissionType.LOCK), "无权限锁定文件");
this.documentRepository.lock(id, request.getUser().getId());
LockEvent lockEvent = new LockEvent(document, request.getUser().getId());
applicationEventPublisher.publishEvent(lockEvent);
}
}
@Override
public void unlock(UnLockRequest request) {
for (Integer id : request.getDocumentIds()) {
Document document = this.findById(id);
Assert.isTrue(document.getLockedBy().equals(request.getUser().getId()), "文件夹解锁只能锁定者操作");
Assert.isTrue(document.getLocked(), "该文件没有锁定");
Assert.isTrue(authorizeService.checkPermission(request.getUser(), document, PermissionType.LOCK), "无权限解锁文件");
this.documentRepository.unlock(id, request.getUser().getId());
UnlockEvent unlockEvent = new UnlockEvent(document, request.getUser().getId());
applicationEventPublisher.publishEvent(unlockEvent);
}
}
/**
* 复制文件夹
*/
@Override
public void copy(CopyRequest request) {
Document parent = null;
if (request.getParent() != null && request.getParent() != -1) {
parent = this.findById(request.getParent());
}
Assert.isTrue(request.getParent() != null || request.getMount() != null, "复制到目标参数为空");
for (Integer id : request.getDocumentIds())
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本源码提供了一个基于Java的开源文档管理平台/企业网盘设计。项目包含792个文件,其中包括254个Java源文件、168个BCMap文件、109个PNG图片、103个JavaScript文件、45个HTML文件、19个Less样式文件、16个CSS样式文件、15个SVG文件、12个XML文件和6个EOT字体文件。这个平台是瀚为云文档协作平台,它支持企业文件和个人文件的文件分库管理,并提供文件收藏夹、最近打开的文件、回收站等分区设置。平台还提供了统一存储、共享协作、权限控制等功能,并支持文件上传、目录维护、重命名、移动、复制、设置标签、锁定、删除、预览和动态跟踪等功能,适合需要文档管理和协作的企业或团队使用。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java的开源文档管理平台/企业网盘设计源码 (793个子文件)
start.bat 914B
UniCNS-UTF8-H.bcmap 52KB
UniCNS-UTF32-H.bcmap 51KB
UniCNS-UTF16-H.bcmap 49KB
UniCNS-UCS2-H.bcmap 47KB
UniGB-UTF8-H.bcmap 46KB
UniGB-UTF32-H.bcmap 45KB
UniGB-UTF16-H.bcmap 43KB
UniGB-UCS2-H.bcmap 42KB
UniJIS2004-UTF8-H.bcmap 41KB
UniJIS-UTF8-H.bcmap 41KB
Adobe-CNS1-UCS2.bcmap 40KB
Adobe-Japan1-UCS2.bcmap 40KB
UniJIS2004-UTF32-H.bcmap 40KB
UniJISX02132004-UTF32-H.bcmap 40KB
UniJIS-UTF32-H.bcmap 40KB
UniJISX0213-UTF32-H.bcmap 40KB
UniJIS2004-UTF16-H.bcmap 39KB
UniJIS-UTF16-H.bcmap 39KB
Adobe-GB1-UCS2.bcmap 33KB
UniKS-UTF8-H.bcmap 27KB
UniKS-UTF32-H.bcmap 26KB
UniKS-UTF16-H.bcmap 26KB
UniKS-UCS2-H.bcmap 25KB
UniJIS-UCS2-H.bcmap 25KB
Adobe-Korea1-UCS2.bcmap 23KB
GBK2K-H.bcmap 19KB
KSC-Johab-H.bcmap 16KB
GBK-EUC-H.bcmap 14KB
GBKp-EUC-H.bcmap 14KB
GBTpc-EUC-H.bcmap 7KB
GBT-EUC-H.bcmap 7KB
GBT-H.bcmap 7KB
HKscs-B5-H.bcmap 4KB
ETHK-B5-H.bcmap 4KB
KSCms-UHC-HW-H.bcmap 3KB
KSCms-UHC-H.bcmap 3KB
NWP-H.bcmap 3KB
HKdla-B5-H.bcmap 3KB
78ms-RKSJ-H.bcmap 3KB
Ext-RKSJ-H.bcmap 2KB
Ext-H.bcmap 2KB
Add-H.bcmap 2KB
HKdlb-B5-H.bcmap 2KB
Add-RKSJ-H.bcmap 2KB
78-EUC-H.bcmap 2KB
78-RKSJ-H.bcmap 2KB
78-H.bcmap 2KB
HKgccs-B5-H.bcmap 2KB
HKm471-B5-H.bcmap 2KB
KSCpc-EUC-H.bcmap 2KB
CNS-EUC-V.bcmap 2KB
KSC-EUC-H.bcmap 2KB
KSC-H.bcmap 2KB
CNS-EUC-H.bcmap 2KB
HKm314-B5-H.bcmap 2KB
ETen-B5-H.bcmap 1KB
B5pc-H.bcmap 1KB
B5-H.bcmap 1KB
90pv-RKSJ-H.bcmap 982B
83pv-RKSJ-H.bcmap 905B
UniJISPro-UTF8-V.bcmap 726B
90ms-RKSJ-H.bcmap 721B
90msp-RKSJ-H.bcmap 715B
CNS1-H.bcmap 706B
UniJISPro-UCS2-HW-V.bcmap 705B
UniJISPro-UCS2-V.bcmap 689B
UniJISX02132004-UTF32-V.bcmap 688B
UniJISX0213-UTF32-V.bcmap 684B
UniJIS2004-UTF8-V.bcmap 682B
UniJIS2004-UTF32-V.bcmap 681B
UniJIS-UCS2-HW-V.bcmap 680B
UniJIS-UTF8-V.bcmap 678B
UniJIS-UTF32-V.bcmap 677B
UniJIS-UCS2-V.bcmap 664B
UniJIS2004-UTF16-V.bcmap 647B
UniJIS-UTF16-V.bcmap 643B
Adobe-GB1-5.bcmap 625B
Adobe-GB1-4.bcmap 601B
EUC-H.bcmap 578B
GBpc-EUC-H.bcmap 557B
H.bcmap 553B
GB-EUC-H.bcmap 549B
RKSJ-H.bcmap 534B
GB-H.bcmap 528B
CNS2-H.bcmap 504B
Adobe-Japan1-6.bcmap 485B
Adobe-GB1-3.bcmap 470B
Adobe-GB1-2.bcmap 465B
Adobe-Japan1-5.bcmap 430B
Adobe-CNS1-6.bcmap 406B
Adobe-CNS1-5.bcmap 406B
Adobe-CNS1-4.bcmap 405B
Adobe-CNS1-3.bcmap 401B
Adobe-Korea1-2.bcmap 391B
Adobe-Korea1-1.bcmap 386B
Adobe-CNS1-2.bcmap 376B
Adobe-CNS1-1.bcmap 371B
Adobe-Japan1-4.bcmap 337B
Adobe-CNS1-0.bcmap 317B
共 793 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
沐知全栈开发
- 粉丝: 4743
- 资源: 3374
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功