ProductRelay.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package Product
  2. import (
  3. "Yunlot/conf"
  4. "Yunlot/logs"
  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. _ "github.com/go-sql-driver/mysql"
  12. "time"
  13. )
  14. // 消息转发
  15. type ProductRelay struct {
  16. Id int `orm:"column(ID);size(11);auto;pk" json:"ID"`
  17. T_ProductID string `orm:"size(8);index" json:"T_ProductID" form:"T_ProductID"` // 产品型号 随机生成(8位)
  18. T_name string `orm:"size(256);" json:"T_name" form:"T_name"` // 名称
  19. T_rtab string `orm:"size(32);index" json:"T_rtab" form:"T_rtab"` //转发 TAB 标识 拼接:AAAA.BBBB. 对象后面加点
  20. T_mode int `orm:"size(1);default(0)" json:"T_mode" form:"T_mode"` //接入方式 0:Mqtt 1:http 2:tcp 3:CoAP 4:websocket
  21. T_pub string `orm:"size(256);" json:"T_pub" form:"T_pub"` //发布号
  22. }
  23. func (t *ProductRelay) TableName() string {
  24. return "ProductRelay" // 数据库名称 // ************** 替换 FormulaList **************
  25. }
  26. var redis_ProductRelay cache.Cache
  27. func init() {
  28. //注册模型
  29. orm.RegisterModel(new(ProductRelay))
  30. config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
  31. "redis_ProductRelay", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
  32. var err error
  33. redis_ProductRelay, err = cache.NewCache("redis", config)
  34. if err != nil || redis_ProductRelay == nil {
  35. logs.Println(config)
  36. panic(any(err))
  37. }
  38. }
  39. // ---------------- Redis -------------------
  40. func (t *ProductRelay) redis_Set() (err error) {
  41. //json序列化
  42. str, err := json.Marshal(t)
  43. if err != nil {
  44. logs.PrintlnError("Redis_Set", err)
  45. return
  46. }
  47. err = redis_ProductRelay.Put(t.T_ProductID+"-"+t.T_rtab, str, 24*time.Hour)
  48. if err != nil {
  49. logs.Println("set key:", t.T_ProductID+"-"+t.T_rtab, ",value:", str, err)
  50. }
  51. return
  52. }
  53. func (t *ProductRelay) redis_Get(key string) (is bool) {
  54. if redis_ProductRelay.IsExist(key) {
  55. //println("找到key:",key)
  56. v := redis_ProductRelay.Get(key)
  57. if v == nil {
  58. return false
  59. }
  60. json.Unmarshal(v.([]byte), t)
  61. return true
  62. }
  63. //println("没有 找到key:",key)
  64. return false
  65. }
  66. func (t *ProductRelay) redis_DelK() (err error) {
  67. err = redis_ProductRelay.Delete(t.T_ProductID)
  68. return
  69. }
  70. // ---------------- 方法 -------------------
  71. // 添加
  72. func (t *ProductRelay) Add() (is bool) {
  73. o := orm.NewOrm()
  74. id, err := o.Insert(t)
  75. if err != nil {
  76. return false
  77. }
  78. println(id)
  79. t.redis_Set()
  80. return true
  81. }
  82. // 获取
  83. func (t *ProductRelay) Read() (bool bool) {
  84. if t.redis_Get(t.T_ProductID+"-"+t.T_rtab) {
  85. return true
  86. }
  87. o := orm.NewOrm()
  88. err := o.Read(&t) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  89. if err != nil {
  90. return false
  91. }
  92. t.redis_Set() // Redis 更新缓存
  93. return true
  94. }
  95. // 修改
  96. func (t *ProductRelay) Update(cols ...string) bool {
  97. o := orm.NewOrm()
  98. if num, err := o.Update(t, cols...); err == nil {
  99. logs.Println("Number of records updated in database:", num)
  100. t.redis_Set() // Redis 更新缓存
  101. return true
  102. }
  103. return false
  104. }
  105. // 删除
  106. func (t *ProductRelay) Delete() bool {
  107. o := orm.NewOrm()
  108. if num, err := o.Delete(t); err == nil {
  109. logs.Println("Number of records deleted in database:", num)
  110. } else {
  111. return false
  112. }
  113. t.redis_DelK()
  114. return true
  115. }
  116. // 获取列表
  117. func (t *ProductRelay) Lists(PageIndex int, PageSize int) (r []ProductRelay, Total int64) {
  118. o := orm.NewOrm()
  119. // 也可以直接使用 Model 结构体作为表名
  120. qs := o.QueryTable(new(ProductRelay))
  121. var offset int64
  122. if PageIndex <= 1 {
  123. offset = 0
  124. } else {
  125. offset = int64((PageIndex - 1) * PageSize)
  126. }
  127. // 筛选参数
  128. cond := orm.NewCondition()
  129. if len(t.T_ProductID) > 0 {
  130. cond = cond.And("T_ProductID", t.T_ProductID) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
  131. }
  132. // 执行
  133. qs.Limit(PageSize, offset).SetCond((*orm2.Condition)(cond)).All(&r)
  134. Total, _ = qs.SetCond((*orm2.Condition)(cond)).Count()
  135. return r, Total
  136. }