|
|
@@ -13,7 +13,6 @@ import (
|
|
|
"pbx-api-gin/internal/app/stc/active"
|
|
|
msgdata "pbx-api-gin/internal/app/stc/data"
|
|
|
"pbx-api-gin/pkg/lfshook"
|
|
|
- "strings"
|
|
|
"sync"
|
|
|
"time"
|
|
|
)
|
|
|
@@ -69,31 +68,36 @@ func processPacket(packet []byte) {
|
|
|
Active([1]byte{packet[7]})
|
|
|
}
|
|
|
|
|
|
- if active.Actived {
|
|
|
- switch packet[5] {
|
|
|
- case 0x01: // heartbeat
|
|
|
- // handle heartbeat
|
|
|
- case 0x02: // STN
|
|
|
- StationAnn(packet)
|
|
|
- case 0x05: // SPC
|
|
|
- SpecialAnn(packet)
|
|
|
- case 0x06: // EMG
|
|
|
- EmgMsg(packet)
|
|
|
- case 0x07: // STOP
|
|
|
- AnnStop([4]byte{packet[8], packet[9], packet[10], packet[11]})
|
|
|
- case 0x08: // DCS
|
|
|
- DcsAnn(packet)
|
|
|
- case 0x09: // SELF CHECK
|
|
|
- SelfCheck(packet)
|
|
|
- case 0x0a:
|
|
|
- AlarmHandle(packet)
|
|
|
- case 0x0b:
|
|
|
- AlarmResetAll()
|
|
|
- case 0x0c:
|
|
|
- RecordStorageConf(packet[8:])
|
|
|
- default:
|
|
|
- fmt.Printf("Unknown command: %x\n", packet[5])
|
|
|
- }
|
|
|
+ switch packet[5] {
|
|
|
+ case 0x01: // heartbeat
|
|
|
+ // handle heartbeat
|
|
|
+ case 0x02: // STN
|
|
|
+ lfshook.NewLogger().Infof("=====STN=========")
|
|
|
+ StationAnn(packet)
|
|
|
+ case 0x03: // ACTIVE
|
|
|
+
|
|
|
+ Active([1]byte{packet[8]})
|
|
|
+ case 0x05: // SPC
|
|
|
+ lfshook.NewLogger().Infof("=====SPC=========")
|
|
|
+ SpecialAnn(packet)
|
|
|
+ case 0x06: // EMG
|
|
|
+ lfshook.NewLogger().Infof("=====EMG=========")
|
|
|
+ EmgMsg(packet)
|
|
|
+ case 0x07: // STOP
|
|
|
+ AnnStop([4]byte{packet[8], packet[9], packet[10], packet[11]})
|
|
|
+ case 0x08: // DCS
|
|
|
+ lfshook.NewLogger().Infof("=====DCS=========")
|
|
|
+ DcsAnn(packet)
|
|
|
+ case 0x09: // SELF CHECK
|
|
|
+ SelfCheck(packet)
|
|
|
+ case 0x0a:
|
|
|
+ AlarmHandle(packet)
|
|
|
+ case 0x0b:
|
|
|
+ AlarmResetAll()
|
|
|
+ case 0x0c:
|
|
|
+ RecordStorageConf(packet[8:])
|
|
|
+ default:
|
|
|
+ fmt.Printf("Unknown command: %x\n", packet[5])
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -106,9 +110,6 @@ func StationAnn(data []byte) (err error) {
|
|
|
datalen := int(data[11])
|
|
|
|
|
|
filename := msgdata.SubstrByRune(string(data[12:]), 0, datalen-4)
|
|
|
- filename = strings.ReplaceAll(filename, ".wav", "")
|
|
|
- filename = strings.ReplaceAll(filename, ".mp3", "")
|
|
|
-
|
|
|
lfshook.NewLogger().Logger.Infof("=============Get filename : %v", filename)
|
|
|
|
|
|
//update special voice
|
|
|
@@ -183,14 +184,15 @@ func SpecialAnn(data []byte) {
|
|
|
cycleCount := data[9]
|
|
|
datalen := int(data[10])
|
|
|
|
|
|
- filename := msgdata.SubstrByRune(string(data[11:]), 0, datalen-3)
|
|
|
-
|
|
|
- //update pa type
|
|
|
- _, er := mysql.DBOrmInstance.In("exten", Pacus).Update(&model.Extension{PaType: "SPC"})
|
|
|
- if er != nil {
|
|
|
- lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
- }
|
|
|
-
|
|
|
+ filename := msgdata.SubstrByRune(string(data[11:]), 0, datalen-4)
|
|
|
+ /*
|
|
|
+ //update pa type
|
|
|
+ _, er := mysql.DBOrmInstance.In("exten", Pacus).Update(&model.Extension{PaType: "SPC"})
|
|
|
+ if er != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
+ }
|
|
|
+ */
|
|
|
+ lfshook.NewLogger().Infof("======count:%x", cycleCount)
|
|
|
if int(cycleCount) == 255 {
|
|
|
action.PlaybackPacu(filename, 9999999, int(delay), "SPC")
|
|
|
} else {
|
|
|
@@ -204,14 +206,15 @@ func EmgMsg(data []byte) {
|
|
|
cycleCount := data[9]
|
|
|
datalen := int(data[10])
|
|
|
|
|
|
- filename := msgdata.SubstrByRune(string(data[11:]), 0, datalen-3)
|
|
|
-
|
|
|
- //update pa type
|
|
|
- _, er := mysql.DBOrmInstance.In("exten", Pacus).Update(&model.Extension{PaType: "EMG"})
|
|
|
- if er != nil {
|
|
|
- lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
- }
|
|
|
-
|
|
|
+ filename := msgdata.SubstrByRune(string(data[11:]), 0, datalen-4)
|
|
|
+ /*
|
|
|
+ //update pa type
|
|
|
+ _, er := mysql.DBOrmInstance.In("exten", Pacus).Update(&model.Extension{PaType: "EMG"})
|
|
|
+ if er != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
+ }
|
|
|
+ */
|
|
|
+ lfshook.NewLogger().Infof("======count:%x", cycleCount)
|
|
|
if int(cycleCount) == 255 {
|
|
|
action.PlaybackPacu(filename, 9999999, int(delay), "EMG")
|
|
|
} else {
|
|
|
@@ -236,11 +239,13 @@ func AnnStop(data [4]byte) {
|
|
|
for _, ext := range Pacus {
|
|
|
action.Hangup(ext)
|
|
|
}
|
|
|
- //update pa type
|
|
|
- _, er := mysql.DBOrmInstance.Cols("patype").In("exten", Pacus).Update(&model.Extension{PaType: ""})
|
|
|
- if er != nil {
|
|
|
- lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
- }
|
|
|
+ /*
|
|
|
+ //update pa type
|
|
|
+ _, er := mysql.DBOrmInstance.Cols("patype").In("exten", Pacus).Update(&model.Extension{PaType: ""})
|
|
|
+ if er != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
+ }
|
|
|
+ */
|
|
|
}
|
|
|
|
|
|
// DCS 语音
|
|
|
@@ -249,14 +254,15 @@ func DcsAnn(data []byte) {
|
|
|
cycleCount := data[9]
|
|
|
datalen := int(data[10])
|
|
|
|
|
|
- filename := msgdata.SubstrByRune(string(data[11:]), 0, datalen-3)
|
|
|
-
|
|
|
- //update pa type
|
|
|
- _, er := mysql.DBOrmInstance.In("exten", Pacus).Update(&model.Extension{PaType: "DCS"})
|
|
|
- if er != nil {
|
|
|
- lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
- }
|
|
|
-
|
|
|
+ filename := msgdata.SubstrByRune(string(data[11:]), 0, datalen-4)
|
|
|
+ /*
|
|
|
+ //update pa type
|
|
|
+ _, er := mysql.DBOrmInstance.In("exten", Pacus).Update(&model.Extension{PaType: "DCS"})
|
|
|
+ if er != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
+ }
|
|
|
+ */
|
|
|
+ lfshook.NewLogger().Infof("======count:%x", cycleCount)
|
|
|
if int(cycleCount) == 255 {
|
|
|
action.PlaybackPacu(filename, 9999999, int(delay), "DCS")
|
|
|
} else {
|
|
|
@@ -272,13 +278,13 @@ func SelfCheck(data []byte) {
|
|
|
datalen := int(data[11])
|
|
|
|
|
|
filename := msgdata.SubstrByRune(string(data[12:]), 0, datalen-4)
|
|
|
-
|
|
|
- //update pa type
|
|
|
- _, er := mysql.DBOrmInstance.In("exten", Pacus).Update(&model.Extension{PaType: "CHK"})
|
|
|
- if er != nil {
|
|
|
- lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
- }
|
|
|
-
|
|
|
+ /*
|
|
|
+ //update pa type
|
|
|
+ _, er := mysql.DBOrmInstance.In("exten", Pacus).Update(&model.Extension{PaType: "CHK"})
|
|
|
+ if er != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
|
|
|
+ }
|
|
|
+ */
|
|
|
switch check {
|
|
|
case 0x01:
|
|
|
action.PlaybackPacu(filename, int(cycleCount), int(delay), "CHK")
|
|
|
@@ -313,32 +319,28 @@ func AlarmHandle(data []byte) {
|
|
|
// 只对 handler == 0x01 做 2 秒去重
|
|
|
if handler == 0x01 {
|
|
|
if _, loaded := suppressedExts.LoadOrStore(key, struct{}{}); loaded {
|
|
|
- lfshook.NewLogger().Logger.Infof("Suppressed duplicate ICP Alarm (handler=0x01) for exten: %s within 2 seconds", exten)
|
|
|
+ lfshook.NewLogger().Logger.Infof("Suppressed duplicate ICP Alarm (handler=0x01) for exten: %s within 4 seconds", exten)
|
|
|
return // 已存在,说明在2秒窗口期内,直接丢弃
|
|
|
}
|
|
|
|
|
|
- // 设置2秒后删除该 key,允许下次通过
|
|
|
- time.AfterFunc(2*time.Second, func() {
|
|
|
+ // 设置4秒后删除该 key,允许下次通过
|
|
|
+ time.AfterFunc(4*time.Second, func() {
|
|
|
suppressedExts.Delete(key)
|
|
|
lfshook.NewLogger().Logger.Debugf("Suppression released for key: %s", key)
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- // 设置1秒后删除该 key,允许下次通过
|
|
|
- time.AfterFunc(1*time.Second, func() {
|
|
|
- suppressedExts.Delete(key)
|
|
|
- lfshook.NewLogger().Logger.Debugf("Suppression released for key: %s", key)
|
|
|
- })
|
|
|
-
|
|
|
switch handler {
|
|
|
case 0x01: //answer(ICP+Alarm+PACU)
|
|
|
//NotifyPaiu(exten, "answer")
|
|
|
|
|
|
lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
|
|
|
if active.CabNum == "1" {
|
|
|
- action.Dial(PacuNum, "0402", "ani-rule", PacuNum, exten, "1") // PACU dial ICP
|
|
|
+ action.Dial("0402", PacuNum, "default", PacuNum, exten, "1") // PACU dial ICP
|
|
|
+ //action.Dial(PacuNum, "0402", "ani-rule", PacuNum, exten, "1") // PACU dial ICP
|
|
|
} else {
|
|
|
- action.Dial(PacuNum, "0402", "ani-rule", PacuNum, exten, "8") // PACU dial ICP
|
|
|
+ action.Dial("0402", PacuNum, "default", PacuNum, exten, "8") // PACU dial ICP
|
|
|
+ //action.Dial(PacuNum, "0402", "ani-rule", PacuNum, exten, "8") // PACU dial ICP
|
|
|
}
|
|
|
//invite PACU join in
|
|
|
//action.Hangup("PACU")
|
|
|
@@ -353,12 +355,11 @@ func AlarmHandle(data []byte) {
|
|
|
lfshook.NewLogger().Logger.Infof("================OCC Answer PAD================:%s ", exten)
|
|
|
case 0x02: //hold 重新放回队列里面
|
|
|
NotifyPaiu(exten, "hold")
|
|
|
-
|
|
|
err := action.RedirectInQueue(exten, "0300", "default", "1")
|
|
|
if err != nil {
|
|
|
lfshook.NewLogger().Info(err)
|
|
|
}
|
|
|
-
|
|
|
+ action.Hangup("2311") //1 车接听
|
|
|
case 0x03: //hangup
|
|
|
//NotifyPaiu(exten, "hangup")
|
|
|
action.Hangup(exten)
|
|
|
@@ -416,6 +417,8 @@ func AlarmResetAll() {
|
|
|
for _, ext := range AlarmExts {
|
|
|
action.Hangup(ext.Extension)
|
|
|
}
|
|
|
+
|
|
|
+ action.Hangup("2311")
|
|
|
}
|
|
|
|
|
|
func RecordStorageConf(data []byte) {
|