MiddleService.cs 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using GxPress.Common.Exceptions;
  6. using GxPress.Repository.Interface;
  7. using GxPress.Request.App.Middle;
  8. using GxPress.Request.Notice;
  9. using GxPress.Service.Interface.Middle;
  10. using Datory;
  11. using GxPress.Entity.Middle;
  12. using GxPress.Result.App.Middle;
  13. using System.Transactions;
  14. using GxPress.Repository.Interface.Collection;
  15. using GxPress.Repository.Interface.Note;
  16. using GxPress.Repository.Interface.Missive;
  17. using GxPress.Common.Tools;
  18. using GxPress.Repository.Interface.Analyze;
  19. using GxPress.Service.Interface.UserMiddle;
  20. using GxPress.Repository.Interface.RecordFolder;
  21. using GxPress.Service.Interface.Analyze;
  22. using GxPress.Request.App.Analyze;
  23. namespace GxPress.Service.Implement.Middle
  24. {
  25. public class MiddleService : IMiddleService
  26. {
  27. private readonly IMiddleRepository _middleRepository;
  28. private readonly IFolderUserRepository _folderUserRepository;
  29. private readonly IUserRepository _userRepository;
  30. private readonly ICollectionRepository _collectionRepository;
  31. private readonly INoteRepository _noteRepository;
  32. private readonly IMissiveRepository _missiveRepository;
  33. private readonly IGroupRepository _groupRepository;
  34. private readonly IAnalyzeRepository _analyzeRepository;
  35. private readonly INoticeRepository _noticeRepository;
  36. private readonly IUserMiddleService _userMiddleService;
  37. private readonly INoticeAddresseeRepository _noticeAddresseeRepository;
  38. private readonly IMissiveAddresseeRepository _missiveAddresseeRepository;
  39. private readonly IRecordFolderRepository recordFolderRepository;
  40. private readonly IAnalyzeService analyzeService;
  41. public MiddleService(IMiddleRepository middleRepository, IFolderUserRepository folderUserRepository,
  42. IUserRepository userRepository, ICollectionRepository collectionRepository, INoteRepository noteRepository,
  43. IMissiveRepository missiveRepository, IGroupRepository groupRepository,
  44. IMissiveAnalyzeRepository missiveAnalyzeRepository, INoticeRepository noticeRepository, IAnalyzeRepository analyzeRepository, IUserMiddleService userMiddleService, INoticeAddresseeRepository noticeAddresseeRepository, IMissiveAddresseeRepository missiveAddresseeRepository, IRecordFolderRepository recordFolderRepository, IAnalyzeService analyzeService)
  45. {
  46. _middleRepository = middleRepository;
  47. _folderUserRepository = folderUserRepository;
  48. _userRepository = userRepository;
  49. _collectionRepository = collectionRepository;
  50. _noteRepository = noteRepository;
  51. _missiveRepository = missiveRepository;
  52. _groupRepository = groupRepository;
  53. _noticeRepository = noticeRepository;
  54. _analyzeRepository = analyzeRepository;
  55. _userMiddleService = userMiddleService;
  56. _noticeAddresseeRepository = noticeAddresseeRepository;
  57. _missiveAddresseeRepository = missiveAddresseeRepository;
  58. this.recordFolderRepository = recordFolderRepository;
  59. this.analyzeService = analyzeService;
  60. }
  61. /// <summary>
  62. /// 添加文件夹
  63. /// </summary>
  64. /// <param name="request"></param>
  65. /// <returns></returns>
  66. public async Task<int> InsertAsync(MiddleInsertRequest request)
  67. {
  68. var folderRoleId = new List<int> { 1, 2, 3 };
  69. if (!folderRoleId.Contains(request.RoleId) && (request.FolderType == 3 || request.FolderType == 4))
  70. throw new BusinessException("文件夹权限有误!");
  71. var oldMiddle = await _middleRepository.GetMiddleAsync(Q
  72. .Where(nameof(Entity.Middle.Middle.UserId), request.UserId)
  73. .Where(nameof(Entity.Middle.Middle.AttributeValue), 2)
  74. .Where(nameof(Entity.Middle.Middle.FolderType), request.FolderType)
  75. .Where(nameof(Entity.Middle.Middle.FolderName), request.FolderName)
  76. .Where(nameof(Entity.Middle.Middle.ParentId), request.ParentId).Where(nameof(Entity.Middle.Middle.IsDelete), false));
  77. if (string.IsNullOrEmpty(request.FolderName))
  78. throw new BusinessException("文件名称未填写!");
  79. if (oldMiddle != null)
  80. throw new BusinessException("文件夹名称重复,请重新命名!");
  81. var middle = new Entity.Middle.Middle
  82. {
  83. FolderName = request.FolderName,
  84. FolderType = request.FolderType,
  85. IsTop = false,
  86. AttributeValue = 2,
  87. ParentId = request.ParentId,
  88. RoleId = request.RoleId,
  89. UserId = request.UserId,
  90. Sort = 0
  91. };
  92. //存在父级
  93. var middleDto = new Entity.Middle.Middle();
  94. if (request.ParentId > 0)
  95. {
  96. //获取父级数据
  97. middleDto = await _middleRepository.GetMiddleAsync(request.ParentId);
  98. if (middleDto != null)
  99. {
  100. middle.RoleId = middleDto.RoleId;
  101. request.RoleId = middleDto.RoleId;
  102. if (middleDto.ParentId == 0)
  103. middle.MiddleSonId = middleDto.Id;
  104. else middle.MiddleSonId = middleDto.MiddleSonId;
  105. }
  106. }
  107. if (request.RoleId == 0)
  108. middle.RoleId = 1;
  109. if (request.RoleId == 3)
  110. {
  111. if (request.UserIds == null)
  112. request.UserIds = new List<int>();
  113. if (request.UserIds.Count == 0 && request.UserMiddles.Count == 0 && request.ParentId == 0)
  114. throw new BusinessException("共享用户必须");
  115. }
  116. if (request.RoleId > 0)
  117. middle.RoleId = request.RoleId;
  118. var middleId = await _middleRepository.InsertAsync(middle);
  119. if (middle.ParentId == 0)
  120. {
  121. middle = await _middleRepository.GetMiddleAsync(middleId);
  122. if (middle != null)
  123. {
  124. middle.MiddleSonId = middleId;
  125. await _middleRepository.UpdateAsync(middle);
  126. }
  127. }
  128. await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.Sort), middleId)
  129. .Where(nameof(Entity.Middle.Middle.Id), middleId));
  130. if (request.RoleId == 3 && request.ParentId == 0)
  131. //添加人员
  132. await InsertFolderUsers(request, middleId);
  133. return middleId;
  134. }
  135. /// <summary>
  136. /// 添加文件夹用户
  137. /// </summary>
  138. /// <param name="userIds"></param>
  139. /// <param name="middleId"></param>
  140. /// <returns></returns>
  141. public async Task<bool> InsertFolderUsers(MiddleInsertRequest request, int middleId)
  142. {
  143. //添加
  144. if (request.UserMiddles.Count > 0)
  145. {
  146. foreach (var item in request.UserMiddles)
  147. {
  148. item.DataSourceId = middleId;
  149. item.MiddleType = request.FolderType;
  150. }
  151. //添加中间表
  152. await _userMiddleService.AddUserMiddleAsync(request.UserMiddles);
  153. var users = await _userMiddleService.FindUsersAsync(request.UserMiddles, middleId);
  154. request.UserIds = users.Select(n => n.Id).ToList();
  155. }
  156. if (request.UserIds.Count > 0)
  157. {
  158. var users = await _userRepository.GetAllAsync(Q.WhereIn(nameof(Entity.User.Id), request.UserIds));
  159. //插入用户
  160. var folderUsers = new List<FolderUser>();
  161. foreach (var user in users)
  162. {
  163. var folderUser = new FolderUser();
  164. folderUser.UserId = user.Id;
  165. folderUser.UserName = user.Name;
  166. folderUser.MiddleId = middleId;
  167. folderUsers.Add(folderUser);
  168. }
  169. return await _folderUserRepository.InsertsAsync(folderUsers.ToList());
  170. }
  171. return false;
  172. }
  173. /// <summary>
  174. /// 修改文件夹名称
  175. /// </summary>
  176. /// <param name="request"></param>
  177. /// <returns></returns>
  178. public async Task<bool> UpdateNameAsync(MiddleUpdateNameRequest request)
  179. {
  180. var middle =
  181. await _middleRepository.GetMiddleAsync(Q.Where(nameof(Entity.Middle.Middle.Id), request.MiddleId)
  182. .Where(nameof(Entity.Middle.Middle.AttributeValue), 1));
  183. if (middle == null)
  184. throw new BusinessException("文件不存在");
  185. return await _middleRepository.UpdateAsync(
  186. Q.Set(nameof(Entity.Middle.Middle.FolderName), request.FolderName).Where(
  187. nameof(Entity.Middle.Middle.Id),
  188. request.MiddleId));
  189. }
  190. /// <summary>
  191. /// 添加数据
  192. /// </summary>
  193. /// <param name="request"></param>
  194. /// <returns></returns>
  195. public async Task<int> InsertAsync(MiddleInsertTypeRequest request)
  196. {
  197. var middle = new Entity.Middle.Middle
  198. {
  199. MiddleId = request.MiddleId,
  200. FolderType = request.FolderType,
  201. IsTop = false,
  202. AttributeValue = request.AttributeValue,
  203. ParentId = request.FolderId,
  204. UserId = request.UserId,
  205. MiddleSonId = request.MiddleSonId,
  206. IsAdmin = request.IsAdmin,
  207. NoticeAddresseeType = request.NoticeAddresseeType,
  208. IsRead = false,
  209. IsUpload = false
  210. };
  211. if (request.AttributeValue == 0)
  212. middle.AttributeValue = 1;
  213. var middleId = await _middleRepository.InsertAsync(middle);
  214. await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.Sort), middleId)
  215. .Where(nameof(Entity.Middle.Middle.Id), middleId));
  216. return middleId;
  217. }
  218. /// <summary>
  219. /// 添加数据
  220. /// </summary>
  221. /// <param name="request"></param>
  222. /// <returns></returns>
  223. public async Task<bool> AddOrUpdateAsync(MiddleInsertTypeRequest request)
  224. {
  225. var middle = await _middleRepository.GetMiddleAsync(Q
  226. .Where(nameof(Entity.Middle.Middle.UserId), request.UserId)
  227. .Where(nameof(Entity.Middle.Middle.AttributeValue), 3)
  228. .Where(nameof(Entity.Middle.Middle.FolderType), request.FolderType));
  229. if (middle == null)
  230. {
  231. middle = new Entity.Middle.Middle
  232. {
  233. MiddleId = request.MiddleId,
  234. FolderType = request.FolderType,
  235. IsTop = false,
  236. AttributeValue = request.AttributeValue,
  237. ParentId = request.FolderId,
  238. UserId = request.UserId,
  239. MiddleSonId = request.MiddleSonId
  240. };
  241. var middleId = await _middleRepository.InsertAsync(middle);
  242. //修改Middle sort
  243. await _middleRepository.UpdateAsync(Q.Where(nameof(Entity.Middle.Middle.Id), middleId).Set(nameof(Entity.Middle.Middle.Sort), middleId));
  244. return true;
  245. }
  246. return await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsDelete), false)
  247. .Where(nameof(Entity.Middle.Middle.UserId), request.UserId)
  248. .Where(nameof(Entity.Middle.Middle.AttributeValue), 3));
  249. }
  250. /// <summary>
  251. /// 排序
  252. /// </summary>
  253. /// <param name="request"></param>
  254. /// <returns></returns>
  255. public async Task<bool> MiddleSortAsync(MiddleSortRequest request)
  256. {
  257. return await _middleRepository.SetSortAsync(request);
  258. }
  259. /// <summary>
  260. /// 设置置顶
  261. /// </summary>
  262. /// <param name="id"></param>
  263. /// <returns></returns>
  264. public async Task<bool> SetTopAsync(int id)
  265. {
  266. return await _middleRepository.SetTopAsync(id);
  267. }
  268. /// <summary>
  269. /// 删除 1 通知 2话题 3 收藏 4笔记 5 普通站内信 6匿名站内信 7 小组
  270. /// </summary>
  271. /// <param name="request"></param>
  272. /// <returns></returns>
  273. public async Task<bool> DeleteAsync(NoticeDeRequest request)
  274. {
  275. try
  276. {
  277. using TransactionScope transactionScope = new TransactionScope();
  278. //查询middle
  279. var middles = await _middleRepository.FindAsync(Q.WhereIn(nameof(Entity.Middle.Middle.Id), request.MiddleIds));
  280. var middleIds = request.MiddleIds;
  281. //获取
  282. await _middleRepository.GetAllMiddleChildrenByParentIdAsync(request.MiddleIds, middleIds);
  283. request.MiddleIds = middleIds;
  284. var ids = middles.Select(n => n.MiddleId).ToList();
  285. //收藏
  286. if (request.FolderType == 3)
  287. {
  288. //查询收藏
  289. var collections = await _collectionRepository.GetAllAsync(Q.WhereIn(nameof(Entity.Collection.Id), ids));
  290. foreach (var item in collections)
  291. {
  292. var analyzeRequest = new AnalyzeRequest();
  293. analyzeRequest.AnalyzeType = 3;
  294. analyzeRequest.SourceId = item.CollectionDataId;
  295. analyzeRequest.UserId = item.UserId;
  296. //删除文章收藏
  297. if (item.CollectionType == 1)
  298. {
  299. analyzeRequest.TypeValue = 0;
  300. var analyze = await analyzeService.GetAnalyzeAsync(analyzeRequest);
  301. if (analyze != null)
  302. await _analyzeRepository.DeleteAsync(analyze.Id);
  303. }
  304. //删除话题收藏
  305. if (item.CollectionType == 2)
  306. {
  307. analyzeRequest.TypeValue = 1;
  308. var analyze = await analyzeService.GetAnalyzeAsync(analyzeRequest);
  309. if (analyze != null)
  310. await _analyzeRepository.DeleteAsync(analyze.Id);
  311. }
  312. //删除笔记收藏
  313. if (item.CollectionType == 4)
  314. {
  315. analyzeRequest.TypeValue = 3;
  316. var analyze = await analyzeService.GetAnalyzeAsync(analyzeRequest);
  317. if (analyze != null)
  318. await _analyzeRepository.DeleteAsync(analyze.Id);
  319. }
  320. //删除通知收藏
  321. if (item.CollectionType == 5)
  322. {
  323. analyzeRequest.TypeValue = 2;
  324. var analyze = await analyzeService.GetAnalyzeAsync(analyzeRequest);
  325. if (analyze != null)
  326. await _analyzeRepository.DeleteAsync(analyze.Id);
  327. await _noticeAddresseeRepository.UpdateAsync(Q.Where(nameof(Entity.NoticeAddressee.UserId), request.UserId).WhereIn(nameof(Entity.NoticeAddressee.NoticeId), ids).Set(nameof(Entity.NoticeAddressee.IsDelete), true));
  328. }
  329. //删除站内信收藏
  330. if (item.CollectionType == 6)
  331. {
  332. analyzeRequest.TypeValue = 4;
  333. var analyze = await analyzeService.GetAnalyzeAsync(analyzeRequest);
  334. if (analyze != null)
  335. await _analyzeRepository.DeleteAsync(analyze.Id);
  336. await _missiveAddresseeRepository.UpdateAsync(Q.Where(nameof(Entity.Missive.MissiveAddressee.UserId), request.UserId).WhereIn(nameof(Entity.Missive.MissiveAddressee.MissiveId), ids).Set(nameof(Entity.Missive.MissiveAddressee.IsDelete), true));
  337. }
  338. //删除收藏会议
  339. if (item.CollectionType == 8)
  340. {
  341. analyzeRequest.TypeValue = 10;
  342. var analyze = await analyzeService.GetAnalyzeAsync(analyzeRequest);
  343. if (analyze != null)
  344. await _analyzeRepository.DeleteAsync(analyze.Id);
  345. }
  346. //收藏笔记文件夹
  347. if (item.CollectionType == 12 || item.CollectionType == 13)
  348. {
  349. analyzeRequest.TypeValue = item.CollectionType;
  350. var analyze = await analyzeService.GetAnalyzeAsync(analyzeRequest);
  351. if (analyze != null)
  352. await _analyzeRepository.DeleteAsync(analyze.Id);
  353. }
  354. }
  355. //删除收藏
  356. request.IsDelete = true;
  357. //删除
  358. await _collectionRepository.RecursionDeleteAsync(request.MiddleIds);
  359. }
  360. //删除笔记
  361. if (request.FolderType == 4)
  362. {
  363. await _noteRepository.UpdateAsync(Q.WhereIn(nameof(Entity.Note.Note.Id), ids).Set(nameof(Entity.Note.Note.IsDelete), true));
  364. //删除默认共享文件夹
  365. await recordFolderRepository.DeleteAsync(request.FolderType, request.UserId, request.MiddleIds);
  366. }
  367. //站内信
  368. // if (request.FolderType == 5)
  369. // await _missiveRepository.DeleteAsync(Q.WhereIn(nameof(Entity.Missive.Missive.Id), ids));
  370. //小组
  371. if (request.FolderType == 7)
  372. await _groupRepository.DeleteAsync(Q.WhereIn(nameof(Entity.Group.Id), ids));
  373. // //删除通知
  374. // if (request.FolderType == 1 && request.IsDelete)
  375. // await _noticeRepository.DeleteAsync(Q.WhereIn(nameof(Entity.Notice.Id), middles.Select(n => n.MiddleId)));
  376. // //删除站内信
  377. // if (request.FolderType == 5 && request.IsDelete)
  378. // await _missiveRepository.DeleteAsync(Q.WhereIn(nameof(Entity.Missive.Missive.Id), middles.Select(n => n.MiddleId)));
  379. //删除通知
  380. if (request.FolderType == 1)
  381. await _noticeAddresseeRepository.UpdateAsync(Q.Where(nameof(Entity.NoticeAddressee.UserId), request.UserId).WhereIn(nameof(Entity.NoticeAddressee.NoticeId), ids).Set(nameof(Entity.NoticeAddressee.IsDelete), true).Set(nameof(Entity.NoticeAddressee.IsRead), true));
  382. //删除站内信
  383. if (request.FolderType == 5)
  384. await _missiveAddresseeRepository.UpdateAsync(Q.Where(nameof(Entity.Missive.MissiveAddressee.UserId), request.UserId).WhereIn(nameof(Entity.Missive.MissiveAddressee.MissiveId), ids).Set(nameof(Entity.Missive.MissiveAddressee.IsDelete), true).Set(nameof(Entity.Missive.MissiveAddressee.IsRead), true));
  385. if (request.FolderType == 1 || request.FolderType == 5)
  386. {
  387. foreach (var item in middles)
  388. {
  389. if (item.AttributeValue == 2)
  390. {
  391. //永久删除文件夹
  392. await _middleRepository.DeleteAsync(Q.Where(nameof(Entity.Middle.Middle.Id), item.Id));
  393. //修改文件夹下级数据
  394. await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsDelete), 1).Where(nameof(Entity.Middle.Middle.ParentId), item.Id));
  395. }
  396. }
  397. }
  398. //删除信源以及文件夹
  399. if (request.FolderType == 10)
  400. {
  401. foreach (var middle in middles)
  402. {
  403. //判断是否文件夹
  404. if (middle.AttributeValue == 2)
  405. await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.ParentId), 0).Where(nameof(Entity.Middle.Middle.ParentId), middle.Id).Where(nameof(Entity.Middle.Middle.FolderType), 10));
  406. }
  407. }
  408. await _middleRepository.DeleteAsync(request);
  409. transactionScope.Complete();
  410. }
  411. catch (Exception ex)
  412. {
  413. throw new BusinessException(ex.Message);
  414. }
  415. return true;
  416. }
  417. public async Task<bool> RecoverDeleteAsync(NoticeDeRequest request)
  418. {
  419. return await _middleRepository.RecoverDeleteAsync(request);
  420. }
  421. public async Task<bool> SetMove(MiddleMoveRequest request)
  422. {
  423. return await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.ParentId), request.ParentId).WhereIn(nameof(Entity.Middle.Middle.Id), request.Ids));
  424. }
  425. /// <summary>
  426. /// 恢复全部
  427. /// </summary>
  428. /// <param name="folderType"></param>
  429. /// <returns></returns>
  430. public async Task<bool> RecoverAllAsync(int folderType, int userId)
  431. {
  432. return await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsDelete), false).Where(nameof(Entity.Middle.Middle.FolderType), folderType).Where(nameof(Entity.Middle.Middle.UserId), userId));
  433. }
  434. /// <summary>
  435. /// 修改文件夹名称
  436. /// </summary>
  437. /// <param name="request"></param>
  438. /// <returns></returns>
  439. public async Task<bool> UpdateFolderNameAsync(MiddleFolderNameRequest request)
  440. {
  441. var middle = await _middleRepository.GetMiddleAsync(request.Id);
  442. if (middle == null)
  443. throw new BusinessException("文件夹不存在");
  444. var oldMiddle = await _middleRepository.GetMiddleAsync(Q
  445. .Where(nameof(Entity.Middle.Middle.UserId), request.UserId)
  446. .Where(nameof(Entity.Middle.Middle.AttributeValue), 2)
  447. .Where(nameof(Entity.Middle.Middle.FolderType), middle.FolderType)
  448. .Where(nameof(Entity.Middle.Middle.FolderName), request.FolderName)
  449. .Where(nameof(Entity.Middle.Middle.IsDelete), false));
  450. if (oldMiddle != null && oldMiddle.Id != middle.Id)
  451. throw new BusinessException("文件夹名称重复,请重新命名!");
  452. return await _middleRepository.UpdateFolderNameAsync(request);
  453. }
  454. /// <summary>
  455. /// 查询文件夹
  456. /// </summary>
  457. /// <param name="request"></param>
  458. /// <returns></returns>
  459. public async Task<List<MiddleSearchFolderResult>> SearchFolderAsync(MiddleSearchFolderRequest request)
  460. {
  461. var query = Q.NewQuery();
  462. query.Where(nameof(Entity.Middle.Middle.ParentId), request.ParentId)
  463. .Where(nameof(Entity.Middle.Middle.AttributeValue), 2)
  464. .Where(nameof(Entity.Middle.Middle.FolderType), request.TypeId)
  465. .Where(nameof(Entity.Middle.Middle.UserId), request.UserId)
  466. .Where(nameof(Entity.Middle.Middle.IsDelete), false).WhereNotIn(nameof(Entity.Middle.Middle.Id), request.FolderIds);
  467. if (!string.IsNullOrWhiteSpace(request.KeyWord))
  468. query.WhereLike(nameof(Entity.Middle.Middle.FolderName), $"%{request.KeyWord}%");
  469. if (request.RoleId > 0)
  470. query.Where(nameof(Entity.Middle.Middle.RoleId), request.RoleId);
  471. var middles = await _middleRepository.FindAsync(query.OrderByDesc(nameof(Entity.Middle.Middle.IsTop), nameof(Entity.Middle.Middle.Sort), nameof(Entity.Middle.Middle.LastModifiedDate)));
  472. List<MiddleSearchFolderResult> result = new List<MiddleSearchFolderResult>();
  473. foreach (var item in middles)
  474. {
  475. MiddleSearchFolderResult middleSearchFolderResult = new MiddleSearchFolderResult
  476. {
  477. Name = item.FolderName,
  478. Id = item.Id,
  479. IsDisable = request.FolderIds.Any(n => n.Equals(item.Id)),
  480. RoleId = item.RoleId,
  481. IsFolder = await _middleRepository.IsFolderAsync(item.Id),
  482. IsTop = item.IsTop
  483. };
  484. if (item.RoleId == 3)
  485. {
  486. var sourceId = item.Id;
  487. if (item.ParentId != 0)
  488. sourceId = item.MiddleSonId;
  489. var userMiddles = await _userMiddleService.FindUserMiddlesAsync(item.FolderType, sourceId);
  490. // var folderUsers = await _folderUserRepository.GetAllAsync(Q.Where(nameof(FolderUser.MiddleId), item.Id).OrderByDesc(nameof(FolderUser.CreatedDate)).Take(10));
  491. middleSearchFolderResult.EnjoyUser = StringUtils.ObjectCollectionToString(userMiddles.Select(n => n.SourceName), "、");
  492. }
  493. result.Add(middleSearchFolderResult);
  494. }
  495. return result;
  496. }
  497. /// <summary>
  498. /// 修改权限
  499. /// </summary>
  500. /// <param name="request"></param>
  501. /// <returns></returns>
  502. public async Task<bool> UpdateFolderRoleAsync(MiddleUpdateFolderRoleRequest request)
  503. {
  504. var middle = await _middleRepository.GetMiddleAsync(request.MiddleId);
  505. if (middle == null)
  506. throw new BusinessException("文件夹不存在");
  507. var oldMiddle = await _middleRepository.GetMiddleAsync(Q
  508. .Where(nameof(Entity.Middle.Middle.UserId), middle.UserId)
  509. .Where(nameof(Entity.Middle.Middle.AttributeValue), 2)
  510. .Where(nameof(Entity.Middle.Middle.FolderType), middle.FolderType)
  511. .Where(nameof(Entity.Middle.Middle.FolderName), request.FolderName)
  512. .Where(nameof(Entity.Middle.Middle.ParentId), middle.ParentId).Where(nameof(Entity.Middle.Middle.IsDelete), false));
  513. if (string.IsNullOrEmpty(request.FolderName))
  514. throw new BusinessException("文件名称未填写");
  515. if (oldMiddle != null && oldMiddle.Id != middle.Id)
  516. throw new BusinessException("文件夹名称重复,请重新命名!");
  517. if (middle.RoleId == 3)
  518. {
  519. if (request.RoleId != 3)
  520. {
  521. //删除共享用户
  522. await _folderUserRepository.DeleteAsync(Q.Where(nameof(Entity.Middle.FolderUser.MiddleId), middle.Id));
  523. //删除
  524. await _userMiddleService.DeleteAsync(middle.Id, middle.FolderType);
  525. }
  526. }
  527. if (request.RoleId == 3 && middle.ParentId == 0)
  528. {
  529. if (request.UserIds.Count == 0 && request.UserMiddles.Count == 0)
  530. throw new BusinessException("共享成员必须");
  531. //添加人员
  532. await _folderUserRepository.DeleteAsync(Q.Where(nameof(FolderUser.MiddleId), request.MiddleId));
  533. var middleInsertRequest = new MiddleInsertRequest();
  534. middleInsertRequest.UserIds = request.UserIds;
  535. middleInsertRequest.UserMiddles = request.UserMiddles;
  536. middleInsertRequest.FolderType = middle.FolderType;
  537. if (request.UserMiddles.Count > 0)
  538. {
  539. //删除原有的数据
  540. await _userMiddleService.DeleteAsync(middle.Id, middle.FolderType);
  541. //await _userMiddleService.AddUserMiddleAsync(request.UserMiddles);
  542. //查询用户
  543. // var users = await _userMiddleService.FindUsersAsync(request.UserMiddles, middle.UserId);
  544. // middleInsertRequest.UserIds = users.Select(n => n.Id).ToList();
  545. }
  546. await InsertFolderUsers(middleInsertRequest, request.MiddleId);
  547. }
  548. middle.RoleId = request.RoleId;
  549. middle.FolderName = request.FolderName;
  550. await _middleRepository.UpdateAsync(middle);
  551. //修改子集权限
  552. if (middle.ParentId == 0)
  553. await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.RoleId), request.RoleId).Where(nameof(Entity.Middle.Middle.MiddleSonId), middle.Id));
  554. return true;
  555. }
  556. /// <summary>
  557. /// 修改共享文件夹下的所有文件夹属性
  558. /// </summary>
  559. /// <param name="request"></param>
  560. /// <returns></returns>
  561. public async Task<bool> UpdateChildrenMiddleFolder(MiddleUpdateFolderRoleRequest request)
  562. {
  563. //获取下级数据
  564. var middles = await _middleRepository.GetMiddleChildrenAsync(request.MiddleId);
  565. if (middles.Count() == 0)
  566. return true;
  567. foreach (var item in middles)
  568. {
  569. if (request.UserMiddles.Count > 0)
  570. {
  571. var middleInsertRequest = new MiddleInsertRequest();
  572. middleInsertRequest.UserIds = request.UserIds;
  573. middleInsertRequest.UserMiddles = request.UserMiddles;
  574. //删除原有的数据
  575. await _userMiddleService.DeleteAsync(item.Id, item.FolderType);
  576. await _userMiddleService.AddUserMiddleAsync(request.UserMiddles);
  577. //查询用户
  578. var users = await _userMiddleService.FindUsersAsync(request.UserMiddles, item.UserId);
  579. middleInsertRequest.UserIds = users.Select(n => n.Id).ToList();
  580. //插入共享成员
  581. await InsertFolderUsers(middleInsertRequest, request.MiddleId);
  582. item.RoleId = request.RoleId;
  583. item.FolderName = request.FolderName;
  584. //修改
  585. await _middleRepository.UpdateAsync(item);
  586. request.MiddleId = item.Id;
  587. //修改下级权限和共享范围人
  588. await UpdateChildrenMiddleFolder(request);
  589. }
  590. }
  591. return true;
  592. }
  593. /// <summary>
  594. /// 根据文件夹ID获取文件夹信息
  595. /// </summary>
  596. /// <param name="middleId"></param>
  597. /// <returns></returns>
  598. public async Task<MiddleFolderInfoResult> GetFolderInfo(int middleId)
  599. {
  600. var result = new MiddleFolderInfoResult();
  601. var middle = await _middleRepository.GetMiddleAsync(middleId);
  602. result.Id = middle.Id;
  603. result.FolderName = middle.FolderName;
  604. result.RoleId = middle.RoleId;
  605. result.FolderUsers = await _folderUserRepository.GetAllAsync(middleId);
  606. //获取共享人员
  607. if (result.RoleId == 3)
  608. {
  609. var sourceId = middle.Id;
  610. if (middle.ParentId > 0)
  611. sourceId = middle.MiddleSonId;
  612. var userMiddles = await _userMiddleService.FindUserMiddlesAsync(middle.FolderType, sourceId);
  613. result.EnjoyUser = StringUtils.ObjectCollectionToString(userMiddles.Select(n => n.SourceName), "、");
  614. // var folderUsers = await _folderUserRepository.GetAllAsync(Q.Where(nameof(FolderUser.MiddleId), middle.Id).OrderByDesc(nameof(FolderUser.CreatedDate)).Take(10));
  615. // result.EnjoyUser = StringUtils.ObjectCollectionToString(folderUsers.Select(n => n.UserName), "、");
  616. }
  617. result.UserMiddles = await _userMiddleService.FindUserMiddlesAsync(middle.FolderType, middleId);
  618. return result;
  619. }
  620. /// <summary>
  621. /// 获取默认的共享文件夹范围
  622. /// </summary>
  623. /// <param name="userId"></param>
  624. /// <returns></returns>
  625. public async Task<MiddleDefaultResult> GetEnjoyDefaultAsync(int userId, int folderType)
  626. {
  627. // var middle = await _middleRepository.GetMiddleAsync(Q.Where(nameof(Entity.Middle.Middle.UserId), userId).WhereIn(nameof(Entity.Middle.Middle.RoleId), new List<int> { 1, 3 }).Where(nameof(Entity.Middle.Middle.IsDefault), true));
  628. // var result = new MiddleDefaultResult();
  629. // result.IsDefault = middle != null;
  630. // result.FolderName = middle == null ? "" : middle.FolderName;
  631. // result.MiddleId = middle == null ? 0 : middle.Id;
  632. var recordFolder = await recordFolderRepository.GetAsync(folderType, userId);
  633. var result = new MiddleDefaultResult();
  634. result.IsDefault = recordFolder != null;
  635. result.FolderName = recordFolder == null ? "" : recordFolder.FolderName;
  636. result.FolderType = recordFolder == null ? 0 : recordFolder.FolderType;
  637. result.MiddleId = recordFolder == null ? 0 : recordFolder.FolderId;
  638. return result;
  639. }
  640. /// <summary>
  641. /// 获取话题 笔记共享范围文件夹
  642. /// </summary>
  643. /// <param name="request"></param>
  644. /// <returns></returns>
  645. public async Task<List<MiddleSearchFolderResult>> SearchNoteFolderAsync(MiddleSearchFolderRequest request)
  646. {
  647. var query = Q.NewQuery();
  648. query.Where(nameof(Entity.Middle.Middle.ParentId), request.ParentId)
  649. .Where(nameof(Entity.Middle.Middle.AttributeValue), 2)
  650. .Where(nameof(Entity.Middle.Middle.FolderType), request.TypeId)
  651. .Where(nameof(Entity.Middle.Middle.UserId), request.UserId)
  652. .Where(nameof(Entity.Middle.Middle.IsDelete), false).WhereNotIn(nameof(Entity.Middle.Middle.Id), request.FolderIds).WhereIn(nameof(Entity.Middle.Middle.RoleId), new List<int>() { 1, 3 });
  653. if (!string.IsNullOrWhiteSpace(request.KeyWord))
  654. query.Where(nameof(Entity.Middle.Middle.FolderName), request.KeyWord);
  655. var middles = await _middleRepository.FindAsync(query.OrderByDesc(
  656. nameof(Entity.Middle.Middle.AttributeValue), nameof(Entity.Middle.Middle.IsTop),
  657. nameof(Entity.Middle.Middle.CreatedDate)));
  658. List<MiddleSearchFolderResult> result = new List<MiddleSearchFolderResult>();
  659. foreach (var item in middles)
  660. {
  661. MiddleSearchFolderResult middleSearchFolderResult = new MiddleSearchFolderResult
  662. {
  663. Name = item.FolderName,
  664. Id = item.Id,
  665. IsDisable = request.FolderIds.Any(n => n.Equals(item.Id)),
  666. RoleId = item.RoleId,
  667. IsFolder = await _middleRepository.IsFolderAsync(item.Id),
  668. IsTop = item.IsTop
  669. };
  670. if (item.RoleId == 3)
  671. {
  672. var sourceId = item.Id;
  673. if (item.ParentId != 0)
  674. sourceId = item.MiddleSonId;
  675. var userMiddles = await _userMiddleService.FindUserMiddlesAsync(item.FolderType, sourceId);
  676. // var folderUsers = await _folderUserRepository.GetAllAsync(Q.Where(nameof(FolderUser.MiddleId), item.Id).OrderByDesc(nameof(FolderUser.CreatedDate)).Take(10));
  677. middleSearchFolderResult.EnjoyUser = StringUtils.ObjectCollectionToString(userMiddles.Select(n => n.SourceName), "、");
  678. //middleSearchFolderResult.EnjoyUser = StringUtils.ObjectCollectionToString(folderUsers.Select(n => n.UserName), "、");
  679. }
  680. result.Add(middleSearchFolderResult);
  681. }
  682. return result;
  683. }
  684. /// <summary> =-
  685. /// 删除全部
  686. /// </summary>
  687. /// <param name="folderType"></param>
  688. /// <param name="userId"></param>
  689. /// <returns></returns>
  690. public async Task<bool> DeleteAllAsync(int folderType, int userId)
  691. {
  692. return await _middleRepository.DeleteAsync(Q.Where(nameof(Entity.Middle.Middle.FolderType), folderType).Where(nameof(Entity.Middle.Middle.UserId), userId).Where(nameof(Entity.Middle.Middle.IsDelete), true));
  693. }
  694. }
  695. }