XiangTan_JiaoJie_Bak/DM_Weight/Finger/FingerprintUtil.cs

201 lines
7.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using log4net;
using log4net.Repository.Hierarchy;
using Microsoft.Data.SqlClient.Server;
using Newtonsoft.Json;
using Prism.Events;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.util;
using zkemkeeper;
namespace DM_Weight.Finger
{
public class FingerprintUtil
{
private ILog logger = LogManager.GetLogger(typeof(FingerprintUtil));
public zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass();
public bool bIsConnected = false;
private string fingerIp = ConfigurationManager.AppSettings["fingerIp"].ToString();
private int fingerPort = 4370;
private int machineNumber = Convert.ToInt32(ConfigurationManager.AppSettings["machineNumber"].ToString());
private int machineType = Convert.ToInt32(ConfigurationManager.AppSettings["machineType"].ToString());
private IEventAggregator _eventAggregator;
public FingerprintUtil(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
logger.Info($"进入构造器,开始连接指纹机");
// Task.Run(() =>
//{
ConnectionMain();
//});
}
public void ConnectionMain()
{
try
{
//axCZKEM1 = new CZKEMClass();
bIsConnected = axCZKEM1.Connect_Net(fingerIp, fingerPort);
logger.Info($"连接指纹机,IP:{fingerIp},端口:{fingerPort},机器号:{machineNumber},连接结果:{bIsConnected}");
if (bIsConnected)
{
if (axCZKEM1.RegEvent(machineNumber, 9))
{
axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
//this.axCZKEM1.OnEnrollFinger += new zkemkeeper._IZKEMEvents_OnEnrollFingerEventHandler(axCZKEM1_OnEnrollFinger);
axCZKEM1.OnEnrollFingerEx += new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(axCZKEM1_OnEnrollFingerEx);
}
}
_eventAggregator.GetEvent<FingerprintEvent>().Publish(new FingerprintMsg()
{
Message = "CONNECT",
Result = bIsConnected,
});
}
catch (Exception ex)
{
logger.Info($"连接指纹机异常{ex.Message.ToString()}");
}
}
/// <summary>
/// 用于退出登录重连指纹机
/// </summary>
public void FingerDisconnect()
{
try
{
logger.Info("重连指纹机");
axCZKEM1.Disconnect();
axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
axCZKEM1.OnEnrollFingerEx -= new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(axCZKEM1_OnEnrollFingerEx);
ConnectionMain();
}
catch (Exception ex)
{
logger.Info($"指纹机Disconnect异常{ex.Message.ToString()}");
ConnectionMain();
}
}
//If your fingerprint(or your card) passes the verification,this event will be triggered
private void axCZKEM1_OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode)
{
FingerprintMsg message = new FingerprintMsg()
{
Message = "LOGIN",
Id = Convert.ToInt32(sEnrollNumber),
VerifyMethod = iVerifyMethod
};
logger.Info($"触发用户验证通过事件用户id:{sEnrollNumber}验证方式:{iVerifyMethod}");
_eventAggregator.GetEvent<FingerprintEvent>().Publish(message);
}
//When you are enrolling your finger,this event will be triggered.
private void axCZKEM1_OnEnrollFinger(int iEnrollNumber, int iFingerIndex, int iActionResult, int iTemplateLength)
{
FingerprintMsg message = new FingerprintMsg()
{
Message = "INS_FINGER",
Id = iEnrollNumber,
FingerIndex = iFingerIndex
};
axCZKEM1.StartIdentify();
axCZKEM1.RefreshData(1);
logger.Info($"触发用户登记指纹事件用户id:{iEnrollNumber}指纹索引:{iFingerIndex}登记结果:{(iActionResult == 0)}");
message.Result = (iActionResult == 0);
_eventAggregator.GetEvent<FingerprintEvent>().Publish(message);
}
private void axCZKEM1_OnEnrollFingerEx(string iEnrollNumber, int iFingerIndex, int iActionResult, int iTemplateLength)
{
FingerprintMsg message = new FingerprintMsg()
{
Message = "INS_FINGER",
Id = Convert.ToInt32(iEnrollNumber),
FingerIndex = iFingerIndex
};
axCZKEM1.StartIdentify();
axCZKEM1.RefreshData(1);
logger.Info($"触发用户登记指纹事件1用户id:{iEnrollNumber}指纹索引:{iFingerIndex}登记结果:{(iActionResult == 0)}");
message.Result = (iActionResult == 0);
_eventAggregator.GetEvent<FingerprintEvent>().Publish(message);
}
/**
* 删除用户
*/
public bool DelUser(int Id)
{
bool result = false;
axCZKEM1.EnableDevice(machineNumber, false);
if (machineType == 1)
{
result = axCZKEM1.DeleteEnrollData(machineNumber, Id, machineNumber, 12);
}
else
{
result = axCZKEM1.SSR_DeleteEnrollData(machineNumber, Id.ToString(), 12);
}
axCZKEM1.RefreshData(machineNumber);
axCZKEM1.EnableDevice(machineNumber, true);
return result;
}
/**
* 添加或修改用户
*/
public bool SaveUser(UserList User)
{
bool result = false;
axCZKEM1.SetStrCardNumber(User.UserBarcode);
if (machineType == 1)
{
result = axCZKEM1.SetUserInfo(machineNumber, User.Id, User.Nickname, "123456", 0, true);
}
else
{
result = axCZKEM1.SSR_SetUserInfo(machineNumber, User.Id.ToString(), User.Nickname, "123456", 0, true);
}
return result;
}
/**
* 添加或修改用户指纹
*/
public bool SaveFingerprint(int Id, int FingerIndex)
{
bool result = false;
// 取消其他操作
bool res2 = axCZKEM1.CancelOperation();
if (machineType == 1)
{
// 删除源指纹
bool res = axCZKEM1.DelUserTmp(machineNumber, Id, FingerIndex);
}
else
{
// 删除源指纹
bool res = axCZKEM1.SSR_DelUserTmp(machineNumber, Id.ToString(), FingerIndex);
}
// 添加新指纹
result = axCZKEM1.StartEnrollEx(Id.ToString(), FingerIndex, 3);
return result;
}
}
}