using System.Threading.Tasks; using Datory; using GxPress.EnumConst; using System.Transactions; using System.Linq; namespace GxPress.Service.Implement { public partial class FlowService { /// /// 撤回 /// /// /// public async Task 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; } } }