示例#1
0
        public async Task <ActionResult> Save(long id, string name, string processContent, TableSource tableSource, string remark)
        {
            var result = new JsonModel();

            try
            {
                var flow = await WfProcessRepository.GetByIdAsync(id) ?? new WfProcess();

                flow.Name           = name;
                flow.ProcessContent = processContent;
                flow.TableSource    = tableSource;
                flow.Remark         = remark;
                flow.CommonStatus   = CommonStatus.Disabled;

                await WfProcessRepository.SaveAsync(flow);

                result.Data    = flow.Id;
                result.message = "保存成功。请发布流程,否则无法显示~";
            }
            catch (Exception ex)
            {
                result.message = "保存出错";
            }

            return(Json(result));
        }
示例#2
0
        public ActionResult Manager(string keyWord, string orderField = "UpdateTime", string orderDirection = "desc", int pageCurrent = 1, int pageSize = 30)
        {
            ViewBag.KeyWord = keyWord;
            var list = WfProcessRepository.GetPagedList(keyWord, orderField, orderDirection, pageCurrent, pageSize);

            return(PartialView("Manager", list));
        }
示例#3
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));
        }
示例#4
0
        public async Task <WfProcess> GetProcessById(long id)
        {
            var process = await WfProcessRepository.GetEnableByIdAsync(id);

            if (process != null)
            {
                process.InitNodeLink();
            }
            return(process);
        }
示例#5
0
        public async Task <ActionResult> Publish(long id, string name)
        {
            var result = new JsonModel {
                statusCode = 300, message = "发布失败,流程不存在!", closeCurrent = false
            };

            if (id <= 0)
            {
                return(Json(result));
            }
            var flow = await WfProcessRepository.GetByIdAsync(id);

            if (flow == null)
            {
                return(Json(result));
            }

            // 每个数据源有且只有一个发布的流程图
            var hasPublished = await WfProcessRepository.HasPublishedProcess(flow.TableSource);

            if (hasPublished)
            {
                result.message = $"发布失败,数据源【{flow.TableSource.GetDescriotion()}】已经有一个已发布的流程~";
                return(Json(result));
            }

            // 不允许同名
            var existedName = await WfProcessRepository.IsExsitName(name);

            if (existedName)
            {
                result.message = $"发布失败,流程名称已存在,请更改名称~";
                return(Json(result));
            }

            flow.CommonStatus = CommonStatus.Enabled;
            await WfProcessRepository.SaveAsync(flow);

            result.statusCode = 200;
            result.message    = "发布成功!";
            return(Json(result));
        }
示例#6
0
        public async Task <ActionResult> BatchDelete(string ids)
        {
            var result = new JsonModel {
                statusCode = 300, message = "删除失败,记录不存在!", closeCurrent = false
            };

            if (string.IsNullOrEmpty(ids))
            {
                return(Json(result));
            }
            var list = await WfProcessRepository.BatchDeleteAsync(ids);

            if (list == null)
            {
                return(Json(result));
            }
            var msg = string.Join(",", list.Select(m => m.Name).ToArray()).ToEllipsis(100);
            await LogRepository.Insert(TableSource.Articles, OperationType.Delete, string.Format("批量删除{0}等管理员", msg), ids);

            result.statusCode = 200;
            result.message    = "删除成功!";
            return(Json(result));
        }
示例#7
0
        public async Task InitTestProcess()
        {
            //生成一条测试用流程,流程如下:
            //Start - 填写请假信息 - 部门经理审核 - 人事审核 - 结束。
            //                                    -(小于5天) 副总经理审核 - 人事审核 - 结束
            //                                    -(大于5天)总经理审核 - 人事审核 - 结束
            //
            int roleIdDept    = 11,
                roleIdHuRes   = 12,
                roleIdDeputy  = 13,
                roleIdManager = 14;
            var process       = new WfProcess();

            process.CommonStatus = CommonStatus.Enabled;
            process.Name         = "请假流程";
            process.Remark       = "流程测试范例";
            process.TableSource  = TableSource.LeaveInfo;

            #region 定义流程信息
            var processModel = new WfProcessModel();
            processModel.linkDataArray = new List <WfTransition>();
            processModel.nodeDataArray = new List <WfActivity>();
            #region start 节点
            //start节点
            var actStart = new WfActivity()
            {
                activityType = WfActivityType.Start,
                key          = Guid.NewGuid().ToString(),
                text         = "开始"
            };
            processModel.nodeDataArray.Add(actStart);

            #endregion

            #region //填写信息
            var actInput = new WfActivity()
            {
                activityType = WfActivityType.Task,
                key          = Guid.NewGuid().ToString(),
                text         = "填写信息"
            };
            processModel.nodeDataArray.Add(actInput);

            //link
            var linkStart2Input = new WfTransition()
            {
                from = actStart.key,
                to   = actInput.key
            };
            processModel.linkDataArray.Add(linkStart2Input);

            #endregion

            #region 部门经理审核
            var actDept = new WfActivity()
            {
                activityType = WfActivityType.Task,
                key          = Guid.NewGuid().ToString(),
                text         = "部门经理审批",
                roleIds      = roleIdDept.ToString()
            };
            processModel.nodeDataArray.Add(actDept);

            //link
            var linkInput2Dept = new WfTransition()
            {
                from = actInput.key,
                to   = actDept.key
            };
            processModel.linkDataArray.Add(linkInput2Dept);
            #endregion

            #region 副总经理审核
            var actDeputy = new WfActivity()
            {
                activityType = WfActivityType.Task,
                key          = Guid.NewGuid().ToString(),
                text         = "副总经理审批",
                roleIds      = roleIdDeputy.ToString()
            };
            processModel.nodeDataArray.Add(actDeputy);

            //link
            var linkDept2Deputy = new WfTransition()
            {
                from      = actDept.key,
                to        = actDeputy.key,
                condition = " Days<5 ",
            };
            processModel.linkDataArray.Add(linkDept2Deputy);
            #endregion

            #region 总经理审核
            var actManager = new WfActivity()
            {
                activityType = WfActivityType.Task,
                key          = Guid.NewGuid().ToString(),
                text         = "总经理审批",
                roleIds      = roleIdManager.ToString()
            };
            processModel.nodeDataArray.Add(actManager);

            //link
            var linkDept2Manager = new WfTransition()
            {
                from      = actDept.key,
                to        = actManager.key,
                condition = " Days>5 ",
            };
            processModel.linkDataArray.Add(linkDept2Manager);
            #endregion

            #region 人事审核
            var actHuRes = new WfActivity()
            {
                activityType = WfActivityType.Task,
                key          = Guid.NewGuid().ToString(),
                text         = "人事审批",
                roleIds      = roleIdHuRes.ToString()
            };
            processModel.nodeDataArray.Add(actHuRes);

            //link 部门-人事
            var linkDept2HuRes = new WfTransition()
            {
                from = actDept.key,
                to   = actHuRes.key,
            };
            processModel.linkDataArray.Add(linkDept2HuRes);
            //link 副总-人事
            var linkDeputy2HuRes = new WfTransition()
            {
                from = actDeputy.key,
                to   = actHuRes.key,
            };
            processModel.linkDataArray.Add(linkDeputy2HuRes);
            //link 部门-人事
            var linkManager2HuRes = new WfTransition()
            {
                from = actManager.key,
                to   = actHuRes.key,
            };
            processModel.linkDataArray.Add(linkManager2HuRes);
            #endregion

            #region 结束
            var actEnd = new WfActivity()
            {
                activityType = WfActivityType.End,
                key          = Guid.NewGuid().ToString(),
                text         = "结束",
            };
            processModel.nodeDataArray.Add(actEnd);

            //link
            var linkHuRes2End = new WfTransition()
            {
                from = actHuRes.key,
                to   = actEnd.key,
            };
            processModel.linkDataArray.Add(linkHuRes2End);
            #endregion
            #endregion

            process.ProcessContent = JsonConvert.SerializeObject(processModel);

            await WfProcessRepository.SaveAsync(process);
        }
示例#8
0
 public Task <WfProcess> GetProcessBySource(TableSource src)
 {
     return(WfProcessRepository.GetBySource(src));
 }
示例#9
0
        public async Task <ActionResult> GetFlowData(long id)
        {
            var flow = await WfProcessRepository.GetByIdAsync(id);

            return(Json(flow, JsonRequestBehavior.AllowGet));
        }