Pārlūkot izejas kodu

add active action

dujunchen 1 nedēļu atpakaļ
vecāks
revīzija
d4cbcebc0c

+ 3 - 4
internal/app/ami/action/index.go

@@ -1,7 +1,6 @@
 package action
 
 import (
-	"net"
 	"pbx-api-gin/internal/app/ami/model"
 	"pbx-api-gin/internal/app/mysql"
 	alstatus "pbx-api-gin/internal/app/stc/sendstatus"
@@ -28,9 +27,9 @@ const pacu8 = "2181"
 
 //type Operation func(src, dst string, whisper, bargein bool)
 
-func HandleAMI(event map[string]string, conn net.Conn) {
+func HandleAMI(event map[string]string) {
 
-	conn = socket.Conn
+	conn := socket.Conn
 	if conn == nil {
 		lfshook.NewLogger().Infof("===HandleAMI===conn==nil=")
 		return
@@ -122,7 +121,7 @@ func StartAMI(connectOKCallBack func(), handleEvents []func(event map[string]str
 		// lfshook.NewLogger().Infof("ami event on %+v", payload[0])
 		event := payload[0].(map[string]string)
 
-		HandleAMI(event, socket.Conn)
+		HandleAMI(event)
 
 		for _, handle := range handleEvents {
 			go handle(event)

+ 8 - 10
internal/app/ami/model/sip.go

@@ -2,16 +2,14 @@ package model
 
 import "encoding/json"
 
-// Event: EndpointList
-// ObjectType: endpoint
-// ObjectName: www
-// Transport: UDP
-// Aor: www
-// Auths: www
-// OutboundAuths: www
-// Contacts:
-// DeviceState: Unavailable
-// ActiveChannels:
+type Sysinfo struct {
+	Name  string `xorm:"name" json:"name"`
+	Value string `xorm:"value" json:"value"`
+}
+
+func (*Sysinfo) TableName() string {
+	return "t_sysinfo"
+}
 
 // Event: EndpointList
 // ObjectType: endpoint

+ 31 - 0
internal/app/index.go

@@ -1,17 +1,33 @@
 package app
 
 import (
+	"fmt"
+	"os/exec"
 	"pbx-api-gin/internal/app/ami/action"
 	"pbx-api-gin/internal/app/mysql"
 	"pbx-api-gin/internal/app/stc"
+	"pbx-api-gin/internal/app/stc/active"
 	"pbx-api-gin/internal/app/stc/socket"
 	"pbx-api-gin/pkg/lfshook"
+	"strings"
 )
 
 func StartApp() {
 	//init mysql
 	mysql.CreateDBInstance()
 
+	//Get cab number acording to IP
+	IP, err := getIPByCommand()
+	if err != nil {
+		lfshook.NewLogger().Infof("Get IP err :%+v", err)
+	}
+	if IP[len(IP)-2:] == "81" {
+		active.CabNum = "8"
+	} else {
+		active.CabNum = "1"
+	}
+	lfshook.NewLogger().Infof("=================cab number:%s===========", active.CabNum)
+
 	// 启动带有重连机制的连接管理协程
 	go stc.StartStcConnection(socket.Conn)
 	// 启动其他服务...
@@ -22,3 +38,18 @@ func StartApp() {
 		}, []func(event map[string]string){})
 	}()
 }
+
+func getIPByCommand() (string, error) {
+	cmd := "ifconfig eth0 | grep 'inet addr:' | awk '{print $2}' | cut -d: -f2"
+	out, err := exec.Command("bash", "-c", cmd).CombinedOutput()
+	if err != nil {
+		return "", err
+	}
+
+	ip := strings.TrimSpace(string(out))
+	if ip == "" {
+		return "", fmt.Errorf("no IP address found")
+	}
+
+	return ip, nil
+}

+ 4 - 0
internal/app/stc/active/index.go

@@ -0,0 +1,4 @@
+package active
+
+var ActiveCab string
+var CabNum string

+ 38 - 14
internal/app/stc/broadcast/stc-broadcast.go

@@ -10,6 +10,7 @@ import (
 	"pbx-api-gin/internal/app/ami/action"
 	"pbx-api-gin/internal/app/ami/model"
 	"pbx-api-gin/internal/app/mysql"
+	"pbx-api-gin/internal/app/stc/active"
 	msgdata "pbx-api-gin/internal/app/stc/data"
 	"pbx-api-gin/pkg/lfshook"
 	"strings"
@@ -122,15 +123,50 @@ func StationAnn(data []byte) (err error) {
 // 激活信号
 func Active(data [1]byte) {
 
+	var info model.Sysinfo
+
 	Num := int(data[0])
 
 	switch Num { // 设置全局的激活信号,并通过协议(待定)通知终端注册到对应的激活主机上
 	case 0:
+
+		info.Name = "cab_active"
+		info.Value = "0"
+
+		_, er := mysql.DBOrmInstance.Update(&info)
+		if er != nil {
+			lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
+			return
+		}
 	case 1:
+		if active.CabNum == "1" {
+			info.Name = "cab_active"
+			info.Value = "1"
+		} else {
+			info.Name = "cab_active"
+			info.Value = "0"
+		}
+		_, er := mysql.DBOrmInstance.Update(&info)
+		if er != nil {
+			lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
+			return
+		}
 	case 8:
-	case 9:
-	}
 
+		if active.CabNum == "8" {
+			info.Name = "cab_active"
+			info.Value = "1"
+		} else {
+			info.Name = "cab_active"
+			info.Value = "0"
+		}
+
+		_, er := mysql.DBOrmInstance.Update(&info)
+		if er != nil {
+			lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
+			return
+		}
+	}
 }
 
 // SPC ,特殊服务消息广播
@@ -296,18 +332,6 @@ func AlarmHandle(data []byte) {
 		//invite PACU join in
 		//action.Hangup("PACU")
 		//action.ChanSpy("PACU", exten, false, true)
-
-	case 0x04: //answer(ICP+Alarm+PACU)
-
-		err := action.RedirectInQueue(exten, "0401", "ano-rule", "1") // 1车OCC接听PAIU
-		if err != nil {
-			//lfshook.NewLogger().Info(err)
-			lfshook.NewLogger().Logger.Infof("================ICP Answer PAD====ERR============ : %+v", err.Error())
-		}
-		//invite PACU join in
-		//action.Hangup("PACU")
-		//action.ChanSpy("PACU", exten, false, true)
-		lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
 	case 0x02: //hold  重新放回队列里面
 		NotifyPaiu(exten, "hold")