提交代码
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user