Przeglądaj źródła

增加请求增援功能

weizhengliang 3 lat temu
rodzic
commit
f261c0ea52

+ 2 - 2
common/src/main/code/com/wdkl/ncs/android/lib/utils/UUID.kt

@@ -38,11 +38,11 @@ class UUID {
             if (macAddress == null){
                 val wifiManager :WifiManager? = BaseApplication.appContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
                 val info = wifiManager?.connectionInfo
-                if (!wifiManager!!.isWifiEnabled) {
+                /*if (!wifiManager!!.isWifiEnabled) {
                     //必须先打开,才能获取到MAC地址
                     wifiManager.isWifiEnabled = true
                     wifiManager.isWifiEnabled = false
-                }
+                }*/
                 if (null != info) {
                     macAddress = info.macAddress
                 }

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

@@ -145,6 +145,7 @@ public class DeviceChannel {
             case DATA:
             case DEVICE:
             case SOS:
+            case REINFORCE:
             case ENTRACEGUARD:
                 //紧急呼叫优先级最高,如果当前正在通话需要将其打断
                 EventBus.getDefault().post(new MessageEvent(tcpModel, Constants.Companion.getEVENT_TCP_MSG()));

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

@@ -25,6 +25,16 @@ public class OtherUtil {
         return tcpModel;
     }
 
+    public static TcpModel reInforceResponsed(Integer fromId, Integer toId, Integer interactionId){
+        TcpModel tcpModel = new TcpModel();
+        tcpModel.setType(TcpType.REINFORCE);
+        tcpModel.setAction(TcpAction.ReinforceAction.RESPONSED);
+        tcpModel.setFromId(fromId);
+        tcpModel.setToId(toId);
+        tcpModel.setData(interactionId);
+        return tcpModel;
+    }
+
     //发送sos相关tcp
     public static void sendSosCall(Integer fromId) {
         TcpModel tcpModel = OtherUtil.SOSCall(fromId);
@@ -35,4 +45,9 @@ public class OtherUtil {
         TcpModel tcpModel = OtherUtil.SOSCancel(fromId, toId, interactionId);
         TcpClient.getInstance().sendMsg(tcpModel.toJson());
     }
+
+    public static void sendReinforceResponsed(Integer fromId, Integer toId, Integer interactionId) {
+        TcpModel tcpModel = reInforceResponsed(fromId, toId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
 }

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

@@ -135,6 +135,9 @@ public class TcpModel implements Serializable {
             case ENTRACEGUARD:
                 tcpAction =TcpAction.EntraceGuardAction.fromString(action);
                 break;
+            case REINFORCE:
+                tcpAction =TcpAction.ReinforceAction.fromString(action);
+                break;
         }
 
         tcpModel.setType(tcpType);

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

@@ -40,8 +40,44 @@ public interface TcpAction {
         }
     }
 
+    enum PhoneAction implements TcpAction {
+        CALL("呼叫"),
+        ACCEPT("接受呼叫"),
+        REJECT("拒绝"),
+        CALLING("通话中"),
+        HANDOFF("挂断"),
+        DATA("数据传输"),
+        CANCEL("取消");
+
+
+        private String description;
+        PhoneAction(String description){
+            this.description = description;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public String getName(){
+            return this.name();
+        }
+
+        private final static Map<String , PhoneAction> ENUM_MAP = new HashMap<String, PhoneAction>();
+        static {
+            for(PhoneAction v : values()) {
+                ENUM_MAP.put(v.toString() , v);
+            }
+        }
+        public static PhoneAction fromString(String v) {
+            PhoneAction userOptionEnum = ENUM_MAP.get(v);
+            return userOptionEnum == null ? CALL :userOptionEnum;
+        }
+    }
+
     enum VoiceAction implements TcpAction {
         CALL("呼叫"),
+        VCALL("视频呼叫"),
         ACCEPT("接受呼叫"),
         ACCEPTED("已接听"),
         REJECT("拒绝"),
@@ -53,9 +89,11 @@ public interface TcpAction {
         VOICE_OFF("通话被接听"),
         RS485CALL("485界面发起呼叫"),
         RS485CANCEL("485界面呼叫取消"),
+        RS485CANCEL_BY_DOOR("485门口机取消房间内的呼叫"),
         RS485HANDOFF("485界面挂断"),
         RS485ACCEPT("485界面接听"),
         RS485REJECT("485界面拒绝"),
+        CANCEL_BY_DOOR("门口机取消分机呼叫"),
         SUCCESS("呼叫成功"),
         FAILED("呼叫失败"),
         GAIN_CALL("应答"),
@@ -131,7 +169,22 @@ public interface TcpAction {
 
     enum SOSAction implements TcpAction {
         CALL("紧急呼叫"),
-        CANCEL("取消");
+        CANCEL("取消"),
+        TRANSFER("转接"),
+        ALARM_TEST("测试报警"),
+        ALARM_INTRUSION("侵入报警"),
+        ALARM_INFRARED_NO_TRIGGER("红外报警"),
+        ALARM_ON_EIGHT_HOURS("八小时无人报警"),
+        ALARM_ON_TWELVE_HOURS("十二小时无人报警"),
+        ALARM_ON_TWENTY_FOUR_HOURS("二十四小时无人报警"),
+        ALARM_DISASSEMBLE("防拆报警"),
+        ALARM_FAULT("故障报警"),
+        ALARM_DOOR_LOCK("门磁报警"),
+        ALARM_SMOKE("烟感报警"),
+        ALARM_GAS("燃气报警"),
+        ALARM_WATER_OVERFLOW("浸水报警"),
+        ALARM_LOW_VOLTAGE("低电压报警"),
+        ALARM_TEMPERATURE("温度报警");
 
         private String description;
         SOSAction(String description){
@@ -190,7 +243,8 @@ public interface TcpAction {
 
     enum IMAction implements TcpAction {
         MSG("语音留言"),
-        MSG_READ("语音留言已读");
+        MSG_READ("语音留言已读"),
+        RECEIVED("客户端收到确认");
 
         private String description;
         IMAction(String description){
@@ -218,6 +272,37 @@ public interface TcpAction {
 
     }
 
+    enum CHANNELIMAction implements TcpAction {
+        MSG("语音留言"),
+        MSG_READ("语音留言已读"),
+        RECEIVED("接收端收到确认");
+
+        private String description;
+        CHANNELIMAction(String description){
+            this.description = description;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public String getName(){
+            return this.name();
+        }
+
+        private final static Map<String , CHANNELIMAction> ENUM_MAP = new HashMap<String, CHANNELIMAction>();
+        static {
+            for(CHANNELIMAction v : values()) {
+                ENUM_MAP.put(v.toString() , v);
+            }
+        }
+        public static CHANNELIMAction fromString(String v) {
+            CHANNELIMAction userOptionEnum = ENUM_MAP.get(v);
+            return userOptionEnum == null ? MSG_READ :userOptionEnum;
+        }
+
+    }
+
     enum DeviceAction implements TcpAction {
         RESTART("重启"),
         CONNECT("连接"),
@@ -253,7 +338,11 @@ public interface TcpAction {
 
     enum EventAction implements TcpAction {
         KEY_CLICK("按键事件"),
-        RESPONSE("已响应");
+        RESPONSE("已响应"),
+        RECEIVED("接收端收到确认"),
+        CANCEL("取消"),
+        CANCEL_CONFIRM("接收端确认收到取消"),
+        COMPLETED("完成");
         private String description;
         EventAction(String description){
             this.description = description;
@@ -431,4 +520,30 @@ public interface TcpAction {
         }
     }
 
+    enum LocationAction implements TcpAction {
+        ASK("主动询问"),
+        UPDATE("上传数据");
+        private String description;
+        LocationAction(String description){
+            this.description = description;
+        }
+        public String getDescription() {
+            return description;
+        }
+
+        public String getName(){
+            return this.name();
+        }
+
+        private final static Map<String , LocationAction> ENUM_MAP = new HashMap<String, LocationAction>();
+        static {
+            for(LocationAction v : values()) {
+                ENUM_MAP.put(v.toString() , v);
+            }
+        }
+        public static LocationAction fromString(String v) {
+            LocationAction userOptionEnum = ENUM_MAP.get(v);
+            return userOptionEnum == null ? ASK :userOptionEnum;
+        }
+    }
 }

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

@@ -8,16 +8,21 @@ import java.util.Map;
  */
 public enum TcpType {
     CALLBACK("TCP反馈"),
+    PHONE("普通电话"),
     VOICE("语音"),
     VIDEO("视频"),
     SOS("紧急呼叫"),
+    REINFORCE("增援"),
     IM("留言"),
+    EVENT("事件"),
+    SIDE("边外信息"),
     DEVICE("设备"),
     DATA("数据"),
-    EVENT("事件"),
     BROADCAST("广播"),
     ENTRACEGUARD("门禁"),
-    TIME("时间");
+    CHANNELIM("频道留言"),
+    TIME("时间"),
+    LOCATION("定位");
 
     private String description;
     TcpType(String description){
@@ -37,4 +42,4 @@ public enum TcpType {
         TcpType userOptionEnum = ENUM_MAP.get(v);
         return userOptionEnum == null ? CALLBACK :userOptionEnum;
     }
-}
+}

+ 16 - 1
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/activity/NurseHomeActivity.kt

@@ -1517,7 +1517,7 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
                     if (tcpModel.action == TcpAction.DataAction.INTERACTION) {
                         EventBus.getDefault().post(MessageEvent(0, Constants.EVENT_REFRESH_CALL_LIST))
                     }
-                }else if (tcpModel.type == TcpType.ENTRACEGUARD) {
+                } else if (tcpModel.type == TcpType.ENTRACEGUARD) {
                     if (tcpModel.action == TcpAction.EntraceGuardAction.STRANGER) {
                         if(Constants.CALL_STATE==Constants.CALL_STANDBY) { //空闲状态
                             Constants.CALL_STATE = Constants.CALL_CALLING
@@ -1532,6 +1532,21 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
                             EntraceGuardUtil.rejectStranger(tcpModel)
                         }
                     }
+                } else if (tcpModel.action == TcpAction.ReinforceAction.CALL) {
+                    val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+                    LedHelper.updateLedInfo(interactionVO, true, false)
+                    if (Constants.CALL_STATE != Constants.CALL_CALLING
+                        && Constants.CALL_STATE != Constants.CALL_OUTGOING
+                        && Constants.CALL_STATE != Constants.CALL_VISIT_CALLING
+                    ) {
+                        showSosAlert(interactionVO, false)
+                        if (SettingConfig.getTtsMode(this) == SettingConfig.TTS_ON) {
+                            val frameName = interactionVO.fromFrameFullName.substringBefore("-")
+                            SpeechUtil.getInstance().addSpeech(frameName + "请求增援", false)
+                        } else {
+                            RingPlayHelper.playRingTone(activity, R.raw.ring_tone, true)
+                        }
+                    }
                 }
             }
 

+ 16 - 0
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/adapter/CallRecordsItemAdapter.kt

@@ -125,6 +125,13 @@ class CallRecordsItemAdapter(val data:ArrayList<InteractionVO>) : BaseDelegateAd
                         binding.nameTv.text = itemData.toMemberName
                         binding.callStatusImagev.setImageResource(R.drawable.hu_chu_yi_jie)
                     }
+                } else if (TcpType.REINFORCE.name == itemData.actionType) {
+                    //增援请求
+                    val roomNo = itemData.fromFrameFullName.substringBefore("-")
+                    binding.sickbedTv.text = roomNo
+                    binding.nameTv.text = "增援请求"
+                    binding.callStatusImagev.visibility = View.GONE
+                    binding.tabImagev.setImageResource(R.drawable.lai_dian_tou_xiang_bg)
                 }
                 binding.callListReply.visibility = View.GONE
                 binding.callSosReply.visibility = View.GONE
@@ -158,6 +165,15 @@ class CallRecordsItemAdapter(val data:ArrayList<InteractionVO>) : BaseDelegateAd
                     }
                     binding.callListReply.visibility = View.VISIBLE
                     binding.callSosReply.visibility = View.GONE
+                } else if (TcpType.REINFORCE.name == itemData.actionType) {
+                    //增援请求
+                    val roomNo = itemData.fromFrameFullName.substringBefore("-")
+                    binding.sickbedTv.text = roomNo
+                    binding.nameTv.text = "增援请求"
+                    binding.callStatusImagev.visibility = View.GONE
+                    binding.tabImagev.setImageResource(R.drawable.lai_dian_tou_xiang_bg)
+                    binding.callListReply.visibility = View.GONE
+                    binding.callSosReply.visibility = View.GONE
                 }
             }
 

+ 8 - 6
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/fragment/CallRecordsFragment.kt

@@ -147,10 +147,11 @@ class CallRecordsFragment: BaseFragment<CallRecordsFragmentPresenter, FragmentCa
             if (data.size > 0) {
                 for (item in data) {
                     if (TcpType.VIDEO.name == item.actionType || TcpType.VOICE.name == item.actionType
-                        || TcpType.ENTRACEGUARD.name == item.actionType || TcpType.SOS.name == item.actionType) {
-                        if (item.actionDirectionType == 1 || item.actionDirectionType == 2 || item.actionDirectionType == 3) {
+                        || TcpType.ENTRACEGUARD.name == item.actionType || TcpType.SOS.name == item.actionType
+                        || TcpType.REINFORCE.name == item.actionType) {
+                        //if (item.actionDirectionType == 1 || item.actionDirectionType == 2 || item.actionDirectionType == 3) {
                             adapter.data.add(item)
-                        }
+                        //}
                     }
                 }
                 Log.i("abc1"," " + adapter.data.size);
@@ -161,10 +162,11 @@ class CallRecordsFragment: BaseFragment<CallRecordsFragmentPresenter, FragmentCa
             if (data.size > 0) {
                 for (item in data) {
                     if (TcpType.VIDEO.name == item.actionType || TcpType.VOICE.name == item.actionType
-                        || TcpType.ENTRACEGUARD.name == item.actionType || TcpType.SOS.name == item.actionType) {
-                        if (item.actionDirectionType == 1 || item.actionDirectionType == 2 || item.actionDirectionType == 3) {
+                        || TcpType.ENTRACEGUARD.name == item.actionType || TcpType.SOS.name == item.actionType
+                        || TcpType.REINFORCE.name == item.actionType) {
+                        //if (item.actionDirectionType == 1 || item.actionDirectionType == 2 || item.actionDirectionType == 3) {
                             adapter.data.add(item)
-                        }
+                        //}
                     }
                 }
                 adapter.notifyDataSetChanged()

+ 13 - 0
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/util/LedHelper.java

@@ -4,6 +4,7 @@ import com.wdkl.ncs.android.component.nursehome.common.Constants;
 import com.wdkl.ncs.android.component.nursehome.led.LedManagerUtils;
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
 import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum;
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpType;
 import com.wdkl.ncs.android.middleware.utils.CommonUtils;
 
 public class LedHelper {
@@ -14,6 +15,18 @@ public class LedHelper {
             return;
         }
 
+        if (interactionVO.getActionType().equals(TcpType.REINFORCE.name())) {
+            String frameName = CommonUtils.subStringBefore(interactionVO.getFromFrameFullName(), "-");
+            if (isAdd) {
+                //新增led节目
+                LedManagerUtils.getInstance().updateProgram(frameName + "请求增援", 1);
+            } else {
+                //删除led节目
+                LedManagerUtils.getInstance().updateProgram(frameName + "请求增援", 2);
+            }
+            return;
+        }
+
         if (interactionVO.getFromDeviceType() == DeviceTypeEnum.DIGIT_BED_DEVICE.value()
                 || interactionVO.getFromDeviceType() == DeviceTypeEnum.SIMULATE_BED_DEVICE.value()) {
             //如果交互记录中的fromdevice是分机,有可能是数字分机发送过来的紧急呼叫,需要特别处理

+ 5 - 0
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/window/IncidentWindow.kt

@@ -110,6 +110,9 @@ class IncidentWindow(var contexts: Context) {
             if (data.actionType == TcpType.SOS.name) {
                 OtherUtil.cancelSosCall(Constants.ids, data.fromDeviceId, data.id)
                 LedHelper.updateLedInfo(data, false, true)
+            } else if (data.actionType == TcpType.REINFORCE.name) {
+                OtherUtil.sendReinforceResponsed(Constants.ids, data.fromDeviceId, data.id)
+                LedHelper.updateLedInfo(data, false, false)
             }
 
             eventTcpList.remove(data)
@@ -219,6 +222,8 @@ class IncidentWindow(var contexts: Context) {
 
                 if (interactionVO.actionType == TcpType.SOS.name) {
                     binding.incidentTv.text = room + " 紧急呼叫"
+                } else if (interactionVO.actionType == TcpType.REINFORCE.name) {
+                    binding.incidentTv.text = room + " 请求增援"
                 }
             }
         }

+ 4 - 2
rtc-chat/src/main/java/com/wdkl/skywebrtc/engine/webrtc/WebRTCEngine.java

@@ -64,17 +64,19 @@ public class WebRTCEngine implements IEngine, Peer.IPeerEvent {
     private SurfaceViewRenderer localRenderer;
 
     // 服务器实例列表
+    //private String serverIP = "119.23.151.229";
     private String serverIP = "8.129.220.143";
     //private String serverIP = "172.28.100.100";
     //private String serverIP = "172.168.0.254";
+
     private String turnUser = "wdklrtc";
     private String turnUserPwd = "Wdkl2021Rtc";
 
     private static final String VIDEO_TRACK_ID = "ARDAMSv0";
     private static final String AUDIO_TRACK_ID = "ARDAMSa0";
     public static final String VIDEO_CODEC_H264 = "H264";
-    private static final int VIDEO_RESOLUTION_WIDTH = 640;
-    private static final int VIDEO_RESOLUTION_HEIGHT = 480;
+    private static final int VIDEO_RESOLUTION_WIDTH = 1280;
+    private static final int VIDEO_RESOLUTION_HEIGHT = 720;
     private static final int FPS = 20;
 
     // 对话实例列表