index.go 4.1 KB

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