提交代码

This commit is contained in:
2024-08-16 15:34:11 +08:00
parent d7dbdce04e
commit ae8198c54e
2 changed files with 166 additions and 139 deletions
@@ -1,7 +1,9 @@
using BLL; using BLL;
using NPOI.Util;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.SqlClient;
using System.Linq; using System.Linq;
namespace FineUIPro.Web.HSSE.SitePerson 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.txtStartDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now.AddMonths(-1));
this.txtEndDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now); this.txtEndDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now);
this.setData(); this.setData();
GetPersonStatistic();
} }
} }
public static List<Model.SitePerson_PersonInOut> getAllPersonInOutList; public static List<Model.SitePerson_PersonInOut> getAllPersonInOutList;
@@ -56,68 +57,184 @@ namespace FineUIPro.Web.HSSE.SitePerson
getAllPersonInOutList = null; getAllPersonInOutList = null;
if (!string.IsNullOrEmpty(this.ProjectId)) 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 string strSql = @" select UnitId+'|'+WorkPostId as ID, UnitId,UnitName,WorkPostId,WorkPostName,count(distinct PersonId) PersonCount
where x.ProjectId == this.ProjectId from dbo.SitePerson_PersonInOut where ProjectId=@ProjectId ";
select x; List<SqlParameter> listStr = new List<SqlParameter>();
if (startTime.HasValue) 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) 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) if (this.drpWorkPost.SelectedValue != Const._Null)
{ {
getAll = getAll.Where(x => x.WorkPostId == this.drpWorkPost.SelectedValue); strSql += " and WorkPostId = @WorkPostId";
} listStr.Add(new SqlParameter("@WorkPostId", this.drpWorkPost.SelectedValue));
getAllPersonInOutList = getAll.ToList();
}
}
/// <summary>
/// 获取数据,合并相同行
/// </summary>
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;
} }
var dayReports = PersonInOutService.getWorkPostStatistic(getAllPersonInOutList, startTime, endTime, this.ProjectId);
DataTable tb = this.LINQToDataTable(dayReports); strSql += " group by UnitId,UnitName,WorkPostId,WorkPostName";
// 2.获取当前分页数据
//var table = this.GetPagedDataTable(GridNewDynamic, tb1); 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<SqlParameter> listStr1 = new List<SqlParameter>();
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<string, double> dic = new Dictionary<string, double>();
HashSet<string> dicAttenDate = new HashSet<string>();
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; Grid1.RecordCount = tb.Rows.Count;
tb = GetFilteredTable(Grid1.FilteredData, tb);
var table = this.GetPagedDataTable(Grid1, tb); var table = this.GetPagedDataTable(Grid1, tb);
Grid1.DataSource = table; Grid1.DataSource = table;
Grid1.DataBind(); Grid1.DataBind();
} }
} }
protected void btnSearch_Click(object sender, EventArgs e) protected void btnSearch_Click(object sender, EventArgs e)
{ {
this.setData(); this.setData();
GetPersonStatistic();
} }
#region #region
@@ -129,7 +246,7 @@ namespace FineUIPro.Web.HSSE.SitePerson
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
{ {
//Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); //Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
//GetPersonStatistic(); //setData();
} }
#endregion #endregion
@@ -142,7 +259,7 @@ namespace FineUIPro.Web.HSSE.SitePerson
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
{ {
Grid1.PageIndex = e.NewPageIndex; Grid1.PageIndex = e.NewPageIndex;
GetPersonStatistic(); setData();
} }
#endregion #endregion
@@ -163,99 +280,18 @@ namespace FineUIPro.Web.HSSE.SitePerson
} }
#endregion #endregion
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
protected string ConvertWorkTime(object UnitWorkPostID) protected string ConvertWorkEfficiency(object WorkTime, object EngineeringQuantity)
{
int workTime = 0;
if (UnitWorkPostID != null)
{
List<string> 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<string> personIdList = new List<string>();
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();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
protected string ConvertWorkEfficiency(object UnitWorkPostID, object EngineeringQuantity)
{ {
string workEfficiency = string.Empty; string workEfficiency = string.Empty;
int workTime = 0; int workTime = Funs.GetNewIntOrZero(WorkTime.ToString());
if (UnitWorkPostID != null) decimal engineeringQuantity = Funs.GetNewDecimalOrZero(EngineeringQuantity.ToString());
if (workTime > 0 && engineeringQuantity > 0)
{ {
List<string> getUWId = Funs.GetStrListByStr(UnitWorkPostID.ToString(), '|'); workEfficiency = (engineeringQuantity / workTime).ToString("0.##");
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<string> personIdList = new List<string>();
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.##");
}
}
} }
return workEfficiency; return workEfficiency;
} }
@@ -120,15 +120,6 @@ namespace FineUIPro.Web.HSSE.SitePerson {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Label labNumber; protected global::System.Web.UI.WebControls.Label labNumber;
/// <summary>
/// lbAge 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.Label lbAge;
/// <summary> /// <summary>
/// lbIsPost 控件。 /// lbIsPost 控件。
/// </summary> /// </summary>