package com.netsdk.demo.customize; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE; import com.netsdk.lib.structure.*; import com.netsdk.lib.utils.Initialization; import com.sun.jna.Memory; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import java.io.File; import java.io.UnsupportedEncodingException; import java.util.Scanner; import static com.netsdk.lib.NetSDKLib.EVENT_IVS_ALL; import static com.netsdk.lib.NetSDKLib.EVENT_IVS_CONSUMPTION_EVENT; /** * @author 291189 * @version 1.0 * @description ERR220302055 & GIP240125006 * @date 2022/3/7 10:37 */ public class RecordAccessDemo extends Initialization { NetSDKLib.LLong attachHandle=new NetSDKLib.LLong(0); static int consumptionAmount; static byte[] szUserIDA; static byte[] transactionSerialNumber; //1、获取和设置消费相关策略 int channel= 0; public void getAndSetConsumption(){ NET_CFG_CONSUMPTION_STRATEGY_INFO msg=new NET_CFG_CONSUMPTION_STRATEGY_INFO(); Pointer getInfo=new Memory(msg.size()); getInfo.clear(msg.size()); ToolKits.SetStructDataToPointer(msg, getInfo, 0); boolean b = netSdk.CLIENT_GetConfig(loginHandle, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_CONSUMPTION_STRATEGY, channel, getInfo, msg.size(), 3000, null); if(!b) { System.out.println("getconfig failed, ErrCode="+ ToolKits.getErrorCode()); return; }else { System.out.println("getconfig success"); } ToolKits.GetPointerData(getInfo, msg); System.out.println("getInfo:"+msg.toString()); /** 消费模式 {@link com.netsdk.lib.enumeration.EM_NET_CONSUMPTION_MODE} */ msg.emMode=1; /** 同一个人消费间隔, 单位:秒,取值范围[1,600] */ msg.nConsumptionInterval=10; /** * 离线消费使能, TRUE:支持离线消费 FALSE:不支持离线消费 */ msg.bOfflineEnable=true; Pointer setInfo=new Memory(msg.size()); setInfo.clear(msg.size()); ToolKits.SetStructDataToPointer(msg, setInfo, 0); b = netSdk.CLIENT_SetConfig(loginHandle, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_CONSUMPTION_STRATEGY, channel, setInfo, msg.size(), 3000, new IntByReference(0), null); if(!b) { System.out.println("CLIENT_SetConfig failed, ErrCode="+ ToolKits.getErrorCode()); return; }else { System.out.println("setconfig success"); } ToolKits.GetPointerData(setInfo, msg); System.out.println("setInfo:"+msg.toString()); } //设置消费结果 public static void SetConsumeResult(){ /** * consumptionAmount */ NET_IN_SET_CONSUME_RESULT input=new NET_IN_SET_CONSUME_RESULT(); // 用户ID input.szUserID=szUserIDA; // ToolKits.StringToByteArray(uid,szUserID); //消费后余额,如果消费失败则是消费前余额,单位分。 input.nRemainAmount=consumptionAmount; // 平台固定消费金额,单位(分) input.nConsumptionAmount =consumptionAmount; // 消费流水号 input.szTransactionSerialNumber=transactionSerialNumber; //消费成功与否 input.bConsumeResult=1; String platDisplayText="总次数:200;剩余次数:5"; StringToByteArr(platDisplayText,input.szPlatDisplayText,encode); Pointer inputMemory = new Memory(input.size()); inputMemory.clear(input.size()); ToolKits.SetStructDataToPointer(input,inputMemory,0); NET_OUT_SET_CONSUME_RESULT out=new NET_OUT_SET_CONSUME_RESULT(); Pointer outMemory = new Memory(out.size()); outMemory.clear(out.size()); ToolKits.SetStructDataToPointer(out,outMemory,0); boolean b = netSdk.CLIENT_SetConsumeResult(loginHandle, inputMemory, outMemory, 3000); if(!b) { System.out.println("CLIENT_SetConsumeResult failed, ErrCode="+ ToolKits.getErrorCode()); return; }else { System.out.println("CLIENT_SetConsumeResult success"); } } public static void StringToByteArr(String src, byte[] dst,String encode) { try { byte[] bytes = src.getBytes(encode); for (int i = 0; i < bytes.length; i++) { dst[i] = (byte) bytes[i]; } } catch (Exception e1) { e1.printStackTrace(); } } /** * 韦根配置 */ public void getSetWIEGAND(){ NET_CFG_WIEGAND_INFO msg=new NET_CFG_WIEGAND_INFO(); Pointer getInfo=new Memory(msg.size()); getInfo.clear(msg.size()); ToolKits.SetStructDataToPointer(msg, getInfo, 0); boolean b = netSdk.CLIENT_GetConfig(loginHandle, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_WIEGAND, channel, getInfo, msg.size(), 3000, null); if(!b) { System.out.println("getconfig failed, ErrCode="+ToolKits.getErrorCode()); return; }else { System.out.println("getconfig success"); } ToolKits.GetPointerData(getInfo, msg); //stuWiegandInfos的有效元素 int nCount = msg.nCount; NET_WIEGAND_INFO[] stuWiegandInfos = msg.stuWiegandInfos; for(int i=0;i