index.go 4.0 KB

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