public ActionResult GetFlowApproveInfo(FlowApprove model) { model.ApproveUser = this.UserInfo.UserID.ToString(); var result = this.FlowTaskService.GetFlowApproveInfo(model); return(JsonResult(result, true)); }
public ActionResult ApproveFlow(FlowApprove model) { model.ReallyApproveUser = UserInfo.UserID; this.FlowTaskService.ApproveActive(model); return(JsonResult(new ResultEntity() { result = true })); }
public Tuple <int, List <FlowApproveInfoDo> > GetFlowApproveInfo(FlowApprove model) { Mapper.Initialize(a => { a.CreateMap <FlowApprove, FlowApproveInfoDo>() .ForMember(de => de.FlowName, op => { op.MapFrom(s => s.FlowTaskInfo.WorkFlowInfo.FlowName); }) .ForMember(de => de.FormId, op => { op.MapFrom(s => s.FlowTaskInfo.FormId); }) .ForMember(de => de.FormInfoId, op => { op.MapFrom(s => s.FlowTaskInfo.FormInfoId); }) .ForMember(de => de.StartTime, op => { op.MapFrom(s => s.FlowTaskInfo.CreateTime); }) .ForMember(de => de.StartUserName, op => { op.MapFrom(s => s.FlowTaskInfo.Userinfo.UserReallyname); }) .ForMember(de => de.FlowStepName, op => { op.MapFrom(s => s.FlowStepInfo.name); }); }); using (var dal = BaseInfo._container.Resolve <UnitOfWork>()) { var messageRepository = dal.GetRepository <FlowApprove>(); var conditions = ExpandHelper.True <FlowApprove>().And(a => a.ApproveResult == 0); if (model.FlowInfoId > 0) { conditions = conditions.And(a => a.FlowInfoId == model.FlowInfoId); } if (!string.IsNullOrEmpty(model.ApproveUser)) { conditions = conditions.And(a => a.ApproveUser.StartsWith(model.ApproveUser + ",") || a.ApproveUser.Contains("," + model.ApproveUser + ",") || a.ApproveUser.EndsWith("," + model.ApproveUser) || a.ApproveUser == model.ApproveUser); } var templist = dal.GetRepository <FlowApprove>().Get(conditions, includeProperties: "FlowStepInfo,FlowTaskInfo,FlowTaskInfo.Userinfo,FlowTaskInfo.WorkFlowInfo").ProjectToQueryable <FlowApproveInfoDo>(); var count = templist.Count(); if (model.order != null && model.order.Count() > 0) { foreach (var item in model.order) { var column = model.columns.ElementAt(int.Parse(item.column)); templist = templist.OrderSort(column.data, item.dir); } } var result = templist.PageBy(model.pageIndex, model.pageSize).ToList(); return(new Tuple <int, List <FlowApproveInfoDo> >(count, result)); } }
public ActionResult GetFlowApproveSelf(FlowApprove model) { var result = this.FlowTaskService.GetFlowApproveSelf(model); return(JsonResult(result)); }
public void ExecuteFlow(FlowInfo flowinfo, List <string> formObj) { using (var dal = BaseInfo._container.Resolve <UnitOfWork>()) { var fleidsDis = new Dictionary <string, object>(); #region 保存表单 string keys = "(", values = "("; var formMolde = dal.GetRepository <FormInfo>().Get(a => a.FormId == flowinfo.FormId).FirstOrDefault(); var fieldinfosql = @"SELECT syscolumns.name as name,systypes.name as type FROM syscolumns, systypes WHERE syscolumns.xusertype = systypes.xusertype AND syscolumns.id = object_id('" + formMolde.DBName + "')"; var cc = dal.context.Database.SqlQuery <fieldInfo>(fieldinfosql).ToList(); formObj.ForEach(a => { var temp = a.Split('='); fleidsDis.Add(temp[0].ToString(), temp[1]); if (temp[0] == "formid" || temp[0] == "flowid") { return; } if (temp[1] == "") { return; } var singlefieldinfo = cc.Where(b => b.name == temp[0]).FirstOrDefault(); keys += temp[0] + ","; if (singlefieldinfo.type != "int") { values += "'" + temp[1] + "',"; } else { values += temp[1] + ","; } }); keys = keys.Substring(0, keys.Length - 1) + ")"; values = values.Substring(0, values.Length - 1) + ")"; var sql = "insert into " + formMolde.DBName + keys + " values " + values; dal.context.Database.ExecuteSqlCommand(sql, new object[] {}); #endregion #region 得到插入表单信息Id var newidsql = "select max(" + formMolde.FieldKey + ") from " + formMolde.DBName; var newid = dal.context.Database.SqlQuery <int>(newidsql).ToList(); dal.Save(); flowinfo.FormInfoId = newid[0]; #endregion #region 得到flow信息 var workflowInfo = dal.GetRepository <WorkFlow>().Get(a => a.FlowID == flowinfo.FlowId, includeProperties: "flowSteps,flowActives,activeCondis").FirstOrDefault(); var startStep = workflowInfo.flowSteps.Where(a => a.name == "开始").FirstOrDefault(); var line = workflowInfo.flowActives.Where(a => a.from == startStep.flowNodeName).ToList(); Func <string, string, bool, bool> MathCalculate = (condits, Itemto, ispp) => { if ((bool)CommonHelper.MathCalculate(condits)) { var nextStep = workflowInfo.flowSteps.Where(c => c.flowNodeName == Itemto).FirstOrDefault(); flowinfo.FlowInfoState = nextStep.stepName == "结束" ? FlowState.Finish : FlowState.Underway; flowinfo.FlowStepId = nextStep.StepId; ispp = true; } else { flowinfo.FlowInfoState = FlowState.Failure; flowinfo.FlowStepId = 0; } return(ispp); }; Func <WorkFlow, FlowActive, bool> ApproveProcess = (workflow, flowActive) => { var ispp = false; var condit = dal.GetRepository <ActiveCondition>().Get(b => b.ActiveId == flowActive.ActiveId).OrderBy(b => b.Index).ToList(); if (condit.Count == 0) { //没有条件 var nextStep = workflow.flowSteps.Where(c => c.flowNodeName == flowActive.to).FirstOrDefault(); flowinfo.FlowInfoState = nextStep.stepName == "结束" ? FlowState.Finish : FlowState.Underway; flowinfo.FlowStepId = workflow.flowSteps.Where(b => b.flowNodeName == flowActive.to).FirstOrDefault().StepId; ispp = true; } else if (condit.Count == 1) { //有一个条件 fleidsDis.ToList().ForEach(a => { if (condit[0].Field == a.Key) { var cond = a.Value + condit[0].Compare + condit[0].CompareValue; ispp = MathCalculate(cond, flowActive.to, ispp); } }); } else { //有多个条件 var cond = ""; var isppy = false; condit.ForEach(a => { fleidsDis.ToList().ForEach(c => { if (a.Field == c.Key) { cond += c.Key + a.Compare + a.CompareValue + a.Logic; } }); }); ispp = MathCalculate(cond, flowActive.to, isppy); } return(ispp); }; if (line.Count > 1) //多条线 { foreach (var item in line) { if (ApproveProcess(workflowInfo, item)) { break; } } } else { //一条线 ApproveProcess(workflowInfo, line[0]); } dal.GetRepository <FlowInfo>().Insert(flowinfo); #endregion #region 流进度创建 if (flowinfo.FlowStepId != 0) { var flowstep = dal.GetRepository <FlowStep>().Get(a => a.StepId == flowinfo.FlowStepId).FirstOrDefault(); var flowApprove = new FlowApprove(); flowApprove.FlowInfoId = flowinfo.FlowInfoId; flowApprove.ApproveUser = flowstep.stepUser; flowApprove.ApproveResult = 0; flowApprove.FlowStepId = flowstep.StepId; dal.GetRepository <FlowApprove>().Insert(flowApprove); } #endregion dal.Save(); } }
public Tuple <int, List <FlowApproveDo> > GetFlowApproveSelf(FlowApprove model) { Mapper.Initialize(a => { a.CreateMap <FlowApprove, FlowApproveDo>() .ForMember(de => de.ApproveUserName, op => { op.MapFrom(s => s.ApproveUser); }) .ForMember(de => de.ReallyApproveUserName, op => { op.MapFrom(s => s.ReallyApproveUserInfo.UserReallyname); }) .ForMember(de => de.FlowStepName, op => { op.MapFrom(s => s.FlowStepInfo.name); }); }); using (var dal = BaseInfo._container.Resolve <UnitOfWork>()) { var messageRepository = dal.GetRepository <FlowApprove>(); var conditions = ExpandHelper.True <FlowApprove>(); if (model.FlowInfoId > 0) { conditions = conditions.And(a => a.FlowInfoId == model.FlowInfoId); } if (!string.IsNullOrEmpty(model.ApproveUser)) { conditions = conditions.And(a => a.ApproveUser.StartsWith(model.ApproveUser + ",") || a.ApproveUser.Contains("," + model.ApproveUser + ",") || a.ApproveUser.EndsWith("," + model.ApproveUser) || a.ApproveUser == model.ApproveUser); } var templist = dal.GetRepository <FlowApprove>().Get(conditions, includeProperties: "FlowStepInfo,FlowTaskInfo").ProjectToQueryable <FlowApproveDo>(); var count = templist.Count(); if (model.order != null && model.order.Count() > 0) { foreach (var item in model.order) { var column = model.columns.ElementAt(int.Parse(item.column)); templist = templist.OrderSort(column.data, item.dir); } } var result = templist.OrderBy(a => a.ApproveId).PageBy(model.pageIndex, model.pageSize).ToList(); result.ForEach(a => { var name = ""; if (a.ApproveUserName.Contains(',')) { var cc = a.ApproveUserName.Split(','); foreach (var item in cc) { var approveid = int.Parse(item); var usrmoel = dal.GetRepository <DDit.Core.Data.Entity.SystemEntity.User>().Get(b => b.UserID == approveid).FirstOrDefault(); name += usrmoel.UserReallyname + ","; } a.ApproveUserName = name.Substring(0, name.Length - 1); } else { var approveid = int.Parse(a.ApproveUserName); a.ApproveUserName = dal.GetRepository <DDit.Core.Data.Entity.SystemEntity.User>().Get(b => b.UserID == approveid).FirstOrDefault().UserReallyname; } }); return(new Tuple <int, List <FlowApproveDo> >(count, result)); } }
public void ApproveActive(FlowApprove model) { using (var dal = BaseInfo._container.Resolve <UnitOfWork>()) { var ConnectionString = dal.context.Database.Connection.ConnectionString; #region 执行审批 var flowapproveRepository = dal.GetRepository <FlowApprove>(); var flowapprove = flowapproveRepository.Get(a => a.ApproveId == model.ApproveId).AsNoTracking().FirstOrDefault(); flowapprove.ApproveTime = DateTime.Now; flowapprove.ApproveResult = model.ApproveResult; flowapprove.ApproveRemark = model.ApproveRemark; flowapprove.ReallyApproveUser = model.ReallyApproveUser; flowapproveRepository.UpdateSup(flowapprove, new List <string>() { "ApproveTime", "ApproveResult", "ApproveRemark", "ReallyApproveUser" }); var flowinfo = dal.GetRepository <FlowInfo>().Get(a => a.FlowInfoId == flowapprove.FlowInfoId).AsNoTracking().FirstOrDefault(); if (flowapprove.ApproveResult == 2) { flowinfo.FlowInfoState = FlowState.Reject; dal.GetRepository <FlowInfo>().UpdateSup(flowinfo, new List <string>() { "FlowInfoState" }); dal.Save(); return; } #endregion #region 流任务处理 var workflowInfo = dal.GetRepository <WorkFlow>().Get(a => a.FlowID == flowinfo.FlowId, includeProperties: "forminfo,flowSteps,flowActives,activeCondis").FirstOrDefault(); var startStep = workflowInfo.flowSteps.Where(a => a.StepId == flowapprove.FlowStepId).FirstOrDefault(); var line = workflowInfo.flowActives.Where(a => a.from == startStep.flowNodeName).ToList(); var fleidsDis = new Dictionary <string, object>(); var sql = "select * from " + workflowInfo.forminfo.DBName + " where " + workflowInfo.forminfo.FieldKey + "=" + flowinfo.FormInfoId + ""; var dt = CommonHelper.SqlQueryForDataTatable(ConnectionString, sql); for (int i = 0; i < dt.Columns.Count; i++) { var ln = dt.Columns[i].ColumnName; fleidsDis.Add(ln, dt.Rows[0][ln]); } Func <string, string, bool, bool> MathCalculate = (condits, Itemto, ispp) => { if ((bool)CommonHelper.MathCalculate(condits)) { var nextStep = workflowInfo.flowSteps.Where(c => c.flowNodeName == Itemto).FirstOrDefault(); flowinfo.FlowInfoState = nextStep.stepName == "结束" ? FlowState.Finish : FlowState.Underway; flowinfo.FlowStepId = nextStep.StepId; ispp = true; } else { flowinfo.FlowInfoState = FlowState.Failure; flowinfo.FlowStepId = 0; } return(ispp); }; Func <WorkFlow, FlowActive, bool> ApproveProcess = (workflow, flowActive) => { var ispp = false; var condit = dal.GetRepository <ActiveCondition>().Get(b => b.ActiveId == flowActive.ActiveId).OrderBy(b => b.Index).ToList(); if (condit.Count == 0) { //没有条件 var nextStep = workflow.flowSteps.Where(c => c.flowNodeName == flowActive.to).FirstOrDefault(); flowinfo.FlowInfoState = nextStep.stepName == "结束" ? FlowState.Finish : FlowState.Underway; flowinfo.FlowStepId = workflow.flowSteps.Where(b => b.flowNodeName == flowActive.to).FirstOrDefault().StepId; ispp = true; } else if (condit.Count == 1) { //有一个条件 fleidsDis.ToList().ForEach(a => { if (condit[0].Field == a.Key) { var cond = a.Value + condit[0].Compare + condit[0].CompareValue; ispp = MathCalculate(cond, flowActive.to, ispp); } }); } else { //有多个条件 var cond = ""; var isppy = false; condit.ForEach(a => { fleidsDis.ToList().ForEach(c => { if (a.Field == c.Key) { cond += c.Key + a.Compare + a.CompareValue + a.Logic; } }); }); ispp = MathCalculate(cond, flowActive.to, isppy); } return(ispp); }; if (line.Count > 1) //多条线 { foreach (var item in line) { if (ApproveProcess(workflowInfo, item)) { break; } } } else //一条线 { ApproveProcess(workflowInfo, line[0]); } dal.GetRepository <FlowInfo>().UpdateSup(flowinfo, new List <string>() { "FlowInfoState", "FlowStepId" }); var EndStep = workflowInfo.flowSteps.Where(a => a.StepId == flowinfo.FlowStepId).FirstOrDefault(); if (flowinfo.FlowStepId != 0 && EndStep.stepName != "结束") { var flowstep = dal.GetRepository <FlowStep>().Get(a => a.StepId == flowinfo.FlowStepId).FirstOrDefault(); var flowApprove = new FlowApprove(); flowApprove.FlowInfoId = flowinfo.FlowInfoId; flowApprove.ApproveUser = flowstep.stepUser; flowApprove.ApproveResult = 0; flowApprove.FlowStepId = flowstep.StepId; dal.GetRepository <FlowApprove>().Insert(flowApprove); } #endregion dal.Save(); } }