UNPKG

medical

Version:
211 lines (203 loc) 9.39 kB
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};