index.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package priority
  2. import (
  3. "os"
  4. "pbx-api-gin/pkg/lfshook"
  5. "strconv"
  6. "github.com/sirupsen/logrus"
  7. "gopkg.in/ini.v1"
  8. )
  9. var ICPAnswer = 0
  10. var OCCAnswer = 0
  11. var RunningTypePriority = 0
  12. var RunningType = ""
  13. var SpecialVoice = 0
  14. var RunningPATaskChan = ""
  15. var PADStart = 0
  16. var PADOccStart = 0
  17. var C2CRuning = 0
  18. type BroadcastResumeParas struct {
  19. FileName string `json:"filename"`
  20. Count int `json:"count"`
  21. Delay int `json:"delay"`
  22. BroadcastType string `json:"broadcastType"`
  23. }
  24. var ResumeEmgPara BroadcastResumeParas
  25. type PriorityAll struct {
  26. ManuPa string `json:"manualPa"`
  27. CabCab string `json:"cabCab"`
  28. PADICP string `json:"padIcp"`
  29. PADTMS string `json:"padTms"`
  30. PADOCC string `json:"padOcc"`
  31. CPA string `json:"cpa"`
  32. EMG string `json:"emg"`
  33. SPC string `json:"spc"`
  34. DCS string `json:"dcs"`
  35. STN string `json:"stn"`
  36. CHK string `json:"chk"`
  37. VOL string `json:"vol"`
  38. }
  39. var Priority PriorityAll
  40. func GetPriority() {
  41. filePath := "/etc/asterisk/priority.conf"
  42. _, err := os.Stat(filePath)
  43. if err != nil {
  44. logrus.Error(err)
  45. return
  46. }
  47. iniFile, err := ini.Load(filePath)
  48. if err != nil {
  49. logrus.Error(err)
  50. return
  51. }
  52. Priority.CHK = iniFile.Section("general").Key("CHK").Value()
  53. Priority.STN = iniFile.Section("general").Key("STN").Value()
  54. Priority.DCS = iniFile.Section("general").Key("DCS").Value()
  55. Priority.SPC = iniFile.Section("general").Key("SPC").Value()
  56. Priority.EMG = iniFile.Section("general").Key("EMG").Value()
  57. Priority.CPA = iniFile.Section("general").Key("CPA").Value()
  58. Priority.PADOCC = iniFile.Section("general").Key("PAD-OCC").Value()
  59. Priority.PADTMS = iniFile.Section("general").Key("PAD-TMS").Value()
  60. Priority.PADICP = iniFile.Section("general").Key("PAD-ICP").Value()
  61. Priority.CabCab = iniFile.Section("general").Key("CabCab").Value()
  62. Priority.ManuPa = iniFile.Section("general").Key("ManuPa").Value()
  63. Priority.VOL = iniFile.Section("general").Key("VOL").Value()
  64. }
  65. func GetPriorityByKey(key string) string {
  66. switch key {
  67. case "VOL":
  68. return Priority.VOL
  69. case "CHK":
  70. return Priority.CHK
  71. case "STN":
  72. return Priority.STN
  73. case "DCS":
  74. return Priority.DCS
  75. case "SPC":
  76. return Priority.SPC
  77. case "EMG":
  78. return Priority.EMG
  79. case "CPA":
  80. return Priority.CPA
  81. case "PAD-OCC":
  82. return Priority.PADOCC
  83. case "PAD-TMS":
  84. return Priority.PADTMS
  85. case "PAD-ICP":
  86. return Priority.PADICP
  87. case "CabCab":
  88. return Priority.CabCab
  89. case "ManuPa":
  90. return Priority.ManuPa
  91. default:
  92. return ""
  93. }
  94. }
  95. // check priority , if the running priority is lowwer than the to run priority
  96. func CheckPriority(runType string) bool {
  97. //return true
  98. lfshook.NewLogger().Logger.Infof("=========Check Pri runType:%s====RunningTypePriority:%d====SpecialVoice:%d========", runType, RunningTypePriority, SpecialVoice)
  99. //Check special voice can not interrupt
  100. if SpecialVoice == 1 {
  101. return false
  102. }
  103. //No any runing task now
  104. if RunningTypePriority == 0 {
  105. return true
  106. }
  107. //Get the to run priority number in the config file
  108. ret, err := strconv.Atoi(GetPriorityByKey(runType))
  109. if err != nil {
  110. lfshook.NewLogger().Logger.Infof("=========Check Pri GetPriorityByKey err:%+v", err)
  111. return false
  112. }
  113. //special same priority number task return true
  114. if ret == RunningTypePriority {
  115. switch runType {
  116. case "PAD-ICP":
  117. return true
  118. case "PAD-TMS":
  119. return true
  120. /* case "VOL":
  121. return true
  122. case "CHK":
  123. return true*/
  124. }
  125. }
  126. //if the running task priority is lowwer
  127. if ret < RunningTypePriority && ret != 0 {
  128. return true
  129. } else {
  130. //C2C run together with other task except ..
  131. if C2CRuning == 1 {
  132. if runType != "PA" && runType != "PAD-ICP" && runType != "PAD-TMS" && runType != "C2C" {
  133. return true
  134. }
  135. } else if runType == "C2C" {
  136. if RunningType != "PA" && RunningType != "PAD-ICP" && RunningType != "PAD-TMS" && RunningType != "C2C" {
  137. return true
  138. }
  139. }
  140. }
  141. return false
  142. }
  143. // Clean all priority tag
  144. func CleanPriorityTag() {
  145. lfshook.NewLogger().Logger.Infof("=========CleanPriorityTag===============")
  146. ICPAnswer = 0
  147. OCCAnswer = 0
  148. RunningTypePriority = 0
  149. RunningType = ""
  150. SpecialVoice = 0
  151. RunningPATaskChan = ""
  152. }