示例#1
0
        /// <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;
                }
            }
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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);
        }