Просмотр исходного кода

模拟门灯控制优化,当房间有紧急呼叫时常亮红灯,即使分机呼叫取消仍要保持亮红灯,只有主机端处理了该紧急呼叫才灭灯

weizhengliang 7 месяцев назад
Родитель
Сommit
7b20e5427b

+ 125 - 76
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -18,10 +18,7 @@ import com.enation.javashop.net.engine.model.NetState
 import com.google.gson.Gson
 import com.wdkl.app.ncs.conversion_box.BuildConfig
 import com.wdkl.app.ncs.conversion_box.R
-import com.wdkl.app.ncs.conversion_box.bean.CallingItem
-import com.wdkl.app.ncs.conversion_box.bean.EventBean
-import com.wdkl.app.ncs.conversion_box.bean.KeyFunc
-import com.wdkl.app.ncs.conversion_box.bean.SosItem
+import com.wdkl.app.ncs.conversion_box.bean.*
 import com.wdkl.app.ncs.conversion_box.databinding.MainActivityLayoutBinding
 import com.wdkl.app.ncs.conversion_box.fragment.*
 import com.wdkl.app.ncs.conversion_box.helper.*
@@ -154,6 +151,8 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
     private val keyFuncList = ArrayList<KeyFunc>()
     private val nursingMap = HashMap<String, Int>()
     private val eventList = ArrayList<EventBean>()
+    //房间紧急呼叫集合
+    private val sosLampList = ArrayList<Int>()
 
     override fun getLayId(): Int {
         return R.layout.main_activity_layout
@@ -963,9 +962,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                         }
 
                         //关闭门灯
-                        val doorAddr = getDoorLightAddr(addr)
-                        if (!TextUtils.isEmpty(doorAddr)) {
-                            SerialPortHelper.closeDoorLight(doorAddr)
+                        val doorItem = getDoorLightAddr(addr)
+                        if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+                            SerialPortHelper.closeDoorLight(doorItem.lampMac)
                         }
 
                         removeCall(addr)
@@ -1249,9 +1248,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
             }
 
             //打开门灯
-            val doorLightAddr = getDoorLightAddr(uart.toUpperCase(Locale.ROOT))
-            if (!TextUtils.isEmpty(doorLightAddr)) {
-                SerialPortHelper.openDoorLightSingleGreen(doorLightAddr)
+            val doorItem = getDoorLightAddr(uart.toUpperCase(Locale.ROOT))
+            if (doorItem != null && !TextUtils.isEmpty(doorItem.lampMac)) {
+                SerialPortHelper.openDoorLightSingleGreen(doorItem.lampMac)
             }
         } else {
             showMessage(R.string.net_error)
@@ -1278,9 +1277,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         }
 
         //关闭门灯
-        val doorLightAddr = getDoorLightAddr(uart.toUpperCase(Locale.ROOT))
-        if (!TextUtils.isEmpty(doorLightAddr)) {
-            SerialPortHelper.closeDoorLight(doorLightAddr)
+        val doorItem = getDoorLightAddr(uart.toUpperCase(Locale.ROOT))
+        if (doorItem != null && !TextUtils.isEmpty(doorItem.lampMac)) {
+            SerialPortHelper.closeDoorLight(doorItem.lampMac)
         }
     }
 
@@ -1365,9 +1364,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                         updateCallText(getString(R.string.call_standby))
                                         //关闭分机呼叫和门灯
                                         SerialPortHelper.closeSoundChannel(mac)
-                                        val doorAddr = getDoorLightAddr(mac)
-                                        if (!TextUtils.isEmpty(doorAddr)) {
-                                            SerialPortHelper.closeDoorLight(doorAddr)
+                                        val doorItem = getDoorLightAddr(mac)
+                                        if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+                                            SerialPortHelper.closeDoorLight(doorItem.lampMac)
                                         }
                                     }
                                 }
@@ -1426,9 +1425,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
         SerialPortHelper.closeSoundChannel(uart)
         //关闭门灯
-        val doorAddr = getDoorLightAddr(uart.toUpperCase(Locale.ROOT))
-        if (!TextUtils.isEmpty(doorAddr)) {
-            SerialPortHelper.closeDoorLight(doorAddr)
+        val doorItem = getDoorLightAddr(uart.toUpperCase(Locale.ROOT))
+        if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+            SerialPortHelper.closeDoorLight(doorItem.lampMac)
         }
     }
 
@@ -1445,9 +1444,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
                             SerialPortHelper.closeSoundChannel(uart)
                             //关闭门灯
-                            val doorAddr = getDoorLightAddr(uart.toUpperCase(Locale.ROOT))
-                            if (!TextUtils.isEmpty(doorAddr)) {
-                                SerialPortHelper.closeDoorLight(doorAddr)
+                            val doorItem = getDoorLightAddr(uart.toUpperCase(Locale.ROOT))
+                            if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+                                SerialPortHelper.closeDoorLight(doorItem.lampMac)
                             }
                         }
                     }
@@ -1509,7 +1508,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             ) {
                                 //开启门灯
                                 Log.d(TAG, "sos call success, mac: $mac")
-                                val doorAddr = getDoorLightAddrBySos(mac)
+                                val doorAddr = getDoorLightAddrBySos(mac, true)
                                 if (!TextUtils.isEmpty(doorAddr)) {
                                     SerialPortHelper.openDoorLightRed(doorAddr)
                                 }
@@ -1537,7 +1536,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
             //关闭紧急按钮
             SerialPortHelper.closeEmergency(uart)
             //关闭门灯
-            val doorAddr = getDoorLightAddrBySos(uart)
+            val doorAddr = getDoorLightAddrBySos(uart, false)
             if (!TextUtils.isEmpty(doorAddr)) {
                 SerialPortHelper.closeDoorLight(doorAddr)
             }
@@ -1546,25 +1545,28 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
     private fun checkNursingRoom(addr: String) {
         //通过分机地址查找该房间的门灯设备
-        val doorLightAddr = getDoorLightAddr(addr.toUpperCase(Locale.ROOT))
-        if (nursingRooms.contains(doorLightAddr)) {
-            //关闭该门灯
-            if (!TextUtils.isEmpty(doorLightAddr)) {
-                SerialPortHelper.closeDoorLight(doorLightAddr)
-                nursingRooms.remove(doorLightAddr)
-            }
-        } else {
-            //点亮门灯
-            if (!TextUtils.isEmpty(doorLightAddr)) {
-                SerialPortHelper.openDoorLightGreen(doorLightAddr)
-                nursingRooms.add(doorLightAddr!!)
+        val doorItem = getDoorLightAddr(addr.toUpperCase(Locale.ROOT))
+        if (doorItem != null) {
+            val doorLightAddr = doorItem.lampMac
+            if (nursingRooms.contains(doorLightAddr)) {
+                //关闭该门灯
+                if (!TextUtils.isEmpty(doorLightAddr)) {
+                    SerialPortHelper.closeDoorLight(doorLightAddr)
+                    nursingRooms.remove(doorLightAddr)
+                }
+            } else {
+                //点亮门灯
+                if (!TextUtils.isEmpty(doorLightAddr)) {
+                    SerialPortHelper.openDoorLightGreen(doorLightAddr)
+                    nursingRooms.add(doorLightAddr!!)
+                }
             }
         }
     }
 
 
     //通过床位分机查找所在房间的门灯
-    private fun getDoorLightAddr(bedAddr: String) : String? {
+    private fun getDoorLightAddr(bedAddr: String) : DoorItem? {
         //首先找到分机所在床位层级,然后通过该bed frame的父级id(即房间层级)找到对应room frame,获得门灯设备信息
         if (!TextUtils.isEmpty(bedAddr) && FrameHelper.frameDeviceList.size > 0) {
             var roomId = -1
@@ -1576,11 +1578,14 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
             }
 
             if (roomId != -1) {
+                val doorItem = DoorItem()
                 for (frameDevice in FrameHelper.frameDeviceList) {
                     if (frameDevice.frame != null && frameDevice.frame.id == roomId) {
                         if (frameDevice.device != null && frameDevice.device.deviceType == DeviceTypeEnum.SIMULATE_DOOR_LIGHT.value()) {
                             //找到对应门灯设备
-                            return frameDevice.device.ethMac
+                            doorItem.lampMac = frameDevice.device.ethMac
+                            doorItem.frameId = roomId
+                            return doorItem
                         }
                     }
                 }
@@ -1592,7 +1597,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
     }
 
     //通过紧急按钮地址查找门灯
-    private fun getDoorLightAddrBySos(sosAddr: String) : String? {
+    private fun getDoorLightAddrBySos(sosAddr: String, addLamp: Boolean) : String? {
         //首先找到分机所在床位层级,然后通过该bed frame的父级id(即房间层级)找到对应room frame,获得门灯设备信息
         if (!TextUtils.isEmpty(sosAddr) && FrameHelper.frameDeviceList.size > 0) {
             var roomId = -1
@@ -1604,6 +1609,15 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
             }
 
             if (roomId != -1) {
+                Log.e(TAG, "door frame id: $roomId, addLamp: $addLamp, sosLamp size: ${sosLampList.size}")
+                if (addLamp) {
+                    sosLampList.add(roomId)
+                } else {
+                    sosLampList.removeIf {
+                        it == roomId
+                    }
+                }
+
                 for (frameDevice in FrameHelper.frameDeviceList) {
                     if (frameDevice.frame != null && frameDevice.frame.id == roomId) {
                         if (frameDevice.device != null && frameDevice.device.deviceType == DeviceTypeEnum.SIMULATE_DOOR_LIGHT.value()) {
@@ -1637,9 +1651,15 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 Log.e(TAG, "turn on door light: " + frameDevice.device.ethMac)
                                 if (TcpAction.SideAction.SOS_CALL == tcpModel.action) {
                                     SerialPortHelper.openDoorLightRed(frameDevice.device.ethMac)
+                                    sosLampList.add(frameDevice.frame.id)
                                 } else {
                                     if (Constant.colorLight && !Constant.nursingSign) {
-                                        SerialPortHelper.openDoorLightGreen(frameDevice.device.ethMac)
+                                        //如果当前房间有紧急呼叫则保持亮红灯
+                                        if (sosLampList.contains(frameDevice.frame.id)) {
+                                            SerialPortHelper.openDoorLightRed(frameDevice.device.ethMac)
+                                        } else {
+                                            SerialPortHelper.openDoorLightGreen(frameDevice.device.ethMac)
+                                        }
                                     } else {
                                         SerialPortHelper.openDoorLightRed(frameDevice.device.ethMac)
                                     }
@@ -1659,8 +1679,19 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                         if (frameDevice.frame != null && frameDevice.frame.id == sideInteractionVO.fromFrameParentId.toInt()) {
                             if (frameDevice.device != null && frameDevice.device.deviceType == DeviceTypeEnum.SIMULATE_DOOR_LIGHT.value()) {
                                 //找到对应门灯设备
-                                Log.e(TAG, "turn off door light: " + frameDevice.device.ethMac)
-                                SerialPortHelper.closeDoorLight(frameDevice.device.ethMac)
+                                if (TcpAction.SideAction.SOS_CANCEL == tcpModel.action) {
+                                    Log.e(TAG, "turn off door light: " + frameDevice.device.ethMac)
+                                    SerialPortHelper.closeDoorLight(frameDevice.device.ethMac)
+                                    sosLampList.removeIf {
+                                        it == frameDevice.frame.id
+                                    }
+                                } else {
+                                    //判断当前房间是否有紧急呼叫
+                                    if (!sosLampList.contains(frameDevice.frame.id)) {
+                                        Log.e(TAG, "turn off door light: " + frameDevice.device.ethMac)
+                                        SerialPortHelper.closeDoorLight(frameDevice.device.ethMac)
+                                    }
+                                }
                                 break
                             }
                         }
@@ -1672,8 +1703,19 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                         if (frameDevice.frame != null && frameDevice.frame.id == sideInteractionVO.toFrameParentId.toInt()) {
                             if (frameDevice.device != null && frameDevice.device.deviceType == DeviceTypeEnum.SIMULATE_DOOR_LIGHT.value()) {
                                 //找到对应门灯设备
-                                Log.e(TAG, "turn off door light: " + frameDevice.device.ethMac)
-                                SerialPortHelper.closeDoorLight(frameDevice.device.ethMac)
+                                if (TcpAction.SideAction.SOS_CANCEL == tcpModel.action) {
+                                    Log.e(TAG, "turn off door light: " + frameDevice.device.ethMac)
+                                    SerialPortHelper.closeDoorLight(frameDevice.device.ethMac)
+                                    sosLampList.removeIf {
+                                        it == frameDevice.frame.id
+                                    }
+                                } else {
+                                    //判断当前房间是否有紧急呼叫
+                                    if (!sosLampList.contains(frameDevice.frame.id)) {
+                                        Log.e(TAG, "turn off door light: " + frameDevice.device.ethMac)
+                                        SerialPortHelper.closeDoorLight(frameDevice.device.ethMac)
+                                    }
+                                }
                                 break
                             }
                         }
@@ -1710,9 +1752,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
                 //关闭门灯
                 if (!TextUtils.isEmpty(bedMac)) {
-                    val doorAddr = getDoorLightAddr(bedMac)
-                    if (!TextUtils.isEmpty(doorAddr)) {
-                        SerialPortHelper.closeDoorLight(doorAddr)
+                    val doorItem = getDoorLightAddr(bedMac)
+                    if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+                        SerialPortHelper.closeDoorLight(doorItem.lampMac)
                     }
                 }
             }
@@ -1829,10 +1871,13 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             curDeviceId = interactionVO.toDeviceId
                             targetSip = interactionVO.fromSipId
 
-                            //关闭门灯
-                            val doorAddr = getDoorLightAddr(curDeviceUart)
-                            if (!TextUtils.isEmpty(doorAddr)) {
-                                SerialPortHelper.closeDoorLight(doorAddr)
+                            //主机呼叫分机,关闭该房间门灯
+                            val doorItem = getDoorLightAddr(curDeviceUart)
+                            if (doorItem != null && !TextUtils.isEmpty(doorItem.lampMac)) {
+                                SerialPortHelper.closeDoorLight(doorItem.lampMac)
+                                sosLampList.removeIf {
+                                    it == doorItem.frameId
+                                }
                             }
 
                             updateCallText(getString(R.string.call_incoming))
@@ -1858,9 +1903,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             showCallFragment(0)
 
                             //关闭门灯
-                            val doorAddr = getDoorLightAddr(curDeviceUart)
-                            if (!TextUtils.isEmpty(doorAddr)) {
-                                SerialPortHelper.closeDoorLight(doorAddr)
+                            val doorItem = getDoorLightAddr(curDeviceUart)
+                            if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+                                SerialPortHelper.closeDoorLight(doorItem.lampMac)
                             }
                         } else if (tcpModel.getAction() == TcpAction.VoiceAction.SUCCESS) {
                             //呼叫成功
@@ -1888,12 +1933,20 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             callingList.add(item)
 
                             //开启门灯
-                            val doorAddr = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
-                            if (!TextUtils.isEmpty(doorAddr)) {
-                                if (Constant.colorLight && !Constant.nursingSign) {
-                                    SerialPortHelper.openDoorLightGreen(doorAddr)
-                                } else {
-                                    SerialPortHelper.openDoorLightRed(doorAddr)
+                            val doorItem = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
+                            if (doorItem != null) {
+                                val doorAddr = doorItem.lampMac
+                                if (!TextUtils.isEmpty(doorAddr)) {
+                                    if (Constant.colorLight && !Constant.nursingSign) {
+                                        //如果当前房间有紧急呼叫则保持亮红灯
+                                        if (sosLampList.contains(doorItem.frameId)) {
+                                            SerialPortHelper.openDoorLightRed(doorAddr)
+                                        } else {
+                                            SerialPortHelper.openDoorLightGreen(doorAddr)
+                                        }
+                                    } else {
+                                        SerialPortHelper.openDoorLightRed(doorAddr)
+                                    }
                                 }
                             }
                         } else if (tcpModel.getAction() == TcpAction.VoiceAction.REJECT) {
@@ -1906,9 +1959,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 showMessage(R.string.call_reject)
                                 //关闭分机呼叫和门灯
                                 SerialPortHelper.closeSoundChannel(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
-                                val doorAddr = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
-                                if (!TextUtils.isEmpty(doorAddr)) {
-                                    SerialPortHelper.closeDoorLight(doorAddr)
+                                val doorItem = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
+                                if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+                                    SerialPortHelper.closeDoorLight(doorItem.lampMac)
                                 }
 
                                 removeCall(interactionVO.fromEthIp)
@@ -1924,9 +1977,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             showMessage(R.string.call_busy)
                             //关闭分机呼叫和门灯
                             SerialPortHelper.closeSoundChannel(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
-                            val doorAddr = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
-                            if (!TextUtils.isEmpty(doorAddr)) {
-                                SerialPortHelper.closeDoorLight(doorAddr)
+                            val doorItem = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
+                            if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+                                SerialPortHelper.closeDoorLight(doorItem.lampMac)
                             }
 
                             removeCall(interactionVO.fromEthIp)
@@ -1939,9 +1992,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 showMessage(R.string.call_failed)
                                 //关闭分机呼叫和门灯
                                 SerialPortHelper.closeSoundChannel(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
-                                val doorAddr = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
-                                if (!TextUtils.isEmpty(doorAddr)) {
-                                    SerialPortHelper.closeDoorLight(doorAddr)
+                                val doorItem = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
+                                if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+                                    SerialPortHelper.closeDoorLight(doorItem.lampMac)
                                 }
 
                                 removeCall(interactionVO.fromEthIp)
@@ -1958,9 +2011,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 if (interactionVO.fromDeviceType == DeviceTypeEnum.SIMULATE_BED_DEVICE.value()) {
                                     if (!TextUtils.isEmpty(interactionVO.fromEthIp)) {
                                         SerialPortHelper.closeSoundChannel(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
-                                        val doorAddr = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
-                                        if (!TextUtils.isEmpty(doorAddr)) {
-                                            SerialPortHelper.closeDoorLight(doorAddr)
+                                        val doorItem = getDoorLightAddr(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
+                                        if (doorItem != null && !sosLampList.contains(doorItem.frameId) && !TextUtils.isEmpty(doorItem.lampMac)) {
+                                            SerialPortHelper.closeDoorLight(doorItem.lampMac)
                                         }
 
                                         removeCall(interactionVO.fromEthIp)
@@ -1968,10 +2021,6 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 } else {
                                     if (!TextUtils.isEmpty(interactionVO.toEthIp)) {
                                         SerialPortHelper.closeSoundChannel(interactionVO.toEthIp.toUpperCase(Locale.ROOT))
-                                        //val doorAddr = getDoorLightAddr(interactionVO.toEthIp)
-                                        //if (!TextUtils.isEmpty(doorAddr)) {
-                                        //    SerialPortHelper.closeDoorLight(doorAddr)
-                                        //}
                                     }
                                 }
                             //}

+ 22 - 0
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/bean/DoorItem.java

@@ -0,0 +1,22 @@
+package com.wdkl.app.ncs.conversion_box.bean;
+
+public class DoorItem {
+    private String lampMac;
+    private int frameId;
+
+    public String getLampMac() {
+        return lampMac;
+    }
+
+    public void setLampMac(String lampMac) {
+        this.lampMac = lampMac;
+    }
+
+    public int getFrameId() {
+        return frameId;
+    }
+
+    public void setFrameId(int frameId) {
+        this.frameId = frameId;
+    }
+}