514 lines
22 KiB
C#
514 lines
22 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
|
|
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
|
|
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
|
|
select x;
|
|
//按照未关闭数取前10
|
|
var groupedUser = (from x in Funs.DB.GJSX
|
|
where x.ProjectId == this.ProjectId && x.State != "0"
|
|
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 Funs.DB.GJSX
|
|
where x.ProjectId == this.ProjectId && (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.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.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.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.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.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)
|
|
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.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
|
|
}
|
|
} |