public bool insertLink(MODEL.risk_link link) { string sql = "insert into risk_link(auto_id,task_pre_id,task_suc_id,link_type,delay_days,prj_id)values( risk_link_AUTOID.NEXTVAL ,:task_pre_id,:task_suc_id,:link_type,:delay_days,:prj_id)"; OracleParameter[] parameters = new OracleParameter[] { new OracleParameter(":task_pre_id", OracleDbType.Int32, 11), new OracleParameter(":task_suc_id", OracleDbType.Int32, 11), new OracleParameter(":link_type", OracleDbType.Int32, 11), new OracleParameter(":delay_days", OracleDbType.Int32, 11), new OracleParameter(":prj_id", OracleDbType.Int32, 11) }; parameters[0].Value = link.Task_pre_id; parameters[1].Value = link.Task_suc_id; parameters[2].Value = link.Link_type; parameters[3].Value = link.Delay_days; parameters[4].Value = link.Prj_id; try { SqlHelper.ExecuteNonQuery(sql, parameters); return(true); } catch (System.Exception ex) { throw ex; } }
public List <MODEL.risk_link> getLinkList(int projectId) { List <MODEL.risk_link> linkList = new List <MODEL.risk_link>(); string sql = "select * from risk_link where PRJ_ID='" + projectId + "'"; OracleParameter p = null; using (OracleDataReader myReader = SqlHelper.ExecuteQuery(sql, p)) { while (myReader.Read()) { MODEL.risk_link link = new MODEL.risk_link(); link.Delay_days = Int32.Parse(myReader["delay_days"].ToString()); link.Link_type = Int32.Parse(myReader["link_type"].ToString()); link.Task_suc_id = Int32.Parse(myReader["task_suc_id"].ToString()); link.Task_pre_id = Int32.Parse(myReader["task_pre_id"].ToString()); link.Prj_id = Int32.Parse(myReader["prj_id"].ToString()); linkList.Add(link); } return(linkList); } }
private static void readXML(XmlReader xml) { int parentId = 0; int taskLevel = 0; int curParentTId = -1; int possibleParentTId = -1; Stack <int> parentTaskId = new Stack <int>();; parentTaskId.Push(-1); while (xml.Read()) { if (xml.NodeType == XmlNodeType.Element) { if (xml.Name == "sub-tasks") { ++taskLevel; } if (xml.Name == "link") { MODEL.risk_link link = new MODEL.risk_link(); link.Delay_days = Int32.Parse(xml.GetAttribute("delay")); switch (xml.GetAttribute("type")) { case "FS": link.Link_type = 0; break; default: link.Link_type = 0; break; } link.Task_suc_id = Int32.Parse(xml.GetAttribute("taskId")); link.Task_pre_id = parentId; link.Prj_id = projectId; linkList.Add(link); } if (xml.Name == "task" || xml.Name == "start-task" || xml.Name == "end-task") { if (xml.Name == "start-task") { if (possibleParentTId != -1) { parentTaskId.Push(possibleParentTId); } possibleParentTId = Int32.Parse(xml.GetAttribute("id")); } if (xml.Name == "task") { possibleParentTId = Int32.Parse(xml.GetAttribute("id")); } curParentTId = parentTaskId.Peek(); MODEL.risk_task task = new MODEL.risk_task(); if (xml.GetAttribute("isSummary") == null) { task.Task_is_summary = false; } else { task.Task_is_summary = true; } task.Task_name = xml.GetAttribute("name"); task.Task_wbs = xml.GetAttribute("wbs"); task.Task_id = Int32.Parse(xml.GetAttribute("id")); task.Task_level = taskLevel; task.Task_project_id = projectId; task.Task_nested_parent_id = curParentTId; taskList.Add(task); parentId = task.Task_id; } } else if (xml.NodeType == XmlNodeType.EndElement) { if (xml.Name == "sub-tasks") { --taskLevel; } if (xml.Name == "end-task") { possibleParentTId = parentTaskId.Pop(); } } } }
public static bool calTaskAndLink(int projectId, int parentTaskId) { if (CommonMsg.taskList != null) { CommonMsg.taskList.Clear(); } if (CommonMsg.linkList != null) { CommonMsg.linkList.Clear(); } List <MODEL.risk_task> taskList = CommonUtils.getAllTasks(projectId); List <MODEL.risk_link> linkList = CommonUtils.getAllLinks(projectId); //test //try //{ // CommonUtils.unionTaskList(taskList, linkList); //} //catch (Exception ex) //{ // throw ex; //} List <MODEL.risk_task_instance> taskInstanceList = CommonArugment.getTaskIntance.get(projectId); bool[] taskId = new bool[taskList.Count * 2]; for (int i = 0; i < taskList.Count; ++i) { MODEL.risk_task task = taskList[i]; taskId[task.Task_id] = false; //initialize if (task.Task_nested_parent_id != parentTaskId) { taskList.Remove(task); --i; continue; } taskId[task.Task_id] = true; task.OutDegree = 0; task.InDegree = 0; task.MaxSucceedSize = 0; if (!task.Task_is_summary) { try { MODEL.risk_math_expression_arg expressionArg = CommonArugment.getExpression.getExpression(task.Auto_id); List <MODEL.risk_resource> list = CommonArugment.getTaskResAssign.findResByTaskAutoId(task.Auto_id); if (list.Count != 0) { task.Have_resource = true; } if (expressionArg != null) { task.IsDone = true; task.ExpressionName = expressionArg.Name; double[] values = (double[])CommonUtils.Deserialize(expressionArg.Value); switch (task.ExpressionName) { case "三角分布": task.ArgA = values[0]; task.ArgB = values[1]; task.ArgC = values[2]; break; case "Beta分布": task.ArgA = values[0]; task.ArgB = values[1]; break; case "正态分布": task.ArgA = values[0]; task.ArgB = values[1]; break; case "固定": task.ArgA = values[0]; break; default: task.ExpressionName = "未知分布"; break; } if (expressionArg.Actual_value != 0) { task.Value = expressionArg.Actual_value; continue; } } else { task.IsDone = false; } } catch (System.Exception ex) { CommonMsg.errMsg = ex.Message + "->没有子任务的点必须标注为issummary为false"; return(false); } } else { task.IsDone = CommonUtils.checkIsDone(taskList, task.Task_id); } } //cal each in/out degree of the task for (int i = 0; i < linkList.Count; ++i) { MODEL.risk_link link = linkList[i]; int outDot = link.Task_pre_id; int inDot = link.Task_suc_id; if (!taskId[outDot] || !taskId[inDot]) { linkList.Remove(link); --i; continue; } bool outDone = false; bool inDone = false; foreach (MODEL.risk_task task in taskList) { if (task.Task_id == outDot) { ++task.OutDegree; outDone = true; } if (task.Task_id == inDot) { ++task.InDegree; inDone = true; } if (outDone && inDone) { break; } } } try { if (CommonUtils.calMaxSucceedSize(taskList, linkList)) { CommonMsg.errMsg = "任务有环"; return(false); } else { CommonMsg.taskList = taskList; CommonMsg.linkList = linkList; return(true); } } catch (System.Exception ex) { throw ex; } }