Forráskód Böngészése

适配豪华分机配合模拟门灯项目,分机呼叫同时需要点亮模拟门灯

weizhengliang 3 éve
szülő
commit
7841c0a541

+ 73 - 10
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -45,6 +45,7 @@ import com.wdkl.ncs.android.middleware.tcp.TcpClient
 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.dto.TcpModel
+import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
 import com.wdkl.ncs.android.middleware.utils.AppUtil
@@ -59,8 +60,6 @@ import kotlinx.android.synthetic.main.view_title_layout.*
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
-import rs485.ByteUtil
-import rs485.Rs485Calling
 import serialporttest.utils.SerialPort485Util
 import serialporttest.utils.SerialPortUtil
 import java.util.*
@@ -651,6 +650,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                         if (Constant.CALL_STATE == Constant.CALL_STANDBY) {
                             Constant.CALL_STATE = Constant.CALL_OUTGOING
                         }
+                        break
                     }
                 }
             }
@@ -669,6 +669,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                     if (resetCall) {
                         Constant.CALL_STATE = Constant.CALL_STANDBY
                     }
+                    break
                 }
             }
         }
@@ -695,6 +696,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                 if (frameDevice.device != null && uart.equals(frameDevice.device.ethMac, true)) {
                     updateCallText("紧急呼叫-->$uart, ${frameDevice.device.id}")
                     OtherUtil.sendSosCall(frameDevice.device.id)
+                    break
                 }
             }
         }
@@ -754,16 +756,17 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         //首先找到分机所在床位层级,然后通过该bed frame的父级id(即房间层级)找到对应room frame,获得门灯设备信息
         if (!TextUtils.isEmpty(bedAddr) && FrameHelper.frameDeviceList.size > 0) {
             var roomId = -1
-            for (frameDevice in FrameHelper.frameDeviceList) {
-                if (frameDevice.device != null && bedAddr.equals(frameDevice.device.ethMac, true)) {
-                    roomId = frameDevice.frame.parentId
+            for (bedFrameDevice in FrameHelper.frameDeviceList) {
+                if (bedFrameDevice.device != null && bedAddr.equals(bedFrameDevice.device.ethMac, true)) {
+                    roomId = bedFrameDevice.frame.parentId
+                    break
                 }
             }
 
             if (roomId != -1) {
                 for (frameDevice in FrameHelper.frameDeviceList) {
                     if (frameDevice.frame != null && frameDevice.frame.id == roomId) {
-                        if (frameDevice.device != null && frameDevice.device.deviceType == 14) {
+                        if (frameDevice.device != null && frameDevice.device.deviceType == DeviceTypeEnum.SIMULATE_DOOR_LIGHT.value()) {
                             //找到对应门灯设备
                             return frameDevice.device.ethMac
                         }
@@ -781,16 +784,17 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         //首先找到分机所在床位层级,然后通过该bed frame的父级id(即房间层级)找到对应room frame,获得门灯设备信息
         if (!TextUtils.isEmpty(sosAddr) && FrameHelper.frameDeviceList.size > 0) {
             var roomId = -1
-            for (frameDevice in FrameHelper.frameDeviceList) {
-                if (frameDevice.device != null && sosAddr.equals(frameDevice.device.ethMac, true)) {
-                    roomId = frameDevice.frame.id
+            for (roomFrameDevice in FrameHelper.frameDeviceList) {
+                if (roomFrameDevice.device != null && sosAddr.equals(roomFrameDevice.device.ethMac, true)) {
+                    roomId = roomFrameDevice.frame.id
+                    break
                 }
             }
 
             if (roomId != -1) {
                 for (frameDevice in FrameHelper.frameDeviceList) {
                     if (frameDevice.frame != null && frameDevice.frame.id == roomId) {
-                        if (frameDevice.device != null && frameDevice.device.deviceType == 14) {
+                        if (frameDevice.device != null && frameDevice.device.deviceType == DeviceTypeEnum.SIMULATE_DOOR_LIGHT.value()) {
                             //找到对应门灯设备
                             return frameDevice.device.ethMac
                         }
@@ -803,6 +807,62 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         return null
     }
 
+    //豪华分机呼叫同时需要控制对应房间模拟门灯
+    private fun controlDoorLight(tcpModel: TcpModel) {
+        val sideInteractionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+        Log.e(TAG, "bed frameId: " + sideInteractionVO.fromDeviceFrameId + ", from parent frameId: " + sideInteractionVO.fromFrameParentId
+                + ", to parent frameId: " + sideInteractionVO.toFrameParentId)
+        if (FrameHelper.frameDeviceList.size > 0) {
+            if (TcpAction.SideAction.CALL == tcpModel.action
+                || TcpAction.SideAction.SOS_CALL == tcpModel.action
+            ) {
+                //分机呼叫或紧急呼叫
+                if (sideInteractionVO.fromFrameParentId != null) {
+                    for (frameDevice in FrameHelper.frameDeviceList) {
+                        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 on door light: " + frameDevice.device.ethMac)
+                                SerialPortHelper.openDoorLight(frameDevice.device.ethMac)
+                                break
+                            }
+                        }
+                    }
+                }
+            } else if (TcpAction.SideAction.ACCEPT == tcpModel.action
+                || TcpAction.SideAction.CANCEL == tcpModel.action
+                || TcpAction.SideAction.SOS_CANCEL == tcpModel.action
+            ) {
+                //主机呼叫分机或分机取消或主机接听
+                if (sideInteractionVO.fromFrameParentId != null) {
+                    for (frameDevice in FrameHelper.frameDeviceList) {
+                        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)
+                                break
+                            }
+                        }
+                    }
+                }
+
+                if (sideInteractionVO.toFrameParentId != null) {
+                    for (frameDevice in FrameHelper.frameDeviceList) {
+                        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)
+                                break
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     private fun updateCallText(str: String) {
         runOnUiThread {
             tv_call_state.setText("呼叫状态: " + str)
@@ -1085,6 +1145,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 Constant.LATER_RESTART = true
                             }
                         }
+                    } else if (tcpModel.type == TcpType.SIDE) {
+                        //门灯控制
+                        controlDoorLight(tcpModel)
                     } else if (tcpModel.action == TcpAction.DataAction.REFRESH) {
                         //重新加载数据,比如出院,入院等
                         initDevice()

+ 2 - 2
middleware/src/main/code/com/wdkl/ncs/android/middleware/model/dos/InteractionDO.java

@@ -7,11 +7,11 @@ import com.wdkl.ncs.android.middleware.model.annotation.Id;
 import com.wdkl.ncs.android.middleware.model.annotation.PrimaryKeyField;
 import com.wdkl.ncs.android.middleware.model.annotation.Table;
 
+import java.io.Serializable;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
-import java.io.Serializable;
-
 @Table(name = "ncs_interaction")
 @ApiModel
 @JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)

+ 63 - 4
middleware/src/main/code/com/wdkl/ncs/android/middleware/model/vo/InteractionVO.java

@@ -5,10 +5,10 @@ import com.fasterxml.jackson.databind.annotation.JsonNaming;
 import com.wdkl.ncs.android.middleware.model.annotation.Column;
 import com.wdkl.ncs.android.middleware.model.annotation.Id;
 
-import java.io.Serializable;
-
 import io.swagger.annotations.ApiModelProperty;
 
+import java.io.Serializable;
+
 /**
  * @program nc
  * @description:
@@ -185,6 +185,10 @@ public class InteractionVO implements Serializable {
     @ApiModelProperty(value = "发起端设备的名称", required = false)
     private String fromDeviceName;
 
+    @Column(name = "from_device_phone_number" )
+    @ApiModelProperty(value="发起端设备号码",required=false)
+    private String fromDevicePhoneNumber;
+
 
     @Column(name = "to_eth_mac")
     @ApiModelProperty(value = "目的端设备的有线以太网卡MAC地址", required = false)
@@ -203,11 +207,14 @@ public class InteractionVO implements Serializable {
     @ApiModelProperty(value = "目的端设备的设备类型", required = false)
     private Integer toDeviceType;
 
-
     @Column(name = "to_device_name")
     @ApiModelProperty(value = "目的端设备的名称", required = false)
     private String toDeviceName;
 
+    @Column(name = "to_device_phone_number" )
+    @ApiModelProperty(value="目的端设备号码",required=false)
+    private String toDevicePhoneNumber;
+
 
     /** 空间结构 **/
 
@@ -224,6 +231,10 @@ public class InteractionVO implements Serializable {
     @ApiModelProperty(value = "发起端空间结构全名", required = false)
     private String fromFrameFullName;
 
+    @Column(name = "from_frame_parent_id")
+    @ApiModelProperty(value = "发起端空间父级id", required = false)
+    private String fromFrameParentId;
+
 
     @Column(name = "to_frame_type")
     @ApiModelProperty(value = "目的端空间结构类型:0楼、1病房、2床位", required = false)
@@ -235,9 +246,13 @@ public class InteractionVO implements Serializable {
     private String toFrameName;
 
     @Column(name = "to_frame_full_name")
-    @ApiModelProperty(value = "发起端空间结构全名", required = false)
+    @ApiModelProperty(value = "目的端空间结构全名", required = false)
     private String toFrameFullName;
 
+    @Column(name = "to_frame_parent_id")
+    @ApiModelProperty(value = "目的端空间父级id", required = false)
+    private String toFrameParentId;
+
 
     @Column(name = "relative_id")
     @ApiModelProperty(value = "亲属id,外部来电时,from_member亲属的memberId", required = false)
@@ -252,6 +267,10 @@ public class InteractionVO implements Serializable {
     private String actionEndMemberName;
 
 
+    @Column(name = "action_status")
+    @ApiModelProperty(value = "事件类型的交互状态(包括:发出,响应,取消,完成)",required = false)
+    private String actionStatus;
+
 
 
     public Integer getId() {
@@ -510,6 +529,14 @@ public class InteractionVO implements Serializable {
         this.fromDeviceName = fromDeviceName;
     }
 
+    public String getFromDevicePhoneNumber() {
+        return fromDevicePhoneNumber;
+    }
+
+    public void setFromDevicePhoneNumber(String fromDevicePhoneNumber) {
+        this.fromDevicePhoneNumber = fromDevicePhoneNumber;
+    }
+
     public String getToEthMac() {
         return toEthMac;
     }
@@ -550,6 +577,14 @@ public class InteractionVO implements Serializable {
         this.toDeviceName = toDeviceName;
     }
 
+    public String getToDevicePhoneNumber() {
+        return toDevicePhoneNumber;
+    }
+
+    public void setToDevicePhoneNumber(String toDevicePhoneNumber) {
+        this.toDevicePhoneNumber = toDevicePhoneNumber;
+    }
+
     public Integer getFromFrameType() {
         return fromFrameType;
     }
@@ -574,6 +609,14 @@ public class InteractionVO implements Serializable {
         this.fromFrameFullName = fromFrameFullName;
     }
 
+    public String getFromFrameParentId() {
+        return fromFrameParentId;
+    }
+
+    public void setFromFrameParentId(String fromFrameParentId) {
+        this.fromFrameParentId = fromFrameParentId;
+    }
+
     public Integer getToFrameType() {
         return toFrameType;
     }
@@ -598,6 +641,14 @@ public class InteractionVO implements Serializable {
         this.toFrameFullName = toFrameFullName;
     }
 
+    public String getToFrameParentId() {
+        return toFrameParentId;
+    }
+
+    public void setToFrameParentId(String toFrameParentId) {
+        this.toFrameParentId = toFrameParentId;
+    }
+
     public Integer getRelativeId() {
         return relativeId;
     }
@@ -621,4 +672,12 @@ public class InteractionVO implements Serializable {
     public void setActionEndMemberName(String actionEndMemberName) {
         this.actionEndMemberName = actionEndMemberName;
     }
+
+    public String getActionStatus() {
+        return actionStatus;
+    }
+
+    public void setActionStatus(String actionStatus) {
+        this.actionStatus = actionStatus;
+    }
 }

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

@@ -90,6 +90,7 @@ public class DeviceChannel {
             case BROADCAST:
             case TIME:
             case SOS:
+            case SIDE:
                 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

@@ -133,6 +133,9 @@ public class TcpModel implements Serializable {
             case SOS:
                 tcpAction = TcpAction.SOSAction.fromString(action);
                 break;
+            case SIDE:
+                tcpAction=TcpAction.SideAction.fromString(action);
+                break;
         }
 
         tcpModel.setType(tcpType);

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

@@ -8,14 +8,19 @@ import java.util.Map;
  */
 public enum TcpType {
     CALLBACK("TCP反馈"),
+    PHONE("普通电话"),
     VOICE("语音"),
     VIDEO("视频"),
     SOS("紧急呼叫"),
+    REINFORCE("增援"),
     IM("留言"),
+    EVENT("事件"),
+    SIDE("边外信息"),
     DEVICE("设备"),
     DATA("数据"),
-    EVENT("事件"),
     BROADCAST("广播"),
+    ENTRACEGUARD("门禁"),
+    CHANNELIM("频道留言"),
     TIME("时间");
 
     private String description;