message.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package service
  2. import (
  3. "errors"
  4. "gorm.io/gorm"
  5. "kpt.notice/apiserver/model"
  6. "kpt.notice/apiserver/model/http"
  7. "kpt.notice/pkg/log"
  8. "kpt.notice/pkg/util"
  9. )
  10. func (svc *Service) UpdateMessage(statics int, id int, val map[string]interface{}) (err error) {
  11. var res *gorm.DB
  12. if statics == 1 {
  13. // update update_at
  14. res = svc.DB.Model(&model.Message{}).Where("id= ?", id).Updates(val)
  15. }
  16. if statics == 2 {
  17. // update push_count,update_at,status
  18. res = svc.DB.Model(&model.Message{}).Where("id= ?", id).Updates(val)
  19. }
  20. if statics == 3 {
  21. // update status
  22. res = svc.DB.Model(&model.Message{}).Where("id= ?", id).Updates(val)
  23. }
  24. if res.Error != nil {
  25. return res.Error
  26. }
  27. return
  28. }
  29. // send message
  30. //type statics ,1:instant,
  31. func (svc *Service) getMsgByType(statics int) (msgs []model.Message, err error) {
  32. // instant message
  33. var sql string
  34. if statics == 1 {
  35. sql = `select * from message m join message_type mt on m.msg_type_id = mt.id
  36. where m.status = 1 and mt.remind_type_id = 1 and timestampdiff(second,m.update_at,now())>7200`
  37. err = svc.DB.Exec(sql).Find(&msgs).Error
  38. // err = svc.DB.Where("msg_type_id =? and status =0 and timestampdiff(second,update_at,now())>7200", 1).Find(&msgs).Error
  39. }
  40. if statics == 2 {
  41. sql = `select m.* from message m join message_type mt on m.msg_type_id = mt.id
  42. where m.status = 1 and mt.remind_type_id = 2 and timestampdiff(hour,m.create_at,now())>=48
  43. and timestampdiff(hour,m.update_at,now())>=24 and m.push_count mt.notice_count`
  44. }
  45. if statics == 3 {
  46. sql = `select * from message m join message_type mt on m.msg_type_id = mt.id
  47. where m.status = 1 and mt.remind_type_id = 3
  48. and ( mt.push_date=concat('w', weekday(now() ) +1) mt.push_date=concat('w', day(now() ) +1) )`
  49. }
  50. return
  51. }
  52. func (svc *Service) InsertMessage(msg *http.MessageReq) (resp *http.MessageResp, err error) {
  53. log.Error("InsertMessage=============enter")
  54. tmp := make(map[string]interface{})
  55. tmp["miniprogram"] = msg.Miniprogram
  56. mt := svc.QueryMsgType(msg.MsgTypeID)
  57. if mt == nil {
  58. log.Errorf("InsertMessage=====QueryMsgType====%v", errors.New("没有匹配的模板"))
  59. return nil, errors.New("没有匹配的模板")
  60. }
  61. tmp["template_id"] = mt[0].TemplateID
  62. data := make(map[string]http.Tag)
  63. for i, v := range msg.Keys {
  64. data[v] = msg.Content[i]
  65. }
  66. tmp["data"] = data
  67. msgDb := model.Message{
  68. Target: util.MarshalToString(msg.Target),
  69. MsgTypeID: msg.MsgTypeID,
  70. RemindTypeID: mt[0].RemindTypeID,
  71. MsgContent: util.MarshalToString(tmp),
  72. }
  73. result := svc.DB.Create(&msgDb)
  74. if result.Error != nil {
  75. log.Errorf("InsertMessage=====Create%v", result.Error)
  76. return nil, result.Error
  77. }
  78. resp = &http.MessageResp{
  79. Rows: int(result.RowsAffected),
  80. }
  81. err = result.Error
  82. return
  83. }
  84. // query the id or remind_type of the message by name
  85. func (svc *Service) QueryRemindTypeID(name string) (int, error) {
  86. m := new(model.MessageType)
  87. tx := svc.DB.Where("type_name = ?").First(m)
  88. if tx.RowsAffected == 0 {
  89. return 0, errors.New("没有匹配的类型")
  90. }
  91. return m.ID, nil
  92. }
  93. func (svc *Service) InsertMessageType(req *http.MessageTypeReq) (m *model.MessageType, err error) {
  94. m = &model.MessageType{
  95. SysName: req.SysName,
  96. TypeName: req.TypeName,
  97. RemindTypeID: req.RemindTypeID,
  98. RemindType: req.RemindType,
  99. PushDate: req.PushDate,
  100. PushTime: req.PushTime,
  101. IntervalTime: req.IntervalTime,
  102. PushLimit: req.PushLimit,
  103. TemplateID: req.TemplateID,
  104. }
  105. result := svc.DB.Create(m)
  106. if result.Error != nil {
  107. return nil, result.Error
  108. }
  109. return m, nil
  110. }
  111. // func (svc *Service) queryMsgType(id int) (m *model.MessageType, err error) {
  112. // if tx.RowsAffected == 0 {
  113. // return nil, errors.New("没有匹配的模板")
  114. // }
  115. // return m, nil
  116. // }
  117. func (svc *Service) QueryMsgType(id int) (m []model.MessageType) {
  118. log.Error("QueryMsgType=============enter")
  119. log.Errorf("QueryMsgType========params:%v", id)
  120. var tx *gorm.DB
  121. if id > 0 {
  122. tx = svc.DB.Where("id = ?", id).First(&m)
  123. log.Errorf("QueryMsgType========sql:%v", tx)
  124. } else if id == 0 {
  125. tx = svc.DB.Find(m)
  126. }
  127. if tx.RowsAffected == 0 {
  128. log.Errorf("QueryMsgType=====%v", errors.New("没有匹配的模板"))
  129. return nil
  130. }
  131. log.Error("QueryMsgType=====out=====")
  132. return m
  133. }