NoticeService.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using System.Transactions;
  6. using AutoMapper;
  7. using Datory;
  8. using GxPress.Common.Exceptions;
  9. using GxPress.Common.Page;
  10. using GxPress.Common.Tools;
  11. using GxPress.Entity;
  12. using GxPress.EnumConst;
  13. using GxPress.Repository.Interface;
  14. using GxPress.Request.Analyze;
  15. using GxPress.Request.Notice;
  16. using GxPress.Result;
  17. using GxPress.Result.Notice;
  18. using GxPress.Service.Interface.Analyze;
  19. using GxPress.Service.Interface.Middle;
  20. using GxPress.Service.Interface.Notice;
  21. using GxPress.Service.Interface.Visit;
  22. using Newtonsoft.Json;
  23. using GxPress.Service.Interface.UserMiddle;
  24. using GxPress.Service.Interface.ContentJson;
  25. using GxPress.Service.Interface.CommonSqlKata;
  26. using GxPress.Repository.Interface.WorkFlow;
  27. namespace GxPress.Service.Implement.Notice
  28. {
  29. public partial class NoticeService : INoticeService
  30. {
  31. private readonly IUserRepository _userRepository;
  32. private readonly INoticeRepository _noticeRepository;
  33. private readonly ICcRepository _ccRepository;
  34. private readonly IAddresseeRepository _addresseeRepository;
  35. private readonly IDepartmentRepository _departmentRepository;
  36. private readonly IMiddleService _middleService;
  37. private readonly IMiddleRepository _middleRepository;
  38. private readonly IMapper _mapper;
  39. private readonly IAnalyzeService _analyzeService;
  40. private readonly IVisitService _visitService;
  41. private readonly ICommentRepository _commentRepository;
  42. private readonly IUserMiddleService _userMiddleService;
  43. private readonly IContentJsonService _contentJsonService;
  44. private readonly ICommonSqlKataService commonSqlKataService;
  45. private readonly IFlowTodoRepository flowTodoRepository;
  46. public NoticeService(IUserRepository userRepository, IMapper mapper, INoticeRepository noticeRepository,
  47. ICcRepository ccRepository, IAddresseeRepository addresseeRepository,
  48. IDepartmentRepository departmentRepository, IMiddleService middleService,
  49. IMiddleRepository middleRepository, IAnalyzeService analyzeService,
  50. ICommentRepository commentRepository, IVisitService visitService,
  51. IUserMiddleService userMiddleService,
  52. IContentJsonService contentJsonService,
  53. ICommonSqlKataService commonSqlKataService,
  54. IFlowTodoRepository flowTodoRepository)
  55. {
  56. _noticeRepository = noticeRepository;
  57. _userRepository = userRepository;
  58. _addresseeRepository = addresseeRepository;
  59. _ccRepository = ccRepository;
  60. _departmentRepository = departmentRepository;
  61. _mapper = mapper;
  62. _middleService = middleService;
  63. _middleRepository = middleRepository;
  64. _analyzeService = analyzeService;
  65. _commentRepository = commentRepository;
  66. _visitService = visitService;
  67. _userMiddleService = userMiddleService;
  68. _contentJsonService = contentJsonService;
  69. this.commonSqlKataService = commonSqlKataService;
  70. this.flowTodoRepository = flowTodoRepository;
  71. }
  72. /// <summary>
  73. /// 获取通知的点赞列表
  74. /// </summary>
  75. /// <param name="id"></param>
  76. /// <param name="userId"></param>
  77. /// <returns></returns>
  78. public async Task<NoticeDetailResult> GetNoticeDetailAsync(int id, int userId)
  79. {
  80. var notice = await _noticeRepository.GetAsync(id);
  81. if (notice == null)
  82. throw new BusinessException("通知不存在");
  83. var noticeDetailResult = new Result.Notice.NoticeDetailResult();
  84. var result = _mapper.Map<Result.Notice.NoticeDetailResult>(notice);
  85. //获取新版
  86. result.AddresseeUserMiddles = await _userMiddleService.FindUserMiddlesAsync(10, id);
  87. result.CcUserMiddles = await _userMiddleService.FindUserMiddlesAsync(20, id);
  88. //json
  89. var contentJsonData = JsonConvert.DeserializeObject<List<ContentJsonData>>(result.Content);
  90. foreach (var item in contentJsonData)
  91. item.File = StringUtils.AddDomain(item.File);
  92. result.Data = contentJsonData;
  93. //获取用户
  94. var user = await _userRepository.GetAsync(result.UserId);
  95. result.UserName = user.Name;
  96. result.AllCount = await _addresseeRepository.CountAsync(Q.Where(nameof(Addressee.SourceId), id));
  97. result.ReadCount = await _addresseeRepository.CountAsync(Q.Where(nameof(Addressee.SourceId), id).Where(nameof(Addressee.IsRead), true));
  98. //获取收件人
  99. var noticeAddresseeList =
  100. await _addresseeRepository.GetUserByNoticeIdAsync(id);
  101. result.NoticeAddresseeNames = noticeAddresseeList.Select(n => n.Name).ToList();
  102. var IsRead = await _addresseeRepository.ExistsAsync(Q.Where(nameof(Entity.Middle.Middle.IsRead), true)
  103. .Where(nameof(Addressee.SourceId), id)
  104. .Where(nameof(Addressee.UserId), userId));
  105. //修改阅读量
  106. if (IsRead == false)
  107. {
  108. if (await _addresseeRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsRead), true)
  109. .Where(nameof(Addressee.SourceId), id)
  110. .Where(nameof(Addressee.UserId), userId)))
  111. result.ReadCount++;
  112. }
  113. //修改访问量
  114. await _visitService.AddVisit(userId, 5, id);
  115. //修改middle的阅读
  116. // await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsRead), true).Where(nameof(Entity.Middle.Middle.UserId), userId).Where(nameof(Entity.Middle.Middle.MiddleId), id).Where(nameof(Entity.Middle.Middle.FolderType), 1));
  117. var analyzeRequest = new Request.App.Analyze.AnalyzeRequest();
  118. analyzeRequest.TypeValue = GxPress.EnumConst.AllTypeConst.Notice.GetHashCode();
  119. analyzeRequest.AnalyzeType = 1;
  120. analyzeRequest.SourceId = id;
  121. analyzeRequest.UserId = userId;
  122. //点赞数量
  123. result.PraiseCount = await _analyzeService.CountAsync(analyzeRequest);
  124. //获取话题的评论数量
  125. var commentCount =
  126. await _commentRepository.CountAsync(Q.Where(nameof(Entity.Comment.ArticleId), id).Where(nameof(Entity.Comment.TypeValue), analyzeRequest.TypeValue).Where(nameof(Entity.Comment.Pid), 0));
  127. result.CommentCount = commentCount;
  128. //获取话题的转发数量
  129. analyzeRequest.AnalyzeType = 4;
  130. var retransmissionCount = await _analyzeService.CountAsync(analyzeRequest);
  131. result.RetransmissionCount = retransmissionCount;
  132. result.IsRetransmission = await _analyzeService.ExistsAsync(analyzeRequest);
  133. //获取话题的收藏数量
  134. analyzeRequest.AnalyzeType = 3;
  135. var collectCount = await _analyzeService.CountAsync(analyzeRequest);
  136. result.CollectCount = collectCount;
  137. //是否收藏
  138. result.IsCollect = await _analyzeService.ExistsAsync(analyzeRequest);
  139. //获取话题的点赞数量
  140. analyzeRequest.AnalyzeType = 1;
  141. var praiseCount = await _analyzeService.CountAsync(analyzeRequest);
  142. result.PraiseCount = praiseCount;
  143. //是否点赞
  144. result.IsPraise = await _analyzeService.ExistsAsync(analyzeRequest);
  145. var request = new PraisePageSearchRequest { SourceId = id, TypeValue = AllTypeConst.Notice.GetHashCode(), Page = 1, PerPage = 3 };
  146. result.NoticePraisePagedList = await _analyzeService.GetPraisePageAsync(request);
  147. //是否是当前用户创建
  148. result.IsAdmin = notice.UserId == userId;
  149. return result;
  150. }
  151. /// <summary>
  152. /// 根据通知ID获取通知详情
  153. /// </summary>
  154. /// <param name="request"></param>
  155. /// <returns></returns>
  156. public async Task<NoticeEditDetailResult> NoticeEditDetailAsync(int id)
  157. {
  158. var notice = await _noticeRepository.GetAsync(id);
  159. var result = _mapper.Map<NoticeEditDetailResult>(notice);
  160. //抄送人
  161. var noticeCcList = await _ccRepository.GetNoticeCcByNoticeIdAsync(id, GxPress.EnumConst.FolderTypeConst.Notice.GetHashCode());
  162. //收件人
  163. var noticeAddressee = await _addresseeRepository.GetNoticeAddresseeByNoticeIdAsync(id);
  164. //获取新版
  165. result.AddresseeUserMiddles = await _userMiddleService.FindUserMiddlesAsync(10, id);
  166. result.CcUserMiddles = await _userMiddleService.FindUserMiddlesAsync(20, id);
  167. var noticeAddresseeUsers =
  168. await _userRepository.UserListInsAsync(noticeAddressee.Select(n => n.UserId).ToList());
  169. result.NoticeAddresseeUsers =
  170. noticeAddresseeUsers.Select(n => _mapper.Map<NoticeAddresseeUser>(n)).ToList();
  171. var noticeCcUsers = await _userRepository.UserListInsAsync(noticeCcList.Select(n => n.UserId).ToList());
  172. result.NoticeCcUsers = noticeCcUsers.Select(n => _mapper.Map<NoticeCcUser>(n)).ToList();
  173. foreach (var noticeAddresseeUser in result.NoticeAddresseeUsers)
  174. {
  175. noticeAddresseeUser.AvatarUrl = StringUtils.AddDomainMin(noticeAddresseeUser.AvatarUrl);
  176. }
  177. foreach (var noticeCcUser in result.NoticeCcUsers)
  178. {
  179. noticeCcUser.AvatarUrl = StringUtils.AddDomainMin(noticeCcUser.AvatarUrl);
  180. }
  181. var jsonData = JsonConvert.DeserializeObject<List<ContentJsonData>>(result.Content);
  182. foreach (var item in jsonData)
  183. item.File = StringUtils.AddDomain(item.File);
  184. result.Data = jsonData;
  185. return result;
  186. }
  187. /// <summary>
  188. /// 获取通知详情
  189. /// </summary>
  190. /// <param name="request"></param>
  191. /// <returns></returns>
  192. public async Task<Result.Notice.NoticeDetailResult> GetNoticeDetailResultAsync(int id, int userId)
  193. {
  194. var notice = await _noticeRepository.GetAsync(id);
  195. if (notice == null)
  196. throw new BusinessException("通知不存在");
  197. var noticeDetailResult = new Result.Notice.NoticeDetailResult();
  198. var result = _mapper.Map<Result.Notice.NoticeDetailResult>(notice);
  199. //获取新版
  200. result.AddresseeUserMiddles = await _userMiddleService.FindUserMiddlesAsync(10, id);
  201. result.CcUserMiddles = await _userMiddleService.FindUserMiddlesAsync(20, id);
  202. //json
  203. var contentJsonData = JsonConvert.DeserializeObject<List<ContentJsonData>>(result.Content);
  204. foreach (var item in contentJsonData)
  205. item.File = StringUtils.AddDomain(item.File);
  206. result.Data = contentJsonData;
  207. //获取用户
  208. var user = await _userRepository.GetAsync(result.UserId);
  209. result.UserName = user.Name;
  210. result.AllCount =
  211. await _addresseeRepository.CountAsync(Q.Where(nameof(Addressee.SourceId), id));
  212. result.ReadCount = await _addresseeRepository.CountAsync(Q
  213. .Where(nameof(Addressee.SourceId), id).Where(nameof(Addressee.IsRead), true));
  214. //获取收件人
  215. var noticeAddresseeList =
  216. await _addresseeRepository.GetAllAsync(Q.Where(nameof(Addressee.SourceId), id)
  217. .Where(nameof(Entity.Middle.Middle.IsAdmin), false));
  218. result.NoticeAddresseeNames = noticeAddresseeList.Select(n => n.UserName).ToList();
  219. //修改阅读量
  220. await _addresseeRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsRead), true)
  221. .Where(nameof(Addressee.SourceId), id)
  222. .Where(nameof(Addressee.UserId), userId));
  223. //修改middle的阅读
  224. await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsRead), true).Where(nameof(Entity.Middle.Middle.UserId), userId).Where(nameof(Entity.Middle.Middle.MiddleId), id).Where(nameof(Entity.Middle.Middle.FolderType), 1));
  225. var analyzeRequest = new Request.App.Analyze.AnalyzeRequest();
  226. analyzeRequest.TypeValue = 2;
  227. analyzeRequest.AnalyzeType = 1;
  228. analyzeRequest.SourceId = id;
  229. analyzeRequest.UserId = userId;
  230. //点赞数量
  231. result.PraiseCount = await _analyzeService.CountAsync(analyzeRequest);
  232. //获取话题的评论数量
  233. var commentCount =
  234. await _commentRepository.CountAsync(Q.Where(nameof(Entity.Comment.ArticleId), id).Where(nameof(Entity.Comment.TypeValue), 1));
  235. result.CommentCount = commentCount;
  236. //获取话题的转发数量
  237. analyzeRequest.AnalyzeType = 4;
  238. var retransmissionCount = await _analyzeService.CountAsync(analyzeRequest);
  239. result.RetransmissionCount = retransmissionCount;
  240. result.IsRetransmission = await _analyzeService.ExistsAsync(analyzeRequest);
  241. //获取话题的收藏数量
  242. analyzeRequest.AnalyzeType = 3;
  243. var collectCount = await _analyzeService.CountAsync(analyzeRequest);
  244. result.CollectCount = collectCount;
  245. //是否收藏
  246. result.IsCollect = await _analyzeService.ExistsAsync(analyzeRequest);
  247. //获取话题的点赞数量
  248. analyzeRequest.AnalyzeType = 1;
  249. var praiseCount = await _analyzeService.CountAsync(analyzeRequest);
  250. result.PraiseCount = praiseCount;
  251. //是否点赞
  252. result.IsPraise = await _analyzeService.ExistsAsync(analyzeRequest);
  253. return result;
  254. }
  255. /// <summary>
  256. /// 编辑通知
  257. /// </summary>
  258. /// <param name="request"></param>
  259. /// <returns></returns>
  260. public async Task<bool> NoticeUpAsync(NoticeUpRequest request)
  261. {
  262. try
  263. {
  264. using (TransactionScope transactionScope = new TransactionScope())
  265. {
  266. var notice = await _noticeRepository.GetAsync(request.Id);
  267. if (notice == null)
  268. throw new BusinessException("通知不存在");
  269. var noticeInRequest = new NoticeInRequest();
  270. noticeInRequest.Content = request.Content;
  271. noticeInRequest.HtmlContent = request.HtmlContent;
  272. noticeInRequest.NoticeType = request.NoticeType;
  273. noticeInRequest.AddresseeUserMiddles = request.AddresseeUserMiddles;
  274. noticeInRequest.CcUserMiddles = request.CcUserMiddles;
  275. noticeInRequest.Title = request.Title;
  276. noticeInRequest.UserId = request.UserId;
  277. noticeInRequest.SoureId = 0;
  278. noticeInRequest.Id = request.Id;
  279. if (request.NoticeType == NoticeTypeConst.Send)
  280. {
  281. if (notice.NoticeType == NoticeTypeConst.Draft)
  282. {
  283. //删除
  284. await _noticeRepository.DeleteAsync(Q.Where(nameof(Entity.Notice.Id), notice.Id));
  285. //删除middle
  286. await _middleRepository.DeleteAsync(notice.Id, GxPress.EnumConst.FolderTypeConst.Notice.GetHashCode());
  287. if (notice.SourceId > 0)
  288. {
  289. var noticeSource = await _noticeRepository.GetAsync(notice.SourceId);
  290. if (noticeSource != null)
  291. noticeInRequest.Id = noticeSource.Id;
  292. else
  293. noticeInRequest.Id = 0;
  294. }
  295. else
  296. noticeInRequest.Id = 0;
  297. }
  298. }
  299. else
  300. {
  301. if (notice.NoticeType == NoticeTypeConst.Draft)
  302. noticeInRequest.Id = request.Id;
  303. else
  304. {
  305. noticeInRequest.SoureId = notice.Id;
  306. var noticeSource = await _noticeRepository.GetAsync(Q.Where(nameof(Entity.Notice.SourceId), notice.Id));
  307. if (noticeSource != null)
  308. noticeInRequest.Id = noticeSource.Id;
  309. else noticeInRequest.Id = 0;
  310. }
  311. }
  312. await InsertAsync(noticeInRequest);
  313. transactionScope.Complete();
  314. }
  315. }
  316. catch (Exception e)
  317. {
  318. Console.WriteLine(e);
  319. throw;
  320. }
  321. return true;
  322. }
  323. /// <summary>
  324. /// 根据已读未读查询通知数据
  325. /// </summary>
  326. /// <param name="request"></param>
  327. /// <returns></returns>
  328. public async Task<IEnumerable<NoticeReadListResult>> NoticeReadListAsync(NoticeReadListRequest request)
  329. {
  330. var noticeReadListResults = await _addresseeRepository.GetNoticeAddresseeByUserIdIdAsync(request);
  331. return noticeReadListResults;
  332. }
  333. /// <summary>
  334. /// 获取通知列表
  335. /// </summary>
  336. /// <param name="request"></param>
  337. /// <returns></returns>
  338. public async Task<PagedList<NoticeListPageResult>> GetNoticeListPageAsync(NoticePageSearchRequest request)
  339. {
  340. var noticeTypeValue = GxPress.EnumConst.AllTypeConst.Inbox.GetHashCode();
  341. var query = new SqlKata.Query("tede_middle");
  342. query.LeftJoin("tede_notice", "tede_notice.Id", "tede_middle.MiddleId");
  343. query.LeftJoin("tede_user", "tede_user.Id", "tede_notice.UserId");
  344. query.LeftJoin("tede_addressee", "tede_addressee.Id", "tede_middle.MiddleSonId");
  345. if (request.SearchType == 1)
  346. {
  347. query.Where("tede_middle.IsAdmin", true);
  348. query.Where("tede_middle.NoticeAddresseeType", 1);
  349. query.Where("tede_middle.IsDelete", false);
  350. }
  351. else if (request.SearchType == 2)
  352. {
  353. query.Where("tede_middle.AttributeValue", 1);
  354. query.Where("tede_middle.NoticeAddresseeType", 2);
  355. query.Where("tede_middle.IsDelete", false);
  356. }
  357. else if (request.SearchType == 3)
  358. {
  359. query.Where("tede_middle.AttributeValue", 1);
  360. query.Where("tede_middle.IsDelete", true);
  361. }
  362. else if (request.SearchType > 3)
  363. {
  364. if (request.SearchType == 16)
  365. {
  366. query.WhereIn("tede_notice.TypeValue", new List<int> { AllTypeConst.Notice.GetHashCode(), AllTypeConst.Missive.GetHashCode(), request.SearchType, AllTypeConst.Anonymity.GetHashCode() });
  367. query.Where("tede_middle.IsAdmin", true);
  368. }
  369. else
  370. query.Where("tede_notice.TypeValue", request.SearchType);
  371. query.WhereNot("tede_middle.NoticeAddresseeType", 2);
  372. query.Where("tede_middle.IsDelete", false);
  373. }
  374. else
  375. {
  376. query.WhereNot("tede_middle.NoticeAddresseeType", 2);
  377. query.Where("tede_middle.IsDelete", false);
  378. }
  379. if (!string.IsNullOrEmpty(request.Keyword))
  380. {
  381. if (request.NoticeFolderId > 0)
  382. query.Where("tede_middle.ParentId", request.NoticeFolderId);
  383. var sourceIdQuery = new SqlKata.Query("tede_addressee");
  384. sourceIdQuery.Join("tede_user", "tede_user.Id", "tede_addressee.UserId");
  385. sourceIdQuery.WhereColumns("tede_addressee.SourceId", "=", "tede_middle.MiddleId");
  386. sourceIdQuery.WhereLike("tede_user.Name", $"%{request.Keyword}%");
  387. sourceIdQuery.Select("tede_addressee.SourceId");
  388. query.WhereNot("tede_middle.AttributeValue", 2);
  389. query.Where(n => n.OrWhereLike("tede_notice.Title", $"%{request.Keyword}%").OrWhereLike("tede_notice.Content", $"%{request.Keyword}%")
  390. .OrWhere(n => n.WhereIn("tede_middle.MiddleId", sourceIdQuery)));
  391. }
  392. else
  393. {
  394. if (request.SearchType == 0)
  395. query.Where("tede_middle.ParentId", request.NoticeFolderId);
  396. }
  397. if (request.SearchType > 0)
  398. query.Where("tede_middle.IsRecall", false);
  399. query.Where("tede_middle.UserId", request.UserId);
  400. query.Where("tede_middle.FolderType", noticeTypeValue);
  401. //条数
  402. var countQuery = query;
  403. //收件箱
  404. query = commonSqlKataService.NoticeQueryAsync(query, request.UserId);
  405. //通用
  406. //query = commonSqlKataService.GetCommonQueryAsync(noticeTypeValue, request.UserId, query, "tede_middle.MiddleId");
  407. query.OrderByDesc("tede_middle.AttributeValue");
  408. query.OrderByDesc("tede_middle.IsTop");
  409. query.OrderByDesc("tede_middle.LastModifiedDate");
  410. //query.OrderByDesc("tede_middle.Sort");
  411. query.ForPage(request.Page, request.PerPage);
  412. query.Select(
  413. "tede_middle.Id", "tede_middle.MiddleId", "tede_middle.IsTop", "tede_middle.AttributeValue", "tede_middle.FolderName", "tede_middle.CreatedDate"
  414. , "tede_notice.{UserId,UserName,SourceId,Title,TypeValue,IsRecall}"
  415. , "tede_user.{AvatarUrl}"
  416. , "tede_addressee.{Id as NoticeAddresseeId, SourceId as NoticeId}");
  417. var result = await _noticeRepository.GetNoticeListPageAsync(query, countQuery);
  418. foreach (var item in result.Items)
  419. {
  420. item.IsAdmin = item.UserId == request.UserId;
  421. var typeValueIds = new List<int>{AllTypeConst.MyChecked.GetHashCode()
  422. ,AllTypeConst.MyCc.GetHashCode(),AllTypeConst.MySubmitted.GetHashCode()};
  423. if (typeValueIds.Contains(item.TypeValue))
  424. {
  425. item.IsAdmin = item.IsFlowAdmin;
  426. item.TodoId = item.SonId;
  427. item.MiddleId = item.SourceId;
  428. //item.UserName = item.SendUserName;
  429. item.ReadCount = item.CheckedCount + 1;
  430. item.AllCount = item.UCheckedCount + 1;
  431. item.EnjoyUser = item.FlowUserName;
  432. //我发起的
  433. if (item.TypeValue == AllTypeConst.MySubmitted.GetHashCode())
  434. item.IsRead = true;
  435. //我抄送
  436. if (item.TypeValue == AllTypeConst.MyCc.GetHashCode())
  437. item.IsRead = true;
  438. //我审批
  439. if (item.TypeValue == AllTypeConst.MyChecked.GetHashCode())
  440. item.IsRead = item.IsFlowChecked;
  441. if (item.IsDone && item.IsChecked)
  442. item.FlowState = FlowState.Checked;
  443. else if (item.IsDone && !item.IsChecked)
  444. {
  445. if (item.DoneType == 1)
  446. item.FlowState = FlowState.Meeting;
  447. else if (item.DoneType == 2)
  448. item.FlowState = FlowState.Wait;
  449. else
  450. item.FlowState = FlowState.Denied;
  451. }
  452. else if (item.IsDone && !item.IsChecked)
  453. item.FlowState = FlowState.Denied;
  454. else
  455. {
  456. item.FlowState = FlowState.Checking;
  457. }
  458. }
  459. // item.Title = _contentJsonService.GetTitile(item.Title, item.Content);
  460. if (request.SearchType == 3)
  461. item.NoticeStatus = 0;
  462. else if (request.SearchType == 2)
  463. item.NoticeStatus = 2;
  464. else
  465. item.NoticeStatus = 1;
  466. if (item.IsRecall)
  467. item.IsRead = true;
  468. }
  469. return result;
  470. }
  471. /// <summary>
  472. /// 撤销通知
  473. /// </summary>
  474. /// <param name="id"></param>
  475. /// <returns></returns>
  476. public async Task<bool> RecallAsync(int id)
  477. {
  478. try
  479. {
  480. using (TransactionScope transactionScope = new TransactionScope())
  481. {
  482. var query = Q.NewQuery();
  483. //修改通知
  484. await _noticeRepository.UpdateAsync(Q.Where(nameof(Entity.Notice.Id), id).Set(nameof(Entity.Notice.IsRecall), true));
  485. //删除middle
  486. query.Where(nameof(Entity.Middle.Middle.MiddleId), id);
  487. query.Where(nameof(Entity.Middle.Middle.FolderType), GxPress.EnumConst.AllTypeConst.Inbox.GetHashCode());
  488. query.Where(nameof(Entity.Middle.Middle.IsAdmin), false);
  489. //query.Set(nameof(Entity.Middle.Middle.IsRecall), true);
  490. await _middleRepository.DeleteAsync(query);
  491. // //修改middle
  492. // query = Q.NewQuery();
  493. // query.Where(nameof(Entity.Middle.Middle.MiddleId), id);
  494. // query.Where(nameof(Entity.Middle.Middle.FolderType), GxPress.EnumConst.AllTypeConst.Inbox.GetHashCode());
  495. // query.Where(nameof(Entity.Middle.Middle.IsAdmin), true);
  496. // query.Set(nameof(Entity.Middle.Middle.IsRecall), true);
  497. // await _middleRepository.UpdateAsync(query);
  498. // //修改为草稿箱
  499. // query = Q.NewQuery();
  500. // query.Where(nameof(Entity.Middle.Middle.MiddleId), id);
  501. // query.Where(nameof(Entity.Middle.Middle.FolderType), GxPress.EnumConst.FolderTypeConst.Notice.GetHashCode());
  502. // query.Where(nameof(Entity.Middle.Middle.IsAdmin), true);
  503. // query.Set(nameof(Entity.Middle.Middle.NoticeAddresseeType), 2);
  504. // await _middleRepository.UpdateAsync(query);
  505. //修改未撤回状态
  506. await _noticeRepository.UpdateAsync(Q.Where(nameof(Entity.Notice.Id), id).Set(nameof(Entity.Notice.NoticeType), NoticeTypeConst.Draft.GetHashCode()));
  507. transactionScope.Complete();
  508. }
  509. }
  510. catch (System.Exception ex)
  511. {
  512. throw new BusinessException(ex.Message);
  513. }
  514. return true;
  515. }
  516. public async Task<bool> UpdateNoticeTitleAsync()
  517. {
  518. var query = Q.NewQuery();
  519. query.Where(n => n.OrWhereNull(nameof(Entity.Notice.Title)).OrWhere(nameof(Entity.Notice.Title), "=", ""));
  520. var result = await _noticeRepository.GetAllAsync(query);
  521. foreach (var item in result)
  522. {
  523. item.Title = _contentJsonService.GetTitile(item.Title, item.Content);
  524. await _noticeRepository.UpdateAsync(item);
  525. }
  526. return true;
  527. }
  528. }
  529. }