UNPKG

medical

Version:
113 lines (104 loc) 4.92 kB
const path = require('path') const dllinvoke = require('./dllinvoke') const encodingConvert = require('encoding'); const ref = require('ref-napi') const validator = require('validator'); const hisLogger = require("../../../src/hisLogger"); const settings = require("electron-settings") let MedInterface let cradInfo, ywzqh const isDebug = settings.getSync('sykt.isDebug'); function result(ret, input, output, cradinfo) { let obj = { "ret": ret, "input": input, "output": output, "cradinfo": cradinfo } return obj } async function init(paths) { let dllDirectory; try { /****省级医保交易库及读卡库*****/ let sPath = settings.getSync('provice.ybzs') dllDirectory = path.join(settings.getSync('provice.root'), sPath) let calls = {} let init = await dllinvoke.invoke(dllDirectory, 'AcureLib.dll', { 'CallAcure': ['int', ['string', 'string', 'int']] }); hisLogger.hisLogger({DLLName: 'AcureLib', DLLPath: dllDirectory}, "获取接口函数成功!"); for (let fname in init) { calls[fname] = init[fname]; } sPath = settings.getSync('provice.dllPath')[settings.getSync("provice.currentPath")] dllDirectory = path.join(settings.getSync('provice.root'), sPath) let inits = await dllinvoke.invoke(dllDirectory, 'MedInterface339900.dll', { 'f_Init': ['int', ['string', 'string', 'string']], 'f_UserApply': ['int', ['int', 'string', 'string', 'string', 'string']], 'f_Close': ['int', ['string', 'string', 'string']], 'f_ReadICCard': ['int', ['int', '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 undefined; } } async function medicalProvice({func, code, HospCode,data1,data2,retMsg,type}) { let resultObj = result(-1, '', '', cradInfo) try{ if (typeof(MedInterface) != "object"){ MedInterface=await init() } retMsg = Buffer.allocUnsafe(81920); if (func.indexOf("f_Init") >= 0 || func.indexOf("f_Close") >= 0) { resultObj.ret = await MedInterface[func](data1,HospCode,retMsg) resultObj.output = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0) } else if (func.indexOf("f_UserApply") >= 0) { let input = encodingConvert.convert(data1, "GBK", "UTF8") resultObj.ret = await MedInterface[func](code, HospCode,input,data2,retMsg) resultObj.input = ref.readCString(encodingConvert.convert(input, "UTF8", "GBK"),0) resultObj.output = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0) } else if (func.indexOf("f_ReadICCard") >= 0) { resultObj.ret = await MedInterface[func](type, retMsg) cradInfo = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0) resultObj.output = cradInfo } else if (func.indexOf("CallAcure") >= 0) { let input = data1 resultObj.ret = await MedInterface[func](input,retMsg,code) resultObj.input = ref.readCString(encodingConvert.convert(input, "UTF8", "GBK"),0) resultObj.output = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0) }else if (func.indexOf("readMagCard") >= 0) { resultObj.ret = await MedInterface[func](retMsg) cradInfo = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0) resultObj.output = cradInfo hisLogger.hisLogger(cradInfo) }else if (func.indexOf("f_AnalysisQrCode") >= 0) { resultObj.ret = await MedInterface[func](HospCode,'01301','','008','tjt','01','',retMsg,data1,data2); resultObj.input = data1; let sMsg = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0); if (validator.isJSON(sMsg)){ resultObj.ret = -1 resultObj.output = sMsg; }else{ resultObj.output = sMsg } } }catch (e) { hisLogger.hisLogger({"客户端异常:":e.toString()}) resultObj.input = ref.readCString(data1, 0); resultObj.output = e.toString(); } return resultObj; } module.exports = {init, medicalProvice};