ProductPush.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. package Product
  2. import (
  3. "AIOTCOER/conf"
  4. "AIOTCOER/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 ProductPush struct {
  16. Id int `json:"Id"`
  17. T_uuid string `orm:"size(8);index" json:"T_uuid" form:"T_uuid"` // 用户识别码(8位) ,管理员可以为空
  18. T_name string `json:"T_name"` // 协议名称 Mqtt
  19. T_PushModeId int `json:"T_PushModeId"` //推送模式ID
  20. T_Config string `orm:"type(text);default('{}')" json:"T_Config" form:"T_Config"` // 产品模型
  21. T_ConfigJson map[string]interface{} `orm:"-" json:"T_ConfigJson"` // 产品模型 json
  22. T_log string `orm:"type(text);default('')" json:"T_log" form:"T_log"` //启动日志
  23. T_state int `orm:"default(0)" json:"T_state"` //状态 0停用 1 开启
  24. }
  25. func (t *ProductPush) TableName() string {
  26. return "ProductPush" // 数据库名称 // ************** 替换 FormulaList **************
  27. }
  28. var redis_ProductPush cache.Cache
  29. func init() {
  30. //注册模型
  31. orm.RegisterModel(new(ProductPush))
  32. config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
  33. "ProductPush", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
  34. var err error
  35. redis_ProductPush, err = cache.NewCache("redis", config)
  36. if err != nil || redis_ProductPush == nil {
  37. logs.PrintlnError(config, err)
  38. panic(any(err))
  39. }
  40. }
  41. // ---------------- Redis -------------------
  42. func (t *ProductPush) redis_Set() (err error) {
  43. // T_ConfigJson 格式化
  44. var T_datajson map[string]interface{}
  45. json.Unmarshal([]byte(t.T_Config), &T_datajson)
  46. t.T_ConfigJson = T_datajson
  47. //json序列化
  48. str, err := json.Marshal(t)
  49. if err != nil {
  50. logs.PrintlnError("Redis_Set", err)
  51. return
  52. }
  53. err = redis_ProductPush.Put(fmt.Sprintf("%d", t.Id), str, 24*time.Hour)
  54. if err != nil {
  55. logs.Println("set key:", t.Id, ",value:", str, err)
  56. }
  57. return
  58. }
  59. func (t *ProductPush) redis_Get(key string) (is bool) {
  60. if redis_ProductPush.IsExist(key) {
  61. //println("找到key:",key)
  62. v := redis_ProductPush.Get(key)
  63. if v == nil {
  64. return false
  65. }
  66. json.Unmarshal(v.([]byte), t)
  67. return true
  68. }
  69. //println("没有 找到key:",key)
  70. return false
  71. }
  72. func (t *ProductPush) redis_DelK() (err error) {
  73. err = redis_ProductPush.Delete(fmt.Sprintf("%d", t.Id))
  74. return
  75. }
  76. // ---------------- 方法 -------------------
  77. // 添加
  78. func (t *ProductPush) Add() (is bool) {
  79. o := orm.NewOrm()
  80. id, err := o.Insert(t)
  81. if err != nil {
  82. return false
  83. }
  84. println(id)
  85. t.redis_Set()
  86. return true
  87. }
  88. // 获取
  89. func (t *ProductPush) Read() (bool bool) {
  90. if t.redis_Get(fmt.Sprintf("%d", t.Id)) {
  91. return true
  92. }
  93. if !(t.Id > 0) {
  94. logs.Println("ProductPush.Id:", t.Id)
  95. return false
  96. }
  97. o := orm.NewOrm()
  98. err := o.Read(t) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  99. if err != nil {
  100. return false
  101. }
  102. t.redis_Set() // Redis 更新缓存
  103. return true
  104. }
  105. // 修改
  106. func (t *ProductPush) Update(cols ...string) bool {
  107. o := orm.NewOrm()
  108. if num, err := o.Update(t, cols...); err == nil {
  109. logs.Println("Number of records updated in database:", num)
  110. t.redis_Set() // Redis 更新缓存
  111. return true
  112. }
  113. return false
  114. }
  115. // 删除
  116. func (t *ProductPush) Delete() bool {
  117. o := orm.NewOrm()
  118. if num, err := o.Delete(t); err == nil {
  119. logs.Println("Number of records deleted in database:", num)
  120. } else {
  121. return false
  122. }
  123. t.redis_DelK()
  124. return true
  125. }
  126. // 获取列表
  127. func (t *ProductPush) Lists(PageIndex int, PageSize int) (r []ProductPush, Total int64) {
  128. o := orm.NewOrm()
  129. // 也可以直接使用 Model 结构体作为表名
  130. qs := o.QueryTable(new(ProductPush))
  131. var offset int64
  132. if PageIndex <= 1 {
  133. offset = 0
  134. } else {
  135. offset = int64((PageIndex - 1) * PageSize)
  136. }
  137. // 筛选参数
  138. cond := orm.NewCondition()
  139. //if t.T_mode > 0 {
  140. // cond = cond.And("T_mode", t.T_mode) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
  141. //}
  142. //if len(t.T_name) > 0 {
  143. // cond = cond.And("T_name__icontains", t.T_name) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
  144. //}
  145. if len(t.T_uuid) == 8 {
  146. cond = cond.And("T_uuid", t.T_uuid) // 用户识别码
  147. }
  148. // 执行
  149. qs.Limit(PageSize, offset).SetCond((*orm2.Condition)(cond)).All(&r)
  150. Total, _ = qs.SetCond((*orm2.Condition)(cond)).Count()
  151. for i, _ := range r {
  152. if len(r[i].T_Config) > 0 {
  153. var T_datajson map[string]interface{}
  154. json.Unmarshal([]byte(r[i].T_Config), &T_datajson)
  155. r[i].T_ConfigJson = T_datajson
  156. }
  157. }
  158. return r, Total
  159. }
  160. // 获取列表
  161. func ProductPushListALL() (r []ProductPush) {
  162. o := orm.NewOrm()
  163. // 也可以直接使用 Model 结构体作为表名
  164. qs := o.QueryTable(new(ProductPush))
  165. // 筛选参数
  166. cond := orm.NewCondition()
  167. cond = cond.And("T_state", 1) // 用户识别码
  168. // 执行
  169. qs.SetCond((*orm2.Condition)(cond)).All(&r)
  170. for i, _ := range r {
  171. if len(r[i].T_Config) > 0 {
  172. var T_datajson map[string]interface{}
  173. json.Unmarshal([]byte(r[i].T_Config), &T_datajson)
  174. r[i].T_ConfigJson = T_datajson
  175. }
  176. }
  177. return r
  178. }