bulletin.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. package Announcement
  2. import (
  3. "Cold_Api/conf"
  4. "Cold_Api/controllers/lib"
  5. "encoding/json"
  6. "fmt"
  7. "github.com/astaxie/beego/cache"
  8. "github.com/beego/beego/v2/adapter/orm"
  9. orm2 "github.com/beego/beego/v2/client/orm"
  10. "github.com/beego/beego/v2/core/logs"
  11. "sync"
  12. "time"
  13. )
  14. type Bulletin struct {
  15. Id int `orm:"column(ID);size(11);auto;pk" json:"id"`
  16. T_uuid string `orm:"size(256);null"`
  17. BulletinId string `orm:"size(256);null" json:"bulletinId"` // 公告id
  18. Title string `orm:"size(256);null" json:"title"` // 标题
  19. Content string `orm:"size(256);null" json:"content"` // 内容
  20. State int `orm:"size(2);default(0)" json:"state"` // 状态 0 可查看 1 不可查看
  21. IsShow int `orm:"size(2);default(0)" json:"IsShow"` // 是否查看 0 未查看 1 已查看
  22. CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` // auto_now 每次 model 保存时都会对时间自动更新
  23. UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` // auto_now_add 第一次保存时才设置时间
  24. }
  25. func (n *Bulletin) TableName() string {
  26. return "bulletin"
  27. }
  28. var redisCache_bulletin cache.Cache
  29. var Notice_map *sync.Map
  30. func init() {
  31. //注册模型
  32. Notice_map = new(sync.Map)
  33. //注册模型
  34. orm.RegisterModel(new(Bulletin))
  35. config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
  36. "redis_Notice", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
  37. fmt.Println(config)
  38. var err error
  39. redisCache_bulletin, err = cache.NewCache("redis", config)
  40. if err != nil || redisCache_bulletin == nil {
  41. errMsg := "failed to init redis"
  42. logs.Error(errMsg, err)
  43. panic(errMsg)
  44. }
  45. }
  46. // ---------------- Redis -------------------
  47. func Redis_Notice_Set(r Bulletin) (err error) {
  48. //json序列化
  49. str, err := json.Marshal(r)
  50. if err != nil {
  51. logs.Error(lib.FuncName(), err)
  52. return
  53. }
  54. uptime := r.UpdateTime.Format("2006-01-02 15:04:05")
  55. key := uptime + r.Title
  56. err = redisCache_bulletin.Put(key, str, 24*time.Hour)
  57. if err != nil {
  58. logs.Error("set key:", key, ",value:", str, err)
  59. }
  60. return
  61. }
  62. func Redis_Notice_Get(b Bulletin) (r Bulletin, is bool) {
  63. uptime := b.UpdateTime.Format("2006-01-02 15:04:05")
  64. key := uptime + b.Title
  65. if redisCache_bulletin.IsExist(key) {
  66. //println("找到key:",key)
  67. v := redisCache_bulletin.Get(key)
  68. err := json.Unmarshal(v.([]byte), &r)
  69. if err != nil {
  70. logs.Error(lib.FuncName(), err)
  71. return Bulletin{}, false
  72. }
  73. return r, true
  74. }
  75. //println("没有 找到key:",key)
  76. return Bulletin{}, false
  77. }
  78. func Redis_Company_DelK(b Bulletin) (err error) {
  79. uptime := b.UpdateTime.Format("2006-01-02 15:04:05")
  80. key := uptime + b.Title
  81. err = redisCache_bulletin.Delete(key)
  82. if err != nil {
  83. logs.Error(lib.FuncName(), err)
  84. }
  85. return
  86. }
  87. // ---------------- 特殊方法 -------------------
  88. // 添加公告
  89. func AddBulletin(n Bulletin) (id int64, err error) {
  90. o := orm.NewOrm()
  91. id, err = o.Insert(&n)
  92. if err != nil {
  93. logs.Error(lib.FuncName(), err)
  94. return
  95. }
  96. n.Id = int(id)
  97. Redis_Notice_Set(n)
  98. return id, err
  99. }
  100. // GetBulletinById 根据id查询公告
  101. func GetBulletinById(id, t_uuid string) (bulletin Bulletin, err error) {
  102. o := orm.NewOrm()
  103. query := o.QueryTable(&bulletin)
  104. err = query.Filter("ID", id).Filter("State", 0).Filter("t_uuid", t_uuid).One(&bulletin)
  105. if err != nil {
  106. logs.Error(lib.FuncName(), err)
  107. return
  108. }
  109. return bulletin, err
  110. }
  111. // DeleteBulletinById 删除公告
  112. func DeleteBulletinById(bulletin_id string) (err error) {
  113. o := orm.NewOrm()
  114. query := o.QueryTable(new(Bulletin))
  115. _, err = query.Filter("bulletin_id", bulletin_id).Delete()
  116. if err != nil {
  117. logs.Error(lib.FuncName(), err)
  118. return
  119. }
  120. //Redis_Company_DelK(bulletin)
  121. return err
  122. }
  123. // UpdateBulletin 修改公告
  124. func UpdateBulletin(b Bulletin) (err error) {
  125. o := orm.NewOrm()
  126. query := o.QueryTable(new(Bulletin))
  127. params := orm.Params{
  128. "UpdateTime": b.UpdateTime,
  129. }
  130. if b.Title != "" {
  131. params["Title"] = b.Title
  132. }
  133. if b.Content != "" {
  134. params["Content"] = b.Content
  135. }
  136. if b.IsShow != 0 {
  137. params["IsShow"] = b.IsShow
  138. }
  139. _, err = query.Filter("bulletin_id", b.BulletinId).Update(orm2.Params(params))
  140. if err != nil {
  141. logs.Error(lib.FuncName(), err)
  142. return
  143. }
  144. return err
  145. }
  146. // Read_Bulletin_List 获取公告列表
  147. func Read_Bulletin_List(t_uuid string, page int, page_z int) (BulletinList []Bulletin, cnt int64) {
  148. o := orm.NewOrm()
  149. // 也可以直接使用 Model 结构体作为表名
  150. qs := o.QueryTable(new(Bulletin))
  151. var maps []Bulletin
  152. var offset int64
  153. if page <= 1 {
  154. offset = 0
  155. } else {
  156. offset = int64((page - 1) * page_z)
  157. }
  158. cond := orm.NewCondition()
  159. cond1 := cond.And("State", 0).And("T_uuid", t_uuid)
  160. //if len(T_name) > 0 {
  161. // cond1 = cond1.AndCond(cond.Or("T_name__icontains", T_name).Or("T_user__icontains", T_name))
  162. //}
  163. var err error
  164. if page_z == 9999 {
  165. _, err = qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-update_time").All(&maps)
  166. } else {
  167. _, err = qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-update_time").All(&maps)
  168. }
  169. if err != nil {
  170. logs.Error(lib.FuncName(), err)
  171. }
  172. cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
  173. if err != nil {
  174. logs.Error(lib.FuncName(), err)
  175. }
  176. for _, v := range maps {
  177. BulletinList = append(BulletinList, v)
  178. }
  179. return BulletinList, cnt
  180. }
  181. // IsReadBulletin 已读状态
  182. func IsReadBulletin(id, t_uuid, bulletin_id string) (err error) {
  183. o := orm.NewOrm()
  184. query := o.QueryTable(new(Bulletin))
  185. params := orm.Params{
  186. "is_show": bulletin_id,
  187. }
  188. _, err = query.Filter("id", id).Filter("t_uuid", t_uuid).Update(orm2.Params(params))
  189. if err != nil {
  190. logs.Error(lib.FuncName(), err)
  191. return
  192. }
  193. return err
  194. }