using BLL; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; namespace FineUIPro.Web.JDGL.Check { public partial class EarnedValueCurve : PageBase { #region 加载 /// /// 加载页面 /// /// /// protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindChart(); InitTreeMenu(); } } #endregion #region 加载 /// /// 树加载 /// private void InitTreeMenu() { this.trWBS.Nodes.Clear(); this.trWBS.ShowBorder = false; this.trWBS.ShowHeader = false; this.trWBS.EnableIcons = true; this.trWBS.AutoScroll = true; this.trWBS.EnableSingleClickExpand = true; TreeNode rootNode1 = new TreeNode(); rootNode1.Text = "建筑工程"; rootNode1.NodeID = "1"; rootNode1.CommandName = "ProjectType"; rootNode1.EnableExpandEvent = true; rootNode1.EnableClickEvent = true; this.trWBS.Nodes.Add(rootNode1); TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; rootNode1.Nodes.Add(emptyNode); //this.GetNodes(rootNode1.Nodes, rootNode1.NodeID); TreeNode rootNode2 = new TreeNode(); rootNode2.Text = "安装工程"; rootNode2.NodeID = "2"; rootNode2.CommandName = "ProjectType"; rootNode2.EnableExpandEvent = true; rootNode2.EnableClickEvent = true; this.trWBS.Nodes.Add(rootNode2); rootNode2.Nodes.Add(emptyNode); } #region 遍历节点方法 /// /// 遍历节点方法 /// /// 节点集合 /// 父节点 private void GetNodes(TreeNodeCollection nodes, string parentId) { List workPackages = new List(); if (parentId.Length == 1) //工程类型节点 { workPackages = (from x in Funs.DB.WBS_WorkPackageProject where x.SuperWorkPack == null && x.ProjectId == this.CurrUser.LoginProjectId && x.ProjectType == parentId orderby x.PackageCode ascending select x).ToList(); } else { workPackages = (from x in Funs.DB.WBS_WorkPackageProject where x.SuperWorkPack == parentId && x.ProjectId == this.CurrUser.LoginProjectId orderby x.PackageCode ascending select x).ToList(); } foreach (var q in workPackages) { TreeNode newNode = new TreeNode(); newNode.Text = q.PackageContent; newNode.NodeID = q.WorkPackageCode; newNode.CommandName = "WorkPackage"; newNode.EnableClickEvent = true; nodes.Add(newNode); } for (int i = 0; i < nodes.Count; i++) { GetNodes(nodes[i].Nodes, nodes[i].NodeID); } } #endregion #endregion #region 树节点展开 /// /// 树节点展开 /// /// /// protected void trWBS_NodeExpand(object sender, TreeNodeEventArgs e) { e.Node.Nodes.Clear(); if (e.Node.CommandName == "ProjectType") //展开工程类型 { var trUnitWork = from x in Funs.DB.WBS_UnitWork where x.ProjectId == this.CurrUser.LoginProjectId && x.SuperUnitWork == null && x.ProjectType == e.Node.NodeID select x; trUnitWork = trUnitWork.OrderBy(x => x.UnitWorkCode); if (trUnitWork.Count() > 0) { foreach (var trUnitWorkItem in trUnitWork) { TreeNode newNode = new TreeNode(); newNode.Text = trUnitWorkItem.UnitWorkCode + "-" + trUnitWorkItem.UnitWorkName; newNode.NodeID = trUnitWorkItem.UnitWorkId; newNode.CommandName = "UnitWork"; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); if (BLL.WorkPackageService.GetWorkPackages1ByUnitWorkId(trUnitWorkItem.UnitWorkId.ToString()) != null) { TreeNode temp = new TreeNode(); temp.Text = "temp"; temp.NodeID = "temp"; newNode.Nodes.Add(temp); } } } } else if (e.Node.CommandName == "UnitWork") //展开单位工程节点 { var workPackages = from x in Funs.DB.WBS_WorkPackage where x.UnitWorkId == e.NodeID && x.SuperWorkPack == null && x.IsApprove == true orderby x.WorkPackageCode select x; foreach (var workPackage in workPackages) { TreeNode newNode = new TreeNode(); newNode.Text = workPackage.PackageContent; newNode.NodeID = workPackage.WorkPackageId; newNode.CommandName = "WorkPackage"; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); var childWorkPackages = from x in Funs.DB.WBS_WorkPackage where x.SuperWorkPackageId == workPackage.WorkPackageId && x.IsApprove == true select x; if (childWorkPackages.Count() > 0) { TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } } else if (e.Node.CommandName == "WorkPackage") //展开工作包节点 { var workPackages = from x in Funs.DB.WBS_WorkPackage where x.SuperWorkPackageId == e.Node.NodeID && x.IsApprove == true orderby x.WorkPackageCode, x.WorkPackageId select x; if (workPackages.Count() > 0) //存在子单位工程 { foreach (var workPackage in workPackages) { TreeNode newNode = new TreeNode(); newNode.Text = workPackage.PackageContent; newNode.NodeID = workPackage.WorkPackageId; newNode.CommandName = "WorkPackage"; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); var childWorkPackages = from x in Funs.DB.WBS_WorkPackage where x.SuperWorkPackageId == workPackage.WorkPackageId && x.IsApprove == true select x; if (childWorkPackages.Count() > 0) { TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } } } BindChart(); } #endregion #region Tree点击事件 /// /// Tree点击事件 /// /// /// protected void trWBS_NodeCommand(object sender, TreeCommandEventArgs e) { BindChart(); } #endregion #region 数据绑定 /// /// 数据绑定 /// private void BindChart() { string id = this.trWBS.SelectedNodeID; if (!string.IsNullOrEmpty(id)) { Model.WBS_WorkPackage WorkPackage = BLL.WorkPackageService.GetWorkPackageByWorkPackageId(id); if (WorkPackage != null && BLL.WorkPackageService.GetAllWorkPackagesBySuperWorkPackageId(WorkPackage.WorkPackageId).Count == 0) { string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," + "PlanValue as '本月概算费用',ThisValue as '本月实际费用',TotalPlanValue as '累计概算费用',TotalThisValue as '累计实际费用' " + "from dbo.View_WBS_WorkPackageDetail as t where WorkPackageId=@Id order by t.Months"; //string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01"; SqlParameter[] parameter = new SqlParameter[] { new SqlParameter("@Id",id), //new SqlParameter("@Months",date), }; DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter); this.Grid1.DataSource = dt; this.Grid1.DataBind(); decimal lastacwp = 0, acwp = 0, lastbcwp = 0, bcwp = 0; for (int i = 0; i < dt.Rows.Count; i++) { dt.Rows[i]["本月概算费用"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月概算费用"].ToString()); dt.Rows[i]["本月实际费用"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月实际费用"].ToString()); acwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计概算费用"].ToString()); bcwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计实际费用"].ToString()); if (acwp == lastacwp) { if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now) { dt.Rows[i]["累计概算费用"] = DBNull.Value; } else { dt.Rows[i]["累计概算费用"] = acwp; } } else { dt.Rows[i]["累计概算费用"] = acwp; } if (bcwp == lastbcwp) { if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now) { dt.Rows[i]["累计实际费用"] = DBNull.Value; } else { dt.Rows[i]["累计实际费用"] = bcwp; } } else { dt.Rows[i]["累计实际费用"] = bcwp; } lastacwp = acwp; lastbcwp = bcwp; } this.ChartEV.CreateMaryChartJD(dt, 1020, 420, null); } else { string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," + "PlanValue as '本月概算费用',ThisValue as '本月实际费用',TotalPlanValue as '累计概算费用',TotalThisValue as '累计实际费用' " + "from dbo.View_WBS_WorkPackageParentDetail as t where ParentId=@Id order by t.Months"; //string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01"; SqlParameter[] parameter = new SqlParameter[] { new SqlParameter("@Id",id), //new SqlParameter("@Months",date), }; if (this.trWBS.SelectedNode.CommandName == "ProjectType") { strSql = strSql.Replace("order by t.Months", " and ProjectId='" + this.CurrUser.LoginProjectId + "' order by t.Months"); } DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter); this.Grid1.DataSource = dt; this.Grid1.DataBind(); decimal lastacwp = 0, acwp = 0, lastbcwp = 0, bcwp = 0; for (int i = 0; i < dt.Rows.Count; i++) { dt.Rows[i]["本月概算费用"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月概算费用"].ToString()); dt.Rows[i]["本月实际费用"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月实际费用"].ToString()); acwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计概算费用"].ToString()); bcwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计实际费用"].ToString()); if (acwp == lastacwp) { if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now) { dt.Rows[i]["累计概算费用"] = DBNull.Value; } else { dt.Rows[i]["累计概算费用"] = acwp; } } else { dt.Rows[i]["累计概算费用"] = acwp; } if (bcwp == lastbcwp) { if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now) { dt.Rows[i]["累计实际费用"] = DBNull.Value; } else { dt.Rows[i]["累计实际费用"] = bcwp; } } else { dt.Rows[i]["累计实际费用"] = bcwp; } lastacwp = acwp; lastbcwp = bcwp; } this.ChartEV.CreateMaryChartJD(dt, 1020, 420, null); } } } #endregion #region 将DataTable行列转换 /// /// 将DataTable行列转换 /// /// 要转换的DataTable /// 要作为Column的哪列 /// private DataTable Col2Row(DataTable src, int columnHead) { DataTable result = new DataTable(); DataColumn myHead = src.Columns[columnHead]; result.Columns.Add(myHead.ColumnName); FineUIPro.RenderField bf; bf = new FineUIPro.RenderField(); bf.ColumnID = myHead.ColumnName; bf.DataField = myHead.ColumnName; bf.HeaderText = myHead.ColumnName; Grid1.Columns.Add(bf); for (int i = 0; i < src.Rows.Count; i++) { result.Columns.Add(src.Rows[i][myHead].ToString()); bf = new FineUIPro.RenderField(); bf.ColumnID = src.Rows[i][myHead].ToString(); bf.DataField = src.Rows[i][myHead].ToString(); bf.HeaderText = src.Rows[i][myHead].ToString(); Grid1.Columns.Add(bf); } Grid1.DataKeyNames = new string[] { "月份" }; foreach (DataColumn col in src.Columns) { if (col == myHead) continue; object[] newRow = new object[src.Rows.Count + 1]; newRow[0] = col.ColumnName; for (int i = 0; i < src.Rows.Count; i++) { newRow[i + 1] = src.Rows[i][col]; } result.Rows.Add(newRow); } return result; } private DataTable Col2Row(DataTable src, string columnHead) { for (int i = 0; i < src.Columns.Count; i++) { if (src.Columns[i].ColumnName.ToUpper() == columnHead.ToUpper()) return Col2Row(src, i); } return new DataTable(); } #endregion } }