package Warning import ( "Cold_Api/models/Admin" "fmt" "github.com/beego/beego/v2/adapter/orm" orm2 "github.com/beego/beego/v2/client/orm" _ "github.com/go-sql-driver/mysql" "strconv" "time" ) // 模板 type WarningSand struct { Id int `orm:"column(ID);size(11);auto;pk"` T_sn string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机 T_Id int `orm:"size(200);null"` // 传感器 ID T_Name string `orm:"size(256);null"` // 传感器 温度探头1 T_Msid int `orm:"size(256);null"` // T_T float32 `orm:"size(20);null"` // 湿度下限 T_RH float32 `orm:"size(20);null"` // 湿度上限 T_Title string `orm:"size(256);null"` // 报警标题 温度超上限报警 T_Addr string `orm:"size(256);null"` // 地址 车载环境监测仪 T_Remark string `orm:"size(256);null"` // 备注 T_Ut time.Time `orm:"type(timestamp);null;"` // 采集时间 T_Bind string `orm:"size(256);null"` //设备绑定 Uid (这里单独改没有,要在 设备里面加入) T_Filter int `orm:"size(200);null"` // 过滤次数 T_Send_x int `orm:"type(text);size(256);null"` // 发送记录 T_State int `orm:"size(2);1"` // 0 删除 1 等待发送 2 发送成功 CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间 UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now 每次 model 保存时都会对时间自动更新 } func (t *WarningSand) TableName() string { return "WarningSand" // 数据库名称 // ************** 替换 FormulaList ************** } func init() { //注册模型 orm.RegisterModel(new(WarningSand)) orm.Debug = true } // ---------------- 特殊方法 ------------------- // 获取 ById func Read_WarningWx_ById(id int) (r WarningSand) { o := orm.NewOrm() r = WarningSand{Id: id} err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名 if err != nil { fmt.Println(err) } return r } // 添加 func Add_WarningHand(m WarningSand) { warningWxList := Read_DeviceWarning(m) if len(warningWxList) == 0 { Add_Warning(m) } } // 添加 func Add_Warning(m WarningSand) (id int64, err error) { o := orm.NewOrm() id, err = o.Insert(&m) //if err != nil { // fmt.Println(err) //} return id, err } // 获取列表 func Read_DeviceWarning(Warning WarningSand) (r []WarningSand) { o := orm.NewOrm() // 也可以直接使用 Model 结构体作为表名 qs := o.QueryTable(new(WarningSand)) now := time.Now() // N 个小时前 dd, _ := time.ParseDuration("-1m") //"s", "m", "h". currentTime := now.Add(dd) qs.Filter("T_sn", Warning.T_sn).Filter("T_Id", Warning.T_Id).Filter("T_Title", Warning.T_Title).Filter("CreateTime__gte", currentTime.Format("2006-01-02 15:04:05")).OrderBy("-Id").All(&r) // 记录 ++ if len(r) > 0 { ColAdd_DeviceWarningBy_ID(r[0].Id) } return r } // 获取时 累加 1 func ColAdd_DeviceWarningBy_ID(id int ) { o := orm.NewOrm() // 也可以直接使用 Model 结构体作为表名 design := new(WarningSand) qs := o.QueryTable(design) // 获取时 累加 1 qs.Filter("Id", id).Update(orm2.Params{"T_Filter": orm2.ColValue(orm.ColAdd, 1)}) return } // func Read_WarningSand_ALL_T_sn_TIME_Count(T_sn string) (cnt int) { o := orm.NewOrm() var maps_z []orm2.ParamsList now := time.Now() timeStr:= now.Format("2006-01-02") + " 00:00:00" sql := "SELECT COUNT(ID) FROM WarningSand WHERE t__title NOT LIKE '%恢复%' AND t__ut > '"+timeStr+"' AND t_sn LIKE '%"+T_sn+"%' "; fmt.Println(sql) _, err := o.Raw( sql).ValuesList(&maps_z) if err != nil { return 0 } if len(maps_z) == 0 { return 0 } //value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64) key,_ := strconv.Atoi(maps_z[0][0].(string)) return key } // func Read_WarningSand_ALL_T_Bind_TIME_Count(user_ Admin.Admin,T_sn string) (cnt int) { o := orm.NewOrm() var maps_z []orm2.ParamsList now := time.Now() timeStr:= now.Format("2006-01-02") + " 00:00:00" T_Bind := "U"+strconv.Itoa(user_.Id)+"|" sql := "SELECT COUNT(ID) FROM WarningSand WHERE t__title NOT LIKE '%恢复%' AND t__ut > '"+timeStr+"' AND t__bind LIKE '%"+T_Bind+"%' AND t_sn LIKE '%"+T_sn+"%'"; fmt.Println(sql) _, err := o.Raw( sql).ValuesList(&maps_z) if err != nil { return 0 } if len(maps_z) == 0 { return 0 } //value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64) key,_ := strconv.Atoi(maps_z[0][0].(string)) return key }