WarningType.go 4.7 KB

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