Ver código fonte

分机多功能按键优化及bug修复

wzl 2 meses atrás
pai
commit
967cb9a950

+ 7 - 9
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/activity/CallingActivity.kt

@@ -38,6 +38,11 @@ class CallingActivity: BaseToolActivity() {
 
         super.onCreate(savedInstanceState)
 
+        if (!EventBus.getDefault().isRegistered(this)) {
+            // 未注册的逻辑处理
+            EventBus.getDefault().register(this)
+        }
+
         requestWindowFeature(Window.FEATURE_NO_TITLE)
         window.addFlags(
             WindowManager.LayoutParams.FLAG_FULLSCREEN or
@@ -155,16 +160,9 @@ class CallingActivity: BaseToolActivity() {
         window.decorView.systemUiVisibility = FULL_SCREEN_FLAG
     }
 
-    override fun onStart() {
-        super.onStart()
-        if (!EventBus.getDefault().isRegistered(this)) {
-            // 未注册的逻辑处理
-            EventBus.getDefault().register(this)
-        }
-    }
+    override fun onDestroy() {
+        super.onDestroy()
 
-    override fun onStop() {
-        super.onStop()
         if (EventBus.getDefault().isRegistered(this)) {
             // 已注册的逻辑处理
             EventBus.getDefault().unregister(this)

+ 54 - 21
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/activity/CallingbedActivity.kt

@@ -79,6 +79,7 @@ import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.*
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
+import com.wdkl.ncs.android.middleware.tcp.enums.RoleTypeEnum
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
 import com.wdkl.ncs.android.middleware.udp2.UdpHelper
@@ -713,6 +714,8 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
     private fun initDevice() {
         if (!TextUtils.isEmpty(Constant.DEVICE_REGISTER_ID)) {
             presenter.loadDeviceInfo(Constant.DEVICE_REGISTER_ID)
+
+            presenter.getRoleList()
         }
     }
 
@@ -1363,7 +1366,8 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
     }
 
     override fun loadRoles(roles: List<RoleDO>) {
-
+        //缓存角色列表
+        Constant.ROLES = roles
     }
 
     override fun loadCommunicateDevice(communicateDevice: List<BedCommunicateDeviceVO>) {
@@ -1637,11 +1641,13 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
         val decodedJson = StringEscapeUtils.unescapeHtml4(jsonWithEscapes)
         val buttonListType = object : TypeToken<List<ButtonType>>() {}.type
         val buttonList: List<ButtonType> = Gson().fromJson(Constant.device_button_function, buttonListType)
-        val type = "KEY$status"
+        val key = "KEY$status"
         val currentTime = System.currentTimeMillis()
 
         for (button in buttonList) {
-            if (type == button.key) {
+            val buttonKey = StringEscapeUtils.unescapeXml(button.key)
+            Log.e(TAG, "按键key为" + key + " buttonKey为" + buttonKey + ", buttonType为" + button.type)
+            if (key == buttonKey) {
                 when (button.type) {
                     "SOS" -> handleSOSButton(currentTime)
                     "VOICE" -> handleVoiceButton(button.value, currentTime)
@@ -1670,10 +1676,24 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
     private fun handleVoiceButton(value: Any?, currentTime: Long) {
         if (currentTime - clickTime > 2000) {
             if (Constant.TCP_CONNECTED) {
-                when {
-                    TextUtils.isEmpty(Constant.SIP_ID) -> showMessage(R.string.no_custom)
-                    Constant.CALL_STATE == Constant.CALL_STANDBY -> startCallRoleName(value.toString())
-                    else -> showMessage(R.string.call_fail)
+                if (value == "CANCEL") {
+                    //取消呼叫
+                    if (Constant.CALL_STATE == Constant.CALL_CALLING) {
+                        //通话中挂断
+                        EventBus.getDefault().post(MessageEvent("handoff", Constant.EVENT_SERIAL_EVENT))
+                    } else if (Constant.CALL_STATE == Constant.CALL_OUTGOING) {
+                        //呼叫取消
+                        EventBus.getDefault().post(MessageEvent("cancel", Constant.EVENT_SERIAL_EVENT))
+                    } else if (Constant.CALL_STATE == Constant.CALL_INCOMING) {
+                        //来电拒接
+                        EventBus.getDefault().post(MessageEvent("reject", Constant.EVENT_SERIAL_EVENT))
+                    }
+                } else {
+                    when {
+                        TextUtils.isEmpty(Constant.SIP_ID) -> showMessage(R.string.no_custom)
+                        Constant.CALL_STATE == Constant.CALL_STANDBY -> startCallRoleName(value.toString())
+                        else -> showMessage(R.string.call_fail)
+                    }
                 }
             } else {
                 SerialPortUtilLoar.getInstance().sendSOS(Constant.DEVICE_REGISTER_ID)
@@ -1687,8 +1707,13 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
     private fun handleEventButton(value: Any?, currentTime: Long) {
         if (currentTime - clickTime > 2000) {
             if (Constant.TCP_CONNECTED) {
-                val tcpModel = EventUtil.eventKeyClick(Constant.DEVICE_ID, value as Int?)
-                TcpClient.getInstance().sendMsg(tcpModel.toJson())
+                try {
+                    val eventValue = value as Double?
+                    val tcpModel = EventUtil.eventKeyClick(Constant.DEVICE_ID, eventValue?.toInt())
+                    TcpClient.getInstance().sendMsg(tcpModel.toJson())
+                } catch (e: Exception) {
+                    e.printStackTrace()
+                }
             }
             clickTime = currentTime
         } else {
@@ -1697,27 +1722,35 @@ class CallingbedActivity :BaseActivity<BedCallingbedActivityPresenter, Callingbe
     }
 
     private fun handleReinforceButton(currentTime: Long) {
-        if (currentTime - clickTime > 3000) {
-            if (Constant.TCP_CONNECTED) {
-                if (Constant.DEVICE_ID != -1) {
-                    OtherUtil.sendReinforce(Constant.DEVICE_ID)
-                    ReinforcementsDialogHelper.showDialog(activity, 1)
-                    SoundPoolManager.getInstance().playSound(4, 1.0f, 1.0f, 0)
+        runOnUiThread {
+            if (currentTime - clickTime > 3000) {
+                if (Constant.TCP_CONNECTED) {
+                    if (Constant.DEVICE_ID != -1) {
+                        OtherUtil.sendReinforce(Constant.DEVICE_ID)
+                        ReinforcementsDialogHelper.showDialog(activity, 1)
+                        SoundPoolManager.getInstance().playSound(4, 1.0f, 1.0f, 0)
+                    } else {
+                        showMessage("null device id!")
+                    }
                 } else {
-                    showMessage("null device id!")
+                    showMessage(R.string.net_error)
                 }
+                clickTime = currentTime
             } else {
-                showMessage(R.string.net_error)
+                showMessage(R.string.wait_moment)
             }
-            clickTime = currentTime
-        } else {
-            showMessage(R.string.wait_moment)
         }
     }
 
     private fun handleNursingButton(currentTime: Long) {
         if (currentTime - clickTime > 2000) {
-            // YhUtil.sendReinforceResponsed(Constant.DEVICE_ID) // Uncomment if needed
+            if (!Constant.inNursing) {
+                runOnUiThread {
+                    nursingInteId = SettingConfig.getNursingId(activity)
+                    val huliTime = SettingConfig.getHuliTime(activity)
+                    setHuli(huliTime, true)
+                }
+            }
             clickTime = currentTime
         } else {
             showMessage(R.string.wait_moment)

+ 22 - 2
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/BaseCallFragment.kt

@@ -2,6 +2,8 @@ package com.wdkl.app.ncs.callingbed.fragment
 
 import android.os.Bundle
 import android.os.CountDownTimer
+import android.text.TextUtils
+import android.util.Log
 import android.view.LayoutInflater
 import android.view.MotionEvent
 import android.view.View
@@ -143,10 +145,28 @@ abstract class BaseCallFragment: Fragment(), View.OnTouchListener {
         }
     }
 
-    fun getRole(roleId: Int): RoleDO? {
+    fun getRoleById(roleId: Int): RoleDO? {
         if (Constant.ROLES != null && Constant.ROLES.size > 0) {
             for (roleItem in Constant.ROLES) {
-                if (roleItem.roleId.equals(roleId)){
+                if (roleItem.roleId == roleId){
+                    return roleItem
+                }
+            }
+            return null
+        } else {
+            return null
+        }
+    }
+
+    fun getRoleByType(roleType: String?): RoleDO? {
+        if (TextUtils.isEmpty(roleType)) {
+            return null
+        }
+
+        if (Constant.ROLES != null && Constant.ROLES.size > 0) {
+            for (roleItem in Constant.ROLES) {
+                Log.e("BaseCall", "roleType: $roleType, ${roleItem.roleType}")
+                if (roleItem.roleType == roleType){
                     return roleItem
                 }
             }

+ 13 - 7
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/DormSipCallFragment.kt

@@ -294,14 +294,20 @@ class DormSipCallFragment: BaseCallFragment() {
             } else if (!TextUtils.isEmpty(roleType)) {
                 outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleType)
             } else {
-                val roleDO = getRole(roleId)
-                if (roleDO != null) {
-                    outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleDO.roleType)
+                val roleDO = getRoleById(roleId)
+                if (roleDO == null) {
+                    //尝试通过roleType获取
+                    val role = getRoleByType(roleType)
+                    if (role != null) {
+                        outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, role.roleType)
+                    } else {
+                        showMessage("角色匹配错误")
+                        RingPlayHelper.stopRingTone()
+                        cancelCall()
+                        return
+                    }
                 } else {
-                    showMessage("角色匹配错误")
-                    RingPlayHelper.stopRingTone()
-                    cancelCall()
-                    return
+                    outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleDO.roleType)
                 }
             }
         }

+ 26 - 14
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/DormSkyCallFragment.kt

@@ -375,14 +375,20 @@ class DormSkyCallFragment: BaseCallFragment(), CallSessionCallback {
                 } else if (!TextUtils.isEmpty(roleType)) {
                     outCallTcp = VoiceUtil.videoCall(Constant.DEVICE_ID, roleType)
                 } else {
-                    val roleDO = getRole(roleId)
-                    if (roleDO != null) {
-                        outCallTcp = VoiceUtil.videoCall(Constant.DEVICE_ID, roleDO.roleType)
+                    val roleDO = getRoleById(roleId)
+                    if (roleDO == null) {
+                        //尝试通过roleType获取
+                        val role = getRoleByType(roleType)
+                        if (role != null) {
+                            outCallTcp = VoiceUtil.videoCall(Constant.DEVICE_ID, role.roleType)
+                        } else {
+                            showMessage("角色匹配错误!")
+                            RingPlayHelper.stopRingTone()
+                            cancelCall()
+                            return
+                        }
                     } else {
-                        showMessage("角色匹配错误")
-                        RingPlayHelper.stopRingTone()
-                        cancelCall()
-                        return
+                        outCallTcp = VoiceUtil.videoCall(Constant.DEVICE_ID, roleDO.roleType)
                     }
                 }
             }
@@ -395,14 +401,20 @@ class DormSkyCallFragment: BaseCallFragment(), CallSessionCallback {
                 } else if (!TextUtils.isEmpty(roleType)) {
                     outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleType)
                 } else {
-                    val roleDO = getRole(roleId)
-                    if (roleDO != null) {
-                        outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleDO.roleType)
+                    val roleDO = getRoleById(roleId)
+                    if (roleDO == null) {
+                        //尝试通过roleType获取
+                        val role = getRoleByType(roleType)
+                        if (role != null) {
+                            outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, role.roleType)
+                        } else {
+                            showMessage("角色匹配错误!")
+                            RingPlayHelper.stopRingTone()
+                            cancelCall()
+                            return
+                        }
                     } else {
-                        showMessage("角色匹配错误")
-                        RingPlayHelper.stopRingTone()
-                        cancelCall()
-                        return
+                        outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleDO.roleType)
                     }
                 }
             }

+ 13 - 7
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/SipCallFragment.kt

@@ -322,14 +322,20 @@ class SipCallFragment: BaseCallFragment() {
         if (roleId == 0){
             outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, RoleTypeEnum.NURSE.name)
         } else {
-            val roleDO = getRole(roleId)
-            if (roleDO != null) {
-                outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleDO.roleType)
+            val roleDO = getRoleById(roleId)
+            if (roleDO == null) {
+                //尝试通过roleType获取
+                val role = getRoleByType(roleType)
+                if (role != null) {
+                    outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, role.roleType)
+                } else {
+                    showMessage("角色匹配错误")
+                    RingPlayHelper.stopRingTone()
+                    cancelCall()
+                    return
+                }
             } else {
-                showMessage("role error!")
-                RingPlayHelper.stopRingTone()
-                cancelCall()
-                return
+                outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleDO.roleType)
             }
         }
 

+ 26 - 14
android_bed/src/main/java/com/wdkl/app/ncs/callingbed/fragment/SkyCallFragment.kt

@@ -398,28 +398,40 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
             if (roleId == 0) {
                 outCallTcp = VoiceUtil.videoCall(Constant.DEVICE_ID, RoleTypeEnum.NURSE.name)
             } else {
-                val roleDO = getRole(roleId)
-                if (roleDO != null) {
-                    outCallTcp = VoiceUtil.videoCall(Constant.DEVICE_ID, roleDO.roleType)
+                val roleDO = getRoleById(roleId)
+                if (roleDO == null) {
+                    //尝试通过roleType获取
+                    val role = getRoleByType(roleType)
+                    if (role != null) {
+                        outCallTcp = VoiceUtil.videoCall(Constant.DEVICE_ID, role.roleType)
+                    } else {
+                        showMessage("role error!")
+                        RingPlayHelper.stopRingTone()
+                        cancelCall()
+                        return
+                    }
                 } else {
-                    showMessage("role error!")
-                    RingPlayHelper.stopRingTone()
-                    cancelCall()
-                    return
+                    outCallTcp = VoiceUtil.videoCall(Constant.DEVICE_ID, roleDO.roleType)
                 }
             }
         } else {
             if (roleId == 0) {
                 outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, RoleTypeEnum.NURSE.name)
             } else {
-                val roleDO = getRole(roleId)
-                if (roleDO != null) {
-                    outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleDO.roleType)
+                val roleDO = getRoleById(roleId)
+                if (roleDO == null) {
+                    //尝试通过roleType获取
+                    val role = getRoleByType(roleType)
+                    if (role != null) {
+                        outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, role.roleType)
+                    } else {
+                        showMessage("role error!")
+                        RingPlayHelper.stopRingTone()
+                        cancelCall()
+                        return
+                    }
                 } else {
-                    showMessage("role error!")
-                    RingPlayHelper.stopRingTone()
-                    cancelCall()
-                    return
+                    outCallTcp = VoiceUtil.voiceCall(Constant.DEVICE_ID, roleDO.roleType)
                 }
             }
         }

+ 7 - 10
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/RoleTypeEnum.java

@@ -13,8 +13,10 @@ import java.util.stream.Collectors;
  * @projectName nc
  * @date 2021/5/1910:29
  */
-public enum RoleTypeEnum {
+public enum  RoleTypeEnum {
     ADMINISTRATORS(1, "管理员"),
+    DEPART_ADMIN(10,"科室管理员"),
+    SUPER_ADMIN(11,"超级管理员"),
     DOCTOR(2, "医生"),
     NURSE(3, "护士"),
     WORKER(4, "护工"),
@@ -22,7 +24,10 @@ public enum RoleTypeEnum {
     DIETITIAN(6, "营养师"),
     HOUSEKEEPER(7, "管家"),
     NURSE_HEAD(8, "护士组长"),
-    LIFE_ASSISTANT(9, "生活助理");
+    LIFE_ASSISTANT(9, "生活助理"),
+    DOORKEEPER(10, "门卫"),
+    CANTEEN(11, "食堂"),
+    PROPERTY(12, "物业"),;
     private final int value;
     private final String typeName;
 
@@ -55,14 +60,6 @@ public enum RoleTypeEnum {
         }
         return null;
     }
-    public static String getRoleTypeString(String typeName) {
-        RoleTypeEnum roleType = parse(typeName);
-        if (roleType != null) {
-            return roleType.name(); // 或者使用 roleType.name().toUpperCase() 来获取大写形式
-        } else {
-            return null; // 或者返回一个默认的字符串,如 "UNKNOWN"
-        }
-    }
 
     /**
      * 通过value值转换成枚举