/// <summary> /// 流程提交 /// </summary> /// <param name="workflow">流程实例模型</param> /// <param name="TableModel">具体表模型</param> /// <returns></returns> public string WF_Submit(WorkFlowClass workflow, object TableModel) { #region 获取数据 string tableName = workflow.FunctionName; //获取表名 string WFID = workflow.WFID; //工作流编号 string WFDID = workflow.WFDID; //工作流环节编号 string WFSID = workflow.WFSID; //活动实例编号 string WFSAID = workflow.WFSAID; //当前环节实例编号 string dealContent = workflow.DEALCONTENT; //会签意见 string NextWFDID = workflow.NextWFDID; //下一个环节编号 string NextWFUSERIDS = workflow.NextWFUSERIDS; //获取下一个环节的用户 string IsSendMsg = workflow.IsSendMsg; //是否发送短信 string Remark = workflow.Remark; string processmode = workflow.processmode; string satisfaction = workflow.satisfaction; #endregion #region 增加/修改 对应的流程 string TABLENAMEID = string.Empty; //对应表数据编号 string WFSNAME = string.Empty; //活动流程名称 switch (workflow.FunctionName) { case "sm_citizenservices": //市民服务基础表 TABLENAMEID = function_citizenservices(out WFSNAME, workflow.WFSID, (sm_citizenservices)TableModel); break; case "yh_yhtasks": //养护任务基础表 TABLENAMEID = function_yhtasks(out WFSNAME, workflow.WFSID, (yh_yhtasks)TableModel); break; case "zxzz_tasks": //专项整治基础表 TABLENAMEID = function_specialtasks(out WFSNAME, workflow.WFSID, (zxzz_tasks)TableModel); break; case "audit_project_w": //行政审批基础表 TABLENAMEID = workflow.syncrowguid; break; default: break; } #endregion #region 检查是否存在当前实例,如果不存在则增加当前活动实例 wf_workflowspecifics WFSModel = null; if (!string.IsNullOrEmpty(workflow.WFSID)) { WFSModel = new WF_WorkFlowSpecificDAL().GetSingle(workflow.WFSID); if (WFSModel == null) { WFSID = ""; } else { WFSModel.wfsname = WFSNAME; new WF_WorkFlowSpecificDAL().Update(WFSModel); } } if (string.IsNullOrEmpty(WFSID)) { WFSModel = new wf_workflowspecifics(); WFSModel.wfsid = GetNewId(); WFSModel.wfid = WFID; WFSModel.tablename = tableName; WFSModel.createuserid = workflow.WFCreateUserID; WFSModel.createtime = DateTime.Now; WFSModel.status = 1; WFSModel.tablenameid = TABLENAMEID; WFSModel.wfsname = WFSNAME; new WF_WorkFlowSpecificDAL().Add(WFSModel); WFSID = WFSModel.wfsid; } #endregion #region 增加活动实例具体的流程 #region 更新当前环节 decimal oldStatus;//当前环节是否已经处理完成 1:未处理,2已经处理 //更新或者增加当前流程的具体事例---返回当前环节编号 WFSAID = function_WF_DealCurentActivity(WFSAID, WFSID, workflow.WFCreateUserID.Value, 2, WFDID, out oldStatus); //更新或者增加当前环节用户处理的意见---返回当前环节用户需要处理的编号 string WFSUID = function_WF_DealCurentActivityUser(WFSAID, workflow.WFCreateUserID.Value, dealContent, 2, DateTime.Now, "false", WFSNAME, workflow.WFCreateUserID.Value, Remark, processmode, satisfaction); //增加当前处理用户的附件 switch (workflow.FunctionName) { case "sm_citizenservices": //市民服务 function_WF_WorkFlowAttrach_smsj(WFSUID, workflow.files, workflow.FileSource); break; case "yh_yhtasks": //养护任务 function_WF_WorkFlowAttrach_smsj(WFSUID, workflow.files, workflow.FileSource); break; case "zxzz_tasks": //专项整治 function_WF_WorkFlowAttrach_smsj(WFSUID, workflow.files, workflow.FileSource); break; case "audit_project_w": //行政审批基础表 function_WF_WorkFlowAttrach_smsj(WFSUID, workflow.files, workflow.FileSource); break; default: break; } #endregion //当前状态为处理,则说明是第一个人处理,则需要增加下一个环节,如果当前环节已经处理,则不需要增加下一个环节 string NextWFSAID = ""; if (oldStatus == 1) { //获取该环节是否为最后一个环节 wf_workflowdetails wfdModel = new WF_WorkFlowDetailDAL().GetSingle(NextWFDID); //如果下一个环节的子环节存在,则状态为执行中,内容为空,否则下一个环节状态为结束,内容为已结束 int status_wfsa = 0; string content_wfsa = string.Empty; if (wfdModel != null && !string.IsNullOrEmpty(wfdModel.nextid)) { status_wfsa = 1; content_wfsa = ""; } else { //结束该流程 WFSModel = new WF_WorkFlowSpecificDAL().GetSingle(WFSID); if (WFSModel != null) { WFSModel.status = 2; new WF_WorkFlowSpecificDAL().Update(WFSModel); } status_wfsa = 2; content_wfsa = "已结束"; } #region 增加下一个环节 //增加环节 NextWFSAID = function_WF_DealCurentActivity("", WFSID, workflow.WFCreateUserID.Value, status_wfsa, NextWFDID, out oldStatus); #region 更新活动实例的当前环节编号 WFSModel = new WF_WorkFlowSpecificDAL().GetSingle(WFSID); if (WFSModel != null) { WFSModel.currentwfsaid = NextWFSAID; WFSModel.status = status_wfsa; new WF_WorkFlowSpecificDAL().Update(WFSModel); } #endregion //增加下一个环节的能操作的用户 if (!string.IsNullOrEmpty(NextWFUSERIDS)) { string[] NextWFUSERIDS_split = NextWFUSERIDS.Split(','); foreach (var item in NextWFUSERIDS_split) { decimal userid; DateTime?dealTime = null; if (decimal.TryParse(item, out userid)) { if (status_wfsa == 2) { userid = workflow.WFCreateUserID.Value; dealTime = DateTime.Now; IsSendMsg = "false"; } //增加流程能操作的用户 function_WF_DealCurentActivityUser(NextWFSAID, (int)userid, content_wfsa, status_wfsa, dealTime, IsSendMsg, WFSNAME, workflow.WFCreateUserID, Remark, processmode, satisfaction); } } } #endregion } #endregion return(WFSID + "," + NextWFSAID + "," + TABLENAMEID); }
/// <summary> /// 活动流程 /// </summary> /// <param name="WFID">流程ID</param> /// <param name="WFSID">实例编号</param> /// <returns></returns> public WorkFlowClass ProcessIndex(string WFID, string WFDID, string WFSID, string WFSAID) { WorkFlowClass workflow = new WorkFlowClass(); if (!string.IsNullOrEmpty(WFID)) { wf_workflows wfModel = new WF_WorkFlowsDAL().GetSingle(WFID); if (wfModel != null) { workflow.currentActivityName = wfModel.wfname; //跳转的方法 workflow.FunctionName = wfModel.tablename; workflow.WFID = WFID; workflow.WFDID = WFDID; workflow.WFSID = WFSID; workflow.WFSAID = WFSAID; workflow.GetTableColumns = new WF_WorkFlowsDAL().GetTableColumns(wfModel.tablename); } else { workflow.WorkFlowState = 1;//表示该流程不存在 } IList <wf_workflowdetails> wfdList = new WF_WorkFlowDetailDAL() .GetList().Where(a => a.wfid == WFID).ToList();//获取当前流程所有环节 if (wfdList == null && wfdList.Count() <= 0) { workflow.WorkFlowState = 2; return(workflow); } ////获取主要内容 //if (!string.IsNullOrEmpty(WFSID)) //{ // workflow.contentPath = new WF_WorkFlowSpecificDAL().GetContentPath(WFSID); //} #region 获取下一步流程 //下一步流程编号集合 格式为:【,流程编号,流程编号,流程编号,】 string nextWFDIDS = string.Empty; wf_workflowdetails wfdModel = new WF_WorkFlowDetailDAL().GetSingle(WFDID); if (wfdModel != null) { nextWFDIDS = wfdModel.nextid; } else { workflow.WorkFlowState = 2; return(workflow); } if (!string.IsNullOrEmpty(nextWFDIDS)) { #region 一步的所有流程 //下一步流程 格式为:【;流程编号,流程名称,是否有下一个流程;流程编号,流程名称,是否有下一个流程;流程编号,流程名称,是否有下一个流程;】 string nextWFDIDNames = ""; string[] nextWFDIDS_split = nextWFDIDS.Split(','); foreach (string NEXTID in nextWFDIDS_split) { if (!string.IsNullOrEmpty(NEXTID)) { string temp = ""; string WFDNAME = string.Empty; wf_workflowdetails wfdMpdel = wfdList.FirstOrDefault(a => a.wfdid == NEXTID); if (wfdMpdel == null || string.IsNullOrEmpty(wfdMpdel.wfdname)) { workflow.WorkFlowState = 2; return(workflow); } else { WFDNAME = wfdMpdel.wfdname; } //int isNextW = 0;//是否还有下步流程,如果没有则表示结束 //if (string.IsNullOrEmpty(wfdMpdel.nextid)) // isNextW = 1; temp += NEXTID; if (!string.IsNullOrEmpty(nextWFDIDNames)) { nextWFDIDNames += temp + ";"; } else { nextWFDIDNames += ";" + temp + ";"; } } } workflow.nextWFDIDNames = nextWFDIDNames;//下一步流程 #endregion #region 查找下一步默认的用户 如果默认下一个步骤只有一步,并且明确制定用户,则直接将对应的用户加载出来 string UserIDs = string.Empty; string UserNames = string.Empty; string NextWFDID = string.Empty; if (!string.IsNullOrEmpty(wfdModel.nextiddefaultuser)) { string[] nextDefaultUser = wfdModel.nextiddefaultuser.Split(','); for (int i = 0; i < nextDefaultUser.Length; i++) { if (!string.IsNullOrEmpty(nextDefaultUser[i])) { UserNames += ","; if (nextDefaultUser[i] == "0") { UserNames += "暂无,"; } else { UserNames += UserDAL.GetUserNameByUserID(Convert.ToDecimal(nextDefaultUser[i])) + ","; } } } workflow.NextWFUSERIDS = wfdModel.nextiddefaultuser; workflow.NextUserNames = UserNames; workflow.NextWFDID = wfdModel.nextiddefault; } if (!string.IsNullOrEmpty(wfdModel.nextiddefaultdept)) { string[] nextDefaultDept = wfdModel.nextiddefaultdept.Split(','); for (int i = 0; i < nextDefaultDept.Length; i++) { if (!string.IsNullOrEmpty(nextDefaultDept[i])) { UserNames += ","; if (nextDefaultDept[i] == "0") { UserNames += "暂无,"; } else { UserNames += UserDAL.GetUserNameByDeptID(Convert.ToDecimal(nextDefaultDept[i])) + ","; } UserNames = ""; } } workflow.NextWFUSERIDS = wfdModel.nextiddefaultuser; workflow.NextUserNames = UserNames; workflow.NextWFDID = wfdModel.nextiddefault; } if (!string.IsNullOrEmpty(wfdModel.nextiddefaultrole)) { string[] nextDefaultRole = wfdModel.nextiddefaultrole.Split(','); for (int i = 0; i < nextDefaultRole.Length; i++) { if (!string.IsNullOrEmpty(nextDefaultRole[i])) { UserNames += ","; if (nextDefaultRole[i] == "0") { UserNames += "暂无,"; } else { UserNames += UserDAL.GetUserNameByRoleID(Convert.ToDecimal(nextDefaultRole[i])) + ","; } } } workflow.NextWFUSERIDS = wfdModel.nextiddefaultuser; workflow.NextUserNames = UserNames; workflow.NextWFDID = wfdModel.nextiddefault; } #endregion } #endregion } return(workflow); }