using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using BLL; namespace FineUIPro.Web.JDGL.Check { public partial class ProgressStatistics : PageBase { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Funs.FineUIPleaseSelect(this.drpProjectType); Funs.FineUIPleaseSelect(this.drpUnitWork); //UnitWorkService.InitUnitWorkDownList(drpUnitWork, this.CurrUser.LoginProjectId, true); } } protected void btnQuery_Click(object sender, EventArgs e) { BindGrid(); } /// /// 绑定数据 /// public void BindGrid() { DataTable tb = new DataTable(); DateTime startDate, endDate, startMonth, endMonth, startDay, endDay, endDayItem; List months = new List(); List weeks = new List(); List days = new List(); Model.Base_Project project = BLL.ProjectService.GetProjectByProjectId(this.CurrUser.LoginProjectId); //默认开始结束日期为项目开始结束日期 startDate = Convert.ToDateTime(project.StartDate); endDate = DateTime.Now.Date.AddDays(1).AddSeconds(-1); if (!string.IsNullOrEmpty(this.txtStartTime.Text.Trim())) { startDate = Convert.ToDateTime(this.txtStartTime.Text.Trim()); } if (!string.IsNullOrEmpty(this.txtEndTime.Text.Trim())) { endDate = Convert.ToDateTime(this.txtEndTime.Text.Trim()).AddDays(1).AddSeconds(-1); } string isDataOK = string.Empty; if (this.ckbData.Checked) { isDataOK = "True"; } List unitWorks = new List(); List workPackages = new List(); List controlItemAndCycles = new List(); List soptCheckDetails = new List(); unitWorks = BLL.UnitWorkService.GetUnitWorkLists(this.CurrUser.LoginProjectId); decimal totalUnitWorkWeights = 0; bool noWeights = false; bool noProjectWeights = false; string[] unitWorkIds = this.drpUnitWork.SelectedValueArray; if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //统计项目 { workPackages = BLL.WorkPackageService.GetAllWorkPackagesByProjectId(this.CurrUser.LoginProjectId); controlItemAndCycles = BLL.ControlItemAndCycleService.GetControlItemAndCyclesByProjectIdAndDate(this.CurrUser.LoginProjectId, endDate); soptCheckDetails = BLL.SpotCheckDetailService.GetViewSpotCheckDetailsByProjectIdAndDate(this.CurrUser.LoginProjectId, endDate, isDataOK); var unitWork = Funs.DB.WBS_UnitWork.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId && x.Weights == null); if (unitWork != null) //存在没有权重值的单位工程 { noProjectWeights = true; } } else //统计单位工程(多选) { workPackages = BLL.WorkPackageService.GetAllWorkPackagesByUnitWorkIds(unitWorkIds); controlItemAndCycles = BLL.ControlItemAndCycleService.GetControlItemAndCyclesByUnitWorkIdsAndDate(unitWorkIds, endDate); soptCheckDetails = BLL.SpotCheckDetailService.GetViewSpotCheckDetailsByUnitWorkIdsAndDate(unitWorkIds, endDate, isDataOK); foreach (var item in unitWorkIds) { var unitWork = BLL.UnitWorkService.GetUnitWorkByUnitWorkId(item); if (unitWork != null) { if (unitWork.Weights != null) { totalUnitWorkWeights += Convert.ToDecimal(unitWork.Weights); } else { noWeights = true; break; } } } } if (noWeights && unitWorkIds.Length > 1) { Alert.ShowInTop("请先设置所选单位工程的权重值!", MessageBoxIcon.Warning); return; } if (noProjectWeights) { Alert.ShowInTop("请先设置所有单位工程的权重值!", MessageBoxIcon.Warning); return; } //if (this.drpUnitWork.SelectedValue != BLL.Const._Null) //{ // workPackages = BLL.WorkPackageService.GetAllWorkPackagesByUnitWorkId(this.drpUnitWork.SelectedValue); // controlItemAndCycles = BLL.ControlItemAndCycleService.GetControlItemAndCyclesByUnitWorkIdAndDate(this.drpUnitWork.SelectedValue, endDate); // soptCheckDetails = BLL.SpotCheckDetailService.GetViewSpotCheckDetailsByUnitWorkIdAndDate(this.drpUnitWork.SelectedValue, endDate, isDataOK); //} //else //{ // workPackages = BLL.WorkPackageService.GetAllWorkPackagesByProjectId(this.CurrUser.LoginProjectId); // controlItemAndCycles = BLL.ControlItemAndCycleService.GetControlItemAndCyclesByProjectIdAndDate(this.CurrUser.LoginProjectId, endDate); // soptCheckDetails = BLL.SpotCheckDetailService.GetViewSpotCheckDetailsByProjectIdAndDate(this.CurrUser.LoginProjectId, endDate, isDataOK); //} decimal lastDPlanTotal = 0; decimal lastDCompleteTotal = 0; #region 按月 if (this.rblType.SelectedValue == "Month") { tb.Columns.Add("月"); 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); tb.Columns.Add("计划值"); tb.Columns.Add("累计计划值"); tb.Columns.Add("实际值"); tb.Columns.Add("累计实际值"); for (int i = 0; i < months.Count; i++) { DataRow row = tb.NewRow(); row[0] = string.Format("{0:yyyy-MM}", months[i]); //对应月份的记录 decimal dPlan = 0, dPlan1 = 0, dPlanTotal = 0, dComplete = 0, dComplete1 = 0, dCompleteMonth = 0, dCompleteTotal = 0; //当月及之前所有工作包内容 var totalPlanCompleteControlItemAndCycles = controlItemAndCycles.Where(x => x.PlanCompleteDate < months[i].AddMonths(1)); //当月及之前所有验收合格记录 var totalSoptCheckDetails = soptCheckDetails.Where(x => x.SpotCheckDate < months[i].AddMonths(1)); foreach (var item in totalPlanCompleteControlItemAndCycles) { { var workPackage1 = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId); if (workPackage1 != null) { //逐级递推计算权重计划值 dPlan1 = Convert.ToDecimal((workPackage1.Weights ?? 0) / 100) * Convert.ToDecimal(item.Weights / 100); var workPackage2 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage1.SuperWorkPackageId); if (workPackage2 != null) { dPlan1 = Convert.ToDecimal((workPackage2.Weights ?? 0) / 100) * dPlan1; var workPackage3 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage2.SuperWorkPackageId); if (workPackage3 != null) { dPlan1 = Convert.ToDecimal((workPackage3.Weights ?? 0) / 100) * dPlan1; } } } if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //按项目统计时,再乘以单位工程权重 { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null) { dPlan1 = Convert.ToDecimal((unitWork.Weights ?? 0) / 100) * dPlan1; } } else { if (unitWorkIds.Length > 1) { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null && totalUnitWorkWeights > 0) { dPlan1 = Convert.ToDecimal((unitWork.Weights ?? 0) / totalUnitWorkWeights) * dPlan1; } } } } if (item.PlanCompleteDate >= months[i]) //当月计划完成记录 { dPlan += dPlan1; //累加当月值 } dPlanTotal += dPlan1; //累加累计值 } foreach (var item in controlItemAndCycles) { //实际值 var itemSoptCheckDetails = soptCheckDetails.Where(x => x.ControlItemAndCycleId == item.ControlItemAndCycleId && x.SpotCheckDate < months[i].AddMonths(1)); var itemMonthSoptCheckDetails = soptCheckDetails.Where(x => x.ControlItemAndCycleId == item.ControlItemAndCycleId && x.SpotCheckDate >= months[i] && x.SpotCheckDate < months[i].AddMonths(1)); if (itemSoptCheckDetails.Count() > 0) //存在验收合格的记录 { //工作包实际值 dComplete1 = Convert.ToDecimal(itemSoptCheckDetails.Count()) / Convert.ToDecimal(item.CheckNum) * Convert.ToDecimal(item.Weights); var workPackage1 = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId); if (workPackage1 != null) { //逐级递推计算权重计划值 dComplete1 = Convert.ToDecimal((workPackage1.Weights ?? 0) / 100) * Convert.ToDecimal(dComplete1 / 100); var workPackage2 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage1.SuperWorkPackageId); if (workPackage2 != null) { dComplete1 = Convert.ToDecimal((workPackage2.Weights ?? 0) / 100) * dComplete1; var workPackage3 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage2.SuperWorkPackageId); if (workPackage3 != null) { dComplete1 = Convert.ToDecimal((workPackage3.Weights ?? 0) / 100) * dComplete1; } } } if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //按项目统计时,再乘以单位工程权重 { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null) { dComplete1 = Convert.ToDecimal((unitWork.Weights ?? 0) / 100) * dComplete1; } } else { if (unitWorkIds.Length > 1) { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null && totalUnitWorkWeights > 0) { dComplete1 = Convert.ToDecimal((unitWork.Weights ?? 0) / totalUnitWorkWeights) * dComplete1; } } } dCompleteTotal += dComplete1; } if (itemMonthSoptCheckDetails.Count() > 0) //当月存在验收合格的记录 { //工作包实际值 dCompleteMonth = Convert.ToDecimal(itemMonthSoptCheckDetails.Count()) / Convert.ToDecimal(item.CheckNum) * Convert.ToDecimal(item.Weights); var workPackage1 = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId); if (workPackage1 != null) { //逐级递推计算权重计划值 dCompleteMonth = Convert.ToDecimal((workPackage1.Weights ?? 0) / 100) * Convert.ToDecimal(dCompleteMonth / 100); var workPackage2 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage1.SuperWorkPackageId); if (workPackage2 != null) { dCompleteMonth = Convert.ToDecimal((workPackage2.Weights ?? 0) / 100) * dCompleteMonth; var workPackage3 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage2.SuperWorkPackageId); if (workPackage3 != null) { dCompleteMonth = Convert.ToDecimal((workPackage3.Weights ?? 0) / 100) * dCompleteMonth; } } } if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //按项目统计时,再乘以单位工程权重 { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null) { dCompleteMonth = Convert.ToDecimal((unitWork.Weights ?? 0) / 100) * dCompleteMonth; } } else { if (unitWorkIds.Length > 1) { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null && totalUnitWorkWeights > 0) { dCompleteMonth = Convert.ToDecimal((unitWork.Weights ?? 0) / totalUnitWorkWeights) * dCompleteMonth; } } } dComplete += dCompleteMonth; } } row[1] = dPlan.ToString(); //计划值 if (dPlanTotal != lastDPlanTotal) //当期累计计划值不等于上月累计计划值时,再保存累计计划值 { row[2] = dPlanTotal.ToString(); //累计计划值 for (int j = 0; j < i; j++) { if (string.IsNullOrEmpty(tb.Rows[j][2].ToString())) { tb.Rows[j][2] = lastDPlanTotal.ToString(); } } } else { if (dPlanTotal == 0) { row[2] = "0"; //累计计划值 } else { row[2] = null; } } lastDPlanTotal = dPlanTotal; row[3] = dComplete.ToString(); //实际值 if (dCompleteTotal != lastDCompleteTotal) //当期累计实际值不等于上月累计实际值时,再保存累计实际值 { row[4] = dCompleteTotal.ToString(); //累计实际值 for (int j = 0; j < i; j++) { if (string.IsNullOrEmpty(tb.Rows[j][4].ToString())) { tb.Rows[j][4] = lastDCompleteTotal.ToString(); } } } else { if (dCompleteTotal == 0) { row[4] = "0"; //累计实际值 } else { row[4] = null; } } lastDCompleteTotal = dCompleteTotal; tb.Rows.Add(row); } } #endregion #region 按周 else if (this.rblType.SelectedValue == "Week") { tb.Columns.Add("周"); int w = 1; tb.Columns.Add("计划值"); tb.Columns.Add("累计计划值"); tb.Columns.Add("实际值"); tb.Columns.Add("累计实际值"); startDay = startDate; endDay = endDate; do { endDayItem = startDay.AddDays(6); if (endDayItem > endDate) { endDayItem = endDate; } DataRow row = tb.NewRow(); row[0] = "第" + w.ToString() + "周"; //对应周的记录 decimal dPlan = 0, dPlan1 = 0, dPlanTotal = 0, dComplete = 0, dComplete1 = 0, dCompleteWeek = 0, dCompleteTotal = 0; //当周及之前所有工作包内容 var totalPlanCompleteControlItemAndCycles = controlItemAndCycles.Where(x => x.PlanCompleteDate < endDayItem); //当周及之前所有验收合格记录 var totalSoptCheckDetails = soptCheckDetails.Where(x => x.SpotCheckDate < endDayItem); foreach (var item in totalPlanCompleteControlItemAndCycles) { { var workPackage1 = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId); if (workPackage1 != null) { //逐级递推计算权重计划值 dPlan1 = Convert.ToDecimal((workPackage1.Weights ?? 0) / 100) * Convert.ToDecimal(item.Weights / 100); var workPackage2 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage1.SuperWorkPackageId); if (workPackage2 != null) { dPlan1 = Convert.ToDecimal((workPackage2.Weights ?? 0) / 100) * dPlan1; var workPackage3 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage2.SuperWorkPackageId); if (workPackage3 != null) { dPlan1 = Convert.ToDecimal((workPackage3.Weights ?? 0) / 100) * dPlan1; } } } if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //按项目统计时,再乘以单位工程权重 { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null) { dPlan1 = Convert.ToDecimal((unitWork.Weights ?? 0) / 100) * dPlan1; } } else { if (unitWorkIds.Length > 1) { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null && totalUnitWorkWeights > 0) { dPlan1 = Convert.ToDecimal((unitWork.Weights ?? 0) / totalUnitWorkWeights) * dPlan1; } } } } if (item.PlanCompleteDate >= startDay) //当周计划完成记录 { dPlan += dPlan1; //累加当周值 } dPlanTotal += dPlan1; //累加累计值 } foreach (var item in controlItemAndCycles) { //实际值 var itemSoptCheckDetails = soptCheckDetails.Where(x => x.ControlItemAndCycleId == item.ControlItemAndCycleId && x.SpotCheckDate < endDayItem); var itemWeekSoptCheckDetails = soptCheckDetails.Where(x => x.ControlItemAndCycleId == item.ControlItemAndCycleId && x.SpotCheckDate >= startDay && x.SpotCheckDate < endDayItem.AddDays(1)); if (itemSoptCheckDetails.Count() > 0) //存在验收合格的记录 { //工作包实际值 dComplete1 = Convert.ToDecimal(itemSoptCheckDetails.Count()) / Convert.ToDecimal(item.CheckNum) * Convert.ToDecimal(item.Weights); var workPackage1 = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId); if (workPackage1 != null) { //逐级递推计算权重计划值 dComplete1 = Convert.ToDecimal((workPackage1.Weights ?? 0) / 100) * Convert.ToDecimal(dComplete1 / 100); var workPackage2 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage1.SuperWorkPackageId); if (workPackage2 != null) { dComplete1 = Convert.ToDecimal((workPackage2.Weights ?? 0) / 100) * dComplete1; var workPackage3 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage2.SuperWorkPackageId); if (workPackage3 != null) { dComplete1 = Convert.ToDecimal((workPackage3.Weights ?? 0) / 100) * dComplete1; } } } if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //按项目统计时,再乘以单位工程权重 { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null) { dComplete1 = Convert.ToDecimal((unitWork.Weights ?? 0) / 100) * dComplete1; } } else { if (unitWorkIds.Length > 1) { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null && totalUnitWorkWeights > 0) { dComplete1 = Convert.ToDecimal((unitWork.Weights ?? 0) / totalUnitWorkWeights) * dComplete1; } } } dCompleteTotal += dComplete1; } if (itemWeekSoptCheckDetails.Count() > 0) //当周存在验收合格的记录 { //工作包实际值 dCompleteWeek = Convert.ToDecimal(itemWeekSoptCheckDetails.Count()) / Convert.ToDecimal(item.CheckNum) * Convert.ToDecimal(item.Weights); var workPackage1 = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId); if (workPackage1 != null) { //逐级递推计算权重计划值 dCompleteWeek = Convert.ToDecimal((workPackage1.Weights ?? 0) / 100) * Convert.ToDecimal(dCompleteWeek / 100); var workPackage2 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage1.SuperWorkPackageId); if (workPackage2 != null) { dCompleteWeek = Convert.ToDecimal((workPackage2.Weights ?? 0) / 100) * dCompleteWeek; var workPackage3 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage2.SuperWorkPackageId); if (workPackage3 != null) { dCompleteWeek = Convert.ToDecimal((workPackage3.Weights ?? 0) / 100) * dCompleteWeek; } } } if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //按项目统计时,再乘以单位工程权重 { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null) { dCompleteWeek = Convert.ToDecimal((unitWork.Weights ?? 0) / 100) * dCompleteWeek; } } else { if (unitWorkIds.Length > 1) { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null && totalUnitWorkWeights > 0) { dCompleteWeek = Convert.ToDecimal((unitWork.Weights ?? 0) / totalUnitWorkWeights) * dCompleteWeek; } } } dComplete += dCompleteWeek; } } row[1] = dPlan.ToString(); //计划值 if (dPlanTotal != lastDPlanTotal) //当期累计计划值不等于上月累计计划值时,再保存累计计划值 { row[2] = dPlanTotal.ToString(); //累计计划值 for (int j = 0; j < tb.Rows.Count; j++) { if (string.IsNullOrEmpty(tb.Rows[j][2].ToString())) { tb.Rows[j][2] = lastDPlanTotal.ToString(); } } } else { if (dPlanTotal == 0) { row[2] = "0"; //累计计划值 } else { row[2] = null; } } lastDPlanTotal = dPlanTotal; row[3] = dComplete.ToString(); //实际值 if (dCompleteTotal != lastDCompleteTotal) //当期累计实际值不等于上月累计实际值时,再保存累计实际值 { row[4] = dCompleteTotal.ToString(); //累计实际值 for (int j = 0; j < tb.Rows.Count; j++) { if (string.IsNullOrEmpty(tb.Rows[j][4].ToString())) { tb.Rows[j][4] = lastDCompleteTotal.ToString(); } } } else { if (dCompleteTotal == 0) { row[4] = "0"; //累计实际值 } else { row[4] = null; } } lastDCompleteTotal = dCompleteTotal; tb.Rows.Add(row); startDay = startDay.AddDays(7); w++; } while (startDay <= endDay); } #endregion #region 按天 else { tb.Columns.Add("天"); tb.Columns.Add("计划值"); tb.Columns.Add("累计计划值"); tb.Columns.Add("实际值"); tb.Columns.Add("累计实际值"); startDay = startDate; endDay = endDate; do { endDayItem = startDay.AddDays(1); if (endDayItem > endDate) { endDayItem = endDate; } DataRow row = tb.NewRow(); row[0] = string.Format("{0:MM-dd}", startDay); //对应天的记录 decimal dPlan = 0, dPlan1 = 0, dPlanTotal = 0, dComplete = 0, dComplete1 = 0, dCompleteDay = 0, dCompleteTotal = 0; //当天及之前所有工作包内容 var totalPlanCompleteControlItemAndCycles = controlItemAndCycles.Where(x => x.PlanCompleteDate < endDayItem); //当天及之前所有验收合格记录 var totalSoptCheckDetails = soptCheckDetails.Where(x => x.SpotCheckDate < endDayItem); foreach (var item in totalPlanCompleteControlItemAndCycles) { { var workPackage1 = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId); if (workPackage1 != null) { //逐级递推计算权重计划值 dPlan1 = Convert.ToDecimal((workPackage1.Weights ?? 0) / 100) * Convert.ToDecimal(item.Weights / 100); var workPackage2 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage1.SuperWorkPackageId); if (workPackage2 != null) { dPlan1 = Convert.ToDecimal((workPackage2.Weights ?? 0) / 100) * dPlan1; var workPackage3 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage2.SuperWorkPackageId); if (workPackage3 != null) { dPlan1 = Convert.ToDecimal((workPackage3.Weights ?? 0) / 100) * dPlan1; } } } if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //按项目统计时,再乘以单位工程权重 { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null) { dPlan1 = Convert.ToDecimal((unitWork.Weights ?? 0) / 100) * dPlan1; } } else { if (unitWorkIds.Length > 1) { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null && totalUnitWorkWeights > 0) { dPlan1 = Convert.ToDecimal((unitWork.Weights ?? 0) / totalUnitWorkWeights) * dPlan1; } } } } if (item.PlanCompleteDate >= startDay) //当天计划完成记录 { dPlan += dPlan1; //累加当天值 } dPlanTotal += dPlan1; //累加累计值 } foreach (var item in controlItemAndCycles) { //实际值 var itemSoptCheckDetails = soptCheckDetails.Where(x => x.ControlItemAndCycleId == item.ControlItemAndCycleId && x.SpotCheckDate < endDayItem); var itemDaySoptCheckDetails = soptCheckDetails.Where(x => x.ControlItemAndCycleId == item.ControlItemAndCycleId && x.SpotCheckDate >= startDay && x.SpotCheckDate < endDayItem); if (itemSoptCheckDetails.Count() > 0) //存在验收合格的记录 { //工作包实际值 dComplete1 = Convert.ToDecimal(itemSoptCheckDetails.Count()) / Convert.ToDecimal(item.CheckNum) * Convert.ToDecimal(item.Weights); var workPackage1 = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId); if (workPackage1 != null) { //逐级递推计算权重计划值 dComplete1 = Convert.ToDecimal((workPackage1.Weights ?? 0) / 100) * Convert.ToDecimal(dComplete1 / 100); var workPackage2 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage1.SuperWorkPackageId); if (workPackage2 != null) { dComplete1 = Convert.ToDecimal((workPackage2.Weights ?? 0) / 100) * dComplete1; var workPackage3 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage2.SuperWorkPackageId); if (workPackage3 != null) { dComplete1 = Convert.ToDecimal((workPackage3.Weights ?? 0) / 100) * dComplete1; } } } if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //按项目统计时,再乘以单位工程权重 { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null) { dComplete1 = Convert.ToDecimal((unitWork.Weights ?? 0) / 100) * dComplete1; } } else { if (unitWorkIds.Length > 1) { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null && totalUnitWorkWeights > 0) { dComplete1 = Convert.ToDecimal((unitWork.Weights ?? 0) / totalUnitWorkWeights) * dComplete1; } } } dCompleteTotal += dComplete1; } if (itemDaySoptCheckDetails.Count() > 0) //当天存在验收合格的记录 { //工作包实际值 dCompleteDay = Convert.ToDecimal(itemDaySoptCheckDetails.Count()) / Convert.ToDecimal(item.CheckNum) * Convert.ToDecimal(item.Weights); var workPackage1 = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId); if (workPackage1 != null) { //逐级递推计算权重计划值 dCompleteDay = Convert.ToDecimal((workPackage1.Weights ?? 0) / 100) * Convert.ToDecimal(dCompleteDay / 100); var workPackage2 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage1.SuperWorkPackageId); if (workPackage2 != null) { dCompleteDay = Convert.ToDecimal((workPackage2.Weights ?? 0) / 100) * dCompleteDay; var workPackage3 = workPackages.FirstOrDefault(x => x.WorkPackageId == workPackage2.SuperWorkPackageId); if (workPackage3 != null) { dCompleteDay = Convert.ToDecimal((workPackage3.Weights ?? 0) / 100) * dCompleteDay; } } } if (unitWorkIds.Length == 1 && unitWorkIds[0] == BLL.Const._Null) //按项目统计时,再乘以单位工程权重 { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null) { dCompleteDay = Convert.ToDecimal((unitWork.Weights ?? 0) / 100) * dCompleteDay; } } else { if (unitWorkIds.Length > 1) { var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage1.UnitWorkId); if (unitWork != null && totalUnitWorkWeights > 0) { dCompleteDay = Convert.ToDecimal((unitWork.Weights ?? 0) / totalUnitWorkWeights) * dCompleteDay; } } } dComplete += dCompleteDay; } } row[1] = dPlan.ToString(); //计划值 if (dPlanTotal != lastDPlanTotal) //当期累计计划值不等于上月累计计划值时,再保存累计计划值 { row[2] = dPlanTotal.ToString(); //累计计划值 for (int j = 0; j < tb.Rows.Count; j++) { if (string.IsNullOrEmpty(tb.Rows[j][2].ToString())) { tb.Rows[j][2] = lastDPlanTotal.ToString(); } } } else { if (dPlanTotal == 0) { row[2] = "0"; //累计计划值 } else { row[2] = null; } } lastDPlanTotal = dPlanTotal; row[3] = dComplete.ToString(); //实际值 if (dCompleteTotal != lastDCompleteTotal) //当期累计实际值不等于上月累计实际值时,再保存累计实际值 { row[4] = dCompleteTotal.ToString(); //累计实际值 for (int j = 0; j < tb.Rows.Count; j++) { if (string.IsNullOrEmpty(tb.Rows[j][4].ToString())) { tb.Rows[j][4] = lastDCompleteTotal.ToString(); } } } else { if (dCompleteTotal == 0) { row[4] = "0"; //累计实际值 } else { row[4] = null; } } lastDCompleteTotal = dCompleteTotal; tb.Rows.Add(row); startDay = startDay.AddDays(1); } while (startDay <= endDay); } #endregion this.ChartEV.CreateMaryChart(tb, 1300, 580, null); } protected void drpProjectType_SelectedIndexChanged(object sender, EventArgs e) { this.drpUnitWork.Items.Clear(); string[] array = this.drpProjectType.SelectedValueArray; List str = new List(); List list = new List(); List list1 = new List(); if (array.Length == 1 && array[0] == BLL.Const._Null) { return; } if (array.Length == 0) { str.Add(BLL.Const._Null); } else { foreach (var item in array) { if (item != BLL.Const._Null) { str.Add(item); list = BLL.UnitWorkService.GetUnitWorkDownList(item, this.CurrUser.LoginProjectId); for (int i = 0; i < list.Count; i++) { list1.Add(list[i]); } } } } ListItem[] ListItem = new ListItem[list1.Count()]; for (int i = 0; i < list1.Count(); i++) { if (list1[i].ProjectType == "1") { ListItem[i] = new ListItem(list1[i].UnitWorkCode + "-" + list1[i].UnitWorkName + "(建筑)", list1[i].UnitWorkId.ToString()); } else { ListItem[i] = new ListItem(list1[i].UnitWorkCode + "-" + list1[i].UnitWorkName + "(安装)", list1[i].UnitWorkId.ToString()); } } this.drpUnitWork.DataTextField = "Text"; this.drpUnitWork.DataValueField = "Value"; this.drpUnitWork.DataSource = ListItem; this.drpUnitWork.DataBind(); Funs.FineUIPleaseSelect(this.drpUnitWork); this.drpUnitWork.SelectedIndex = 0; this.drpProjectType.SelectedValueArray = str.ToArray(); //UnitWorkService.InitUnitWorkDownList(drpUnitWork, this.CurrUser.LoginProjectId, true); } protected void drpUnitWork_SelectedIndexChanged(object sender, EventArgs e) { List str = new List(); string[] array = this.drpUnitWork.SelectedValueArray; if (array.Length == 1 && array[0] == BLL.Const._Null) { return; } if (array.Length == 0) { str.Add(BLL.Const._Null); } else { foreach (var item in array) { if (item != BLL.Const._Null) { str.Add(item); } } } this.drpUnitWork.SelectedValueArray = str.ToArray(); } } }