예제 #1
0
        public async Task <ActionResult> RunReturn(long processId)
        {
            var result = new JsonModel {
                statusCode = 300, message = "删除失败,记录不存在!", closeCurrent = false
            };

            if (processId < 1)
            {
                return(Json(result));
            }

            var processInstanceQuery = WfProcessInstanceRepository.QueryEnable()
                                       .Where(m => m.WfProcessId == processId);

            foreach (var wfProcessInstance in processInstanceQuery)
            {
                wfProcessInstance.ProcessState = WfProcessState.Canceled;
            }
            var activityInstanceQuery = WfActivityInstanceRepository.QueryEnable()
                                        .Where(m => m.ProcessId == processId);

            foreach (var activityInstance in activityInstanceQuery)
            {
                activityInstance.ActivityState = WfActivityState.Withdrawed;
            }
            await WfProcessRepository.SaveChangesAsync();

            result.statusCode = 200;
            return(Json(result));
        }
예제 #2
0
        private async Task CompleteProcess(WfProcessInstance processInstance)
        {
            processInstance.ProcessState     = WfProcessState.Completed;
            processInstance.CurrActivityName = "结束";

            //TODO:更新数据源的状态
            var src = await GetSourceAsync(processInstance.TableSource, processInstance.SourceId);

            src.CommonStatus = CommonStatus.Enabled;
            await WfProcessInstanceRepository.SaveAsync(processInstance);
        }
예제 #3
0
        public IPagedList <WfActivityInstance> GetMyTaskList(int pageSize = 30, int pageCurrent = 1)
        {
            var userId       = $"[{User.UserInfo.UserId}]";
            var queryProcess = WfProcessInstanceRepository.AdminQueryEnable()
                               .Where(m => m.ProcessState == WfProcessState.Running);

            var queryActivity = WfActivityInstanceRepository
                                .AdminQueryEnable()
                                .Where(m => m.ActivityState == WfActivityState.Running &&
                                       m.ActivityType == WfActivityType.Task &&
                                       !string.IsNullOrEmpty(m.AssignToUserIds) &&
                                       m.AssignToUserIds.Contains(userId));

            queryActivity = queryActivity.Join(
                queryProcess,
                act => act.ProcessInstanceId,
                pro => pro.Id,
                (act, pro) => act);
            var list = queryActivity
                       .OrderByDescending(m => m.Id)
                       .ToPagedList(pageCurrent, pageSize);

            return(list);
        }
예제 #4
0
        public async Task <JsonModel> StartProcess(long processId,
                                                   long sourceId,
                                                   string condition,
                                                   string nextStepId,
                                                   string assignToUserIds,
                                                   string assignToUserNames)
        {
            var result = new JsonModel();
            //创建流程实例
            var process = await GetProcessById(processId);

            if (result == null)
            {
                result.statusCode = 300;
                result.message    = "流程不存在!processId:" + processId;
                return(result);
            }
            var processInstance = new WfProcessInstance()
            {
                CommonStatus = CommonStatus.Enabled,
                ProcessName  = process.Name,
                ProcessState = WfProcessState.Running,
                SourceId     = sourceId,
                TableSource  = process.TableSource,
                WfProcessId  = process.Id,
                Conditions   = condition
            };
            await WfProcessInstanceRepository.SaveAsync(processInstance);

            //创建流程节点
            var firstAct = process.GetFirstActivity();

            if (firstAct == null)
            {
                result.statusCode = 300;
                result.message    = $"流程 {process.Name}的第一个节点找不到!";
                return(result);
            }
            WfActivityInstance firstActInstance = CreateActivityInstance(process,
                                                                         processInstance,
                                                                         firstAct,
                                                                         WfActivityState.Completed,
                                                                         User.UserInfo.UserId,
                                                                         User.UserInfo.RealName);

            firstActInstance.DealTime     = DateTime.Now;
            firstActInstance.DealUserId   = User.UserInfo.UserId;
            firstActInstance.DealUserName = User.UserInfo.RealName;
            await WfActivityInstanceRepository.SaveAsync(firstActInstance);

            //创建下一步节点
            var nextAct = process.GetActivity(nextStepId);

            if (nextAct == null)
            {
                result.statusCode = 300;
                result.message    = $"流程 {process.Name}的节点 {nextStepId} 找不到!";
                return(result);
            }
            var nextActInstance = CreateActivityInstance(process,
                                                         processInstance,
                                                         nextAct,
                                                         WfActivityState.Running,
                                                         assignToUserIds,
                                                         assignToUserNames);

            nextActInstance.PreActInstanceId = firstActInstance.Id;
            await WfActivityInstanceRepository.SaveAsync(nextActInstance);

            processInstance.CurrActivityName = nextActInstance.ActivityName;
            await WfProcessInstanceRepository.SaveAsync(processInstance);

            return(result);
        }
예제 #5
0
 public IPagedList <WfProcessInstance> GetApplyList(bool isOwn, string name, string title, DateTime?startTime, DateTime?endTime, WfProcessState?state, string activityName, string orderField, string orderDirection, int pageSize = 30, int pageCurrent = 1)
 {
     return(WfProcessInstanceRepository.GetApplyPagedList(isOwn, name, title, startTime,
                                                          endTime, state, activityName, orderField, orderDirection, pageCurrent, pageSize));
 }
예제 #6
0
 public Task <WfProcessInstance> GetProcessInstanceAsync(long id)
 {
     return(WfProcessInstanceRepository.GetEnableByIdAsync(id));
 }
예제 #7
0
        public async Task <ActionResult> CheckIsRun(long processId)
        {
            var isRun = await WfProcessInstanceRepository.IsRunAsync(processId);

            return(Json(isRun));
        }