ProductTab.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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 ProductTab struct {
  16. Id int `orm:"column(ID);size(11);auto;pk" json:"Id" form:"Id"`
  17. T_ProductID string `orm:"size(8);index" json:"T_ProductID" form:"T_ProductID"` // 产品型号 随机生成(8位)
  18. T_fid int `orm:"size(11);index" json:"T_fid" form:"T_fid"` // 父级ID,0为根
  19. T_name string `orm:"size(256);" json:"T_name" form:"T_name"` // 名称
  20. T_tab string `orm:"size(32);" json:"T_tab" form:"T_tab"` // 标签
  21. T_type int `orm:"size(6);" json:"T_type" form:"T_type"` // 数据类型 1 数值 2 文本 3 枚举
  22. T_attr string `orm:"size(200);" json:"T_attr" form:"T_attr"` // 属性
  23. T_text string `orm:"size(200);" json:"T_text" form:"T_text"` // 说明
  24. T_read bool `orm:"default(false);" json:"T_read" form:"T_read"` // 只读
  25. // T_attr属性 定义
  26. /*
  27. 1 数值
  28. unit 单位
  29. dvalue 默认值
  30. accuracy 精度
  31. min 最小值
  32. max 最大值
  33. 2 文本
  34. dvalue 默认值
  35. 3 枚举
  36. map [] 枚举
  37. value 值
  38. text 描述
  39. */
  40. }
  41. func (t *ProductTab) TableName() string {
  42. return "ProductTab" // 数据库名称 // ************** 替换 FormulaList **************
  43. }
  44. var redis_ProductTab cache.Cache
  45. func init() {
  46. //注册模型
  47. orm.RegisterModel(new(ProductTab))
  48. config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
  49. "redis_ProductTab", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
  50. var err error
  51. redis_ProductTab, err = cache.NewCache("redis", config)
  52. if err != nil || redis_ProductTab == nil {
  53. logs.Println(config)
  54. panic(any(err))
  55. }
  56. }
  57. // ---------------- Redis -------------------
  58. func (t *ProductTab) redis_Set() (err error) {
  59. //json序列化
  60. str, err := json.Marshal(t)
  61. if err != nil {
  62. logs.PrintlnError("Redis_Set", err)
  63. return
  64. }
  65. err = redis_ProductTab.Put(t.T_ProductID, str, 24*time.Hour)
  66. if err != nil {
  67. logs.Println("set key:", t.T_ProductID, ",value:", str, err)
  68. }
  69. return
  70. }
  71. func (t *ProductTab) redis_Get(key string) (is bool) {
  72. if redis_ProductTab.IsExist(key) {
  73. //println("找到key:",key)
  74. v := redis_ProductTab.Get(key)
  75. if v == nil {
  76. return false
  77. }
  78. json.Unmarshal(v.([]byte), t)
  79. return true
  80. }
  81. //println("没有 找到key:",key)
  82. return false
  83. }
  84. func (t *ProductTab) redis_DelK() (err error) {
  85. err = redis_ProductTab.Delete(t.T_ProductID)
  86. return
  87. }
  88. // ---------------- 方法 -------------------
  89. // 添加
  90. func (t *ProductTab) Add() (is bool) {
  91. o := orm.NewOrm()
  92. id, err := o.Insert(t)
  93. if err != nil {
  94. return false
  95. }
  96. println(id)
  97. t.redis_Set()
  98. return true
  99. }
  100. // 获取
  101. func (t *ProductTab) Read(T_type string) (bool bool) {
  102. if t.redis_Get(T_type) {
  103. return true
  104. }
  105. o := orm.NewOrm()
  106. t.T_ProductID = T_type
  107. err := o.Read(&t) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  108. if err != nil {
  109. return false
  110. }
  111. t.redis_Set() // Redis 更新缓存
  112. return true
  113. }
  114. // 修改
  115. func (t *ProductTab) Update(cols ...string) bool {
  116. o := orm.NewOrm()
  117. if num, err := o.Update(t, cols...); err == nil {
  118. logs.Println("Number of records updated in database:", num)
  119. t.redis_Set() // Redis 更新缓存
  120. return true
  121. }
  122. return false
  123. }
  124. // 删除
  125. func (t *ProductTab) Delete() bool {
  126. o := orm.NewOrm()
  127. if num, err := o.Delete(t); err == nil {
  128. logs.Println("Number of records deleted in database:", num)
  129. } else {
  130. return false
  131. }
  132. t.redis_DelK()
  133. return true
  134. }
  135. // 获取列表
  136. func (t *ProductTab) Lists(PageIndex int, PageSize int) (r []ProductTab, Total int64) {
  137. o := orm.NewOrm()
  138. // 也可以直接使用 Model 结构体作为表名
  139. qs := o.QueryTable(new(ProductTab))
  140. var offset int64
  141. if PageIndex <= 1 {
  142. offset = 0
  143. } else {
  144. offset = int64((PageIndex - 1) * PageSize)
  145. }
  146. // 筛选参数
  147. cond := orm.NewCondition()
  148. if len(t.T_ProductID) > 0 {
  149. cond = cond.And("T_ProductID", t.T_ProductID) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
  150. }
  151. cond = cond.And("T_fid", t.T_fid) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
  152. // 执行
  153. qs.Limit(PageSize, offset).SetCond((*orm2.Condition)(cond)).All(&r)
  154. Total, _ = qs.SetCond((*orm2.Condition)(cond)).Count()
  155. return r, Total
  156. }