FlowService.Recall.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System.Threading.Tasks;
  2. using Datory;
  3. using GxPress.EnumConst;
  4. using System.Transactions;
  5. using System.Linq;
  6. namespace GxPress.Service.Implement
  7. {
  8. public partial class FlowService
  9. {
  10. /// <summary>
  11. /// 撤回
  12. /// </summary>
  13. /// <param name="flowId"></param>
  14. /// <returns></returns>
  15. public async Task<bool> RecallAsync(int flowId, int userId)
  16. {
  17. try
  18. {
  19. using (var transactions = new TransactionScope())
  20. {
  21. var flow = await _flowRepository.GetAsync(flowId);
  22. if (flow == null || flow.UserId != userId)
  23. throw new Common.Exceptions.BusinessException("非本人操作!");
  24. var query = Q.NewQuery();
  25. query.Where(nameof(Entity.Notice.SourceId), flowId);
  26. var notices = await _noticeRepository.GetAllAsync(query);
  27. if (notices == null || notices.Count() == 0)
  28. return false;
  29. var notice = notices.FirstOrDefault(n => n.UserId == userId);
  30. if (notice == null)
  31. return false;
  32. query = Q.NewQuery();
  33. query.Where(nameof(Entity.Notice.Id), notice.Id);
  34. query.Set(nameof(Entity.Notice.IsRecall), true);
  35. await _noticeRepository.UpdateAsync(query);
  36. //删除middle
  37. query = Q.NewQuery();
  38. query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Inbox.GetHashCode());
  39. query.WhereIn(nameof(Entity.Middle.Middle.MiddleId), notices.Select(n => n.Id));
  40. query.WhereNot(nameof(Entity.Middle.Middle.UserId), flow.UserId);
  41. await middleRepository.DeleteAsync(query);
  42. //修改状态
  43. query = Q.NewQuery();
  44. query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Inbox.GetHashCode());
  45. query.Where(nameof(Entity.Middle.Middle.MiddleId), notices.Select(n => n.Id));
  46. query.Where(nameof(Entity.Middle.Middle.UserId), flow.UserId);
  47. query.Set(nameof(Entity.Middle.Middle.IsRecall), true);
  48. await middleRepository.UpdateAsync(query);
  49. transactions.Complete();
  50. }
  51. }
  52. catch
  53. {
  54. return false;
  55. }
  56. return true;
  57. }
  58. }
  59. }