root 2 veckor sedan
förälder
incheckning
5a5e18367a

+ 56 - 17
internal/app/ami/action/call.go

@@ -211,7 +211,6 @@ func InterruptRunningTask(toRunTask string) string {
 		//kick CPA members
 		if toRunTask != "C2C" {
 			CPAConfbridgeKick(task)
-			task.Running = false
 			//alstatus.PaStatus("", "CPA", "end")
 		} else if toRunTask == "C2C" {
 			HangupICP()
@@ -222,8 +221,8 @@ func InterruptRunningTask(toRunTask string) string {
 		if toRunTask == "EMG" {
 			ConfbridgeKick(task.ConfbridgeID, "all")
 		} else if toRunTask != "C2C" {
+
 			EMGConfbridgeKick(task)
-			task.Running = false
 			//alstatus.PaStatus("", "EMG", "end")
 		} else if toRunTask == "C2C" {
 			HangupICP()
@@ -662,6 +661,12 @@ func ConfbridgeKick(confnum, channel string) (res map[string]string, err error)
 }
 
 func CPAConfbridgeKick(confInfo priority.TaskInfo) (res map[string]string, err error) {
+
+	if !confInfo.Running {
+		utils.LoggerDebug.Printf("CPA CPAConfbridgeKick , not running, return .")
+		return
+	}
+
 	utils.LoggerDebug.Printf("CPA CPAConfbridgeKick , kick all members .")
 
 	chans, err := ConfbridgeList(confInfo.ConfbridgeID)
@@ -695,14 +700,21 @@ func CPAConfbridgeKick(confInfo priority.TaskInfo) (res map[string]string, err e
 	if confInfo.Running {
 		alstatus.PaStatus("", "CPA", "end")
 	}
+	priority.RegistryTask.UpdateStatus("CPA", false)
 	return res, nil
 }
 
-func CPAConfbridgeReinvite(confID string) bool {
+func CPAConfbridgeReinvite(task priority.TaskInfo) bool {
+
+	if task.Running {
+		utils.LoggerDebug.Printf("CPA CPAConfbridgeReinvite , already running, return .")
+		return false
+	}
+
 	time.Sleep(time.Millisecond * 100)
 	utils.LoggerDebug.Printf("CPA CPAConfbridgeReinvite , resume CPA .")
 
-	chans, err := ConfbridgeList(confID)
+	chans, err := ConfbridgeList(task.ConfbridgeID)
 	if len(chans) > 1 || err != nil {
 		utils.LoggerDebug.Printf("CPA CPAConfbridgeReinvite , return . ConfbridgeList chans > 1 or err !")
 		return false
@@ -712,6 +724,7 @@ func CPAConfbridgeReinvite(confID string) bool {
 		utils.LoggerDebug.Printf("CPA ConfbridgeReinvite , PA ready to go , return !")
 		return false
 	} else if priority.CABInterrupt == 1 { //CABCAB 打断标签判断
+
 		priority.TaskCreating = "CPA"
 		for _, ext := range Speakers { //高优先级被cabcab打断,或者高优先级直接挂断
 			if utils.IsICP(ext) {
@@ -720,27 +733,39 @@ func CPAConfbridgeReinvite(confID string) bool {
 					continue
 				}
 			}
-			ConfbridgeReinvite(ext, "call-speakers-cpa", confID)
+			ConfbridgeReinvite(ext, "call-speakers-cpa", task.ConfbridgeID)
 		}
+		//task.Running = true
+		priority.RegistryTask.UpdateStatus("CPA", true)
 		time.Sleep(time.Millisecond * 200) //等待通道建立
 		priority.TaskCreating = ""
 		alstatus.PaStatus("", "CPA", "start")
+		priority.CPAActived = 0
 	} else if priority.TaskCreating != "" {
 		utils.LoggerDebug.Printf("CPA ConfbridgeReinvite , other PA ready to go , return !")
 		return false
 	} else {
 		priority.TaskCreating = "CPA"
 		for _, ext := range Speakers {
-			ConfbridgeReinvite(ext, "call-speakers-cpa", confID)
+			ConfbridgeReinvite(ext, "call-speakers-cpa", task.ConfbridgeID)
 		}
+		//task.Running = true
+		priority.RegistryTask.UpdateStatus("CPA", true)
 		time.Sleep(time.Millisecond * 200) //等待通道建立
 		priority.TaskCreating = ""
 		alstatus.PaStatus("", "CPA", "start")
+		priority.CPAActived = 0
 	}
 	return true
 }
 
 func EMGConfbridgeKick(confInfo priority.TaskInfo) (res map[string]string, err error) {
+
+	if !confInfo.Running {
+		utils.LoggerDebug.Printf("EMG EMGConfbridgeKick , not running, return .")
+		return
+	}
+
 	utils.LoggerDebug.Printf("EMG EMGConfbridgeKick , kick all members .")
 	chans, err := ConfbridgeList(confInfo.ConfbridgeID)
 	if err != nil {
@@ -756,18 +781,29 @@ func EMGConfbridgeKick(confInfo priority.TaskInfo) (res map[string]string, err e
 	if confInfo.Running {
 		alstatus.PaStatus("", "EMG", "end")
 	}
+	//confInfo.Running = false
+	priority.RegistryTask.UpdateStatus("EMG", false)
 	return res, nil
 }
 
-func EMGConfbridgeReinvite(confID string) {
+func EMGConfbridgeReinvite(task priority.TaskInfo) {
+
+	if priority.CPAActived == 1 && priority.AllTasks.EMG.Priority > priority.AllTasks.CPA.Priority {
+		utils.LoggerDebug.Printf("EMG ConfbridgeReinvite , CPA actived , return .")
+		return
+	}
 
 	//if priority.CABInterrupt != 1 {
 	//	time.Sleep(time.Millisecond * 100)
 	//} else {
-	time.Sleep(time.Second * 1) //wait cpa start first
+	//time.Sleep(time.Second * 1) //wait cpa start first
 	//}
 
 	utils.LoggerDebug.Printf("EMG ConfbridgeReinvite , resume EMG .")
+	if task.Running {
+		utils.LoggerDebug.Printf("EMG ConfbridgeReinvite , already running ,return .")
+		return
+	}
 
 	if priority.PAInterrupt == 1 { // PA 打断标签判断
 		utils.LoggerDebug.Printf("EMG ConfbridgeReinvite , PA ready to go , return !")
@@ -781,9 +817,10 @@ func EMGConfbridgeReinvite(confID string) {
 					continue
 				}
 			}
-			ConfbridgeReinvite(ext, "call-speakers-emg", confID)
+			ConfbridgeReinvite(ext, "call-speakers-emg", task.ConfbridgeID)
 		}
-
+		//task.Running = true
+		priority.RegistryTask.UpdateStatus("EMG", true)
 		time.Sleep(time.Millisecond * 200) //等待通道建立
 		priority.TaskCreating = ""
 		alstatus.PaStatus("", "EMG", "start")
@@ -793,8 +830,10 @@ func EMGConfbridgeReinvite(confID string) {
 	} else {
 		priority.TaskCreating = "EMG"
 		for _, ext := range Speakers {
-			ConfbridgeReinvite(ext, "call-speakers-emg", confID)
+			ConfbridgeReinvite(ext, "call-speakers-emg", task.ConfbridgeID)
 		}
+		//task.Running = true
+		priority.RegistryTask.UpdateStatus("EMG", true)
 		time.Sleep(time.Millisecond * 200) //等待通道建立
 		priority.TaskCreating = ""
 		alstatus.PaStatus("", "EMG", "start")
@@ -854,10 +893,10 @@ func ConfbridgeReinvite(src, context, confID string) {
 
 func ICPConfbridgeReinvite(confID, paType string) {
 
-	/*if priority.CABInterrupt == 1 || priority.CABInterrupt == 1 {
+	if priority.CABInterrupt == 1 || priority.CABInterrupt == 1 {
 		utils.LoggerDebug.Printf("ICPConfbridgeReinvite, Get PA/CABCAB Interrupt resume %s faild .", paType)
 		return
-	}*/
+	}
 
 	switch paType {
 	case "PAD-OCC":
@@ -901,12 +940,12 @@ func WaitTaskCreate(task string, args ...string) { //arg1(task chan)
 	case "C2C":
 		if /*task == "PA" ||*/ task == "CPA" {
 			//获取正在创建的任务的优先级
-			priorityC2C := priority.GetPriorityByKey("C2C")
+			//priorityC2C := priority.GetPriorityByKey("C2C")
 			//获取将要创建的任务的优先级
-			priorityTask := priority.GetPriorityByKey(task)
+			//priorityTask := priority.GetPriorityByKey(task)
 			//比较优先级,确定是否终止正在创建的任务
 
-			if priorityC2C < priorityTask {
+			/*if priorityC2C < priorityTask {
 				utils.LoggerDebug.Printf("%s check task C2C creating , hangup CPA %s ", task, args[0])
 
 				//结束task(CPA)
@@ -919,7 +958,7 @@ func WaitTaskCreate(task string, args ...string) { //arg1(task chan)
 				utils.LoggerDebug.Printf("%s check task C2C creating , hangup C2C ICPs ", task)
 				HangupICP()
 				goto DELAY
-			}
+			}*/
 		}
 		return
 	case "CPA":

+ 59 - 40
internal/app/ami/action/index.go

@@ -104,10 +104,11 @@ func HandleAMI(event map[string]string) {
 				priority.PAInterrupt = 0
 			} else if utils.IsIO(event["CallerIDNum"]) { // CPA
 
-				if /*priority.CABInterrupt == 1 || */ priority.PAInterrupt == 1 {
+				priority.CPAActived = 1 //CPA触发
+				if /* priority.CABInterrupt == 1 || */ priority.PAInterrupt == 1 {
 					utils.LoggerDebug.Printf("Get UserEvent CPA calling !  Ignored because of PAInterrupt=1 !")
 					Hangup(event["CallerIDNum"])
-					//priority.CPAActived = 1 //CPA触发,但未运行
+					priority.CPAActived = 0
 					return
 				}
 
@@ -125,6 +126,7 @@ func HandleAMI(event map[string]string) {
 						utils.LoggerDebug.Printf("CPA calling  , ActivedCab = %s !", active.ActivedCab)
 						if active.ActivedCab == "" { //No active Signal on both side,Hangup caller
 							Hangup(event["CallerIDNum"])
+							priority.CPAActived = 0
 							if priority.TaskCreating == "CPA" {
 								utils.LoggerDebug.Printf("CPA : Clean priority.TaskCreating = '' !")
 								priority.TaskCreating = ""
@@ -132,6 +134,7 @@ func HandleAMI(event map[string]string) {
 							return
 						} else if active.ActivedCab == "1" && event["CallerIDNum"] == "1411" {
 							Hangup(event["CallerIDNum"])
+							priority.CPAActived = 0
 							if priority.TaskCreating == "CPA" {
 								utils.LoggerDebug.Printf("CPA : Clean priority.TaskCreating = '' !")
 								priority.TaskCreating = ""
@@ -139,6 +142,7 @@ func HandleAMI(event map[string]string) {
 							return
 						} else if active.ActivedCab == "8" && event["CallerIDNum"] == "1481" {
 							Hangup(event["CallerIDNum"])
+							priority.CPAActived = 0
 							if priority.TaskCreating == "CPA" {
 								utils.LoggerDebug.Printf("CPA : Clean priority.TaskCreating = '' !")
 								priority.TaskCreating = ""
@@ -159,7 +163,7 @@ func HandleAMI(event map[string]string) {
 					}
 					utils.LoggerDebug.Printf("CPA calling failed , check priority return false !")
 					Hangup(event["CallerIDNum"]) //lowwer priority ,hangup caller
-					//priority.CPAActived = 1      //CPA触发,但未运行
+					priority.CPAActived = 0      //CPA触发,但未运行
 				}
 
 				time.Sleep(1 * time.Second)
@@ -374,14 +378,15 @@ func HandleAMI(event map[string]string) {
 				priority.RegistryTask.StopAndUnregister("PAD-OCC")
 				ConfbridgeKick(taskTmp.ConfbridgeID, "all")
 
-				time.Sleep(time.Millisecond * 500) //wait CPA Active
+				time.Sleep(time.Millisecond * 900) //wait CPA Active
+
 				//check resume
 				taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 				if ok {
 					if taskName == "EMG" {
-						EMGConfbridgeReinvite(task.ConfbridgeID)
+						EMGConfbridgeReinvite(task)
 					} else if taskName == "CPA" {
-						CPAConfbridgeReinvite(task.ConfbridgeID)
+						CPAConfbridgeReinvite(task)
 					}
 				}
 
@@ -498,6 +503,7 @@ func HandleAMI(event map[string]string) {
 
 				if event["Context"] == "chanspy-rule-whisper" {
 					alstatus.PaStatus("", "PAD", "end")
+					utils.LoggerDebug.Printf("Check PAD-ICP queue chanspy-rule-whisper !")
 
 					res, _ := QueueStatus("0301", "") // check ICP queue ,if empty PAD end
 					if res == nil {
@@ -511,14 +517,15 @@ func HandleAMI(event map[string]string) {
 				}
 
 				if priority.OCCAnswer == 0 { // not OCC-PAD
-					time.Sleep(time.Millisecond * 500) //wait CPA Active
+					time.Sleep(time.Millisecond * 900) //wait CPA Active
+					utils.LoggerDebug.Printf("======================================")
 					//check resume
 					taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 					if ok {
 						if taskName == "EMG" {
-							EMGConfbridgeReinvite(task.ConfbridgeID)
+							EMGConfbridgeReinvite(task)
 						} else if taskName == "CPA" {
-							CPAConfbridgeReinvite(task.ConfbridgeID)
+							CPAConfbridgeReinvite(task)
 						}
 					}
 				}
@@ -540,9 +547,9 @@ func HandleAMI(event map[string]string) {
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "EMG" {
-					EMGConfbridgeReinvite(task.ConfbridgeID)
+					EMGConfbridgeReinvite(task)
 				} else if taskName == "CPA" {
-					CPAConfbridgeReinvite(task.ConfbridgeID)
+					CPAConfbridgeReinvite(task)
 				}
 			}
 		}
@@ -915,7 +922,7 @@ func HandleAMI(event map[string]string) {
 		//Send PA start msg to STC
 		if utils.IsICP(event["CallerIDNum"]) && event["Exten"] == "0500" { // PA start
 			priority.PAInterrupt = 0
-			alstatus.PaStatus(event["CallerIDNum"], "PA", "start")
+
 			//================================
 			task := priority.TaskInfo{
 				RunChannel:   event["Channel"],
@@ -943,6 +950,7 @@ func HandleAMI(event map[string]string) {
 					}
 				}
 			}
+			alstatus.PaStatus(event["CallerIDNum"], "PA", "start")
 
 			break
 		} else if utils.IsIO(event["CallerIDNum"]) && event["Exten"] == "0501" { //CPA start
@@ -957,6 +965,7 @@ func HandleAMI(event map[string]string) {
 				ConfbridgeID: event["Conference"],
 				Running:      true,
 			}
+			priority.CPAActived = 0
 			utils.LoggerDebug.Printf("CPA Runing , Set CPA task info %+v .", task)
 			priority.RegistryTask.Register("CPA", task)
 
@@ -1067,35 +1076,39 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("PA")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 500) //wait CPA Active
+			time.Sleep(time.Millisecond * 900) //wait CPA Active
 			// check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "EMG" {
-					EMGConfbridgeReinvite(task.ConfbridgeID)
+					EMGConfbridgeReinvite(task)
 				} else if taskName == "CPA" {
-					CPAConfbridgeReinvite(task.ConfbridgeID)
+					CPAConfbridgeReinvite(task)
 				}
 			}
 
 		} else if utils.IsIO(event["CallerIDNum"]) && event["Exten"] == "0501" { //CPA end
 
-			alstatus.PaStatus(event["CallerIDNum"], "CPA", "end")
-
 			//CPA
 			taskTmp, ok := priority.RegistryTask.Get("CPA")
 			if ok {
 				ConfbridgeKick(taskTmp.ConfbridgeID, "all")
 			}
+
+			//已经被打断的CPA不会重复发送end
+			if taskTmp.Running {
+				alstatus.PaStatus(event["CallerIDNum"], "CPA", "end")
+			}
+
 			priority.RegistryTask.StopAndUnregister("CPA")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 500) //wait CPA Active
+			time.Sleep(time.Millisecond * 900) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "EMG" {
-					EMGConfbridgeReinvite(task.ConfbridgeID)
+					EMGConfbridgeReinvite(task)
 				}
 			}
 
@@ -1112,12 +1125,12 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("EMG")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 500) //wait CPA Active
+			time.Sleep(time.Millisecond * 900) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "CPA" {
-					CPAConfbridgeReinvite(task.ConfbridgeID)
+					CPAConfbridgeReinvite(task)
 				}
 			}
 
@@ -1133,14 +1146,14 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("STN")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 500) //wait CPA Active
+			time.Sleep(time.Millisecond * 900) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "CPA" {
-					CPAConfbridgeReinvite(task.ConfbridgeID)
+					CPAConfbridgeReinvite(task)
 				} else if taskName == "EMG" {
-					EMGConfbridgeReinvite(task.ConfbridgeID)
+					EMGConfbridgeReinvite(task)
 				}
 			}
 
@@ -1156,14 +1169,14 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("DCS")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 500) //wait CPA Active
+			time.Sleep(time.Millisecond * 900) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "CPA" {
-					CPAConfbridgeReinvite(task.ConfbridgeID)
+					CPAConfbridgeReinvite(task)
 				} else if taskName == "EMG" {
-					EMGConfbridgeReinvite(task.ConfbridgeID)
+					EMGConfbridgeReinvite(task)
 				}
 			}
 
@@ -1179,14 +1192,14 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("SPC")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 500) //wait CPA Active
+			time.Sleep(time.Millisecond * 900) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "CPA" {
-					CPAConfbridgeReinvite(task.ConfbridgeID)
+					CPAConfbridgeReinvite(task)
 				} else if taskName == "EMG" {
-					EMGConfbridgeReinvite(task.ConfbridgeID)
+					EMGConfbridgeReinvite(task)
 				}
 			}
 
@@ -1202,14 +1215,14 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("CHK")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 500) //wait CPA Active
+			time.Sleep(time.Millisecond * 900) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "CPA" {
-					CPAConfbridgeReinvite(task.ConfbridgeID)
+					CPAConfbridgeReinvite(task)
 				} else if taskName == "EMG" {
-					EMGConfbridgeReinvite(task.ConfbridgeID)
+					EMGConfbridgeReinvite(task)
 				}
 			}
 
@@ -1225,14 +1238,14 @@ func HandleAMI(event map[string]string) {
 			priority.RegistryTask.StopAndUnregister("VOL")
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 500) //wait CPA Active
+			time.Sleep(time.Millisecond * 900) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "CPA" {
-					CPAConfbridgeReinvite(task.ConfbridgeID)
+					CPAConfbridgeReinvite(task)
 				} else if taskName == "EMG" {
-					EMGConfbridgeReinvite(task.ConfbridgeID)
+					EMGConfbridgeReinvite(task)
 				}
 			}
 		}
@@ -1325,14 +1338,14 @@ func HandleAMI(event map[string]string) {
 			//time.Sleep(time.Millisecond * 100)
 			SetPadTimer()
 
-			time.Sleep(time.Millisecond * 500) //wait CPA Active
+			time.Sleep(time.Millisecond * 900) //wait CPA Active
 			//check resume
 			taskName, task, ok := priority.RegistryTask.HighestPriorityRunningTask1()
 			if ok {
 				if taskName == "EMG" {
-					EMGConfbridgeReinvite(task.ConfbridgeID)
+					EMGConfbridgeReinvite(task)
 				} else if taskName == "CPA" {
-					CPAConfbridgeReinvite(task.ConfbridgeID)
+					CPAConfbridgeReinvite(task)
 				} else {
 					ICPConfbridgeReinvite(task.ConfbridgeID, taskName)
 				}
@@ -1349,7 +1362,7 @@ func HandleAMI(event map[string]string) {
 			}
 		}
 
-	case "BridgeEnter": // TMS-ICP answer PAD; PACU connect ICP
+	case "BridgeEnter": //
 		lfshook.NewLogger().Infof("=========event:%s   callerid-num:%s callerid-name:%s", event["Event"], event["CallerIDNum"], event["CallerIDName"])
 
 		//PAD-OCC start
@@ -1418,6 +1431,12 @@ 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
+		}
 	}
 }
 

+ 2 - 2
internal/app/stc/broadcast/stc-broadcast.go

@@ -750,7 +750,7 @@ func AlarmHandleICP(data []byte) {
 		//NotifyPaiu(exten, "answer")
 		priority.ICPAnswer = 1
 		//if priority.PADStart == 0 {
-		alstatus.PaStatus("", "PAD", "start")
+		//alstatus.PaStatus("", "PAD", "start")
 		priority.InterruptedPad = ""
 		//	priority.PADStart = 1
 		//}
@@ -810,7 +810,7 @@ func AlarmHandleTMS(data []byte) {
 		//PACU---call---->ICP1
 		//PAD---->Chanspy(WEq)-->ICP1;PAD--->Call---->ICP2
 		//if priority.PADStart == 0 {
-		alstatus.PaStatus("", "PAD", "start")
+		//alstatus.PaStatus("", "PAD", "start")
 		priority.InterruptedPad = ""
 		//priority.PADStart = 1
 		//}

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

@@ -31,7 +31,7 @@ var CABInterrupt = 0
 var PAInterrupt = 0
 
 // 是否有CPA激活
-//var CPAActived = 0
+var CPAActived = 0
 
 var filePath = "/etc/asterisk/priority.conf"
 

+ 7 - 1
internal/app/stc/priority/task.go

@@ -44,7 +44,13 @@ func (r *TaskRegistry) UpdateStatus(name string, newStatus bool) {
 	defer r.mu.Unlock()
 
 	if !newStatus {
-		delete(r.m, name) // 自动清理:Running=false → 移除
+		//delete(r.m, name) //:Running=false
+		if t, ok := r.m[name]; ok {
+			t.Running = false
+			r.m[name] = t
+		} else {
+			// 如果没有旧记录,但你要“重新启用”,需外部提供完整 TaskInfo → 建议用 Register()
+		}
 		return
 	}
 

+ 11 - 1
internal/app/stc/sendstatus/status.go

@@ -5,6 +5,7 @@ import (
 	"net"
 	"pbx-api-gin/internal/app/stc/active"
 	msgdata "pbx-api-gin/internal/app/stc/data"
+	"pbx-api-gin/internal/app/stc/priority"
 	"pbx-api-gin/internal/app/stc/socket"
 	"pbx-api-gin/pkg/utils"
 	"time"
@@ -124,7 +125,7 @@ func AlarmStatus(exten string, status string) {
 		return
 	}
 	//check if actived
-	utils.LoggerDebug.Printf("PAD number:%s		CarNum:%x 	 Pos:%x 	Status:%x", exten, protocol.Data[0], protocol.Data[1], protocol.Data[2])
+	utils.LoggerDebug.Printf("PAD number:%s		CarNum:%x 	 Pos:%x 	Status:%x(0=Offline,1=Idle,2=calling,3=Hold,4=Connected)", exten, protocol.Data[0], protocol.Data[1], protocol.Data[2])
 
 	if socket.Conn != nil {
 		SendToStc(socket.Conn, encoded)
@@ -143,6 +144,15 @@ func PaStatus(src string, patype string, operation string) {
 	if !active.Master {
 		return
 	}
+
+	//过滤掉非EMG运行模式下的continue状态发送
+	if operation == "continue" {
+		taskName, _, _ := priority.RegistryTask.HighestPriorityRunningTask()
+		if taskName != "EMG" {
+			return
+		}
+	}
+
 	utils.LoggerDebug.Printf("PA Status Src:%s 		Type:%s		Status:%s", src, patype, operation)
 	protocol := msgdata.NewProtocol()
 	protocol.MessageID = 0x22