202 lines
8.2 KiB
C#
202 lines
8.2 KiB
C#
using MySql.Data.MySqlClient;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace HanvonF710XAttendanceService
|
|
{
|
|
internal class AttendanceMachineUserDAO
|
|
{
|
|
public AttendanceMachineUserDAO() { }
|
|
public void Add(AttendanceMachineUser attendanceMachineUser, MySqlConnection connection)
|
|
{
|
|
// Ensure synced users are active and clear any pending deletion request.
|
|
const string query =
|
|
"REPLACE INTO `hrms`.`attendance_machine_user` " +
|
|
"(`machine_id`, `serial_number`, `employee_name`, `is_deletion_requested`, `is_deleted`, `updated_by`, `updated_at`) " +
|
|
"VALUES (@MachineId, @SerialNumber, @EmployeeName, 0, 0, @UpdatedBy, @UpdatedAt)";
|
|
|
|
using (var cmd = new MySqlCommand(query, connection))
|
|
{
|
|
cmd.Parameters.AddWithValue("@MachineId", attendanceMachineUser.MachineId);
|
|
cmd.Parameters.AddWithValue("@SerialNumber", attendanceMachineUser.SerialNumber);
|
|
cmd.Parameters.AddWithValue("@EmployeeName", attendanceMachineUser.EmployeeName);
|
|
cmd.Parameters.AddWithValue("@UpdatedBy", "SERVICE");
|
|
cmd.Parameters.AddWithValue("@UpdatedAt", DateTime.Now);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
}
|
|
|
|
public List<AttendanceMachineUser> getActiveEmployees(MySqlConnection connection)
|
|
{
|
|
const string query =
|
|
"SELECT machine_id, serial_number, employee_name " +
|
|
"FROM hrms.attendance_machine_user " +
|
|
"WHERE is_deleted = 0";
|
|
using (var cmd = new MySqlCommand(query, connection))
|
|
{
|
|
cmd.CommandTimeout = 120;
|
|
using (var reader = cmd.ExecuteReader())
|
|
{
|
|
return getDBUsers(reader);
|
|
}
|
|
}
|
|
}
|
|
|
|
public List<string> GetDeletionRequestedSerials(MySqlConnection connection, string machineId)
|
|
{
|
|
var serials = new List<string>();
|
|
const string query =
|
|
"SELECT serial_number " +
|
|
"FROM hrms.attendance_machine_user " +
|
|
"WHERE machine_id = @MachineId AND is_deletion_requested = 1 AND is_deleted = 0";
|
|
using (var cmd = new MySqlCommand(query, connection))
|
|
{
|
|
cmd.CommandTimeout = 60;
|
|
cmd.Parameters.AddWithValue("@MachineId", machineId);
|
|
using (var reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (!reader.IsDBNull(0))
|
|
{
|
|
var s = reader.GetString(0);
|
|
if (!string.IsNullOrWhiteSpace(s))
|
|
serials.Add(s.Trim());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return serials;
|
|
}
|
|
|
|
public int MarkUserDeleted(MySqlConnection connection, string machineId, string serialNumber)
|
|
{
|
|
const string query =
|
|
"UPDATE hrms.attendance_machine_user " +
|
|
"SET is_deleted = 1, is_deletion_requested = 0, updated_by = @UpdatedBy, updated_at = @UpdatedAt " +
|
|
"WHERE machine_id = @MachineId AND serial_number = @SerialNumber AND is_deleted = 0";
|
|
using (var cmd = new MySqlCommand(query, connection))
|
|
{
|
|
cmd.CommandTimeout = 60;
|
|
cmd.Parameters.AddWithValue("@UpdatedBy", "SERVICE");
|
|
cmd.Parameters.AddWithValue("@UpdatedAt", DateTime.Now);
|
|
cmd.Parameters.AddWithValue("@MachineId", machineId);
|
|
cmd.Parameters.AddWithValue("@SerialNumber", serialNumber);
|
|
return cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
|
|
public List<AttendanceMachineUser> getAllEmployees(MySqlConnection connection)
|
|
{
|
|
string query = "SELECT machine_id, serial_number, employee_name FROM hrms.attendance_machine_user";
|
|
using (var cmd = new MySqlCommand(query, connection))
|
|
{
|
|
cmd.CommandTimeout = 120;
|
|
using (var reader = cmd.ExecuteReader())
|
|
{
|
|
return getDBUsers(reader);
|
|
}
|
|
}
|
|
}
|
|
|
|
public string GetEmployeeNameForMachine(MySqlConnection connection, string machineId, string serialNumber)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(machineId) || string.IsNullOrWhiteSpace(serialNumber)) return null;
|
|
const string query =
|
|
"SELECT employee_name FROM hrms.attendance_machine_user " +
|
|
"WHERE machine_id = @MachineId AND serial_number = @SerialNumber AND is_deleted = 0 LIMIT 1";
|
|
using (var cmd = new MySqlCommand(query, connection))
|
|
{
|
|
cmd.CommandTimeout = 60;
|
|
cmd.Parameters.AddWithValue("@MachineId", machineId);
|
|
cmd.Parameters.AddWithValue("@SerialNumber", serialNumber.Trim());
|
|
var result = cmd.ExecuteScalar();
|
|
if (result == null || result == DBNull.Value) return null;
|
|
var name = result.ToString()?.Trim();
|
|
return string.IsNullOrWhiteSpace(name) ? null : name;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// True when attendance_machine_user has an active row for this machine + device serial.
|
|
/// </summary>
|
|
public bool IsActiveRegistered(MySqlConnection connection, string machineId, string serialNumber)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(machineId) || string.IsNullOrWhiteSpace(serialNumber))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
const string query =
|
|
"SELECT 1 FROM hrms.attendance_machine_user " +
|
|
"WHERE machine_id = @MachineId AND serial_number = @SerialNumber AND is_deleted = 0 LIMIT 1";
|
|
using (var cmd = new MySqlCommand(query, connection))
|
|
{
|
|
cmd.CommandTimeout = 60;
|
|
cmd.Parameters.AddWithValue("@MachineId", machineId);
|
|
cmd.Parameters.AddWithValue("@SerialNumber", serialNumber.Trim());
|
|
var result = cmd.ExecuteScalar();
|
|
return result != null && result != DBNull.Value;
|
|
}
|
|
}
|
|
|
|
public HashSet<string> GetActiveSerialNumbersForMachine(MySqlConnection connection, string machineId)
|
|
{
|
|
var serials = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
|
if (string.IsNullOrWhiteSpace(machineId))
|
|
{
|
|
return serials;
|
|
}
|
|
|
|
const string query =
|
|
"SELECT serial_number FROM hrms.attendance_machine_user " +
|
|
"WHERE machine_id = @MachineId AND is_deleted = 0";
|
|
using (var cmd = new MySqlCommand(query, connection))
|
|
{
|
|
cmd.CommandTimeout = 120;
|
|
cmd.Parameters.AddWithValue("@MachineId", machineId);
|
|
using (var reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (reader.IsDBNull(0)) continue;
|
|
var s = reader.GetString(0)?.Trim();
|
|
if (!string.IsNullOrWhiteSpace(s))
|
|
{
|
|
serials.Add(s);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return serials;
|
|
}
|
|
|
|
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(1) ? "" : reader.GetString("serial_number")
|
|
|
|
);
|
|
}
|
|
}
|
|
}
|