CNCEC_SUBQHSE_WUHUAN/SGGL/FineUIPro.Web/common/mainMenu_PGJSX.aspx.cs

514 lines
23 KiB
C#

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using BLL;
using System.Data;
using System.Data.SqlClient;
using Model;
using System.Linq;
using NPOI.SS.Formula.Functions;
using NPOI.XSSF.Streaming.Values;
using System.Web.UI.HtmlControls;
using System.Text;
using FineUIPro.Web.SysManage;
namespace FineUIPro.Web
{
public partial class mainMenu_PGJSX : PageBase
{
#region
/// <summary>
/// 项目主键
/// </summary>
public string ProjectId
{
get
{
return (string)ViewState["ProjectId"];
}
set
{
ViewState["ProjectId"] = value;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.ProjectId = string.Empty;
if (this.CurrUser != null && !string.IsNullOrEmpty(this.CurrUser.LoginProjectId))
{
this.ProjectId = this.CurrUser.LoginProjectId;
}
BindGrid();
}
}
#region
#region
/// <summary>
/// 关键事项
/// </summary>
protected string One
{
get
{
var db = new Model.SGGLDB(Funs.ConnString);
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
Model.SingleSerie s = new Model.SingleSerie();
List<double> listdata = new List<double>();
businessColumn.title = "关键事项关闭率";
var allItems = from x in db.GJSX
where x.ProjectId == this.CurrUser.LoginProjectId && x.State != "1"
orderby x.GJSXID
select x;
int closeNum = allItems.Where(x => x.State == "0").Count();
listdata.Add(closeNum);
listdata.Add(allItems.Count() - closeNum);
double closureRate = 0;
if (allItems.Any())
{
closureRate = (double)closeNum / (double)allItems.Count();
}
listdata.Add(Math.Round(closureRate * 100, 2));
s.data = listdata;
series.Add(s);
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
#endregion
/// <summary>
/// 关键事项统计——按事项类别
/// </summary>
protected string Two
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项跟踪-按事项类别统计";
businessColumn.xFontNum = 8;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && x.State != "1"
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
List<double> listdata2 = new List<double>();
int closeNum = 0;
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typeItems = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID));
closeNum = typeItems.Where(x => x.State == "0").Count();
listdata.Add(typeItems.Count() - closeNum);
listdata2.Add(closeNum);
}
s.data = listdata;
s2.data = listdata2;
series.Add(s);
series.Add(s2);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 关键事项统计——按责任人
/// </summary>
protected string Five
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项跟踪-按责任人统计";
businessColumn.xFontNum = 5;
//var userIds = BLL.GJSXService.GetGJSXUserList(this.ProjectId);
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && x.State != "1"
select x;
//按照未关闭数取前10
var groupedUser = (from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && x.State != "0" && x.State != "1"
select x).GroupBy(p => p.User_Acceptance)
.Select(g => new
{
UserId = g.Key,
Count = g.Count()
})
.OrderByDescending(x => x.Count)
.Take(10)
.ToList();
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
List<double> listdata2 = new List<double>();
int closeNum = 0;
foreach (var userid in groupedUser)
{
listCategories.Add(UserService.GetUserNameByUserId(userid.UserId));
var typeItems = allItems.Where(x => x.User_Acceptance == userid.UserId);
closeNum = typeItems.Where(x => x.State == "0").Count();
listdata.Add(typeItems.Count() - closeNum);
listdata2.Add(closeNum);
}
s.data = listdata;
s2.data = listdata2;
series.Add(s);
series.Add(s2);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
#endregion
#region
/// <summary>
/// 超期统计表格
/// </summary>
private void BindGrid()
{
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in db.GJSX
where x.ProjectId == this.ProjectId && x.State != "1" && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate)
select x;
StringBuilder sb = new StringBuilder();
sb.Append("<table id=\"myTable\" class=\"myTableClass\" > ");
sb.Append("<thead>");
sb.Append("<tr>");
sb.Append("<th class=\"tab-title\" colspan=\"6\">关键事项超期天数统计(累计)</th>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<th class=\"tab-header\">事项类别</th>");
sb.Append("<th class=\"tab-header\">不足一周</th>");
sb.Append("<th class=\"tab-header\">超期一周</th>");
sb.Append("<th class=\"tab-header\">超期两周</th>");
sb.Append("<th class=\"tab-header\">超期三周</th>");
sb.Append("<th class=\"tab-header\">超一个月</th>");
sb.Append("</tr>");
sb.Append("</thead>");
sb.Append("<tbody>");
foreach (var type in gjsxTypes)
{
int day1 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(7)).Count();
int day7 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(7) && (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(14)).Count();
int day14 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(14) && (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(21)).Count();
int day21 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(21) && (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(28)).Count();
int day30 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(28)).Count();
sb.Append("<tr>");
sb.Append($"<td>{type.GJSXTypeName}</td>");
sb.Append($"<td>{day1}</td>");
sb.Append($"<td>{day7}</td>");
sb.Append($"<td>{day14}</td>");
sb.Append($"<td>{day21}</td>");
sb.Append($"<td>{day30}</td>");
sb.Append("</tr>");
}
sb.Append("</tbody>");
sb.Append("</table>");
myDiv.InnerHtml = sb.ToString();
}
/// <summary>
/// 分页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
{
BindGrid();
}
/// <summary>
/// 排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
{
BindGrid();
}
/// <summary>
/// 超期统计——不足一周
/// </summary>
protected string Three
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项超期天数统计(累计)";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && x.State != "1"
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate)
&& (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(7)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 超期统计——超期一周
/// </summary>
protected string Three2
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项超期天数统计(累计)";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && x.State != "1"
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(7)
&& (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(14)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 超期统计——超期两周
/// </summary>
protected string Three3
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项超期天数统计(累计)";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && x.State != "1"
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(14)
&& (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(21)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 超期统计——超期三周
/// </summary>
protected string Three4
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项超期天数统计(累计)";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && x.State != "1"
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(21)
&& (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(30)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 超期统计——超期一个月
/// </summary>
protected string Three5
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项超期天数统计(累计)";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && x.State != "1"
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(30)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
#endregion
#region
/// <summary>
/// 超期平均时间统计
/// </summary>
protected string Four
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项——超期平均时间";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
List<double> listdata = new List<double>();
List<double> listdata2 = new List<double>();
List<double> listdata3 = new List<double>();
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
Model.SingleSerie s3 = new Model.SingleSerie();
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
//全平台
var overallItems = from x in Funs.DB.GJSX
where (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate) && x.State != "1"
select new
{
x.GJSXTypeId,
DiffDay = (double)((x.CloseDate ?? DateTime.Now) - Convert.ToDateTime(x.CompleteDate)).Days //+ 1
};
//本项目
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && x.State != "1"
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate)
select new
{
x.GJSXTypeId,
DiffDay = (double)((x.CloseDate ?? DateTime.Now) - Convert.ToDateTime(x.CompleteDate)).Days //+ 1
};
//全平台平均超期时间
double overallAverageDiffDay = 0;
if (overallItems.Any())
{
overallAverageDiffDay = Math.Round(overallItems.Average(p => p.DiffDay), 1);
}
listdata3.Add(overallAverageDiffDay);
s3.data = listdata3;
//项目平均超期时间
double averageDiffDay = 0;
if (allItems.Any())
{
averageDiffDay = Math.Round(allItems.Average(p => p.DiffDay), 1);
}
listdata2.Add(averageDiffDay);
s2.data = listdata2;
//各事项类别超期平均时间
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
double averageTypeDiffDay = 0;
if (typelst.Any())
{
averageTypeDiffDay = Math.Round(typelst.Average(p => p.DiffDay), 1);
}
listdata.Add(averageTypeDiffDay);
}
s.data = listdata;
series.Add(s);
series.Add(s2);
series.Add(s3);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
#endregion
}
}