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 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 getAllEmployees(MySqlConnection connection) { List 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 getDBUsers(MySqlDataReader reader) { List DbUsers = new List(); 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 saveMachineUsers(DataTable DBusersMachineWise, List response, MySqlConnection mySqlConnection,string machineID) { List responses = new List(); // Create a HashSet to store all values in the DataTable for faster lookup HashSet dbValues = new HashSet(); 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 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 DeleteFromDbAndMachine(List objDetail_Final, AttendanceMachine machine, MySqlConnection connection) { List responses = new List(); 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(); } } }