medical
Version:
209 lines (198 loc) • 7.93 kB
JavaScript
const path = require('path')
const dayjs = require("dayjs")
const HZVObj=require("./js/HZV")
const Provice=require("./js/Provice")
const xianju=require('./js/XianJu')
const voiceQuoterObj = require('./js/voiceQuoter')
const sykt=require('./js/sykt')
const dllinvoke = require("./js/dllinvoke")
const fs = require("fs")
const encodingConvert = require('encoding');
const ref = require('ref-napi')
const redis = require("redis")
const {promisify} = require('util');
const os = require("os")
const hisLogger = require("../../src/hisLogger");
const settings = require("electron-settings")
hisLogger.hisLogger(settings.file())
let client = redis.createClient(settings.getSync("redis.port"), settings.getSync("redis.host"));
client.auth(settings.getSync("redis.password"))
client.on("error", function (err) {
hisLogger.hisLogger("redis client连接失败",err);
});
client.on('ready', function (res) {
hisLogger.hisLogger('client ready');
});
const hgetAsync = promisify(client.hget).bind(client);
const hexistsAsync = promisify(client.hexists).bind(client);
const isDownload = settings.getSync('hangzhou.download')
/**自动判断医保类型***/
async function redisPatient(IdentificationCode){
let res=undefined
if (await hexistsAsync("IdentificationPatient",IdentificationCode)){
res = await hgetAsync('IdentificationPatient',IdentificationCode);
}
return res
}
/**自动判断医保类型***/
async function medicalType(IdentificationCode){
if (client.hexists("IdentificationCode",IdentificationCode)){
return new Promise(async (resolve) => {
client.hget('IdentificationCode',IdentificationCode, (error, result)=>{
if (error) {
hisLogger.hisLogger('error:',error);
} else {
if (result==null){
result=9
}
resolve(result)
}
});
})
}
return 9
}
function UUID(){
let sffAccount = enumerate.sffAccount==null?"":enumerate.sffAccount
return dayjs().format("YYYY-MM-DD-HHmmss-SSS")+"-"+sffAccount
}
async function ReadFile(paths){
let sPath=path.join(paths)
let data = fs.readFileSync(sPath);
if(data.length>0){
return ref.readCString(encodingConvert.convert(data, "UTF8", "GBK"), 0)
}
return ""
}
let enumerate = {
"HZVYWZQH": "",
"ZJSYWZQH": "",
"YKTYWZQH": "",
"XJYWZQH": "",
"HZVHospCode": "",
"ZJSHospCode": "",
"YKTHospCode": "",
"XJYHospCode": "",
"sffAccount":"",
"sffName":""
}
let cardInfo
/**
* 医保接口封装
* @param paramObj feeID 医保类型 1自费 2市医保 3省医保 4省一卡通 5仙居医保
* func 医保函数参考各医保技术文档接口说明
* firstParam 第一参数
* secondParam 第二参数
* thridParam 第三参数
* fourthParam 第四参数
* fifthParam 第五参数
* @return resultObj ret 接口调用结果标识 0成功 <0失败 >0警告
* input 医保入参
* output 医保返回出参
* cradinfo 患者卡信息
* value 预留字段
*
*/
async function voiceQuoter(type,msg){
let func="dsbdll"
let isVoice = settings.get('address.isVoice')
if (isVoice){
await voiceQuoterObj.voiceQuoterInterface({func,type,msg})
}
}
async function medical({feeID,func,code, HospCode,data1,data2,retMsg,type }) {
hisLogger.hisLogger({output:'输入:',feeId: feeID,func:func,code:code, HospCode:HospCode,data1:data1,data2:data2,type:type});
let obj={}
if (feeID==2){
obj = await HZVObj.medicalHZSiInterface({func,type,data1,retMsg,HospCode})
}
if (feeID==3){
obj = await Provice.medicalProvice({func,code, HospCode,data1,data2,retMsg,type})
}
if (feeID==4){
obj = await sykt.medicalProvice({func,code, HospCode,data1,data2,retMsg,type})
}
if(feeID==5){
let ybdj = settings.get('xianju.ybdj')
if(type == "1" && func == "f_UserBargaingApply"){
func="WebApply"
switch (code) {
case 29: // 29 门诊(挂号)预结算 - - - - 仅返回结果供显示使用
break;
case 30: // 30 门诊(挂号)结算 - 31 可 是
break;
case 31: // 31 门诊挂号/收费退费 - / 可 - 交易30的反交易, 实时执行
break;
case 43: // 43 指定交易结果查询 - - - - 范围: 30,31,32,36,37,38
break;
case 49: // 49 交易确认 - - - - 确认医院交易是否成功
break;
case 22:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 51:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 52:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 53:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 54:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 55:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 56:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 58:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 64:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 65:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 75:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 76:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 77:
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
case 79: // 51 医保接口数据日结算 - - - - 供医疗机构日结算对帐使用
data1=JSON.stringify({"JYH":code,"JYHNR":data1})
code="TY01"
break;
}
}
obj = await xianju.medicalXianJu({func,code, HospCode,data1,data2,retMsg,type})
}
retMsg=obj.output
let logObj={feeId: feeID,func:func,code:code, HospCode:HospCode,data1:data1,data2:data2,retMsg:retMsg,type:type};
hisLogger.hisLogger({output:'输出:',feeId: feeID,func:func,code:code, HospCode:HospCode,'retMsg':obj.output,type:type});
return obj;
}
async function setImm32(en_zh){
await dllinvoke.setImm32(en_zh)
}
module.exports ={medical,UUID,enumerate,cardInfo,ReadFile,medicalType,redisPatient,isDownload,voiceQuoter,setImm32};