145 lines
5.4 KiB
C#
145 lines
5.4 KiB
C#
using MySql.Data.MySqlClient;
|
|
using Org.BouncyCastle.Crypto.IO;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ZktecoAttendenceService
|
|
{
|
|
internal class SaveTemplateDb
|
|
{
|
|
|
|
|
|
string empID;
|
|
string template;
|
|
int length = 0;
|
|
long empExist; long templateExist;
|
|
public void InsertFaceIntoDb(AttendanceMachine attendanceMachine, MySqlConnection connection, zkemkeeper.CZKEMClass axCZKEM1)
|
|
{
|
|
try
|
|
{
|
|
string sName;
|
|
string sPassword;
|
|
int iPrivilege;
|
|
bool bEnabled;
|
|
int machineNo = Convert.ToInt32(attendanceMachine.MachineId);
|
|
|
|
// Create a list to store emp ID and template
|
|
|
|
List<(string, string,long,long)> empTemplateList = new List<(string, string,long,long)>();
|
|
// Get all emp
|
|
while (axCZKEM1.SSR_GetAllUserInfo(machineNo, out empID, out sName, out sPassword, out iPrivilege, out bEnabled))
|
|
{
|
|
{
|
|
|
|
( empExist, templateExist) = CheckEmpInDb(empID, connection);
|
|
|
|
|
|
if (templateExist == 0 )
|
|
{
|
|
|
|
if (axCZKEM1.GetUserFaceStr(machineNo, empID, 50, ref template, ref length))
|
|
{
|
|
Console.WriteLine("User ID: " + empID + " Name: " + sName + " Template: " + template + " Length: " + length);
|
|
// Store emp ID and template in the list
|
|
empTemplateList.Add((empID, template,empExist, templateExist));
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//axCZKEM1.EnableDevice(machineNo, true);
|
|
//axCZKEM1.Disconnect();
|
|
|
|
|
|
SaveInDb(empTemplateList, connection);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// Handle exception
|
|
}
|
|
}
|
|
//save template to db with emp id and template parameter
|
|
public void SaveInDb(List<(string, string, long, long)> empTemplateList, MySqlConnection connection)
|
|
{
|
|
|
|
foreach (var item in empTemplateList)
|
|
{
|
|
|
|
long empExist = item.Item3;
|
|
long empTemplateExist = item.Item4;
|
|
if (empExist == 0 && empTemplateExist == 0)
|
|
{
|
|
string insertQuery = "INSERT INTO attendance_machine_face_templates (serial_no, template_zkteco, created_date) VALUES (@emp_id, @template, @created_date)";
|
|
|
|
MySqlCommand command = new MySqlCommand(insertQuery, connection);
|
|
|
|
command.Parameters.AddWithValue("@emp_id", item.Item1);
|
|
command.Parameters.AddWithValue("@template", item.Item2);
|
|
command.Parameters.AddWithValue("@created_date", DateTime.Now);
|
|
command.ExecuteNonQuery();
|
|
command.Parameters.Clear();
|
|
Console.WriteLine("Emp id " + item.Item1 + " Inserted");
|
|
}
|
|
if (empExist == 1 && empTemplateExist == 0)
|
|
{
|
|
string updateQuery = "UPDATE attendance_machine_face_templates set template_zkteco = @template where serial_no = @emp_id and is_active = 1";
|
|
MySqlCommand command = new MySqlCommand(updateQuery, connection);
|
|
|
|
command.Parameters.AddWithValue("@emp_id", item.Item1);
|
|
command.Parameters.AddWithValue("@template", item.Item2);
|
|
command.Parameters.AddWithValue("@created_date", DateTime.Now);
|
|
command.ExecuteNonQuery();
|
|
command.Parameters.Clear();
|
|
Console.WriteLine("Employee already exist");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public (long EmpExist, long TemplateExist) CheckEmpInDb(string empId, MySqlConnection connection)
|
|
{
|
|
string query = @"
|
|
SELECT
|
|
COUNT(*) AS EmpExist,
|
|
CASE
|
|
WHEN COUNT(*) = 0 THEN 0 -- If no employee exists, set TemplateExist to 0
|
|
ELSE SUM(CASE WHEN template_zkteco IS NULL THEN 0 ELSE 1 END)
|
|
END AS TemplateExist
|
|
FROM attendance_machine_face_templates
|
|
WHERE is_active = 1 AND serial_no = @emp_id";
|
|
|
|
using (MySqlCommand command = new MySqlCommand(query, connection))
|
|
{
|
|
command.Parameters.AddWithValue("@emp_id", empId);
|
|
|
|
if (connection.State != ConnectionState.Open)
|
|
{
|
|
connection.Open();
|
|
}
|
|
|
|
using (MySqlDataReader reader = command.ExecuteReader())
|
|
{
|
|
if (reader.Read())
|
|
{
|
|
long empExist = reader.GetInt64(0); // First column (EmpExist)
|
|
long templateExist = reader.GetInt64(1); // Second column (TemplateExist)
|
|
|
|
return (empExist, templateExist);
|
|
}
|
|
}
|
|
}
|
|
|
|
//close connection
|
|
connection.Close();
|
|
return (0, 0); // Return (0, 0) if no data is found
|
|
}
|
|
}
|
|
|
|
}
|