medical
Version:
113 lines (104 loc) • 4.92 kB
JavaScript
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};