medical
Version:
147 lines (137 loc) • 5.59 kB
JavaScript
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};