public override IModel CreateModel(SqlDataReader dr) { TaskOperate taskoperate = new TaskOperate(); int indexTaskOperateId = dr.GetOrdinal("TaskOperateId"); taskoperate.TaskOperateId = Convert.ToInt32(dr[indexTaskOperateId]); int indexTaskNodeId = dr.GetOrdinal("TaskNodeId"); if (dr["TaskNodeId"] != DBNull.Value) { taskoperate.TaskNodeId = Convert.ToInt32(dr[indexTaskNodeId]); } int indexOperateUrl = dr.GetOrdinal("OperateUrl"); if (dr["OperateUrl"] != DBNull.Value) { taskoperate.OperateUrl = Convert.ToString(dr[indexOperateUrl]); } int indexOperateStatus = dr.GetOrdinal("OperateStatus"); if (dr["OperateStatus"] != DBNull.Value) { taskoperate.OperateStatus = (Common.StatusEnum)Convert.ToInt32(dr[indexOperateStatus]); } return taskoperate; }
public override IModel CreateModel(DataRow dr) { TaskOperate taskoperate = new TaskOperate(); taskoperate.TaskOperateId = Convert.ToInt32(dr["TaskOperateId"]); if (dr["TaskNodeId"] != DBNull.Value) { taskoperate.TaskNodeId = Convert.ToInt32(dr["TaskNodeId"]); } if (dr["OperateUrl"] != DBNull.Value) { taskoperate.OperateUrl = Convert.ToString(dr["OperateUrl"]); } if (dr["OperateStatus"] != DBNull.Value) { taskoperate.OperateStatus = (Common.StatusEnum)Convert.ToInt32(dr["OperateStatus"]); } return taskoperate; }
/// <summary> /// 创建任务节点 /// </summary> /// <param name="task">任务</param> /// <param name="nodeLevel">节点级别</param> /// <returns></returns> public ResultModel CreateTaskNodes(UserModel user, Task task, int nodeLevel, DataSource source) { ResultModel result = new ResultModel(); bool IsCreate = false; try { //通过外部请求获取当前审核数据源 result = GetConditionUrl(source); if (result.ResultStatus != 0) return result; Dictionary<string, object> conditionDic = result.ReturnValue as Dictionary<string, object>; NodeDAL nodeDAL = new NodeDAL(); NodeOperateDAL nodeOperateDAL = new NodeOperateDAL(); NodeOperate nodeOperate = null; TaskOperate taskOperate = null; DataTable dt = null; //获取模板中当前层级的所有节点 lock (nodeCollection) { string key = string.Format("{0}{1}", task.MasterId, nodeLevel); if (nodeCollection.ContainsKey(key)) dt = nodeCollection[key]; else { SelectModel nodeSelect = new SelectModel(); nodeSelect.ColumnName = "*"; nodeSelect.OrderStr = "NodeId"; nodeSelect.PageIndex = 1; nodeSelect.PageSize = 500; nodeSelect.TableName = "dbo.Wf_Node"; nodeSelect.WhereStr = string.Format("MasterId={0} and NodeLevel={1} and NodeStatus = {2}", task.MasterId, nodeLevel, (int)StatusEnum.已生效); result = nodeDAL.Load(user, nodeSelect); if (result.ResultStatus != 0) return result; dt = result.ReturnValue as DataTable; nodeCollection.Add(key, dt); } } if (dt != null && dt.Rows.Count > 0) { TaskNodeDAL taskNodeDAL = new TaskNodeDAL(); foreach (DataRow dr in dt.Rows) { //判断是否符合条件 result = JudgeNodeCondition(Convert.ToInt32(dr["NodeId"]), task.TaskId, conditionDic); if (result.ResultStatus != 0) return result; bool judge = false; if (result.ResultStatus == 0 && result.ReturnValue != null) bool.TryParse(result.ReturnValue.ToString(), out judge); if (judge) { int nodeId = Convert.ToInt32(dr["NodeId"]); //获取该节点 result = nodeDAL.Get(user, nodeId); if (result.ResultStatus != 0) return result; Node node = result.ReturnValue as Node; if (node == null) return result; //判断该节点是否需要操作 result = nodeOperateDAL.GetByNodeId(user, node.NodeId); if (result.ResultStatus == 0) nodeOperate = result.ReturnValue as NodeOperate; //获取审核人 AuditEmpDAL auditEmpDAl = new AuditEmpDAL(); result = auditEmpDAl.GetEmpIdsByAuditEmpId(user, node.AuditEmpId, source); if (result.ResultStatus != 0) return result; DataTable dtvalue = result.ReturnValue as DataTable; //如果不存在审核人,则转到下一个节点 if (dtvalue == null || dtvalue.Rows.Count < 1) { //result.ResultStatus = -1; //return result; continue; } //如果存在审核人,则生成相应审核节点 foreach (DataRow drValue in dtvalue.Rows) { if (Convert.ToInt32(drValue["EmpId"]) <= 0) continue; TaskNode taskNode = new TaskNode() { NodeLevel = nodeLevel, NodeStatus = StatusEnum.待审核, TaskId = task.Id, NodeId = nodeId, AuditTime = DefaultValue.DefaultTime, EmpId = Convert.ToInt32(drValue["EmpId"]) }; //如果在一个任务中存在相同的审核人且审核通过,则将新生成的审核人节点状态改为已生效(视为审核通过) result = taskNodeDAL.GetTaskNodeIdBySameAuditEmp(user, task.TaskId, Convert.ToInt32(drValue["EmpId"])); DataTable resultDatatable = result.ReturnValue as DataTable; if (result.ResultStatus == 0 && resultDatatable != null && resultDatatable.Rows.Count > 0 && nodeOperate == null) { taskNode.NodeStatus = StatusEnum.已生效; result = taskNodeDAL.Insert(user, taskNode); if (result.ResultStatus != 0) return result; int taskNodeIdValue = (int)result.ReturnValue; //插入附言 TaskOperateLogDAL taskOperateLogDAL = new TaskOperateLogDAL(); result = taskOperateLogDAL.GetLogByTaskNodeIdAndEmpId(user, Convert.ToInt32(resultDatatable.Rows[0]["TaskNodeId"]), Convert.ToInt32(drValue["EmpId"])); if (result.ResultStatus != 0) return result; TaskOperateLog taskOperateLog = result.ReturnValue as TaskOperateLog; if (taskOperateLog != null) { taskOperateLog.TaskNodeId = taskNodeIdValue; result = taskOperateLogDAL.Insert(user, taskOperateLog); } if (result.ResultStatus != 0) return result; IsCreate = true; } else if (result.ResultStatus == 0)//否则添加消息提醒 { result = taskNodeDAL.Insert(user, taskNode); if (result.ResultStatus != 0) return result; int taskNodeIdValue = (int)result.ReturnValue; if (nodeOperate != null) { taskOperate = new TaskOperate() { TaskNodeId = taskNodeIdValue, OperateUrl = nodeOperate.OperateUrl, OperateStatus = StatusEnum.已生效 }; TaskOperateDAL taskOperateDAL = new TaskOperateDAL(); result = taskOperateDAL.Insert(user, taskOperate); if (result.ResultStatus != 0) return result; } //添加消息提醒 Sms.Model.Sms sms = new Sms.Model.Sms() { SmsTypeId = 1,//to do list SmsHead = task.TaskName, SmsStatus = (int)SmsStatusEnum.待处理消息, SmsBody = task.TaskConnext, SmsRelTime = DateTime.Now, SmsLevel = 1, SourceId = taskNodeIdValue //taskNodeId }; List<SmsDetail> smsDetails = new List<SmsDetail>(); smsDetails.Add(new SmsDetail() { EmpId = Convert.ToInt32(drValue["EmpId"]), ReadTime = DefaultValue.DefaultTime }); SmsDAL smsDAL = new SmsDAL(); result = smsDAL.AddSms(user, sms, smsDetails); if (result.ResultStatus != 0) return result; IsCreate = true; } } } } if (!IsCreate) { result.Message = "当前审核层级无审核人员"; result.ResultStatus = -1; //递归生成下级节点 result = CreateTaskNodes(user, task, ++nodeLevel, source); } else { //如果创建了审核节点,则判断是否所有审核节点都通过了 result = this.JudgeSameLevelSuccessHandle(user, task, nodeLevel, source); } } else { result.Message = "不存在下级节点"; result.ResultStatus = -1; //是否判断在无下级节点后审核流程结束?审核结果为通过? TaskDAL taskDAL = new TaskDAL(); result = taskDAL.Complete(user, task); if (result.ResultStatus != 0) return result; //修改数据源状态(改为已完成) DataSourceDAL dataSourceDAL = new DataSourceDAL(); result = dataSourceDAL.DataSourceComplete(user, source); if (result.ResultStatus != 0) return result; result = this.RequestCallBackUrl(user, source, true); if (result.ResultStatus != 0) return result; } } catch (Exception ex) { result.Message = ex.Message; result.ReturnValue = ex; result.ResultStatus = -1; } return result; }