254 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			254 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using BLL; | |||
|  | using Newtonsoft.Json.Linq; | |||
|  | using System; | |||
|  | using System.Collections.Generic; | |||
|  | using System.Data; | |||
|  | using System.Linq; | |||
|  | 
 | |||
|  | namespace FineUIPro.Web.Door | |||
|  | { | |||
|  |     public partial class InOutManHours : PageBase | |||
|  |     { | |||
|  |         /// <summary> | |||
|  |         /// 项目id | |||
|  |         /// </summary> | |||
|  |         public string ProjectId | |||
|  |         { | |||
|  |             get | |||
|  |             { | |||
|  |                 return (string)ViewState["ProjectId"]; | |||
|  |             } | |||
|  |             set | |||
|  |             { | |||
|  |                 ViewState["ProjectId"] = value; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         protected void Page_Load(object sender, EventArgs e) | |||
|  |         { | |||
|  |             if (!IsPostBack) | |||
|  |             { | |||
|  |                 this.ProjectId = this.CurrUser.LoginProjectId; | |||
|  |                 if (!string.IsNullOrEmpty(Request.Params["projectId"]) && Request.Params["projectId"] != this.ProjectId) | |||
|  |                 { | |||
|  |                     this.ProjectId = Request.Params["projectId"]; | |||
|  |                 } | |||
|  |                 Funs.DropDownPageSize(this.ddlPageSize); | |||
|  | 
 | |||
|  |                 UnitService.InitUnitDropDownList(this.drpUnit, this.ProjectId, true);            | |||
|  |                 WorkPostService.InitWorkPostDropDownList(this.drpWorkPost, true); | |||
|  | 
 | |||
|  |                 this.txtStartDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now); | |||
|  |                 this.txtEndDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now); | |||
|  |                 GetPersonStatistic(); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// 获取数据 | |||
|  |         /// </summary> | |||
|  |         private void GetPersonStatistic() | |||
|  |         { | |||
|  |             string unitId = null; | |||
|  |             string PostId = null; | |||
|  |             if (this.drpUnit.SelectedValue != Const._Null && !string.IsNullOrEmpty(this.drpUnit.SelectedValue)) | |||
|  |             { | |||
|  |                 unitId = Funs.GetStringByArray(this.drpUnit.SelectedValueArray);               | |||
|  |             } | |||
|  |             if (this.drpWorkPost.SelectedValue != Const._Null && !string.IsNullOrEmpty(this.drpWorkPost.SelectedValue)) | |||
|  |             { | |||
|  |                 PostId = Funs.GetStringByArray(this.drpWorkPost.SelectedValueArray); | |||
|  |             } | |||
|  | 
 | |||
|  |             var getData = Funs.DB.spInOutManHoursReport(this.ProjectId, unitId, PostId, Funs.GetNewDateTimeOrNow(this.txtStartDate.Text), Funs.GetNewDateTimeOrNow(this.txtEndDate.Text));             | |||
|  |             DataTable tb = GetTreeDataTable(getData.ToList()); //this.LINQToDataTable(getData.ToList()); | |||
|  |             Grid1.RecordCount = tb.Rows.Count; | |||
|  |             //tb = GetFilteredTable(Grid1.FilteredData, tb); | |||
|  |              this.OutputSummaryData(tb); ///取合计值 | |||
|  |             var table = this.GetPagedDataTable(Grid1, tb); | |||
|  |             Grid1.DataSource = table; | |||
|  |             Grid1.DataBind(); | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// 获取模拟树表格 | |||
|  |         /// </summary> | |||
|  |         /// <returns></returns> | |||
|  |         public  DataTable GetTreeDataTable(List<Model.InOutstatisticsItem> getData) | |||
|  |         { | |||
|  |             DataTable table = new DataTable(); | |||
|  |             table.Columns.Add(new DataColumn("ID", typeof(string))); | |||
|  |             table.Columns.Add(new DataColumn("ParentId", typeof(string))); | |||
|  |             table.Columns.Add(new DataColumn("AllUnitName", typeof(String))); | |||
|  |             table.Columns.Add(new DataColumn("PostName", typeof(String))); | |||
|  |             table.Columns.Add(new DataColumn("PersonCountSum", typeof(int))); | |||
|  |             table.Columns.Add(new DataColumn("ManCountSum", typeof(int))); | |||
|  |             table.Columns.Add(new DataColumn("ManHoursSum", typeof(int))); | |||
|  |             DataRow row; | |||
|  |             var getSum = from p in getData | |||
|  |                          group p by p.UnitId into g | |||
|  |                          select new | |||
|  |                          { | |||
|  |                             ID=SQLHelper.GetNewID(), | |||
|  |                              g.First().UnitId, | |||
|  |                              g.First().AllUnitName, | |||
|  |                              PostName = "小计", | |||
|  |                              ManHoursSum = g.Sum(x => x.ManHoursSum ?? 0), | |||
|  |                              ManCountSum = g.Sum(x => x.ManCountSum ?? 0), | |||
|  |                              PersonCountSum = getSumSysCount(g.First().ProjectId, g.First().UnitId), | |||
|  |                          }; | |||
|  |             foreach (var item in getSum) | |||
|  |             { | |||
|  |                 row = table.NewRow(); | |||
|  |                 row[0] = item.ID; | |||
|  |                 row[1] = "-1"; | |||
|  |                 row[2] = item.AllUnitName; | |||
|  |                 row[3] =item.PostName; | |||
|  |                 row[4] = item.PersonCountSum; | |||
|  |                 row[5] = item.ManCountSum; | |||
|  |                 row[6] = item.ManHoursSum; | |||
|  |                 table.Rows.Add(row); | |||
|  |                 var getU = getData.Where(x => x.UnitId == item.UnitId); | |||
|  |                 foreach (var itemU in getU) | |||
|  |                 { | |||
|  |                     row = table.NewRow(); | |||
|  |                     row[0] = itemU.ID; | |||
|  |                     row[1] = item.ID; | |||
|  |                     row[2] = itemU.AllUnitName; | |||
|  |                     row[3] = itemU.PostName; | |||
|  |                     row[4] = itemU.PersonCountSum ?? 0; | |||
|  |                     row[5] = itemU.ManCountSum ?? 0; | |||
|  |                     row[6] = itemU.ManHoursSum ?? 0; | |||
|  |                     table.Rows.Add(row); | |||
|  |                 } | |||
|  |             } | |||
|  |             return table; | |||
|  |         } | |||
|  |         /// <returns></returns> | |||
|  |         private int getSumSysCount(string projectId, string unitId) | |||
|  |         { | |||
|  |             return Funs.DB.SitePerson_Person.Where(x => x.ProjectId == projectId && x.UnitId == unitId && x.IsUsed == true && x.InTime <= DateTime.Now && (!x.OutTime.HasValue || x.OutTime > DateTime.Now)).Count(); | |||
|  |         } | |||
|  |         #region 计算合计 | |||
|  |         /// <summary> | |||
|  |         /// 计算合计 | |||
|  |         /// </summary> | |||
|  |         private void OutputSummaryData(DataTable tb) | |||
|  |         { | |||
|  |             int PersonCountSumT = 0; | |||
|  |             int ManCountSumT = 0; | |||
|  |             int ManHoursSumT = 0; | |||
|  |             for (int i = 0; i < tb.Rows.Count; i++) | |||
|  |             { | |||
|  |                 if (tb.Rows[i].ItemArray[1].ToString() == "-1") | |||
|  |                 { | |||
|  |                     PersonCountSumT += Funs.GetNewIntOrZero(tb.Rows[i]["PersonCountSum"].ToString()); | |||
|  |                     ManCountSumT += Funs.GetNewIntOrZero(tb.Rows[i]["ManCountSum"].ToString()); | |||
|  |                     ManHoursSumT += Funs.GetNewIntOrZero(tb.Rows[i]["ManHoursSum"].ToString()); | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |             JObject summary = new JObject | |||
|  |             { | |||
|  |                 { "PostName", "合计:" }, | |||
|  |                 { "PersonCountSum", PersonCountSumT+"人" }, | |||
|  |                 { "ManCountSum", ManCountSumT + "人" }, | |||
|  |                 { "ManHoursSum", ManHoursSumT+"小时"} | |||
|  |             }; | |||
|  |             Grid1.SummaryData = summary; | |||
|  |         } | |||
|  |         #endregion | |||
|  | 
 | |||
|  |         protected void btnSearch_Click(object sender, EventArgs e) | |||
|  |         { | |||
|  |             GetPersonStatistic(); | |||
|  |         } | |||
|  | 
 | |||
|  |         #region 导出按钮 | |||
|  |         /// 导出按钮 | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void btnOut_Click(object sender, EventArgs e) | |||
|  |         { | |||
|  |             Response.ClearContent(); | |||
|  |             string filename = Funs.GetNewFileName(); | |||
|  |             Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("现场考勤记录" + filename, System.Text.Encoding.UTF8) + ".xls"); | |||
|  |             Response.ContentType = "application/excel"; | |||
|  |             Response.ContentEncoding = System.Text.Encoding.UTF8; | |||
|  |             this.Grid1.PageSize = this.Grid1.RecordCount; | |||
|  |             GetPersonStatistic(); | |||
|  |             Response.Write(GetGridTableHtml(Grid1)); | |||
|  |             Response.End(); | |||
|  |         } | |||
|  |         #endregion | |||
|  |          | |||
|  |         #region 分页 排序 | |||
|  |         /// <summary> | |||
|  |         /// 改变索引事件 | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) | |||
|  |         { | |||
|  |             GetPersonStatistic(); | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// 分页下拉选择事件 | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) | |||
|  |         { | |||
|  |             this.Grid1.PageSize = Convert.ToInt32(this.ddlPageSize.SelectedValue); | |||
|  |             GetPersonStatistic(); | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         ///  | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void Grid1_Sort(object sender, GridSortEventArgs e) | |||
|  |         { | |||
|  |             GetPersonStatistic(); | |||
|  |         } | |||
|  | 
 | |||
|  |         #endregion | |||
|  | 
 | |||
|  |         protected void btnView_Click(object sender, EventArgs e) | |||
|  |         { | |||
|  |             ViewItem(); | |||
|  |         } | |||
|  | 
 | |||
|  |         protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e) | |||
|  |         { | |||
|  |             ViewItem(); | |||
|  |         } | |||
|  | 
 | |||
|  |         private void ViewItem() | |||
|  |         { | |||
|  |             if (Grid1.SelectedRowIndexArray.Length == 0) | |||
|  |             { | |||
|  |                 Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning); | |||
|  |                 return; | |||
|  |             } | |||
|  |             if (Grid1.SelectedRow.Values[2].ToString() != "小计") | |||
|  |             { | |||
|  |                 this.CurrUser.SessionString = this.ProjectId + "#" + Grid1.SelectedRow.Values[1].ToString() + "#" + Grid1.SelectedRow.Values[2].ToString() + "#" + this.txtStartDate.Text + "#" + this.txtEndDate.Text; | |||
|  |                 PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("InOutManHoursItem.aspx?strValue={0}", (this.ProjectId + "#" + Grid1.SelectedRow.Values[1] + "#" + Grid1.SelectedRow.Values[2] + "#" + this.txtStartDate.Text + "#" + this.txtEndDate.Text), "查看 - "))); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         protected void drpUnit_SelectedIndexChanged(object sender, EventArgs e) | |||
|  |         { | |||
|  |             this.drpUnit.SelectedValueArray = Funs.RemoveDropDownListNull(this.drpUnit.SelectedValueArray); | |||
|  |         } | |||
|  | 
 | |||
|  |         protected void drpWorkPost_SelectedIndexChanged(object sender, EventArgs e) | |||
|  |         { | |||
|  |             this.drpWorkPost.SelectedValueArray = Funs.RemoveDropDownListNull(this.drpWorkPost.SelectedValueArray); | |||
|  |         } | |||
|  |     } | |||
|  | } |