飞星
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

318 行
11 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using AutoMapper;
  5. using Microsoft.EntityFrameworkCore;
  6. using Permission.Entity.DbContext;
  7. using Permission.Entity.Disk;
  8. using Permission.Entity.System;
  9. using Permission.Infrastructure.Repositories;
  10. using Permission.Service.DTO.ApiModels;
  11. using Permission.Service.IServices;
  12. using Permission.Utils.Validate;
  13. namespace Permission.Service.Services
  14. {
  15. public class DiskFileService : IDiskFileService
  16. {
  17. private readonly IUnitOfWork _unitOfWork;
  18. private readonly PermissionContext _dbContext;
  19. private readonly IMapper _mapper;
  20. private readonly IBaseRepository<DiskFolder> _diskFolderRepository;
  21. private readonly IBaseRepository<DiskFile> _diskFileRepository;
  22. private readonly IBaseRepository<SysUser> _sysUserRepository;
  23. public DiskFileService(IUnitOfWork unitOfWork, PermissionContext dbContext, IMapper mapper, IBaseRepository<DiskFolder> diskFolderRepository, IBaseRepository<DiskFile> diskFileRepository, IBaseRepository<SysUser> sysUserRepository)
  24. {
  25. this._unitOfWork = unitOfWork;
  26. this._dbContext = dbContext;
  27. this._mapper = mapper;
  28. this._diskFolderRepository = diskFolderRepository;
  29. this._diskFileRepository = diskFileRepository;
  30. this._sysUserRepository = sysUserRepository;
  31. }
  32. public bool AddModel(DiskFile model)
  33. {
  34. try
  35. {
  36. model.GuidId = Guid.NewGuid().ToString();
  37. model.IsEnabled = true;
  38. model.DeleteMark = false;
  39. model.CreateTime = DateTime.Now;
  40. model.CreateUser = "admin";
  41. var res = _diskFileRepository.Save(model);
  42. return res;
  43. }
  44. catch (Exception ex)
  45. {
  46. throw ex;
  47. }
  48. }
  49. public List<BaseFile> GetBaseFilesByUserId(int userid)
  50. {
  51. try
  52. {
  53. if (!userid.IsEmpty() && userid > 0)
  54. {
  55. List<BaseFile> files = new List<BaseFile>();
  56. BaseFile baseFile = null;
  57. var folderlist =
  58. _diskFolderRepository.LoadAll(
  59. f => f.UserId == userid && f.IsEnabled == true && f.DeleteMark == false).ToList();
  60. if (folderlist.Any())
  61. {
  62. foreach (var folder in folderlist)
  63. {
  64. baseFile = new BaseFile
  65. {
  66. FileId = folder.Id,
  67. Name = folder.FolderName,
  68. ParentId = folder.Parent,
  69. FileType = 0,
  70. DownloadPath = "",
  71. TotalBytes = folder.FolderLength.Value,
  72. ModifiedTime = folder.CreateTime.Value
  73. };
  74. files.Add(baseFile);
  75. }
  76. }
  77. var filelist =
  78. _diskFileRepository.LoadAll(
  79. f => f.UserId == userid && f.IsEnabled == true && f.DeleteMark == false).ToList();
  80. if (filelist.Any())
  81. {
  82. foreach (var file in filelist)
  83. {
  84. baseFile = new BaseFile
  85. {
  86. FileId = file.Id,
  87. Name = file.FileName,
  88. ParentId = file.FolderId ?? 0,
  89. FileType = 1,
  90. DownloadPath = file.FileUrl,
  91. TotalBytes = file.FileSize.Value,
  92. ModifiedTime = file.CreateTime.Value
  93. };
  94. files.Add(baseFile);
  95. }
  96. }
  97. return files;
  98. }
  99. else
  100. {
  101. return null;
  102. }
  103. }
  104. catch (Exception ex)
  105. {
  106. throw ex;
  107. }
  108. }
  109. #region api
  110. public List<NetDiskFile> GetBaseFilesByUserIdApi(int userid)
  111. {
  112. try
  113. {
  114. if (!userid.IsEmpty() && userid > 0)
  115. {
  116. List<BaseFile> files = new List<BaseFile>();
  117. BaseFile baseFile = null;
  118. var folderlist =
  119. _diskFolderRepository.LoadAll(
  120. f => f.UserId == userid && f.IsEnabled == true && f.DeleteMark == false).ToList();
  121. if (folderlist.Any())
  122. {
  123. foreach (var folder in folderlist)
  124. {
  125. baseFile = new BaseFile
  126. {
  127. FileId = folder.Id,
  128. Name = folder.FolderName,
  129. ParentId = folder.Parent,
  130. FileType = 0,
  131. DownloadPath = "",
  132. TotalBytes = folder.FolderLength.Value,
  133. ModifiedTime = folder.CreateTime.Value
  134. };
  135. files.Add(baseFile);
  136. }
  137. }
  138. var filelist =
  139. _diskFileRepository.LoadAll(
  140. f => f.UserId == userid && f.IsEnabled == true && f.DeleteMark == false).ToList();
  141. if (filelist.Any())
  142. {
  143. foreach (var file in filelist)
  144. {
  145. baseFile = new BaseFile
  146. {
  147. FileId = file.Id,
  148. Name = file.FileName,
  149. ParentId = file.FolderId ?? 0,
  150. FileType = int.Parse(file.FileType),
  151. DownloadPath = file.FileUrl,
  152. TotalBytes = file.FileSize.Value,
  153. ModifiedTime = file.CreateTime.Value
  154. };
  155. files.Add(baseFile);
  156. }
  157. }
  158. //递归
  159. List<NetDiskFile> diskFilelist = new List<NetDiskFile>();
  160. NetDiskFile diskFile = null;
  161. var d = files.Where(f => f.ParentId == 0).ToList();
  162. //foreach (var fmodel in files.Where(f => f.ParentId == null || f.ParentId == 0))
  163. foreach (var fmodel in d)
  164. {
  165. diskFile = new NetDiskFile
  166. {
  167. FileId = fmodel.FileId,
  168. Name = fmodel.Name,
  169. FileType = fmodel.FileType,
  170. TotalBytes = fmodel.TotalBytes,
  171. DownloadPath = fmodel.DownloadPath,
  172. ModifiedTime = fmodel.ModifiedTime,
  173. ChildFiles = CreateChildTree(files, fmodel)
  174. };
  175. diskFilelist.Add(diskFile);
  176. }
  177. var data = diskFilelist.OrderBy(r => r.FileType).ToList();
  178. return data;
  179. }
  180. else
  181. {
  182. return null;
  183. }
  184. }
  185. catch (Exception ex)
  186. {
  187. throw ex;
  188. }
  189. }
  190. /// <summary>
  191. /// 递归生成子树
  192. /// </summary>
  193. /// <param name="list"></param>
  194. /// <param name="model"></param>
  195. /// <returns></returns>
  196. private List<NetDiskFile> CreateChildTree(List<BaseFile> list, BaseFile model)
  197. {
  198. int parentid = model.FileId;//根节点ID
  199. List<NetDiskFile> nodeList = new List<NetDiskFile>();
  200. //var children = list.Where(t => t.ParentId == parentid);
  201. var children = list.Where(t => t.ParentId == parentid);
  202. if (children.Any())
  203. {
  204. NetDiskFile node = null;
  205. foreach (var chl in children)
  206. {
  207. node = new NetDiskFile
  208. {
  209. FileId = chl.FileId,
  210. Name = chl.Name,
  211. FileType = chl.FileType,
  212. TotalBytes = chl.TotalBytes,
  213. DownloadPath = chl.DownloadPath,
  214. ModifiedTime = chl.ModifiedTime,
  215. ChildFiles = CreateChildTree(list, chl)
  216. };
  217. nodeList.Add(node);
  218. }
  219. }
  220. return nodeList;
  221. }
  222. public bool SaveFileApi(DiskFile model)
  223. {
  224. try
  225. {
  226. int userid = model.UserId;
  227. var username = _sysUserRepository.Get(userid).Account;
  228. model.GuidId = Guid.NewGuid().ToString();
  229. //model.FolderId = folderid ?? null;
  230. model.UserId = userid;
  231. model.DownloadCount = 0;
  232. model.IsEnabled = true;
  233. model.DeleteMark = false;
  234. model.CreateTime = DateTime.Now;
  235. model.CreateUser = username;
  236. var res = _diskFileRepository.Save(model);
  237. return res;
  238. }
  239. catch (Exception ex)
  240. {
  241. throw ex;
  242. }
  243. }
  244. public bool EditFileApi(DiskFile model)
  245. {
  246. try
  247. {
  248. int userid = model.UserId;
  249. var file = _diskFileRepository.Get(model.Id);
  250. var username = _sysUserRepository.Get(userid).Account;
  251. file.FileName = model.FileName;
  252. file.ModifyTime = DateTime.Now;
  253. file.ModifyUser = username;
  254. var res = _diskFileRepository.Update(file);
  255. return res;
  256. }
  257. catch (Exception ex)
  258. {
  259. throw ex;
  260. }
  261. }
  262. public bool EditFileApi(int fileid, string newfilename, int userid)
  263. {
  264. try
  265. {
  266. var file = _diskFileRepository.Get(fileid);
  267. var username = _sysUserRepository.Get(userid).Account;
  268. file.FileName = newfilename;
  269. file.ModifyTime = DateTime.Now;
  270. file.ModifyUser = username;
  271. var res = _diskFileRepository.Update(file);
  272. return res;
  273. }
  274. catch (Exception ex)
  275. {
  276. throw ex;
  277. }
  278. }
  279. public bool DeleteFileApi(int fileid)
  280. {
  281. try
  282. {
  283. var file = _diskFileRepository.Get(fileid);
  284. file.DeleteMark = true;
  285. file.ModifyTime = DateTime.Now;
  286. var res = _diskFileRepository.Update(file);
  287. return res;
  288. }
  289. catch (Exception ex)
  290. {
  291. throw ex;
  292. }
  293. }
  294. #endregion
  295. }
  296. }