123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using System.Threading.Tasks;
- using Datory;
- using GxPress.EnumConst;
- using System.Transactions;
- using System.Linq;
- namespace GxPress.Service.Implement
- {
- public partial class FlowService
- {
- /// <summary>
- /// 撤回
- /// </summary>
- /// <param name="flowId"></param>
- /// <returns></returns>
- public async Task<bool> RecallAsync(int flowId, int userId)
- {
- try
- {
- using (var transactions = new TransactionScope())
- {
- var flow = await _flowRepository.GetAsync(flowId);
- if (flow == null || flow.UserId != userId)
- throw new Common.Exceptions.BusinessException("非本人操作!");
- var query = Q.NewQuery();
- query.Where(nameof(Entity.Notice.SourceId), flowId);
- var notices = await _noticeRepository.GetAllAsync(query);
- if (notices == null || notices.Count() == 0)
- return false;
- var notice = notices.FirstOrDefault(n => n.UserId == userId);
- if (notice == null)
- return false;
- query = Q.NewQuery();
- query.Where(nameof(Entity.Notice.Id), notice.Id);
- query.Set(nameof(Entity.Notice.IsRecall), true);
- await _noticeRepository.UpdateAsync(query);
- //删除middle
- query = Q.NewQuery();
- query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Inbox.GetHashCode());
- query.WhereIn(nameof(Entity.Middle.Middle.MiddleId), notices.Select(n => n.Id));
- query.WhereNot(nameof(Entity.Middle.Middle.UserId), flow.UserId);
- await middleRepository.DeleteAsync(query);
- //修改状态
- query = Q.NewQuery();
- query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Inbox.GetHashCode());
- query.Where(nameof(Entity.Middle.Middle.MiddleId), notices.Select(n => n.Id));
- query.Where(nameof(Entity.Middle.Middle.UserId), flow.UserId);
- query.Set(nameof(Entity.Middle.Middle.IsRecall), true);
- await middleRepository.UpdateAsync(query);
- transactions.Complete();
- }
- }
- catch
- {
- return false;
- }
- return true;
- }
- }
- }
|