示例#1
0
        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;
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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();
                    }
                }
            }
        }
示例#4
0
        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;
            }
        }