Browse Source

身份证国产化

master
胡超1 1 year ago
parent
commit
f050d2e0d7
  1. 2
      CPF_Cef/AKS.EnterpriseLibrary.WebBrowser.csproj
  2. 62
      CPF_Cef/Common/ChunkedUpload.cs
  3. 27
      CPF_Cef/Common/IDCardModel.cs
  4. 10
      CPF_Cef/Common/Utils.cs
  5. 206
      CPF_Cef/Devices/IDCard.cs
  6. 292
      CPF_Cef/Devices/SignDll.cs
  7. 476
      CPF_Cef/MainModel.cs
  8. 2
      CPF_Cef/Parame.cs

2
CPF_Cef/AKS.EnterpriseLibrary.WebBrowser.csproj

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>

62
CPF_Cef/Common/ChunkedUpload.cs

@ -9,6 +9,8 @@ using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using CPF.Controls;
using AKSWebBrowser.Commen;
using System.Collections;
namespace AksWebBrowser.Common
{
@ -54,5 +56,65 @@ namespace AksWebBrowser.Common
}
return ret;
}
/// <summary>
/// get请求 Task<string>
/// </summary>
/// <returns></returns>
public async Task<string> getReq(string query)
{
string ret = string.Empty;
using (var httpClient = new HttpClient())
{
// 构建带参数的请求URI
var uri = Parame.gpyUrl + query;
try
{
// 发送GET请求
HttpResponseMessage response = await httpClient.GetAsync(uri);
response.EnsureSuccessStatusCode();
if (response.StatusCode.ToString() == "OK")
{
// 读取响应内容
string body = await response.Content.ReadAsStringAsync();
ret = body;
}
}
catch (HttpRequestException e)
{
Log.Error(" get请求: " + e.Message);
}
}
return ret;
}
/// <summary>
/// 获取签字版数据
/// </summary>
/// <returns></returns>
public async Task<string> PostSign() {
string ret = string.Empty;
try
{
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "http://127.0.0.1:9399/device");
var content = new StringContent("{\r\n command: \"sign\",\r\n command_num: 111,\r\n data: {\r\n operation: \"open\",\r\n operation_code: 1,\r\n parameters: {\r\n data_type: 1,\r\n title_name: \"\",\r\n }\r\n }\r\n }", null, "text/plain");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
if (response.StatusCode.ToString() == "OK")
{
// 读取响应内容
string body = await response.Content.ReadAsStringAsync();
ret = body;
}
}
catch (Exception ex)
{
Log.Error("签字版post请求: " + ex.Message);
}
return ret;
}
}
}

27
CPF_Cef/Common/IDCardModel.cs

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AksWebBrowser.Common
{
public class IDCardModel
{
public string Name { get; set; }
public string Sex { get; set; }
public string Nation_Code { get; set; }
public string Nation { get; set; }
public string Id { get; set; }
public string BirthDay { get; set; }
public string Addr { get; set; }
public string Regorg { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public string Reserv { get; set; }
public string WltFileName { get; set; }
public string BmpFilePath { get; set; }
public string Status { get; set; }
public string ImageBase64 { get; set; }
}
}

10
CPF_Cef/Common/Utils.cs

@ -1,12 +1,8 @@
using CPF.Controls;
using CPF.Windows;
using NAudio.Wave;
using AKSWebBrowser.Commen;
using CPF.Controls;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AksWebBrowser.Common
{

206
CPF_Cef/Devices/IDCard.cs

@ -0,0 +1,206 @@
using AksWebBrowser.Common;
using AKSWebBrowser.Commen;
using CPF.Linux;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using static CPF.Mac.CoreMedia.CMTime;
namespace AksWebBrowser.Devices
{
public class IDCard
{
public static long icdev = -1;
public IDCard()
{
//打开设备
icdev = LibClass.ICReaderOpenUsbByFD(0);
//读序列号
byte[] pVer = new byte[64];
LibClass.ICReaderReadDevSnr(Convert.ToInt32(icdev), 20, pVer);
//获取版本
LibClass.ICReaderGetVer(Convert.ToInt32(icdev), pVer);
//蜂鸣器
LibClass.ICReaderBeep(icdev, 1, 1, 1);
}
/// <summary>
/// 获取身份证
/// </summary>
/// <returns></returns>
public string getIdCard()
{
try
{
if (icdev > 0)
{
IDCardModel iDCardModel = new IDCardModel();
int iLen = 0;
byte[] id = new byte[260];
int status = LibClass.GetIDCardUID(Convert.ToInt32(icdev), ref iLen, id);
byte[] pID = new byte[64];
LibClass.Hex2Asc(id, pID, iLen);
byte[] CHMsg = new byte[260];
byte[] PHMsg = new byte[1032];
byte[] FPMsg = new byte[1032];
int cLen = 0, pLen = 0, fLen = 0;
status = LibClass.ReadIDCardBaseMsg(Convert.ToInt32(icdev), 1, CHMsg, ref cLen, PHMsg, ref pLen, FPMsg, ref fLen);
if (status == 0)
{
//获取图片
byte[] FileName = new byte[65536];
status = LibClass.ParseIDCardPic(PHMsg, 1024, 3, FileName);
if (status == 0)
{
iDCardModel.ImageBase64 = Encoding.UTF8.GetString(FileName);
}
byte[] sCHMsg = new byte[520];
int itype = 0;
status = LibClass.ParseIDCardInfo(CHMsg, cLen, ref itype, sCHMsg);
if (status == 0)
{
string[] baseinfo = Encoding.UTF8.GetString(sCHMsg).Split("|");
iDCardModel.Name = baseinfo[0];
iDCardModel.Sex = baseinfo[1];
iDCardModel.Nation = baseinfo[2];
iDCardModel.BirthDay = baseinfo[3];
iDCardModel.Addr = baseinfo[4];
iDCardModel.Id = baseinfo[5];
iDCardModel.Regorg = baseinfo[6];
iDCardModel.StartDate = baseinfo[7];
iDCardModel.EndDate = baseinfo[8];
}
//关闭
LibClass.ICReaderClose(icdev);
return "{\"message\":\"seccse\",\"code\":\"200\",\"status\":true,\"data\":\"" + JsonConvert.SerializeObject(iDCardModel) + "\"}";
}
else
{
//关闭
LibClass.ICReaderClose(icdev);
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "读取身份证失败" + "\"}";
}
}
else
{
//关闭
LibClass.ICReaderClose(icdev);
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "读取身份证失败" + "\"}";
}
}
catch (Exception ex)
{
Log.Info("获取身份证异常:" + ex.Message);
if (icdev != -1)
{
LibClass.ICReaderClose(icdev);
}
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}";
}
}
// 转化字节码
public static string BytesToString(byte[] characters)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var encoding = Encoding.UTF8;
string constructedString = encoding.GetString(characters);
constructedString = constructedString.Trim(new char[] { '\'', '\"', '\\', '\0', '\a', '\b', '\f', '\n', '\r', '\t', '\v' });
return (constructedString);
}
}
}
class LibClass
{
/// <summary>
/// //打开设备 默认成0
/// </summary>
/// <param name="uiFD"></param>
/// <returns></returns>
[DllImport("libtmz", EntryPoint = "ICReaderOpenUsbByFD", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
public static extern long ICReaderOpenUsbByFD(int uiFD);
/// <summary>
/// //关闭设备
/// </summary>
/// <param name="icdev"></param>
/// <returns></returns>
[DllImport("libtmz", EntryPoint = "ICReaderClose", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
public static extern int ICReaderClose(long icdev);
/*
* 0
1
2
3
4
5
6
7
*/
[DllImport("libtmz", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ICReaderDevStatus(long icdev, ref int uStatus); //获取设备状态
//uLEDCtrl,默认 0;低半字节:0-关,1-开,2-闪烁;如控制灯 2 开: 0x21
//uDelay:闪烁间隔时间,单位:50ms,如 1 代表闪烁间隔时间为 50ms.
[DllImport("libtmz", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ICReaderLEDCtrl(long icdev, int uLEDCtrl, int uDelay); //灯光状态
//获取身份证 UID
[DllImport("libtmz", EntryPoint = "GetIDCardUID", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
//说明: 获取身份证UID
public static extern int GetIDCardUID(int icdev, ref int uLen, [MarshalAs(UnmanagedType.LPArray)] byte[] pIDData);
[DllImport("libtmz", EntryPoint = "ReadIDCardBaseMsg", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
//说明: 获取身份证原始数据
public static extern int ReadIDCardBaseMsg(int icdev, int iFlag, [MarshalAs(UnmanagedType.LPArray)] byte[] pucCHMsg, ref int puiCHMsgLen, [MarshalAs(UnmanagedType.LPArray)] byte[] pucPHMsg, ref int puiPHMsgLen, [MarshalAs(UnmanagedType.LPArray)] byte[] pucFPMsg, ref int puiFPMsgLen);
//蜂鸣器
[DllImport("libtmz", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ICReaderBeep(long icdev, int uMsec, int uDelay, int uNum);
[DllImport("libtmz", EntryPoint = "ICReaderReadDevSnr", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
//说明: 获取设备序列号
public static extern int ICReaderReadDevSnr(int icdev, int rLen, [MarshalAs(UnmanagedType.LPArray)] byte[] pVer);
[DllImport("libtmz", EntryPoint = "ICReaderGetVer", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
//说明: 获取设备版本号
public static extern int ICReaderGetVer(int icdev, [MarshalAs(UnmanagedType.LPArray)] byte[] pVer);
//说明: 解析身份证文字信息
[DllImport("libtmz", EntryPoint = "ParseIDCardInfo", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
public static extern int ParseIDCardInfo(byte[] pucCHMsg, int puiCHMsgLen, ref int iType, [MarshalAs(UnmanagedType.LPArray)] byte[] pSFZInfo);
//说明: 解析身份证照片信息
[DllImport("libtmz", EntryPoint = "ParseIDCardPic", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
public static extern int ParseIDCardPic(byte[] pucPHMsg, int puiPHMsgLen, int iBmpFormat, byte[] pBmpFile);
[DllImport("libtmz", EntryPoint = "Hex2Asc", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
//说明: 16进制 转ASCII字符串
public static extern int Hex2Asc(byte[] hex, [MarshalAs(UnmanagedType.LPArray)] byte[] asc, int hexlen);
[DllImport("libtmz", EntryPoint = "ReadIDCardBaseInfo", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
public static extern int ReadIDCardBaseInfo(int icdev, int iFlag, int iBmpFormat, byte[] pBmpFile, ref int iType, [MarshalAs(UnmanagedType.LPArray)] byte[] pSFZInfo, [MarshalAs(UnmanagedType.LPArray)] byte[] pFingerInfo);
}

292
CPF_Cef/Devices/SignDll.cs

@ -1,210 +1,130 @@
using AKSWebBrowser.Commen;
using AksWebBrowser;
using AksWebBrowser.Common;
using AKSWebBrowser.Commen;
using System;
using System.Globalization;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
//0816加实时报点
[StructLayout(LayoutKind.Sequential)]
using System.Threading.Tasks;
public struct TOUCH_INFO
{
public int X;
public int Y;
public int Pressure;
public int SN;
public int btnID;//5寸 确定 重签 取消按钮
}
namespace DevicesService.Devices
{
public class SignDll
{
//public static PointF endPos;
//public static PointF beginPos;
//public static PointF frontPos;
//private static int xypointcount = 0;
//private static int[] lastpointx = new int[3];
//private static int[] lastpointy = new int[3];
//Point mPoint = new Point(-1, -1);
//private static System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
//private Graphics mGraphicsBuffer;
//private static Pen pen = new Pen(Color.Black); //
public static int status = -1;
//private static Bitmap bitmap = new Bitmap(594, 392);
public static string callback;
public SignDll()
{
//OpenSDK();
}
//打开签字版
public void OpenSDK()
{
try
{
//endPos = new PointF(-1F, -1f);
//beginPos = new PointF(-1F, -1f);
//frontPos = new PointF(-1F, -1f);
//lastpointx[0] = -1;
//lastpointy[0] = -1;
//lastpointx[1] = -1;
//lastpointy[1] = -1;
//lastpointx[2] = -1;
//lastpointy[2] = -1;
//xypointcount = 0;
status = FiveInchDll.GWQ_Init();
Log.Info("初始化SDK:" + status.ToString());
string UIFile = System.IO.Directory.GetCurrentDirectory();
UIFile = UIFile + @"/aks/adv_ui.jpg";
FiveInchDll.GWQ_SetImage(UIFile);
FiveInchDll.GWQ_ShowImage();
//加载回调
FiveInchDll.GWQ_setCallback(callback_str_receive);
FiveInchDll.GWQ_OnOffPointReporting(0);
//FiveInchDll.GWQ_setSignatureData(callback_signatureData);
}
catch (Exception ex) { }
catch (Exception ex) { Log.Error(ex.Message); }
finally { }
}
public static void DevGetTouchNumber(int number)
public void callback_str_receive(int number, byte[] data, byte[] path)
{
try
{
Log.Info(number.ToString());
//Log.Info(number.ToString());
//1 签字确定按钮 2签字取消按钮 3 签字重签按钮(清空界面)
if (number == 1)
if (number == 0x10)
{
int ret = FiveInchDll.ComSignOK();
Log.Info("ComSignOK:" + ret);
FiveInchDll.ComSetBackGroundAdv();
//確認
int ret = FiveInchDll.GWQ_GetImage();
Log.Info("GWQ_GetImage:" + ret);
FiveInchDll.GWQ_ShowImage();
}
else if (number == 3)
else if (number == 0x40)
{
string UIFile = Environment.CurrentDirectory + @"/sign_ui.jpg";
int ret = FiveInchDll.ComSetSignBackgroundImage(UIFile);
Log.Info("ComSetSignBackgroundImage:" + ret);
//重簽
int ret = FiveInchDll.GWQ_ReSign();
Log.Info("GWQ_ReSign:" + ret);
}
else
else if (number == 0xB0)
{
//lastpointx[0] = -1;
//lastpointy[0] = -1;
//lastpointx[1] = -1;
//lastpointy[1] = -1;
//lastpointx[2] = -1;
//lastpointy[2] = -1;
FiveInchDll.ComSetBackGroundAdv();
//Task.Run(async () =>
//{
// Log.Info(callback);
// Log.Info(path);
// byte[] img = File.ReadAllBytes(path);
// string base64 = Convert.ToBase64String(img);
// Log.Info(base64);
// //完成圖片保存
// string result = "{\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"png\",\"data\":\"" + base64 + "\"}";
// Log.Info(result);
// string _parm = callback + "('" + result + "')";
// await Parame.webBrowser.ExecuteJavaScript(_parm);
//});
}
else if (number == 0x30)
{
//取消
FiveInchDll.GWQ_ShowImage();
}
}
catch { }
catch (Exception ex) { Log.Error(ex.Message); }
finally { }
}
//0816加报点
public static void GetTouchPoint(TOUCH_INFO[] info1)
public void callback_signatureData(int x, int y, int p, int sn)
{
return;
}
//打开签字版
public static int OpenComDevice()
public void OpenComDevice(string _callback)
{
//GetTouchNumber m_GetTouchCB = new(DevGetTouchNumber);
try
{
status = FiveInchDll.OpenComDevice(DevGetTouchNumber);
Log.Info(status.ToString());
//Console.WriteLine("OpenComDevice:" + status);
//清空界面
// GetTouchNumber(2);
if (status == 0)
{
//关闭报点
int ret = FiveInchDll.ComSendPoint(0, GetTouchPoint);
Log.Info(ret.ToString());
if (true)
{
string UIFile = Environment.CurrentDirectory + @"/adv_ui.jpg";
Log.Info(UIFile.ToString());
int ret1 = FiveInchDll.ComSendAdvantageImage(UIFile);
Log.Info(ret1.ToString());
// Console.WriteLine("ComSendAdvantageImage:" + ret1);
FiveInchDll.ComSetBackGroundAdv();
}
if (true)
{
string UIFile = Environment.CurrentDirectory + @"/sign_ui.jpg";
Log.Info(UIFile.ToString());
int ret1 = FiveInchDll.ComSetSignBackgroundImage(UIFile);
Log.Info(ret1.ToString());
//Console.WriteLine("ComSetSignBackgroundImage:" + ret1);
}
}
////status = FiveInchDll.OpenComDevice(DevGetTouchNumber);
//if (status == -1)
//{
// status = FiveInchDll.OpenComDevice(DevGetTouchNumber);
// Log.Info(status.ToString());
// //Console.WriteLine("OpenComDevice:" + status);
// //清空界面
// // GetTouchNumber(2);
// if (status == 0)
// {
// //关闭报点
// int ret = FiveInchDll.ComSendPoint(0, GetTouchPoint);
// Log.Info(ret.ToString());
// if (true)
// {
// string UIFile = Environment.CurrentDirectory + @"/adv_ui.jpg";
// Log.Info(UIFile.ToString());
// int ret1 = FiveInchDll.ComSendAdvantageImage(UIFile);
// Log.Info(ret1.ToString());
// // Console.WriteLine("ComSendAdvantageImage:" + ret1);
// FiveInchDll.ComSetBackGroundAdv();
// }
// if (true)
// {
// string UIFile = Environment.CurrentDirectory + @"/adv_ui.jpg";
// Log.Info(UIFile.ToString());
// int ret1 = FiveInchDll.ComSetSignBackgroundImage(UIFile);
// Log.Info(ret1.ToString());
// //Console.WriteLine("ComSetSignBackgroundImage:" + ret1);
// }
// }
//}
//else
//{
// //清空界面
// //GetTouchNumber(2);
// if (status == 0)
// {
// //关闭报点
// int ret = FiveInchDll.ComSendPoint(0, GetTouchPoint);
// if (true)
// {
// string UIFile = Environment.CurrentDirectory + @"/adv_ui.jpg";
// int ret1 = FiveInchDll.ComSendAdvantageImage(UIFile);
// //Console.WriteLine("ComSendAdvantageImage:" + ret1);
// FiveInchDll.ComSetBackGroundAdv();
// }
// if (true)
// {
// string UIFile = Environment.CurrentDirectory + @"/adv_ui.jpg";
// int ret1 = FiveInchDll.ComSetSignBackgroundImage(UIFile);
// //Console.WriteLine("ComSetSignBackgroundImage:" + ret1);
// }
// }
//}
callback = _callback;
OpenSDK();
FiveInchDll.GWQ_SwitchLanguage(0);
}
catch { }
catch (Exception ex) { Log.Error(ex.Message); }
finally { }
return status;
}
//关闭签字版
public static int CloseComDevice()
//釋放簽字版
public int ReleaseComDevice()
{
int ret = -1;
try
{
if (status == 0)
{
ret = FiveInchDll.CloseComDevice();
if (ret == 0)
{
status = -1;
}
}
}
catch { }
finally { }
//try
//{
// if (status == 0)
// {
// ret = FiveInchDll.GWQ_Release();
// if (ret == 0)
// {
// status = -1;
// //取消
// FiveInchDll.GWQ_ShowImage();
// }
// }
//}
//catch { }
//finally { }
return ret;
}
}
@ -213,48 +133,56 @@ namespace DevicesService.Devices
{
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)]
public delegate void GetTouchNumber(int number);
public delegate void callback_str_receive(int type, byte[] data, byte[] path);// (int number);
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)]
public delegate void callback_signatureData(int x, int y, int p, int sn);
//0816加报点
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)]
public delegate void TOUCH_INFO_FUNC([MarshalAs(UnmanagedType.LPArray, SizeConst = 160)] TOUCH_INFO[] info);
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComSendPoint(int nState, [MarshalAs(UnmanagedType.FunctionPtr)] TOUCH_INFO_FUNC callback); //0816加报点
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int OpenComDevice([MarshalAs(UnmanagedType.FunctionPtr)] GetTouchNumber callback);
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int CloseComDevice();
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_Init(); //1.1SDK初始化
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComSetSignBackgroundImage(string UIFile);
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_Release();//SDK释放
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComSetPictureSavePath(string PicturePath, int PicturePathLen);
public static extern int GWQ_DeviceOnline();//检查设备是否在线
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComSignOK();
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_setCallback(callback_str_receive cb);
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_setSignatureData(callback_signatureData cb);
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComSetPenStyle(int PenStyle);
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_SwitchLanguage(int language);//语言切换
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_GetImage();//获取签字图片(用户点击确定后发送)
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComGetDevSN(StringBuilder pDevSN, int iSync);
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_SetImage(string uifile);//设置签字图片
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComGetDevSN_Async(StringBuilder pDevSN);
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_ShowImage();//显示设置的图片
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComWhiteScreen();
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_OnOffScreen(int type);//亮屏熄屏 1 熄屏 0亮屏
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComSendAdvantageImage(string UIFile);
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_Reboot();//重启设备
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_ReSign();// 重新签字
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_OnOffPointReporting(int type);//开启关闭报点(同屏报点) 1 开启 0关闭
[DllImport("libdevice5_hid_sdk.so", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ComSetBackGroundAdv();
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_SetStartUpLogo(string path);//设置开机logo
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_SetSigningBackground(byte[] path, int len);//发送签字背景
[DllImport("libdevice5_hid_sdk", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GWQ_SetSigningBackground2(byte[] path, int len);//设置开机logo
}
}

476
CPF_Cef/MainModel.cs

@ -7,6 +7,8 @@ using CPF.Mac.AppKit;
using DevicesService.Devices;
using NAudio.Wave;
using NAudio.Wave.SampleProviders;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using SkiaSharp;
using System;
using System.Buffers.Text;
@ -24,6 +26,7 @@ using System.Threading.Tasks;
using System.Web;
using System.Xml.Linq;
using static System.Net.Mime.MediaTypeNames;
using AksWebBrowser.Devices;
namespace AKS.EnterpriseLibrary.WebBrowser
{
@ -35,6 +38,9 @@ namespace AKS.EnterpriseLibrary.WebBrowser
public static Process recordingProcess;
public static Process Typrocess;
public TcpClients tcpClients = new TcpClients();
public SignDll sign = new SignDll();
public bool isStart = true;
/// <summary>
/// 读取身份证卡号
/// </summary>
@ -45,25 +51,10 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{
try
{
if (!isFuncisFuncObject("IDCardRead"))
{
Utils.MessagesBox("读取身份证设备未授权使用");
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "读取身份证设备未授权使用" + "\"}";
}
else if (Parame.tcpClient == null)
{
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "硬件服务未启动" + "\"}";
}
else
{
paramsString = "{\"callback\":\"" + callback + "\",\"type\":\"1\",\"param\":{\"data\":\"" + "" + "\"}}";
//Log.Info("读取身份证卡号: " + paramsString + "");
string base64 = str2Base64(paramsString);
string str = tcpClients.SendDataWithHeader(Parame.tcpClient.GetStream(), base64);
string result = Base64str2(str);
SubmitLogs(result, "IDCardRead");
return result;
}
IDCard iDCard = new IDCard();
string result = iDCard.getIdCard();
SubmitLogs(result, "IDCardRead");
return result;
}
catch (Exception ex)
{
@ -87,6 +78,10 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{
try
{
if (isStart)
{
return "{\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "打印成功" + "\"}";
}
if (!isFuncisFuncObject("SendByPrint"))
{
Utils.MessagesBox("打印排队票据设备未授权使用");
@ -131,6 +126,10 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{
try
{
if (isStart)
{
return "{\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "操作成功" + "\"}";
}
if (!isFuncisFuncObject("payleText"))
{
Utils.MessagesBox("文字语音播报设备未授权使用");
@ -237,6 +236,10 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{
try
{
if (isStart)
{
return "{\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "操作成功" + "\"}";
}
if (!isFuncisFuncObject("SendSSM"))
{
Utils.MessagesBox("发送短信设备未授权使用");
@ -276,78 +279,54 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{
try
{
if (!isFuncisFuncObject("openCamera"))
if (isStart)
{
Utils.MessagesBox("高拍仪设备未授权使用");
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "高拍仪设备未授权使用" + "\"}";
return "{\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "操作成功" + "\"}";
}
else if (Parame.tcpClient == null)
else
{
tcpClients = new TcpClients();
if (Parame.tcpClient != null)
//获取设备信息
string devIndex = GetSnIndex();
if (string.IsNullOrEmpty(devIndex))
{
string result = "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"suffix\":\"jpg\",\"data\":\"" + "扫描仪打开失败" + "\"}";
SubmitLogs(result, "openCamera");
return result;
}
else
{
string paramsString = "{\"callback\":\"" + callback + "\",\"type\":\"5\",\"param\":{\"url\":\"" + url + "\"}}";
//Log.Info("打开高拍仪并且进行快速扫描文件: " + paramsString + "");
string base64 = str2Base64(paramsString);
string str = tcpClients.SendDataWithHeader(Parame.tcpClient.GetStream(), base64);
string data = Base64str2(str);
if (data == "400" || data.Contains("fali"))
//打开高拍仪
string param = OpenSn(devIndex);
if (string.IsNullOrEmpty(param))
{
str = tcpClients.SendDataWithHeader(Parame.tcpClient.GetStream(), base64);
data = Base64str2(str);
if (data == "400" || data.Contains("fali"))
string result = "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"suffix\":\"jpg\",\"data\":\"" + "扫描仪打开失败" + "\"}";
SubmitLogs(result, "openCamera");
return result;
}
else
{
//拍照
param = getFrame();
if (string.IsNullOrEmpty(param))
{
string result = "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "扫描文件失败,请重新扫描!" + "\"}";
string result = "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"suffix\":\"jpg\",\"data\":\"" + "获取图片失败" + "\"}";
SubmitLogs(result, "openCamera");
return result;
}
else
{
string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"jpg\",\"data\":\"" + str + "\"}";
Task.Run(() =>
{
//关闭
StopSn(devIndex);
});
string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"jpg\",\"data\":\"" + param + "\"}";
SubmitLogs(result, "openCamera");
return result;
}
}
else
{
string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"jpg\",\"data\":\"" + str + "\"}";
SubmitLogs(result, "openCamera");
return result;
}
}
else {
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "硬件服务未启动" + "\"}";
}
}
else
{
string paramsString = "{\"callback\":\"" + callback + "\",\"type\":\"5\",\"param\":{\"url\":\"" + url + "\"}}";
//Log.Info("打开高拍仪并且进行快速扫描文件: " + paramsString + "");
string base64 = str2Base64(paramsString);
string str = tcpClients.SendDataWithHeader(Parame.tcpClient.GetStream(), base64);
string data = Base64str2(str);
if (data == "400" || data.Contains("fali"))
{
str = tcpClients.SendDataWithHeader(Parame.tcpClient.GetStream(), base64);
data = Base64str2(str);
if (data == "400" || data.Contains("fali"))
{
string result = "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "扫描文件失败,请重新扫描!" + "\"}";
SubmitLogs(result, "openCamera");
return result;
}
else
{
string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"jpg\",\"data\":\"" + str + "\"}";
SubmitLogs(result, "openCamera");
return result;
}
}
else
{
string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"jpg\",\"data\":\"" + str + "\"}";
SubmitLogs(result, "openCamera");
return result;
}
}
}
@ -361,12 +340,12 @@ namespace AKS.EnterpriseLibrary.WebBrowser
}
/// <summary>
/// 打开签字版
/// 打开签字版 sudo apt-get install libgdiplus
/// </summary>
/// <param name="paramsString"></param>
/// <returns></returns>
[JSFunction]
public string OpenSign(string paramsString)
public string OpenSign(string paramsString, string callback)
{
try
{
@ -375,24 +354,13 @@ namespace AKS.EnterpriseLibrary.WebBrowser
Utils.MessagesBox("签字版设备未授权使用");
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "签字版设备未授权使用" + "\"}";
}
else if (Parame.tcpClient == null)
{
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "硬件服务未启动" + "\"}";
}
else
{
paramsString = "{\"callback\":\"" + callback + "\",\"type\":\"6\",\"param\":{\"data\":\"" + "" + "\"}}";
//Log.Info("打开签字版: " + paramsString + "");
string base64 = str2Base64(paramsString);
string str = tcpClients.SendDataWithHeader(Parame.tcpClient.GetStream(), base64);
string result = Base64str2(str);
sign.OpenComDevice(callback);
string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"png\",\"data\":\"" + "成功" + "\"}";
SubmitLogs(result, "OpenSign");
return result;
//SignDll.OpenComDevice();
//string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"png\",\"data\":\"" + "成功" + "\"}";
//SubmitLogs(result, "OpenSign");
//return result;
}
}
catch (Exception ex)
@ -425,11 +393,15 @@ namespace AKS.EnterpriseLibrary.WebBrowser
}
else
{
paramsString = "{\"callback\":\"" + callback + "\",\"type\":\"7\",\"param\":{\"data\":\"" + "" + "\"}}";
//Log.Info("关闭签字版: " + paramsString + "");
string base64 = str2Base64(paramsString);
string str = tcpClients.SendDataWithHeader(Parame.tcpClient.GetStream(), base64);
string result = Base64str2(str);
//paramsString = "{\"callback\":\"" + callback + "\",\"type\":\"7\",\"param\":{\"data\":\"" + "" + "\"}}";
////Log.Info("关闭签字版: " + paramsString + "");
//string base64 = str2Base64(paramsString);
//string str = tcpClients.SendDataWithHeader(Parame.tcpClient.GetStream(), base64);
//string result = Base64str2(str);
//SubmitLogs(result, "OpenSign");
//return result;
sign.ReleaseComDevice();
string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"png\",\"data\":\"" + "成功" + "\"}";
SubmitLogs(result, "OpenSign");
return result;
}
@ -443,57 +415,6 @@ namespace AKS.EnterpriseLibrary.WebBrowser
}
}
/// <summary>
/// 获取签字版数据
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
[JSFunction]
public string GetSignData(string url)
{
try
{
if (!isFuncisFuncObject("OpenSign"))
{
Utils.MessagesBox("签字版设备未授权使用");
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "签字版设备未授权使用" + "\"}";
}
else
{
string paramsString = "{\"callback\":\"" + callback + "\",\"type\":\"8\",\"param\":{\"url\":\"" + url + "\"}}";
//Log.Info("获取签字版数据: " + paramsString + "");
string base64 = str2Base64(paramsString);
string str = tcpClients.SendDataWithHeader(Parame.tcpClient.GetStream(), base64);
string data = Base64str2(str);
if (data == "400" || data.Contains("fali"))
{
string result = "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "获取签字失败" + "\"}";
SubmitLogs(result, "OpenSign");
return result;
}
else
{
string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"png\",\"data\":\"" + str + "\"}";
SubmitLogs(result, "OpenSign");
return result;
}
//string result = "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"png\",\"data\":\"" + "成功" + "\"}";
//SubmitLogs(result, "OpenSign");
//return result;
}
}
catch (Exception ex)
{
Log.Error("获取签字版数据异常: " + ex.Message + "");
string result = "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}";
SubmitLogs(result, "OpenSign");
return result;
}
}
/// <summary>
/// 开始录音、取消录音、结束录音
/// sudo apt-get update
@ -507,6 +428,10 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{
try
{
if (isStart)
{
return "{\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "操作成功" + "\"}";
}
if (!isFuncisFuncObject("SoundRecording"))
{
Utils.MessagesBox("录音设备未授权使用");
@ -591,10 +516,6 @@ namespace AKS.EnterpriseLibrary.WebBrowser
Utils.MessagesBox("打印机设备未授权使用");
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "打印机设备未授权使用" + "\"}";
}
else if (Parame.tcpClient == null)
{
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "硬件服务未启动" + "\"}";
}
else
{
Task.Run(async () =>
@ -654,10 +575,6 @@ namespace AKS.EnterpriseLibrary.WebBrowser
Utils.MessagesBox("打印机设备未授权使用");
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "打印机设备未授权使用" + "\"}";
}
else if (Parame.tcpClient == null)
{
return "{\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "硬件服务未启动" + "\"}";
}
else
{
Task.Run(async () =>
@ -931,6 +848,253 @@ namespace AKS.EnterpriseLibrary.WebBrowser
return result;
}
/// <summary>
/// 获取设备index
/// </summary>
/// <returns></returns>
public string GetSnIndex()
{
//获取设备信息
string param = "/GetAllDisplayInfo";
Task.Run(() => HttpResponse(param));
@event6.WaitOne();
if (string.IsNullOrEmpty(gpyStr))
{
return "";
}
else
{
JObject jo = (JObject)JsonConvert.DeserializeObject(gpyStr);
if (jo["returnCode"].ToString() == "0")
{
string result = jo["data"].ToString();
Log.Info(result);
JArray jo1 = (JArray)JsonConvert.DeserializeObject(result);
string devidx = string.Empty;
string name = string.Empty;
foreach (JObject jo2 in jo1)
{
devidx = jo2["dev_idx"].ToString();
name = jo2["name"].ToString();
Log.Info(name);
break;
}
return devidx;
}
else
{
Log.Info(jo["returnMsg"].ToString());
return "";
}
}
}
/// <summary>
/// 打开高拍仪
/// </summary>
/// <returns></returns>
public string OpenSn(string dev_idx)
{
//获取设备信息
string param = "/StartPreview?dev_idx=" + dev_idx + "&res_id=0";
Task.Run(() => HttpResponse(param));
@event6.WaitOne();
if (string.IsNullOrEmpty(gpyStr))
{
return "";
}
else
{
JObject jo = (JObject)JsonConvert.DeserializeObject(gpyStr);
if (jo["returnCode"].ToString() == "0")
{
return "200";
}
if (jo["returnCode"].ToString() == "2")
{
return "200";
}
else
{
Log.Info(jo["returnMsg"].ToString());
return "";
}
}
}
/// <summary>
/// 关闭高拍仪
/// </summary>
/// <returns></returns>
public string StopSn(string dev_idx)
{
//获取设备信息
string param = "/StopPreview?dev_idx=" + dev_idx;
Task.Run(() => HttpResponse(param));
@event6.WaitOne();
if (string.IsNullOrEmpty(gpyStr))
{
return "";
}
else
{
JObject jo = (JObject)JsonConvert.DeserializeObject(gpyStr);
if (jo["returnCode"].ToString() == "0")
{
return "200";
}
else
{
Log.Info(jo["returnMsg"].ToString());
return "";
}
}
}
/// <summary>
/// 拍照
/// </summary>
/// <returns></returns>
public string getFrame()
{
//获取设备信息
string param = "/getFrame";
Task.Run(() => HttpResponse(param));
@event6.WaitOne();
if (string.IsNullOrEmpty(gpyStr))
{
return "";
}
else
{
JObject jo = (JObject)JsonConvert.DeserializeObject(gpyStr);
if (jo["returnCode"].ToString() == "0")
{
string result = jo["data"].ToString();
JObject jo1 = (JObject)JsonConvert.DeserializeObject(result);
return jo1["img"].ToString();
}
else
{
Log.Info(jo["returnMsg"].ToString());
return "";
}
}
}
/// <summary>
/// 右转
/// </summary>
/// <returns></returns>
public string RotateRight()
{
//获取设备信息
string param = "/rotate/right";
Task.Run(() => HttpResponse(param));
@event6.WaitOne();
if (string.IsNullOrEmpty(gpyStr))
{
return "";
}
else
{
JObject jo = (JObject)JsonConvert.DeserializeObject(gpyStr);
if (jo["returnCode"].ToString() == "0")
{
return "200";
}
else
{
Log.Info(jo["returnMsg"].ToString());
return "";
}
}
}
/// <summary>
/// 左转
/// </summary>
/// <returns></returns>
public string RotateLeft()
{
//获取设备信息
string param = "/rotate/left";
Task.Run(() => HttpResponse(param));
@event6.WaitOne();
if (string.IsNullOrEmpty(gpyStr))
{
return "";
}
else
{
JObject jo = (JObject)JsonConvert.DeserializeObject(gpyStr);
if (jo["returnCode"].ToString() == "0")
{
return "200";
}
else
{
Log.Info(jo["returnMsg"].ToString());
return "";
}
}
}
/// <summary>
/// 高拍仪
/// </summary>
private string gpyStr = string.Empty;
private AutoResetEvent @event6 = new AutoResetEvent(false);
private async void HttpResponse(string param)
{
var httpClient = new HttpClient();
var uploader = new ChunkedUpload(httpClient);
gpyStr = await uploader.getReq(param);
@event6.Set();
}
/// <summary>
/// 获取签字版base64
/// </summary>
/// <returns></returns>
public string GetSignBase64()
{
//获取设备信息
Task.Run(() => HttpPostResponseBySign());
@event6.WaitOne();
if (string.IsNullOrEmpty(qzbStr))
{
return "";
}
else
{
JObject jo = (JObject)JsonConvert.DeserializeObject(qzbStr);
if (jo["code"].ToString() == "0")
{
return jo["data"].ToString();
}
else
{
Log.Info(jo["returnMsg"].ToString());
return "";
}
}
}
/// <summary>
/// 签字版
/// </summary>
private string qzbStr = string.Empty;
private AutoResetEvent @event7 = new AutoResetEvent(false);
private async void HttpPostResponseBySign()
{
var httpClient = new HttpClient();
var uploader = new ChunkedUpload(httpClient);
qzbStr = await uploader.PostSign();
@event7.Set();
}
/// <summary>
/// 初始文件上传
/// </summary>

2
CPF_Cef/Parame.cs

@ -19,6 +19,8 @@ namespace AksWebBrowser
public static string key = "1";
//硬件Ip
public static string Ip = "192.168.1.166";
//高拍仪url
public static string gpyUrl = "http://127.0.0.1:6543";
}
public struct Func
{

Loading…
Cancel
Save