CNCEC_SUBQHSE_WUHUAN/SGGL/FineUIPro.Web/ZHGL/Performance/PerformanceAllData.aspx.cs

634 lines
21 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.Linq;
using System.Reflection;
using System.Text;
using System.Web.UI.WebControls;
using BLL;
using Model;
using Newtonsoft.Json.Linq;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.ZHGL.Performance
{
public partial class PerformanceAllData : PageBase
{
#region
/// <summary>
/// 主键
/// </summary>
public string PerformanceGid
{
get
{
return (string)ViewState["PerformanceGid"];
}
set
{
ViewState["PerformanceGid"] = value;
}
}
public string CompileDateMonth
{
get
{
return (string)ViewState["CompileDateMonth"];
}
set
{
ViewState["CompileDateMonth"] = value;
}
}
public string CreateUser
{
get
{
return (string)ViewState["CreateUser"];
}
set
{
ViewState["CreateUser"] = value;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//根据projectid加载CQMS_Performance表中成功的user数据
BLL.PerformanceService.InitAllUserDropDownList(drpUser, true);
CreateUser = Request.QueryString["CreateUser"];
if (!string.IsNullOrEmpty(CreateUser))
{
drpUser.SelectedValue = CreateUser;
}
drpCompileDateMonth.Text = DateTime.Now.ToString();
if (drpUser.SelectedValue != BLL.Const._Null)
{
// BindGrid();
//OutputSummaryData();
}
}
}
#region
public class Grid1Model
{
public int SortId { get; set; }
/// <summary>
/// 时间
/// </summary>
public string CreateDateMonth { get; set; }
/// <summary>
/// 项目名称
/// </summary>
public string ProjectName { get; set; }
/// <summary>
/// 工程范围
/// </summary>
public string WorkRange { get; set; }
/// <summary>
/// 责任人
/// </summary>
public string HeadUserid { get; set; }
/// <summary>
/// 工作负荷
/// </summary>
public decimal? Workloads { get; set; }
/// <summary>
/// 出差天数
/// </summary>
public int? OutDay { get; set; }
public decimal? EvaScore1 { get; set; }
public decimal? EvaScore2 { get; set; }
public decimal? EvaScore3 { get; set; }
public decimal? EvaScore4 { get; set; }
public decimal? EvaScore5 { get; set; }
public decimal? EvaScore6 { get; set; }
/// <summary>
/// 总得分
/// </summary>
public decimal? SumZdf { get; set; }
}
/// <summary>
/// 加载数据
/// </summary>
private void BindGrid()
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
//根据年份和查询的人来加载
//去年12月到今年11月
var StartDate = Convert.ToDateTime((Convert.ToInt32(drpCompileDateMonth.Text) - 1).ToString() + "-12");
var EndDate = Convert.ToDateTime(drpCompileDateMonth.Text + "-11");
List<Grid1Model> listGrid1 = new List<Grid1Model>();
var Plist = db.CQMS_Performance.Where(x => x.CreateDate >= StartDate && x.CreateDate <= EndDate && x.CreateMan == drpUser.SelectedValue
&& x.States == "1")
.OrderBy(x => x.CreateDate).ToList();
var i = 1;
foreach (var item in Plist)
{
Grid1Model gmodel = new Grid1Model();
gmodel.CreateDateMonth = item.CreateDateMonth;
gmodel.ProjectName = ProjectService.GetProjectNameByProjectId(item.ProjectId);
gmodel.WorkRange = item.WorkRange;
gmodel.HeadUserid = item.HeadUserid;
gmodel.Workloads = item.Workloads;
gmodel.OutDay = item.OutDay;
//加载6个得分
var Child1List = db.CQMS_Performance_Child1.Where(x => x.PerformanceGid == item.PerformanceGid).OrderBy(x => x.SortIndex).ToList();
gmodel.EvaScore1 = Child1List[0].EvaScore;
gmodel.EvaScore2 = Child1List[1].EvaScore;
gmodel.EvaScore3 = Child1List[2].EvaScore;
gmodel.EvaScore4 = Child1List[3].EvaScore;
gmodel.EvaScore5 = Child1List[4].EvaScore;
gmodel.EvaScore6 = Child1List[5].EvaScore;
gmodel.SumZdf = gmodel.EvaScore1 + gmodel.EvaScore2 + gmodel.EvaScore3 + gmodel.EvaScore4 + gmodel.EvaScore5 + gmodel.EvaScore6;
gmodel.SortId = i;
i += 1;
listGrid1.Add(gmodel);
}
if (listGrid1.Count > 0)
{
var table = ToDataTable<Grid1Model>(listGrid1);
Grid1.DataSource = table;
Grid1.DataBind();
OutputSummaryData();
}
else
{
ShowNotify("未查询到数据。", MessageBoxIcon.Warning);
}
}
}
#endregion
#region
private void OutputSummaryData()
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
//根据年份和查询的人来加载
//去年12月到今年11月
var StartDate = Convert.ToDateTime((Convert.ToInt32(drpCompileDateMonth.Text) - 1).ToString() + "-12");
var EndDate = Convert.ToDateTime(drpCompileDateMonth.Text + "-11");
List<Grid1Model> listGrid1 = new List<Grid1Model>();
var Plist = db.CQMS_Performance.Where(x => x.CreateDate >= StartDate && x.CreateDate <= EndDate && x.CreateMan == drpUser.SelectedValue
&& x.States == "1")
.OrderBy(x => x.CreateDate).ToList();
var i = 1;
foreach (var item in Plist)
{
Grid1Model gmodel = new Grid1Model();
gmodel.CreateDateMonth = item.CreateDateMonth;
gmodel.ProjectName = ProjectService.GetProjectNameByProjectId(item.ProjectId);
gmodel.WorkRange = item.WorkRange;
gmodel.HeadUserid = item.HeadUserid;
gmodel.Workloads = item.Workloads;
gmodel.OutDay = item.OutDay;
//加载6个得分
var Child1List = db.CQMS_Performance_Child1.Where(x => x.PerformanceGid == item.PerformanceGid).OrderBy(x => x.SortIndex).ToList();
gmodel.EvaScore1 = Child1List[0].EvaScore;
gmodel.EvaScore2 = Child1List[1].EvaScore;
gmodel.EvaScore3 = Child1List[2].EvaScore;
gmodel.EvaScore4 = Child1List[3].EvaScore;
gmodel.EvaScore5 = Child1List[4].EvaScore;
gmodel.EvaScore6 = Child1List[5].EvaScore;
gmodel.SumZdf = gmodel.EvaScore1 + gmodel.EvaScore2 + gmodel.EvaScore3 + gmodel.EvaScore4 + gmodel.EvaScore5 + gmodel.EvaScore6;
gmodel.SortId = i;
i += 1;
listGrid1.Add(gmodel);
}
var table = ToDataTable<Grid1Model>(listGrid1);
double Workloads = 0.0f;
int OutDay = 0;
double SumZdf = 0.0f;
foreach (DataRow row in table.Rows)
{
var rowWorkloads = row["Workloads"].ToString();
if (rowWorkloads == "")
{
rowWorkloads = "0";
}
var rowSumZdf = row["SumZdf"].ToString();
if (rowSumZdf == "")
{
rowSumZdf = "0";
}
var rowOutDay = row["OutDay"].ToString();
if (rowOutDay == "")
{
rowOutDay = "0";
}
Workloads += Convert.ToDouble(rowWorkloads);
OutDay += Convert.ToInt32(rowOutDay);
SumZdf += Convert.ToDouble(rowSumZdf);
}
JObject summary = new JObject();
summary.Add("CreateDateMonth", "总计");
summary.Add("Workloads", Workloads.ToString("F2"));
summary.Add("OutDay", OutDay.ToString());
summary.Add("SumZdf", SumZdf.ToString("F2"));
Grid1.SummaryData = summary;
}
}
#endregion
#region list转换datatable
/// <summary>
/// Convert a List{T} to a DataTable.
/// </summary>
private DataTable ToDataTable<T>(List<T> items)
{
var tb = new DataTable(typeof(T).Name);
PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in props)
{
Type t = GetCoreType(prop.PropertyType);
tb.Columns.Add(prop.Name, t);
}
foreach (T item in items)
{
var values = new object[props.Length];
for (int i = 0; i < props.Length; i++)
{
values[i] = props[i].GetValue(item, null);
}
tb.Rows.Add(values);
}
return tb;
}
/// <summary>
/// Determine of specified type is nullable
/// </summary>
public static bool IsNullable(Type t)
{
return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));
}
/// <summary>
/// Return underlying type if type is Nullable otherwise return the type
/// </summary>
public static Type GetCoreType(Type t)
{
if (t != null && IsNullable(t))
{
if (!t.IsValueType)
{
return t;
}
else
{
return Nullable.GetUnderlyingType(t);
}
}
else
{
return t;
}
}
#endregion
protected void drpUser_SelectedIndexChanged(object sender, EventArgs e)
{
//if (drpUser.SelectedValue == BLL.Const._Null)
//{
// ShowNotify("请选择要打分的施工工程师。", MessageBoxIcon.Warning);
// return;
//}
//if (string.IsNullOrEmpty(drpCompileDateMonth.Text))
//{
// ShowNotify("请选择年份。", MessageBoxIcon.Warning);
// return;
//}
//BindGrid();
}
#region excel
#region excel
/// <summary>
/// 格式化html
/// </summary>
/// <param name="grid"></param>
/// <returns></returns>
private string GetGridTableHtml(Grid grid)
{
StringBuilder sb = new StringBuilder();
MultiHeaderTable mht = new MultiHeaderTable();
mht.ResolveMultiHeaderTable(Grid1.Columns);
sb.Append("<meta http-equiv=\"Content-Type\" content=\"application/vnd.ms-excel;charset=utf-8\"/>");
sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");
////列数
//var rowCount = "";
//var list = Funs.DB.Base_Project.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null).OrderBy(x => x.ProjectCode).ToList();
//for (int i = 0; i < list.Count; i++)
//{
// rowCount+="{}"
//}
foreach (List<object[]> rows in mht.MultiTable)
{
sb.Append("<tr>");
foreach (object[] cell in rows)
{
int rowspan = Convert.ToInt32(cell[0]);
int colspan = Convert.ToInt32(cell[1]);
GridColumn column = cell[2] as GridColumn;
sb.AppendFormat("<th{0}{1}{2}>{3}</th>",
rowspan != 1 ? " rowspan=\"" + rowspan + "\"" : "",
colspan != 1 ? " colspan=\"" + colspan + "\"" : "",
colspan != 1 ? " style=\"text-align:center;\"" : "",
column.HeaderText);
}
sb.Append("</tr>");
}
int i = 0;
foreach (GridRow row in grid.Rows)
{
sb.Append("<tr>");
string MenuC = "";
int y = 1;
foreach (GridColumn column in mht.Columns)
{
string html = row.Values[column.ColumnIndex].ToString();
sb.AppendFormat("<td>{0}</td>", html);
#endregion
y += 1;
}
i += 1;
sb.Append("</tr>");
}
sb.Append("</table>");
return sb.ToString();
}
public static string MidStrEx(string sourse, string startstr, string endstr)
{
string result = string.Empty;
int startindex, endindex;
try
{
startindex = sourse.IndexOf(startstr);
if (startindex == -1)
return result;
string tmpstr = sourse.Substring(startindex + startstr.Length);
endindex = tmpstr.IndexOf(endstr);
if (endindex == -1)
return result;
result = tmpstr.Remove(endindex);
}
catch (Exception ex)
{
}
return result;
}
#region
/// <summary>
/// 处理多表头的类
/// </summary>
public class MultiHeaderTable
{
// 包含 rowspancolspan 的多表头,方便生成 HTML 的 table 标签
public List<List<object[]>> MultiTable = new List<List<object[]>>();
// 最终渲染的列数组
public List<GridColumn> Columns = new List<GridColumn>();
public void ResolveMultiHeaderTable(GridColumnCollection columns)
{
List<object[]> row = new List<object[]>();
foreach (GridColumn column in columns)
{
object[] cell = new object[4];
cell[0] = 1; // rowspan
cell[1] = 1; // colspan
cell[2] = column;
cell[3] = null;
row.Add(cell);
}
ResolveMultiTable(row, 0);
ResolveColumns(row);
}
private void ResolveColumns(List<object[]> row)
{
foreach (object[] cell in row)
{
GroupField groupField = cell[2] as GroupField;
if (groupField != null && groupField.Columns.Count > 0)
{
List<object[]> subrow = new List<object[]>();
foreach (GridColumn column in groupField.Columns)
{
subrow.Add(new object[]
{
1,
1,
column,
groupField
});
}
ResolveColumns(subrow);
}
else
{
Columns.Add(cell[2] as GridColumn);
}
}
}
private void ResolveMultiTable(List<object[]> row, int level)
{
List<object[]> nextrow = new List<object[]>();
foreach (object[] cell in row)
{
GroupField groupField = cell[2] as GroupField;
if (groupField != null && groupField.Columns.Count > 0)
{
// 如果当前列包含子列,则更改当前列的 colspan以及增加父列向上递归的colspan
cell[1] = Convert.ToInt32(groupField.Columns.Count);
PlusColspan(level - 1, cell[3] as GridColumn, groupField.Columns.Count - 1);
foreach (GridColumn column in groupField.Columns)
{
nextrow.Add(new object[]
{
1,
1,
column,
groupField
});
}
}
}
MultiTable.Add(row);
// 如果当前下一行,则增加上一行(向上递归)中没有子列的列的 rowspan
if (nextrow.Count > 0)
{
PlusRowspan(level);
ResolveMultiTable(nextrow, level + 1);
}
}
private void PlusRowspan(int level)
{
if (level < 0)
{
return;
}
foreach (object[] cells in MultiTable[level])
{
GroupField groupField = cells[2] as GroupField;
if (groupField != null && groupField.Columns.Count > 0)
{
// ...
}
else
{
cells[0] = Convert.ToInt32(cells[0]) + 1;
}
}
PlusRowspan(level - 1);
}
private void PlusColspan(int level, GridColumn parent, int plusCount)
{
if (level < 0)
{
return;
}
foreach (object[] cells in MultiTable[level])
{
GridColumn column = cells[2] as GridColumn;
if (column == parent)
{
cells[1] = Convert.ToInt32(cells[1]) + plusCount;
PlusColspan(level - 1, cells[3] as GridColumn, plusCount);
}
}
}
}
#endregion
/// <summary>
/// 导出exccel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOut_Click(object sender, EventArgs e)
{
Response.ClearContent();
var excelDate = drpCompileDateMonth.Text + "年";
var uName = drpUser.SelectedText;
var FileName = excelDate + "施工工程师(" + uName + ")施工管理绩效数据收集";
Response.AddHeader("content-disposition", "attachment; filename=" + FileName + ".xls");
Response.ContentType = "application/vnd.ms-excel";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(GetGridTableHtml(Grid1));
Response.End();
}
#endregion
/// <summary>
/// 查询绑定数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnBindGrid(object sender, EventArgs e)
{
if (drpUser.SelectedValue == BLL.Const._Null)
{
ShowNotify("请选择要打分的施工工程师。", MessageBoxIcon.Warning);
return;
}
if (string.IsNullOrEmpty(drpCompileDateMonth.Text))
{
ShowNotify("请选择年份。", MessageBoxIcon.Warning);
return;
}
BindGrid();
}
}
}