Zkteco_Attendance_Service/DevicePolling/MachineUsers/AttendanceMachineUserDAO.cs

237 lines
8.9 KiB
C#

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace ZktecoAttendenceService
{
class AttendanceMachineUserDAO
{
static bool result;
public zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass();
List<string> responses;
bool MachineOutput = true;
public AttendanceMachineUserDAO() { }
AttendanceMachine machine = new AttendanceMachine();
public void Add(AttendanceMachineUser attendanceMachineUser, MySqlConnection connection)
{
string query = "REPLACE INTO `hrms`.`attendance_machine_user` (`machine_id`, `serial_number`, `employee_name`) VALUES (@MachineId, @SerialNumber, @EmployeeName)";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.Parameters.AddWithValue("@machineId", attendanceMachineUser.MachineId);
cmd.Parameters.AddWithValue("@SerialNumber", attendanceMachineUser.SerialNumber);
cmd.Parameters.AddWithValue("@EmployeeName", attendanceMachineUser.EmployeeName);
cmd.ExecuteNonQuery();
}
public List<AttendanceMachineUser> getAllEmployees(MySqlConnection connection)
{
List<AttendanceMachineUser> DBusers = null;
string query = "select * from hrms.attendance_machine_user where is_deleted = 0";
MySqlCommand cmd = new MySqlCommand(query, connection);
MySqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
{
DBusers = getDBUsers(reader);
reader.Close();
}
return DBusers;
}
public DataTable getAllEmployees_MachineWise(MySqlConnection connection, string MachineID)
{
DataTable DBusers = new DataTable();
string query = "select * from hrms.attendance_machine_user a where a.machine_id = '" + MachineID + "' and a.is_deleted = 0 ";
MySqlCommand cmd = new MySqlCommand(query, connection);
MySqlDataAdapter AdtMysql = new MySqlDataAdapter();
AdtMysql.SelectCommand = cmd;
AdtMysql.Fill(DBusers);
return DBusers;
}
private List<AttendanceMachineUser> getDBUsers(MySqlDataReader reader)
{
List<AttendanceMachineUser> DbUsers = new List<AttendanceMachineUser>();
while (reader.Read())
{
DbUsers.Add(GetDbUsers(reader));
}
return DbUsers;
}
private AttendanceMachineUser GetDbUsers(MySqlDataReader reader)
{
return new AttendanceMachineUser(
reader.IsDBNull(0) ? "" : reader.GetString("machine_id"),
reader.IsDBNull(1) ? "" : reader.GetString("serial_number"),
reader.IsDBNull(2) ? "" : reader.GetString("employee_name"),
reader.IsDBNull(3) ? default(int) : reader.GetInt16("is_deletion_requested"),
reader.IsDBNull(4) ? default(int) : reader.GetInt16("is_deleted")
);
}
string DTvalue;
public List<string> saveMachineUsers(DataTable DBusersMachineWise, List<string> response, MySqlConnection mySqlConnection,string machineID)
{
List<string> responses = new List<string>();
// Create a HashSet to store all values in the DataTable for faster lookup
HashSet<string> dbValues = new HashSet<string>();
foreach (DataRow row in DBusersMachineWise.Rows)
{
string dbValue = row["serial_number"].ToString();
dbValues.Add(dbValue);
}
foreach (string value in response)
{
if (!dbValues.Contains(value))
{
// Value not found in the DataTable
Console.WriteLine("Save in db" + value);
// You may want to add more logic here based on your requirements
AttendanceMachineUser addinDb = new AttendanceMachineUser(machineID, value, "", 0, 0);
Add(addinDb, mySqlConnection);
responses.Add(value + "--> Save in db");
}
}
return responses;
}
bool Bconnect = false;
public void DeleteFaceTemplate(AttendanceMachine machine, int Emp_ID, List<string> responses)
{
Bconnect = axCZKEM1.Connect_Net(machine.MachineIp, machine.PortNumber);
axCZKEM1.EnableDevice(Convert.ToInt32(machine.MachineId), false);//disable the device
try
{
if (Bconnect == true)
{
axCZKEM1.SSR_DeleteEnrollData(Convert.ToInt32(machine.MachineId), Emp_ID.ToString(), 12);
Console.WriteLine(Emp_ID + " removed from " + machine.MachineId);
responses.Add(Emp_ID + " removed from " + machine.MachineId);
MachineOutput = true;
axCZKEM1.EnableDevice(Convert.ToInt32(machine.MachineId), true);
axCZKEM1.Disconnect();
}
else
{
}
}
catch (Exception ex)
{
}
}
public List<string> DeleteFromDbAndMachine(List<string> objDetail_Final, AttendanceMachine machine, MySqlConnection connection)
{
List<string> responses = new List<string>();
DataTable TableMachineUsers = new DataTable();
TableMachineUsers = getAllEmployees_MachineWise(connection, machine.MachineId);
DataColumn isProcessedColumn = TableMachineUsers.Columns.Add("IsProcessed", typeof(bool));
foreach (DataRow row in TableMachineUsers.Rows)
{
// Set the value of the "IsProcessed" column to true for each row
row["IsProcessed"] = false;
}
if (TableMachineUsers.Rows.Count > 0)
{
foreach (DataRow dr in TableMachineUsers.Rows)
{
//string serial_no = "=" + '"' + dr["serial_number"].ToString() + '"' + ' ';
string serial_no = dr["serial_number"].ToString();
if (objDetail_Final.Contains(serial_no))
{
if (dr["is_deletion_requested"].ToString() == "1")
{
//removing face template
DeleteFaceTemplate(machine, Convert.ToInt32(serial_no), responses);
//Updating flag in db
if (MachineOutput == true)
{
UpdateFlag_InMachineUsers(machine.MachineId, serial_no, connection);
dr["IsProcessed"] = true;
}
}
}
else
{
if (dr["is_deleted"].ToString() == "0")
{
//UPDATE FLAG IN DATABASE
UpdateFlag_InMachineUsers(machine.MachineId, serial_no, connection);
responses.Add(serial_no + " marked deleted in db --> " + machine.MachineId);
Console.WriteLine(serial_no + " marked deleted in db --> " + machine.MachineId);
}
}
}
// Save Machine Users In Db
responses.AddRange(saveMachineUsers(TableMachineUsers, objDetail_Final,connection, machine.MachineId));
}
else
{
for (int i = 0; i < objDetail_Final.Count; i++)
{
string value = objDetail_Final[i].ToString();
AttendanceMachineUser temp = new AttendanceMachineUser(machine.MachineId, value, "", 0, 0);
Add(temp, connection);
}
}
return responses;
}
public void UpdateTotalEmpInMachines(string machine_id, int total_users, MySqlConnection connection)
{
string query = "UPDATE `hrms`.`attendance_machine` SET `total_users` =" + total_users + " WHERE `machine_id` = '" + machine_id + "'";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.ExecuteNonQuery();
}
public void UpdateFlag_InMachineUsers(string machine_id, string serial_no, MySqlConnection connection)
{
string query = "UPDATE `hrms`.`attendance_machine_user` SET `is_deleted` = 1 WHERE `machine_id` = '" + machine_id + "' and serial_number = " + serial_no + "";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.ExecuteNonQuery();
}
}
}