소스 검색

调整等待cpa发起的时间避免任务冲突异常,CPA发起之前检测当前是否有优先级更高的任务,ICP取消CABCAB清空任务创建标签

root 2 주 전
부모
커밋
bddaf0e47c
2개의 변경된 파일65개의 추가작업 그리고 35개의 파일을 삭제
  1. 20 14
      internal/app/ami/action/call.go
  2. 45 21
      internal/app/ami/action/index.go

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

@@ -959,7 +959,10 @@ func WaitTaskCreate(task string, args ...string) { //arg1(task chan)
 				HangupICP()
 				goto DELAY
 			}*/
+		} else {
+			goto DEFAULT
 		}
+
 		return
 	case "CPA":
 		if task == "PA" /*|| task == "C2C"*/ {
@@ -988,6 +991,8 @@ func WaitTaskCreate(task string, args ...string) { //arg1(task chan)
 					goto DELAY
 				}
 			}
+		} else {
+			goto DEFAULT
 		}
 		return
 	case "PA":
@@ -1017,26 +1022,27 @@ func WaitTaskCreate(task string, args ...string) { //arg1(task chan)
 					goto DELAY
 				}
 			}
+		} else {
+			goto DEFAULT
 		}
 		return
+	}
 
-	default:
-		//utils.LoggerDebug.Printf("%s waiting trd=============previous task:%s creating ..... ", task, priority.TaskCreating)
+DEFAULT:
+	//utils.LoggerDebug.Printf("%s waiting trd=============previous task:%s creating ..... ", task, priority.TaskCreating)
 
-		for i := 0; i < 4; i++ {
-			if priority.TaskCreating != "" {
-				utils.LoggerDebug.Printf("%s waiting previous task:%s creating ..... ", task, priority.TaskCreating)
-				time.Sleep(time.Millisecond * 500)
-			} else {
-				utils.LoggerDebug.Printf("TaskCreating is nill, Set TaskCreating=%s", task)
-				priority.TaskCreating = task
-				return
-			}
+	for i := 0; i < 20; i++ {
+		if priority.TaskCreating != "" {
+			utils.LoggerDebug.Printf("%s waiting previous task:%s creating ..... ", task, priority.TaskCreating)
+			time.Sleep(time.Millisecond * 100)
+		} else {
+			utils.LoggerDebug.Printf("TaskCreating is nill, Set TaskCreating=%s", task)
+			priority.TaskCreating = task
+			return
 		}
-		priority.TaskCreating = task
-		utils.LoggerDebug.Printf("%s waiting previous task:%s creating timeout ! Set TaskCreating=%s", task, priority.TaskCreating, task)
-		return
 	}
+	priority.TaskCreating = task
+	utils.LoggerDebug.Printf("%s waiting previous task:%s creating timeout ! Set TaskCreating=%s", task, priority.TaskCreating, task)
 
 DELAY:
 	time.Sleep(100 * time.Millisecond)

+ 45 - 21
internal/app/ami/action/index.go

@@ -151,11 +151,25 @@ func HandleAMI(event map[string]string) {
 						}
 					}
 
-					//hangup others if priority is higher
-					runningTaskName := InterruptRunningTask("CPA") //CPA interrupt other
-					if runningTaskName != "" {
-						time.Sleep(time.Millisecond * 100) //wait endpoint release
+					//CPA 发起之前检查是否有更高优先级任务在运行,有则不发起CPA
+					taskName, task, _ := priority.RegistryTask.HighestPriorityRunningTask1()
+					if len(taskName) > 0 && task.Priority < priority.AllTasks.CPA.Priority {
+						utils.LoggerDebug.Printf("CPA : other task running , return !")
+						Hangup(event["CallerIDNum"])
+						priority.CPAActived = 0
+						if priority.TaskCreating == "CPA" {
+							utils.LoggerDebug.Printf("CPA : Clean priority.TaskCreating = '' !")
+							priority.TaskCreating = ""
+						}
+						return
+					} else {
+						//hangup others if priority is higher
+						runningTaskName := InterruptRunningTask("CPA") //CPA interrupt other
+						if runningTaskName != "" {
+							time.Sleep(time.Millisecond * 100) //wait endpoint release
+						}
 					}
+
 				} else {
 					if priority.TaskCreating == "CPA" {
 						utils.LoggerDebug.Printf("CPA : Clean priority.TaskCreating = '' !")
@@ -378,7 +392,7 @@ func HandleAMI(event map[string]string) {
 				priority.RegistryTask.StopAndUnregister("PAD-OCC")
 				ConfbridgeKick(taskTmp.ConfbridgeID, "all")
 
-				time.Sleep(time.Millisecond * 900) //wait CPA Active
+				time.Sleep(time.Millisecond * 350) //wait CPA Active
 
 				//check resume
 				taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
@@ -517,7 +531,7 @@ func HandleAMI(event map[string]string) {
 				}
 
 				if priority.OCCAnswer == 0 { // not OCC-PAD
-					time.Sleep(time.Millisecond * 900) //wait CPA Active
+					time.Sleep(time.Millisecond * 350) //wait CPA Active
 					utils.LoggerDebug.Printf("======================================")
 					//check resume
 					taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
@@ -554,6 +568,14 @@ func HandleAMI(event map[string]string) {
 			}
 		}
 
+		if utils.IsICP(event["CallerIDNum"]) && event["Exten"] == "h" && event["ConnectedLineNum"] == "<unknown>" {
+			utils.LoggerDebug.Printf("CABCAB Canceled by ICP !")
+
+			if priority.TaskCreating == "C2C" {
+				utils.LoggerDebug.Printf("C2C : Clean priority.TaskCreating = '' !")
+				priority.TaskCreating = ""
+			}
+		}
 	case "QueueCallerJoin":
 		lfshook.NewLogger().Infof("=========%s", event["Event"])
 
@@ -1006,6 +1028,8 @@ func HandleAMI(event map[string]string) {
 				Running:      true,
 			}
 			priority.RegistryTask.Register("PAD-ICP", task)
+
+			alstatus.PaStatus("", "PAD", "start")
 			if priority.TaskCreating == "PAD-ICP" {
 				utils.LoggerDebug.Printf("PAD-ICP Connected : Clean priority.TaskCreating = '' !")
 				priority.TaskCreating = ""
@@ -1032,6 +1056,8 @@ func HandleAMI(event map[string]string) {
 				Running:      true,
 			}
 			priority.RegistryTask.Register("PAD-ICP", task)
+
+			alstatus.PaStatus("", "PAD", "start")
 			if priority.TaskCreating == "PAD-ICP" {
 				utils.LoggerDebug.Printf("PAD-ICP Connected : Clean priority.TaskCreating = '' !")
 				priority.TaskCreating = ""
@@ -1076,7 +1102,7 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("PA")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 900) //wait CPA Active
+			time.Sleep(time.Millisecond * 350) //wait CPA Active
 			// check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
@@ -1103,7 +1129,7 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("CPA")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 900) //wait CPA Active
+			time.Sleep(time.Millisecond * 350) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
@@ -1125,7 +1151,7 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("EMG")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 900) //wait CPA Active
+			time.Sleep(time.Millisecond * 350) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
@@ -1146,7 +1172,7 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("STN")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 900) //wait CPA Active
+			time.Sleep(time.Millisecond * 350) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
@@ -1169,7 +1195,7 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("DCS")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 900) //wait CPA Active
+			time.Sleep(time.Millisecond * 350) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
@@ -1192,7 +1218,7 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("SPC")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 900) //wait CPA Active
+			time.Sleep(time.Millisecond * 350) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
@@ -1215,7 +1241,7 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("CHK")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 900) //wait CPA Active
+			time.Sleep(time.Millisecond * 350) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
@@ -1238,7 +1264,7 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("VOL")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 900) //wait CPA Active
+			time.Sleep(time.Millisecond * 350) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
@@ -1311,6 +1337,8 @@ func HandleAMI(event map[string]string) {
 				Running:      true,
 			}
 			priority.RegistryTask.Register("PAD-TMS", task)
+
+			alstatus.PaStatus("", "PAD", "start")
 			if priority.TaskCreating == "PAD-TMS" {
 				utils.LoggerDebug.Printf("PAD-TMS Connected : Clean priority.TaskCreating = '' !")
 				priority.TaskCreating = ""
@@ -1338,7 +1366,7 @@ func HandleAMI(event map[string]string) {
 			//time.Sleep(time.Millisecond * 100)
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 900) //wait CPA Active
+			time.Sleep(time.Millisecond * 350) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
@@ -1423,6 +1451,8 @@ func HandleAMI(event map[string]string) {
 				Running:      true,
 			}
 			priority.RegistryTask.Register("PAD-TMS", task)
+
+			alstatus.PaStatus("", "PAD", "start")
 			if priority.TaskCreating == "PAD-TMS" {
 				utils.LoggerDebug.Printf("PAD-TMS Connected : Clean priority.TaskCreating = '' !")
 				priority.TaskCreating = ""
@@ -1431,12 +1461,6 @@ func HandleAMI(event map[string]string) {
 
 			alstatus.AlarmStatus(event["CallerIDNum"], "connect") // PAD connect ICP-TMS
 		}
-	case "NewConnectedLine": //PAD-ICP/PAD_TMS answered
-		if utils.IsICP(event["CallerIDNum"]) && event["Exten"] == "0402" && (event["ConnectedLineNum"] == "ani1" || event["ConnectedLineNum"] == "ani8") {
-			alstatus.PaStatus("", "PAD", "start") //PAD-ICP icp connected pad
-		} else if utils.IsICP(event["CallerIDNum"]) && event["Exten"] == "0403" && (utils.IsPACU(event["ConnectedLineNum"])) {
-			alstatus.PaStatus("", "PAD", "start") //PAD-TMS icp connected pad
-		}
 	}
 }