WarningType.go 5.0 KB

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