dujunchen 3 місяців тому
батько
коміт
ae4c6dd24b

+ 20 - 1
internal/app/ami/action/call.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"pbx-api-gin/internal/app/stc/active"
 	"pbx-api-gin/internal/app/stc/priority"
+	alstatus "pbx-api-gin/internal/app/stc/sendstatus"
 	"pbx-api-gin/pkg/lfshook"
 	"pbx-api-gin/pkg/utils"
 	"sort"
@@ -119,7 +120,13 @@ func InterruptRunningTask(toRunTask string) {
 	//same type return
 	if toRunTask == taskName {
 		if toRunTask == "PAD-ICP" || toRunTask == "PAD-TMS" || toRunTask == "PAD-OCC" {
-			lfshook.NewLogger().Infof("===InterruptRunningTask=ret==== ")
+
+			if toRunTask == "PAD-OCC" {
+				Hangup(task.RunChannel) //pad
+
+				HangupIO() //io
+				lfshook.NewLogger().Infof("===InterruptRunningTask=ret==== ")
+			}
 			return
 		}
 	}
@@ -194,6 +201,12 @@ func InterruptRunningTask(toRunTask string) {
 		HangupAllLocalChan()
 		HangupICP()
 
+		//pad end
+		if priority.PADStart == 1 {
+			alstatus.PaStatus("", "PAD", "end")
+			priority.PADStart = 0
+		}
+
 	case "PAD-OCC": // Interrupt PAD-OCC task running,
 
 		if toRunTask == "C2C" {
@@ -222,6 +235,12 @@ func InterruptRunningTask(toRunTask string) {
 			//3. Hangup OI & ICP
 			HangupIO()
 			HangupAllLocalChan()
+
+			//occ pad end
+			if priority.PADOccStart == 1 {
+				alstatus.OccPad("end")
+				priority.PADOccStart = 0
+			}
 		}
 
 	default:

+ 44 - 50
internal/app/ami/action/index.go

@@ -34,16 +34,13 @@ func HandleAMI(event map[string]string) {
 			switch event["Digit"] {
 			case "#":
 				lfshook.NewLogger().Infof("===PA interrupt PAD====== ")
-				lfshook.NewLogger().Infof("====ListAll1=====%+v", priority.RegistryTask.ListAll())
-
+				
 				InterruptRunningTask("PA")
-				lfshook.NewLogger().Infof("====ListAll2=====%+v", priority.RegistryTask.ListAll())
+				
 			case "*": //Cab cab interrupt PAD
 				lfshook.NewLogger().Infof("===Cab cab interrupt PAD====== ")
-				lfshook.NewLogger().Infof("====ListAll1=====%+v", priority.RegistryTask.ListAll())
-
+				
 				InterruptRunningTask("C2C")
-				lfshook.NewLogger().Infof("====ListAll2=====%+v", priority.RegistryTask.ListAll())
 			}
 		}
 
@@ -220,7 +217,6 @@ func HandleAMI(event map[string]string) {
 			lfshook.NewLogger().Infof("====Hangup OCC-PAD=====%+v", event)
 
 			// OCC hangup detected, hangup other running channels
-			//HangupAllLocalChan()
 			InterruptRunningTask("PAD-OCC")
 
 			res, _ := QueueStatus("0301", "") // check OCC queue ,if empty PAD end
@@ -246,8 +242,8 @@ func HandleAMI(event map[string]string) {
 
 				break
 			} else { //OCC queue is not empty
-				//	HangupAllLocalChan()
-				time.Sleep(time.Millisecond * 300)
+
+				time.Sleep(time.Millisecond * 100) //wait io idle
 				lfshook.NewLogger().Infof("====Start OCC-PAD===next==%+v", res)
 				if active.ActivedCab == "1" && ExtenStatus("1411") == "Idle" { //check active and OCC status
 					time.Sleep(time.Second)
@@ -312,8 +308,9 @@ func HandleAMI(event map[string]string) {
 
 					if priority.PADStart == 1 {
 						//SetPadTimer()
-						alstatus.PaStatus(event["CallerIDNum"], "PAD", "end")
+						alstatus.PaStatus("", "PAD", "end")
 						priority.PADStart = 0
+						priority.PADTMSStart = 0
 
 						//clean confbridge
 						//PAD-ICP
@@ -433,28 +430,12 @@ func HandleAMI(event map[string]string) {
 
 				time.Sleep(time.Millisecond * 300)
 				if active.ActivedCab == "1" && ExtenStatus("1411") == "Idle" { //check active and OCC status
-					/*if priority.PADOccStart == 0 {
-						alstatus.OccPad("start")
-						priority.PADOccStart = 1
-						if priority.PADStart == 0 {
-							alstatus.PaStatus(event["CallerIDNum"], "PAD", "start")
-							priority.PADStart = 1
-						}
-					}*/
 
 					alstatus.AlarmStatus(event["CallerIDNum"], "connect")
 					go RedirectInQueue(event["Channel"], "1411", "pad-page-occ-icp", event["CallerIDNum"]) //PAD Page(OCC+ICPs)
 					go Dial("0401", "0512", "pad-rule-pacus-occ", "ano1", "ano1", "1")                     // PACUs dial OCC1
 
 				} else if active.ActivedCab == "8" && ExtenStatus("1481") == "Idle" {
-					/*if priority.PADOccStart == 0 {
-						alstatus.OccPad("start")
-						priority.PADOccStart = 1
-						if priority.PADStart == 0 {
-							alstatus.PaStatus(event["CallerIDNum"], "PAD", "start")
-							priority.PADStart = 1
-						}
-					}*/
 
 					alstatus.AlarmStatus(event["CallerIDNum"], "connect")
 					go RedirectInQueue(event["Channel"], "1481", "pad-page-occ-icp", event["CallerIDNum"]) //PAD Page(OCC+ICPs)
@@ -688,7 +669,7 @@ func HandleAMI(event map[string]string) {
 				Running:      true,
 			}
 			priority.RegistryTask.Register("PAD-ICP", task)
-
+			lfshook.NewLogger().Infof("=========PAD-ICP answer==ListAll===%+v", priority.RegistryTask.ListAll())
 			go RedirectInQueue(event["ConnectedLineName"], "2311", "chanspy-rule-whisper", event["ConnectedLineName"]) //PAD chanspy(EqW) ICP1
 
 			if ExtenStatus("2381") == "Idle" {
@@ -709,7 +690,7 @@ func HandleAMI(event map[string]string) {
 				Running:      true,
 			}
 			priority.RegistryTask.Register("PAD-ICP", task)
-
+			lfshook.NewLogger().Infof("=========PAD-ICP answer==ListAll===%+v", priority.RegistryTask.ListAll())
 			go RedirectInQueue(event["ConnectedLineName"], "2381", "chanspy-rule-whisper", event["ConnectedLineName"]) //PAD chanspy(EqW) ICP8
 
 			if ExtenStatus("2311") == "Idle" {
@@ -776,7 +757,7 @@ func HandleAMI(event map[string]string) {
 			//lfshook.NewLogger().Infof("=========%s", event["Event"])
 		} else if event["CallerIDName"] == "EMG" && event["Exten"] == "0502" { // EMG broadcast hangup
 
-			alstatus.PaStatus(event["CallerIDName"], "EMG", "end")
+			alstatus.PaStatus("", "EMG", "end")
 
 			//EMG
 			taskTmp, ok := priority.RegistryTask.Get("EMG")
@@ -795,7 +776,7 @@ func HandleAMI(event map[string]string) {
 
 		} else if event["CallerIDName"] == "STN" && event["Exten"] == "0503" {
 
-			alstatus.PaStatus(event["CallerIDName"], "STN", "end")
+			alstatus.PaStatus("", "STN", "end")
 
 			//STN
 			taskTmp, ok := priority.RegistryTask.Get("STN")
@@ -816,7 +797,7 @@ func HandleAMI(event map[string]string) {
 
 		} else if event["CallerIDName"] == "DCS" && event["Exten"] == "0504" {
 
-			alstatus.PaStatus(event["CallerIDName"], "DCS", "end")
+			alstatus.PaStatus("", "DCS", "end")
 
 			//DSC
 			taskTmp, ok := priority.RegistryTask.Get("DCS")
@@ -837,7 +818,7 @@ func HandleAMI(event map[string]string) {
 
 		} else if event["CallerIDName"] == "SPC" && event["Exten"] == "0505" {
 
-			alstatus.PaStatus(event["CallerIDName"], "SPC", "end")
+			alstatus.PaStatus("", "SPC", "end")
 
 			//SPC
 			taskTmp, ok := priority.RegistryTask.Get("SPC")
@@ -858,7 +839,7 @@ func HandleAMI(event map[string]string) {
 
 		} else if event["CallerIDName"] == "CHK" && event["Exten"] == "0510" {
 
-			alstatus.PaStatus(event["CallerIDName"], "CHK", "end")
+			alstatus.PaStatus("", "CHK", "end")
 
 			//CHK
 			taskTmp, ok := priority.RegistryTask.Get("CHK")
@@ -879,7 +860,7 @@ func HandleAMI(event map[string]string) {
 
 		} else if event["CallerIDName"] == "VOL" && event["Exten"] == "0513" {
 
-			alstatus.PaStatus(event["CallerIDName"], "VOL", "end")
+			alstatus.PaStatus("", "VOL", "end")
 
 			//VOL
 			taskTmp, ok := priority.RegistryTask.Get("VOL")
@@ -902,7 +883,7 @@ func HandleAMI(event map[string]string) {
 	case "DialEnd":
 		//lfshook.NewLogger().Infof("=========%s", event["Event"])
 		//Cab Cab start
-		if utils.IsICP(event["CallerIDNum"]) && utils.IsICP(event["ConnectedLineNum"]) && event["DialStatus"] == "ANSWER" {
+		if utils.IsICP(event["CallerIDNum"]) && event["Exten"] == " 0400" && event["DialStatus"] == "ANSWER" {
 
 			//================================
 			task := priority.TaskInfo{
@@ -967,25 +948,12 @@ func HandleAMI(event map[string]string) {
 
 	case "BridgeEnter": // TMS-ICP answer PAD; PACU connect ICP
 		lfshook.NewLogger().Infof("=========event:%s   callerid:%s", event["Event"], event["CallerIDNum"])
+
+		//PAD-OCC start
 		if utils.IsIO(event["CallerIDNum"]) && utils.IsPAIU(event["ConnectedLineNum"]) {
 			if priority.PADOccStart == 0 {
 				alstatus.OccPad("start")
-
 				priority.PADOccStart = 1
-				if priority.PADStart == 0 {
-					alstatus.PaStatus(event["CallerIDNum"], "PAD", "start")
-					priority.PADStart = 1
-
-					task := priority.TaskInfo{
-						RunChannel:   event["Channel"],
-						LocalChan:    event["Channel"],
-						RunType:      "PAD-OCC",
-						Priority:     priority.AllTasks.PADTMS.Priority,
-						ConfbridgeID: "",
-						Running:      true,
-					}
-					priority.RegistryTask.Register("PAD-OCC", task)
-				}
 			}
 		}
 
@@ -993,6 +961,19 @@ func HandleAMI(event map[string]string) {
 			lfshook.NewLogger().Infof("====BridgeEnter==IN action===%s===ID:%s   Name:%s", event["Event"], event["CallerIDNum"], event["CallerIDName"])
 			alstatus.AlarmStatus(event["CallerIDName"], "connect") // Alarm connected
 
+			//=============================
+			task := priority.TaskInfo{
+				RunChannel:   event["Channel"],
+				LocalChan:    event["Channel"],
+				RunType:      "PAD-TMS",
+				Priority:     priority.AllTasks.PADTMS.Priority,
+				ConfbridgeID: "",
+				Running:      true,
+			}
+			priority.RegistryTask.Register("PAD-TMS", task)
+
+			lfshook.NewLogger().Infof("=========PAD-TMS answer==ListAll===%+v", priority.RegistryTask.ListAll())
+
 			if active.ActivedCab == "1" {
 				go RedirectInQueue(event["CallerIDName"], "2311", "chanspy-rule-whisper", "") //PAD chanspy(EqW) ICP1
 				go Dial("0403", event["CallerIDName"], "call-pad-rule", "2381", "2381", "8")  //ICP8---call----PAD
@@ -1003,6 +984,19 @@ func HandleAMI(event map[string]string) {
 
 		} else if utils.IsPAIU(event["CallerIDNum"]) && event["Exten"] == "0405" { // PAD connect ICP-TMS;PACU not available
 			lfshook.NewLogger().Infof("====send pad status=====")
+
+			//=============================
+			task := priority.TaskInfo{
+				RunChannel:   event["Channel"],
+				LocalChan:    event["Channel"],
+				RunType:      "PAD-TMS",
+				Priority:     priority.AllTasks.PADTMS.Priority,
+				ConfbridgeID: "",
+				Running:      true,
+			}
+			priority.RegistryTask.Register("PAD-TMS", task)
+			lfshook.NewLogger().Infof("=========PAD-TMS answer==ListAll===%+v", priority.RegistryTask.ListAll())
+
 			alstatus.AlarmStatus(event["CallerIDNum"], "connect") // PAD connect ICP-TMS
 		}
 	}

+ 8 - 81
internal/app/stc/broadcast/stc-broadcast.go

@@ -78,82 +78,7 @@ func processPacket(packet []byte) {
 
 	switch packet[5] {
 	case 0x01: //heartbeat
-		/*
-			//PAD-OCC异常情况处理
-			if priority.OCCAnswer == 1 {
-				//定时监测ICP queue 转到OCC queue, 避免异常情形下PAD进入ICP queue之后无法被接听
-				resCaller, err := action.QueueStatus("0300", "") // check ICP queue, get entries
-				if err != nil {
-					lfshook.NewLogger().Infof("==ICP=QueueStatus==%+v", err)
-					return
-				}
-				if resCaller.Calls != "0" {
-					sort.Slice(resCaller.Entrys, func(i, j int) bool {
-						return resCaller.Entrys[i].Position < resCaller.Entrys[j].Position
-					})
-
-					for _, caller := range resCaller.Entrys {
-						priority.ICPAnswer = 0
-						lfshook.NewLogger().Infof("====Redirect to 0301 entry:%s=Pos:%s==", caller.CallerIDNum, caller.Position)
-						//order by pos
-						action.RedirectInQueue(caller.CallerIDNum, "0301", "queues-occ", caller.CallerIDNum) // redirect All ICP-PAD redirect to OCC queue
-						time.Sleep(time.Microsecond * 200)                                                   //200 ms delay
-					}
-				}
 
-				//定时监测OCC  queue, 避免异常情况下PAD 在OCC queue里面不能自动转到OCC
-				res, err := action.QueueStatus("0301", "") // check OCC queue ,if empty PAD end
-				if err != nil {
-					lfshook.NewLogger().Infof("==OCC=QueueStatus==%+v", err)
-					return
-				}
-				if res.Calls != "0" { //OCC queue is not empty
-					//	HangupAllLocalChan()
-					lfshook.NewLogger().Infof("====Start OCC-PAD===next==%+v", res)
-					if active.ActivedCab == "1" && action.ExtenStatus("1411") == "Idle" { //check active and OCC status
-						time.Sleep(time.Second)
-						PADChan := ""
-						for _, chanEntry := range res.Entrys {
-							lfshook.NewLogger().Infof("====PAD answered by OCC1 pos:%s===chan:%s=", chanEntry.Position, chanEntry.Channel)
-							if chanEntry.Position == "1" {
-								PADChan = chanEntry.Channel
-								break
-							}
-						}
-
-						if PADChan != "" {
-							alstatus.AlarmStatus(strings.Split(strings.Split(res.Entrys[0].Channel, "/")[1], "-")[0], "connect")
-							go action.RedirectInQueue(PADChan, "1411", "pad-page-occ-icp", "1") //PAD Page(OCC+ICPs)
-
-							go action.Dial("0401", "0512", "pad-rule-pacus-occ", "ano1", "ano1", "1") // PACUs dial OCC1
-						} else {
-							lfshook.NewLogger().Infof("===OCC-QueueStatus==PADCchan NULL")
-						}
-						break
-					} else if active.ActivedCab == "8" && action.ExtenStatus("1481") == "Idle" {
-						time.Sleep(time.Second)
-						PADChan := ""
-						for _, chanEntry := range res.Entrys {
-							lfshook.NewLogger().Infof("====PAD answered by OCC1 pos:%s===chan:%s=", chanEntry.Position, chanEntry.Channel)
-							if chanEntry.Position == "1" {
-								PADChan = chanEntry.Channel
-								break
-							}
-						}
-
-						if PADChan != "" {
-							alstatus.AlarmStatus(strings.Split(strings.Split(res.Entrys[0].Channel, "/")[1], "-")[0], "connect")
-							go action.RedirectInQueue(PADChan, "1481", "pad-page-occ-icp", "8") //PAD Page(OCC+ICPs)
-
-							go action.Dial("0401", "0512", "pad-rule-pacus-occ", "ano8", "ano8", "8") // PACUs dial OCC1
-						} else {
-							lfshook.NewLogger().Infof("===OCC-QueueStatus==PADCchan NULL")
-						}
-						break
-					}
-				}
-			}
-		*/
 		break
 	case 0x02: // STN
 		if active.ActivedCab != "" {
@@ -234,18 +159,20 @@ func processPacket(packet []byte) {
 	//	RecordStorageConf(packet[8:]) // RCD setting
 
 	case 0x0d: // ICP answer PAD
-		if priority.CheckPriority("PAD-ICP") {
+		if priority.CheckPriority("PAD-TMS") {
 
-			action.InterruptRunningTask("PAD-ICP") //PAD-ICP interrupt other
+			action.InterruptRunningTask("PAD-TMS") //PAD-ICP interrupt other
 
 			if active.SetTimer {
 				active.QueueTimer.Stop()
 				active.SetTimer = false
 			}
 
-			AlarmHandleICP(packet) //
+			AlarmHandleICP(packet) 
+
+			//AlarmHandleTMS(packet)
 		} else {
-			alstatus.PaStatus("", "PAD-ICP", "refuse")
+			alstatus.PaStatus("", "PAD-TMS", "refuse")
 		}
 
 		//default:
@@ -473,7 +400,7 @@ func AlarmHandleICP(data []byte) {
 		//NotifyPaiu(exten, "answer")
 		priority.ICPAnswer = 1
 		if priority.PADStart == 0 {
-			alstatus.PaStatus(exten, "PAD", "start")
+			alstatus.PaStatus("", "PAD", "start")
 			priority.PADStart = 1
 		}
 		lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
@@ -537,7 +464,7 @@ func AlarmHandleTMS(data []byte) {
 		//PACU---call---->ICP1
 		//PAD---->Chanspy(WEq)-->ICP1;PAD--->Call---->ICP2
 		if priority.PADStart == 0 {
-			alstatus.PaStatus(exten, "PAD", "start")
+			alstatus.PaStatus("", "PAD", "start")
 			priority.PADStart = 1
 		}
 		priority.ICPAnswer = 1

+ 1 - 0
internal/app/stc/priority/index.go

@@ -15,6 +15,7 @@ var OCCAnswer = 0
 var SpecialVoice = 0
 
 var PADStart = 0
+var PADTMSStart = 0
 var PADOccStart = 0
 
 var InterruptedPad = ""