This commit is contained in:
杨红卫 2021-07-19 10:41:58 +08:00
parent 4f2057ccd3
commit b3d23a52d9
4 changed files with 185 additions and 55 deletions

View File

@ -102,7 +102,7 @@ namespace BLL
AutoReset = true AutoReset = true
}; };
InOutmessageTimer.Elapsed += new ElapsedEventHandler(PersonInOutProcess); InOutmessageTimer.Elapsed += new ElapsedEventHandler(PersonInOutProcess);
InOutmessageTimer.Interval = 1000 * 60 * 60;// 60分钟 60000 * adTimeJ; InOutmessageTimer.Interval = 1000 * 60 * 30;// 60分钟 60000 * adTimeJ;
InOutmessageTimer.Start(); InOutmessageTimer.Start();
} }
@ -113,46 +113,65 @@ namespace BLL
/// <param name="e">事件参数</param> /// <param name="e">事件参数</param>
private static void PersonInOutProcess(object sender, ElapsedEventArgs e) private static void PersonInOutProcess(object sender, ElapsedEventArgs e)
{ {
int delCount = 0;
try try
{ {
var result = (from x in Funs.DB.RealName_PersonInOutNow var result = (from x in Funs.DB.RealName_PersonInOutNow
group x by new select new
{ {
x.ProjectId, x.ProjectId,
date = x.ChangeTime.Value.Date, date = x.ChangeTime.Value.Date,
x.IdcardNumber, x.IdcardNumber,
x.IsIn x.IsIn
} into g
where g.Count() > 1
select new
{
g.First().ProjectId,
date = g.First().ChangeTime.Value.Date,
g.First().IdcardNumber,
g.First().IsIn
}).Distinct(); }).Distinct();
foreach (var item in result) foreach (var item in result)
{ {
var getDateRecords = from x in Funs.DB.RealName_PersonInOutNow var getDateRecords = from x in Funs.DB.RealName_PersonInOutNow
where x.ProjectId == item.ProjectId && x.ChangeTime.Value >= item.date.Date && x.ChangeTime.Value < item.date.Date.AddDays(1) where x.ProjectId == item.ProjectId && x.ChangeTime.Value >= item.date.Date && x.ChangeTime.Value < item.date.Date.AddDays(1)
&& x.IdcardNumber == item.IdcardNumber && x.IdcardNumber == item.IdcardNumber
select x; select x;
DateTime? minChangeTime = getDateRecords.Where(x => x.IsIn == true).Min(x => x.ChangeTime);
DateTime? maxChangeTime = getDateRecords.Where(x => x.IsIn == false).Max(x => x.ChangeTime); var getInRecords = getDateRecords.Where(x => x.IsIn == true);
var getDeleteR = from x in getDateRecords if (getInRecords.Count() > 1)
where (minChangeTime.HasValue && x.IsIn == true && x.ChangeTime != minChangeTime) ||
(maxChangeTime.HasValue && x.IsIn == false && x.ChangeTime != maxChangeTime)
select x;
if (getDeleteR.Count() > 0)
{ {
Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteR); DateTime? minChangeTime = getInRecords.Min(x => x.ChangeTime);
Funs.DB.SubmitChanges(); var getDeleteInR = from x in getInRecords
where x.ChangeTime != minChangeTime
select x;
if (getDeleteInR.Count() > 0)
{
delCount += getDeleteInR.Count();
Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteInR);
Funs.DB.SubmitChanges();
}
}
var getOutRecords = getDateRecords.Where(x => x.IsIn == false);
if (getOutRecords.Count() > 1)
{
DateTime? maxChangeTime = getOutRecords.Max(x => x.ChangeTime);
var getDeleteOutR = from x in getOutRecords
where x.ChangeTime != maxChangeTime
select x;
if (getDeleteOutR.Count() > 0)
{
delCount += getDeleteOutR.Count();
Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteOutR);
Funs.DB.SubmitChanges();
}
}
if (delCount >= 10000)
{
return;
} }
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
if (BLL.Funs.DBList.ContainsKey(System.Threading.Thread.CurrentThread.ManagedThreadId))
{
BLL.Funs.DBList.Remove(System.Threading.Thread.CurrentThread.ManagedThreadId);
}
} }
} }
#endregion #endregion

View File

@ -746,3 +746,43 @@ IP地址:::1
出错时间:07/08/2021 20:22:22 出错时间:07/08/2021 20:22:22
错误信息开始=====>
错误类型:SqlException
错误信息:执行超时已过期。完成操作之前已超时或服务器未响应。
错误堆栈:
在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
在 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
在 System.Data.SqlClient.SqlDataReader.get_MetaData()
在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
在 System.Data.Common.DbCommand.ExecuteReader()
在 System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
在 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
在 System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
在 FineUIPro.Web.ZHGL.RealName.SynchroSet.btnDataProcess_Click(Object sender, EventArgs e) 位置 D:\WuHuan\SGGL\SGGL\FineUIPro.Web\ZHGL\RealName\SynchroSet.aspx.cs:行号 328
在 FineUIPro.Button.OnClick(EventArgs e)
在 (Button , EventArgs )
在 FineUIPro.Button.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
----错误类型:Win32Exception
----错误信息:
----等待的操作过时。
----错误堆栈:
出错时间:07/15/2021 09:40:39
出错文件:http://localhost:8118/ZHGL/RealName/SynchroSet.aspx
IP地址:::1
操作人员:JT
出错时间:07/15/2021 09:40:39

View File

@ -308,42 +308,66 @@ namespace FineUIPro.Web.ZHGL.RealName
/// <param name="e"></param> /// <param name="e"></param>
protected void btnDataProcess_Click(object sender, EventArgs e) protected void btnDataProcess_Click(object sender, EventArgs e)
{ {
var result = (from x in Funs.DB.RealName_PersonInOutNow int delCount = 0;
group x by new try
{
x.ProjectId,
date = x.ChangeTime.Value.Date,
x.IdcardNumber,
x.IsIn
} into g
where g.Count() > 1
select new
{
g.First().ProjectId,
date = g.First().ChangeTime.Value.Date,
g.First().IdcardNumber,
g.First().IsIn
}).Distinct().Take(500);
foreach (var item in result)
{ {
var getDateRecords = from x in Funs.DB.RealName_PersonInOutNow var result = (from x in Funs.DB.RealName_PersonInOutNow
where x.ProjectId == item.ProjectId && x.ChangeTime.Value >= item.date.Date && x.ChangeTime.Value < item.date.Date.AddDays(1) select new
&& x.IdcardNumber == item.IdcardNumber {
select x; x.ProjectId,
DateTime? minChangeTime = getDateRecords.Where(x => x.IsIn == true).Min(x=>x.ChangeTime); date = x.ChangeTime.Value.Date,
DateTime? maxChangeTime = getDateRecords.Where(x => x.IsIn == false).Max(x => x.ChangeTime); x.IdcardNumber,
var getDeleteR = from x in getDateRecords x.IsIn
where (minChangeTime.HasValue && x.IsIn == true && x.ChangeTime != minChangeTime) || }).Distinct();
(maxChangeTime.HasValue && x.IsIn == false && x.ChangeTime != maxChangeTime) foreach (var item in result)
select x;
if (getDeleteR.Count() > 0)
{ {
Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteR); var getDateRecords = from x in Funs.DB.RealName_PersonInOutNow
Funs.DB.SubmitChanges(); where x.ProjectId == item.ProjectId && x.ChangeTime.Value >= item.date.Date && x.ChangeTime.Value < item.date.Date.AddDays(1)
&& x.IdcardNumber == item.IdcardNumber
select x;
var getInRecords = getDateRecords.Where(x => x.IsIn == true);
if (getInRecords.Count() > 1)
{
DateTime? minChangeTime = getInRecords.Min(x => x.ChangeTime);
var getDeleteInR = from x in getInRecords
where x.ChangeTime != minChangeTime
select x;
if (getDeleteInR.Count() > 0)
{
delCount += getDeleteInR.Count();
Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteInR);
Funs.DB.SubmitChanges();
}
}
var getOutRecords = getDateRecords.Where(x => x.IsIn == false);
if (getOutRecords.Count() > 1)
{
DateTime? maxChangeTime = getOutRecords.Max(x => x.ChangeTime);
var getDeleteOutR = from x in getOutRecords
where x.ChangeTime != maxChangeTime
select x;
if (getDeleteOutR.Count() > 0)
{
delCount += getDeleteOutR.Count();
Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteOutR);
Funs.DB.SubmitChanges();
}
}
if (delCount >= 1000)
{
Alert.ShowInTop("已清理" + delCount.ToString(), MessageBoxIcon.Success);
return;
}
} }
Alert.ShowInTop("已清理" + delCount.ToString(), MessageBoxIcon.Success);
}
catch (Exception ex)
{
Alert.ShowInTop("已清理" + delCount.ToString(), MessageBoxIcon.Success);
return;
} }
Alert.ShowInTop("完成!", MessageBoxIcon.Success);
} }
} }
} }

View File

@ -756,13 +756,60 @@ namespace WebAPI.Controllers
var responeData = new Model.ResponeData(); var responeData = new Model.ResponeData();
try try
{ {
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
int maxId = 0;
var getmax = db.T_d_facerecord.Where(x => x.ProjectId == projectId && x.RoleID == "白名单").Select(x => x.ID);
if (getmax.Count() > 0)
{
maxId = getmax.Max() + 1;
}
string name = string.Empty;
string cardNo = string.Empty;
var getPerson = db.SitePerson_Person.FirstOrDefault(x => x.IdentityCard == idCard);
if (getPerson != null)
{
name = getPerson.PersonName;
cardNo = getPerson.CardNo;
}
Model.T_d_facerecord newFacerecord = new Model.T_d_facerecord()
{
NewID = SQLHelper.GetNewID(),
ProjectId = projectId,
ID = maxId + 1,
EmployName = name,
EmployNO = idCard,
RoleID = "白名单",
DateTimeRecord = changeTime,
RecordDes = "白名单:允许通行",
InOrOut = (isIn == 1 ? "进门" : "出门"),
};
db.T_d_facerecord.InsertOnSubmit(newFacerecord);
db.SubmitChanges();
///// 根据出入记录 写入考勤记录
Model.t_d_facerecordItem facerecord = new Model.t_d_facerecordItem
{
ID = maxId + 1,
EmployName = name,
IDCardNo = idCard,
EmployNO = idCard,
ProjectId = projectId,
RoleID = "白名单",
DateTimeRecord = changeTime,
RecordDes = "白名单:允许通行",
InOrOut = (isIn == 1 ? "进门" : "出门"),
};
DoorServerService.InsertEmployInOutRecord(facerecord);
}
APIPersonService.getPersonInOut(projectId, idCard, isIn, changeTime); APIPersonService.getPersonInOut(projectId, idCard, isIn, changeTime);
} }
catch (Exception ex) catch (Exception ex)
{ {
responeData.code = 0; responeData.code = 0;
responeData.message = ex.Message; responeData.message = ex.Message;
ErrLogInfo.WriteLog(ex, "WX接口-插入人员出入场记录", "PersonController.getPersonInOut"); ErrLogInfo.WriteLog(ex, "WX接口-插入人员出入场记录", "PersonController.getPersonInOut");
} }
return responeData; return responeData;
} }
@ -797,7 +844,7 @@ namespace WebAPI.Controllers
y.UnitName, y.UnitName,
y.ShortUnitName, y.ShortUnitName,
Funs.DB.ProjectData_TeamGroup.First(z => z.TeamGroupId == x.TeamGroupId).TeamGroupName, Funs.DB.ProjectData_TeamGroup.First(z => z.TeamGroupId == x.TeamGroupId).TeamGroupName,
x.Sex, Sex=x.Sex ?? "1",
Funs.DB.Base_WorkPost.First(z => z.WorkPostId == x.WorkPostId).WorkPostName, Funs.DB.Base_WorkPost.First(z => z.WorkPostId == x.WorkPostId).WorkPostName,
x.Telephone, x.Telephone,
x.Address, x.Address,
@ -806,7 +853,7 @@ namespace WebAPI.Controllers
x.ExchangeTime, x.ExchangeTime,
x.ExchangeTime2, x.ExchangeTime2,
x.PhotoUrl, x.PhotoUrl,
}).Take(200).ToList(); }).Take(400).ToList();
} }
catch (Exception ex) catch (Exception ex)
{ {