diff --git a/SGGL/FineUIPro.Web/HSSE/SitePerson/WorkPostStatistic.aspx.cs b/SGGL/FineUIPro.Web/HSSE/SitePerson/WorkPostStatistic.aspx.cs index 952fea8a..0837d504 100644 --- a/SGGL/FineUIPro.Web/HSSE/SitePerson/WorkPostStatistic.aspx.cs +++ b/SGGL/FineUIPro.Web/HSSE/SitePerson/WorkPostStatistic.aspx.cs @@ -1,7 +1,9 @@ using BLL; +using NPOI.Util; using System; using System.Collections.Generic; using System.Data; +using System.Data.SqlClient; using System.Linq; namespace FineUIPro.Web.HSSE.SitePerson @@ -43,7 +45,6 @@ namespace FineUIPro.Web.HSSE.SitePerson this.txtStartDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now.AddMonths(-1)); this.txtEndDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now); this.setData(); - GetPersonStatistic(); } } public static List getAllPersonInOutList; @@ -56,68 +57,184 @@ namespace FineUIPro.Web.HSSE.SitePerson getAllPersonInOutList = null; if (!string.IsNullOrEmpty(this.ProjectId)) { - DateTime? startTime = Funs.GetNewDateTime(this.txtStartDate.Text); - DateTime? endTime = Funs.GetNewDateTime(this.txtEndDate.Text); - var getAll = from x in Funs.DB.SitePerson_PersonInOut - where x.ProjectId == this.ProjectId - select x; - if (startTime.HasValue) + + + string strSql = @" select UnitId+'|'+WorkPostId as ID, UnitId,UnitName,WorkPostId,WorkPostName,count(distinct PersonId) PersonCount + from dbo.SitePerson_PersonInOut where ProjectId=@ProjectId "; + List listStr = new List(); + listStr.Add(new SqlParameter("@ProjectId", CurrUser.LoginProjectId)); + + if (!string.IsNullOrEmpty(this.txtStartDate.Text)) { - getAll = getAll.Where(x => x.ChangeTime >= startTime); + strSql += " and ChangeTime >= @startTime"; + listStr.Add(new SqlParameter("@startTime", this.txtStartDate.Text)); + } - if (endTime.HasValue) + if (!string.IsNullOrEmpty(this.txtEndDate.Text)) { - getAll = getAll.Where(x => x.ChangeTime <= endTime); + strSql += " and ChangeTime <= @endTime"; + listStr.Add(new SqlParameter("@endTime", this.txtEndDate.Text)); + } if (this.drpUnit.SelectedValue != Const._Null) { - getAll = getAll.Where(x => x.UnitId == this.drpUnit.SelectedValue); + strSql += " and UnitId = @UnitId"; + listStr.Add(new SqlParameter("@UnitId", this.drpUnit.SelectedValue)); } if (this.drpWorkPost.SelectedValue != Const._Null) { - getAll = getAll.Where(x => x.WorkPostId == this.drpWorkPost.SelectedValue); - } - getAllPersonInOutList = getAll.ToList(); - } - } - - /// - /// 获取数据,合并相同行 - /// - private void GetPersonStatistic() - { - if (!string.IsNullOrEmpty(this.ProjectId)) - { - DateTime? startTime = Funs.GetNewDateTime(this.txtStartDate.Text); - DateTime? endTime = Funs.GetNewDateTime(this.txtEndDate.Text); - string unitId = null; - string workPostId = null; - if (this.drpUnit.SelectedValue != Const._Null) - { - unitId = this.drpUnit.SelectedValue; - } - if (this.drpWorkPost.SelectedValue != Const._Null) - { - workPostId = this.drpWorkPost.SelectedValue; + strSql += " and WorkPostId = @WorkPostId"; + listStr.Add(new SqlParameter("@WorkPostId", this.drpWorkPost.SelectedValue)); } - var dayReports = PersonInOutService.getWorkPostStatistic(getAllPersonInOutList, startTime, endTime, this.ProjectId); - DataTable tb = this.LINQToDataTable(dayReports); - // 2.获取当前分页数据 - //var table = this.GetPagedDataTable(GridNewDynamic, tb1); + + strSql += " group by UnitId,UnitName,WorkPostId,WorkPostName"; + + SqlParameter[] parameter = listStr.ToArray(); + DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter); + if (tb != null) + { + tb.Columns.Add("WorkTime"); + tb.Columns.Add("EngineeringQuantity"); + string strSql1 = @" select UnitId,UnitName,WorkPostId,WorkPostName,PersonId,IsIn,ChangeTime from SitePerson_PersonInOut where ProjectId=@ProjectId "; + List listStr1 = new List(); + + listStr1.Add(new SqlParameter("@ProjectId", CurrUser.LoginProjectId)); + + if (!string.IsNullOrEmpty(this.txtStartDate.Text)) + { + strSql1 += " and ChangeTime >= @startTime"; + listStr1.Add(new SqlParameter("@startTime", this.txtStartDate.Text)); + + } + if (!string.IsNullOrEmpty(this.txtEndDate.Text)) + { + strSql1 += " and ChangeTime <= @endTime"; + listStr1.Add(new SqlParameter("@endTime", this.txtEndDate.Text)); + + } + if (this.drpUnit.SelectedValue != Const._Null) + { + strSql1 += " and UnitId = @UnitId"; + listStr1.Add(new SqlParameter("@UnitId", this.drpUnit.SelectedValue)); + } + if (this.drpWorkPost.SelectedValue != Const._Null) + { + strSql1 += " and WorkPostId = @WorkPostId"; + listStr1.Add(new SqlParameter("@WorkPostId", this.drpWorkPost.SelectedValue)); + } + + strSql1 += " order by UnitId,UnitName,WorkPostId,WorkPostName,PersonId,ChangeTime desc"; + + + SqlParameter[] parameter1 = listStr1.ToArray(); + DataTable tb1 = SQLHelper.GetDataTableRunText(strSql1, parameter1); + if (tb1 != null) + { + Dictionary dic = new Dictionary(); + HashSet dicAttenDate = new HashSet(); + for (int i = 0; i < tb1.Rows.Count; i++) + { + DataRow outRow = null; + DateTime? outTime = null; + DataRow inRow = null; + DateTime? inTime = null; + if (tb1.Rows[i]["IsIn"].ToString() == "False") + { + outRow = tb1.Rows[i]; + outTime = Funs.GetNewDateTime(outRow["ChangeTime"].ToString()); + if (i < tb1.Rows.Count - 1) + { + var tempSpan = outTime - Funs.GetNewDateTime(tb1.Rows[i + 1]["ChangeTime"].ToString()); + if (tb1.Rows[i + 1]["IsIn"].ToString() == "False" && outRow["PersonId"].ToString() == tb1.Rows[i + 1]["PersonId"].ToString() && tempSpan.HasValue && tempSpan.Value.TotalMinutes < 5) + { + continue; + } + } + } + if (outRow != null) + for (int j = i + 1; j < tb1.Rows.Count; j++)//循环寻找本人24小时内的入场记录 + { + + DataRow temp = tb1.Rows[j]; + if (outRow["PersonId"].ToString() != temp["PersonId"].ToString())//不是同一个人结束 + { + break; + } + DateTime? tempTime = Funs.GetNewDateTime(temp["ChangeTime"].ToString()); + var span = outTime - tempTime; + + if (span.Value.TotalHours > 24)//超过24小时没有找到入场结束 + { + break; + } + + //24小时内的入场记录,结束循环 + if (outRow["PersonId"].ToString() == temp["PersonId"].ToString() && temp["IsIn"].ToString() == "True" && span.HasValue && span.Value.TotalHours <= 24) + { + inRow = temp; + inTime = Funs.GetNewDateTime(temp["ChangeTime"].ToString()); + break; + } + } + if (outRow != null) + { + string personDay = outRow["PersonId"].ToString() + "$" + Funs.GetNewDateTime(outRow["ChangeTime"].ToString()).Value.ToString("yyyy-MM-dd"); + if (inRow != null && outRow != null) //如果本次出场,24小时内有入场计算实际出场时间 + { + if (!dic.ContainsKey(outRow["UnitId"].ToString() + "$" + outRow["WorkPostId"].ToString())) + { + dic.Add(outRow["UnitId"].ToString() + "$" + outRow["WorkPostId"].ToString(), 0); + } + + var span = outTime - inTime; + + dic[outRow["UnitId"].ToString() + "$" + outRow["WorkPostId"].ToString()] += span.Value.TotalMinutes; + dicAttenDate.Add(personDay); + } + else if (!dicAttenDate.Contains(personDay))//找不到该入出场时间,按8小时计算 + { + if (!dic.ContainsKey(outRow["UnitId"].ToString() + "$" + outRow["WorkPostId"].ToString())) + { + dic.Add(outRow["UnitId"].ToString() + "$" + outRow["WorkPostId"].ToString(), 0); + } + dic[outRow["UnitId"].ToString() + "$" + outRow["WorkPostId"].ToString()] += 8 * 60; + dicAttenDate.Add(personDay); + } + } + } + Model.SGGLDB db = Funs.DB; + foreach (DataRow dataRow in tb.Rows) + { + if (dic.ContainsKey(dataRow["UnitId"].ToString() + "$" + dataRow["WorkPostId"].ToString())) + { + dataRow["WorkTime"] = Convert.ToInt32(dic[dataRow["UnitId"].ToString() + "$" + dataRow["WorkPostId"].ToString()] / 60); + } + if (dataRow["WorkPostId"].ToString() == BLL.Const.WorkPost_Welder) + { + dataRow["EngineeringQuantity"] = (from x in db.HJGL_WeldJoint + join y in db.HJGL_WeldingDaily + on x.WeldingDailyId equals y.WeldingDailyId + where x.ProjectId == CurrUser.LoginProjectId && y.UnitId == dataRow["UnitId"].ToString() && y.WeldingDate >= Funs.GetNewDateTime(this.txtStartDate.Text) && y.WeldingDate <= Funs.GetNewDateTime(this.txtEndDate.Text) + select x.Size ?? 0).ToList().Sum(); + } + } + } + + + } Grid1.RecordCount = tb.Rows.Count; - tb = GetFilteredTable(Grid1.FilteredData, tb); var table = this.GetPagedDataTable(Grid1, tb); - Grid1.DataSource = table; Grid1.DataBind(); } } + protected void btnSearch_Click(object sender, EventArgs e) { this.setData(); - GetPersonStatistic(); + } #region 分页选择下拉改变事件 @@ -129,7 +246,7 @@ namespace FineUIPro.Web.HSSE.SitePerson protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) { //Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); - //GetPersonStatistic(); + //setData(); } #endregion @@ -142,7 +259,7 @@ namespace FineUIPro.Web.HSSE.SitePerson protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { Grid1.PageIndex = e.NewPageIndex; - GetPersonStatistic(); + setData(); } #endregion @@ -163,99 +280,18 @@ namespace FineUIPro.Web.HSSE.SitePerson } #endregion - /// /// /// /// - protected string ConvertWorkTime(object UnitWorkPostID) - { - int workTime = 0; - if (UnitWorkPostID != null) - { - List getUWId = Funs.GetStrListByStr(UnitWorkPostID.ToString(), '|'); - if (getUWId.Count() > 1) - { - string unitId = getUWId[0]; - string workPostId = getUWId[1]; - var getW = getAllPersonInOutList.Where(x => x.UnitId == unitId && x.WorkPostId == workPostId); - //// 出场记录 集合 - var getUnitOutList = getW.Where(x => x.IsIn == false); - //// 进场记录 集合 - var getUnitInList = getW.Where(x => x.IsIn == true); - int personWorkTime = 0; - List personIdList = new List(); - foreach (var itemOut in getUnitOutList) - { - var getMaxInTime = getUnitInList.Where(x => x.ChangeTime < itemOut.ChangeTime - && x.PersonId == itemOut.PersonId && x.ChangeTime.Value.AddDays(1) > itemOut.ChangeTime).Max(x => x.ChangeTime); - if (getMaxInTime.HasValue) - { - personWorkTime += Convert.ToInt32((itemOut.ChangeTime - getMaxInTime).Value.TotalMinutes); - } - else - { - personIdList.Add(itemOut.PersonId); - } - } - if (personIdList.Count() > 0) - { - personWorkTime += (personIdList.Distinct().Count() * 8 * 60); - } - - workTime = Convert.ToInt32(personWorkTime * 1.0 / 60); - } - } - return workTime.ToString(); - } - - /// - /// - /// - /// - protected string ConvertWorkEfficiency(object UnitWorkPostID, object EngineeringQuantity) + protected string ConvertWorkEfficiency(object WorkTime, object EngineeringQuantity) { string workEfficiency = string.Empty; - int workTime = 0; - if (UnitWorkPostID != null) + int workTime = Funs.GetNewIntOrZero(WorkTime.ToString()); + decimal engineeringQuantity = Funs.GetNewDecimalOrZero(EngineeringQuantity.ToString()); + if (workTime > 0 && engineeringQuantity > 0) { - List getUWId = Funs.GetStrListByStr(UnitWorkPostID.ToString(), '|'); - if (getUWId.Count() > 1) - { - string unitId = getUWId[0]; - string workPostId = getUWId[1]; - var getW = getAllPersonInOutList.Where(x => x.UnitId == unitId && x.WorkPostId == workPostId); - //// 出场记录 集合 - var getUnitOutList = getW.Where(x => x.IsIn == false); - //// 进场记录 集合 - var getUnitInList = getW.Where(x => x.IsIn == true); - int personWorkTime = 0; - List personIdList = new List(); - foreach (var itemOut in getUnitOutList) - { - var getMaxInTime = getUnitInList.Where(x => x.ChangeTime < itemOut.ChangeTime - && x.PersonId == itemOut.PersonId && x.ChangeTime.Value.AddDays(1) > itemOut.ChangeTime).Max(x => x.ChangeTime); - if (getMaxInTime.HasValue) - { - personWorkTime += Convert.ToInt32((itemOut.ChangeTime - getMaxInTime).Value.TotalMinutes); - } - else - { - personIdList.Add(itemOut.PersonId); - } - } - if (personIdList.Count() > 0) - { - personWorkTime += (personIdList.Distinct().Count() * 8 * 60); - } - - workTime = Convert.ToInt32(personWorkTime * 1.0 / 60); - decimal engineeringQuantity = Funs.GetNewDecimalOrZero(EngineeringQuantity.ToString()); - if (workTime > 0 && engineeringQuantity>0) - { - workEfficiency = (engineeringQuantity / workTime).ToString("0.##"); - } - } + workEfficiency = (engineeringQuantity / workTime).ToString("0.##"); } return workEfficiency; } diff --git a/SGGL/FineUIPro.Web/HSSE/SitePerson/WorkPostStatistic.aspx.designer.cs b/SGGL/FineUIPro.Web/HSSE/SitePerson/WorkPostStatistic.aspx.designer.cs index e286bbf0..978e53d3 100644 --- a/SGGL/FineUIPro.Web/HSSE/SitePerson/WorkPostStatistic.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HSSE/SitePerson/WorkPostStatistic.aspx.designer.cs @@ -120,15 +120,6 @@ namespace FineUIPro.Web.HSSE.SitePerson { /// protected global::System.Web.UI.WebControls.Label labNumber; - /// - /// lbAge 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Label lbAge; - /// /// lbIsPost 控件。 ///