86 lines
3.0 KiB
Java
86 lines
3.0 KiB
Java
package com.senmesh.sfile.service.impl;
|
||
|
||
import com.senmesh.common.exception.util.Assert;
|
||
import com.senmesh.common.util.RandomUtils;
|
||
import com.senmesh.common.util.UserContextHolder;
|
||
import com.senmesh.sfile.constant.FileStatusEnum;
|
||
import com.senmesh.sfile.constant.RootTypeEnum;
|
||
import com.senmesh.sfile.dto.ExpandUserFileCreateDTO;
|
||
import com.senmesh.sfile.dto.ShareUserFileCreateDTO;
|
||
import com.senmesh.sfile.dto.UserFileDTO;
|
||
import com.senmesh.sfile.dto.UserFileQueryDTO;
|
||
import com.senmesh.sfile.service.FileSecurityService;
|
||
import com.senmesh.sfile.service.ShareUserFileService;
|
||
import com.senmesh.sfile.service.UserFileService;
|
||
import java.util.List;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.stereotype.Service;
|
||
import org.springframework.transaction.annotation.Transactional;
|
||
|
||
import java.util.Calendar;
|
||
import java.util.Date;
|
||
|
||
/**
|
||
* 分享用户文件ServiceImpl
|
||
*/
|
||
@Service
|
||
public class ShareUserFileServiceImpl implements ShareUserFileService {
|
||
|
||
@Autowired
|
||
private UserFileService userFileService;
|
||
|
||
@Autowired
|
||
private FileSecurityService fileSecurityService;
|
||
|
||
@Override
|
||
@Transactional
|
||
public Long create(ShareUserFileCreateDTO createDTO) {
|
||
Long userFileId = createDTO.getUserFileId();
|
||
Long userId = UserContextHolder.getExistLoginUserId();
|
||
Integer validDays = createDTO.getValidDays();
|
||
|
||
// MeshSafe安全检测校验:单文件不通过直接拦截;文件夹确认跳过时仅分享通过的内容
|
||
List<Long> excludeIds = fileSecurityService.resolveShareExclusions(
|
||
userFileId, Boolean.TRUE.equals(createDTO.getOnlyPassed()), "分享");
|
||
|
||
// 根据有效天数计算过期时间
|
||
Calendar calendar = Calendar.getInstance();
|
||
calendar.setTime(new Date());
|
||
calendar.add(Calendar.DAY_OF_MONTH, validDays);
|
||
Date endTime = calendar.getTime();
|
||
|
||
// 生成随机6位数字访问码
|
||
String accessCode = RandomUtils.nextSixVerificationCode();
|
||
|
||
// 调用UserFileService的重载create方法,根据普通文件创建分享文件
|
||
ExpandUserFileCreateDTO expandCreateDTO = ExpandUserFileCreateDTO.builder()
|
||
.userFileId(userFileId)
|
||
.userId(userId)
|
||
.rootType(RootTypeEnum.SHARE.getType())
|
||
.fileStatus(FileStatusEnum.NORMAL.getStatus())
|
||
.accessCode(accessCode)
|
||
.endTime(endTime)
|
||
.excludeFileIds(excludeIds)
|
||
.build();
|
||
return userFileService.create(expandCreateDTO).getFolder().getId();
|
||
}
|
||
|
||
@Override
|
||
public List<UserFileDTO> list(Long id, String accessCode, Long parentId) {
|
||
UserFileDTO userFileDTO = userFileService.findOne(UserFileQueryDTO.builder()
|
||
.id(id)
|
||
.rootType(RootTypeEnum.SHARE.getType())
|
||
.build());
|
||
Assert.isTrue(userFileDTO.getAccessCode().equals(accessCode), "访问码不正确");
|
||
|
||
return userFileService.list(UserFileQueryDTO.builder()
|
||
.rootType(RootTypeEnum.SHARE.getType())
|
||
.pathLike(userFileDTO.getPath())
|
||
.parentId(parentId)
|
||
.build());
|
||
}
|
||
|
||
|
||
}
|
||
|