public IDepartment GetDepartment(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { IDepartment department = null; if (part.Param_Participant == null) { throw new ApplicationException("父部门参与人未指定基于参于人"); } SysProcessParticipant participant = part.Param_Participant; if (participant.FunctionType == 3) { department = new SpecDepartmentFunc(base._context).GetDepartment(participant, pi, ai); } else if (participant.FunctionType == 2) { department = new StartDepartmentFunc(base._context).GetDepartment(pi); } else if (participant.FunctionType == 5) { department = this.GetDepartment(participant, pi, ai); } else { if (participant.FunctionType != 10) { throw new ApplicationException("在ParentDepartmentFunc的GetDepartment中FunctionType有误!"); } department = new SpecialLevelParentDeptFunc(base._context).GetDepartment(participant, pi, ai); } return(base._orgProxy.GetDepartmentById(department.Parent_ID.Value)); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (ai.ToTransitionInstances.Count != 1) { throw new ApplicationException(string.Format("连接线实例不正确,AI:{0}", ai.ActivityInstanceId)); } SysTransitionInstance instance = ai.ToTransitionInstances.First <SysTransitionInstance>(); SysActivityInstance preActivityInstance = instance.PreActivityInstance; if (preActivityInstance == null) { throw new ApplicationException(string.Format("获得上一个活动实例失败,ID:{0}", instance.PostActivityInstanceId)); } if (preActivityInstance.Activity == null) { throw new ApplicationException(string.Format("获得上一个活动定义失败,ID:{0}", preActivityInstance.ActivityId)); } List <int> list = (from p in preActivityInstance.WorkItems select p.OwnerId.Value).Distinct <int>().ToList <int>(); List <IUser> source = new List <IUser>(); foreach (int num in list) { IUser userById = base._orgProxy.GetUserById(num); if (userById != null) { source.Add(userById); } } return(source.ToList <IUser>()); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { string assemblyName = part.Param_AssemblyName; string className = part.Param_ClassName; return(CustomHandlerLoader.GetHandlerWithName <IParticipantFunc>(assemblyName, className, new object[0]).GetUsers(part, pi, ai)); }
protected void RemindForParticipant(int?remindType, SysProcessParticipant part, SysProcessRemindTemplate template) { if (template == null) { throw new ApplicationException("RemindTemplate为空"); } foreach (IUser user in ParticipantHelper.GetUsers(this._context, part, this.PI, this.AI, this.creator.WiOwnerId).Distinct <IUser>()) { string str3; this.AddRemindToken(user); string remindTitleByTemplate = this.creator.GetRemindTitleByTemplate(template, user); string remindContentByTemplate = this.creator.GetRemindContentByTemplate(template, user); int valueOrDefault = remindType.GetValueOrDefault(); if (remindType.HasValue) { switch (valueOrDefault) { case 0: if (this.EmailHandler == null) { throw new ApplicationException("未找到邮件服务,无法发送邮件提醒"); } this.EmailHandler.SendEmail(user, remindTitleByTemplate, remindContentByTemplate, this.Model.AprovePageOuterURL, this.Model.ProcessDetailOuterURL); break; case 1: if (this.ShortMessageHandler == null) { throw new ApplicationException("未找到短信服务,无法发送短信提醒"); } goto Label_00EA; case 2: if (this.CustomRemindHandler == null) { throw new ApplicationException("未找到自定义提醒服务,无法处理自定义提醒"); } goto Label_013F; } } continue; Label_00EA: str3 = null; if (string.IsNullOrEmpty(remindTitleByTemplate)) { str3 = remindContentByTemplate; } else { StringBuilder builder = new StringBuilder(remindTitleByTemplate); builder.AppendLine(); builder.AppendLine(remindContentByTemplate); str3 = builder.ToString(); } this.ShortMessageHandler.SendMessage(user, str3); continue; Label_013F: this.CustomRemindHandler.Execute(user, remindTitleByTemplate, remindContentByTemplate, this.PI, this.AI, this.WorkItem, this.Model); } }
public IDepartment GetDepartment(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (part == null) { throw new ArgumentNullException("part"); } SysProcessParticipant participant = part.Param_Participant; if (participant == null) { throw new ApplicationException("部门经理参与人未指定基于参于人"); } if (participant.FunctionType == 3) { SpecDepartmentFunc func = new SpecDepartmentFunc(base._context); return(func.GetDepartment(participant, pi, ai)); } if (participant.FunctionType == 2) { StartDepartmentFunc func2 = new StartDepartmentFunc(base._context); return(func2.GetDepartment(pi)); } if (participant.FunctionType == 5) { ParentDepartmentFunc func3 = new ParentDepartmentFunc(base._context); return(func3.GetDepartment(participant, pi, ai)); } if (participant.FunctionType != 10) { throw new ApplicationException("部门经理参与人获得部门失败,可能是参数类型错误"); } SpecialLevelParentDeptFunc func4 = new SpecialLevelParentDeptFunc(base._context); return(func4.GetDepartment(participant, pi, ai)); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { List <IUser> source = new List <IUser>(); using (IEnumerator <SysActivityParticipant> enumerator = ai.Activity.ActivityParticipants.GetEnumerator()) { while (enumerator.MoveNext()) { Func <SysProcessParticipant, bool> predicate = null; SysActivityParticipant p = enumerator.Current; if (predicate == null) { predicate = i => i.ParticipantId == p.ParticipantId; } SysProcessParticipant participant = pi.Process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(predicate); if (participant != null) { int? wiOwnerId = null; List <IUser> collection = ParticipantHelper.GetUsers(base._context, participant, pi, ai, wiOwnerId); source.AddRange(collection); } } } return(source.Distinct <IUser>().ToList <IUser>()); }
/// <summary> /// 删除流程参与人 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnDelete_Click(object sender, EventArgs e) { try { long?id = (sender as LinkButton).CommandArgument.ToLongNullable(); using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope()) { using (BizDataContext db = new BizDataContext()) { SysProcessParticipant p = db.FindById <SysProcessParticipant>(id); if (p != null) { //同步删除关联的活动参与人 var apList = db.Where <SysActivityParticipant>(x => x.ParticipantId == id); foreach (var ap in apList) { db.Delete(ap); } db.Delete(p); } } ts.Complete(); } BindGrid(); } catch (Exception ex) { this.AjaxAlert(ex); } }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { IUser startUser = this.GetStartUser(pi); return(new List <IUser> { startUser }); }
private void LoadProcessParticipant(SysProcessParticipant pp, SysProcess p) { pp.Process = p; pp.Param_Participant = p.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(i => i.ParticipantId == pp.Param_ParticipantId); string condition = string.Format("participantId = {0}", pp.ParticipantId); pp.ActivityParticipants = this._context.Where <SysActivityParticipant>(condition, new DbParameter[0]); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { IDepartment department = this.GetDepartment(pi); if (department == null) { throw new ApplicationException("在StartDepartmentFunc的GetUsers中获取部门有误!"); } return(base._orgProxy.GetDepartmentUsers(department.Department_ID)); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { IDepartment department = this.GetDepartment(part, pi, ai); if (department == null) { throw new ApplicationException("在SpecialLevelParentDeptFunc中未能找到指定层级的上级部门!"); } return(base._orgProxy.GetDepartmentUsers(department.Department_ID)); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (part == null) { throw new ArgumentNullException("part"); } if (!part.Param_RoleId.HasValue) { throw new ApplicationException("具体角色参与人未指定角色参数"); } return(base._orgProxy.GetRoleUsers(part.Param_RoleId.Value)); }
public IDepartment GetDepartment(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (part == null) { throw new ArgumentNullException("part"); } if (!part.Param_DepartmentId.HasValue) { throw new ApplicationException("未指定参与人的部门参数"); } return(base._orgProxy.GetDepartmentById(part.Param_DepartmentId.Value)); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (!this._wiOwnerId.HasValue) { throw new ApplicationException("计划工作项负责人参与人失败"); } IUser userById = base._orgProxy.GetUserById(this._wiOwnerId.Value); return(new List <IUser> { userById }); }
public IDepartment GetDepartment(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { IDepartment department = null; if (part.Param_Participant == null) { throw new ApplicationException("父部门参与人未指定基于参于人"); } SysProcessParticipant participant = part.Param_Participant; if (participant.FunctionType == 3) { department = new SpecDepartmentFunc(base._context).GetDepartment(participant, pi, ai); } else if (participant.FunctionType == 2) { department = new StartDepartmentFunc(base._context).GetDepartment(pi); } else if (participant.FunctionType == 5) { department = new ParentDepartmentFunc(base._context).GetDepartment(participant, pi, ai); } else { if (participant.FunctionType != 10) { throw new ApplicationException("在SpecialLevelParentDeptFunc的GetDepartment中FunctionType有误!"); } department = this.GetDepartment(participant, pi, ai); } string str = part.Param_Constant; if (!base._orgProxy.IsSupportDepartmentLevel()) { throw new ApplicationException("OrgProxy未实现部门层级,请重载IsSupportDepartmentLevel方法"); } IDepartment parentDepartment = department; if (parentDepartment == null) { throw new ApplicationException("在SpecialLevelParentDeptFunc的GetUsers中获取启动部门失败!"); } for (string str2 = base._orgProxy.GetDepartmentLevelCode(parentDepartment.Department_ID).ToString(); (str != str2) && (parentDepartment != null); str2 = base._orgProxy.GetDepartmentLevelCode(parentDepartment.Department_ID).ToString()) { parentDepartment = base._orgProxy.GetParentDepartment(parentDepartment.Department_ID); } if (parentDepartment == null) { throw new ApplicationException("在SpecialLevelParentDeptFunc中未能找到指定层级的上级部门!"); } return(parentDepartment); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (part == null) { throw new ArgumentNullException("part"); } if (!part.Param_UserId.HasValue) { throw new ApplicationException("未指定参与人的用户参数"); } return(new List <IUser> { base._orgProxy.GetUserById(part.Param_UserId.Value) }); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { List <int> result = new List <int>(); this.GetUserIdList(ai, result); List <IUser> source = new List <IUser>(); foreach (int num in result.Distinct <int>()) { IUser userById = base._orgProxy.GetUserById(num); if (userById != null) { source.Add(userById); } } return(source.ToList <IUser>()); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (part == null) { throw new ArgumentNullException("part"); } if (string.IsNullOrEmpty(part.JScriptText)) { throw new ApplicationException("未指定参与人的Python脚本"); } List <IUser> list = new List <IUser>(); foreach (int num in this._manager.ExecutePython(pi, part.JScriptText).Distinct <int>()) { list.Add(base._orgProxy.GetUserById(num)); } return(list); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { IDepartment department = this.GetDepartment(part, pi, ai); if (department == null) { throw new ApplicationException("在参与人中未找到指定部门"); } IUser departmentManager = base._orgProxy.GetDepartmentManager(department.Department_ID); if (departmentManager == null) { throw new ApplicationException("在指定部门中未找到指定部门经理"); } return(new List <IUser> { departmentManager }); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { if (part == null) { throw new ArgumentNullException("part"); } if (part.Param_Participant == null) { throw new ApplicationException("部门角色参与人未指定基于参与人"); } if (!part.Param_RoleId.HasValue) { throw new ApplicationException("未指定参与人的角色"); } SysProcessParticipant participant = part.Param_Participant; IDepartment department = null; if (participant.FunctionType == 3) { department = new SpecDepartmentFunc(base._context).GetDepartment(participant, pi, ai); } else if (participant.FunctionType == 2) { department = new StartDepartmentFunc(base._context).GetDepartment(pi); } else if (participant.FunctionType == 5) { department = new ParentDepartmentFunc(base._context).GetDepartment(participant, pi, ai); } else { if (participant.FunctionType != 10) { throw new ApplicationException("在DepartmentRoleFunc的GetUsers中FunctionType有误!"); } department = new SpecialLevelParentDeptFunc(base._context).GetDepartment(participant, pi, ai); } return(base._orgProxy.GetDepartmentRoleUsers(department.Department_ID, part.Param_RoleId.Value)); }
/// <summary> /// 保存流程参与人 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void cbc_CallBack(object sender, CallBackEventArgs e) { JavaScriptSerializer js = new JavaScriptSerializer(); string errorMsg = string.Empty; //错误消息 bool isError = false; try { int? functionType = e.Context["FunctionType"].ToStringNullable().ToIntNullable(); int? userId = e.Context["UserId"].ToStringNullable().ToIntNullable(); int? roleId = e.Context["RoleId"].ToStringNullable().ToIntNullable(); long processId = e.Context["ProcessId"].ToLong(); string participantName = string.Empty; if (functionType == null) { throw new Exception("参与人类型不能为空"); } if (functionType == (int)ParticipantFunctionType.SpecialUser) { T_User user = this.DataHelper.FindById <T_User>(userId); if (user == null) { throw new Exception("请指定具体人员"); } participantName = user.User_Name; } if (functionType == (int)ParticipantFunctionType.SpecialRole) { T_Role role = this.DataHelper.FindById <T_Role>(roleId); if (role == null) { throw new Exception("请指定具体角色"); } participantName = string.Format("{0}角色", role.Role_Name); } if (functionType == (int)ParticipantFunctionType.DIRECT_MANAGER) { participantName = "直属主管"; } using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope()) { using (BizDataContext db = new BizDataContext()) { int count = db.Set <SysProcessParticipant>().Where(p => p.ProcessId == processId && p.FunctionType == functionType && p.Param_RoleId == roleId && p.Param_UserId == userId).Count(); if (count > 0) { throw new Exception("已存在相同的流程参与人"); } long?param_partId = null; if (functionType == (int)ParticipantFunctionType.DIRECT_MANAGER) { SysProcessParticipant pStartUser = new SysProcessParticipant() { ParticipantId = db.GetNextIdentity(), ProcessId = processId, FunctionType = (int)ParticipantFunctionType.StartUser, ParticipantName = "流程启动人", }; param_partId = pStartUser.ParticipantId; db.Insert(pStartUser); } SysProcessParticipant pCurrent = new SysProcessParticipant() { ParticipantId = db.GetNextIdentity(), ProcessId = processId, FunctionType = functionType, Param_UserId = userId, Param_RoleId = roleId, Param_ParticipantId = param_partId, ParticipantName = participantName, }; db.Insert(pCurrent); } ts.Complete(); } } catch (Exception ex) { isError = true; errorMsg = ex.Message; } string result = js.Serialize(new { IsError = isError, Error = errorMsg, }); e.Result = result; }
private void ExecuteForManual(SysActivity activity, SysProcess process, Queue <WorkflowMessage> queue) { if ((activity.ActivityParticipants == null) || (activity.ActivityParticipants.Count == 0)) { throw new ApplicationException("未指定参与人"); } Dictionary <SysWorkItemApproveGroup, List <IUser> > dictionary = new Dictionary <SysWorkItemApproveGroup, List <IUser> >(20); List <IUser> list = new List <IUser>(); if (this.AI.UserDefinedApproveUsers.Count > 0) { SysWorkItemApproveGroup key = this.CreateWorkItemGroup(); IOrgProxy orgProxy = OrgProxyFactory.GetProxy(base.Context); List <IUser> users = (from p in this.AI.UserDefinedApproveUsers select orgProxy.GetUserById(p.UserId.Value)).ToList <IUser>(); this.RemoveRepeatedUsers(users); list.AddRange(users); dictionary.Add(key, users); } else { using (IEnumerator <SysActivityParticipant> enumerator = activity.ActivityParticipants.GetEnumerator()) { while (enumerator.MoveNext()) { Func <SysProcessParticipant, bool> predicate = null; SysActivityParticipant activity_part = enumerator.Current; SysWorkItemApproveGroup group = this.CreateWorkItemGroup(activity_part); if (predicate == null) { predicate = p => p.ParticipantId == activity_part.ParticipantId.Value; } SysProcessParticipant part = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(predicate); if (part == null) { throw new ApplicationException("参与人为空"); } int? wiOwnerId = null; var users = ParticipantHelper.GetUsers(base.Context, part, base.PI, this.AI, wiOwnerId); List <IUser> targetUsers = users; this.AssertGroupHasUsers(activity_part, group, targetUsers); this.RemoveRepeatedUsers(targetUsers); list.AddRange(targetUsers); dictionary.Add(group, targetUsers); } } } if (list.Count == 0) { bool?isPassedWithNoParticipants = this.AI.Activity.IsPassedWithNoParticipants; if (!(isPassedWithNoParticipants.HasValue ? isPassedWithNoParticipants.GetValueOrDefault() : false)) { throw new ApplicationException("未计算出任何参与人"); } SysActivityInstance aI = this.AI; aI.InstanceStatus = 10; aI.EndTime = new DateTime?(DateTime.Now); aI.ApproveResult = 1; aI.ExpressionValue = 1; aI.Remark = "无人审核,自动通过"; base.PICacheFactory.UpdateActiviyInstance(this.AI); WorkflowMessage item = base.Engine.NewCompleteActivityMessage(this.AI); queue.Enqueue(item); } else { SysActivity activity3 = this.AI.Activity; if (!activity3.PassType.HasValue) { activity3.PassType = 1; if (!activity3.MinPassNum.HasValue) { activity3.MinPassNum = 1; } } foreach (KeyValuePair <SysWorkItemApproveGroup, List <IUser> > pair in dictionary) { SysWorkItemApproveGroup group3 = pair.Key; foreach (IUser user in pair.Value) { this.CreateWorkItem(user, group3); } } } if (this.AI.UserDefinedApproveUsers.Count > 0) { base.PICacheFactory.ClearApproveUsers(this.AI); } }
public static List <IUser> GetUsers(DataContext ctx, SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai, int?wiOwnerId = new int?()) { List <IUser> list = new List <IUser>(); int valueOrDefault = part.FunctionType.GetValueOrDefault(); if (part.FunctionType.HasValue) { switch (valueOrDefault) { case 0: { StartUserFunc func = new StartUserFunc(ctx); return(func.GetUsers(part, pi, ai).ToList <IUser>()); } case 1: { SpecUserFunc func7 = new SpecUserFunc(ctx); return(func7.GetUsers(part, pi, ai).ToList <IUser>()); } case 2: { StartDepartmentFunc func2 = new StartDepartmentFunc(ctx); return(func2.GetUsers(part, pi, ai).ToList <IUser>()); } case 3: { SpecDepartmentFunc func3 = new SpecDepartmentFunc(ctx); return(func3.GetUsers(part, pi, ai).ToList <IUser>()); } case 4: { DepartmentManagerFunc func4 = new DepartmentManagerFunc(ctx); return(func4.GetUsers(part, pi, ai).ToList <IUser>()); } case 5: { ParentDepartmentFunc func5 = new ParentDepartmentFunc(ctx); return(func5.GetUsers(part, pi, ai).ToList <IUser>()); } case 6: { SpecRoleFunc func8 = new SpecRoleFunc(ctx); return(func8.GetUsers(part, pi, ai).ToList <IUser>()); } case 7: { DepartmentRoleFunc func6 = new DepartmentRoleFunc(ctx); return(func6.GetUsers(part, pi, ai).ToList <IUser>()); } case 8: { PythonFunc func9 = new PythonFunc(ctx); return(func9.GetUsers(part, pi, ai).ToList <IUser>()); } case 9: { DirectManagerFunc func10 = new DirectManagerFunc(ctx); return(func10.GetUsers(part, pi, ai).ToList <IUser>()); } case 10: { SpecialLevelParentDeptFunc func11 = new SpecialLevelParentDeptFunc(ctx); return(func11.GetUsers(part, pi, ai).ToList <IUser>()); } case 11: try { CustomPluginFunc func16 = new CustomPluginFunc(ctx); return(func16.GetUsers(part, pi, ai).ToList <IUser>()); } catch (Exception exception) { throw new ApplicationException("自定义参与人插件错误:" + exception.Message, exception); } break; case 100: { PrevActivityParticipantFunc func14 = new PrevActivityParticipantFunc(ctx); return(func14.GetUsers(part, pi, ai).ToList <IUser>()); } case 0x65: { PrevAllParticipantFunc func15 = new PrevAllParticipantFunc(ctx); return(func15.GetUsers(part, pi, ai).ToList <IUser>()); } case 0x66: { CurrentActivityParticipantFunc func12 = new CurrentActivityParticipantFunc(ctx); return(func12.GetUsers(part, pi, ai).ToList <IUser>()); } case 0x67: { CurrentWorkItemOwnerFunc func13 = new CurrentWorkItemOwnerFunc(ctx, wiOwnerId); return(func13.GetUsers(part, pi, ai).ToList <IUser>()); } } } throw new ApplicationException("在ParticipantHelper的GetUsers中参数类型有误!"); }
public List <IUser> GetParticipantUsers(long activityId, int?processInstanceId = new int?(), int?activityInstanctId = new int?()) { Func <SysActivityInstance, bool> predicate = null; Func <SysActivityInstance, bool> func3 = null; List <IUser> list3; try { SysActivity activity; int? nullable = processInstanceId; if ((nullable.HasValue ? nullable.GetValueOrDefault() : -1) <= 0) { processInstanceId = null; } int?nullable2 = activityInstanctId; if ((nullable2.HasValue ? nullable2.GetValueOrDefault() : -1) <= 0) { activityInstanctId = null; } List <IUser> users = new List <IUser>(); SysProcess processCacheByActivity = this._processCache.GetProcessCacheByActivity(activityId, out activity); SysProcessInstance pi = null; SysActivityInstance ai = null; if (processInstanceId.HasValue) { pi = new ProcessInstanceCacheFactory(this._context).GetProcessInstanceCache(processInstanceId.Value); if (pi == null) { throw new ApplicationException(string.Format("流程实例ID:{0}不正确", processInstanceId)); } if (activityInstanctId.HasValue) { if (predicate == null) { predicate = p => p.ActivityInstanceId == activityInstanctId.Value; } ai = pi.ActivityInstances.FirstOrDefault <SysActivityInstance>(predicate); if (ai == null) { throw new ApplicationException(string.Format("活动实例ID:{0}不正确", activityInstanctId)); } } else { if (func3 == null) { func3 = delegate(SysActivityInstance p) { long?nullable1 = p.ActivityId; long num = activityId; return((nullable1.GetValueOrDefault() == num) && nullable1.HasValue); }; } ai = pi.ActivityInstances.FirstOrDefault <SysActivityInstance>(func3); } } using (IEnumerator <SysActivityParticipant> enumerator = activity.ActivityParticipants.GetEnumerator()) { while (enumerator.MoveNext()) { Func <SysProcessParticipant, bool> func = null; SysActivityParticipant activity_part = enumerator.Current; if (func == null) { func = p => p.ParticipantId == activity_part.ParticipantId.Value; } SysProcessParticipant part = processCacheByActivity.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func); if (part == null) { throw new ApplicationException("参与人为空"); } int? wiOwnerId = null; List <IUser> collection = ParticipantHelper.GetUsers(this._context, part, pi, ai, wiOwnerId); users.AddRange(collection); } } RemoveRepeatedUsers(users); list3 = users; } catch (Exception exception) { AppLogHelper.Error(string.Format("GetParticipantUsers,activityId=[{0}]失败", activityId), exception); throw exception; } return(list3); }
public override IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai) { List <IUser> list = new List <IUser>(); IUser startUser = null; if (part == null) { throw new ArgumentNullException("part"); } SysProcessParticipant participant = part.Param_Participant; if (participant == null) { throw new ApplicationException("主属主管参与人未指定基于参于人"); } if (participant.FunctionType == 0) { startUser = new StartUserFunc(base._context).GetStartUser(pi); } else if (participant.FunctionType == 1) { SpecUserFunc func2 = new SpecUserFunc(base._context); startUser = func2.GetUsers(participant, pi, ai).FirstOrDefault <IUser>(); } else { if (participant.FunctionType != 9) { throw new ApplicationException("直属主管参与人获得人员失败,可能是参数类型错误"); } startUser = this.GetUsers(participant, pi, ai).FirstOrDefault <IUser>(); } if (startUser == null) { throw new ApplicationException("直属主管参与人获得人员失败,可能是参数类型错误"); } if (!startUser.Department_ID.HasValue) { throw new ApplicationException("人员没有部门,无法计算直属主管"); } IUser departmentManager = base._orgProxy.GetDepartmentManager(startUser.Department_ID.Value); if (departmentManager == null) { throw new ApplicationException(string.Format("部门ID:{0}没有设置经理", startUser.Department_ID)); } if (startUser.User_ID != departmentManager.User_ID) { list.Add(departmentManager); return(list); } IDepartment parentDepartment = base._orgProxy.GetParentDepartment(startUser.Department_ID.Value); if (parentDepartment != null) { if (parentDepartment.Department_ID != startUser.Department_ID) { list.Add(base._orgProxy.GetDepartmentManager(parentDepartment.Department_ID)); return(list); } } list.Add(departmentManager); return(list); }
public abstract IList <IUser> GetUsers(SysProcessParticipant part, SysProcessInstance pi, SysActivityInstance ai);
/// <summary> /// 复制流程,从“已启用”或“已升级”的流程进入设计,需要先复制一份流程供设计 /// 状态为“新增”,版本为当前最高版本 + 1 /// </summary> public SysProcess CopyProcess() { SysProcess result; using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope()) { using (BizDataContext db = new BizDataContext()) { //新流程 SysProcess newP = _process.ConvertTo <SysProcess>(); newP.ProcessId = db.GetNextIdentity(); //版本处理 newP.ProcessStatus = (int)ProcessState.Created; string maxVersion = db.Set <SysProcess>().Where(p => p.ProcessType == _process.ProcessType).OrderByDescending(p => p.ProcessVersion).First().ProcessVersion; newP.ProcessVersion = (maxVersion.ToInt() + 1).ToString(); result = newP; db.Insert(newP); //新流程参与人 var ppList = db.Set <SysProcessParticipant>().Where(p => p.ProcessId == _process.ProcessId).ToList(); Dictionary <long?, SysProcessParticipant> tempPpDict = new Dictionary <long?, SysProcessParticipant>(); foreach (var pp in ppList) { SysProcessParticipant newPp = pp.ConvertTo <SysProcessParticipant>(); newPp.ParticipantId = db.GetNextIdentity(); newPp.ProcessId = newP.ProcessId; tempPpDict[pp.ParticipantId] = newPp; //记录原始ID和新对象的关系 } foreach (var newPp in tempPpDict.Values) { if (newPp.Param_ParticipantId != null) //通过刚才记录的关系找到实际的值 { newPp.Param_ParticipantId = tempPpDict[newPp.Param_ParticipantId].ParticipantId; } db.Insert(newPp); } //新活动 var aList = db.Set <SysActivity>().Where(p => p.ProcessId == _process.ProcessId).ToList(); Dictionary <long?, SysActivity> tempADict = new Dictionary <long?, SysActivity>(); foreach (var a in aList) { SysActivity newA = a.ConvertTo <SysActivity>(); newA.ActivityId = db.GetNextIdentity(); newA.ProcessId = newP.ProcessId; tempADict[a.ActivityId] = newA;//记录原始ID和新对象的关系 db.Insert(newA); //新活动参与人 var apList = db.Set <SysActivityParticipant>().Where(p => p.ActivityId == a.ActivityId).ToList(); foreach (var ap in apList) { SysActivityParticipant newAp = ap.ConvertTo <SysActivityParticipant>(); newAp.ActivityParticipantId = db.GetNextIdentity(); newAp.ActivityId = newA.ActivityId; newAp.ParticipantId = tempPpDict[newAp.ParticipantId].ParticipantId; //通过刚才记录的关系找到实际的值 db.Insert(newAp); } } //连接线 var tList = db.Set <SysTransition>().Where(p => p.ProcessId == _process.ProcessId).ToList(); foreach (var t in tList) { SysTransition newT = t.ConvertTo <SysTransition>(); newT.TransitionId = db.GetNextIdentity(); newT.ProcessId = newP.ProcessId; //通过刚才记录的关系找到实际的值 newT.PreActivityId = tempADict[newT.PreActivityId].ActivityId; newT.PostActivityId = tempADict[newT.PostActivityId].ActivityId; db.Insert(newT); } //表单活动权限 var fpList = db.Set <SysFormPrivilege>().Where(p => p.ProcessId == _process.ProcessId).ToList(); foreach (var fp in fpList) { SysFormPrivilege newFp = fp.ConvertTo <SysFormPrivilege>(); newFp.PrivilegeId = db.GetNextIdentity(); newFp.ProcessId = newP.ProcessId; newFp.ActivityId = tempADict[newFp.ActivityId].ActivityId;//通过刚才记录的关系找到实际的值 db.Insert(newFp); } } ts.Complete(); } return(result); }
internal SysProcess LoadProcess(long processId) { SysProcess process = this._context.FindById <SysProcess>(new object[] { processId }); if (process == null) { throw new ApplicationException("流程ID不正确"); } if (process.EntityId.HasValue) { process.ProcessEntity = this._cacheFactory.GetEntityCache(process.EntityId.Value); } if (process.ActivityEntityId.HasValue) { process.ActivityEntity = this._cacheFactory.GetEntityCache(process.ActivityEntityId.Value); } if (process.FormId.HasValue) { process.Form = this._context.FindById <SysForm>(new object[] { process.FormId }); } string condition = string.Format("processId = {0}", processId); List <SysProcessProxy> list = this._context.Where <SysProcessProxy>(condition, new DbParameter[0]); List <SysProcessParticipant> list2 = this._context.Where <SysProcessParticipant>(condition, new DbParameter[0]); List <SysExpression> list3 = this._context.Where <SysExpression>(condition, new DbParameter[0]); List <SysTransition> list4 = this._context.Where <SysTransition>(condition, new DbParameter[0]); List <SysProcessRemind> list5 = this._context.Where <SysProcessRemind>(condition, new DbParameter[0]); List <SysProcessRemindParticipant> source = this._context.Where <SysProcessRemindParticipant>(condition, new DbParameter[0]); List <SysActivity> list7 = this._context.Where <SysActivity>(condition, new DbParameter[0]); List <SysActivityParticipant> list8 = this._context.Where <SysActivityParticipant>(condition, new DbParameter[0]); List <SysActivityOperation> list9 = this._context.Where <SysActivityOperation>(condition, new DbParameter[0]); List <SysActivityStep> list10 = this._context.Where <SysActivityStep>(condition, new DbParameter[0]); List <SysActivityRemind> list11 = this._context.Where <SysActivityRemind>(condition, new DbParameter[0]); List <SysActivityRemindParticipant> list12 = this._context.Where <SysActivityRemindParticipant>(condition, new DbParameter[0]); List <SysActivityApproveGroup> list13 = this._context.Where <SysActivityApproveGroup>(condition, new DbParameter[0]); process.Activities = list7; process.ProcessProxies = list; process.ProcessParticipants = list2; process.ProcessReminds = list5; process.Expressions = list3; process.Transitions = list4; using (IEnumerator <SysActivity> enumerator = process.Activities.GetEnumerator()) { while (enumerator.MoveNext()) { Func <SysExpression, bool> predicate = null; Func <SysActivityParticipant, bool> func8 = null; Func <SysActivityRemind, bool> func9 = null; Func <SysActivityOperation, bool> func10 = null; Func <SysExpression, bool> func11 = null; Func <SysTransition, bool> func12 = null; Func <SysTransition, bool> func13 = null; SysActivity a = enumerator.Current; a.Process = process; if (predicate == null) { predicate = i => i.ExpressionId == a.ExpressionId; } a.Expression = process.Expressions.FirstOrDefault <SysExpression>(predicate); if (func8 == null) { func8 = delegate(SysActivityParticipant i) { long?activityId = i.ActivityId; long num = a.ActivityId; return((activityId.GetValueOrDefault() == num) && activityId.HasValue); }; } a.ActivityParticipants = list8.Where <SysActivityParticipant>(func8).ToList <SysActivityParticipant>(); if (func9 == null) { func9 = delegate(SysActivityRemind i) { long?activityId = i.ActivityId; long num = a.ActivityId; return((activityId.GetValueOrDefault() == num) && activityId.HasValue); }; } a.ActivityReminds = list11.Where <SysActivityRemind>(func9).ToList <SysActivityRemind>(); if (func10 == null) { func10 = delegate(SysActivityOperation i) { long?activityId = i.ActivityId; long num = a.ActivityId; return((activityId.GetValueOrDefault() == num) && activityId.HasValue); }; } a.ActivityOperations = list9.Where <SysActivityOperation>(func10).ToList <SysActivityOperation>(); if (func11 == null) { func11 = delegate(SysExpression i) { long?activityId = i.ActivityId; long num = a.ActivityId; return((activityId.GetValueOrDefault() == num) && activityId.HasValue); }; } a.Expressions = process.Expressions.Where <SysExpression>(func11).ToList <SysExpression>(); if (func12 == null) { func12 = delegate(SysTransition i) { long?preActivityId = i.PreActivityId; long activityId = a.ActivityId; return((preActivityId.GetValueOrDefault() == activityId) && preActivityId.HasValue); }; } a.FromTransitions = process.Transitions.Where <SysTransition>(func12).ToList <SysTransition>(); if (func13 == null) { func13 = delegate(SysTransition i) { long?postActivityId = i.PostActivityId; long activityId = a.ActivityId; return((postActivityId.GetValueOrDefault() == activityId) && postActivityId.HasValue); }; } a.ToTransitions = process.Transitions.Where <SysTransition>(func13).ToList <SysTransition>(); using (IEnumerator <SysActivityParticipant> enumerator2 = a.ActivityParticipants.GetEnumerator()) { while (enumerator2.MoveNext()) { Func <SysActivityApproveGroup, bool> func = null; Func <SysActivityParticipant, bool> func2 = null; Func <SysProcessParticipant, bool> func3 = null; SysActivityParticipant ap = enumerator2.Current; ap.Activity = a; if (func == null) { func = i => i.ActivityApproveGroupId == ap.ActivityApproveGroupId; } ap.ActivityApproveGroup = list13.FirstOrDefault <SysActivityApproveGroup>(func); if (ap.ActivityApproveGroup != null) { ap.ActivityApproveGroup.Activity = a; if (func2 == null) { func2 = i => i.ActivityApproveGroupId == ap.ActivityApproveGroupId; } ap.ActivityApproveGroup.ActivityParticipants = list8.Where <SysActivityParticipant>(func2).ToList <SysActivityParticipant>(); } if (func3 == null) { func3 = i => i.ParticipantId == ap.ParticipantId; } ap.ProcessParticipant = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func3); } } using (IEnumerator <SysActivityRemind> enumerator3 = a.ActivityReminds.GetEnumerator()) { while (enumerator3.MoveNext()) { Func <SysActivityRemindParticipant, bool> func5 = null; SysActivityRemind ar = enumerator3.Current; ar.Activity = a; if (func5 == null) { func5 = delegate(SysActivityRemindParticipant i) { long?remindId = i.RemindId; long num = ar.RemindId; return((remindId.GetValueOrDefault() == num) && remindId.HasValue); }; } ar.RemindParticipants = list12.Where <SysActivityRemindParticipant>(func5).ToList <SysActivityRemindParticipant>(); using (IEnumerator <SysActivityRemindParticipant> enumerator4 = ar.RemindParticipants.GetEnumerator()) { while (enumerator4.MoveNext()) { Func <SysProcessParticipant, bool> func4 = null; SysActivityRemindParticipant arp = enumerator4.Current; arp.Remind = ar; if (func4 == null) { func4 = i => i.ParticipantId == arp.ParticipantId; } arp.Participant = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func4); arp.RemindTemplate = this._context.FindById <SysProcessRemindTemplate>(new object[] { arp.TemplateId }); } continue; } } } using (IEnumerator <SysActivityOperation> enumerator5 = a.ActivityOperations.GetEnumerator()) { while (enumerator5.MoveNext()) { Func <SysActivityStep, bool> func6 = null; SysActivityOperation ao = enumerator5.Current; ao.Activity = a; if (func6 == null) { func6 = delegate(SysActivityStep i) { long?operationId = i.OperationId; long num = ao.OperationId; return((operationId.GetValueOrDefault() == num) && operationId.HasValue); }; } ao.ActivitySteps = list10.Where <SysActivityStep>(func6).ToList <SysActivityStep>(); foreach (SysActivityStep step in ao.ActivitySteps) { step.ActivityOperation = ao; } } continue; } } } foreach (SysProcessProxy proxy in process.ProcessProxies) { proxy.Process = process; } using (IEnumerator <SysProcessParticipant> enumerator8 = process.ProcessParticipants.GetEnumerator()) { while (enumerator8.MoveNext()) { Func <SysProcessParticipant, bool> func14 = null; Func <SysActivityParticipant, bool> func15 = null; SysProcessParticipant pp = enumerator8.Current; pp.Process = process; if (func14 == null) { func14 = i => i.ParticipantId == pp.Param_ParticipantId; } pp.Param_Participant = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func14); if (func15 == null) { func15 = delegate(SysActivityParticipant i) { long?participantId = i.ParticipantId; long num = pp.ParticipantId; return((participantId.GetValueOrDefault() == num) && participantId.HasValue); }; } pp.ActivityParticipants = list8.Where <SysActivityParticipant>(func15).ToList <SysActivityParticipant>(); } } using (IEnumerator <SysProcessRemind> enumerator9 = process.ProcessReminds.GetEnumerator()) { while (enumerator9.MoveNext()) { Func <SysProcessRemindParticipant, bool> func17 = null; SysProcessRemind pr = enumerator9.Current; pr.Process = process; if (func17 == null) { func17 = delegate(SysProcessRemindParticipant i) { long?remindId = i.RemindId; long num = pr.RemindId; return((remindId.GetValueOrDefault() == num) && remindId.HasValue); }; } pr.RemindParticipants = source.Where <SysProcessRemindParticipant>(func17).ToList <SysProcessRemindParticipant>(); using (IEnumerator <SysProcessRemindParticipant> enumerator10 = pr.RemindParticipants.GetEnumerator()) { while (enumerator10.MoveNext()) { Func <SysProcessParticipant, bool> func16 = null; SysProcessRemindParticipant rp = enumerator10.Current; rp.Remind = pr; if (func16 == null) { func16 = i => i.ParticipantId == rp.ParticipantId; } rp.Participant = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func16); rp.RemindTemplate = this._context.FindById <SysProcessRemindTemplate>(new object[] { rp.TemplateId }); } continue; } } } using (IEnumerator <SysExpression> enumerator11 = process.Expressions.GetEnumerator()) { while (enumerator11.MoveNext()) { Func <SysActivity, bool> func18 = null; SysExpression e = enumerator11.Current; e.Process = process; if (func18 == null) { func18 = i => i.ActivityId == e.ActivityId; } e.Activity = process.Activities.FirstOrDefault <SysActivity>(func18); if (e.FieldId.HasValue) { e.Field = this._cacheFactory.GetFieldCache(e.FieldId.Value); } if (e.RelationId.HasValue) { e.Relation = this._cacheFactory.GetRelationCache(e.RelationId.Value); } } } using (IEnumerator <SysTransition> enumerator12 = process.Transitions.GetEnumerator()) { while (enumerator12.MoveNext()) { Func <SysActivity, bool> func19 = null; Func <SysActivity, bool> func20 = null; Func <SysExpression, bool> func21 = null; Func <SysExpression, bool> func22 = null; SysTransition t = enumerator12.Current; t.Process = process; if (func19 == null) { func19 = i => i.ActivityId == t.PreActivityId; } t.PreActivity = process.Activities.FirstOrDefault <SysActivity>(func19); if (func20 == null) { func20 = i => i.ActivityId == t.PostActivityId; } t.PostActivity = process.Activities.FirstOrDefault <SysActivity>(func20); if (func21 == null) { func21 = i => i.ExpressionId == t.ExpressionId; } t.Expression = process.Expressions.FirstOrDefault <SysExpression>(func21); if (func22 == null) { func22 = delegate(SysExpression i) { long?transitionId = i.TransitionId; long num = t.TransitionId; return((transitionId.GetValueOrDefault() == num) && transitionId.HasValue); }; } t.Expressions = process.Expressions.Where <SysExpression>(func22).ToList <SysExpression>(); } } return(process); }