|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using AutoMapper;
- using Microsoft.EntityFrameworkCore;
- using Permission.Entity.DbContext;
- using Permission.Entity.Disk;
- using Permission.Entity.System;
- using Permission.Infrastructure.Repositories;
- using Permission.Service.DTO.ApiModels;
- using Permission.Service.IServices;
- using Permission.Utils.Validate;
-
- namespace Permission.Service.Services
- {
- public class DiskFileService : IDiskFileService
- {
- private readonly IUnitOfWork _unitOfWork;
- private readonly PermissionContext _dbContext;
- private readonly IMapper _mapper;
- private readonly IBaseRepository<DiskFolder> _diskFolderRepository;
- private readonly IBaseRepository<DiskFile> _diskFileRepository;
- private readonly IBaseRepository<SysUser> _sysUserRepository;
-
- public DiskFileService(IUnitOfWork unitOfWork, PermissionContext dbContext, IMapper mapper, IBaseRepository<DiskFolder> diskFolderRepository, IBaseRepository<DiskFile> diskFileRepository, IBaseRepository<SysUser> sysUserRepository)
- {
- this._unitOfWork = unitOfWork;
- this._dbContext = dbContext;
- this._mapper = mapper;
- this._diskFolderRepository = diskFolderRepository;
- this._diskFileRepository = diskFileRepository;
- this._sysUserRepository = sysUserRepository;
- }
-
- public bool AddModel(DiskFile model)
- {
- try
- {
- model.GuidId = Guid.NewGuid().ToString();
- model.IsEnabled = true;
- model.DeleteMark = false;
- model.CreateTime = DateTime.Now;
- model.CreateUser = "admin";
- var res = _diskFileRepository.Save(model);
- return res;
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
- public List<BaseFile> GetBaseFilesByUserId(int userid)
- {
- try
- {
- if (!userid.IsEmpty() && userid > 0)
- {
- List<BaseFile> files = new List<BaseFile>();
- BaseFile baseFile = null;
-
- var folderlist =
- _diskFolderRepository.LoadAll(
- f => f.UserId == userid && f.IsEnabled == true && f.DeleteMark == false).ToList();
-
- if (folderlist.Any())
- {
- foreach (var folder in folderlist)
- {
- baseFile = new BaseFile
- {
- FileId = folder.Id,
- Name = folder.FolderName,
- ParentId = folder.Parent,
- FileType = 0,
- DownloadPath = "",
- TotalBytes = folder.FolderLength.Value,
- ModifiedTime = folder.CreateTime.Value
- };
- files.Add(baseFile);
- }
- }
-
- var filelist =
- _diskFileRepository.LoadAll(
- f => f.UserId == userid && f.IsEnabled == true && f.DeleteMark == false).ToList();
-
- if (filelist.Any())
- {
- foreach (var file in filelist)
- {
- baseFile = new BaseFile
- {
- FileId = file.Id,
- Name = file.FileName,
- ParentId = file.FolderId ?? 0,
- FileType = 1,
- DownloadPath = file.FileUrl,
- TotalBytes = file.FileSize.Value,
- ModifiedTime = file.CreateTime.Value
- };
- files.Add(baseFile);
- }
- }
- return files;
- }
- else
- {
- return null;
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
-
- #region api
-
- public List<NetDiskFile> GetBaseFilesByUserIdApi(int userid)
- {
- try
- {
- if (!userid.IsEmpty() && userid > 0)
- {
- List<BaseFile> files = new List<BaseFile>();
- BaseFile baseFile = null;
-
- var folderlist =
- _diskFolderRepository.LoadAll(
- f => f.UserId == userid && f.IsEnabled == true && f.DeleteMark == false).ToList();
-
- if (folderlist.Any())
- {
- foreach (var folder in folderlist)
- {
- baseFile = new BaseFile
- {
- FileId = folder.Id,
- Name = folder.FolderName,
- ParentId = folder.Parent,
- FileType = 0,
- DownloadPath = "",
- TotalBytes = folder.FolderLength.Value,
- ModifiedTime = folder.CreateTime.Value
- };
- files.Add(baseFile);
- }
- }
-
- var filelist =
- _diskFileRepository.LoadAll(
- f => f.UserId == userid && f.IsEnabled == true && f.DeleteMark == false).ToList();
-
- if (filelist.Any())
- {
- foreach (var file in filelist)
- {
- baseFile = new BaseFile
- {
- FileId = file.Id,
- Name = file.FileName,
- ParentId = file.FolderId ?? 0,
- FileType = int.Parse(file.FileType),
- DownloadPath = file.FileUrl,
- TotalBytes = file.FileSize.Value,
- ModifiedTime = file.CreateTime.Value
- };
- files.Add(baseFile);
- }
- }
-
- //递归
- List<NetDiskFile> diskFilelist = new List<NetDiskFile>();
- NetDiskFile diskFile = null;
- var d = files.Where(f => f.ParentId == 0).ToList();
- //foreach (var fmodel in files.Where(f => f.ParentId == null || f.ParentId == 0))
- foreach (var fmodel in d)
- {
- diskFile = new NetDiskFile
- {
- FileId = fmodel.FileId,
- Name = fmodel.Name,
- FileType = fmodel.FileType,
- TotalBytes = fmodel.TotalBytes,
- DownloadPath = fmodel.DownloadPath,
- ModifiedTime = fmodel.ModifiedTime,
- ChildFiles = CreateChildTree(files, fmodel)
- };
- diskFilelist.Add(diskFile);
- }
- var data = diskFilelist.OrderBy(r => r.FileType).ToList();
- return data;
- }
- else
- {
- return null;
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
- /// <summary>
- /// 递归生成子树
- /// </summary>
- /// <param name="list"></param>
- /// <param name="model"></param>
- /// <returns></returns>
- private List<NetDiskFile> CreateChildTree(List<BaseFile> list, BaseFile model)
- {
- int parentid = model.FileId;//根节点ID
- List<NetDiskFile> nodeList = new List<NetDiskFile>();
- //var children = list.Where(t => t.ParentId == parentid);
- var children = list.Where(t => t.ParentId == parentid);
- if (children.Any())
- {
- NetDiskFile node = null;
- foreach (var chl in children)
- {
- node = new NetDiskFile
- {
- FileId = chl.FileId,
- Name = chl.Name,
- FileType = chl.FileType,
- TotalBytes = chl.TotalBytes,
- DownloadPath = chl.DownloadPath,
- ModifiedTime = chl.ModifiedTime,
- ChildFiles = CreateChildTree(list, chl)
- };
- nodeList.Add(node);
- }
- }
- return nodeList;
- }
-
- public bool SaveFileApi(DiskFile model)
- {
- try
- {
- int userid = model.UserId;
- var username = _sysUserRepository.Get(userid).Account;
- model.GuidId = Guid.NewGuid().ToString();
- //model.FolderId = folderid ?? null;
- model.UserId = userid;
- model.DownloadCount = 0;
- model.IsEnabled = true;
- model.DeleteMark = false;
- model.CreateTime = DateTime.Now;
- model.CreateUser = username;
- var res = _diskFileRepository.Save(model);
- return res;
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
- public bool EditFileApi(DiskFile model)
- {
- try
- {
- int userid = model.UserId;
- var file = _diskFileRepository.Get(model.Id);
- var username = _sysUserRepository.Get(userid).Account;
- file.FileName = model.FileName;
- file.ModifyTime = DateTime.Now;
- file.ModifyUser = username;
- var res = _diskFileRepository.Update(file);
- return res;
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
- public bool EditFileApi(int fileid, string newfilename, int userid)
- {
- try
- {
- var file = _diskFileRepository.Get(fileid);
- var username = _sysUserRepository.Get(userid).Account;
- file.FileName = newfilename;
- file.ModifyTime = DateTime.Now;
- file.ModifyUser = username;
- var res = _diskFileRepository.Update(file);
- return res;
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
- public bool DeleteFileApi(int fileid)
- {
- try
- {
- var file = _diskFileRepository.Get(fileid);
- file.DeleteMark = true;
- file.ModifyTime = DateTime.Now;
- var res = _diskFileRepository.Update(file);
- return res;
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
- #endregion
- }
- }
|