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().Publish(new FingerprintMsg() { Message = "CONNECT", Result = bIsConnected, }); } catch (Exception ex) { logger.Info($"连接指纹机异常{ex.Message.ToString()}"); } } /// /// 用于退出登录重连指纹机 /// 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().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().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().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; } } }