/// <summary> /// 审核步骤回调 /// </summary> /// <param name="examineUserId"></param> /// <param name="examineFlow"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task StepCallBackUpdateExamineFlowAsync(string examineUserId, ExamineFlow examineFlow, CancellationToken cancellationToken = default(CancellationToken)) { if (examineFlow == null) { throw new ArgumentNullException(nameof(examineFlow)); } var record = await Context.ExamineRecords.AsNoTracking().Where(a => a.FlowId == examineFlow.Id).OrderByDescending(a => a.Sort)?.FirstOrDefaultAsync(); //如果最新的记录为待审核状态,则不再添加审核记录 if (record?.RecordStstus != RecordStatus.Waiting) { var examineRecord = new ExamineRecord(); examineRecord.Id = Guid.NewGuid().ToString(); examineRecord.RecordTime = DateTime.Now; examineRecord.RecordType = RecordTypes.Examine; examineRecord.RecordStstus = RecordStatus.Waiting; examineRecord.ExamineUserId = examineUserId; examineRecord.FlowId = examineFlow.Id; examineRecord.IsCurrent = true; examineRecord.IsDeleted = false; examineRecord.ExamineContents = ""; Context.Attach(examineFlow); Context.Update(examineFlow); Context.Add(examineRecord); try { await Context.SaveChangesAsync(cancellationToken); } catch (DbUpdateConcurrencyException) { throw; } } }
public async Task FlowCallBackUpdateExamineFlowAsync(ExamineFlow examineFlow, CancellationToken cancellationToken = default(CancellationToken)) { if (examineFlow == null) { throw new ArgumentNullException(nameof(examineFlow)); } var examineRecord = new ExamineRecord(); examineRecord.Id = Guid.NewGuid().ToString(); examineRecord.RecordTime = DateTime.Now; examineRecord.RecordStstus = RecordStatus.Complete; examineRecord.RecordType = RecordTypes.End; examineRecord.ExamineUserId = ""; examineRecord.IsCurrent = true; examineRecord.IsDeleted = false; examineRecord.FlowId = examineFlow.Id; examineRecord.ExamineContents = "审核完成"; try { Context.Attach(examineFlow); Context.Update(examineFlow); Context.Add(examineRecord); await Context.SaveChangesAsync(cancellationToken); } catch (DbUpdateConcurrencyException) { throw; } }
public async Task NoticeCallbackAsync(List <string> userIds, ExamineFlow examineFlow, CancellationToken cancellationToken = default(CancellationToken)) { if (examineFlow == null) { throw new ArgumentNullException(nameof(examineFlow)); } var examineRecord = new ExamineRecord(); examineRecord.Id = Guid.NewGuid().ToString(); examineRecord.RecordTime = DateTime.Now; examineRecord.RecordStstus = RecordStatus.Examined; examineRecord.ExamineUserId = ""; examineRecord.FlowId = examineFlow.Id; examineRecord.IsDeleted = false; examineRecord.ExamineContents = ""; List <ExamineNotice> list = new List <ExamineNotice>(); foreach (var item in userIds) { list.Add(new ExamineNotice { FlowId = examineFlow.Id, Id = Guid.NewGuid().ToString(), NoticeStatus = NoticeStatus.Noticed, NoticeTime = DateTime.Now, IsDeleted = false, NoticeUserId = item, RecordId = examineRecord.Id }); } try { Context.Attach(examineFlow); Context.Update(examineFlow); Context.Add(examineRecord); Context.AddRange(list); await Context.SaveChangesAsync(cancellationToken); } catch (DbUpdateConcurrencyException) { throw; } }
public async Task <ExamineFlow> CreateExamineFlowAsync(ExamineFlow examineFlow, CancellationToken cancellationToken = default(CancellationToken)) { if (examineFlow == null) { throw new ArgumentNullException(nameof(examineFlow)); } try { var examineRecord = new ExamineRecord(); examineRecord.Id = Guid.NewGuid().ToString(); examineRecord.RecordTime = DateTime.Now; examineRecord.RecordStstus = RecordStatus.Examined; examineRecord.ExamineUserId = examineFlow.SubmitUserId; examineRecord.FlowId = examineFlow.Id; examineRecord.RecordType = RecordTypes.Submit; examineRecord.IsDeleted = false; examineRecord.IsCurrent = true; examineRecord.ExamineContents = "提交审核"; var flowlist = await Context.ExamineFlows.AsNoTracking().Where(a => a.ContentId == examineFlow.ContentId && a.Action == examineFlow.Action && a.ExamineStatus != ExamineStatus.Examined).ToListAsync(cancellationToken); var examiningflow = flowlist.SingleOrDefault(a => a.ExamineStatus == ExamineStatus.Examining); if (examiningflow != null) { return(examineFlow); } var rejectflow = flowlist.SingleOrDefault(a => a.ExamineStatus == ExamineStatus.Reject); if (rejectflow != null) { var records = Context.ExamineRecords.AsNoTracking().Where(a => a.FlowId == rejectflow.Id && a.IsCurrent).ToList(); for (int i = 0; i < records.Count; i++) { records[0].IsCurrent = false; } rejectflow.CallbackUrl = examineFlow.CallbackUrl; rejectflow.ExamineStatus = examineFlow.ExamineStatus; rejectflow.TaskGuid = examineFlow.TaskGuid; rejectflow.SubmitOrganizationId = examineFlow.SubmitOrganizationId; rejectflow.SubmitTime = examineFlow.SubmitTime; rejectflow.SubmitDefineId = examineFlow.SubmitDefineId; rejectflow.TaskName = examineFlow.TaskName; rejectflow.CurrentStepId = ""; rejectflow.Ext1 = examineFlow.Ext1; rejectflow.Ext2 = examineFlow.Ext2; rejectflow.Ext3 = examineFlow.Ext3; rejectflow.Ext4 = examineFlow.Ext4; rejectflow.Ext5 = examineFlow.Ext5; rejectflow.Ext6 = examineFlow.Ext6; rejectflow.Ext7 = examineFlow.Ext7; rejectflow.Ext8 = examineFlow.Ext8; examineRecord.FlowId = rejectflow.Id; Context.UpdateRange(records); Context.Update(rejectflow); Context.Add(examineRecord); await Context.SaveChangesAsync(cancellationToken); return(rejectflow); } Context.Add(examineFlow); Context.Add(examineRecord); await Context.SaveChangesAsync(cancellationToken); } catch (DbUpdateConcurrencyException) { throw; } return(examineFlow); }