Files
Checador-Desktop/ADSUtileriasService/ChecadorController/LogicChecador.cs

204 lines
9.0 KiB
C#

using ADSNetLibrary.Application.Conexiones.Local;
using ADSNetLibrary.Helpers.Conexiones.LocalSQLite;
using ADSNetLibrary.Helpers.Conexiones.ZkTeckoLib;
using ADSNetLibrary.SIGAPI.Models.RH.Request;
using ADSUtileriasService.Conexion.SIG;
using ADSUtileriasService.Helpers;
using DocumentFormat.OpenXml.Wordprocessing;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ADSUtileriasService.ChecadorController
{
public class LogicChecador
{
public static Timer timerchecador;
static int mmTiempo = 900000;// 15 minutos
public static bool SyncLocaldato()
{
//10min
//mmTiempo = 3000; // 30 segundos
Mod.GuardaLog("timmer", LogsNames.Log);
timerchecador = new Timer(ontimerchecador, $"multithread executed... tiempo de envio {mmTiempo} milisegundos.", 0, mmTiempo); //1200000 //2400000 // 3600000);
Mod.GuardaLog("timmer executed", LogsNames.Log);
return true;
}
static void ontimerchecador(object data)
{
// This runs on a pooled thread
//Console.WriteLine(data); // Writes "multithread executed..."
Mod.GuardaLog($"timmer executed {mmTiempo}", LogsNames.Log);
try
{
RHSIG rhsig = new RHSIG();
using (SqlLiteBase bd = new SqlLiteBase(""))
{
UtileriasSqlite utilsqlite = new UtileriasSqlite(bd);
var devicelist = utilsqlite.GETChecadoresActivos();
foreach (ADSNetLibrary.SIGAPI.Models.RH.Response.ResponseGetChecadoresModel devicemodel in devicelist)
{
Mod.GuardaLog($"Checador Actual {devicemodel.checador} {devicemodel.iPLocal} {devicemodel.puerto} CveChecado: {devicemodel.cveChecador} CveEmpresa:{devicemodel.CveEmpresa} CveSubpryecto:{devicemodel.cveSubProyecto} ", LogsNames.Log);
SDKZkTeckoHelper libvalidacion = new SDKZkTeckoHelper();
List<PersonalChecadorIDResponse> personalsig = new List<PersonalChecadorIDResponse>();
var checks = rhsig.PersonalChecadorID(new Conexion.SIG.RequestPersonalChecadorID() { CvePersonal=-1, ChecadorID="-1", CveChecador = devicemodel.cveChecador });
if (checks != null)
{
personalsig = checks.Result;
}
ADSNetLibrary.SIGAPI.Models.ResponseModel<List<RegistroPersonalChecador>> registros = null;
ADSNetLibrary.SIGAPI.Models.ResponseModel<List<ResponseUser>> users = null;
//int contadorRegistros = 0;
using (ApiZKTeco device = new ApiZKTeco(devicemodel.iPLocal, devicemodel.puerto.ToEntero()))
{
registros = device.GetChecadorRegistroEmpleado(DateTime.Now.AddDays(-30), DateTime.Now.AddMonths(1));
bool continuarx = false;
while (continuarx && (registros == null || !registros.IsSuccess))
{
registros = device.GetChecadorRegistroEmpleado(DateTime.Now.AddDays(-30), DateTime.Now.AddMonths(1));
}
if (registros != null && registros.IsSuccess)
{
users = device.GetUserInfo();
}
}
if (users != null && users.IsSuccess)
{
Mod.GuardaLog($"Numero de registros {users.Result.Count} ", LogsNames.Log);
}
//Mod.GuardaLog(Newtonsoft.Json.JsonConvert.SerializeObject(device.GetChecadorEmpleado()), LogsNames.Log);
List<RequestAddChecadorRegistro> registrostosave = new List<RequestAddChecadorRegistro>();
if (users != null && users.IsSuccess)
{
List<ResponseUser> usuariosporvaldar = users.Result;
DateTime mindate = DateTime.Now.AddMonths(-2);
if (mindate > GlobalVars.fechaChecadorlup) { GlobalVars.fechaChecadorlup = mindate; }
//DateTime fechac = GlobalVars.fechaChecadorlup;
foreach (RegistroPersonalChecador reg in registros.Result)
{
RequestAddChecadorRegistro req = new RequestAddChecadorRegistro();
req.ChecadorID = reg.IdPersonal.ToEntero();
var usuarioz = personalsig.FirstOrDefault(x => x.ChecadorID == reg.IdPersonal);
if (usuarioz != null) { req.CvePersonal = usuarioz.CvePersonal; }
//var usuario = usuariosporvaldar.FirstOrDefault(x => x.dwEnrollNumber == reg.IdPersonal);
//if (usuario != null) { req.CvePersonal = usuario.sCardnumber.ToEntero(); }
req.CveChecador = devicemodel.cveChecador;
req.Fecha = reg.fecha;
registrostosave.Add(req);
if (usuarioz == null || reg.fecha > usuarioz.Fecha)
{
registrostosave.Add(req);
}
//if (reg.fecha > fechac) { fechac = reg.fecha; }
}
//GlobalVars.fechaChecadorlup = fechac;
rhsig.AddChecadorRegistro(registrostosave);
}
Mod.GuardaLog(Newtonsoft.Json.JsonConvert.SerializeObject(registrostosave), LogsNames.Log);
}
}
}
catch (Exception e)
{
Mod.GuardaLog(e, "Error al enviar registros de asistencia", LogsNames.Log);
}
if (!ADSUtileriasService.Helpers.GlobalVars.continuarService)
{
if (timerchecador != null)
{
timerchecador.Dispose();
timerchecador = null;
Mod.GuardaLog("Teminar timer", LogsNames.Log);
}
}
}
public static void UpdateKeyPersonalChecador()
{
Mod.GuardaLog($"Actualiza key executed {mmTiempo}", LogsNames.Log);
try
{
using (SqlLiteBase bd = new SqlLiteBase(""))
{
UtileriasSqlite utilsqlite = new UtileriasSqlite(bd);
var devicelist = utilsqlite.GETChecadoresActivos();
foreach (ADSNetLibrary.SIGAPI.Models.RH.Response.ResponseGetChecadoresModel devicemodel in devicelist)
{
RHSIG rhsig = new RHSIG();
var checks = rhsig.PersonalChecadorID(new Conexion.SIG.RequestPersonalChecadorID() { CvePersonal = -1, ChecadorID = "-1", CveChecador = devicemodel.cveChecador });
if (checks != null && checks.Result.Count >0)
{
continue;
}
Mod.GuardaLog($"Checador Actual {devicemodel.checador} {devicemodel.iPLocal} {devicemodel.puerto} CveChecado: {devicemodel.cveChecador} CveEmpresa:{devicemodel.CveEmpresa} CveSubpryecto:{devicemodel.cveSubProyecto} ", LogsNames.Log);
ADSNetLibrary.SIGAPI.Models.ResponseModel<List<ResponseUser>> users = null;
using (ApiZKTeco device = new ApiZKTeco(devicemodel.iPLocal, devicemodel.puerto.ToEntero()))
{
users = device.GetUserInfo();
foreach (ResponseUser reg in users.Result)
{
if(reg.dwEnrollNumber != "99999")
{
var checksw = rhsig.AddUpPersonalChecadorVinculo(new Conexion.SIG.RequestPersonalChecadorVinculoAddUp()
{
ChecadorID = reg.dwEnrollNumber.ToString(),
CvePersonal = reg.Password.ToEntero(),
CveChecador = devicemodel.cveChecador,
Checadorname = reg.Name
});
}
//device.UpdateUserCardFromPassword(reg);
}
}
}
}
}
catch (Exception) { }
}
}
}