message.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package service
  2. import (
  3. "time"
  4. "github.com/pkg/errors"
  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(msg *model.Message) (err error) {
  11. mtype := &http.MessageTypeReq{
  12. SysName: msg.SysName,
  13. PastureID: msg.PastureID,
  14. ServiceID: msg.ServiceID,
  15. }
  16. if mtypes, e := svc.QueryMsgType(mtype); e != nil {
  17. err = e
  18. return
  19. } else if len(mtypes) == 0 {
  20. err = errors.New("没有匹配的消息类型")
  21. return
  22. } else {
  23. m := make(map[string]interface{}, 3)
  24. if mtypes[0].RemindType == 1 {
  25. m["status"] = 1
  26. } else if mtypes[0].RemindType == 2 {
  27. if mtypes[0].CycleType == 1 || mtypes[0].CycleType == 3 {
  28. m["status"] = 1
  29. } else {
  30. m["updated_at"] = time.Now()
  31. m["push_count"] = msg.PushCount + 1
  32. if msg.PushCount+1 >= mtypes[0].PushLimit {
  33. m["status"] = 1
  34. }
  35. }
  36. } else if mtypes[0].RemindType == 3 {
  37. m["push_count"] = msg.PushCount + 1
  38. m["updated_at"] = time.Now()
  39. }
  40. if res := svc.DB.Table("message").Where("id=?", msg.ID).Updates(m); res.Error != nil {
  41. err = errors.Wrap(res.Error, "UpdateMessage.update=")
  42. log.Errorf("%v", err)
  43. }
  44. }
  45. return
  46. }
  47. func (svc *Service) UpdateMessageFail(msg *model.Message) (err error) {
  48. m := make(map[string]interface{}, 3)
  49. m["status"] = -1
  50. m["updated_at"] = time.Now()
  51. m["errInfo"] = msg.ErrInfo
  52. if res := svc.DB.Table("message").Where("id=?", msg.ID).Updates(m); res.Error != nil {
  53. err = errors.Wrap(res.Error, "UpdateMessage.update=")
  54. log.Errorf("%v", err)
  55. }
  56. return
  57. }
  58. func (svc *Service) QueryMsg() (msgs []model.Message, err error) {
  59. var sql2 string
  60. sql := `select sqltext from apisql where sqlname='getMessage' limit 1 `
  61. svc.DB.Raw(sql).Scan(&sql2)
  62. if err = svc.DB.Raw(sql2).Scan(&msgs).Error; err != nil {
  63. err = errors.Wrap(err, "queryMsg{query msg exec sql err}==%v")
  64. log.Errorf("%v", err)
  65. return
  66. }
  67. return
  68. }
  69. func (svc *Service) InsertMessage(msg *http.MessageReq, body []byte) (resp *http.MessageResp, err error) {
  70. tmp := make(map[string]interface{})
  71. tmp["miniprogram"] = msg.Miniprogram
  72. msgType := &http.MessageTypeReq{
  73. SysName: msg.SysName,
  74. PastureID: msg.PastureID,
  75. ServiceID: msg.ServiceID,
  76. }
  77. sysuserList, e := svc.GetSysUser(msg.Target, msg.SysName, msg.PastureID)
  78. if err != nil {
  79. err = e
  80. return
  81. }
  82. var targetList []string
  83. for _, user := range sysuserList {
  84. targetList = append(targetList, user.Openid)
  85. }
  86. if mt, e := svc.QueryMsgType(msgType); e != nil {
  87. err = e
  88. return
  89. } else if len(mt) == 0 {
  90. err = errors.New("没有匹配的消息类型")
  91. return
  92. } else {
  93. tmp["template_id"] = mt[0].TemplateID
  94. }
  95. data := make(map[string]http.Tag)
  96. for i, v := range msg.Keys {
  97. data[v] = msg.Content[i]
  98. }
  99. tmp["data"] = data
  100. msgDb := model.Message{
  101. SysName: msg.SysName,
  102. PastureID: msg.PastureID,
  103. ServiceID: msg.ServiceID,
  104. Target: util.MarshalToString(targetList),
  105. MsgTypeID: msg.MsgTypeID,
  106. MsgContent: util.MarshalToString(tmp),
  107. UpdatedAt: time.Now(),
  108. BodyData: string(body),
  109. }
  110. if err = svc.DB.Create(&msgDb).Error; err != nil {
  111. err = errors.Wrap(err, "InsertMessage{insert msg}==%v")
  112. log.Errorf("%v", err)
  113. return
  114. }
  115. resp = &http.MessageResp{
  116. ID: msgDb.ID,
  117. }
  118. return
  119. }
  120. // query the id or remind_type of the message by name
  121. func (svc *Service) QueryRemindTypeID(name string) (int, error) {
  122. m := new(http.MessageTypeReq)
  123. tx := svc.DB.Table("message_type").Where("type_name = ?").First(m)
  124. if tx.RowsAffected == 0 {
  125. return 0, errors.New("没有匹配的类型")
  126. }
  127. return m.ID, nil
  128. }
  129. func (svc *Service) InsertMsgType(req *http.MessageTypeReq) (resp *http.MessageTypeResp, err error) {
  130. //固定模板
  131. req.TemplateID = "1_zBqvbzD-edg0b-O5OD1kAEMefygikcmBZACSiwX0w"
  132. if query, e := svc.QueryMsgType(req); e != nil {
  133. err = e
  134. return
  135. } else {
  136. resp = new(http.MessageTypeResp)
  137. switch {
  138. case len(query) == 0:
  139. resp.Method = "insert"
  140. if res := svc.DB.Table("message_type").Create(req); res.Error != nil {
  141. err = errors.Wrap(res.Error, "InsertMsgType{create msg type===%v}")
  142. log.Errorf("%v", err)
  143. } else {
  144. resp.RowsAffected = int(res.RowsAffected)
  145. }
  146. break
  147. case len(query) > 0:
  148. resp.Method = "update"
  149. index := map[string]interface{}{
  150. "service_id": req.ServiceID,
  151. "pasture_id": req.PastureID,
  152. "sys_name": req.SysName,
  153. }
  154. log.Infof("msg type update index%v", index)
  155. req.PastureID = 0
  156. req.SysName = ""
  157. req.ServiceID = 0
  158. log.Infof("msg type update value%v", req)
  159. if res := svc.DB.Table("message_type").Where(index).Updates(req); res.Error != nil {
  160. err = errors.Wrap(err, "InsertMsgType{update msg type ===%v}")
  161. log.Errorf("%v", err)
  162. } else {
  163. resp.RowsAffected = int(res.RowsAffected)
  164. }
  165. break
  166. }
  167. }
  168. return
  169. }
  170. func (svc *Service) QueryMsgType(req *http.MessageTypeReq) (m []http.MessageTypeReq, err error) {
  171. index := map[string]interface{}{}
  172. if req.ServiceID != 0 {
  173. index["service_id"] = req.ServiceID
  174. }
  175. if req.PastureID != 0 {
  176. index["pasture_id"] = req.PastureID
  177. }
  178. if req.SysName != "" {
  179. index["sys_name"] = req.SysName
  180. }
  181. log.Infof("query msg type===%v", index)
  182. if err = svc.DB.Table("message_type").Where(index).Find(&m).Error; err != nil {
  183. err = errors.Wrap(err, "QueryMsgType.find=")
  184. log.Errorf("%v", err)
  185. }
  186. return
  187. }