CNCEC_SUBQHSE_WUHUAN/SGGL/FineUIPro.Web/JDGL/CostAnalysis/JDReport.aspx.cs

3522 lines
225 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using Aspose.Words;
using Aspose.Words.Drawing;
using Aspose.Words.Drawing.Charts;
using Aspose.Words.Tables;
using BLL;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.JDGL.CostAnalysis
{
public partial class JDReport : PageBase
{
#region
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.txtMonths.Text = string.Format("{0:yyyy-MM}", DateTime.Now);
GetValue();
}
}
private void SetEmpty()
{
this.SimpleForm1.Title = string.Empty;
}
#endregion
#region
private void GetValue()
{
Model.Project_Installation installation = BLL.Project_InstallationService.GetProjectInstallationByProjectId(this.CurrUser.LoginProjectId);
if (installation != null && !string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
{
string id = installation.InstallationId;
string date = this.txtMonths.Text.Trim() + "-01";
string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," +
"ThisRealCost as '本月已完工作实际费用-ACWP',ThisPlanCost as '本月已完工作预算费用-BCWP',ThisPlanValue as '本月计划工作预算费用-BCWS',TotalPlanValue as '累计计划工作预算费用-BCWS',TotalRealCost as '累计已完工作实际费用-ACWP',TotalPlanCost as '累计已完工作预算费用-BCWP' " +
"from dbo.View_WBS_CostControlParentDetail as t where ParentId=@Id and t.Months<=@Months order by t.Months";
//string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01";
SqlParameter[] parameter = new SqlParameter[]
{
new SqlParameter("@Id",id),
new SqlParameter("@Months",date),
};
DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
decimal lastbcws = 0, bcws = 0, lastacwp = 0, acwp = 0, lastbcwp = 0, bcwp = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i]["本月已完工作实际费用-ACWP"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月已完工作实际费用-ACWP"].ToString()) / 10000;
dt.Rows[i]["本月已完工作预算费用-BCWP"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月已完工作预算费用-BCWP"].ToString()) / 10000;
dt.Rows[i]["本月计划工作预算费用-BCWS"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月计划工作预算费用-BCWS"].ToString()) / 10000;
bcws = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计计划工作预算费用-BCWS"].ToString());
acwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计已完工作实际费用-ACWP"].ToString());
bcwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计已完工作预算费用-BCWP"].ToString());
if (bcws == lastbcws)
{
if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
{
dt.Rows[i]["累计计划工作预算费用-BCWS"] = DBNull.Value;
}
else
{
dt.Rows[i]["累计计划工作预算费用-BCWS"] = bcws / 10000;
}
}
else
{
dt.Rows[i]["累计计划工作预算费用-BCWS"] = bcws / 10000;
}
if (acwp == lastacwp)
{
if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
{
dt.Rows[i]["累计已完工作实际费用-ACWP"] = DBNull.Value;
}
else
{
dt.Rows[i]["累计已完工作实际费用-ACWP"] = acwp / 10000;
}
}
else
{
dt.Rows[i]["累计已完工作实际费用-ACWP"] = acwp / 10000;
}
if (bcwp == lastbcwp)
{
if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
{
dt.Rows[i]["累计已完工作预算费用-BCWP"] = DBNull.Value;
}
else
{
dt.Rows[i]["累计已完工作预算费用-BCWP"] = bcwp / 10000;
}
}
else
{
dt.Rows[i]["累计已完工作预算费用-BCWP"] = bcwp / 10000;
}
lastbcws = bcws;
lastacwp = acwp;
lastbcwp = bcwp;
}
if (dt.Rows.Count > 0)
{
this.ChartEV.CreateMaryChart(dt, 1220, 420, null);
decimal BCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作预算费用-BCWP"].ToString());
decimal BCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计计划工作预算费用-BCWS"].ToString());
decimal ACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作实际费用-ACWP"].ToString());
decimal mBCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作预算费用-BCWP"].ToString());
decimal mBCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月计划工作预算费用-BCWS"].ToString());
decimal mACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作实际费用-ACWP"].ToString());
decimal CV = BCWP - ACWP;
decimal SV = BCWP - BCWS;
decimal CPI = 0;
if (ACWP > 0)
{
CPI = BCWP / ACWP;
}
decimal SPI = 0;
if (BCWS > 0)
{
SPI = BCWP / BCWS;
}
decimal mCV = mBCWP - mACWP;
decimal mSV = mBCWP - mBCWS;
decimal mCPI = 0;
if (mACWP > 0)
{
mCPI = mBCWP / mACWP;
}
decimal mSPI = 0;
if (mBCWS > 0)
{
mSPI = mBCWP / mBCWS;
}
//总体进度
DataTable table2 = new DataTable();
table2.Columns.Add(new DataColumn("Id", typeof(String)));
table2.Columns.Add(new DataColumn("BCWP", typeof(String)));
table2.Columns.Add(new DataColumn("BCWS", typeof(String)));
table2.Columns.Add(new DataColumn("ACWP", typeof(String)));
table2.Columns.Add(new DataColumn("CV", typeof(String)));
table2.Columns.Add(new DataColumn("SV", typeof(String)));
table2.Columns.Add(new DataColumn("CPI", typeof(String)));
table2.Columns.Add(new DataColumn("SPI", typeof(String)));
DataRow row2;
row2 = table2.NewRow();
row2[0] = SQLHelper.GetNewID();
row2[1] = BCWP.ToString("0.####");
row2[2] = BCWS.ToString("0.####");
row2[3] = ACWP.ToString("0.####");
row2[4] = CV.ToString("0.####");
row2[5] = SV.ToString("0.####");
row2[6] = CPI.ToString("0.####");
row2[7] = SPI.ToString("0.####");
table2.Rows.Add(row2);
this.Grid2.DataSource = table2;
this.Grid2.DataBind();
//本月进度
table2.Rows.Clear();
row2[0] = SQLHelper.GetNewID();
row2[1] = mBCWP.ToString("0.####");
row2[2] = mBCWS.ToString("0.####");
row2[3] = mACWP.ToString("0.####");
row2[4] = mCV.ToString("0.####");
row2[5] = mSV.ToString("0.####");
row2[6] = mCPI.ToString("0.####");
row2[7] = mSPI.ToString("0.####");
table2.Rows.Add(row2);
this.Grid3.DataSource = table2;
this.Grid3.DataBind();
//按专业统计
DataTable table4 = new DataTable();
table4.Columns.Add(new DataColumn("Id", typeof(String)));
table4.Columns.Add(new DataColumn("SupId", typeof(String)));
table4.Columns.Add(new DataColumn("Name", typeof(String)));
table4.Columns.Add(new DataColumn("mBCWP", typeof(String)));
table4.Columns.Add(new DataColumn("mBCWS", typeof(String)));
table4.Columns.Add(new DataColumn("mACWP", typeof(String)));
table4.Columns.Add(new DataColumn("mCV", typeof(String)));
table4.Columns.Add(new DataColumn("mSV", typeof(String)));
table4.Columns.Add(new DataColumn("mCPI", typeof(String)));
table4.Columns.Add(new DataColumn("mSPI", typeof(String)));
table4.Columns.Add(new DataColumn("BCWP", typeof(String)));
table4.Columns.Add(new DataColumn("BCWS", typeof(String)));
table4.Columns.Add(new DataColumn("ACWP", typeof(String)));
table4.Columns.Add(new DataColumn("CV", typeof(String)));
table4.Columns.Add(new DataColumn("SV", typeof(String)));
table4.Columns.Add(new DataColumn("CPI", typeof(String)));
table4.Columns.Add(new DataColumn("SPI", typeof(String)));
Model.SGGLDB db = Funs.DB;
var cnProfessions = from x in db.WBS_CnProfession where x.ProjectId == this.CurrUser.LoginProjectId && x.IsApprove == true select x;
var installationIds = cnProfessions.Select(x => x.InstallationId).Distinct().ToList();
var installations = from x in db.Project_Installation where x.ProjectId == this.CurrUser.LoginProjectId && installationIds.Contains(x.InstallationId) select x;
var unitProjects = from x in db.Wbs_UnitProject where x.ProjectId == this.CurrUser.LoginProjectId && x.IsApprove == true select x;
var details = from x in db.View_WBS_CostControlParentDetail
where x.Months == Funs.GetNewDateTime(date)
select x;
DataRow row4;
decimal cnACWP, cnBCWP, cnBCWS, cnmACWP, cnmBCWP, cnmBCWS, cnCV, cnSV, cnCPI, cnSPI, cnmCV, cnmSV, cnmCPI, cnmSPI,
unACWP, unBCWP, unBCWS, unmACWP, unmBCWP, unmBCWS, unCV, unSV, unCPI, unSPI, unmCV, unmSV, unmCPI, unmSPI,
inACWP, inBCWP, inBCWS, inmACWP, inmBCWP, inmBCWS, inCV, inSV, inCPI, inSPI, inmCV, inmSV, inmCPI, inmSPI;
int a = 1, b = 1, c = 1;
foreach (var item in installations)
{
inACWP = 0;
inBCWP = 0;
inBCWS = 0;
inmACWP = 0;
inmBCWP = 0;
inmBCWS = 0;
inCV = 0;
inSV = 0;
inCPI = 0;
inSPI = 0;
inmCV = 0;
inmSV = 0;
inmCPI = 0;
inmSPI = 0;
row4 = table4.NewRow();
row4[0] = c.ToString();
row4[1] = "0";
row4[2] = item.InstallationName;
var inDetails = (from x in details
where x.ParentId == item.InstallationId
select x).ToList();
inmACWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
inmBCWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
inmBCWS = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
inmCV = inmBCWP - inmACWP;
inmSV = inmBCWP - inmBCWS;
if (inmACWP > 0)
{
inmCPI = inmBCWP / inmACWP;
}
if (inmBCWS > 0)
{
inmSPI = inmBCWP / inmBCWS;
}
row4[3] = inmBCWP.ToString("0.####");
row4[4] = inmBCWS.ToString("0.####");
row4[5] = inmACWP.ToString("0.####");
row4[6] = inmCV.ToString("0.####");
row4[7] = inmSV.ToString("0.####");
row4[8] = inmCPI.ToString("0.####");
row4[9] = inmSPI.ToString("0.####");
inACWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
inBCWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
inBCWS = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
inCV = inBCWP - inACWP;
inSV = inBCWP - inBCWS;
if (inACWP > 0)
{
inCPI = inBCWP / inACWP;
}
if (inBCWS > 0)
{
inSPI = inBCWP / inBCWS;
}
row4[10] = inBCWP.ToString("0.####");
row4[11] = inBCWS.ToString("0.####");
row4[12] = inACWP.ToString("0.####");
row4[13] = inCV.ToString("0.####");
row4[14] = inSV.ToString("0.####");
row4[15] = inCPI.ToString("0.####");
row4[16] = inSPI.ToString("0.####");
table4.Rows.Add(row4);
a = 1;
var icnProfessions = cnProfessions.Where(x => x.InstallationId == item.InstallationId);
foreach (var cn in icnProfessions)
{
cnACWP = 0;
cnBCWP = 0;
cnBCWS = 0;
cnmACWP = 0;
cnmBCWP = 0;
cnmBCWS = 0;
cnCV = 0;
cnSV = 0;
cnCPI = 0;
cnSPI = 0;
cnmCV = 0;
cnmSV = 0;
cnmCPI = 0;
cnmSPI = 0;
row4 = table4.NewRow();
row4[0] = c.ToString() + "." + a.ToString();
row4[1] = c;
row4[2] = cn.CnProfessionName;
var cnDetails = (from x in details
where x.ParentId == cn.CnProfessionId
select x).ToList();
cnmACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
cnmBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
cnmBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
cnmCV = cnmBCWP - cnmACWP;
cnmSV = cnmBCWP - cnmBCWS;
if (cnmACWP > 0)
{
cnmCPI = cnmBCWP / cnmACWP;
}
if (cnmBCWS > 0)
{
cnmSPI = cnmBCWP / cnmBCWS;
}
row4[3] = cnmBCWP.ToString("0.####");
row4[4] = cnmBCWS.ToString("0.####");
row4[5] = cnmACWP.ToString("0.####");
row4[6] = cnmCV.ToString("0.####");
row4[7] = cnmSV.ToString("0.####");
row4[8] = cnmCPI.ToString("0.####");
row4[9] = cnmSPI.ToString("0.####");
cnACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
cnBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
cnBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
cnCV = cnBCWP - cnACWP;
cnSV = cnBCWP - cnBCWS;
if (cnACWP > 0)
{
cnCPI = cnBCWP / cnACWP;
}
if (cnBCWS > 0)
{
cnSPI = cnBCWP / cnBCWS;
}
row4[10] = cnBCWP.ToString("0.####");
row4[11] = cnBCWS.ToString("0.####");
row4[12] = cnACWP.ToString("0.####");
row4[13] = cnCV.ToString("0.####");
row4[14] = cnSV.ToString("0.####");
row4[15] = cnCPI.ToString("0.####");
row4[16] = cnSPI.ToString("0.####");
table4.Rows.Add(row4);
b = 1;
var unLists = from x in unitProjects where x.CnProfessionId == cn.CnProfessionId orderby x.SortIndex select x;
foreach (var un in unLists)
{
unACWP = 0;
unBCWP = 0;
unBCWS = 0;
unmACWP = 0;
unmBCWP = 0;
unmBCWS = 0;
unCV = 0;
unSV = 0;
unCPI = 0;
unSPI = 0;
unmCV = 0;
unmSV = 0;
unmCPI = 0;
unmSPI = 0;
row4 = table4.NewRow();
row4[0] = c.ToString() + "." + a.ToString() + "." + b.ToString();
row4[1] = c.ToString() + "." + a.ToString();
row4[2] = un.UnitProjectName;
var unDetails = from x in details
where x.ParentId == un.UnitProjectId
select x;
unmACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
unmBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
unmBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
unmCV = unmBCWP - unmACWP;
unmSV = unmBCWP - unmBCWS;
if (unmACWP > 0)
{
unmCPI = unmBCWP / unmACWP;
}
if (unmBCWS > 0)
{
unmSPI = unmBCWP / unmBCWS;
}
row4[3] = unmBCWP.ToString("0.####");
row4[4] = unmBCWS.ToString("0.####");
row4[5] = unmACWP.ToString("0.####");
row4[6] = unmCV.ToString("0.####");
row4[7] = unmSV.ToString("0.####");
row4[8] = unmCPI.ToString("0.####");
row4[9] = unmSPI.ToString("0.####");
unACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
unBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
unBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
unCV = unBCWP - unACWP;
unSV = unBCWP - unBCWS;
if (unACWP > 0)
{
unCPI = unBCWP / unACWP;
}
if (unBCWS > 0)
{
unSPI = unBCWP / unBCWS;
}
row4[10] = unBCWP.ToString("0.####");
row4[11] = unBCWS.ToString("0.####");
row4[12] = unACWP.ToString("0.####");
row4[13] = unCV.ToString("0.####");
row4[14] = unSV.ToString("0.####");
row4[15] = unCPI.ToString("0.####");
row4[16] = unSPI.ToString("0.####");
table4.Rows.Add(row4);
b++;
}
a++;
}
c++;
}
if (table4.Rows.Count > 0)
{
this.Grid4.DataSource = table4;
this.Grid4.DataBind();
}
//按设备材料分类统计
DataTable table5 = new DataTable();
table5.Columns.Add(new DataColumn("Id", typeof(String)));
table5.Columns.Add(new DataColumn("SupId", typeof(String)));
table5.Columns.Add(new DataColumn("Name", typeof(String)));
table5.Columns.Add(new DataColumn("Unit", typeof(String)));
table5.Columns.Add(new DataColumn("TotalNum", typeof(String)));
table5.Columns.Add(new DataColumn("mThisNum", typeof(String)));
table5.Columns.Add(new DataColumn("tThisNum", typeof(String)));
table5.Columns.Add(new DataColumn("mRate", typeof(String)));
table5.Columns.Add(new DataColumn("tRate", typeof(String)));
DataRow row5;
var cnProfessionInits = from x in db.WBS_CnProfessionInit orderby x.SortIndex select x;
var costControls = from x in db.WBS_CostControl
join z in db.WBS_EquipmentMaterialType on x.EquipmentMaterialTypeId equals z.EquipmentMaterialTypeId
join t in db.Wbs_WbsSet on x.WbsSetId equals t.WbsSetId
where x.ProjectId == this.CurrUser.LoginProjectId
select new
{
x.Unit,
x.TotalNum,
z.EquipmentMaterialBigTypeId,
z.EquipmentMaterialTypeId,
t.InstallationId,
};
var costControlDetails = from x in db.WBS_CostControlDetail
join y in db.WBS_CostControl on x.CostControlId equals y.CostControlId
join z in db.WBS_EquipmentMaterialType on y.EquipmentMaterialTypeId equals z.EquipmentMaterialTypeId
join t in db.Wbs_WbsSet on y.WbsSetId equals t.WbsSetId
where x.Months <= Funs.GetNewDateTime(date) && y.ProjectId == this.CurrUser.LoginProjectId
orderby x.Months descending
select new
{
x.CostControlDetailId,
t.InstallationId,
y.EquipmentMaterialTypeId,
z.EquipmentMaterialBigTypeId,
z.EquipmentMaterialTypeName,
x.Months,
x.ThisNum,
};
var equipmentMaterialBigTypes = from x in db.WBS_EquipmentMaterialBigType orderby x.EquipmentMaterialBigTypeCode select x;
var equipmentMaterialTypes = from x in db.WBS_EquipmentMaterialType orderby x.EquipmentMaterialTypeCode select x;
int v = 1, w = 2, d = 1, f = 1;
foreach (var cn in cnProfessionInits)
{
row5 = table5.NewRow();
row5[0] = v.ToString();
row5[1] = "0";
row5[2] = cn.CnProfessionName;
table5.Rows.Add(row5);
row5 = table5.NewRow();
row5[0] = v.ToString() + ".1";
row5[1] = v.ToString();
row5[2] = "本专业汇总统计";
table5.Rows.Add(row5);
d = 1;
var bigTypes = equipmentMaterialBigTypes.Where(x => x.CnProfessionId == cn.CnProfessionId).OrderBy(x => x.EquipmentMaterialBigTypeCode);
foreach (var bigType in bigTypes)
{
row5 = table5.NewRow();
row5[0] = v.ToString() + ".1." + d.ToString();
row5[1] = v.ToString() + ".1";
row5[2] = bigType.EquipmentMaterialBigTypeName;
var list = costControls.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId);
if (list.Count() > 0)
{
row5[3] = list.First().Unit;
row5[4] = list.ToList().Sum(x => x.TotalNum ?? 0);
var list2 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.Months == Funs.GetNewDateTime(date));
row5[5] = list2.ToList().Sum(x => x.ThisNum ?? 0);
var list3 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId);
row5[6] = list3.ToList().Sum(x => x.ThisNum ?? 0);
if (row5[4].ToString() != "0" && row5[5].ToString() != "0")
{
row5[7] = (Funs.GetNewDecimalOrZero(row5[5].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
}
else
{
row5[7] = "/";
}
if (row5[4].ToString() != "0" && row5[6].ToString() != "0")
{
row5[8] = (Funs.GetNewDecimalOrZero(row5[6].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
}
else
{
row5[8] = "/";
}
}
table5.Rows.Add(row5);
f = 1;
var types = equipmentMaterialTypes.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId).OrderBy(x => x.EquipmentMaterialTypeCode);
foreach (var equipmentMaterialType in types)
{
row5 = table5.NewRow();
row5[0] = v.ToString() + ".1." + d.ToString() + "." + f.ToString();
row5[1] = v.ToString() + ".1." + d.ToString();
row5[2] = equipmentMaterialType.EquipmentMaterialTypeName;
var lists = costControls.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId);
if (lists.Count() > 0)
{
row5[3] = lists.First().Unit;
row5[4] = lists.ToList().Sum(x => x.TotalNum ?? 0);
var list2s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.Months == Funs.GetNewDateTime(date));
row5[5] = list2s.ToList().Sum(x => x.ThisNum ?? 0);
var list3s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId);
row5[6] = list3s.ToList().Sum(x => x.ThisNum ?? 0);
if (row5[4].ToString() != "0" && row5[5].ToString() != "0")
{
row5[7] = (Funs.GetNewDecimalOrZero(row5[5].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
}
else
{
row5[7] = "/";
}
if (row5[4].ToString() != "0" && row5[6].ToString() != "0")
{
row5[8] = (Funs.GetNewDecimalOrZero(row5[6].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
}
else
{
row5[8] = "/";
}
}
table5.Rows.Add(row5);
f++;
}
d++;
}
w = 2;
foreach (var ins in installations)
{
row5 = table5.NewRow();
row5[0] = v.ToString() + "." + w.ToString();
row5[1] = v.ToString();
row5[2] = ins.InstallationName;
table5.Rows.Add(row5);
d = 1;
var bigTypes2 = equipmentMaterialBigTypes.Where(x => x.CnProfessionId == cn.CnProfessionId).OrderBy(x => x.EquipmentMaterialBigTypeCode);
foreach (var bigType in bigTypes2)
{
row5 = table5.NewRow();
row5[0] = v.ToString() + "." + w.ToString() + d.ToString();
row5[1] = v.ToString() + "." + w.ToString();
row5[2] = bigType.EquipmentMaterialBigTypeName;
var list = costControls.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId);
if (list.Count() > 0)
{
row5[3] = list.First().Unit;
row5[4] = list.ToList().Sum(x => x.TotalNum ?? 0);
var list2 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId && x.Months == Funs.GetNewDateTime(date));
row5[5] = list2.ToList().Sum(x => x.ThisNum ?? 0);
var list3 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId);
row5[6] = list3.ToList().Sum(x => x.ThisNum ?? 0);
if (row5[4].ToString() != "0" && row5[5].ToString() != "0")
{
row5[7] = (Funs.GetNewDecimalOrZero(row5[5].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
}
else
{
row5[7] = "/";
}
if (row5[4].ToString() != "0" && row5[6].ToString() != "0")
{
row5[8] = (Funs.GetNewDecimalOrZero(row5[6].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
}
else
{
row5[8] = "/";
}
}
table5.Rows.Add(row5);
f = 1;
var types = equipmentMaterialTypes.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId).OrderBy(x => x.EquipmentMaterialTypeCode);
foreach (var equipmentMaterialType in types)
{
row5 = table5.NewRow();
row5[0] = v.ToString() + "." + w.ToString() + d.ToString() + "." + f.ToString();
row5[1] = v.ToString() + "." + w.ToString() + d.ToString();
row5[2] = equipmentMaterialType.EquipmentMaterialTypeName;
var lists = costControls.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId);
if (lists.Count() > 0)
{
row5[3] = lists.First().Unit;
row5[4] = lists.ToList().Sum(x => x.TotalNum ?? 0);
var list2s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId && x.Months == Funs.GetNewDateTime(date));
row5[5] = list2s.ToList().Sum(x => x.ThisNum ?? 0);
var list3s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId);
row5[6] = list3s.ToList().Sum(x => x.ThisNum ?? 0);
if (row5[4].ToString() != "0" && row5[5].ToString() != "0")
{
row5[7] = (Funs.GetNewDecimalOrZero(row5[5].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
}
else
{
row5[7] = "/";
}
if (row5[4].ToString() != "0" && row5[6].ToString() != "0")
{
row5[8] = (Funs.GetNewDecimalOrZero(row5[6].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
}
else
{
row5[8] = "/";
}
}
table5.Rows.Add(row5);
f++;
}
d++;
}
w++;
}
v++;
}
if (table5.Rows.Count > 0)
{
this.Grid5.DataSource = table5;
this.Grid5.DataBind();
}
}
}
}
#endregion
#region
/// <summary>
/// 查询按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSearch_Click(object sender, EventArgs e)
{
GetValue();
}
#endregion
#region
/// <summary>
/// 关闭窗口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Window1_Close(object sender, WindowCloseEventArgs e)
{
if (!string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
{
GetValue();
}
else
{
ShowNotify("请选择月份", MessageBoxIcon.Warning);
}
}
#endregion
#region
/// 导出按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOut_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
{
Model.Project_Installation installation = BLL.Project_InstallationService.GetProjectInstallationByProjectId(this.CurrUser.LoginProjectId);
if (installation != null && !string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
{
string id = installation.InstallationId;
string date = this.txtMonths.Text.Trim() + "-01";
string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," +
"ThisRealCost as '本月已完工作实际费用-ACWP',ThisPlanCost as '本月已完工作预算费用-BCWP',ThisPlanValue as '本月计划工作预算费用-BCWS',TotalPlanValue as '累计计划工作预算费用-BCWS',TotalRealCost as '累计已完工作实际费用-ACWP',TotalPlanCost as '累计已完工作预算费用-BCWP' " +
"from dbo.View_WBS_CostControlParentDetail as t where ParentId=@Id and t.Months<=@Months order by t.Months";
//string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01";
SqlParameter[] parameter = new SqlParameter[]
{
new SqlParameter("@Id",id),
new SqlParameter("@Months",date),
};
DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
if (dt.Rows.Count > 0)
{
string rootPath = Server.MapPath("~/");
string initTemplatePath = string.Empty;
string uploadfilepath = string.Empty;
string newUrl = string.Empty;
string filePath = string.Empty;
Model.SGGLDB db = Funs.DB;
initTemplatePath = Const.JDReportTemplateUrl;
uploadfilepath = rootPath + initTemplatePath;
newUrl = uploadfilepath.Replace(".docx", "(" + this.txtMonths.Text.Trim() + ")" + ".docx");
if (File.Exists(newUrl))
{
File.Delete(newUrl);
}
File.Copy(uploadfilepath, newUrl);
//更新书签内容
Document doc = new Aspose.Words.Document(newUrl);
DocumentBuilder builder = new DocumentBuilder(doc);
string projectName = string.Empty;
var project = ProjectService.GetProjectByProjectId(this.CurrUser.LoginProjectId);
if (project != null)
{
projectName = project.ProjectName;
}
Bookmark bookmarkProjectName = doc.Range.Bookmarks["ProjectName"];
if (bookmarkProjectName != null)
{
bookmarkProjectName.Text = projectName;
}
Bookmark bookmarkMonths = doc.Range.Bookmarks["Months"];
if (bookmarkMonths != null)
{
string[] strs = this.txtMonths.Text.Trim().Split('-');
bookmarkMonths.Text = strs[0] + "年" + strs[1] + "月";
}
//插入图表
builder.MoveToBookmark("Chart");
Shape shape = builder.InsertChart(ChartType.Line, 432, 252);
Chart chart = shape.Chart;
chart.Title.Text = "赢得值曲线";
ChartSeriesCollection seriesColl = chart.Series;
seriesColl.Clear();
string[] categories = new string[dt.Rows.Count];
double[] d1 = new double[dt.Rows.Count];
double[] d2 = new double[dt.Rows.Count];
double[] d3 = new double[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
categories[i] = dt.Rows[i]["月份"].ToString();
d1[i] = Convert.ToDouble(dt.Rows[i]["累计已完工作实际费用-ACWP"].ToString()) / 10000;
d2[i] = Convert.ToDouble(dt.Rows[i]["累计已完工作预算费用-BCWP"].ToString()) / 10000;
d3[i] = Convert.ToDouble(dt.Rows[i]["累计计划工作预算费用-BCWS"].ToString()) / 10000;
}
seriesColl.Add("累计已完工作实际费用-ACWP", categories, d1);
seriesColl.Add("累计已完工作预算费用-BCWP", categories, d2);
seriesColl.Add("累计计划工作预算费用-BCWS", categories, d3);
decimal BCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作预算费用-BCWP"].ToString());
decimal BCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计计划工作预算费用-BCWS"].ToString());
decimal ACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作实际费用-ACWP"].ToString());
decimal mBCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作预算费用-BCWP"].ToString());
decimal mBCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月计划工作预算费用-BCWS"].ToString());
decimal mACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作实际费用-ACWP"].ToString());
decimal CV = BCWP / 10000 - ACWP / 10000;
decimal SV = BCWP / 10000 - BCWS / 10000;
decimal CPI = 0;
if (ACWP > 0)
{
CPI = BCWP / ACWP;
}
decimal SPI = 0;
if (BCWS > 0)
{
SPI = BCWP / BCWS;
}
decimal mCV = mBCWP / 10000 - mACWP / 10000;
decimal mSV = mBCWP / 10000 - mBCWS / 10000;
decimal mCPI = 0;
if (mACWP > 0)
{
mCPI = mBCWP / mACWP;
}
decimal mSPI = 0;
if (mBCWS > 0)
{
mSPI = mBCWP / mBCWS;
}
#region
//项目总体施工进度情况
builder.MoveToBookmark("Form2");
builder.StartTable();
builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.Bold = false;
builder.RowFormat.Height = 20;
builder.Font.Size = 10;
//序号
//builder.InsertCell();
//builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
//builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
//builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
//builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
//builder.CellFormat.Width = 30;
//builder.Write("序号");
//赢得值参数(单位:万元)
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 240;
builder.Write("赢得值参数(单位:万元)");
//赢得值评价指标
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 320;
builder.Write("赢得值评价指标");
builder.EndRow();
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("BCWP");
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("BCWS");
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("ACWP");
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("CV");
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("SV");
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("CPI");
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("SPI");
builder.EndRow();
////序号
//builder.InsertCell();
//builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
//builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
//builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
//builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
//builder.CellFormat.Width = 30;
//builder.Write(h.ToString());
//问题内容
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write((BCWP / 10000).ToString("0.####"));
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write((BCWS / 10000).ToString("0.####"));
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write((ACWP / 10000).ToString("0.####"));
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write(CV.ToString("0.####"));
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write(SV.ToString("0.####"));
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write(CPI.ToString("0.####"));
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write(SPI.ToString("0.####"));
builder.EndRow();
#endregion
#region
//本月施工进度情况
builder.MoveToBookmark("Form3");
builder.StartTable();
builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.Bold = false;
builder.RowFormat.Height = 20;
builder.Font.Size = 10;
//序号
//builder.InsertCell();
//builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
//builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
//builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
//builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
//builder.CellFormat.Width = 30;
//builder.Write("序号");
//赢得值参数(单位:万元)
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 240;
builder.Write("赢得值参数(单位:万元)");
//赢得值评价指标
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 320;
builder.Write("赢得值评价指标");
builder.EndRow();
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("BCWP");
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("BCWS");
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("ACWP");
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("CV");
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("SV");
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("CPI");
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write("SPI");
builder.EndRow();
//问题内容
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write((mBCWP / 10000).ToString("0.####"));
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write((mBCWS / 10000).ToString("0.####"));
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write((mACWP / 10000).ToString("0.####"));
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write(mCV.ToString("0.####"));
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write(mSV.ToString("0.####"));
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write(mCPI.ToString("0.####"));
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 80;
builder.Write(mSPI.ToString("0.####"));
builder.EndRow();
#endregion
#region
//专业和分部工程工程施工进度情况
builder.MoveToBookmark("Form4");
builder.StartTable();
builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.Bold = false;
builder.RowFormat.Height = 20;
builder.Font.Size = 10;
//序号
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 30;
builder.Write("序号");
//专业
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("专业");
//分部工程
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 60;
builder.Write("分部工程");
//本月赢得值参数(单位:万元)
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 150;
builder.Write("本月赢得值参数(单位:万元)");
//本月赢得值评价指标
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 200;
builder.Write("本月赢得值评价指标");
builder.EndRow();
//序号
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 30;
builder.Write("序号");
//专业
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("专业");
//分部工程
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 60;
builder.Write("分部工程");
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("BCWP");
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("BCWS");
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("ACWP");
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("CV");
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("SV");
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("CPI");
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("SPI");
builder.EndRow();
var cnProfessionInits = from x in db.WBS_CnProfessionInit select x;
var cnProfessions = from x in db.WBS_CnProfession where x.ProjectId == this.CurrUser.LoginProjectId select x;
var unitProjectInits = from x in db.Wbs_UnitProjectInit select x;
var unitProjects = from x in db.Wbs_UnitProject where x.ProjectId == this.CurrUser.LoginProjectId select x;
var details = from x in db.View_WBS_CostControlParentDetail
where x.Months == Funs.GetNewDateTime(date)
select x;
decimal cnACWP, cnBCWP, cnBCWS, cnmACWP, cnmBCWP, cnmBCWS, cnCV, cnSV, cnCPI, cnSPI, cnmCV, cnmSV, cnmCPI, cnmSPI,
unACWP, unBCWP, unBCWS, unmACWP, unmBCWP, unmBCWS, unCV, unSV, unCPI, unSPI, unmCV, unmSV, unmCPI, unmSPI;
int a = 1, b = 1;
foreach (var cn in cnProfessionInits)
{
cnmACWP = 0;
cnmBCWP = 0;
cnmBCWS = 0;
cnmCV = 0;
cnmSV = 0;
cnmCPI = 0;
cnmSPI = 0;
//序号
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 30;
builder.Write(a.ToString());
//专业
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cn.CnProfessionName);
//分部工程
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 60;
builder.Write(string.Empty);
var cnDetails = (from x in details
join y in cnProfessions on x.ParentId equals y.CnProfessionId
where y.OldId == cn.CnProfessionId
select x).ToList();
cnmACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
cnmBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
cnmBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
cnmCV = cnmBCWP - cnmACWP;
cnmSV = cnmBCWP - cnmBCWS;
if (cnmACWP > 0)
{
cnmCPI = cnmBCWP / cnmACWP;
}
if (cnmBCWS > 0)
{
cnmSPI = cnmBCWP / cnmBCWS;
}
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnmBCWP.ToString("0.####"));
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnmBCWS.ToString("0.####"));
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnmACWP.ToString("0.####"));
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnmCV.ToString("0.####"));
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnmSV.ToString("0.####"));
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnmCPI.ToString("0.####"));
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnmSPI.ToString("0.####"));
builder.EndRow();
b = 1;
var unLists = (from x in unitProjectInits where x.CnProfessionId == cn.CnProfessionId orderby x.SortIndex select x).ToList();
foreach (var un in unLists)
{
unmACWP = 0;
unmBCWP = 0;
unmBCWS = 0;
unmCV = 0;
unmSV = 0;
unmCPI = 0;
unmSPI = 0;
//序号
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 30;
builder.Write(a.ToString() + "." + b.ToString());
//专业
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(string.Empty);
//分部工程
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 60;
builder.Write(un.UnitProjectName);
var unDetails = from x in details
join y in unitProjects on x.ParentId equals y.UnitProjectId
where y.UnitProjectCode == un.UnitProjectCode
select x;
unmACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
unmBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
unmBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
unmCV = unmBCWP - unmACWP;
unmSV = unmBCWP - unmBCWS;
if (unmACWP > 0)
{
unmCPI = unmBCWP / unmACWP;
}
if (unmBCWS > 0)
{
unmSPI = unmBCWP / unmBCWS;
}
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unmBCWP.ToString("0.####"));
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unmBCWS.ToString("0.####"));
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unmACWP.ToString("0.####"));
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unmCV.ToString("0.####"));
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unmSV.ToString("0.####"));
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unmCPI.ToString("0.####"));
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unmSPI.ToString("0.####"));
builder.EndRow();
b++;
}
a++;
}
builder.MoveToBookmark("Form42");
builder.StartTable();
builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.Bold = false;
builder.RowFormat.Height = 20;
builder.Font.Size = 10;
//序号
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 30;
builder.Write("序号");
//专业
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("专业");
//分部工程
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 60;
builder.Write("分部工程");
//累计赢得值参数(单位:万元)
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 150;
builder.Write("累计赢得值参数(单位:万元)");
//累计赢得值评价指标
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 200;
builder.Write("累计赢得值评价指标");
builder.EndRow();
//序号
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 30;
builder.Write("序号");
//专业
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("专业");
//分部工程
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 60;
builder.Write("分部工程");
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("BCWP");
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("BCWS");
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("ACWP");
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("CV");
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("SV");
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("CPI");
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write("SPI");
builder.EndRow();
a = 1;
b = 1;
foreach (var cn in cnProfessionInits)
{
cnACWP = 0;
cnBCWP = 0;
cnBCWS = 0;
cnCV = 0;
cnSV = 0;
cnCPI = 0;
cnSPI = 0;
//序号
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 30;
builder.Write(a.ToString());
//专业
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cn.CnProfessionName);
//分部工程
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 60;
builder.Write(string.Empty);
var cnDetails = (from x in details
join y in cnProfessions on x.ParentId equals y.CnProfessionId
where y.OldId == cn.CnProfessionId
select x).ToList();
cnmACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
cnmBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
cnmBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
cnmCV = cnmBCWP - cnmACWP;
cnmSV = cnmBCWP - cnmBCWS;
if (cnmACWP > 0)
{
cnmCPI = cnmBCWP / cnmACWP;
}
if (cnmBCWS > 0)
{
cnmSPI = cnmBCWP / cnmBCWS;
}
cnACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
cnBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
cnBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
cnCV = cnBCWP - cnACWP;
cnSV = cnBCWP - cnBCWS;
if (cnACWP > 0)
{
cnCPI = cnBCWP / cnACWP;
}
if (cnBCWS > 0)
{
cnSPI = cnBCWP / cnBCWS;
}
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnBCWP.ToString("0.####"));
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnBCWS.ToString("0.####"));
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnACWP.ToString("0.####"));
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnCV.ToString("0.####"));
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnSV.ToString("0.####"));
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnCPI.ToString("0.####"));
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(cnSPI.ToString("0.####"));
builder.EndRow();
b = 1;
var unLists = (from x in unitProjectInits where x.CnProfessionId == cn.CnProfessionId orderby x.SortIndex select x).ToList();
foreach (var un in unLists)
{
unACWP = 0;
unBCWP = 0;
unBCWS = 0;
unCV = 0;
unSV = 0;
unCPI = 0;
unSPI = 0;
//序号
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 30;
builder.Write(a.ToString() + "." + b.ToString());
//专业
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(string.Empty);
//分部工程
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 60;
builder.Write(un.UnitProjectName);
var unDetails = from x in details
join y in unitProjects on x.ParentId equals y.UnitProjectId
where y.UnitProjectCode == un.UnitProjectCode
select x;
unACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
unBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
unBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
unCV = unBCWP - unACWP;
unSV = unBCWP - unBCWS;
if (unACWP > 0)
{
unCPI = unBCWP / unACWP;
}
if (unBCWS > 0)
{
unSPI = unBCWP / unBCWS;
}
//BCWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unBCWP.ToString("0.####"));
//BCWS
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unBCWS.ToString("0.####"));
//ACWP
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unACWP.ToString("0.####"));
//CV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unCV.ToString("0.####"));
//SV
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unSV.ToString("0.####"));
//CPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unCPI.ToString("0.####"));
//SPI
builder.InsertCell();
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
builder.CellFormat.Width = 50;
builder.Write(unSPI.ToString("0.####"));
builder.EndRow();
b++;
}
a++;
}
#endregion
doc.Save(newUrl);
string fileName = Path.GetFileName(newUrl);
FileInfo info = new FileInfo(newUrl);
long fileSize = info.Length;
Response.Clear();
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length", fileSize.ToString());
Response.TransmitFile(newUrl, 0, fileSize);
Response.Flush();
Response.Close();
File.Delete(newUrl);
}
else
{
ShowNotify("没有数据,无法导出!", MessageBoxIcon.Warning);
}
}
}
else
{
ShowNotify("请选择月份!", MessageBoxIcon.Warning);
}
}
#endregion
#region excel按钮
protected void btnOutExcel_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
{
Model.Project_Installation installation = BLL.Project_InstallationService.GetProjectInstallationByProjectId(this.CurrUser.LoginProjectId);
if (installation != null && !string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
{
string id = installation.InstallationId;
string date = this.txtMonths.Text.Trim() + "-01";
string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," +
"ThisRealCost as '本月已完工作实际费用-ACWP',ThisPlanCost as '本月已完工作预算费用-BCWP',ThisPlanValue as '本月计划工作预算费用-BCWS',TotalPlanValue as '累计计划工作预算费用-BCWS',TotalRealCost as '累计已完工作实际费用-ACWP',TotalPlanCost as '累计已完工作预算费用-BCWP' " +
"from dbo.View_WBS_CostControlParentDetail as t where ParentId=@Id and t.Months<=@Months order by t.Months";
//string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01";
SqlParameter[] parameter = new SqlParameter[]
{
new SqlParameter("@Id",id),
new SqlParameter("@Months",date),
};
DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
if (dt.Rows.Count > 0)
{
try
{
decimal BCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作预算费用-BCWP"].ToString());
decimal BCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计计划工作预算费用-BCWS"].ToString());
decimal ACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作实际费用-ACWP"].ToString());
decimal mBCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作预算费用-BCWP"].ToString());
decimal mBCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月计划工作预算费用-BCWS"].ToString());
decimal mACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作实际费用-ACWP"].ToString());
decimal CV = BCWP / 10000 - ACWP / 10000;
decimal SV = BCWP / 10000 - BCWS / 10000;
decimal CPI = 0;
if (ACWP > 0)
{
CPI = BCWP / ACWP;
}
decimal SPI = 0;
if (BCWS > 0)
{
SPI = BCWP / BCWS;
}
decimal mCV = mBCWP / 10000 - mACWP / 10000;
decimal mSV = mBCWP / 10000 - mBCWS / 10000;
decimal mCPI = 0;
if (mACWP > 0)
{
mCPI = mBCWP / mACWP;
}
decimal mSPI = 0;
if (mBCWS > 0)
{
mSPI = mBCWP / mBCWS;
}
string rootPath = Server.MapPath("~/");
string initTemplatePath = string.Empty;
string uploadfilepath = string.Empty;
string newUrl = string.Empty;
string filePath = string.Empty;
initTemplatePath = Const.JDreportReportTemplateUrl;
uploadfilepath = rootPath + initTemplatePath;
newUrl = uploadfilepath.Replace(".xls", "(" + this.txtMonths.Text.Trim() + ")" + ".xls");
File.Copy(uploadfilepath, newUrl);
// 第一步:读取文件流
NPOI.SS.UserModel.IWorkbook workbook;
using (FileStream stream = new FileStream(newUrl, FileMode.Open, FileAccess.Read))
{
workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(stream);
}
// 创建单元格样式
NPOI.SS.UserModel.ICellStyle cellStyle0 = workbook.CreateCellStyle();
cellStyle0.BorderTop = NPOI.SS.UserModel.BorderStyle.None;
cellStyle0.BorderRight = NPOI.SS.UserModel.BorderStyle.None;
cellStyle0.BorderBottom = NPOI.SS.UserModel.BorderStyle.None;
cellStyle0.BorderLeft = NPOI.SS.UserModel.BorderStyle.None;
cellStyle0.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
cellStyle0.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
var font = workbook.CreateFont();
font.FontHeightInPoints = 12;
font.IsBold = true;
//font.FontHeightInPoints = (short)8.5;字号为小数时要转为short
cellStyle0.SetFont(font);
// 第二步:创建新数据行
NPOI.SS.UserModel.ISheet sheet = workbook.GetSheet("Sheet1");
NPOI.SS.UserModel.IRow row1 = sheet.CreateRow(1);
NPOI.SS.UserModel.ICell cell2;
// 添加测试数据
cell2 = row1.CreateCell(14);
cell2.CellStyle = cellStyle0;
cell2.SetCellValue("123");
var font2 = workbook.CreateFont();
font2.FontHeightInPoints = 10;
// 创建单元格样式
NPOI.SS.UserModel.ICellStyle cellStyle1 = workbook.CreateCellStyle();
cellStyle1.BorderTop = NPOI.SS.UserModel.BorderStyle.None;
cellStyle1.BorderRight = NPOI.SS.UserModel.BorderStyle.None;
cellStyle1.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle1.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle1.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
cellStyle1.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
var font3 = workbook.CreateFont();
font3.FontHeightInPoints = 14;
cellStyle1.SetFont(font3);
NPOI.SS.UserModel.ICellStyle cellStyle2 = workbook.CreateCellStyle();
cellStyle2.BorderTop = NPOI.SS.UserModel.BorderStyle.None;
cellStyle2.BorderRight = NPOI.SS.UserModel.BorderStyle.None;
cellStyle2.BorderBottom = NPOI.SS.UserModel.BorderStyle.None;
cellStyle2.BorderLeft = NPOI.SS.UserModel.BorderStyle.None;
cellStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
cellStyle2.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
cellStyle2.SetFont(font3);
int rowCount = 1;
#region 线
NPOI.SS.UserModel.IRow row = sheet.CreateRow(rowCount);
NPOI.SS.UserModel.ICell cell;
cell = row.CreateCell(0);
cell.CellStyle = cellStyle2;
cell.SetCellValue("一、项目赢得值曲线");
CellRangeAddress region = new CellRangeAddress(rowCount, rowCount, 0, 16);
sheet.AddMergedRegion(region);
cell = row.CreateCell(38);
cell.CellStyle = cellStyle1;
cell.SetCellValue("月份");
cell = row.CreateCell(39);
cell.CellStyle = cellStyle1;
cell.SetCellValue("累计已完工作实际费用-ACWP");
cell = row.CreateCell(40);
cell.CellStyle = cellStyle1;
cell.SetCellValue("累计已完工作预算费用-BCWP");
cell = row.CreateCell(41);
cell.CellStyle = cellStyle1;
cell.SetCellValue("累计计划工作预算费用-BCWS");
rowCount += 1;
for (int i = 0; i < dt.Rows.Count; i++)
{
//获取当前行row = sheet.Row(nowRowNum);
row = sheet.CreateRow(rowCount);
//给行的单元格填充数据
row.CreateCell(38).SetCellValue(dt.Rows[i]["月份"].ToString());
row.CreateCell(39).SetCellValue(Convert.ToDouble(dt.Rows[i]["累计已完工作实际费用-ACWP"].ToString()) / 10000);
row.CreateCell(40).SetCellValue(Convert.ToDouble(dt.Rows[i]["累计已完工作预算费用-BCWP"].ToString()) / 10000);
row.CreateCell(41).SetCellValue(Convert.ToDouble(dt.Rows[i]["累计计划工作预算费用-BCWS"].ToString()) / 10000);
rowCount++;
}
rowCount = 29;
#endregion
#region
//项目总体施工进度情况
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle1;
cell.SetCellValue("二、项目总体施工进度情况");
region = new CellRangeAddress(rowCount, rowCount, 0, 6);
sheet.AddMergedRegion(region);
rowCount += 1;
// 创建单元格样式
NPOI.SS.UserModel.ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
cellStyle.SetFont(font2);
//赢得值参数(单位:万元)
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue("赢得值参数(单位:万元)");
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
region = new CellRangeAddress(rowCount, rowCount, 0, 2);
sheet.AddMergedRegion(region);
//赢得值评价指标
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("赢得值评价指标");
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
region = new CellRangeAddress(rowCount, rowCount, 3, 6);
sheet.AddMergedRegion(region);
rowCount += 1;
//BCWP
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue("BCWP");
//BCWS
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("BCWS");
//ACWP
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("ACWP");
//CV
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("CV");
//SV
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("SV");
//CPI
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("CPI");
//SPI
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("SPI");
//数值
//BCWP
rowCount += 1;
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue((BCWP / 10000).ToString("0.####"));
//BCWS
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue((BCWS / 10000).ToString("0.####"));
//ACWP
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue((ACWP / 10000).ToString("0.####"));
//CV
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue(CV.ToString("0.####"));
//SV
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue(SV.ToString("0.####"));
//CPI
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(CPI.ToString("0.####"));
//SPI
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(SPI.ToString("0.####"));
rowCount += 2;
#endregion
#region
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle1;
cell.SetCellValue("三、本月施工进度情况");
cell = row.CreateCell(1);
cell.CellStyle = cellStyle1;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle1;
cell.SetCellValue("");
cell = row.CreateCell(3);
cell.CellStyle = cellStyle1;
cell.SetCellValue("");
cell = row.CreateCell(4);
cell.CellStyle = cellStyle1;
cell.SetCellValue("");
cell = row.CreateCell(5);
cell.CellStyle = cellStyle1;
cell.SetCellValue("");
cell = row.CreateCell(6);
cell.CellStyle = cellStyle1;
cell.SetCellValue("");
region = new CellRangeAddress(rowCount, rowCount, 0, 6);
sheet.AddMergedRegion(region);
rowCount += 1;
//赢得值参数(单位:万元)
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue("赢得值参数(单位:万元)");
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
region = new CellRangeAddress(rowCount, rowCount, 0, 2);
sheet.AddMergedRegion(region);
//赢得值评价指标
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("赢得值评价指标");
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
region = new CellRangeAddress(rowCount, rowCount, 3, 6);
sheet.AddMergedRegion(region);
rowCount += 1;
//BCWP
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue("BCWP");
//BCWS
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("BCWS");
//ACWP
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("ACWP");
//CV
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("CV");
//SV
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("SV");
//CPI
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("CPI");
//SPI
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("SPI");
//数值
//BCWP
rowCount += 1;
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue((mBCWP / 10000).ToString("0.####"));
//BCWS
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue((mBCWS / 10000).ToString("0.####"));
//ACWP
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue((mACWP / 10000).ToString("0.####"));
//CV
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue(mCV.ToString("0.####"));
//SV
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue(mSV.ToString("0.####"));
//CPI
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(mCPI.ToString("0.####"));
//SPI
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(mSPI.ToString("0.####"));
rowCount += 2;
#endregion
#region
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle1;
cell.SetCellValue("四、专业和分部工程工程施工进度情况");
region = new CellRangeAddress(rowCount, rowCount, 0, 17);
sheet.AddMergedRegion(region);
rowCount += 1;
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue("序号");
// 合并单元格,参数依次为起始行,结束行,起始列,结束列 索引0开始
sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount + 1, 0, 0));
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("装置");
// 合并单元格,参数依次为起始行,结束行,起始列,结束列 索引0开始
sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount + 1, 1, 1));
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("专业");
// 合并单元格,参数依次为起始行,结束行,起始列,结束列 索引0开始
sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount + 1, 2, 2));
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("分部工程");
// 合并单元格,参数依次为起始行,结束行,起始列,结束列 索引0开始
sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount + 1, 3, 3));
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("本月赢得值参数(单位:万元)");
// 合并单元格,参数依次为起始行,结束行,起始列,结束列 索引0开始
sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount, 4, 6));
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("本月赢得值评价指标");
// 合并单元格,参数依次为起始行,结束行,起始列,结束列 索引0开始
sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount, 7, 10));
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(11);
cell.CellStyle = cellStyle;
cell.SetCellValue("累计赢得值参数(单位:万元)");
// 合并单元格,参数依次为起始行,结束行,起始列,结束列 索引0开始
sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount, 11, 13));
cell = row.CreateCell(12);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(13);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(14);
cell.CellStyle = cellStyle;
cell.SetCellValue("累计赢得值评价指标");
// 合并单元格,参数依次为起始行,结束行,起始列,结束列 索引0开始
sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount, 14, 17));
cell = row.CreateCell(15);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(16);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(17);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
rowCount += 1;
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("BCWP");
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("BCWS");
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("ACWP");
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("CV");
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("SV");
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("CPI");
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("SPI");
cell = row.CreateCell(11);
cell.CellStyle = cellStyle;
cell.SetCellValue("BCWP");
cell = row.CreateCell(12);
cell.CellStyle = cellStyle;
cell.SetCellValue("BCWS");
cell = row.CreateCell(13);
cell.CellStyle = cellStyle;
cell.SetCellValue("ACWP");
cell = row.CreateCell(14);
cell.CellStyle = cellStyle;
cell.SetCellValue("CV");
cell = row.CreateCell(15);
cell.CellStyle = cellStyle;
cell.SetCellValue("SV");
cell = row.CreateCell(16);
cell.CellStyle = cellStyle;
cell.SetCellValue("CPI");
cell = row.CreateCell(17);
cell.CellStyle = cellStyle;
cell.SetCellValue("SPI");
//导出数据
Model.SGGLDB db = Funs.DB;
var cnProfessions = from x in db.WBS_CnProfession where x.ProjectId == this.CurrUser.LoginProjectId && x.IsApprove == true select x;
var installationIds = cnProfessions.Select(x => x.InstallationId).Distinct().ToList();
var installations = from x in db.Project_Installation where x.ProjectId == this.CurrUser.LoginProjectId && installationIds.Contains(x.InstallationId) select x;
var unitProjects = from x in db.Wbs_UnitProject where x.ProjectId == this.CurrUser.LoginProjectId && x.IsApprove == true select x;
var details = from x in db.View_WBS_CostControlParentDetail
where x.Months == Funs.GetNewDateTime(date)
select x;
decimal cnACWP, cnBCWP, cnBCWS, cnmACWP, cnmBCWP, cnmBCWS, cnCV, cnSV, cnCPI, cnSPI, cnmCV, cnmSV, cnmCPI, cnmSPI,
unACWP, unBCWP, unBCWS, unmACWP, unmBCWP, unmBCWS, unCV, unSV, unCPI, unSPI, unmCV, unmSV, unmCPI, unmSPI,
inACWP, inBCWP, inBCWS, inmACWP, inmBCWP, inmBCWS, inCV, inSV, inCPI, inSPI, inmCV, inmSV, inmCPI, inmSPI;
int a = 1, b = 1, c = 1;
foreach (var item in installations)
{
rowCount += 1;
inACWP = 0;
inBCWP = 0;
inBCWS = 0;
inmACWP = 0;
inmBCWP = 0;
inmBCWS = 0;
inCV = 0;
inSV = 0;
inCPI = 0;
inSPI = 0;
inmCV = 0;
inmSV = 0;
inmCPI = 0;
inmSPI = 0;
//序号
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(c.ToString());
//装置
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue(item.InstallationName);
//专业
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue(string.Empty);
//分部工程
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue(string.Empty);
var inDetails = (from x in details
where x.ParentId == item.InstallationId
select x).ToList();
inmACWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
inmBCWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
inmBCWS = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
inmCV = inmBCWP - inmACWP;
inmSV = inmBCWP - inmBCWS;
if (inmACWP > 0)
{
inmCPI = inmBCWP / inmACWP;
}
if (inmBCWS > 0)
{
inmSPI = inmBCWP / inmBCWS;
}
//BCWP
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue(inmBCWP.ToString("0.####"));
//BCWS
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(inmBCWS.ToString("0.####"));
//ACWP
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(inmACWP.ToString("0.####"));
//CV
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue(inmCV.ToString("0.####"));
//SV
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue(inmSV.ToString("0.####"));
//CPI
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue(inmCPI.ToString("0.####"));
//SPI
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue(inmSPI.ToString("0.####"));
inACWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
inBCWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
inBCWS = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
inCV = inBCWP - inACWP;
inSV = inBCWP - inBCWS;
if (inACWP > 0)
{
inCPI = inBCWP / inACWP;
}
if (inBCWS > 0)
{
inSPI = inBCWP / inBCWS;
}
//BCWP
cell = row.CreateCell(11);
cell.CellStyle = cellStyle;
cell.SetCellValue(inBCWP.ToString("0.####"));
//BCWS
cell = row.CreateCell(12);
cell.CellStyle = cellStyle;
cell.SetCellValue(inBCWS.ToString("0.####"));
//ACWP
cell = row.CreateCell(13);
cell.CellStyle = cellStyle;
cell.SetCellValue(inACWP.ToString("0.####"));
//CV
cell = row.CreateCell(14);
cell.CellStyle = cellStyle;
cell.SetCellValue(inCV.ToString("0.####"));
//SV
cell = row.CreateCell(15);
cell.CellStyle = cellStyle;
cell.SetCellValue(inSV.ToString("0.####"));
//CPI
cell = row.CreateCell(16);
cell.CellStyle = cellStyle;
cell.SetCellValue(inCPI.ToString("0.####"));
//SPI
cell = row.CreateCell(17);
cell.CellStyle = cellStyle;
cell.SetCellValue(inSPI.ToString("0.####"));
a = 1;
var icnProfessions = cnProfessions.Where(x => x.InstallationId == item.InstallationId);
foreach (var cn in icnProfessions)
{
rowCount += 1;
cnACWP = 0;
cnBCWP = 0;
cnBCWS = 0;
cnmACWP = 0;
cnmBCWP = 0;
cnmBCWS = 0;
cnCV = 0;
cnSV = 0;
cnCPI = 0;
cnSPI = 0;
cnmCV = 0;
cnmSV = 0;
cnmCPI = 0;
cnmSPI = 0;
//序号
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(c.ToString() + "." + a.ToString());
//装置
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue(string.Empty);
//专业
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue(cn.CnProfessionName);
//分部工程
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue(string.Empty);
var cnDetails = (from x in details
where x.ParentId == cn.CnProfessionId
select x).ToList();
cnmACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
cnmBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
cnmBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
cnmCV = cnmBCWP - cnmACWP;
cnmSV = cnmBCWP - cnmBCWS;
if (cnmACWP > 0)
{
cnmCPI = cnmBCWP / cnmACWP;
}
if (cnmBCWS > 0)
{
cnmSPI = cnmBCWP / cnmBCWS;
}
//BCWP
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnmBCWP.ToString("0.####"));
//BCWS
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnmBCWS.ToString("0.####"));
//ACWP
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnmACWP.ToString("0.####"));
//CV
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnmCV.ToString("0.####"));
//SV
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnmSV.ToString("0.####"));
//CPI
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnmCPI.ToString("0.####"));
//SPI
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnmSPI.ToString("0.####"));
cnACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
cnBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
cnBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
cnCV = cnBCWP - cnACWP;
cnSV = cnBCWP - cnBCWS;
if (cnACWP > 0)
{
cnCPI = cnBCWP / cnACWP;
}
if (cnBCWS > 0)
{
cnSPI = cnBCWP / cnBCWS;
}
//BCWP
cell = row.CreateCell(11);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnBCWP.ToString("0.####"));
//BCWS
cell = row.CreateCell(12);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnBCWS.ToString("0.####"));
//ACWP
cell = row.CreateCell(13);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnACWP.ToString("0.####"));
//CV
cell = row.CreateCell(14);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnCV.ToString("0.####"));
//SV
cell = row.CreateCell(15);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnSV.ToString("0.####"));
//CPI
cell = row.CreateCell(16);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnCPI.ToString("0.####"));
//SPI
cell = row.CreateCell(17);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnSPI.ToString("0.####"));
b = 1;
var unLists = from x in unitProjects where x.CnProfessionId == cn.CnProfessionId orderby x.SortIndex select x;
foreach (var un in unLists)
{
rowCount += 1;
unACWP = 0;
unBCWP = 0;
unBCWS = 0;
unmACWP = 0;
unmBCWP = 0;
unmBCWS = 0;
unCV = 0;
unSV = 0;
unCPI = 0;
unSPI = 0;
unmCV = 0;
unmSV = 0;
unmCPI = 0;
unmSPI = 0;
//序号
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(c.ToString() + "." + a.ToString() + "." + b.ToString());
//装置
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue(string.Empty);
//专业
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue(string.Empty);
//分部工程
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue(un.UnitProjectName);
var unDetails = from x in details
where x.ParentId == un.UnitProjectId
select x;
unmACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
unmBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
unmBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
unmCV = unmBCWP - unmACWP;
unmSV = unmBCWP - unmBCWS;
if (unmACWP > 0)
{
unmCPI = unmBCWP / unmACWP;
}
if (unmBCWS > 0)
{
unmSPI = unmBCWP / unmBCWS;
}
//BCWP
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue(unmBCWP.ToString("0.####"));
//BCWS
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(unmBCWS.ToString("0.####"));
//ACWP
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(unmACWP.ToString("0.####"));
//CV
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue(unmCV.ToString("0.####"));
//SV
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue(unmSV.ToString("0.####"));
//CPI
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue(unmCPI.ToString("0.####"));
//SPI
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue(unmSPI.ToString("0.####"));
unACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
unBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
unBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
unCV = unBCWP - unACWP;
unSV = unBCWP - unBCWS;
if (unACWP > 0)
{
unCPI = unBCWP / unACWP;
}
if (unBCWS > 0)
{
unSPI = unBCWP / unBCWS;
}
//BCWP
cell = row.CreateCell(11);
cell.CellStyle = cellStyle;
cell.SetCellValue(cnBCWP.ToString("0.####"));
//BCWS
cell = row.CreateCell(12);
cell.CellStyle = cellStyle;
cell.SetCellValue(unBCWP.ToString("0.####"));
//ACWP
cell = row.CreateCell(13);
cell.CellStyle = cellStyle;
cell.SetCellValue(unACWP.ToString("0.####"));
//CV
cell = row.CreateCell(14);
cell.CellStyle = cellStyle;
cell.SetCellValue(unCV.ToString("0.####"));
//SV
cell = row.CreateCell(15);
cell.CellStyle = cellStyle;
cell.SetCellValue(unSV.ToString("0.####"));
//CPI
cell = row.CreateCell(16);
cell.CellStyle = cellStyle;
cell.SetCellValue(unCPI.ToString("0.####"));
//SPI
cell = row.CreateCell(17);
cell.CellStyle = cellStyle;
cell.SetCellValue(unSPI.ToString("0.####"));
b++;
}
a++;
}
c++;
}
#endregion
rowCount += 2;
#region /
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle1;
cell.SetCellValue("五、设备/材料施工进度情况");
region = new CellRangeAddress(rowCount, rowCount, 0, 10);
sheet.AddMergedRegion(region);
rowCount += 1;
//表头
row = sheet.CreateRow(rowCount);
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue("序号");
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("专业");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("设备材料大类");
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("设备材料分类");
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("单位");
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("合同工作量");
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("本月完成量");
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("累计完成量");
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("本月完成率");
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("累计完成率");
//数据
#region
var cnProfessionInits = from x in db.WBS_CnProfessionInit orderby x.SortIndex select x;
var costControls = from x in db.WBS_CostControl
join z in db.WBS_EquipmentMaterialType on x.EquipmentMaterialTypeId equals z.EquipmentMaterialTypeId
join t in db.Wbs_WbsSet on x.WbsSetId equals t.WbsSetId
where x.ProjectId == this.CurrUser.LoginProjectId
select new
{
x.Unit,
x.TotalNum,
z.EquipmentMaterialBigTypeId,
z.EquipmentMaterialTypeId,
t.InstallationId,
};
var costControlDetails = from x in db.WBS_CostControlDetail
join y in db.WBS_CostControl on x.CostControlId equals y.CostControlId
join z in db.WBS_EquipmentMaterialType on y.EquipmentMaterialTypeId equals z.EquipmentMaterialTypeId
join t in db.Wbs_WbsSet on y.WbsSetId equals t.WbsSetId
where x.Months <= Funs.GetNewDateTime(date) && y.ProjectId == this.CurrUser.LoginProjectId
orderby x.Months descending
select new
{
x.CostControlDetailId,
t.InstallationId,
y.EquipmentMaterialTypeId,
z.EquipmentMaterialBigTypeId,
z.EquipmentMaterialTypeName,
x.Months,
x.ThisNum,
};
var equipmentMaterialBigTypes = from x in db.WBS_EquipmentMaterialBigType orderby x.EquipmentMaterialBigTypeCode select x;
var equipmentMaterialTypes = from x in db.WBS_EquipmentMaterialType orderby x.EquipmentMaterialTypeCode select x;
int v = 1, w = 2, d = 1, f = 1;
foreach (var cn in cnProfessionInits)
{
rowCount += 1;
row = sheet.CreateRow(rowCount);
#region
//序号
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(v.ToString());
//专业
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue(cn.CnProfessionName);
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
#endregion
rowCount += 1;
row = sheet.CreateRow(rowCount);
#region
//序号
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(v.ToString() + ".1");
//专业
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("本专业汇总统计");
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
#endregion
d = 1;
var bigTypes = equipmentMaterialBigTypes.Where(x => x.CnProfessionId == cn.CnProfessionId).OrderBy(x => x.EquipmentMaterialBigTypeCode);
foreach (var bigType in bigTypes)
{
rowCount += 1;
row = sheet.CreateRow(rowCount);
#region
//序号
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(v.ToString() + ".1." + d.ToString());
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//设备材料大类
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue(bigType.EquipmentMaterialBigTypeName);
//设备材料分类
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
var list = costControls.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId);
if (list.Count() > 0)
{
//单位
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(list.First().Unit);
//合同工作量row5[4]
var cellValue1 = list.ToList().Sum(x => x.TotalNum ?? 0).ToString();
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue1);
//本月完成量row5[5]
var list2 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.Months == Funs.GetNewDateTime(date));
var cellValue2 = list2.ToList().Sum(x => x.ThisNum ?? 0).ToString();
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue2);
//累计完成量row5[6]
var list3 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId);
var cellValue3 = list3.ToList().Sum(x => x.ThisNum ?? 0).ToString();
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue3);
//本月完成率
var cellValue4 = "";
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
if (cellValue1 != "0" && cellValue2 != "0")
{
cellValue4 = (Funs.GetNewDecimalOrZero(cellValue2) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
}
else
{
cellValue4 = "/";
}
cell.SetCellValue(cellValue4);
//累计完成率
var cellValue5 = "";
if (cellValue1 != "0" && cellValue3 != "0")
{
cellValue5 = (Funs.GetNewDecimalOrZero(cellValue3) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
}
else
{
cellValue5 = "/";
}
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue5);
}
else
{
//单位
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//合同工作量row5[4]
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//本月完成量row5[5]
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//累计完成量row5[6]
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//本月完成率
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//累计完成率
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
}
f = 1;
var types = equipmentMaterialTypes.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId).OrderBy(x => x.EquipmentMaterialTypeCode);
foreach (var equipmentMaterialType in types)
{
rowCount += 1;
row = sheet.CreateRow(rowCount);
//序号
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(v.ToString() + ".1." + d.ToString() + "." + f.ToString());
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//设备材料大类
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//设备材料分类
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue(equipmentMaterialType.EquipmentMaterialTypeName);
var lists = costControls.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId);
if (lists.Count() > 0)
{
var cellValue1 = "";
//单位
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(lists.First().Unit);
//合同工作量row5[4]
cellValue1 = lists.ToList().Sum(x => x.TotalNum ?? 0).ToString();
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue1);
//本月完成量row5[5]
var list2s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.Months == Funs.GetNewDateTime(date));
var cellValue2 = list2s.ToList().Sum(x => x.ThisNum ?? 0).ToString();
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue2);
//累计完成量row5[6]
var list3s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId);
var cellValue3 = list3s.ToList().Sum(x => x.ThisNum ?? 0).ToString();
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue3);
//本月完成率
var cellValue4 = "";
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
if (cellValue1 != "0" && cellValue2 != "0")
{
cellValue4 = (Funs.GetNewDecimalOrZero(cellValue2) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
}
else
{
cellValue4 = "/";
}
cell.SetCellValue(cellValue4);
//累计完成率
var cellValue5 = "";
if (cellValue1 != "0" && cellValue3 != "0")
{
cellValue5 = (Funs.GetNewDecimalOrZero(cellValue3) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
}
else
{
cellValue5 = "/";
}
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue5);
}
else
{
//单位
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//合同工作量row5[4]
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//本月完成量row5[5]
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//累计完成量row5[6]
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//本月完成率
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//累计完成率
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
}
f++;
}
d++;
#endregion
}
w = 2;
foreach (var ins in installations)
{
rowCount += 1;
row = sheet.CreateRow(rowCount);
//加载本专业汇总统计以下的
#region
//序号
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(v.ToString() + "." + w.ToString());
//专业
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue(ins.InstallationName);
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
#endregion
d = 1;
var bigTypes2 = equipmentMaterialBigTypes.Where(x => x.CnProfessionId == cn.CnProfessionId).OrderBy(x => x.EquipmentMaterialBigTypeCode);
foreach (var bigType in bigTypes2)
{
rowCount += 1;
row = sheet.CreateRow(rowCount);
//设备材料大类
#region
//序号
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(v.ToString() + "." + w.ToString() + d.ToString());
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//设备材料大类
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue(bigType.EquipmentMaterialBigTypeName);
//设备材料分类
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
var list = costControls.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId);
if (list.Count() > 0)
{
//单位
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(list.First().Unit);
//合同工作量row5[4]
var cellValue1 = list.ToList().Sum(x => x.TotalNum ?? 0).ToString();
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue1);
//本月完成量row5[5]
var list2 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId && x.Months == Funs.GetNewDateTime(date));
var cellValue2 = list2.ToList().Sum(x => x.ThisNum ?? 0).ToString();
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue2);
//累计完成量row5[6]
var list3 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId);
var cellValue3 = list3.ToList().Sum(x => x.ThisNum ?? 0).ToString();
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue3);
//本月完成率
var cellValue4 = "";
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
if (cellValue1 != "0" && cellValue2 != "0")
{
cellValue4 = (Funs.GetNewDecimalOrZero(cellValue2) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
}
else
{
cellValue4 = "/";
}
cell.SetCellValue(cellValue4);
//累计完成率
var cellValue5 = "";
if (cellValue1 != "0" && cellValue3 != "0")
{
cellValue5 = (Funs.GetNewDecimalOrZero(cellValue3) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
}
else
{
cellValue5 = "/";
}
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue5);
}
else
{
//单位
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//合同工作量row5[4]
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//本月完成量row5[5]
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//累计完成量row5[6]
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//本月完成率
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//累计完成率
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
}
f = 1;
var types = equipmentMaterialTypes.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId).OrderBy(x => x.EquipmentMaterialTypeCode);
foreach (var equipmentMaterialType in types)
{
rowCount += 1;
row = sheet.CreateRow(rowCount);
//序号
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(v.ToString() + "." + w.ToString() + d.ToString() + "." + f.ToString());
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//设备材料大类
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//设备材料分类
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue(equipmentMaterialType.EquipmentMaterialTypeName);
var lists = costControls.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId);
if (lists.Count() > 0)
{
var cellValue1 = "";
//单位
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(lists.First().Unit);
//合同工作量row5[4]
cellValue1 = lists.ToList().Sum(x => x.TotalNum ?? 0).ToString();
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue1);
//本月完成量row5[5]
var list2s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId && x.Months == Funs.GetNewDateTime(date));
var cellValue2 = list2s.ToList().Sum(x => x.ThisNum ?? 0).ToString();
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue2);
//累计完成量row5[6]
var list3s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId);
var cellValue3 = list3s.ToList().Sum(x => x.ThisNum ?? 0).ToString();
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue3);
//本月完成率
var cellValue4 = "";
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
if (cellValue1 != "0" && cellValue2 != "0")
{
cellValue4 = (Funs.GetNewDecimalOrZero(cellValue2) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
}
else
{
cellValue4 = "/";
}
cell.SetCellValue(cellValue4);
//累计完成率
var cellValue5 = "";
if (cellValue1 != "0" && cellValue3 != "0")
{
cellValue5 = (Funs.GetNewDecimalOrZero(cellValue3) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
}
else
{
cellValue5 = "/";
}
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue(cellValue5);
}
else
{
//单位
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//合同工作量row5[4]
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//本月完成量row5[5]
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//累计完成量row5[6]
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//本月完成率
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
//累计完成率
cell = row.CreateCell(10);
cell.CellStyle = cellStyle;
cell.SetCellValue("");
}
f++;
}
d++;
}
w++;
#endregion
}
v++;
}
#endregion
#endregion
// 第三步:写入文件流
using (FileStream stream = new FileStream(newUrl, FileMode.Create, FileAccess.Write))
{
workbook.Write(stream);
workbook.Close();
}
string fileName = Path.GetFileName(newUrl);
FileInfo info = new FileInfo(newUrl);
long fileSize = info.Length;
Response.Clear();
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length", fileSize.ToString());
Response.TransmitFile(newUrl, 0, fileSize);
Response.Flush();
Response.Close();
File.Delete(newUrl);
}
catch (Exception ex)
{
throw ex;
}
}
else
{
ShowNotify("没有数据,无法导出!", MessageBoxIcon.Warning);
}
}
}
else
{
ShowNotify("请选择月份!", MessageBoxIcon.Warning);
}
}
#endregion
//public void AutoColumnWidth(HSSFSheet sheet, int cols)
//{
// for (int col = 0; col <= cols; col++)
// {
// sheet.AutoSizeColumn(col);//自适应宽度,但是其实还是比实际文本要宽
// int columnWidth = sheet.GetColumnWidth(col) / 256;//获取当前列宽度
// for (int rowIndex = 0; rowIndex <= sheet.LastRowNum; rowIndex++)
// {
// HSSFRow row = sheet.GetRow(rowIndex);
// if (row!=null)
// {
// HSSFCell cell = row.GetCell(col);
// if (cell!=null)
// {
// int contextLength = Encoding.UTF8.GetBytes(cell.ToString()).Length;//获取当前单元格的内容宽度
// columnWidth = columnWidth < contextLength ? contextLength : columnWidth;
// sheet.SetColumnWidth(col, columnWidth * 200);//
// }
// }
// }
// }
//}
}
}