|
@@ -8,6 +8,8 @@ import (
|
|
"pbx-api-gin/internal/app/mysql"
|
|
"pbx-api-gin/internal/app/mysql"
|
|
msgdata "pbx-api-gin/internal/app/stc/data"
|
|
msgdata "pbx-api-gin/internal/app/stc/data"
|
|
"pbx-api-gin/pkg/lfshook"
|
|
"pbx-api-gin/pkg/lfshook"
|
|
|
|
+ "sync"
|
|
|
|
+ "time"
|
|
)
|
|
)
|
|
|
|
|
|
var Pacus = []string{"2111", "2121", "2131", "2141", "2151", "2161", "2171", "2181"}
|
|
var Pacus = []string{"2111", "2121", "2131", "2141", "2151", "2161", "2171", "2181"}
|
|
@@ -207,6 +209,17 @@ func SelfCheck(data []byte) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// 全局变量:记录正在抑制的 exten
|
|
|
|
+var (
|
|
|
|
+ suppressedExts = sync.Map{} // map[string]struct{},值存在即表示被抑制
|
|
|
|
+ suppressionMu sync.Mutex // 保护初始化和清理操作(可选)
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+// suppressKey 生成用于抑制的 key(可以根据需求扩展)
|
|
|
|
+func suppressKey(exten string, handler byte) string {
|
|
|
|
+ return fmt.Sprintf("%s_h%x", exten, handler)
|
|
|
|
+}
|
|
|
|
+
|
|
// ICP操作乘客报警(根据激活信息判断转到1车还是8车================)
|
|
// ICP操作乘客报警(根据激活信息判断转到1车还是8车================)
|
|
func AlarmHandle(data []byte) {
|
|
func AlarmHandle(data []byte) {
|
|
handler := data[8]
|
|
handler := data[8]
|
|
@@ -215,6 +228,29 @@ func AlarmHandle(data []byte) {
|
|
pos := data[13]
|
|
pos := data[13]
|
|
exten := fmt.Sprintf("24%c%c", carr, pos)
|
|
exten := fmt.Sprintf("24%c%c", carr, pos)
|
|
|
|
|
|
|
|
+ lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
|
|
|
|
+ key := suppressKey(exten, handler)
|
|
|
|
+
|
|
|
|
+ // 只对 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)
|
|
|
|
+ return // 已存在,说明在2秒窗口期内,直接丢弃
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 设置2秒后删除该 key,允许下次通过
|
|
|
|
+ time.AfterFunc(4*time.Second, func() {
|
|
|
|
+ suppressedExts.Delete(key)
|
|
|
|
+ lfshook.NewLogger().Logger.Debugf("Suppression released for key: %s", key)
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 设置2秒后删除该 key,允许下次通过
|
|
|
|
+ time.AfterFunc(1*time.Second, func() {
|
|
|
|
+ suppressedExts.Delete(key)
|
|
|
|
+ lfshook.NewLogger().Logger.Debugf("Suppression released for key: %s", key)
|
|
|
|
+ })
|
|
|
|
+
|
|
switch handler {
|
|
switch handler {
|
|
case 0x01: //answer(ICP+Alarm+PACU)
|
|
case 0x01: //answer(ICP+Alarm+PACU)
|
|
|
|
|
|
@@ -225,7 +261,7 @@ func AlarmHandle(data []byte) {
|
|
//invite PACU join in
|
|
//invite PACU join in
|
|
//action.Hangup("PACU")
|
|
//action.Hangup("PACU")
|
|
//action.ChanSpy("PACU", exten, false, true)
|
|
//action.ChanSpy("PACU", exten, false, true)
|
|
- lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
|
|
|
|
|
|
+
|
|
case 0x04: //answer(ICP+Alarm+PACU)
|
|
case 0x04: //answer(ICP+Alarm+PACU)
|
|
|
|
|
|
err := action.RedirectInQueue(exten, "0401", "ano-rule", "1") // 1车OCC接听
|
|
err := action.RedirectInQueue(exten, "0401", "ano-rule", "1") // 1车OCC接听
|