提交代码

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 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<Model.SitePerson_PersonInOut> 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<SqlParameter> listStr = new List<SqlParameter>();
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();
}
}
/// <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;
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<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;
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
/// <summary>
///
/// </summary>
/// <returns></returns>
protected string ConvertWorkTime(object UnitWorkPostID)
{
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)
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<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);
decimal engineeringQuantity = Funs.GetNewDecimalOrZero(EngineeringQuantity.ToString());
if (workTime > 0 && engineeringQuantity>0)
{
workEfficiency = (engineeringQuantity / workTime).ToString("0.##");
}
}
workEfficiency = (engineeringQuantity / workTime).ToString("0.##");
}
return workEfficiency;
}