DeviceSensor.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. package Device
  2. import (
  3. "Cold_Api/conf"
  4. "Cold_Api/models/Admin"
  5. "encoding/json"
  6. "fmt"
  7. "github.com/astaxie/beego/cache"
  8. _ "github.com/astaxie/beego/cache/redis"
  9. "github.com/beego/beego/v2/adapter/orm"
  10. orm2 "github.com/beego/beego/v2/client/orm"
  11. beego "github.com/beego/beego/v2/server/web"
  12. _ "github.com/go-sql-driver/mysql"
  13. "strconv"
  14. "strings"
  15. "time"
  16. )
  17. // 模板
  18. type DeviceSensor struct {
  19. Id int `orm:"column(ID);size(11);auto;pk"`
  20. T_sn string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
  21. T_id int `orm:"size(11);null"` // 传感器编号
  22. T_name string `orm:"size(256);null"` // 标题
  23. T_t float32 `orm:"size(10);null"` // 温度
  24. T_rh float32 `orm:"size(10);null"` // 湿度
  25. T_Tlower float32 `orm:"size(200);null"` // 温度下限
  26. T_Tupper float32 `orm:"size(200);null"` // 温度上限
  27. T_RHlower float32 `orm:"size(200);null"` // 湿度下限
  28. T_RHupper float32 `orm:"size(200);null"` // 湿度上限
  29. T_en int `orm:"size(2);1"` // en:是否启用传感器,
  30. T_free int `orm:"size(2);1"` // free:监测点是否为闲置状态(空库,只监测不报警)
  31. //T_del int `orm:"size(2);1"` // 0 删除 1 正常
  32. //T_err int `orm:"size(2);1"` // 0 正常 1 异常
  33. T_time time.Time `orm:"type(timestamp);null;"` // 采集时间
  34. T_Bind string `orm:"size(256);null"` //设备绑定 Uid (这里单独改没有,要在 设备里面加入)
  35. T_Site string `orm:"size(256);null"` //GPS
  36. T_Dattery int `orm:"size(256);null"` //电量
  37. T_monitor int `orm:"size(256);null"` // 记录状态
  38. T_Calss string `orm:"size(256);null"` //设备分类
  39. T_l_p int `orm:"size(22);null"` // 1物流端 2药店端
  40. T_give int `orm:"size(2);1"` // 0 丢弃 1 正常
  41. T_datashow int `orm:"size(2);1"` // 0 屏蔽数据展示 1 正常数据展示
  42. T_Visit int `orm:"size(200);1"` // 浏览量
  43. T_sort int `orm:"size(200);1"` // 排序
  44. T_State int `orm:"size(2);1"` // 0 删除 1 正常
  45. CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
  46. UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now 每次 model 保存时都会对时间自动更新
  47. }
  48. type DeviceSensor_Del struct {
  49. T_sn string
  50. T_id int
  51. }
  52. func (t *DeviceSensor) TableName() string {
  53. return "DeviceSensor" // 数据库名称 // ************** 替换 FormulaList **************
  54. }
  55. // 模板
  56. type DeviceSensor_R struct {
  57. T_sn string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
  58. T_id int // 传感器编号
  59. T_name string // 标题
  60. T_t float32 // 温度
  61. T_rh float32 // 湿度
  62. T_Tlower float32 // 温度下限
  63. T_Tupper float32 // 温度上限
  64. T_RHlower float32 // 湿度下限
  65. T_RHupper float32 // 湿度上限
  66. T_time string // 采集时间
  67. T_Site string //GPS
  68. T_Dattery int //电量
  69. T_monitor int // 记录状态
  70. T_online int // 在线状态 1 在线 0 离线
  71. T_datashow int // 0 屏蔽数据展示 1 正常数据展示
  72. }
  73. var redisCache_DeviceSensor cache.Cache
  74. var HTTPPort_int = 0
  75. func init() {
  76. //注册模型
  77. orm.RegisterModel(new(DeviceSensor))
  78. config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
  79. "redis_DeviceSensor", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
  80. fmt.Println(config)
  81. var err error
  82. redisCache_DeviceSensor, err = cache.NewCache("redis", config)
  83. if err != nil || redisCache_DeviceSensor == nil {
  84. errMsg := "failed to init redis"
  85. fmt.Println(errMsg, err)
  86. }
  87. HTTPPort, _ := beego.AppConfig.String("HTTPPort")
  88. HTTPPort_int, _ = strconv.Atoi(HTTPPort)
  89. }
  90. // ---------------- Redis -------------------
  91. //Redis_Set(m.T_sn,m) // Redis 更新缓存
  92. func Redis_DeviceSensor_Set(r DeviceSensor) (err error) {
  93. key := r.T_sn + "|" + strconv.Itoa(r.T_id)
  94. //json序列化
  95. str, err := json.Marshal(r)
  96. if err != nil {
  97. fmt.Print(err)
  98. return
  99. }
  100. err = redisCache_DeviceSensor.Put(key, str, 24*time.Hour)
  101. if err != nil {
  102. fmt.Println("set key:", key, ",value:", str, err)
  103. }
  104. return
  105. }
  106. //if r,is :=Redis_Get(T_sn);is{
  107. //return r,nil
  108. //}
  109. func Redis_DeviceSensor_Get(key string) (r DeviceSensor, is bool) {
  110. if redisCache_DeviceSensor.IsExist(key) {
  111. //println("找到key:",key)
  112. v := redisCache_DeviceSensor.Get(key)
  113. json.Unmarshal(v.([]byte), &r)
  114. if r.Id == -1 {
  115. return DeviceSensor{}, false
  116. }
  117. return r, true
  118. }
  119. //println("没有 找到key:",key)
  120. return DeviceSensor{}, false
  121. }
  122. func Redis_DeviceSensor_DelK(r DeviceSensor) (err error) {
  123. key := r.T_sn + "|" + strconv.Itoa(r.T_id)
  124. err = redisCache_DeviceSensor.Delete(key)
  125. return
  126. }
  127. func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r DeviceSensor_R) {
  128. DeviceSensor_r.T_sn = DeviceSensor_.T_sn
  129. DeviceSensor_r.T_id = DeviceSensor_.T_id
  130. DeviceSensor_r.T_name = DeviceSensor_.T_name
  131. DeviceSensor_r.T_t = DeviceSensor_.T_t
  132. DeviceSensor_r.T_rh = DeviceSensor_.T_rh
  133. DeviceSensor_r.T_Tlower = DeviceSensor_.T_Tlower
  134. DeviceSensor_r.T_Tupper = DeviceSensor_.T_Tupper
  135. DeviceSensor_r.T_RHlower = DeviceSensor_.T_RHlower
  136. DeviceSensor_r.T_RHupper = DeviceSensor_.T_RHupper
  137. DeviceSensor_r.T_time = DeviceSensor_.T_time.Format("2006-01-02 15:04:05")
  138. DeviceSensor_r.T_Site = DeviceSensor_.T_Site
  139. DeviceSensor_r.T_Dattery = DeviceSensor_.T_Dattery
  140. DeviceSensor_r.T_monitor = DeviceSensor_.T_monitor
  141. DeviceSensor_r.T_datashow = DeviceSensor_.T_datashow
  142. // 最新设备数据
  143. d_r, d_r_err := Read_Device_ByT_sn(DeviceSensor_.T_sn)
  144. if d_r_err == nil {
  145. DeviceSensor_r.T_monitor = d_r.T_monitor
  146. DeviceSensor_r.T_online = d_r.T_online
  147. }
  148. // 最新数据
  149. key_data := DeviceSensor_.T_sn + "|" + strconv.Itoa(DeviceSensor_.T_id)
  150. r, is := RedisDeviceData_Get_(key_data)
  151. if is {
  152. //logs.Println("时间对比:",DeviceSensor_.T_time.Format("2006-01-02 15:04:05") , r.T_time.Format("2006-01-02 15:04:05"))
  153. if DeviceSensor_.T_time.Unix() < r.T_time.Unix() {
  154. DeviceSensor_r.T_t = r.T_t
  155. DeviceSensor_r.T_rh = r.T_rh
  156. DeviceSensor_r.T_time = r.T_time.Format("2006-01-02 15:04:05")
  157. DeviceSensor_r.T_Site = r.T_Site
  158. DeviceSensor_r.T_Dattery = r.T_Dattery
  159. }
  160. }
  161. return
  162. }
  163. // ---------------- 特殊方法 -------------------
  164. // 获取
  165. func Read_DeviceSensor_ByT_sn(T_sn string, T_id int) (r DeviceSensor, is bool) {
  166. key := r.T_sn + "|" + strconv.Itoa(r.T_id)
  167. if r, is := Redis_DeviceSensor_Get(key); is {
  168. if r.Id == -1 {
  169. return r, false
  170. }
  171. return r, true
  172. }
  173. o := orm.NewOrm()
  174. r = DeviceSensor{T_sn: T_sn, T_id: T_id}
  175. err := o.Read(&r, "T_sn", "T_id") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  176. if err != nil {
  177. fmt.Println("Delete_DeviceSensor_ById", err)
  178. r.Id = -1
  179. Redis_DeviceSensor_Set(r)
  180. return r, false
  181. }
  182. Redis_DeviceSensor_Set(r)
  183. return r, true
  184. }
  185. // 删除
  186. func Delete_DeviceSensor_ById(T_sn string, T_id int) (err error) {
  187. fmt.Println("Delete_DeviceSensor : T_sn", T_sn, "T_id", T_id)
  188. o := orm.NewOrm()
  189. r := DeviceSensor{T_sn: T_sn, T_id: T_id}
  190. err = o.Read(&r, "T_sn", "T_id") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  191. if err != nil {
  192. fmt.Println("Delete_DeviceSensor_ById", err)
  193. return err
  194. }
  195. // ascertain id exists in the database
  196. var num int64
  197. if num, err = o.Delete(&DeviceSensor{Id: r.Id}); err == nil {
  198. fmt.Println("Number of records deleted in database:", num)
  199. }
  200. Redis_DeviceSensor_DelK(r)
  201. return
  202. }
  203. // 修改
  204. func Update_DeviceSensor(r DeviceSensor, cols ...string) bool {
  205. o := orm.NewOrm()
  206. if num, err := o.Update(&r, cols...); err == nil {
  207. fmt.Println("Number of records updated in database:", num)
  208. Redis_DeviceSensor_Set(r)
  209. return true
  210. }
  211. return false
  212. }
  213. // 修改
  214. func DeviceSensor_Bind_Del(T_sn string, T_id int, T_Calss_id int) (err error) {
  215. o := orm.NewOrm()
  216. v := DeviceSensor{T_sn: T_sn, T_id: T_id}
  217. T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
  218. if err = o.Read(&v, "T_sn", "T_id"); err == nil {
  219. v.T_Calss = strings.Replace(v.T_Calss, T_Calss, "", -1)
  220. o.Update(&v, "T_Calss")
  221. }
  222. return err
  223. }
  224. // 修改
  225. func DeviceSensor_T_Calss_Add(T_sn string, T_id int, T_Calss_id int) (err error) {
  226. o := orm.NewOrm()
  227. v := DeviceSensor{T_sn: T_sn, T_id: T_id}
  228. T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
  229. if err = o.Read(&v, "T_sn", "T_id"); err == nil {
  230. v.T_Calss = strings.Replace(v.T_Calss, T_Calss, "", -1)
  231. v.T_Calss = v.T_Calss + T_Calss
  232. o.Update(&v, "T_Calss")
  233. }
  234. return err
  235. }
  236. // 修改
  237. func DeviceSensor_T_Calss_ALL_Del(T_Calss_id int) {
  238. o := orm.NewOrm()
  239. qs := o.QueryTable(new(DeviceSensor))
  240. var r []DeviceSensor
  241. T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
  242. qs.Filter("T_Calss__icontains", T_Calss).All(&r)
  243. for _, v := range r {
  244. v.T_Calss = strings.Replace(v.T_Calss, T_Calss, "", -1)
  245. o.Update(&v, "T_Calss")
  246. }
  247. }
  248. // 修改
  249. //func DeviceSensor_T_Bind_ALL_Del(admin_r Admin.Admin) {
  250. // o := orm.NewOrm()
  251. // qs := o.QueryTable(new(DeviceSensor))
  252. // var r []DeviceSensor
  253. // T_Bind := "U" + strconv.Itoa(admin_r.Id) + "|"
  254. // qs.Filter("T_Bind__icontains", T_Bind).All(&r)
  255. // for _, v := range r {
  256. // v.T_Bind = strings.Replace(v.T_Bind, T_Bind, "", -1)
  257. // o.Update(&v, "T_Bind")
  258. // }
  259. //}
  260. // 修改
  261. func DeviceSensor_T_Bind_Add(T_sn string, T_id int, admin_r Admin.Admin) (err error) {
  262. o := orm.NewOrm()
  263. v := DeviceSensor{T_sn: T_sn, T_id: T_id}
  264. T_Bind := "U" + strconv.Itoa(admin_r.Id) + "|"
  265. if err = o.Read(&v, "T_sn", "T_id"); err == nil {
  266. v.T_Bind = strings.Replace(v.T_Bind, T_Bind, "", -1)
  267. v.T_Bind = v.T_Bind + T_Bind
  268. o.Update(&v, "T_Bind")
  269. }
  270. return err
  271. }
  272. //
  273. //// 修改
  274. //func Update_DeviceSensor_ByTsn_All_T_Bind(T_sn string, T_Bind string) (err error) {
  275. // o := orm.NewOrm()
  276. // var r_l []DeviceSensor
  277. // qs := o.QueryTable(new(DeviceSensor))
  278. //
  279. // qs.Filter("T_sn", T_sn).OrderBy("T_id").All(&r_l)
  280. // for _, v := range r_l {
  281. // v.T_Bind = T_Bind
  282. //
  283. // o.Update(&v, "T_Bind")
  284. // }
  285. //
  286. // return err
  287. //}
  288. // 获取最新数据
  289. func DeviceSensor_T_Bind_ALL(T_sn string, T_Bind string) {
  290. o := orm.NewOrm()
  291. res, err := o.Raw("UPDATE DeviceSensor SET `t__bind` = '" + T_Bind + "' WHERE `t_sn` = '" + T_sn + "' ").Exec()
  292. if err == nil {
  293. num, _ := res.RowsAffected()
  294. fmt.Println("mysql row affected nums: ", num)
  295. }
  296. }
  297. // 获取最新数据
  298. func DeviceSensor_T_l_p_ALL(T_sn string, T_l_p int) {
  299. o := orm.NewOrm()
  300. res, err := o.Raw("UPDATE DeviceSensor SET `t_l_p` = " + strconv.Itoa(T_l_p) + " WHERE `t_sn` = '" + T_sn + "' ").Exec()
  301. if err == nil {
  302. num, _ := res.RowsAffected()
  303. fmt.Println("mysql row affected nums: ", num)
  304. }
  305. }
  306. // 获取最新数据
  307. func DeviceSensor_t_give_ALL(T_sn string, t_give int) {
  308. o := orm.NewOrm()
  309. res, err := o.Raw("UPDATE DeviceSensor SET `t_give` = " + strconv.Itoa(t_give) + " WHERE `t_sn` = '" + T_sn + "' ").Exec()
  310. if err == nil {
  311. num, _ := res.RowsAffected()
  312. fmt.Println("mysql row affected nums: ", num)
  313. }
  314. }
  315. // 获取 ById
  316. func Read_DeviceSensor_ByTsn_Tid(T_sn string, T_id int) (r DeviceSensor, err error) {
  317. o := orm.NewOrm()
  318. r = DeviceSensor{T_sn: T_sn, T_id: T_id}
  319. err = o.Read(&r, "T_sn", "T_id") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  320. return r, err
  321. }
  322. // 获取列表
  323. func Read_DeviceSensor_ByTsn(T_sn string) ([]DeviceSensor_R, int) {
  324. o := orm.NewOrm()
  325. // 也可以直接使用 Model 结构体作为表名
  326. qs := o.QueryTable(new(DeviceSensor))
  327. var r []DeviceSensor
  328. qs.Filter("T_sn", T_sn).OrderBy("T_id").All(&r)
  329. cnt, _ := qs.Filter("T_sn", T_sn).Count()
  330. var DeviceSensor_r []DeviceSensor_R
  331. for _, v := range r {
  332. DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
  333. }
  334. return DeviceSensor_r, int(cnt)
  335. }
  336. // 获取列表
  337. func Read_DeviceSensor_ALL_T_sn(T_sn string, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
  338. o := orm.NewOrm()
  339. // 也可以直接使用 Model 结构体作为表名
  340. qs := o.QueryTable(new(DeviceSensor))
  341. var offset int64
  342. if page <= 1 {
  343. offset = 0
  344. } else {
  345. offset = int64((page - 1) * page_z)
  346. }
  347. var r []DeviceSensor
  348. qs.Limit(page_z, offset).Filter("T_sn", T_sn).OrderBy("T_id").All(&r)
  349. cnt, _ = qs.Filter("T_sn", T_sn).Count()
  350. //for i, v := range r {
  351. // DeviceSensorData, is := Read_DeviceSensorData_ById_New(v.T_sn, v.T_id)
  352. // if !is {
  353. // continue
  354. // }
  355. // //fmt.Println(v.T_sn, v.T_id, DeviceSensorData.T_time)
  356. // r[i].T_t = DeviceSensorData.T_t
  357. // r[i].T_rh = DeviceSensorData.T_rh
  358. // r[i].T_time = DeviceSensorData.T_time
  359. //}
  360. for _, v := range r {
  361. DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
  362. }
  363. return DeviceSensor_r, cnt
  364. }
  365. // 获取列表
  366. func Read_DeviceSensor_class_ALL_1(user_ Admin.Admin, T_Calss_id int, page int, page_z int, T_sn string, T_name string, SN_type string) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
  367. o := orm.NewOrm()
  368. // 也可以直接使用 Model 结构体作为表名
  369. qs := o.QueryTable(new(DeviceSensor))
  370. var offset int64
  371. if page_z == 0 {
  372. page_z = conf.Page_size
  373. }
  374. if page <= 1 {
  375. offset = 0
  376. } else {
  377. offset = int64((page - 1) * page_z)
  378. }
  379. T_Calss := ""
  380. if T_Calss_id != 0 {
  381. T_Calss = "C" + strconv.Itoa(T_Calss_id) + "|"
  382. }
  383. T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
  384. if user_.Admin_master <= 1 {
  385. T_Bind = ""
  386. }
  387. fmt.Println("T_Bind:", T_Bind)
  388. fmt.Println("T_Calss:", T_Calss)
  389. var r []DeviceSensor
  390. cond := orm.NewCondition()
  391. cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_Calss__icontains", T_Calss).And("T_sn__icontains", SN_type).And("T_sn__icontains", T_sn).And("T_name__icontains", T_name).And("T_datashow", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
  392. if len(T_sn) < 6 {
  393. cond1 = cond.AndCond(cond1).AndCond(cond.And("T_give", 1))
  394. }
  395. // 非内部权限
  396. println("user_.Admin_power:", user_.Admin_power)
  397. if len(T_sn) < 6 {
  398. cond1 = cond.AndCond(cond1).AndCond(cond.And("T_give", 1))
  399. }
  400. qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
  401. cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
  402. //
  403. //qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("T_sort").All(&r)
  404. //cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", T_sn).Filter("T_sn__icontains", SN_type).Filter("T_name__icontains", T_name).Count()
  405. //for i, v := range r {
  406. //
  407. // // 提前最新数据
  408. // DeviceSensorData, is := Read_DeviceSensorData_ById_New(v.T_sn, v.T_id)
  409. // if !is {
  410. // continue
  411. // }
  412. // if DeviceSensorData.T_time.After(v.T_time) {
  413. // //fmt.Println(v.T_sn, v.T_id, DeviceSensorData.T_time)
  414. // r[i].T_t = DeviceSensorData.T_t
  415. // r[i].T_rh = DeviceSensorData.T_rh
  416. // r[i].T_time = DeviceSensorData.T_time
  417. // }
  418. //
  419. //}
  420. for _, v := range r {
  421. DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
  422. }
  423. return DeviceSensor_r, cnt
  424. //return r, cnt
  425. }
  426. // 获取列表
  427. func Read_DeviceSensor_Map_ALL_1(user_ Admin.Admin, T_Calss_id int, T_sn string, T_name string, SN_type string) (r []DeviceSensor) {
  428. o := orm.NewOrm()
  429. // 也可以直接使用 Model 结构体作为表名
  430. qs := o.QueryTable(new(DeviceSensor))
  431. //now := time.Now()
  432. //// 一天前
  433. //d, _ := time.ParseDuration("-1h")
  434. //now = now.Add(d)
  435. T_Calss := ""
  436. if T_Calss_id != 0 {
  437. T_Calss = "C" + strconv.Itoa(T_Calss_id) + "|"
  438. }
  439. T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
  440. if user_.Admin_master <= 1 {
  441. T_Bind = ""
  442. }
  443. fmt.Println("T_Bind:", T_Bind)
  444. fmt.Println("T_Calss:", T_Calss)
  445. qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("-UpdateTime").All(&r) //.Filter("UpdateTime__gte", now)
  446. return r
  447. }
  448. // 获取列表
  449. func Read_DeviceSensor_ALL_T_sn_T_id_class_1(T_sn string, T_id int, T_Calss_id int) (r []DeviceSensor) {
  450. o := orm.NewOrm()
  451. // 也可以直接使用 Model 结构体作为表名
  452. qs := o.QueryTable(new(DeviceSensor))
  453. T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
  454. qs.Filter("T_Calss__icontains", T_Calss).Filter("T_id", T_id).Filter("T_sn", T_sn).All(&r)
  455. return r
  456. }
  457. // 获取列表
  458. func Read_DeviceSensor_ALL_class_1(T_Calss_id int) (r []DeviceSensor) {
  459. o := orm.NewOrm()
  460. // 也可以直接使用 Model 结构体作为表名
  461. qs := o.QueryTable(new(DeviceSensor))
  462. T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
  463. qs.Filter("T_Calss__icontains", T_Calss).All(&r)
  464. return r
  465. }
  466. func DELETE_DeviceSensor(SN string) bool {
  467. sql := "DELETE FROM `culd`.`DeviceSensor` WHERE `t_sn` = '" + SN + "' "
  468. o := orm.NewOrm()
  469. _, err := o.Raw(sql).Exec()
  470. if err != nil {
  471. return false
  472. }
  473. return true
  474. }