using System; using System.Collections.Generic; using System.Data; using System.Linq; namespace BLL { public static class WorkloadStatisticsService { /// /// 获取模拟树表格 /// /// public static DataTable GetTreeDataTable(string projectId, DateTime months, string startDate, string cnProfessionId, string unitProjectCode, string wbsSetCode) { List CostControlDetailStatisticsList = new List(); DataTable table = new DataTable(); table.Columns.Add(new DataColumn("Id", typeof(String))); table.Columns.Add(new DataColumn("SupId", typeof(String))); table.Columns.Add(new DataColumn("Name", typeof(String))); table.Columns.Add(new DataColumn("ProjectId", typeof(String))); table.Columns.Add(new DataColumn("Unit", typeof(String))); table.Columns.Add(new DataColumn("TotalNum", typeof(String))); table.Columns.Add(new DataColumn("RealPrice", typeof(String))); table.Columns.Add(new DataColumn("PlanNum", typeof(String))); table.Columns.Add(new DataColumn("ThisNum", typeof(String))); table.Columns.Add(new DataColumn("PlanPrice", typeof(String))); table.Columns.Add(new DataColumn("ThisRealCost", typeof(String))); table.Columns.Add(new DataColumn("ThisPlanValue", typeof(String))); table.Columns.Add(new DataColumn("ThisPlanCost", typeof(String))); table.Columns.Add(new DataColumn("TotalPlanNum", typeof(String))); table.Columns.Add(new DataColumn("TotalThisNum", typeof(String))); table.Columns.Add(new DataColumn("TotalRealCost", typeof(String))); table.Columns.Add(new DataColumn("TotalPlanValue", typeof(String))); table.Columns.Add(new DataColumn("TotalPlanCost", typeof(String))); Model.SGGLDB db = Funs.DB; var costControls = from x in db.WBS_CostControl where x.ProjectId == projectId select x; var details = from x in db.View_WBS_CostControlDetail where x.ProjectId == projectId select x; var parentDetails = from x in db.View_WBS_CostControlParentDetail select x; var wbsSets = from x in db.Wbs_WbsSet where x.ProjectId == projectId select x; var wbsSetInits = from x in db.WBS_WbsSetInit select x; var unitProjects = from x in db.Wbs_UnitProject where x.ProjectId == projectId select x; var unitProjectInits = from x in db.Wbs_UnitProjectInit select x; var cnProfessions = from x in db.WBS_CnProfession where x.ProjectId == projectId select x; var cnProfessionInits = from x in db.WBS_CnProfessionInit select x; var installations = from x in db.Project_Installation where x.ProjectId == projectId select x; CostControlDetailStatisticsList = (from x in db.View_WBS_CostControlDetailStatistics where x.ProjectId == projectId select x).Distinct().ToList(); List newList = new List(); var installationList = CostControlDetailStatisticsList.Where(x => x.WBSType == "Installation" && x.SupId == "0"); foreach (var item in installationList) { newList.Add(item); AddDetail(newList, CostControlDetailStatisticsList, item.Id); } DataRow row; DataRow parentRow; #region 按月统计 if (startDate == BLL.Const._Null) { #region 全部统计 if (cnProfessionId == BLL.Const._Null) //全部统计 { foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[1] = item.SupId; row[2] = item.Name; row[3] = item.ProjectId; Model.WBS_CostControl costControl = costControls.FirstOrDefault(x => x.CostControlId == item.Id); if (costControl != null) { Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisPlanCost), 2);//本月完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanCost), 2);//累计完成预算 } } } else { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } } #endregion else { decimal d10 = 0, d11 = 0, d12 = 0, d15 = 0, d16 = 0, d17 = 0; #region 按专业 if (unitProjectCode == BLL.Const._Null) { if (cnProfessionId != Const.ACCNProfessionalId.ToString() && cnProfessionId != Const.GECNProfessionalId.ToString() && cnProfessionId != Const.UPCNProfessionalId.ToString() && cnProfessionId != Const.TFCNProfessionalId.ToString() && cnProfessionId != Const.GLCNProfessionalId.ToString()) { newList = (from x in newList where (x.WBSType == "Installation" && !x.Name.Contains("防腐绝热") && !x.Name.Contains("地勘") && !x.Name.Contains("全厂地下主管网") && !x.Name.Contains("临时设施") && !x.Name.Contains("总图")) || (x.WBSType != "Installation" && x.OldCnProfessionId.ToString() == cnProfessionId) select x).ToList(); var cn = cnProfessionInits.FirstOrDefault(x => x.CnProfessionId.ToString() == cnProfessionId); parentRow = table.NewRow(); parentRow[0] = cn.CnProfessionId.ToString(); parentRow[1] = "0"; parentRow[2] = cn.CnProfessionName; parentRow[3] = projectId; var cnList = newList.Where(x => x.WBSType == "CnProfession"); foreach (Model.View_WBS_CostControlDetailStatistics item in cnList) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { d10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本月实际成本 parentRow[11] = decimal.Round(d11, 2);//本月计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本月完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "Installation") { decimal ind10 = 0, ind11 = 0, ind12 = 0, ind15 = 0, ind16 = 0, ind17 = 0; if (item.SupId == "0") { row[1] = cn.CnProfessionId.ToString(); } else { row[1] = item.SupId; } List cnIds = BLL.CnProfessionService.GetCnProfessionIdsByInstallationIdAndOldId(item.Id, cnProfessionId); foreach (var cnId in cnIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == cnId && x.Months == months); if (parentDetail != null) { ind10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); ind11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); ind12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); ind15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == cnId); if (parentLastDetail != null && parentLastDetail.Months <= months) { ind15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } if (ind10 != 0) { row[10] = decimal.Round(ind10, 2);//本月实际成本 row[11] = decimal.Round(ind11, 2);//本月计划完成预算 row[12] = decimal.Round(ind12, 2);//本月完成预算 row[15] = decimal.Round(ind15, 2);//累计完成成本 row[16] = decimal.Round(ind16, 2);//累计计划完成预算 row[17] = decimal.Round(ind17, 2);//累计完成预算 } else { if (ind15 > 0) { row[15] = decimal.Round(ind15, 2);//累计完成成本 } if (ind16 > 0) { row[16] = decimal.Round(ind16, 2);//累计计划完成预算 } if (ind17 > 0) { row[17] = decimal.Round(ind17, 2);//累计完成预算 } } } else if (item.WBSType == "CnProfession") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "UnitProject") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "WbsSet") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisPlanCost), 2);//本月完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } } else { Model.WBS_CnProfessionInit cnInit = BLL.CnProfessionInitService.GetCnProfessionInitByCnProfessionId(cnProfessionId); newList = (from x in newList where (x.WBSType == "Installation" && x.Name.Contains(cnInit.CnProfessionName.Substring(0, 2))) || (x.WBSType != "Installation" && x.OldCnProfessionId.ToString() == cnProfessionId) select x).ToList(); var cn = newList.FirstOrDefault(x => x.Name.Contains(cnInit.CnProfessionName.Substring(0, 2)) && x.WBSType == "Installation"); parentRow = table.NewRow(); parentRow[0] = cn.Id; parentRow[1] = "0"; parentRow[2] = cn.Name; parentRow[3] = projectId; Model.View_WBS_CostControlParentDetail pparentDetail = parentDetails.FirstOrDefault(x => x.ParentId == cn.Id && x.Months == months); if (pparentDetail != null) { d10 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == cn.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本月实际成本 parentRow[11] = decimal.Round(d11, 2);//本月计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本月完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "UnitProject") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "WbsSet") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisPlanCost), 2);//本月完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } } } #endregion #region 按分部工程 else if (wbsSetCode == BLL.Const._Null) { if (cnProfessionId != Const.ACCNProfessionalId.ToString() && cnProfessionId != Const.GECNProfessionalId.ToString() && cnProfessionId != Const.UPCNProfessionalId.ToString() && cnProfessionId != Const.TFCNProfessionalId.ToString() && cnProfessionId != Const.GLCNProfessionalId.ToString()) { newList = (from x in newList where (x.WBSType == "Installation" && !x.Name.Contains("防腐绝热") && !x.Name.Contains("地勘") && !x.Name.Contains("全厂地下主管网") && !x.Name.Contains("临时设施") && !x.Name.Contains("总图")) || (x.WBSType == "CnProfession" && x.OldCnProfessionId.ToString() == cnProfessionId) || (x.WBSType != "Installation" && x.WBSType != "CnProfession" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode) select x).ToList(); var up = unitProjectInits.FirstOrDefault(x => x.UnitProjectCode == unitProjectCode); parentRow = table.NewRow(); parentRow[0] = up.UnitProjectCode; parentRow[1] = "0"; parentRow[2] = up.UnitProjectName; parentRow[3] = projectId; foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "Installation") { decimal ind10 = 0, ind11 = 0, ind12 = 0, ind15 = 0, ind16 = 0, ind17 = 0; if (item.SupId == "0") { row[1] = up.UnitProjectCode; } else { row[1] = item.SupId; } List unitProjectIds = BLL.UnitProjectService.GetUnitProjectIdByInstallationIdAndCNCodeAndUnitProjectCode(item.Id, cnProfessionId, unitProjectCode); foreach (var upId in unitProjectIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months); if (parentDetail != null) { ind10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); ind11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); ind12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); ind15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { ind15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } if (ind10 != 0) { row[10] = decimal.Round(ind10, 2);//本月实际成本 row[11] = decimal.Round(ind11, 2);//本月计划完成预算 row[12] = decimal.Round(ind12, 2);//本月完成预算 row[15] = decimal.Round(ind15, 2);//累计完成成本 row[16] = decimal.Round(ind16, 2);//累计计划完成预算 row[17] = decimal.Round(ind17, 2);//累计完成预算 } else { if (ind15 > 0) { row[15] = decimal.Round(ind15, 2);//累计完成成本 } if (ind16 > 0) { row[16] = decimal.Round(ind16, 2);//累计计划完成预算 } if (ind17 > 0) { row[17] = decimal.Round(ind17, 2);//累计完成预算 } } } else if (item.WBSType == "CnProfession") { decimal cnd10 = 0, cnd11 = 0, cnd12 = 0, cnd15 = 0, cnd16 = 0, cnd17 = 0; row[1] = item.SupId; List unitProjectIds = BLL.UnitProjectService.GetUnitProjectIdByCnProfessionIdAndUnitProjectCode(item.Id, unitProjectCode); foreach (var upId in unitProjectIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months); if (parentDetail != null) { cnd10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); cnd11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); cnd12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); cnd15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); cnd16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); cnd17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { cnd15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); cnd16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); cnd17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } if (cnd10 != 0) { row[10] = decimal.Round(cnd10, 2);//本月实际成本 row[11] = decimal.Round(cnd11, 2);//本月计划完成预算 row[12] = decimal.Round(cnd12, 2);//本月完成预算 row[15] = decimal.Round(cnd15, 2);//累计完成成本 row[16] = decimal.Round(cnd16, 2);//累计计划完成预算 row[17] = decimal.Round(cnd17, 2);//累计完成预算 } else { if (cnd15 > 0) { row[15] = decimal.Round(cnd15, 2);//累计完成成本 } if (cnd16 > 0) { row[16] = decimal.Round(cnd16, 2);//累计计划完成预算 } if (cnd17 > 0) { row[17] = decimal.Round(cnd17, 2);//累计完成预算 } } } else if (item.WBSType == "UnitProject") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 d10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } else if (item.WBSType == "WbsSet") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisPlanCost), 2);//本月完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本月实际成本 parentRow[11] = decimal.Round(d11, 2);//本月计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本月完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); } else { newList = (from x in newList where x.WBSType != "Installation" && x.WBSType != "CnProfession" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode select x).ToList(); var up = newList.FirstOrDefault(x => x.WBSType == "UnitProject" && x.OldUnitProjectCode == unitProjectCode); parentRow = table.NewRow(); if (up != null) { parentRow[0] = up.Id; parentRow[1] = "0"; parentRow[2] = up.Name; parentRow[3] = projectId; Model.View_WBS_CostControlParentDetail pparentDetail = parentDetails.FirstOrDefault(x => x.ParentId == up.Id && x.Months == months); if (pparentDetail != null) { d10 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == up.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "WbsSet") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisPlanCost), 2);//本月完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本月实际成本 parentRow[11] = decimal.Round(d11, 2);//本月计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本月完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); } } } #endregion #region 按工作包 else { if (cnProfessionId != Const.ACCNProfessionalId.ToString() && cnProfessionId != Const.GECNProfessionalId.ToString() && cnProfessionId != Const.UPCNProfessionalId.ToString() && cnProfessionId != Const.TFCNProfessionalId.ToString() && cnProfessionId != Const.GLCNProfessionalId.ToString()) { newList = (from x in newList where (x.WBSType == "Installation" && !x.Name.Contains("防腐绝热") && !x.Name.Contains("地勘") && !x.Name.Contains("全厂地下主管网") && !x.Name.Contains("临时设施") && !x.Name.Contains("总图")) || (x.WBSType == "CnProfession" && x.OldCnProfessionId.ToString() == cnProfessionId) || (x.WBSType == "UnitProject" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode) || (x.WBSType != "Installation" && x.WBSType != "CnProfession" && x.WBSType != "UnitProject" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode && x.OldWbsSetCode == wbsSetCode) select x).ToList(); var wb = wbsSetInits.FirstOrDefault(x => x.WbsSetCode == wbsSetCode); parentRow = table.NewRow(); parentRow[0] = wb.WbsSetCode; parentRow[1] = "0"; parentRow[2] = wb.WbsSetName; parentRow[3] = projectId; foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "Installation") { decimal ind10 = 0, ind11 = 0, ind12 = 0, ind15 = 0, ind16 = 0, ind17 = 0; if (item.SupId == "0") { row[1] = wb.WbsSetCode; } else { row[1] = item.SupId; } List wbsSetIds = BLL.WbsSetService.GetWbsSetIdByInstallationIdAndCNCodeAndUnitProjectCodeAndWbsSetCode(item.Id, cnProfessionId, unitProjectCode, wbsSetCode); foreach (var upId in wbsSetIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months); if (parentDetail != null) { ind10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); ind11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); ind12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); ind15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { ind15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } if (ind10 != 0) { row[10] = decimal.Round(ind10, 2);//本月实际成本 row[11] = decimal.Round(ind11, 2);//本月计划完成预算 row[12] = decimal.Round(ind12, 2);//本月完成预算 row[15] = decimal.Round(ind15, 2);//累计完成成本 row[16] = decimal.Round(ind16, 2);//累计计划完成预算 row[17] = decimal.Round(ind17, 2);//累计完成预算 } else { if (ind15 > 0) { row[15] = decimal.Round(ind15, 2);//累计完成成本 } if (ind16 > 0) { row[16] = decimal.Round(ind16, 2);//累计计划完成预算 } if (ind17 > 0) { row[17] = decimal.Round(ind17, 2);//累计完成预算 } } } else if (item.WBSType == "CnProfession") { decimal cnd10 = 0, cnd11 = 0, cnd12 = 0, cnd15 = 0, cnd16 = 0, cnd17 = 0; row[1] = item.SupId; List wbsSetIds = BLL.WbsSetService.GetWbsSetIdByCnProfessionIdAndUnitProjectCodeAndWbsSetCode(item.Id, unitProjectCode, wbsSetCode); foreach (var upId in wbsSetIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months); if (parentDetail != null) { cnd10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); cnd11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); cnd12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); cnd15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); cnd16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); cnd17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { cnd15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); cnd16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); cnd17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } if (cnd10 != 0) { row[10] = decimal.Round(cnd10, 2);//本月实际成本 row[11] = decimal.Round(cnd11, 2);//本月计划完成预算 row[12] = decimal.Round(cnd12, 2);//本月完成预算 row[15] = decimal.Round(cnd15, 2);//累计完成成本 row[16] = decimal.Round(cnd16, 2);//累计计划完成预算 row[17] = decimal.Round(cnd17, 2);//累计完成预算 } else { if (cnd15 > 0) { row[15] = decimal.Round(cnd15, 2);//累计完成成本 } if (cnd16 > 0) { row[16] = decimal.Round(cnd16, 2);//累计计划完成预算 } if (cnd17 > 0) { row[17] = decimal.Round(cnd17, 2);//累计完成预算 } } } else if (item.WBSType == "UnitProject") { decimal upd10 = 0, upd11 = 0, upd12 = 0, upd15 = 0, upd16 = 0, upd17 = 0; row[1] = item.SupId; List wbsSetIds = BLL.WbsSetService.GetWbsSetIdByUnitProjectIdAndWbsSetCode(item.Id, wbsSetCode); foreach (var upId in wbsSetIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months); if (parentDetail != null) { upd10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); upd11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); upd12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); upd15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); upd16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); upd17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { upd15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); upd16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); upd17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } if (upd10 != 0) { row[10] = decimal.Round(upd10, 2);//本月实际成本 row[11] = decimal.Round(upd11, 2);//本月计划完成预算 row[12] = decimal.Round(upd12, 2);//本月完成预算 row[15] = decimal.Round(upd15, 2);//累计完成成本 row[16] = decimal.Round(upd16, 2);//累计计划完成预算 row[17] = decimal.Round(upd17, 2);//累计完成预算 } else { if (upd15 > 0) { row[15] = decimal.Round(upd15, 2);//累计完成成本 } if (upd16 > 0) { row[16] = decimal.Round(upd16, 2);//累计计划完成预算 } if (upd17 > 0) { row[17] = decimal.Round(upd17, 2);//累计完成预算 } } } else if (item.WBSType == "WbsSet") { row[1] = item.SupId; var wbsSet = wbsSets.FirstOrDefault(x => x.WbsSetId == item.Id); Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 if (wbsSet.SuperWbsSetId == null) //工作包节点,累加数据 { d10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 if (wbsSet.SuperWbsSetId == null) //工作包节点,累加数据 { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisPlanCost), 2);//本月完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本月实际成本 parentRow[11] = decimal.Round(d11, 2);//本月计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本月完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); } else { newList = (from x in newList where x.WBSType != "Installation" && x.WBSType != "CnProfession" && x.WBSType != "UnitProject" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode && x.OldWbsSetCode == wbsSetCode select x).ToList(); var wb = newList.FirstOrDefault(x => x.WBSType == "WbsSet" && x.OldWbsSetCode == wbsSetCode); parentRow = table.NewRow(); if (wb != null) { parentRow[0] = wb.Id; parentRow[1] = "0"; parentRow[2] = wb.Name; parentRow[3] = projectId; Model.View_WBS_CostControlParentDetail pparentDetail = parentDetails.FirstOrDefault(x => x.ParentId == wb.Id && x.Months == months); if (pparentDetail != null) { d10 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == wb.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "WbsSet") { row[1] = item.SupId; var wbsSet = wbsSets.FirstOrDefault(x => x.WbsSetId == item.Id); Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisRealCost), 2);//本月实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisPlanValue), 2);//本月计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisPlanCost), 2);//本月完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanNum), 2);//本月计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisNum), 2);//本月完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本月实际成本 parentRow[11] = decimal.Round(d11, 2);//本月计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本月完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); } } } #endregion } } #endregion #region 按周统计 else { DateTime start = Convert.ToDateTime(startDate.Split(',')[0]); #region 全部统计 if (cnProfessionId == BLL.Const._Null) //全部统计 { foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[1] = item.SupId; row[2] = item.Name; row[3] = item.ProjectId; Model.WBS_CostControl costControl = costControls.FirstOrDefault(x => x.CostControlId == item.Id); if (costControl != null) { Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months && x.StartDate == start); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanCost), 2);//本周完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } else { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } } #endregion else { decimal d10 = 0, d11 = 0, d12 = 0, d15 = 0, d16 = 0, d17 = 0; #region 按专业 if (unitProjectCode == BLL.Const._Null) { if (cnProfessionId != Const.ACCNProfessionalId.ToString() && cnProfessionId != Const.GECNProfessionalId.ToString() && cnProfessionId != Const.UPCNProfessionalId.ToString() && cnProfessionId != Const.TFCNProfessionalId.ToString() && cnProfessionId != Const.GLCNProfessionalId.ToString()) { newList = (from x in newList where (x.WBSType == "Installation" && !x.Name.Contains("防腐绝热") && !x.Name.Contains("地勘") && !x.Name.Contains("全厂地下主管网") && !x.Name.Contains("临时设施") && !x.Name.Contains("总图")) || (x.WBSType != "Installation" && x.OldCnProfessionId.ToString() == cnProfessionId) select x).ToList(); var cn = cnProfessionInits.FirstOrDefault(x => x.CnProfessionId.ToString() == cnProfessionId); parentRow = table.NewRow(); parentRow[0] = cn.CnProfessionId.ToString(); parentRow[1] = "0"; parentRow[2] = cn.CnProfessionName; parentRow[3] = projectId; var cnList = newList.Where(x => x.WBSType == "CnProfession"); foreach (Model.View_WBS_CostControlDetailStatistics item in cnList) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { d10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本周实际成本 parentRow[11] = decimal.Round(d11, 2);//本周计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本周完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "Installation") { decimal ind10 = 0, ind11 = 0, ind12 = 0, ind15 = 0, ind16 = 0, ind17 = 0; if (item.SupId == "0") { row[1] = cn.CnProfessionId.ToString(); } else { row[1] = item.SupId; } List cnIds = BLL.CnProfessionService.GetCnProfessionIdsByInstallationIdAndOldId(item.Id, cnProfessionId); foreach (var cnId in cnIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == cnId && x.Months == months && x.StartDate == start); if (parentDetail != null) { ind10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2); ind11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2); ind12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2); ind15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == cnId); if (parentLastDetail != null && parentLastDetail.Months <= months) { ind15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2); } } } if (ind10 != 0) { row[10] = decimal.Round(ind10, 2);//本月实际成本 row[11] = decimal.Round(ind11, 2);//本月计划完成预算 row[12] = decimal.Round(ind12, 2);//本月完成预算 row[15] = decimal.Round(ind15, 2);//累计完成成本 row[16] = decimal.Round(ind16, 2);//累计计划完成预算 row[17] = decimal.Round(ind17, 2);//累计完成预算 } else { if (ind15 > 0) { row[15] = decimal.Round(ind15, 2);//累计完成成本 } if (ind16 > 0) { row[16] = decimal.Round(ind16, 2);//累计计划完成预算 } if (ind17 > 0) { row[17] = decimal.Round(ind17, 2);//累计完成预算 } } } else if (item.WBSType == "CnProfession") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "UnitProject") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "WbsSet") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months && x.StartDate == start); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanCost), 2);//本周完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } } else { Model.WBS_CnProfessionInit cnInit = BLL.CnProfessionInitService.GetCnProfessionInitByCnProfessionId(cnProfessionId); newList = (from x in newList where (x.WBSType == "Installation" && x.Name == cnInit.CnProfessionName) || (x.WBSType != "Installation" && x.OldCnProfessionId.ToString() == cnProfessionId) select x).ToList(); var cn = newList.FirstOrDefault(x => x.Name == cnInit.CnProfessionName); parentRow = table.NewRow(); parentRow[0] = cn.Id; parentRow[1] = "0"; parentRow[2] = cn.Name; parentRow[3] = projectId; Model.View_WBS_CostControlParentDetail pparentDetail = parentDetails.FirstOrDefault(x => x.ParentId == cn.Id && x.Months == months && x.StartDate == start); if (pparentDetail != null) { d10 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisWeekRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisWeekPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisWeekPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == cn.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本周实际成本 parentRow[11] = decimal.Round(d11, 2);//本周计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本周完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "UnitProject") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "WbsSet") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months && x.StartDate == start); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanCost), 2);//本周完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } } } #endregion #region 按分部工程 else if (wbsSetCode == BLL.Const._Null) { if (cnProfessionId != Const.ACCNProfessionalId.ToString() && cnProfessionId != Const.GECNProfessionalId.ToString() && cnProfessionId != Const.UPCNProfessionalId.ToString() && cnProfessionId != Const.TFCNProfessionalId.ToString() && cnProfessionId != Const.GLCNProfessionalId.ToString()) { newList = (from x in newList where (x.WBSType == "Installation" && !x.Name.Contains("防腐绝热") && !x.Name.Contains("地勘") && !x.Name.Contains("全厂地下主管网") && !x.Name.Contains("临时设施") && !x.Name.Contains("总图")) || (x.WBSType == "CnProfession" && x.OldCnProfessionId.ToString() == cnProfessionId) || (x.WBSType != "Installation" && x.WBSType != "CnProfession" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode) select x).ToList(); var up = unitProjectInits.FirstOrDefault(x => x.UnitProjectCode == unitProjectCode); parentRow = table.NewRow(); parentRow[0] = up.UnitProjectCode; parentRow[1] = "0"; parentRow[2] = up.UnitProjectName; parentRow[3] = projectId; foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "Installation") { decimal ind10 = 0, ind11 = 0, ind12 = 0, ind15 = 0, ind16 = 0, ind17 = 0; if (item.SupId == "0") { row[1] = up.UnitProjectCode; } else { row[1] = item.SupId; } List unitProjectIds = BLL.UnitProjectService.GetUnitProjectIdByInstallationIdAndCNCodeAndUnitProjectCode(item.Id, cnProfessionId, unitProjectCode); foreach (var upId in unitProjectIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months && x.StartDate == start); if (parentDetail != null) { ind10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2); ind11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2); ind12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2); ind15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { ind15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } } if (ind10 != 0) { row[10] = decimal.Round(ind10, 2);//本周实际成本 row[11] = decimal.Round(ind11, 2);//本周计划完成预算 row[12] = decimal.Round(ind12, 2);//本周完成预算 row[15] = decimal.Round(ind15, 2);//累计完成成本 row[16] = decimal.Round(ind16, 2);//累计计划完成预算 row[17] = decimal.Round(ind17, 2);//累计完成预算 } else { if (ind15 > 0) { row[15] = decimal.Round(ind15, 2);//累计完成成本 } if (ind16 > 0) { row[16] = decimal.Round(ind16, 2);//累计计划完成预算 } if (ind17 > 0) { row[17] = decimal.Round(ind17, 2);//累计完成预算 } } } else if (item.WBSType == "CnProfession") { decimal cnd10 = 0, cnd11 = 0, cnd12 = 0, cnd15 = 0, cnd16 = 0, cnd17 = 0; row[1] = item.SupId; List unitProjectIds = BLL.UnitProjectService.GetUnitProjectIdByCnProfessionIdAndUnitProjectCode(item.Id, unitProjectCode); foreach (var upId in unitProjectIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months && x.StartDate == start); if (parentDetail != null) { cnd10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2); cnd11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2); cnd12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2); cnd15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2); cnd16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2); cnd17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { cnd15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); cnd16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); cnd17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } } if (cnd10 != 0) { row[10] = decimal.Round(cnd10, 2);//本周实际成本 row[11] = decimal.Round(cnd11, 2);//本周计划完成预算 row[12] = decimal.Round(cnd12, 2);//本周完成预算 row[15] = decimal.Round(cnd15, 2);//累计完成成本 row[16] = decimal.Round(cnd16, 2);//累计计划完成预算 row[17] = decimal.Round(cnd17, 2);//累计完成预算 } else { if (cnd15 > 0) { row[15] = decimal.Round(cnd15, 2);//累计完成成本 } if (cnd16 > 0) { row[16] = decimal.Round(cnd16, 2);//累计计划完成预算 } if (cnd17 > 0) { row[17] = decimal.Round(cnd17, 2);//累计完成预算 } } } else if (item.WBSType == "UnitProject") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 d10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } } else if (item.WBSType == "WbsSet") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months && x.StartDate == start); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanCost), 2);//本周完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本周实际成本 parentRow[11] = decimal.Round(d11, 2);//本周计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本周完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); } else { newList = (from x in newList where x.WBSType != "Installation" && x.WBSType != "CnProfession" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode select x).ToList(); var up = newList.FirstOrDefault(x => x.WBSType == "UnitProject" && x.OldUnitProjectCode == unitProjectCode); parentRow = table.NewRow(); parentRow[0] = up.Id; parentRow[1] = "0"; parentRow[2] = up.Name; parentRow[3] = projectId; Model.View_WBS_CostControlParentDetail pparentDetail = parentDetails.FirstOrDefault(x => x.ParentId == up.Id && x.Months == months && x.StartDate == start); if (pparentDetail != null) { d10 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisWeekRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisWeekPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisWeekPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == up.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "WbsSet") { row[1] = item.SupId; Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months && x.StartDate == start); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanCost), 2);//本周完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本周实际成本 parentRow[11] = decimal.Round(d11, 2);//本周计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本周完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); } } #endregion #region 按工作包 else { if (cnProfessionId != Const.ACCNProfessionalId.ToString() && cnProfessionId != Const.GECNProfessionalId.ToString() && cnProfessionId != Const.UPCNProfessionalId.ToString() && cnProfessionId != Const.TFCNProfessionalId.ToString() && cnProfessionId != Const.GLCNProfessionalId.ToString()) { newList = (from x in newList where (x.WBSType == "Installation" && !x.Name.Contains("防腐绝热") && !x.Name.Contains("地勘") && !x.Name.Contains("全厂地下主管网") && !x.Name.Contains("临时设施") && !x.Name.Contains("总图")) || (x.WBSType == "CnProfession" && x.OldCnProfessionId.ToString() == cnProfessionId) || (x.WBSType == "UnitProject" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode) || (x.WBSType != "Installation" && x.WBSType != "CnProfession" && x.WBSType != "UnitProject" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode && x.OldWbsSetCode == wbsSetCode) select x).ToList(); var wb = wbsSetInits.FirstOrDefault(x => x.WbsSetCode == wbsSetCode); parentRow = table.NewRow(); parentRow[0] = wb.WbsSetCode; parentRow[1] = "0"; parentRow[2] = wb.WbsSetName; parentRow[3] = projectId; foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "Installation") { decimal ind10 = 0, ind11 = 0, ind12 = 0, ind15 = 0, ind16 = 0, ind17 = 0; if (item.SupId == "0") { row[1] = wb.WbsSetCode; } else { row[1] = item.SupId; } List wbsSetIds = BLL.WbsSetService.GetWbsSetIdByInstallationIdAndCNCodeAndUnitProjectCodeAndWbsSetCode(item.Id, cnProfessionId, unitProjectCode, wbsSetCode); foreach (var upId in wbsSetIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months && x.StartDate == start); if (parentDetail != null) { ind10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2); ind11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2); ind12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2); ind15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { ind15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); ind16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); ind17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } } if (ind10 != 0) { row[10] = decimal.Round(ind10, 2);//本周实际成本 row[11] = decimal.Round(ind11, 2);//本周计划完成预算 row[12] = decimal.Round(ind12, 2);//本周完成预算 row[15] = decimal.Round(ind15, 2);//累计完成成本 row[16] = decimal.Round(ind16, 2);//累计计划完成预算 row[17] = decimal.Round(ind17, 2);//累计完成预算 } else { if (ind15 > 0) { row[15] = decimal.Round(ind15, 2);//累计完成成本 } if (ind16 > 0) { row[16] = decimal.Round(ind16, 2);//累计计划完成预算 } if (ind17 > 0) { row[17] = decimal.Round(ind17, 2);//累计完成预算 } } } else if (item.WBSType == "CnProfession") { decimal cnd10 = 0, cnd11 = 0, cnd12 = 0, cnd15 = 0, cnd16 = 0, cnd17 = 0; row[1] = item.SupId; List wbsSetIds = BLL.WbsSetService.GetWbsSetIdByCnProfessionIdAndUnitProjectCodeAndWbsSetCode(item.Id, unitProjectCode, wbsSetCode); foreach (var upId in wbsSetIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months && x.StartDate == start); if (parentDetail != null) { cnd10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2); cnd11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2); cnd12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2); cnd15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2); cnd16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2); cnd17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { cnd15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); cnd16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); cnd17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } } if (cnd10 != 0) { row[10] = decimal.Round(cnd10, 2);//本周实际成本 row[11] = decimal.Round(cnd11, 2);//本周计划完成预算 row[12] = decimal.Round(cnd12, 2);//本周完成预算 row[15] = decimal.Round(cnd15, 2);//累计完成成本 row[16] = decimal.Round(cnd16, 2);//累计计划完成预算 row[17] = decimal.Round(cnd17, 2);//累计完成预算 } else { if (cnd15 > 0) { row[15] = decimal.Round(cnd15, 2);//累计完成成本 } if (cnd16 > 0) { row[16] = decimal.Round(cnd16, 2);//累计计划完成预算 } if (cnd17 > 0) { row[17] = decimal.Round(cnd17, 2);//累计完成预算 } } } else if (item.WBSType == "UnitProject") { decimal upd10 = 0, upd11 = 0, upd12 = 0, upd15 = 0, upd16 = 0, upd17 = 0; row[1] = item.SupId; List wbsSetIds = BLL.WbsSetService.GetWbsSetIdByUnitProjectIdAndWbsSetCode(item.Id, wbsSetCode); foreach (var upId in wbsSetIds) { Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == upId && x.Months == months && x.StartDate == start); if (parentDetail != null) { upd10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2); upd11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2); upd12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2); upd15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2); upd16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2); upd17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == upId); if (parentLastDetail != null && parentLastDetail.Months <= months) { upd15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); upd16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); upd17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } } if (upd10 != 0) { row[10] = decimal.Round(upd10, 2);//本周实际成本 row[11] = decimal.Round(upd11, 2);//本周计划完成预算 row[12] = decimal.Round(upd12, 2);//本周完成预算 row[15] = decimal.Round(upd15, 2);//累计完成成本 row[16] = decimal.Round(upd16, 2);//累计计划完成预算 row[17] = decimal.Round(upd17, 2);//累计完成预算 } else { if (upd15 > 0) { row[15] = decimal.Round(upd15, 2);//累计完成成本 } if (upd16 > 0) { row[16] = decimal.Round(upd16, 2);//累计计划完成预算 } if (upd17 > 0) { row[17] = decimal.Round(upd17, 2);//累计完成预算 } } } else if (item.WBSType == "WbsSet") { row[1] = item.SupId; var wbsSet = wbsSets.FirstOrDefault(x => x.WbsSetId == item.Id); Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 if (wbsSet.SuperWbsSetId == null) //工作包节点,累加数据 { d10 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2); } } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 if (wbsSet.SuperWbsSetId == null) //工作包节点,累加数据 { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months && x.StartDate == start); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanCost), 2);//本周完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本周实际成本 parentRow[11] = decimal.Round(d11, 2);//本周计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本周完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); } else { newList = (from x in newList where x.WBSType != "Installation" && x.WBSType != "CnProfession" && x.WBSType != "UnitProject" && x.OldCnProfessionId.ToString() == cnProfessionId && x.OldUnitProjectCode == unitProjectCode && x.OldWbsSetCode == wbsSetCode select x).ToList(); var wb = newList.FirstOrDefault(x => x.WBSType == "WbsSet" && x.OldWbsSetCode == wbsSetCode); parentRow = table.NewRow(); parentRow[0] = wb.Id; parentRow[1] = "0"; parentRow[2] = wb.Name; parentRow[3] = projectId; Model.View_WBS_CostControlParentDetail pparentDetail = parentDetails.FirstOrDefault(x => x.ParentId == wb.Id && x.Months == months && x.StartDate == start); if (pparentDetail != null) { d10 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisWeekRealCost), 2); d11 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisWeekPlanValue), 2); d12 += decimal.Round(Convert.ToDecimal(pparentDetail.ThisWeekPlanCost), 2); d15 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(pparentDetail.TotalWeekPlanCost), 2); } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == wb.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { d15 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2); d16 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2); d17 += decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2); } } foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[2] = item.Name; row[3] = item.ProjectId; if (item.WBSType == "WbsSet") { row[1] = item.SupId; var wbsSet = wbsSets.FirstOrDefault(x => x.WbsSetId == item.Id); Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months && x.StartDate == start); if (parentDetail != null) { row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisWeekPlanCost), 2);//本周完成预算 row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.ParentId == item.Id); if (parentLastDetail != null && parentLastDetail.Months <= months) { row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } else if (item.WBSType == "CostControl") { row[1] = item.SupId; Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months && x.StartDate == start); if (detail != null) { row[4] = detail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(detail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(detail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(detail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(detail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(detail.PlanPrice), 2);//控制预算单价 row[10] = decimal.Round(Convert.ToDecimal(detail.ThisWeekRealCost), 2);//本周实际成本 row[11] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanValue), 2);//本周计划完成预算 row[12] = decimal.Round(Convert.ToDecimal(detail.ThisWeekPlanCost), 2);//本周完成预算 row[13] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(detail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(detail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(detail.TotalWeekPlanCost), 2);//累计完成预算 } else { Model.View_WBS_CostControlDetail lastDetail = details.OrderByDescending(x => x.Months).OrderByDescending(x => x.StartDate).FirstOrDefault(x => x.CostControlId == item.Id); if (lastDetail != null && lastDetail.Months <= months) { row[4] = lastDetail.Unit;//单位 row[5] = decimal.Round(Convert.ToDecimal(lastDetail.TotalNum), 2);//合同工作量 row[6] = decimal.Round(Convert.ToDecimal(lastDetail.RealPrice), 2);//成本单价 row[7] = decimal.Round(Convert.ToDecimal(lastDetail.PlanWeekNum), 2);//本周计划完成量 row[8] = decimal.Round(Convert.ToDecimal(lastDetail.ThisWeekNum), 2);//本周完成量 row[9] = decimal.Round(Convert.ToDecimal(lastDetail.PlanPrice), 2);//控制预算单价 row[13] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanNum), 2);//累计计划完成量 row[14] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekThisNum), 2);//累计完成量 row[15] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekRealCost), 2);//累计完成成本 row[16] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanValue), 2);//累计计划完成预算 row[17] = decimal.Round(Convert.ToDecimal(lastDetail.TotalWeekPlanCost), 2);//累计完成预算 } } } table.Rows.Add(row); } if (d10 != 0) { parentRow[10] = decimal.Round(d10, 2);//本周实际成本 parentRow[11] = decimal.Round(d11, 2);//本周计划完成预算 parentRow[12] = decimal.Round(d12, 2);//本周完成预算 parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } else { parentRow[15] = decimal.Round(d15, 2);//累计完成成本 parentRow[16] = decimal.Round(d16, 2);//累计计划完成预算 parentRow[17] = decimal.Round(d17, 2);//累计完成预算 } table.Rows.Add(parentRow); } } #endregion } } #endregion return table; } private static void AddDetail(List newList, List oldList, string id) { var items = oldList.Where(x => x.SupId == id).OrderBy(x => x.Code); foreach (var item in items) { newList.Add(item); AddDetail(newList, oldList, item.Id); } } private static void AddDetailOut(List newList, List oldList, string id, string prefix) { var items = oldList.Where(x => x.SupId == id).OrderBy(x => x.Code); foreach (var item in items) { item.Name = prefix + "...." + item.Name; newList.Add(item); AddDetailOut(newList, oldList, item.Id, prefix + "...."); } } /// /// 获取模拟树表格 /// /// public static DataTable GetAllTreeDataTable(string projectId, string IsOut) { List CostControlDetailStatisticsList = new List(); DataTable table = new DataTable(); var installation = Funs.DB.Project_Installation.FirstOrDefault(x => x.SuperInstallationId == "0" && x.ProjectId == projectId); if (installation != null) { DateTime startDate, endDate, startMonth, endMonth; List months = new List(); if (installation.StartDate != null && installation.EndDate != null) { startDate = Convert.ToDateTime(installation.StartDate); endDate = Convert.ToDateTime(installation.EndDate); startMonth = Convert.ToDateTime(startDate.Year + "-" + startDate.Month + "-01"); endMonth = Convert.ToDateTime(endDate.Year + "-" + endDate.Month + "-01"); do { months.Add(startMonth); startMonth = startMonth.AddMonths(1); } while (startMonth <= endMonth); } table.Columns.Add(new DataColumn("Id", typeof(String))); table.Columns.Add(new DataColumn("SupId", typeof(String))); table.Columns.Add(new DataColumn("Name", typeof(String))); table.Columns.Add(new DataColumn("ProjectId", typeof(String))); table.Columns.Add(new DataColumn("Unit", typeof(String))); table.Columns.Add(new DataColumn("TotalNum", typeof(String))); table.Columns.Add(new DataColumn("RealPrice", typeof(String))); table.Columns.Add(new DataColumn("PlanPrice", typeof(String))); for (int i = 0; i < months.Count; i++) { table.Columns.Add(new DataColumn("PlanNum" + (i + 1).ToString(), typeof(String))); table.Columns.Add(new DataColumn("ThisNum" + (i + 1).ToString(), typeof(String))); } table.Columns.Add(new DataColumn("ShowId", typeof(String))); Model.SGGLDB db = Funs.DB; var costControls = from x in db.WBS_CostControl where x.ProjectId == projectId select x; var details = from x in db.View_WBS_CostControlDetail where x.ProjectId == projectId select x; var parentDetails = from x in db.View_WBS_CostControlParentDetail select x; var wbsSets = from x in db.Wbs_WbsSet where x.ProjectId == projectId select x; var wbsSetInits = from x in db.WBS_WbsSetInit select x; var unitProjects = from x in db.Wbs_UnitProject where x.ProjectId == projectId select x; var unitProjectInits = from x in db.Wbs_UnitProjectInit select x; var cnProfessions = from x in db.WBS_CnProfession where x.ProjectId == projectId select x; var cnProfessionInits = from x in db.WBS_CnProfessionInit select x; var installations = from x in db.Project_Installation where x.ProjectId == projectId select x; CostControlDetailStatisticsList = (from x in db.View_WBS_CostControlDetailStatistics where x.ProjectId == projectId select x).Distinct().ToList(); List newList = new List(); var installationList = CostControlDetailStatisticsList.Where(x => x.WBSType == "Installation" && x.SupId == "0"); foreach (var item in installationList) { newList.Add(item); if (string.IsNullOrEmpty(IsOut)) { AddDetail(newList, CostControlDetailStatisticsList, item.Id); } else { AddDetailOut(newList, CostControlDetailStatisticsList, item.Id, string.Empty); } } DataRow row; foreach (Model.View_WBS_CostControlDetailStatistics item in newList) { row = table.NewRow(); row[0] = item.Id; row[1] = item.SupId; row[2] = item.Name; row[3] = item.ProjectId; Model.WBS_CostControl costControl = costControls.FirstOrDefault(x => x.CostControlId == item.Id); if (costControl != null) { row[4] = costControl.Unit;//单位 if (costControl.TotalNum != null) { row[5] = decimal.Round(Convert.ToDecimal(costControl.TotalNum), 2);//合同工作量 } if (costControl.RealPrice != null) { row[6] = decimal.Round(Convert.ToDecimal(costControl.RealPrice), 2);//成本单价 } if (costControl.PlanPrice != null) { row[7] = decimal.Round(Convert.ToDecimal(costControl.PlanPrice), 2);//控制预算单价 } for (int i = 0; i < months.Count; i++) { Model.View_WBS_CostControlDetail detail = details.FirstOrDefault(x => x.CostControlId == item.Id && x.Months == months[i]); if (detail != null) { if (detail.PlanNum != 0) { row[8 + i * 2] = decimal.Round(Convert.ToDecimal(detail.PlanNum), 2); } if (detail.ThisNum != 0) { row[9 + i * 2] = decimal.Round(Convert.ToDecimal(detail.ThisNum), 2); } } } row[10 + (months.Count-1) * 2] = item.Id; //row[10] = decimal.Round(Convert.ToDecimal(detail.ThisRealCost), 2);//本月实际成本 //row[11] = decimal.Round(Convert.ToDecimal(detail.ThisPlanValue), 2);//本月计划完成预算 //row[12] = decimal.Round(Convert.ToDecimal(detail.ThisPlanCost), 2);//本月完成预算 //row[13] = decimal.Round(Convert.ToDecimal(detail.TotalPlanNum), 2);//累计计划完成量 //row[14] = decimal.Round(Convert.ToDecimal(detail.TotalThisNum), 2);//累计完成量 //row[15] = decimal.Round(Convert.ToDecimal(detail.TotalRealCost), 2);//累计完成成本 //row[16] = decimal.Round(Convert.ToDecimal(detail.TotalPlanValue), 2);//累计计划完成预算 //row[17] = decimal.Round(Convert.ToDecimal(detail.TotalPlanCost), 2);//累计完成预算 } else { //Model.View_WBS_CostControlParentDetail parentDetail = parentDetails.FirstOrDefault(x => x.ParentId == item.Id && x.Months == months); //if (parentDetail != null) //{ // row[10] = decimal.Round(Convert.ToDecimal(parentDetail.ThisRealCost), 2);//本月实际成本 // row[11] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanValue), 2);//本月计划完成预算 // row[12] = decimal.Round(Convert.ToDecimal(parentDetail.ThisPlanCost), 2);//本月完成预算 // row[15] = decimal.Round(Convert.ToDecimal(parentDetail.TotalRealCost), 2);//累计完成成本 // row[16] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanValue), 2);//累计计划完成预算 // row[17] = decimal.Round(Convert.ToDecimal(parentDetail.TotalPlanCost), 2);//累计完成预算 //} //else //{ // Model.View_WBS_CostControlParentDetail parentLastDetail = parentDetails.OrderByDescending(x => x.Months).FirstOrDefault(x => x.ParentId == item.Id); // if (parentLastDetail != null && parentLastDetail.Months <= months) // { // row[15] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalRealCost), 2);//累计完成成本 // row[16] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanValue), 2);//累计计划完成预算 // row[17] = decimal.Round(Convert.ToDecimal(parentLastDetail.TotalPlanCost), 2);//累计完成预算 // } //} } table.Rows.Add(row); } } return table; } } }