|
@@ -65,7 +65,7 @@ namespace ImpulseVision
|
|
|
|
|
|
public struct VisitInput
|
|
|
{
|
|
|
- public string FIO, TimeEntrance, TimeExit;
|
|
|
+ public string FIO, TimeEntrance, TimeExit, Identification;
|
|
|
}
|
|
|
List<VisitInput> LstVisitInput = new List<VisitInput>();
|
|
|
|
|
@@ -696,9 +696,16 @@ namespace ImpulseVision
|
|
|
/// <summary>
|
|
|
/// добавление в БД информации о входе
|
|
|
/// </summary>
|
|
|
- /// <param name="sender"></param>
|
|
|
- /// <param name="e"></param>
|
|
|
private void BtnSkip_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ RegisterVisit(1);
|
|
|
+ GetVisits();
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// регистрация посещения
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="IsIdentification">успешность идентификации (1-успешно, 0- нет)</param>
|
|
|
+ private void RegisterVisit(int IsIdentification)
|
|
|
{
|
|
|
if (!IsRecognized)
|
|
|
{
|
|
@@ -708,9 +715,30 @@ namespace ImpulseVision
|
|
|
|
|
|
if (RbtIn.Checked)
|
|
|
{
|
|
|
+ if (IsIdentification == 1)
|
|
|
+ {
|
|
|
+ #region Предупреждение при попытке повторной идентификации пользователя за один день
|
|
|
+ SCon.Open();
|
|
|
+ string QueryCheckExistsVisit = $@"select Count(ID) as Cnt
|
|
|
+from UserTraffic
|
|
|
+where UserID = '{CurrentUserID}' and [Date] = CAST(GETDATE() as date)";
|
|
|
+ SqlCommand CmdCheckVisit = new SqlCommand(QueryCheckExistsVisit, SCon);
|
|
|
+ SqlDataReader Res = CmdCheckVisit.ExecuteReader();
|
|
|
+ Res.Read();
|
|
|
+ int n = int.Parse(Res["Cnt"].ToString());
|
|
|
+ if (n >= 1)
|
|
|
+ {
|
|
|
+ MessageBox.Show("Сегодня данный пользователь уже прошёл идентификацию при входе!", "ImpulseVision", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
|
+ SCon.Close();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ SCon.Close();
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+
|
|
|
SCon.Open();
|
|
|
string QueryAddVisit = $@"set dateformat dmy insert into UserTraffic (UserID,TimeEntrance,Identification,[Date])
|
|
|
-values ('{CurrentUserID}','{DateTime.Now.ToString("HH:mm:ss")}','1','{DateTime.Now.ToString("dd.MM.yyyy")}')";
|
|
|
+values ('{CurrentUserID}','{DateTime.Now.ToString("HH:mm:ss")}','{IsIdentification}','{DateTime.Now.ToString("dd.MM.yyyy")}')";
|
|
|
SqlCommand Cmd = new SqlCommand(QueryAddVisit, SCon);
|
|
|
Cmd.ExecuteNonQuery();
|
|
|
SCon.Close();
|
|
@@ -725,23 +753,22 @@ where UserID = '{CurrentUserID}' and [Date] = cast(GETDATE() as date) and TimeEx
|
|
|
";
|
|
|
SqlCommand CmdCheck = new SqlCommand(QueryCheckRecord, SCon);
|
|
|
SqlDataReader Res = CmdCheck.ExecuteReader();
|
|
|
- if(!Res.HasRows)
|
|
|
+ if (!Res.HasRows)
|
|
|
{
|
|
|
MessageBox.Show("Нельзя отметить выход пользователя, если он ещё не входил!", "ImpulseVision", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
|
SCon.Close();
|
|
|
return;
|
|
|
}
|
|
|
SCon.Close();
|
|
|
-
|
|
|
+ //!!! Выход пользователя, который не прошёл идентификацию не регистрируется
|
|
|
SCon.Open();
|
|
|
string QueryTimeExit = $@"update UserTraffic
|
|
|
set TimeExit = '{DateTime.Now.ToString("HH:mm:ss")}'
|
|
|
-where UserID = '{CurrentUserID}' and [Date] = cast(GETDATE() as date)";
|
|
|
+where UserID = '{CurrentUserID}' and [Date] = cast(GETDATE() as date) ";
|
|
|
SqlCommand Cmd = new SqlCommand(QueryTimeExit, SCon);
|
|
|
Cmd.ExecuteNonQuery();
|
|
|
SCon.Close();
|
|
|
}
|
|
|
- GetVisits();
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// получение списка посещений за текущую дату
|
|
@@ -749,7 +776,7 @@ where UserID = '{CurrentUserID}' and [Date] = cast(GETDATE() as date)";
|
|
|
private void GetVisits()
|
|
|
{
|
|
|
SCon.Open();
|
|
|
- string QueryGetVisits = $@"select Users.Lastname+' '+Users.Firstname + ' ' + Users.Patronymic as FIO, TimeEntrance,TimeExit
|
|
|
+ string QueryGetVisits = $@"select Users.Lastname+' '+Users.Firstname + ' ' + Users.Patronymic as FIO, TimeEntrance,TimeExit, Identification
|
|
|
from UserTraffic ut join Users on ut.UserID = Users.ID
|
|
|
where ut.[Date] = cast(GETDATE() as date)";
|
|
|
|
|
@@ -764,6 +791,7 @@ where ut.[Date] = cast(GETDATE() as date)";
|
|
|
visit.FIO = Res["FIO"].ToString();
|
|
|
visit.TimeEntrance = Res["TimeEntrance"].ToString();
|
|
|
visit.TimeExit = Res["TimeExit"].ToString();
|
|
|
+ visit.Identification = Res["Identification"].ToString();
|
|
|
LstVisitInput.Add(visit);
|
|
|
}
|
|
|
}
|
|
@@ -773,6 +801,11 @@ where ut.[Date] = cast(GETDATE() as date)";
|
|
|
foreach (VisitInput item in LstVisitInput)
|
|
|
{
|
|
|
DgbInput.Rows.Add(item.FIO + $" {item.TimeEntrance}");
|
|
|
+ if (item.Identification.ToLower() == "false")
|
|
|
+ {
|
|
|
+ DgbInput.Rows[DgbInput.RowCount - 1].DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#E84855");
|
|
|
+ DgbInput.Rows[DgbInput.RowCount - 1].DefaultCellStyle.ForeColor = Color.White;
|
|
|
+ }
|
|
|
}
|
|
|
DgbOutput.Rows.Clear();
|
|
|
string STime = string.Empty;
|
|
@@ -782,8 +815,31 @@ where ut.[Date] = cast(GETDATE() as date)";
|
|
|
if (STime != string.Empty)
|
|
|
{
|
|
|
DgbOutput.Rows.Add(item.FIO + $" {STime}");
|
|
|
+ if (item.Identification.ToLower() == "false")
|
|
|
+ {
|
|
|
+ DgbInput.Rows[DgbInput.RowCount - 1].DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#E84855");
|
|
|
+ DgbInput.Rows[DgbInput.RowCount - 1].DefaultCellStyle.ForeColor = Color.White;
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void BtnReject_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ RegisterVisit(0);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Image<Bgr, byte> Img = BgrFrame.Copy();
|
|
|
+ string PathLog = Application.StartupPath + $"\\Source\\log\\{"User_" + CurrentUserID + "_" + DateTime.Now.ToString("HHmmss") + "_" + DateTime.Now.ToString("dd.MM.yyyy") + "_" + Guid.NewGuid().ToString().Substring(0, 4)}.bmp";
|
|
|
+ Img.Save(PathLog);
|
|
|
}
|
|
|
+ catch(Exception ex)
|
|
|
+ {
|
|
|
+ MessageBox.Show(ex.Message, "ImpulseVision", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
+ }
|
|
|
+ GetVisits();
|
|
|
}
|
|
|
}
|
|
|
}
|