Kaynağa Gözat

印尼项目:H-进入护理,R-退出护理,?(拔针按键)-取消呼叫,增加模拟紧急按钮注册为blue code类型

weizhengliang 9 ay önce
ebeveyn
işleme
e77aaf3b51

+ 92 - 37
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -46,10 +46,7 @@ import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
 import com.wdkl.ncs.android.middleware.model.vo.DeviceNurseInfoVO
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.tcp.TcpClient
-import com.wdkl.ncs.android.middleware.tcp.channel.DeviceUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.EventUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.OtherUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
+import com.wdkl.ncs.android.middleware.tcp.channel.*
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
@@ -320,14 +317,14 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
             "start adbd"
         )
         try {
-            RunAsRoot(commands)
+            runAsRoot(commands)
         } catch (e: IOException) {
             e.printStackTrace()
         }
     }
 
 
-    private fun RunAsRoot(cmds: ArrayList<String>) {
+    private fun runAsRoot(cmds: ArrayList<String>) {
         val p = Runtime.getRuntime().exec("su")
         val os = DataOutputStream(p.outputStream)
         for (tmpCmd in cmds) {
@@ -947,10 +944,6 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                         //分机挂断
                         if (Constant.CALL_STATE == Constant.CALL_CALLING) {
                             if (addr.equals(curDeviceUart, true)) {
-                                /*EventBus.getDefault().post(MessageEvent("handoff", Constant.EVENT_END_CALL))
-                                Constant.CALL_STATE = Constant.CALL_STANDBY
-                                VoiceUtil.handoffAudioCall(curDeviceId, fromId, curInteractionVO!!.id)*/
-
                                 handoffCall()
                             } else {
                                 cancelOutCall(addr, false)
@@ -1047,7 +1040,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
                     "H" -> {
                         //护理按键
-                        val func = findKeyFunc("H")
+                        /*val func = findKeyFunc("H")
                         if (func != null) {
                             if (func.type == TcpAction.SideAction.NURSING.name) {
                                 val nurseMac = addr.toUpperCase(Locale.ROOT)
@@ -1067,7 +1060,13 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             }
                         } else {
                             Log.e(TAG, "error func: H护理按键")
-                        }
+                        }*/
+
+                        //进入护理
+                        val nurseMac = addr.toUpperCase(Locale.ROOT)
+                        Log.e(TAG,"nursing map size: " + nursingMap.size)
+                        nursingMap.put(nurseMac, -1)
+                        sendNursing(addr)
                     }
 
                     "Y" -> {
@@ -1083,16 +1082,39 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
                     "R" -> {
                         //清除所有事件
+                        //退出护理
+                        val mac = addr.toUpperCase(Locale.ROOT)
+                        if (nursingMap.containsKey(mac)) {
+                            nursingMap.remove(mac)
+                            sendNursingEnd(addr)
+                        }
                     }
 
                     "?" -> {
                         //拔针按键
-                        val func = findKeyFunc("?")
-                        if (func != null) {
-                            Log.e(TAG, "keyId: ${func.value}")
-                            sendEvent(addr, func.value)
+                        //印尼项目定义为呼叫取消
+                        if (Constant.CALL_STATE == Constant.CALL_CALLING) {
+                            if (addr.equals(curDeviceUart, true)) {
+                                handoffCall()
+                            } else {
+                                cancelOutCall(addr, false)
+                            }
+                        } else if (Constant.CALL_STATE == Constant.CALL_INCOMING) {
+                            if (addr.equals(curDeviceUart, true)) {
+                                rejectCall()
+                                SerialPortHelper.closeSoundChannel(addr)
+                                RingPlayHelper.stopRingTone()
+                            } else {
+                                cancelOutCall(addr, false)
+                            }
                         } else {
-                            Log.e(TAG, "error func: ?拔针按键")
+                            cancelOutCall(addr, true)
+                        }
+
+                        //关闭门灯
+                        val doorAddr = getDoorLightAddr(addr)
+                        if (!TextUtils.isEmpty(doorAddr)) {
+                            SerialPortHelper.closeDoorLight(doorAddr)
                         }
                     }
                 }
@@ -1347,29 +1369,55 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         if (FrameHelper.frameDeviceList.size > 0 ) {
             for (frameDevice in FrameHelper.frameDeviceList) {
                 if (frameDevice.device != null && uart.equals(frameDevice.device.ethMac, true)) {
-                    updateCallText("SOS-->$uart, ${frameDevice.device.id}")
-                    //OtherUtil.sendSosCall(frameDevice.device.id)
+                    if (frameDevice.device.deviceType == DeviceTypeEnum.SIMULATE_BLUE_CODE.value()) {
+                        //blue code请求
+                        updateCallText("Blue code-->$uart, ${frameDevice.device.id}")
+
+                        val tcpModel = BlueCodeUtil.BlueCodeCall(frameDevice.device.id, frameDevice.frame.fullName)
+                        val transaction: TcpCallback = object : TcpCallback(tcpModel.tid, uart) {
+                            override fun onSuccess(jsonObject: JSONObject) {
+                                //开启门灯
+                                Log.d(TAG, "blue code call success, mac: $mac")
+                                /*val doorAddr = getDoorLightAddrBySos(mac)
+                                if (!TextUtils.isEmpty(doorAddr)) {
+                                    SerialPortHelper.openDoorLightRed(doorAddr)
+                                }*/
+                            }
 
-                    val tcpModel = OtherUtil.SOSCall(frameDevice.device.id, 0)
-                    val transaction: TcpCallback = object : TcpCallback(tcpModel.tid, uart) {
-                        override fun onSuccess(jsonObject: JSONObject) {
-                            //开启门灯
-                            Log.d(TAG, "sos call success, mac: $mac")
-                            val doorAddr = getDoorLightAddrBySos(mac)
-                            if (!TextUtils.isEmpty(doorAddr)) {
-                                SerialPortHelper.openDoorLightRed(doorAddr)
+                            override fun onFailed(jsonObject: JSONObject) {
+                                // 这里写发送失败的方法
+                                val callbackString = jsonObject.getString(CALLBACK)
+                                Log.e(TAG, "blue code call fail: $callbackString, mac: $mac")
+                                //关闭紧急按钮
+                                SerialPortHelper.closeEmergency(mac)
                             }
                         }
+                        TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+                    } else {
+                        updateCallText("SOS-->$uart, ${frameDevice.device.id}")
+
+                        val tcpModel = OtherUtil.SOSCall(frameDevice.device.id, 0)
+                        val transaction: TcpCallback = object : TcpCallback(tcpModel.tid, uart) {
+                            override fun onSuccess(jsonObject: JSONObject) {
+                                //开启门灯
+                                Log.d(TAG, "sos call success, mac: $mac")
+                                val doorAddr = getDoorLightAddrBySos(mac)
+                                if (!TextUtils.isEmpty(doorAddr)) {
+                                    SerialPortHelper.openDoorLightRed(doorAddr)
+                                }
+                            }
 
-                        override fun onFailed(jsonObject: JSONObject) {
-                            // 这里写发送失败的方法
-                            val callbackString = jsonObject.getString(CALLBACK)
-                            Log.e(TAG, "sos call fail: $callbackString, mac: $mac")
-                            //关闭紧急按钮
-                            SerialPortHelper.closeEmergency(mac)
+                            override fun onFailed(jsonObject: JSONObject) {
+                                // 这里写发送失败的方法
+                                val callbackString = jsonObject.getString(CALLBACK)
+                                Log.e(TAG, "sos call fail: $callbackString, mac: $mac")
+                                //关闭紧急按钮
+                                SerialPortHelper.closeEmergency(mac)
+                            }
                         }
+                        TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
                     }
-                    TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+
                     break
                 }
             }
@@ -2016,6 +2064,15 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             AppUtil.setSysTime(timeStr, timeZone)
                             Log.d("setTime", "set sys time2: $timeStr, $timeZone")
                         }
+                    } else if (tcpModel.type == TcpType.BLUE_CODE) {
+                        if (tcpModel.action == TcpAction.BlueCodeAction.RESPONDED) {
+                            //主机响应blue code
+                            if (tcpModel.data != null) {
+                                val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+                                val addr = interactionVO.fromEthIp.toUpperCase(Locale.ROOT)
+                                SerialPortHelper.closeEmergency(addr)
+                            }
+                        }
                     }
                 }
             }
@@ -2357,9 +2414,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                     if (Constant.LATER_RESTART && Constant.CALL_STATE == Constant.CALL_STANDBY) {
                         AppUpdateHelper.restartApp(activity)
                     }
-                } /*else if (TextUtils.isEmpty(Constant.TCP_SERVER_URL)) {
-                    presenter.loadTcpServerHost()
-                }*/
+                }
             } else if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) {
                 updateNetState()
             }

+ 2 - 2
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/fragment/MainFragment.kt

@@ -69,7 +69,7 @@ class MainFragment: BaseFragment<MainFragmentPresenter, ConversionBoxMainLayBind
                 //房间设备
                 if (room.roomDeviceList != null) {
                     for (roomDevice in room.roomDeviceList) {
-                        var roomBean = FrameDeviceBean()
+                        val roomBean = FrameDeviceBean()
                         roomBean.frame = room.frameRoom
                         roomBean.device = roomDevice
                         FrameHelper.frameDeviceList.add(roomBean)
@@ -86,7 +86,7 @@ class MainFragment: BaseFragment<MainFragmentPresenter, ConversionBoxMainLayBind
                         //床位设备
                         if (bed.bedDeviceList != null) {
                             for (bedDevice in bed.bedDeviceList) {
-                                var bedBean = FrameDeviceBean()
+                                val bedBean = FrameDeviceBean()
                                 bedBean.frame = bed.frameBed
                                 bedBean.device = bedDevice
                                 FrameHelper.frameDeviceList.add(bedBean)

+ 53 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/BlueCodeUtil.java

@@ -0,0 +1,53 @@
+package com.wdkl.ncs.android.middleware.tcp.channel;
+
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction;
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpType;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class BlueCodeUtil {
+
+    public static TcpModel BlueCodeCall(Integer fromId, String frame){
+        Map map = new HashMap();
+        map.put("title", frame);
+
+        TcpModel tcpModel = new TcpModel(null);
+        tcpModel.setType(TcpType.BLUE_CODE);
+        tcpModel.setAction(TcpAction.BlueCodeAction.CALL);
+        tcpModel.setFromId(fromId);
+        tcpModel.setData(map);
+        return tcpModel;
+    }
+
+    public static TcpModel BlueCodeResponse(String tid, Integer fromId, Integer interactionId){
+        TcpModel tcpModel = new TcpModel(tid);
+        tcpModel.setType(TcpType.BLUE_CODE);
+        tcpModel.setAction(TcpAction.BlueCodeAction.RESPONSE);
+        tcpModel.setFromId(fromId);
+        tcpModel.setData(interactionId);
+        return tcpModel;
+    }
+
+    public static TcpModel BlueCodeResponded(Integer fromId, Integer toId){
+        TcpModel tcpModel = new TcpModel(null);
+        tcpModel.setType(TcpType.BLUE_CODE);
+        tcpModel.setAction(TcpAction.BlueCodeAction.RESPONDED);
+        tcpModel.setFromId(fromId);
+        tcpModel.setToId(toId);
+        return tcpModel;
+    }
+
+
+    public static void sendBlueCodeCall(Integer fromId, String frame) {
+        TcpModel tcpModel = BlueCodeUtil.BlueCodeCall(fromId, frame);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    public static void sendBlueCodeResponse(String tid, Integer fromId, Integer interactionId) {
+        TcpModel tcpModel = BlueCodeUtil.BlueCodeResponse(tid, fromId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+}

+ 1 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/DeviceChannel.java

@@ -81,6 +81,7 @@ public class DeviceChannel {
             case TIME:
             case SOS:
             case SIDE:
+            case BLUE_CODE:
                 EventBus.getDefault().post(new MessageEvent(tcpModel, EVENT_TCP_MSG));
                 break;
         }

+ 3 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/dto/TcpModel.java

@@ -154,6 +154,9 @@ public class TcpModel implements Serializable {
             case SIDE:
                 tcpAction = TcpAction.SideAction.fromString(action);
                 break;
+            case BLUE_CODE:
+                tcpAction = TcpAction.BlueCodeAction.fromString(action);
+                break;
         }
         tcpModel.setTid(tid);
         tcpModel.setType(tcpType);

+ 32 - 4
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/DeviceTypeEnum.java

@@ -8,6 +8,7 @@ package com.wdkl.ncs.android.middleware.tcp.enums;
 
 public enum DeviceTypeEnum {
 
+    // 护士主机
     NURSE_HOST(1, "护士主机"),
     DOCTOR_HOST(2, "医生主机"),
     DOOR_DEVICE(3, "门口机"),
@@ -29,15 +30,42 @@ public enum DeviceTypeEnum {
     VISITATION(19,"探视机"),
     RS485_TRANSFER(20,"485转换盒"),
     EMERGENCY_BUTTON(21, "紧急按钮"),
-    RS485_DEER_DEVICE(22,"485门口分机"),
+    RS485_DOOR_DEVICE(22,"485门口分机"),
     ALARM_BODY_INDUCTIVE(23, "红外报警器"),
     ALARM_WATER_OVERFLOW(24, "用水监控器"),
     ALARM_HOUSEHOLD_GAS(25, "家用燃气报警器"),
     ALARM_HOUSEHOLD_SMOKE(26, "家用烟雾报警器"),
     ALARM_BUTTON_SOS(27, "一键报警器"),
-    DOOR_LOCK(30, "门磁传感器");
-    private int value;
-    private String typeName;
+    VITAL_SIGNS_DEVICE(28, "体征设备"),
+    ALARM_RESTRAINT_BAND(29, "约束带报警器"),
+    DOOR_LOCK(30, "门磁传感器"),
+    EMERGENCY_GATEWAY(31, "报警网关"),
+    ALARM_433BUTTON(32, "433报警器"),
+    OTHER_HOST(33, "其他主机"),
+    BREASTPLATE(34, "胸牌/手环"),
+    OWON_X5_GATEWAY(35,"OWONX5网关"),
+    FALL_DETECTION_RADAR(36,"防跌倒雷达"),
+    HUMAN_DETECTION_RADAR(37,"睡眠监测雷达"),
+    ALARM_INFUSION(38,"输液报警器"),
+    ELECTRONIC_FENCE(39,"电子围栏"),
+    S433_DOOR_LAMP(40,"433无线门灯"),
+    S433_TRANSFER_BOX(41,"433无线转换盒"),
+    S433_RECEIVER(42,"433接收"),
+    SLEEPMATTRESS(43,"睡眠床垫"),
+    S4G_INTERCOM(44,"4G对讲器"),
+    MULTIFUNCTIONAL_BUTTON(45,"多功能按钮"),
+    WATCH_IW(46,"智能手表-IW"),
+    S433_BJMD(47,"报警门灯"),
+    SOS_VOICE_BUTTON(48, "SOS语音按钮"),
+    PTT(49, "一键通"),
+    SMART_LIFE_GATEWAY(50, "智慧生活网关"),
+    SMART_LIFE_VOICE_GATE(51, "智慧生活语音网关"),
+    CURTAIN(52, "窗帘"),
+    SWITCH(53, "开关"),
+    SIMULATE_BLUE_CODE(54, "模拟蓝色代码");
+
+    private final int value;
+    private final String typeName;
 
 
     DeviceTypeEnum(int value, String typeName) {

+ 31 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/TcpAction.java

@@ -629,4 +629,35 @@ public interface TcpAction {
             return userOptionEnum == null ? NO_MATCH :userOptionEnum;
         }
     }
+
+    enum BlueCodeAction implements TcpAction {
+        CALL("呼叫"),
+        SUCCESS("成功"),
+        RESPONSE("响应"),
+        RESPONDED("已响应"),
+        NO_MATCH("没有匹配");
+
+        private final String description;
+        BlueCodeAction(String description){
+            this.description = description;
+        }
+        public String getDescription() {
+            return description;
+        }
+
+        public String getName(){
+            return this.name();
+        }
+
+        private final static Map<String , BlueCodeAction> ENUM_MAP = new HashMap<String, BlueCodeAction>();
+        static {
+            for(BlueCodeAction v : values()) {
+                ENUM_MAP.put(v.toString() , v);
+            }
+        }
+        public static BlueCodeAction fromString(String v) {
+            BlueCodeAction userOptionEnum = ENUM_MAP.get(v);
+            return userOptionEnum == null ? NO_MATCH :userOptionEnum;
+        }
+    }
 }

+ 1 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/TcpType.java

@@ -21,6 +21,7 @@ public enum TcpType {
     BROADCAST("广播"),
     ENTRACEGUARD("门禁"),
     CHANNELIM("频道留言"),
+    BLUE_CODE("blue_code"),
     TIME("时间");
 
     private String description;