DeviceWarning.go 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. package Device
  2. import (
  3. "Cold_Api/conf"
  4. "Cold_Api/models/Admin"
  5. "fmt"
  6. "github.com/beego/beego/v2/adapter/orm"
  7. orm2 "github.com/beego/beego/v2/client/orm"
  8. _ "github.com/go-sql-driver/mysql"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. // 模板
  14. type DeviceWarning struct {
  15. Id int `orm:"column(ID);size(11);auto;pk"`
  16. T_sn string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
  17. T_Bind string `orm:"size(256);null"` //设备绑定 Uid
  18. //T_class int `orm:"size(200);null"` // 分类
  19. //T_img string `orm:"size(256);null"` // 图片
  20. T_Id int `orm:"size(200);null"` // 传感器 ID
  21. T_Name string `orm:"size(256);null"` // 传感器 温度探头1
  22. T_Msid int `orm:"size(256);null"` //
  23. T_T float32 `orm:"size(20);null"` // 湿度下限
  24. T_RH float32 `orm:"size(20);null"` // 湿度上限
  25. T_Title string `orm:"size(256);null"` // 报警标题 温度超上限报警
  26. T_Addr string `orm:"size(256);null"` // 地址 车载环境监测仪
  27. T_Remark string `orm:"size(256);null"` // 备注
  28. T_Ut time.Time `orm:"type(timestamp);null;"` // 采集时间
  29. T_Text string `orm:"size(256);null"` // 备注
  30. T_Log string `orm:"type(text);null"` // 处理日志
  31. T_State int `orm:"size(2);1"` // 0 删除 1 已处理 2 未处理
  32. CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
  33. UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now 每次 model 保存时都会对时间自动更新
  34. }
  35. // 模板
  36. type DeviceWarning_R struct {
  37. T_sn string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
  38. T_Id int // 传感器 ID
  39. T_Name string // 传感器 温度探头1
  40. T_T float32 // 湿度下限
  41. T_RH float32 // 湿度上限
  42. T_Title string // 报警标题 温度超上限报警
  43. T_Addr string // 地址 车载环境监测仪
  44. T_Remark string // 备注
  45. T_Ut time.Time // 采集时间
  46. T_Text string // 备注
  47. T_Log []string // 处理日志
  48. T_State int // 0 删除 1 未处理 2 已处理
  49. }
  50. func (t *DeviceWarning) TableName() string {
  51. return "DeviceWarning" // 数据库名称 // ************** 替换 FormulaList **************
  52. }
  53. func init() {
  54. //注册模型
  55. orm.RegisterModel(new(DeviceWarning))
  56. orm.Debug = true
  57. }
  58. // ---------------- 特殊方法 -------------------
  59. func DeviceWarningToDeviceWarning_R(t DeviceWarning) (r DeviceWarning_R) {
  60. r.T_sn = t.T_sn
  61. r.T_Id = t.T_Id
  62. r.T_Name = t.T_Name
  63. r.T_T = t.T_T
  64. r.T_RH = t.T_RH
  65. r.T_Title = t.T_Title
  66. r.T_Addr = t.T_Addr
  67. r.T_Remark = t.T_Remark
  68. r.T_Ut = t.T_Ut
  69. r.T_Text = t.T_Text
  70. r.T_State = t.T_State
  71. r.T_Log = strings.Split(t.T_Log, "\n")
  72. return r
  73. }
  74. // 获取 ById
  75. func Read_DeviceWarning_ById(id int) (r DeviceWarning) {
  76. o := orm.NewOrm()
  77. r = DeviceWarning{Id: id}
  78. err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  79. if err != nil {
  80. fmt.Println(err)
  81. }
  82. return r
  83. }
  84. // 添加
  85. func Add_DeviceWarning(m DeviceWarning) (id int64, err error) {
  86. o := orm.NewOrm()
  87. id, err = o.Insert(&m)
  88. //if err != nil {
  89. // fmt.Println(err)
  90. //}
  91. return id, err
  92. }
  93. // 修改
  94. func Update_DeviceWarning(r DeviceWarning, cols ...string) bool {
  95. o := orm.NewOrm()
  96. if num, err := o.Update(&r, cols...); err == nil {
  97. fmt.Println("Number of records updated in database:", num)
  98. return true
  99. }
  100. return false
  101. }
  102. // 修改
  103. func Update_DeviceWarning_ById(m DeviceWarning) (err error) {
  104. o := orm.NewOrm()
  105. v := DeviceWarning{Id: m.Id}
  106. // ascertain id exists in the database
  107. if err = o.Read(&v); err == nil {
  108. var num int64
  109. m.T_State = 2
  110. if num, err = o.Update(&m, "T_Text"); err == nil {
  111. fmt.Println("Number of records updated in database:", num)
  112. }
  113. }
  114. return
  115. }
  116. // 修改
  117. func Update_DeviceWarning_Delete(m DeviceWarning) (err error) {
  118. o := orm.NewOrm()
  119. v := DeviceWarning{Id: m.Id}
  120. // ascertain id exists in the database
  121. if err = o.Read(&v); err == nil {
  122. v.T_State = 0
  123. if num, err := o.Update(&v, "T_State"); err == nil {
  124. fmt.Println("Number of records updated in database:", num)
  125. }
  126. }
  127. return
  128. }
  129. // 获取列表
  130. func Read_DeviceWarning_1(user_ Admin.Admin, page int, T_sn string, T_Name string, Time_start_ string, Time_end_ string) (r []DeviceWarning, cnt int64) {
  131. o := orm.NewOrm()
  132. // 也可以直接使用 Model 结构体作为表名
  133. qs := o.QueryTable(new(DeviceWarning))
  134. var offset int64
  135. var page_z int64
  136. page_z = int64(conf.Page_size)
  137. if page <= 1 {
  138. offset = 0
  139. } else {
  140. offset = int64((page - 1)) * page_z
  141. }
  142. if page == 9999 {
  143. page_z = 9999
  144. offset = 0
  145. }
  146. T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
  147. if user_.Admin_master <= 1 {
  148. T_Bind = ""
  149. }
  150. fmt.Println("T_Bind:", T_Bind)
  151. cond := orm.NewCondition()
  152. cond1 := cond.And("T_State__gt", 0)
  153. if len(T_Bind) > 1 {
  154. cond1 = cond.AndCond(cond1).And("T_Bind__icontains", T_Bind)
  155. }
  156. if len(T_Name) > 1 {
  157. cond1 = cond.AndCond(cond1).AndCond(cond.Or("T_Name__icontains", T_Name).Or("T_Title__icontains", T_Name).Or("T_Addr__icontains", T_Name).Or("T_sn__icontains", T_Name))
  158. }
  159. if len(T_sn) > 1 {
  160. cond1 = cond.AndCond(cond1).And("T_sn__icontains", T_sn)
  161. }
  162. if len(Time_start_) > 1 {
  163. cond1 = cond.AndCond(cond1).And("T_Ut__gte", Time_start_)
  164. }
  165. if len(Time_end_) > 1 {
  166. cond1 = cond.AndCond(cond1).And("T_Ut__lte", Time_end_)
  167. }
  168. qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-T_Ut").All(&r)
  169. cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
  170. return r, cnt
  171. //if len(Time_start_) > 1 && len(Time_end_) > 1 {
  172. // fmt.Println(Time_start_, Time_end_)
  173. // qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Ut__lte", Time_end_).Filter("T_Ut__gte", Time_start_).Filter("T_Name__icontains", T_Name).Filter("T_Addr__icontains", T_Name).Filter("T_sn__icontains", T_Name).Filter("T_Title__icontains", T_Name).OrderBy("-Id").All(&r)
  174. // cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Ut__lte", Time_end_).Filter("T_Ut__gte", Time_start_).Filter("T_Name__icontains", T_Name).Filter("T_Addr__icontains", T_Name).Filter("T_sn__icontains", T_Name).Filter("T_Title__icontains", T_Name).Count()
  175. // return r, cnt
  176. //}
  177. //
  178. //if len(Time_start_) > 1 {
  179. // qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Ut__gte", Time_start_).Filter("T_Name__icontains", T_Name).Filter("T_Addr__icontains", T_Name).Filter("T_sn__icontains", T_Name).Filter("T_Title__icontains", T_Name).OrderBy("-Id").All(&r)
  180. // cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Ut__gte", Time_start_).Filter("T_Name__icontains", T_Name).Filter("T_Addr__icontains", T_Name).Filter("T_sn__icontains", T_Name).Filter("T_Title__icontains", T_Name).Count()
  181. // return r, cnt
  182. //} else if len(Time_end_) > 1 {
  183. // qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Ut__lte", Time_end_).Filter("T_Name__icontains", T_Name).Filter("T_Addr__icontains", T_Name).Filter("T_sn__icontains", T_Name).Filter("T_Title__icontains", T_Name).OrderBy("-Id").All(&r)
  184. // cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Ut__lte", Time_end_).Filter("T_Name__icontains", T_Name).Filter("T_Addr__icontains", T_Name).Filter("T_sn__icontains", T_Name).Filter("T_Title__icontains", T_Name).Count()
  185. // return r, cnt
  186. //}
  187. //
  188. //qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Name__icontains", T_Name).Filter("T_Addr__icontains", T_Name).Filter("T_sn__icontains", T_Name).Filter("T_Title__icontains", T_Name).OrderBy("-Id").All(&r)
  189. //cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Name__icontains", T_Name).Filter("T_Addr__icontains", T_Name).Filter("T_sn__icontains", T_Name).Filter("T_Title__icontains", T_Name).Count()
  190. //
  191. //return r, cnt
  192. }
  193. // 获取列表
  194. func Read_DeviceWarning(user_ Admin.Admin, T_sn string, T_id string, T_title string, T_handle int, Time_start_ string, Time_end_ string, page int, page_z int) (r []DeviceWarning, cnt int64) {
  195. o := orm.NewOrm()
  196. // 也可以直接使用 Model 结构体作为表名
  197. qs := o.QueryTable(new(DeviceWarning))
  198. var offset int64
  199. if page_z == 0 {
  200. page_z = conf.Page_size
  201. }
  202. if page <= 1 {
  203. offset = 0
  204. } else {
  205. offset = int64((page - 1) * page_z)
  206. }
  207. T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
  208. if user_.Admin_master <= 1 {
  209. T_Bind = ""
  210. }
  211. fmt.Println("T_Bind:", T_Bind)
  212. cond := orm.NewCondition()
  213. cond1 := cond.And("T_State__gt", 0)
  214. if len(T_Bind) > 0 {
  215. cond1 = cond1.And("T_Bind__icontains", T_Bind)
  216. }
  217. if len(T_title) > 0 {
  218. cond1 = cond1.And("T_Title", T_title)
  219. }
  220. if len(T_sn) > 0 {
  221. cond1 = cond1.And("T_sn", T_sn)
  222. }
  223. if len(T_id) > 0 {
  224. cond1 = cond1.And("T_Id", T_id)
  225. }
  226. if len(Time_start_) > 0 {
  227. cond1 = cond1.And("T_Ut__gte", Time_start_)
  228. }
  229. if len(Time_end_) > 0 {
  230. cond1 = cond1.And("T_Ut__lte", Time_end_)
  231. }
  232. //不填或0:所有 1:已处理 2:未处理
  233. if T_handle == 1 {
  234. cond1 = cond1.And("T_Text__isnull", true)
  235. }
  236. if T_handle == 2 {
  237. cond1 = cond1.And("T_Text__isnull", false).And("T_State", 2)
  238. }
  239. qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-T_Ut").All(&r)
  240. cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
  241. return r, cnt
  242. }
  243. //
  244. func Read_Warning_ALL_T_Bind_TIME_1d_Count(user_ Admin.Admin, T_sn string) int {
  245. o := orm.NewOrm()
  246. var maps_z []orm2.ParamsList
  247. now := time.Now()
  248. // 一天前
  249. //d, _ := time.ParseDuration("-24h")
  250. //now = now.Add(d)
  251. timeStr := now.Format("2006-01-02") + " 00:00:00"
  252. timeStr1 := now.Format("2006-01-02") + " 23:59:59"
  253. T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
  254. sql := "SELECT * FROM DeviceWarning WHERE t__title NOT LIKE '%恢复%' AND t__title NOT LIKE '%任务%' AND t__ut > '" + timeStr + "' AND t__ut < '" + timeStr1 + "' AND t__bind LIKE '%" + T_Bind + "%' AND t_sn LIKE '%" + T_sn + "%' group by t_sn"
  255. fmt.Println(sql)
  256. _, err := o.Raw(sql).ValuesList(&maps_z)
  257. if err != nil {
  258. return 0
  259. }
  260. if len(maps_z) == 0 {
  261. return 0
  262. }
  263. //value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
  264. return len(maps_z)
  265. }