notice.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package service
  2. import (
  3. "encoding/json"
  4. "gadmin/config"
  5. "gadmin/internal/admin/consts"
  6. "gadmin/internal/admin/forms"
  7. "gadmin/internal/gorm/model"
  8. "gadmin/internal/gorm/query"
  9. "gadmin/utility/character"
  10. "gadmin/utility/serializer"
  11. "github.com/gin-gonic/gin"
  12. "os"
  13. "time"
  14. )
  15. // Notice 广播
  16. var Notice = new(sNotice)
  17. type sNotice struct{}
  18. func (s *sNotice) List(ctx *gin.Context, req forms.NoticeV2ListReq) serializer.Response {
  19. type AdminNotice struct {
  20. model.AdminNotice
  21. StatusName string `json:"statusName"`
  22. StatusTag string `json:"statusTag"`
  23. TypeName string `json:"typeName"`
  24. }
  25. var (
  26. q = query.Use(config.DB).AdminNotice
  27. m = q.WithContext(ctx).Where(q.Environment.Eq(os.Getenv("GIN_MODE")))
  28. offset int64 = 0
  29. models forms.ListRes
  30. lists []*AdminNotice
  31. )
  32. m = m.Order(q.ID.Desc())
  33. req.Page, req.PerPage, offset = forms.CalculatePage(req.Page, req.PerPage)
  34. count, err := m.Count()
  35. if err != nil {
  36. return serializer.Err(consts.CodeParamErr, "查询出错 count", err)
  37. }
  38. if count > 0 {
  39. if err = m.Limit(int(req.PerPage)).Offset(int(offset)).Scan(&lists); err != nil {
  40. return serializer.Err(consts.CodeParamErr, "查询出错 lists", err)
  41. }
  42. }
  43. for _, v := range lists {
  44. v.StatusName = consts.NoticeStatusNameMap[v.Status]
  45. v.StatusTag = consts.NoticeStatusTagMap[v.Status]
  46. v.TypeName = consts.NoticeTypeNameMap[v.NoticeType]
  47. }
  48. models.List = lists
  49. models.Page = req.Page
  50. models.PerPage = req.PerPage
  51. models.PageCount = (count + req.PerPage - 1) / req.PerPage
  52. return serializer.Suc(models)
  53. }
  54. func (s *sNotice) Cancel(ctx *gin.Context, req forms.NoticeV2CancelReq) serializer.Response {
  55. var (
  56. q = query.Use(config.DB).AdminNotice
  57. models *model.AdminNotice
  58. err error
  59. )
  60. if req.Id <= 0 {
  61. return serializer.ParamErr("ID不能空,操作失败!", nil)
  62. }
  63. err = query.Use(config.DB).AdminNotice.WithContext(ctx).
  64. Where(q.ID.Eq(req.Id)).
  65. Where(q.Environment.Eq(os.Getenv("GIN_MODE"))).Scan(&models)
  66. if err != nil {
  67. return serializer.DBErr(err.Error(), err)
  68. }
  69. if models == nil {
  70. return serializer.DBErr("未找到广播记录", nil)
  71. }
  72. if models.Status != consts.NoticeStatusRunning && models.Status != consts.NoticeStatusNotStarted {
  73. return serializer.ParamErr("广播未在运行,无需终止", nil)
  74. }
  75. _, err = query.Use(config.DB).AdminNotice.WithContext(ctx).
  76. Where(q.ID.Eq(req.Id)).
  77. Where(q.Environment.Eq(os.Getenv("GIN_MODE"))).
  78. Updates(&model.AdminNotice{Status: consts.NoticeStatusTerminated, UpdatedAt: time.Now().Unix()})
  79. if err != nil {
  80. return serializer.DBErr(err.Error(), err)
  81. }
  82. return serializer.Suc(nil)
  83. }
  84. func (s *sNotice) Add(ctx *gin.Context, req forms.NoticeV2AddReq) serializer.Response {
  85. var (
  86. q = query.Use(config.DB).AdminNotice
  87. err error
  88. )
  89. serverIds, _ := json.Marshal(req.ServerIds)
  90. // 编辑
  91. if req.Id > 0 {
  92. notice := model.AdminNotice{
  93. Environment: os.Getenv("GIN_MODE"),
  94. ServerIds: string(serverIds),
  95. NoticeType: req.NoticeType,
  96. Content: req.Content,
  97. SendInterval: req.SendInterval,
  98. StartAt: req.StartAt,
  99. EndAt: req.EndAt,
  100. UpdatedAt: time.Now().Unix(),
  101. }
  102. if req.StartAt > time.Now().Unix() {
  103. notice.Status = consts.NoticeStatusNotStarted
  104. }
  105. if _, err = query.Use(config.DB).AdminNotice.WithContext(ctx).
  106. Where(q.ID.Eq(req.Id)).
  107. Where(q.Environment.Eq(os.Getenv("GIN_MODE"))).
  108. Updates(&notice); err != nil {
  109. return serializer.DBErr(err.Error(), err)
  110. }
  111. return serializer.Suc(nil)
  112. }
  113. // 新增
  114. notice := &model.AdminNotice{
  115. Environment: os.Getenv("GIN_MODE"),
  116. MsgID: character.GenerateMsgId(),
  117. ServerIds: string(serverIds),
  118. NoticeType: req.NoticeType,
  119. Content: req.Content,
  120. SendInterval: req.SendInterval,
  121. StartAt: req.StartAt,
  122. EndAt: req.EndAt,
  123. Status: consts.NoticeStatusRunning,
  124. UpdatedAt: time.Now().Unix(),
  125. CreatedAt: time.Now().Unix(),
  126. }
  127. if req.StartAt > time.Now().Unix() {
  128. notice.Status = consts.NoticeStatusNotStarted
  129. }
  130. if err = query.Use(config.DB).AdminNotice.WithContext(ctx).Create(notice); err != nil {
  131. return serializer.DBErr(err.Error(), err)
  132. }
  133. return serializer.Suc(nil)
  134. }