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
@@ -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
/// <param name="e">事件参数</param>
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