1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.netsdk.demo.accessControl.accessFaceQuality;
 
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.ToolKits;
import com.netsdk.lib.structure.ALARM_CITIZEN_PICTURE_COMPARE_INFO;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
 
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
 
import static com.netsdk.lib.NetSDKLib.NET_ALARM_ACCESS_CTL_EVENT;
import static com.netsdk.lib.NetSDKLib.NET_ALARM_CITIZEN_PICTURE_COMPARE;
import static com.netsdk.lib.Utils.getOsPrefix;
 
/**
 * @author : 47040
 * @since : Created in 2020/8/27 10:35
 */
public class FaceQualityMessageCallBack implements NetSDKLib.fMessCallBackEx1 {
 
    private static FaceQualityMessageCallBack singleInstance;
 
    public static FaceQualityMessageCallBack getSingleInstance() {
        if (singleInstance == null) {
            singleInstance = new FaceQualityMessageCallBack();
        }
        return singleInstance;
    }
 
    public static String encode;
 
    static {
        String osPrefix = getOsPrefix();
        if (osPrefix.toLowerCase().startsWith("win32-amd64")) {
            encode = "GBK";
        } else if (osPrefix.toLowerCase().startsWith("linux-amd64")) {
            encode = "UTF-8";
        }
    }
 
    @Override
    public boolean invoke(int lCommand, NetSDKLib.LLong lLoginID, Pointer pStuEvent, int dwBufLen, String strDeviceIP, NativeLong nDevicePort, int bAlarmAckFlag, NativeLong nEventID, Pointer dwUser) {
        switch (lCommand) {
            case NET_ALARM_ACCESS_CTL_EVENT: {     ///-> 门禁事件
                System.out.println("\n\n<Event> ACCESS [ ALARM ACCESS CONTROL ]");
 
                NetSDKLib.ALARM_ACCESS_CTL_EVENT_INFO msg = new NetSDKLib.ALARM_ACCESS_CTL_EVENT_INFO();
                ToolKits.GetPointerData(pStuEvent, msg);
 
                /////////////// 事件信息 ///////////////
                StringBuilder builder = new StringBuilder();
                try {
                    // 门禁报警事件没有通道号,所以如果使用的设备支持多通道, 请使用 智能门禁事件 EVENT_IVS_ACCESS_CTL
                    builder.append("<<------门禁报警事件主要信息------>>").append("\n")
                            .append("事件类型: ").append((msg.emEventType == 0) ? "未知" : ((msg.emEventType == 1) ? "进门" : "出门")).append("\n")
                            .append("事件状态: ").append((msg.bStatus == 0) ? "失败" : "成功").append("\n")
                            .append("卡类型: ").append(msg.emCardType).append("\n")
                            .append("开门方式: ").append(msg.emOpenMethod).append("\n")
                            .append("卡号: ").append(new String(msg.szCardNo, encode).trim()).append("\n")
                            .append("开门用户: ").append(new String(msg.szUserID, encode).trim()).append("\n")
                            .append("开门失败原因错误码: ").append(msg.nErrorCode).append("\n")
                            .append("考勤状态: ").append(msg.emAttendanceState).append("\n")
                            .append("卡命名: ").append(new String(msg.szCardName, encode).trim()).append("\n")
                            .append("证件号: ").append(new String(msg.szCitizenIDNo, encode).trim()).append("\n")
                            .append("人脸质量: ").append(msg.nScore);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                System.out.println(builder.toString());
 
                break;
            }
            case NET_ALARM_CITIZEN_PICTURE_COMPARE: { // 人证比对事件(对应结构体 ALARM_CITIZEN_PICTURE_COMPARE_INFO)
                // 普通报警事件 -> 人证比对事件
                System.out.println("\n\n<Event> ACCESS [ ALARM CITIZEN PICTURE COMPARE ]");
                ALARM_CITIZEN_PICTURE_COMPARE_INFO msg = new ALARM_CITIZEN_PICTURE_COMPARE_INFO();
                ToolKits.GetPointerData(pStuEvent, msg);
                /////////////// 事件信息 ///////////////
                StringBuilder builder = new StringBuilder();
                try {
                    builder.append("<<------人证比对报警事件主要信息------>>").append("\n")
                            .append("比对结果: ").append((msg.bCompareResult == 0) ? "失败" : "成功").append("\n")
                            .append("通道号: ").append(msg.nChannelID).append("\n")
                            .append("图片相似度: ").append(msg.nSimilarity).append("\n")
                            .append("检测阈值: ").append(msg.nThreshold).append("\n")
                            .append("性别: ").append((msg.emSex == 1) ? "男" : (msg.emSex == 2 ? "女" : "未知或未说明")).append("\n")
                            .append("姓名: ").append(new String(msg.szCitizen, encode).trim()).append("\n")
                            .append("住址:").append(new String(msg.szAddress, encode).trim()).append("\n")
                            .append("证件号: ").append(new String(msg.szNumber, encode).trim()).append("\n")
                            .append("签发机关: ").append(new String(msg.szAuthority, encode).trim()).append("\n")
                            .append("起始日期: ").append(msg.stuValidityStart.toStringTime()).append("\n")
                            .append("证件物理序列号: ").append(new String(msg.szIDPhysicalNumber,encode).trim()).append("\n")
                            .append("IC卡号: ").append(new String(msg.szCardNo,encode).trim()).append("\n");
                    if (msg.bLongTimeValidFlag == 1) {
                        builder.append("截止日期: ").append("永久").append("\n");
                    } else {
                        builder.append("截止日期: ").append(msg.stuValidityEnd.toStringTime()).append("\n");
                    }
                    builder.append("人脸质量: ").append(msg.nScore);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                System.out.println(builder.toString());
 
                break;
            }
            default:
                System.out.printf("Get Other Event 0x%x\n",lCommand);
                break;
        }
        return true;
    }
 
}