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 定义项 /// /// 项目主键 /// 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 关键事项 /// /// 关键事项 /// protected string One { get { var db = new Model.SGGLDB(Funs.ConnString); List series = new List(); Model.BusinessColumn businessColumn = new Model.BusinessColumn(); Model.SingleSerie s = new Model.SingleSerie(); List listdata = new List(); 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 /// /// 关键事项统计——按事项类别 /// protected string Two { get { List series = new List(); Model.BusinessColumn businessColumn = new Model.BusinessColumn(); List listCategories = new List(); 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 listdata = new List(); List listdata2 = new List(); 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); } } /// /// 关键事项统计——按责任人 /// protected string Five { get { List series = new List(); Model.BusinessColumn businessColumn = new Model.BusinessColumn(); List listCategories = new List(); 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 listdata = new List(); List listdata2 = new List(); 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 超期统计 /// /// 超期统计表格 /// 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.State != "1" && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate) select x; StringBuilder sb = new StringBuilder(); sb.Append(" "); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); 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(""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append(""); } sb.Append(""); sb.Append("
关键事项超期天数统计(累计)
事项类别不足一周超期一周超期两周超期三周超一个月
{type.GJSXTypeName}{day1}{day7}{day14}{day21}{day30}
"); myDiv.InnerHtml = sb.ToString(); } /// /// 分页 /// /// /// protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { BindGrid(); } /// /// 排序 /// /// /// protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e) { BindGrid(); } /// /// 超期统计——不足一周 /// protected string Three { get { List series = new List(); Model.BusinessColumn businessColumn = new Model.BusinessColumn(); List listCategories = new List(); 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 listdata = new List(); 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); } } /// /// 超期统计——超期一周 /// protected string Three2 { get { List series = new List(); Model.BusinessColumn businessColumn = new Model.BusinessColumn(); List listCategories = new List(); 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 listdata = new List(); 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); } } /// /// 超期统计——超期两周 /// protected string Three3 { get { List series = new List(); Model.BusinessColumn businessColumn = new Model.BusinessColumn(); List listCategories = new List(); 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 listdata = new List(); 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); } } /// /// 超期统计——超期三周 /// protected string Three4 { get { List series = new List(); Model.BusinessColumn businessColumn = new Model.BusinessColumn(); List listCategories = new List(); 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 listdata = new List(); 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); } } /// /// 超期统计——超期一个月 /// protected string Three5 { get { List series = new List(); Model.BusinessColumn businessColumn = new Model.BusinessColumn(); List listCategories = new List(); 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 listdata = new List(); 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 超期平均时间统计 /// /// 超期平均时间统计 /// protected string Four { get { List series = new List(); Model.BusinessColumn businessColumn = new Model.BusinessColumn(); List listCategories = new List(); businessColumn.title = "关键事项——超期平均时间"; businessColumn.xFontNum = 5; Model.SGGLDB db = Funs.DB; List listdata = new List(); List listdata2 = new List(); List listdata3 = new List(); 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 } }