123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- package Warning
- import (
- "ColdP_server/controllers/lib"
- "ColdP_server/logs"
- "fmt"
- _ "github.com/astaxie/beego/cache/redis"
- "github.com/beego/beego/v2/adapter/orm"
- _ "github.com/go-sql-driver/mysql"
- "strconv"
- "strings"
- "sync"
- "time"
- )
- // 模板
- type WarningType struct {
- Id int `orm:"column(ID);size(11);auto;pk"`
- T_name string `orm:"size(256);null"` // 分类
- T_Tips string `orm:"type(text);size(256);null"` // 提示
- T_Notice int `orm:"size(2);default(0)"` // 是否在报警策略通知机制处展示 0 不展示 1 展示
- }
- var DeviceLogType = [3]int{101, 102, 103}
- var RateType = [8]int{1, 2, 3, 4, 6, 7, 8, 9}
- //3
- //tp 报警类型
- // 1 温度超上限报警
- // 2 温度超下限报警
- // 3 温度超上限预警
- // 4 温度超下限预警
- // 5 温度恢复正常
- // 6 湿度超上限报警
- // 7 湿度超下限报警
- // 8 湿度超上限预警
- // 9 湿度超下限预警
- // 10 湿度恢复正常
- //12
- //tp 报警类型
- // 101 主机报警
- // 102 时间报警
- // 103 闪存报警
- // 104 SD卡报警
- // 105 网络报警
- // 106 普通日志
- // 107 升级固件报警
- // 108 系统故障报警
- // 109 市电断电报警
- // 110 市电已恢复
- // 111 电池电量低报警
- // 112 电池电量恢复
- // 113 传感器故障报警
- // 114 传感器恢复
- // 115 开始任务(移动端)
- // 116 中途打印任务(移动端)
- // 117 结束任务(移动端)
- // 预警系统
- // 1001 设备状态异常
- // 1002 传感器数据异常
- // 1011 报警策略异常
- func (t *WarningType) TableName() string {
- return "warning_type" // 数据库名称 // ************** 替换 FormulaList **************
- }
- // var redisCache_WarningType cache.Cache
- var WarningType_list *sync.Map // 泛型
- func init() {
- //注册模型
- WarningType_list = new(sync.Map)
- orm.RegisterModel(new(WarningType))
- go Read_WarningType_All_Maps()
- }
- type WarningType_R struct {
- Id int
- T_name string // 分类
- T_check bool // 是否勾选
- }
- type WarningType_ struct {
- Id int
- T_name string // 分类
- }
- func WarningTypeToWarningType_R(r WarningType, T_warning string) (v WarningType_R) {
- v.Id = r.Id
- v.T_name = r.T_name
- if strings.Contains(T_warning, "W"+strconv.Itoa(v.Id)+"|") || T_warning == "*" {
- v.T_check = true
- }
- return v
- }
- func WarningTypeToWarningType_(r WarningType) (v WarningType_) {
- v.Id = r.Id
- v.T_name = r.T_name
- return v
- }
- // 获取全部
- func Read_WarningType_All_T_Notice_mechanism() string {
- logs.Println("=========== 初始化报警规则 =========")
- time.Sleep(3 * time.Second)
- o := orm.NewOrm()
- var r []WarningType
- qs := o.QueryTable(new(WarningType))
- _, err := qs.Filter("T_Notice", 1).All(&r)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return ""
- }
- str := ""
- for _, v := range r {
- str += v.T_Tips
- }
- return str
- }
- // 获取全部
- func Read_WarningType_All() (r []WarningType_) {
- o := orm.NewOrm()
- var maps []WarningType
- qs := o.QueryTable(new(WarningType))
- _, err := qs.All(&maps)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return
- }
- for _, v := range maps {
- r = append(r, WarningTypeToWarningType_(v))
- }
- return r
- }
- // 报警列表 返回权限拥有的报警类型列表
- func Read_WarningType_Power_All(T_warning string) (r []WarningType_) {
- if len(T_warning) == 0 {
- return r
- }
- o := orm.NewOrm()
- var maps []WarningType
- qs := o.QueryTable(new(WarningType))
- if T_warning == "*" {
- _, err := qs.All(&maps)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return
- }
- } else {
- list := lib.SplitStringIds(T_warning, "W")
- _, err := qs.Filter("Id__in", list).All(&maps)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return
- }
- }
- for _, v := range maps {
- r = append(r, WarningTypeToWarningType_(v))
- }
- return r
- }
- // 权限修改 返回全部,已勾选的T_check=true
- func Read_WarningType_All_Power_T_Warning(T_warning string) (r []WarningType_R) {
- o := orm.NewOrm()
- // 也可以直接使用 Model 结构体作为表名
- var maps []WarningType
- qs := o.QueryTable(new(WarningType))
- _, err := qs.OrderBy("Id").All(&maps)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- return
- }
- for _, v := range maps {
- r = append(r, WarningTypeToWarningType_R(v, T_warning))
- }
- return r
- }
- // 获取全部
- func Read_WarningType_All_Maps() {
- time.Sleep(2 * time.Second)
- logs.Println("=========== 初始化报警类型 =========")
- o := orm.NewOrm()
- for true {
- var r []WarningType
- qs := o.QueryTable(new(WarningType))
- _, err := qs.All(&r)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- }
- for _, v := range r {
- WarningType_list.Store(v.Id, v.T_name)
- }
- time.Sleep(1 * time.Hour)
- }
- }
- func Read_WarningType_Get(id int) string {
- v, ok := WarningType_list.Load(id) /*如果确定是真实的,则存在,否则不存在 */
- if ok {
- return v.(string)
- } else {
- return "未知类型"
- }
- }
- // 报警类型
- func Read_WarningType(id string) int {
- var r int
- WarningType_list.Range(func(key, value any) bool {
- if value.(string) == id {
- r = key.(int)
- return false // 找到匹配后立即结束遍历
- }
- return true // 继续遍历
- })
- // 如果没有找到匹配项,在遍历结束后返回默认值或其他处理
- if r == 0 {
- // 这里可以根据需要处理未找到的情况,比如返回一个错误码或特定值
- fmt.Println("No matching key found for the given ID")
- }
- return r
- }
|