package com.liangrui.hadoop_disk.service.impl;
import com.liangrui.hadoop_disk.bean.dto.FileAndFolderDto;
import com.liangrui.hadoop_disk.bean.dto.FolderDto;
import com.liangrui.hadoop_disk.bean.entity.Diskuser;
import com.liangrui.hadoop_disk.bean.entity.Fileindex;
import com.liangrui.hadoop_disk.bean.entity.Folder;
import com.liangrui.hadoop_disk.bean.entity.Upload;
import com.liangrui.hadoop_disk.mapper.DiskuserMapper;
import com.liangrui.hadoop_disk.mapper.FileindexMapper;
import com.liangrui.hadoop_disk.mapper.FolderMapper;
import com.liangrui.hadoop_disk.mapper.UploadMapper;
import com.liangrui.hadoop_disk.service.FileAndFolderService;
import com.liangrui.hadoop_disk.util.DateUtil;
import com.liangrui.hadoop_disk.util.RowkeyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class FileAndFolderServiceImpl implements FileAndFolderService {
@Autowired
private FolderMapper folderMapper;
@Autowired
private FileindexMapper fileindexMapper;
@Autowired
private UploadMapper uploadMapper;
@Autowired
private DiskuserMapper diskuserMapper;
@Override
public List<FileAndFolderDto> findAllFileAndFolder(String fatherFolderid) {
List<Folder> list=folderMapper.selectByFatherFolder(fatherFolderid);
List<Fileindex> list1=fileindexMapper.selectByFatherFolder(fatherFolderid);
List<FileAndFolderDto> list2 = new ArrayList<>();
for(Folder folder:list)
{
FileAndFolderDto fileAndFolderDto=new FileAndFolderDto();
fileAndFolderDto.setId(folder.getFolderid());
fileAndFolderDto.setName(folder.getName());
fileAndFolderDto.setSharetype(folder.getSharetype());
fileAndFolderDto.setUpdatetime(folder.getUpdatetime());
list2.add(fileAndFolderDto);
}
for(Fileindex fileindex:list1)
{
FileAndFolderDto fileAndFolderDto=new FileAndFolderDto();
fileAndFolderDto.setId(String.valueOf(fileindex.getFileid()));
fileAndFolderDto.setName(fileindex.getName());
fileAndFolderDto.setUpdatetime(fileindex.getUpdatetime());
fileAndFolderDto.setType(1);
fileAndFolderDto.setSize(fileindex.getSize());
fileAndFolderDto.setFiletype(fileindex.getFiletype());
fileAndFolderDto.setSharetype(fileindex.getSharetype());
list2.add(fileAndFolderDto);
}
return list2;
}
@Override
public List<FileAndFolderDto> findPublicAllFileAndFolder(String fatherFolderid) {
List<Folder> list = folderMapper.selectPublicByFatherFolder(fatherFolderid);
List<Fileindex> list1 = fileindexMapper.selectPublicByFatherFolder(fatherFolderid);
List<FileAndFolderDto> list2 = new ArrayList<>();
for (Folder folder : list) {
FileAndFolderDto fileAndFolderDto = new FileAndFolderDto();
fileAndFolderDto.setId(folder.getFolderid());
fileAndFolderDto.setName(folder.getName());
fileAndFolderDto.setSharetype(folder.getSharetype());
fileAndFolderDto.setUpdatetime(folder.getUpdatetime());
list2.add(fileAndFolderDto);
}
for (Fileindex fileindex : list1) {
FileAndFolderDto fileAndFolderDto = new FileAndFolderDto();
fileAndFolderDto.setId(String.valueOf(fileindex.getFileid()));
fileAndFolderDto.setName(fileindex.getName());
fileAndFolderDto.setUpdatetime(fileindex.getUpdatetime());
fileAndFolderDto.setType(1);
fileAndFolderDto.setSize(fileindex.getSize());
fileAndFolderDto.setFiletype(fileindex.getFiletype());
fileAndFolderDto.setSharetype(fileindex.getSharetype());
list2.add(fileAndFolderDto);
}
return list2;
}
@Override
public int addFolder(String filename, String fatherFolderid, int userid) {
Folder folder=new Folder();
RowkeyUtil rowkeyUtil=new RowkeyUtil();
folder.setFolderid(rowkeyUtil.getRowkey());
folder.setCreatetime(DateUtil.DateToString("yyyy-MM-dd HH:mm:ss", new Date()));
folder.setFatherfolderid(fatherFolderid);
folder.setUpdatetime(DateUtil.DateToString("yyyy-MM-dd HH:mm:ss", new Date()));
folder.setName(filename);
folder.setSharetype(0);
folder.setUserid(userid);
folder.setIsdelete(0);
return folderMapper.insert(folder);
}
@Override
public boolean isexist(String foldername, String fatherFolderid) {
Folder folder;
folder=folderMapper.selectByname(foldername,fatherFolderid);
return folder!=null;
}
@Override
public int delteFolder(String folderid) {
//删除其实是伪善除
return folderMapper.updateisdelete(1, folderid,DateUtil.DateToString("yyyy-MM-dd HH:mm:ss", new Date()));
}
@Override
public int updateFoler(String foldername, String folderid) {
Folder folder=new Folder();
folder.setFolderid(folderid);
folder.setUpdatetime(DateUtil.DateToString("yyyy-MM-dd HH:mm:ss", new Date()));
folder.setName(foldername);
return folderMapper.updateByPrimaryKey(folder);
}
@Override
public int changesharetype(int sharetype, int type, String fileid) {
if(type==0)
{
Folder folder=new Folder();
folder.setFolderid(fileid);
folder.setSharetype(sharetype);
return folderMapper.updateByPrimaryKey(folder);
}else{
Fileindex fileindex=new Fileindex();
fileindex.setFileid(Integer.valueOf(fileid));
fileindex.setFileid(Integer.valueOf(fileid));
fileindex.setSharetype(sharetype);
return fileindexMapper.updateByPrimaryKey(fileindex);
}
}
@Override
public boolean isexistfile(String filename, String fatherFolderid) {
Fileindex fileindex;
fileindex=fileindexMapper.selectByname(filename,fatherFolderid);
return fileindex!=null;
}
public int updateFileName(String filname, int fileid) {
Fileindex fileindex=new Fileindex();
fileindex.setFileid(Integer.valueOf(fileid));
fileindex.setUpdatetime(DateUtil.DateToString("yyyy-MM-dd HH:mm:ss", new Date()));
fileindex.setName(filname);
return fileindexMapper.updateByPrimaryKey(fileindex);
}
@Override
public int deleteFile(int fileid) {
Fileindex fileindex=new Fileindex();
fileindex.setFileid(Integer.valueOf(fileid));
fileindex.setIsdelete(1);
fileindex.setDeletetime(DateUtil.DateToString("yyyy-MM-dd HH:mm:ss", new Date()));
return fileindexMapper.updateByPrimaryKey(fileindex);
}
@Override
public List<FolderDto> getFolderTree(int userid) {
List<Folder> list=folderMapper.selectByUserid(userid);
List<FolderDto> list1=new ArrayList<>();
for(Folder f:list)
{
FolderDto folderDto=new FolderDto(f);
list1.add(folderDto);
}
return list1;
}
@Override
@Transactional(rollbackFor = {RuntimeException.class, Error.class})
public int copyFolder(String folderid, String aimFolderid, int userid) {
//先把自己给存了
Folder folderfirst=folderMapper.selectByPrimaryKey(folderid);
folderfirst.setFatherfolderid(aimFolderid);
addFolder(folderfirst.getName(),folderfirst.getFatherfolderid(),userid);
List<Folder> list=new ArrayList<>();
list.add(folderfirst);
while (list.size()>0)
{
List<Folder> folderList=new ArrayList<>();
//插入文件夹
for(Folder folder:list)
{
Fo