diff --git a/SGGL/BLL/ZHGL/RealName/RealNameMonitorService.cs b/SGGL/BLL/ZHGL/RealName/RealNameMonitorService.cs
index 760c39cc..ed7844a0 100644
--- a/SGGL/BLL/ZHGL/RealName/RealNameMonitorService.cs
+++ b/SGGL/BLL/ZHGL/RealName/RealNameMonitorService.cs
@@ -102,7 +102,7 @@ namespace BLL
AutoReset = true
};
InOutmessageTimer.Elapsed += new ElapsedEventHandler(PersonInOutProcess);
- InOutmessageTimer.Interval = 1000 * 60 * 60;// 60分钟 60000 * adTimeJ;
+ InOutmessageTimer.Interval = 1000 * 60 * 30;// 60分钟 60000 * adTimeJ;
InOutmessageTimer.Start();
}
@@ -113,46 +113,65 @@ namespace BLL
/// 事件参数
private static void PersonInOutProcess(object sender, ElapsedEventArgs e)
{
+ int delCount = 0;
try
{
var result = (from x in Funs.DB.RealName_PersonInOutNow
- group x by new
+ select new
{
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();
-
foreach (var item in result)
{
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)
&& x.IdcardNumber == item.IdcardNumber
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 getDeleteR = from x in getDateRecords
- where (minChangeTime.HasValue && x.IsIn == true && x.ChangeTime != minChangeTime) ||
- (maxChangeTime.HasValue && x.IsIn == false && x.ChangeTime != maxChangeTime)
- select x;
- if (getDeleteR.Count() > 0)
+
+ var getInRecords = getDateRecords.Where(x => x.IsIn == true);
+ if (getInRecords.Count() > 1)
{
- Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteR);
- Funs.DB.SubmitChanges();
+ 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 >= 10000)
+ {
+ return;
}
}
}
catch (Exception ex)
{
+ if (BLL.Funs.DBList.ContainsKey(System.Threading.Thread.CurrentThread.ManagedThreadId))
+ {
+ BLL.Funs.DBList.Remove(System.Threading.Thread.CurrentThread.ManagedThreadId);
+ }
}
}
#endregion
diff --git a/SGGL/FineUIPro.Web/ErrLog.txt b/SGGL/FineUIPro.Web/ErrLog.txt
index c9edd1ef..84309085 100644
--- a/SGGL/FineUIPro.Web/ErrLog.txt
+++ b/SGGL/FineUIPro.Web/ErrLog.txt
@@ -746,3 +746,43 @@ IP地址:::1
出错时间: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.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
+
diff --git a/SGGL/FineUIPro.Web/ZHGL/RealName/SynchroSet.aspx.cs b/SGGL/FineUIPro.Web/ZHGL/RealName/SynchroSet.aspx.cs
index b1589406..5792449c 100644
--- a/SGGL/FineUIPro.Web/ZHGL/RealName/SynchroSet.aspx.cs
+++ b/SGGL/FineUIPro.Web/ZHGL/RealName/SynchroSet.aspx.cs
@@ -308,42 +308,66 @@ namespace FineUIPro.Web.ZHGL.RealName
///
protected void btnDataProcess_Click(object sender, EventArgs e)
{
- var result = (from x in Funs.DB.RealName_PersonInOutNow
- group x by new
- {
- 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)
+ int delCount = 0;
+ try
{
- 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)
- && x.IdcardNumber == item.IdcardNumber
- 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 getDeleteR = from x in getDateRecords
- where (minChangeTime.HasValue && x.IsIn == true && x.ChangeTime != minChangeTime) ||
- (maxChangeTime.HasValue && x.IsIn == false && x.ChangeTime != maxChangeTime)
- select x;
- if (getDeleteR.Count() > 0)
+ var result = (from x in Funs.DB.RealName_PersonInOutNow
+ select new
+ {
+ x.ProjectId,
+ date = x.ChangeTime.Value.Date,
+ x.IdcardNumber,
+ x.IsIn
+ }).Distinct();
+ foreach (var item in result)
{
- Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteR);
- Funs.DB.SubmitChanges();
+ 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)
+ && 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);
}
}
}
\ No newline at end of file
diff --git a/SGGL/WebAPI/Controllers/PersonController.cs b/SGGL/WebAPI/Controllers/PersonController.cs
index f1e42b5d..7bf9e5ad 100644
--- a/SGGL/WebAPI/Controllers/PersonController.cs
+++ b/SGGL/WebAPI/Controllers/PersonController.cs
@@ -756,13 +756,60 @@ namespace WebAPI.Controllers
var responeData = new Model.ResponeData();
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);
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = ex.Message;
- ErrLogInfo.WriteLog(ex, "WX接口-插入人员出入场记录", "PersonController.getPersonInOut");
+ ErrLogInfo.WriteLog(ex, "WX接口-插入人员出入场记录", "PersonController.getPersonInOut");
}
return responeData;
}
@@ -797,7 +844,7 @@ namespace WebAPI.Controllers
y.UnitName,
y.ShortUnitName,
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,
x.Telephone,
x.Address,
@@ -806,7 +853,7 @@ namespace WebAPI.Controllers
x.ExchangeTime,
x.ExchangeTime2,
x.PhotoUrl,
- }).Take(200).ToList();
+ }).Take(400).ToList();
}
catch (Exception ex)
{