medical
Version:
211 lines (203 loc) • 9.39 kB
JavaScript
const path = require('path')
const dllinvoke = require('./dllinvoke')
const encodingConvert = require('encoding');
const ref = require('ref-napi')
const settings = require("electron-settings")
const hisLogger = require("../../../src/hisLogger");
let HZSiInterface
let cradInfo
function result(ret, input, output, cradinfo,dzpzInfo) {
let obj = {
ret: ret,
input: input,
output: output,
cradinfo: cradinfo,
dzpzInfo:dzpzInfo
}
return obj
}
let errorInfo={
'-2':'卡尚未插入',
'-1':'卡片类型不对 ',
'-3':'卡尚未取出 ',
'-4':'卡片无应答 ',
'-5':'接口设备故障 ',
'-6':'不支持该命令 ',
'-7':'命令长度错误 ',
'-8':'命令参数错误 ',
'-9':'访问权限不满足',
'-10':'信息校验和出错',
'-21':'检查是否为同一张卡',
'-22':'非正式的杭州市市民卡',
'-23':'不输入密码,直接退出交易',
'-31':'密码认证失败,只允许一次出错机会',
'-32':'密码认证失败,只允许两次出错机会',
'-33':'密码认证失败,只允许三次出错机会',
'-34':'密码认证失败,只允许四次出错机会',
'-35':'密码认证失败,只允许五次出错机会',
'-42':'PIN已经锁定',
'-37(25)':'获取二维码失败',
'-38(26)':'网络交互失败(1115.1116)',
'-39(27)':'人员信息不存在',
'-50(32)':'二维码失效',
'-60(3C)':'支付宝验证失败',
'-61(3D)':'卡信息异常',
'-62(3E)':'无绑卡记录',
'-63(3F)':'卡管系统异常',
'-64(40)':'人脸摄像头未授权',
'-70':'刷脸设备信息获取异常',
'-71':'刷脸失败',
'-72':'刷脸初始化异常',
'-73':'人脸检测失败',
'-74':'人脸检测超时',
'-99(63)':'卡管服务器返回未知错误码',
'-113':'卡令牌过期',
'-153':'刷脸摄像头未授权',
'-168':'摄像头不存在',
'-169':'该摄像头不允许绑定',
'-187':'用户检索失败,请进行人脸建档',
'-215':'无效卡令牌',
'-217':'二次校验失败',
'-225':'根据手机号未查到市民卡记录',
'-226':'图片系统未查到对应的记录',
'-227':'获取图片相似度失败',
'-228':'人脸匹配失败',
'-238':'服务器异常',
'-241':'人脸摄像头认证失败,请重新启动软件并初始化摄像头',
'-247':'重复签到,请先签退',
'-248':'未签到,请先签到',
'-101':'动态库加载错误',
'-102':'交易代码错误',
'-999':'内部命令错误',
'-2001':'PSAM操作错误'
}
async function init(paths) {
try {
/****市医保读卡接口*****/
let sPath = settings.getSync('hangzhou.dllPath')[settings.getSync("hangzhou.currentPath")]
let dllDirectory = path.join(settings.getSync('hangzhou.dllRoot'))
let calls={}
let lib = await dllinvoke.invoke(dllDirectory, 'ICCInter_HZ.dll', {
'ICC_Transaction': ['int', ['int', 'string', 'string']],
'ICC_Face_detect_init':['int',[]],
'ICC_Face_detect_destory':['int',[]],
'ICC_Face_certification': ['int', ['string', 'string']],
'ICC_Face_certification_agent': ['int', ['string', 'string']],
'ICC_Face_Loginout': ['int', ['string', 'string']],
'SMKFace_liveness_check': ['int', ['string', 'string']],
'SMKFace_Auth': ['int', ['string', 'string']],
'ICC_GetDZPZ_Info': ['int', ['string', 'string']]
})
for (let fname in lib){
calls[fname]=lib[fname];
}
let inits = await dllinvoke.invoke(dllDirectory, 'HZSiInterface.dll', {
'INIT': ['int', ['string']],
'BUSINESS_HANDLE': ['int', ['string', 'string']]
});
for (let fname in inits){
calls[fname]=inits[fname];
}
let dzpz = await dllinvoke.invoke(dllDirectory, 'MedInterface_All.dll', {
'f_AnalysisQrCode': ['int', ['string', 'string', 'string','string', 'string', 'string','string', 'string', 'string', 'string']]
});
for (let fName in dzpz) {
calls[fName] = dzpz[fName];
}
return calls
} catch (e) {
hisLogger.hisLogger("杭州市医保: " + e.toString())
return -1;
}
return undefined;
}
async function medicalHZSiInterface({func,type, data1, retMsg, HospCode}) {
let resultObj = result(-1, '', '', cradInfo)
let patient;
try{
if (HZSiInterface==undefined || !HZSiInterface.hasOwnProperty(func)){
HZSiInterface=await init()
}
retMsg = Buffer.allocUnsafe(81920);
if (func.indexOf("INIT") >= 0) {
data1 = Buffer.allocUnsafe(8192);
resultObj.ret = await HZSiInterface[func](data1)
resultObj.output = ref.readCString(encodingConvert.convert(data1, "UTF8", "GBK"), 0)
} else if (func.indexOf("BUSINESS_HANDLE") >= 0) {
resultObj.input = data1
data1=encodingConvert.convert(data1, "GBK","UTF8")
resultObj.ret = await HZSiInterface[func](data1, retMsg)
let output = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.output=output
}else if (func.indexOf("ICC_Transaction") >= 0) {
resultObj.ret = await HZSiInterface[func](type, data1, retMsg)
resultObj.input = data1
if(resultObj.ret<0){
resultObj.output = errorInfo[resultObj.ret+''];
}else{
patient = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.output = patient;
if(type==1115){
data1=patient.split('|')[12]
resultObj.ret = await HZSiInterface['ICC_GetDZPZ_Info'](data1, retMsg)
patient = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.dzpzInfo = patient;
}
}
}else if (func.indexOf("ICC_GetDZPZ_Info") >= 0) {
resultObj.ret = await HZSiInterface[func](data1, retMsg)
resultObj.input = data1
if(resultObj.ret<0){
resultObj.output = errorInfo[resultObj.ret+''];
if (resultObj.output==undefined || resultObj.output==''|| resultObj.output==null){
patient = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.output = patient;
}
}else{
patient = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.output = patient;
}
}else if (func.indexOf("ICC_Face_detect_init") >= 0 || func.indexOf("ICC_Face_detect_destory") >= 0) {
resultObj.ret = await HZSiInterface[func]()
resultObj.input = data1
resultObj.output = '';
}else if (func.indexOf("ICC_Face_certification_agent") >= 0) {
let input = encodingConvert.convert(data1, "GBK", "UTF8")
resultObj.ret = await HZSiInterface[func](input, retMsg)
resultObj.input = data1
patient = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.output = patient;
}else if (func.indexOf("ICC_Face_certification") >= 0) {
resultObj.ret = await HZSiInterface[func](data1, retMsg)
resultObj.input = data1
patient = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.output = patient;
}else if (func.indexOf("SMKFace_liveness_check") >= 0) {
resultObj.ret = await HZSiInterface[func](data1, retMsg)
resultObj.input = data1
patient = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.output = patient;
}else if (func.indexOf("SMKFace_Auth") >= 0) {
resultObj.ret = await HZSiInterface[func](data1, retMsg)
resultObj.input = data1
patient = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.output = patient;
}else if (func.indexOf("ICC_Face_Loginout") >= 0) {
resultObj.input = data1
let input = encodingConvert.convert(data1, "GBK", "UTF8")
resultObj.ret = await HZSiInterface[func](input, retMsg)
patient = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0)
resultObj.output = patient;
}else if (func.indexOf("f_AnalysisQrCode") >= 0) {
resultObj.ret = await HZSiInterface[func](HospCode,'01301','','008','tjt','01','',retMsg,data1,'');
resultObj.input = data1;
resultObj.output = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0);
}
}catch (e) {
hisLogger.hisLogger({"严重错误:":e.toString()})
resultObj.input = ref.readCString(data1,0);
resultObj.output = e.toString();
}
return resultObj;
}
module.exports = {init, medicalHZSiInterface};