import Stomp from 'stompjs'
|
import os from 'os'
|
import { ipcRenderer } from 'electron'
|
let stompClient: Stomp.Client | null=null
|
|
import { userInfoStore } from '@/stores/userInfo'
|
import { patientInfoStore } from '@/stores/patient'
|
import {sockteStore} from '@/stores/sockteInfo'
|
import { result } from 'lodash'
|
const sound = require("sound-play");
|
|
|
let sockteNum=0
|
|
|
interface device{
|
deviceName:string
|
deviceType:string
|
}
|
|
let devices:Array<device>=[]
|
let clientCode:string=''
|
/**
|
* 保存结果到vuex
|
* @param resultInfo 结果写入
|
*/
|
const writeResult=(resultInfo:any)=>{
|
if(devices.length>0){
|
const deviceInfo=devices.find(de=>{
|
return de.deviceName===resultInfo.deviceNumber
|
})
|
console.log(deviceInfo,'更具设备number查找到的设备')
|
console.log(resultInfo)
|
if(deviceInfo!==undefined){
|
switch(deviceInfo.deviceType){
|
case '读卡器':
|
console.log('读卡器收到消息')
|
sockteStore().setdkqSockte(
|
{
|
deviceName:resultInfo.deviceNumber,
|
type:"读卡器",
|
result:resultInfo.result,
|
resultTime:resultInfo.resultTime,
|
state:2
|
}
|
)
|
break
|
case "体重秤":
|
console.log(resultInfo,'体重秤')
|
sockteStore().setweightSockte(
|
{
|
deviceName:resultInfo.deviceNumber,
|
type:"体重秤",
|
result:resultInfo.result,
|
resultTime:resultInfo.resultTime,
|
state:2
|
}
|
)
|
break
|
case "血压计":
|
console.log(resultInfo,'血压计')
|
sockteStore().setxyjSockte(
|
{
|
deviceName:resultInfo.deviceNumber,
|
type:"血压计",
|
result:resultInfo.result,
|
resultTime:resultInfo.resultTime,
|
state:2
|
}
|
)
|
break
|
default:
|
console.log('有配置类型没有匹配')
|
}
|
}
|
}
|
|
}
|
const writeStatu=(resultInfo:any)=>{
|
if(devices.length>0){
|
const deviceInfo=devices.find(de=>{
|
console.log(de.deviceName,resultInfo.deviceName)
|
return de.deviceName===resultInfo.deviceName
|
})
|
if(deviceInfo!==undefined){
|
switch(deviceInfo.deviceType){
|
case '读卡器':
|
sockteStore().setdkqSockte(
|
{
|
deviceName:resultInfo.deviceName,
|
type:"读卡器",
|
result:resultInfo.result,
|
resultTime:resultInfo.resultTime,
|
state:0
|
}
|
)
|
break
|
case "体重秤":
|
sockteStore().setweightState(resultInfo.status)
|
break
|
case "血压计":
|
sockteStore().setXtjState(resultInfo.status)
|
break
|
default:
|
console.log('有配置类型没有匹配')
|
}
|
}
|
}
|
|
}
|
const writePatient=(resultInfo:any)=>{
|
// 给一个时间变化
|
const da=new Date().toTimeString()
|
console.log(da)
|
const info={
|
id:resultInfo.patientInfo===null?0:resultInfo.patientInfo.id,
|
code:resultInfo.patientInfo===null?'':resultInfo.patientInfo.code,
|
name:resultInfo.patientInfo===null?'':resultInfo.patientInfo.patientName,
|
patientAvatarIcon:resultInfo.patientInfo===null?'':resultInfo.patientInfo.patientAvatarIcon,
|
deviceCode:resultInfo.deviceCode===null?"":resultInfo.deviceCode,
|
hemoCode:resultInfo.hemoCode===null?"":resultInfo.hemoCode,
|
pureWeight:resultInfo.pureWeight===null?"":resultInfo.pureWeight,
|
datetime:da
|
}
|
// 写入vuex里
|
patientInfoStore().setpatientInfo(info)
|
}
|
|
// 订阅结果事件返回函数
|
const callback = function(message:any) {
|
console.log('接收到数据-----',message.body)
|
if (message.body!==undefined) {
|
const data=JSON.parse(message.body)
|
writeResult(data)
|
}
|
else {
|
alert("接收数据异常");
|
}
|
};
|
const callbackState=function(message:any) {
|
if (message.body) {
|
const data=JSON.parse(message.body)
|
if(data){
|
writeStatu(data)
|
}
|
console.log(data,'设备心跳包数据')
|
}
|
}
|
const PatientCallback=function(message:any){
|
if (message.body) {
|
const data=JSON.parse(message.body)
|
console.log(data,'患者信息读取')
|
writePatient(data)
|
|
}
|
|
}
|
const configCallback =function(message:any){
|
if(message.body){
|
const data=JSON.parse(message.body)
|
console.log(data,'配置文件读取')
|
ipcRenderer.send('setConfingData',data)
|
|
}
|
}
|
var isErrConnectBackCalled = false;
|
const connectCallback=function(){
|
isErrConnectBackCalled = true
|
const pcName= sockteStore().pcName
|
console.log("链接成功",stompClient,pcName)
|
sockteStore().setsockteIsLink(true)
|
// 订阅患者信息服务
|
if(stompClient!==null){
|
// 订阅患者信息事件
|
stompClient.subscribe(`/queue/patient/info/${pcName}`,PatientCallback)
|
// 订阅配置文件事件
|
stompClient.subscribe(`/queue/workstation/config/set/${clientCode}/${pcName}`,configCallback)
|
// 发送配置文件到服务端
|
stompClient.send(`/app/workstation/config/set/${clientCode}/${pcName}`,{},JSON.stringify({"clientCode":clientCode,"machineName":pcName}))
|
|
}
|
// 更新sockte链接状态
|
sockteStore().setsockteIsLink(true)
|
console.log(sockteStore().isLink)
|
if(devices!==undefined &&devices!=null&&devices.length>0){
|
// 更新sockte链接状态
|
sockteStore().setsockteIsLink(true)
|
console.log(sockteStore().isLink)
|
console.log(devices)
|
if(devices!==undefined&&devices!=null &&devices!=null &&devices.length>0){
|
devices.forEach(de=>{
|
if(stompClient!==null){
|
stompClient.subscribe(`/queue/${clientCode}/${de.deviceName}/result`,callback)
|
stompClient.subscribe(`/queue/${clientCode}/${de.deviceName}/keepalive`,callbackState)
|
stompClient.send(`/app/device/request/${clientCode}/${de.deviceName}`, {}, JSON.stringify({"deviceNumber":de.deviceName}));
|
|
}
|
})
|
}
|
}
|
}
|
|
const error_callback=function(error:any){
|
console.log('链接错误',error);
|
sockteStore().setsockteIsLink(false)
|
setTimeout(()=>{
|
console.log('60秒之后重连',sockteNum++)
|
const socket = new WebSocket('ws://hemobs.icoldchain.cn/broadcast')
|
stompClient?.disconnect(()=>{
|
console.log("disconnected!");
|
stompClient = Stomp.over(socket)
|
stompClient.connect({}, connectCallback,error_callback)
|
},{})
|
},60000)
|
}
|
// 创建客户端链接
|
const creatorClient=(devices2:any,clientCode2:any)=>{
|
devices=devices2
|
clientCode=clientCode2
|
console.log(devices,'设备列表','chong')
|
const socket = new WebSocket('ws://hemobs.icoldchain.cn/broadcast')
|
stompClient = Stomp.over(socket)
|
stompClient.connect({}, connectCallback,error_callback)
|
|
}
|
/**
|
* 发送患者卡号返回患者信息
|
* @param codeStr
|
*/
|
const sendPationCode=(codeStr:string)=>{
|
const pcName= sockteStore().pcName
|
const mode={
|
clientCode:clientCode,
|
queryCode:codeStr
|
}
|
if(stompClient!==null){
|
stompClient.send(`/app/patient/info/get/${pcName}`,{},JSON.stringify(mode))
|
}
|
}
|
/**
|
*
|
* @param mode 发送结果到sockt服务
|
*/
|
const sendPationSet=(mode:any)=>{
|
if(stompClient!==null){
|
stompClient.send(`/app/patient/info/set`,{},JSON.stringify(mode))
|
}
|
}
|
export {creatorClient,sendPationCode,sendPationSet}
|