From 94f16f6a5770c10fce8267e9e851dfc35d8dfbc2 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期五, 26 八月 2022 15:42:47 +0800
Subject: [PATCH] 新增读卡器功能

---
 src/samples/sockteStomp.ts |  204 +++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 166 insertions(+), 38 deletions(-)

diff --git a/src/samples/sockteStomp.ts b/src/samples/sockteStomp.ts
index 1726050..90db1c3 100644
--- a/src/samples/sockteStomp.ts
+++ b/src/samples/sockteStomp.ts
@@ -1,10 +1,16 @@
 import Stomp from 'stompjs'
-var stompClient: Stomp.Client | null=null
+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{
@@ -14,42 +20,52 @@
 
 let devices:Array<device>=[]
 let clientCode:string=''
-
+/**
+ * 保存结果到vuex
+ * @param resultInfo 结果写入
+ */
 const writeResult=(resultInfo:any)=>{
     if(devices.length>0){
-        const deviceInfo=devices.find(de=>{de.deviceName===resultInfo.deviceName})
+        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.deviceName,
+                            deviceName:resultInfo.deviceNumber,
                             type:"读卡器",
                             result:resultInfo.result,
                             resultTime:resultInfo.resultTime,
-                            state:true
+                            state:2
                         }
                     )
                     break
                 case "体重秤":
+                    console.log(resultInfo,'体重秤')
                     sockteStore().setweightSockte(
                         {
-                            deviceName:resultInfo.deviceName,
+                            deviceName:resultInfo.deviceNumber,
                             type:"体重秤",
                             result:resultInfo.result,
                             resultTime:resultInfo.resultTime,
-                            state:true
+                            state:2
                         }
                     )
                     break
                 case "血压计":
+                    console.log(resultInfo,'血压计')
                     sockteStore().setxyjSockte(
                         {
-                            deviceName:resultInfo.deviceName,
+                            deviceName:resultInfo.deviceNumber,
                             type:"血压计",
                             result:resultInfo.result,
                             resultTime:resultInfo.resultTime,
-                            state:true
+                            state:2
                         }
                     )
                     break
@@ -60,62 +76,174 @@
     }
 
 }
+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) {
-    if (message.body) {
+    console.log('接收到数据-----',message.body)
+    if (message.body!==undefined) {
         const data=JSON.parse(message.body)
-    if(data.deviceName)
-        console.log(data,'接收到的数据')
         writeResult(data)
-    } else {
+    }
+    else {
         alert("接收数据异常");
     }
 };
-const callbackState=function(message:any){
+const callbackState=function(message:any) {
     if (message.body) {
         const data=JSON.parse(message.body)
-    if(data.deviceName)
+        if(data){
+            writeStatu(data)
+        }
         console.log(data,'设备心跳包数据')
-        writeResult(data)
-    } else {
-        alert("接收数据异常");
     }
 }
-const connectCallback=function(){
-    console.log("链接成功",stompClient)
-    // 更新sockte链接状态
-    sockteStore().setsockteIsLink(true)
-    console.log(sockteStore().isLink)
-    if(stompClient!==null){
-        if(devices.length>0){
-            devices.forEach(de=>{
-                stompClient.subscribe(`/queue/${clientCode}/${de.deviceName}/result`,callback)
-                stompClient.send(`/app/device/request/${clientCode}/${de.deviceName}`, {}, JSON.stringify({"deviceNumber":de.deviceName}));
-            })
-        }
+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('10秒之后重连')
-        console.log(devices,'设备列表')
+        console.log('60秒之后重连',sockteNum++) 
         const socket = new WebSocket('ws://hemobs.icoldchain.cn/broadcast')
-        stompClient = Stomp.over(socket)
-        stompClient.connect({}, connectCallback,error_callback)
-
-    },10000)
+        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,'设备列表')
+    console.log(devices,'设备列表','chong')
     const socket = new WebSocket('ws://hemobs.icoldchain.cn/broadcast')
     stompClient = Stomp.over(socket)
     stompClient.connect({}, connectCallback,error_callback)
 
 }
-export {creatorClient}
+/**
+ * 发送患者卡号返回患者信息
+ * @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}

--
Gitblit v1.8.0