index.go 4.2 KB

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