WarningType.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package Warning
  2. import (
  3. "ColdP_server/controllers/lib"
  4. "ColdP_server/logs"
  5. "fmt"
  6. _ "github.com/astaxie/beego/cache/redis"
  7. "github.com/beego/beego/v2/adapter/orm"
  8. _ "github.com/go-sql-driver/mysql"
  9. "strconv"
  10. "strings"
  11. "sync"
  12. "time"
  13. )
  14. // 模板
  15. type WarningType struct {
  16. Id int `orm:"column(ID);size(11);auto;pk"`
  17. T_name string `orm:"size(256);null"` // 分类
  18. T_Tips string `orm:"type(text);size(256);null"` // 提示
  19. T_Notice int `orm:"size(2);default(0)"` // 是否在报警策略通知机制处展示 0 不展示 1 展示
  20. }
  21. var DeviceLogType = [3]int{101, 102, 103}
  22. var RateType = [8]int{1, 2, 3, 4, 6, 7, 8, 9}
  23. //3
  24. //tp 报警类型
  25. // 1 温度超上限报警
  26. // 2 温度超下限报警
  27. // 3 温度超上限预警
  28. // 4 温度超下限预警
  29. // 5 温度恢复正常
  30. // 6 湿度超上限报警
  31. // 7 湿度超下限报警
  32. // 8 湿度超上限预警
  33. // 9 湿度超下限预警
  34. // 10 湿度恢复正常
  35. //12
  36. //tp 报警类型
  37. // 101 主机报警
  38. // 102 时间报警
  39. // 103 闪存报警
  40. // 104 SD卡报警
  41. // 105 网络报警
  42. // 106 普通日志
  43. // 107 升级固件报警
  44. // 108 系统故障报警
  45. // 109 市电断电报警
  46. // 110 市电已恢复
  47. // 111 电池电量低报警
  48. // 112 电池电量恢复
  49. // 113 传感器故障报警
  50. // 114 传感器恢复
  51. // 115 开始任务(移动端)
  52. // 116 中途打印任务(移动端)
  53. // 117 结束任务(移动端)
  54. // 预警系统
  55. // 1001 设备状态异常
  56. // 1002 传感器数据异常
  57. // 1011 报警策略异常
  58. func (t *WarningType) TableName() string {
  59. return "warning_type" // 数据库名称 // ************** 替换 FormulaList **************
  60. }
  61. // var redisCache_WarningType cache.Cache
  62. var WarningType_list *sync.Map // 泛型
  63. func init() {
  64. //注册模型
  65. WarningType_list = new(sync.Map)
  66. orm.RegisterModel(new(WarningType))
  67. go Read_WarningType_All_Maps()
  68. }
  69. type WarningType_R struct {
  70. Id int
  71. T_name string // 分类
  72. T_check bool // 是否勾选
  73. }
  74. type WarningType_ struct {
  75. Id int
  76. T_name string // 分类
  77. }
  78. func WarningTypeToWarningType_R(r WarningType, T_warning string) (v WarningType_R) {
  79. v.Id = r.Id
  80. v.T_name = r.T_name
  81. if strings.Contains(T_warning, "W"+strconv.Itoa(v.Id)+"|") || T_warning == "*" {
  82. v.T_check = true
  83. }
  84. return v
  85. }
  86. func WarningTypeToWarningType_(r WarningType) (v WarningType_) {
  87. v.Id = r.Id
  88. v.T_name = r.T_name
  89. return v
  90. }
  91. // 获取全部
  92. func Read_WarningType_All_T_Notice_mechanism() string {
  93. logs.Println("=========== 初始化报警规则 =========")
  94. time.Sleep(3 * time.Second)
  95. o := orm.NewOrm()
  96. var r []WarningType
  97. qs := o.QueryTable(new(WarningType))
  98. _, err := qs.Filter("T_Notice", 1).All(&r)
  99. if err != nil {
  100. logs.Error(lib.FuncName(), err)
  101. return ""
  102. }
  103. str := ""
  104. for _, v := range r {
  105. str += v.T_Tips
  106. }
  107. return str
  108. }
  109. // 获取全部
  110. func Read_WarningType_All() (r []WarningType_) {
  111. o := orm.NewOrm()
  112. var maps []WarningType
  113. qs := o.QueryTable(new(WarningType))
  114. _, err := qs.All(&maps)
  115. if err != nil {
  116. logs.Error(lib.FuncName(), err)
  117. return
  118. }
  119. for _, v := range maps {
  120. r = append(r, WarningTypeToWarningType_(v))
  121. }
  122. return r
  123. }
  124. // 报警列表 返回权限拥有的报警类型列表
  125. func Read_WarningType_Power_All(T_warning string) (r []WarningType_) {
  126. if len(T_warning) == 0 {
  127. return r
  128. }
  129. o := orm.NewOrm()
  130. var maps []WarningType
  131. qs := o.QueryTable(new(WarningType))
  132. if T_warning == "*" {
  133. _, err := qs.All(&maps)
  134. if err != nil {
  135. logs.Error(lib.FuncName(), err)
  136. return
  137. }
  138. } else {
  139. list := lib.SplitStringIds(T_warning, "W")
  140. _, err := qs.Filter("Id__in", list).All(&maps)
  141. if err != nil {
  142. logs.Error(lib.FuncName(), err)
  143. return
  144. }
  145. }
  146. for _, v := range maps {
  147. r = append(r, WarningTypeToWarningType_(v))
  148. }
  149. return r
  150. }
  151. // 权限修改 返回全部,已勾选的T_check=true
  152. func Read_WarningType_All_Power_T_Warning(T_warning string) (r []WarningType_R) {
  153. o := orm.NewOrm()
  154. // 也可以直接使用 Model 结构体作为表名
  155. var maps []WarningType
  156. qs := o.QueryTable(new(WarningType))
  157. _, err := qs.OrderBy("Id").All(&maps)
  158. if err != nil {
  159. logs.Error(lib.FuncName(), err)
  160. return
  161. }
  162. for _, v := range maps {
  163. r = append(r, WarningTypeToWarningType_R(v, T_warning))
  164. }
  165. return r
  166. }
  167. // 获取全部
  168. func Read_WarningType_All_Maps() {
  169. time.Sleep(2 * time.Second)
  170. logs.Println("=========== 初始化报警类型 =========")
  171. o := orm.NewOrm()
  172. for true {
  173. var r []WarningType
  174. qs := o.QueryTable(new(WarningType))
  175. _, err := qs.All(&r)
  176. if err != nil {
  177. logs.Error(lib.FuncName(), err)
  178. }
  179. for _, v := range r {
  180. WarningType_list.Store(v.Id, v.T_name)
  181. }
  182. time.Sleep(1 * time.Hour)
  183. }
  184. }
  185. func Read_WarningType_Get(id int) string {
  186. v, ok := WarningType_list.Load(id) /*如果确定是真实的,则存在,否则不存在 */
  187. if ok {
  188. return v.(string)
  189. } else {
  190. return "未知类型"
  191. }
  192. }
  193. // 报警类型
  194. func Read_WarningType(id string) int {
  195. var r int
  196. WarningType_list.Range(func(key, value any) bool {
  197. if value.(string) == id {
  198. r = key.(int)
  199. return false // 找到匹配后立即结束遍历
  200. }
  201. return true // 继续遍历
  202. })
  203. // 如果没有找到匹配项,在遍历结束后返回默认值或其他处理
  204. if r == 0 {
  205. // 这里可以根据需要处理未找到的情况,比如返回一个错误码或特定值
  206. fmt.Println("No matching key found for the given ID")
  207. }
  208. return r
  209. }