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.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; @Override @Transactional public Long create(ShareUserFileCreateDTO createDTO) { Long userFileId = createDTO.getUserFileId(); Long userId = UserContextHolder.getExistLoginUserId(); Integer validDays = createDTO.getValidDays(); // 根据有效天数计算过期时间 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) .build(); return userFileService.create(expandCreateDTO).getFolder().getId(); } @Override public List list(Long id, String accessCode) { 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()) .build()); } }