using System; using System.Collections.Generic; using System.Text; namespace HanvonF710XAttendanceService { internal sealed class DbToDeviceFailedEmployee { public string SerialNumber { get; set; } = ""; public string Name { get; set; } = ""; public string Department { get; set; } = ""; public string MachineId { get; set; } = ""; public string MachineIp { get; set; } = ""; public string MachineType { get; set; } = ""; public string Reason { get; set; } = ""; } internal sealed class DbToDeviceMissingMappingEmployee { public string SerialNumber { get; set; } = ""; public string MachineId { get; set; } = ""; public string MachineIp { get; set; } = ""; public string MachineType { get; set; } = ""; } internal sealed class DbToDeviceTargetSummary { public string MachineId { get; set; } = ""; public string MachineIp { get; set; } = ""; public string MachineType { get; set; } = ""; public int AlreadyRegistered { get; set; } public int NewlyRegistered { get; set; } public int Failed { get; set; } public List FailedEmployees { get; } = new List(); public List MissingMappings { get; } = new List(); public void AddFailure(string serial, string name, string department, string reason) { Failed++; FailedEmployees.Add(new DbToDeviceFailedEmployee { SerialNumber = serial ?? "", Name = name ?? "", Department = department ?? "", MachineId = MachineId, MachineIp = MachineIp, MachineType = MachineType, Reason = reason ?? "" }); } public void AddMissingMapping(string serial) { MissingMappings.Add(new DbToDeviceMissingMappingEmployee { SerialNumber = serial ?? "", MachineId = MachineId, MachineIp = MachineIp, MachineType = MachineType }); } public string FormatReport() { var sb = new StringBuilder(); sb.AppendLine("================================="); sb.AppendLine("DB_TO_DEVICE SUMMARY"); sb.AppendLine("================================="); sb.AppendLine(); sb.AppendLine("Target:"); sb.AppendLine("Machine ID: " + MachineId); sb.AppendLine("IP: " + MachineIp); sb.AppendLine("Type: " + MachineType); sb.AppendLine(); sb.AppendLine("Already Registered: " + AlreadyRegistered); sb.AppendLine(); sb.AppendLine("Newly Registered: " + NewlyRegistered); sb.AppendLine(); sb.AppendLine("Failed: " + Failed); sb.AppendLine(); sb.AppendLine("Missing Employee Mapping: " + MissingMappings.Count); if (MissingMappings.Count > 0) { sb.AppendLine(); foreach (var miss in MissingMappings) { sb.AppendLine("Serial: " + miss.SerialNumber); sb.AppendLine("Machine ID: " + miss.MachineId); sb.AppendLine("Machine IP: " + miss.MachineIp); sb.AppendLine("Machine Type: " + miss.MachineType); sb.AppendLine("Reason: No employee row for serial_number_int"); sb.AppendLine(); } } else { sb.AppendLine(); } if (FailedEmployees.Count > 0) { sb.AppendLine("Failed Employees:"); sb.AppendLine(); foreach (var fail in FailedEmployees) { sb.AppendLine("Serial: " + fail.SerialNumber); sb.AppendLine("Name: " + fail.Name); sb.AppendLine("Department: " + fail.Department); sb.AppendLine("Machine ID: " + fail.MachineId); sb.AppendLine("Machine IP: " + fail.MachineIp); sb.AppendLine("Machine Type: " + fail.MachineType); sb.AppendLine("Reason: " + fail.Reason); sb.AppendLine(); } } return sb.ToString().TrimEnd() + Environment.NewLine; } } internal static class DbToDeviceSkipLogic { public static bool ShouldSkipAlreadyRegistered(ISet registeredSerials, string employeeSerial) { if (registeredSerials == null || string.IsNullOrWhiteSpace(employeeSerial)) { return false; } return registeredSerials.Contains(employeeSerial.Trim()); } } }