UNPKG

medical

Version:
147 lines (137 loc) 5.59 kB
const path = require('path') const dllinvoke = require('./dllinvoke') const encodingConvert = require('encoding'); const ref = require('ref-napi') 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,data2, cradinfo) { let obj = { "ret": ret, "input": input, "data2":data2, "output": output, "cradinfo": cradinfo } return obj } function uuid() { let s = []; let hexDigits = "0123456789abcdef"; for (let i = 0; i < 36; i++) { s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); } s[14] = "4"; s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); s[8] = s[13] = s[18] = s[23] = "-"; let uuid = s.join(""); return uuid.substring(0,20); } async function init(paths) { hisLogger.hisLogger("省一卡通初始化",); let dllDirectory; try { /****省级医保交易库及读卡库*****/ let calls = {} let sPath = settings.getSync('sykt.dllPath')[settings.getSync("sykt.currentPath")] dllDirectory = path.join(settings.getSync('sykt.root'), sPath) hisLogger.hisLogger("省一卡通:",dllDirectory); let inits = await dllinvoke.invoke(dllDirectory, 'YKTMedInterface.dll', { 'f_Init': ['int', ['string', 'string', 'string']], 'f_UserApply': ['int', ['int', 'string', 'string', 'string', 'string']], 'f_DataTransApply': ['int', ['int', 'string', 'string', 'string', 'string']], 'f_ReadICCard': ['int', ['string', 'string']] }); hisLogger.hisLogger({DLLName: 'YKTMedInterface', DLLPath: dllDirectory}, "获取接口函数成功!"); 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); hisLogger.hisLogger("省一卡通: "+code,typeof(MedInterface[func])) if (func.indexOf("f_Init") >= 0 || func.indexOf("f_Close") >= 0) { if (isDebug){ resultObj.ret = 0 resultObj.output = ref.readCString(encodingConvert.convert("$$0~~~~$$", "UTF8", "GBK"), 0) }else { 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") if (isDebug){ resultObj.ret = 0 resultObj.input = ref.readCString(encodingConvert.convert(input, "UTF8", "GBK"),0) resultObj.output = settings.getSync("sykt.result." + code) if (code=='9202' || code==9203 ){ resultObj.output=resultObj.output.replace(resultObj.output.split("~")[2],uuid()) } if (code == '9204'){ resultObj.output=resultObj.output.replace(resultObj.output.split("~")[3],uuid()) } }else { resultObj.ret = await MedInterface[func](code, HospCode,input,data2,retMsg) resultObj.data2 =data2; 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) { if (isDebug){ resultObj.ret = 0 hisLogger.hisLogger("省一卡通: ",settings.getSync("sykt.result.card")) cradInfo = settings.getSync("sykt.result.card") resultObj.output = cradInfo }else { resultObj.ret = await MedInterface[func](HospCode,retMsg) cradInfo = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0) resultObj.output = cradInfo } } else if (func.indexOf("f_DataTransApply") >= 0) { let input = encodingConvert.convert(data1, "GBK", "UTF8") if (isDebug){ resultObj.ret = 0 resultObj.input = ref.readCString(encodingConvert.convert(input, "UTF8", "GBK"),0); resultObj.output = settings.getSync("sykt.result."+code) }else { resultObj.ret = await MedInterface[func](code, HospCode,data1,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_AnalysisQrCode") >= 0) { let input = encodingConvert.convert(data1, "GBK", "UTF8") if (isDebug){ resultObj.ret = 0 resultObj.input = ref.readCString(encodingConvert.convert(input, "UTF8", "GBK"),0); resultObj.output = settings.getSync("sykt.result."+code) }else { resultObj.ret = await MedInterface[func](HospCode,'01301','','008','tjt','01','',retMsg,data1,data2) resultObj.input = ref.readCString(encodingConvert.convert(input, "UTF8", "GBK"),0); resultObj.output = ref.readCString(encodingConvert.convert(retMsg, "UTF8", "GBK"), 0); } } }catch (e) { resultObj.input = ref.readCString(data1, 0); resultObj.output = e.toString(); } return resultObj; } module.exports = {init, medicalProvice};