using System.Threading.Tasks; using Datory; using GxPress.EnumConst; using System.Transactions; 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); query.Where(nameof(Entity.Notice.TypeValue), AllTypeConst.MySubmitted.GetHashCode()); query.Where(nameof(Entity.Notice.UserId), userId); var notice = await _noticeRepository.GetAsync(query); if (notice == null) return false; //删除middle query = Q.NewQuery(); query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Inbox.GetHashCode()); query.Where(nameof(Entity.Middle.Middle.MiddleId), notice.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), notice.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; } } }