123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- package service
- import (
- "time"
- "github.com/pkg/errors"
- "kpt.notice/apiserver/model"
- "kpt.notice/apiserver/model/http"
- "kpt.notice/pkg/log"
- "kpt.notice/pkg/util"
- )
- func (svc *Service) UpdateMessage(msg *model.Message) (err error) {
- mtype := &http.MessageTypeReq{
- SysName: msg.SysName,
- PastureID: msg.PastureID,
- ServiceID: msg.ServiceID,
- }
- if mtypes, e := svc.QueryMsgType(mtype); e != nil {
- err = e
- return
- } else if len(mtypes) == 0 {
- err = errors.New("没有匹配的消息类型")
- return
- } else {
- m := make(map[string]interface{}, 3)
- if mtypes[0].RemindType == 1 {
- m["status"] = 1
- } else if mtypes[0].RemindType == 2 {
- if mtypes[0].CycleType == 1 || mtypes[0].CycleType == 3 {
- m["status"] = 1
- } else {
- m["updated_at"] = time.Now()
- m["push_count"] = msg.PushCount + 1
- if msg.PushCount+1 >= mtypes[0].PushLimit {
- m["status"] = 1
- }
- }
- } else if mtypes[0].RemindType == 3 {
- m["push_count"] = msg.PushCount + 1
- m["updated_at"] = time.Now()
- }
- if res := svc.DB.Table("message").Where("id=?", msg.ID).Updates(m); res.Error != nil {
- err = errors.Wrap(res.Error, "UpdateMessage.update=")
- log.Errorf("%v", err)
- }
- }
- return
- }
- func (svc *Service) UpdateMessageFail(msg *model.Message) (err error) {
- m := make(map[string]interface{}, 3)
- m["status"] = -1
- m["updated_at"] = time.Now()
- m["errInfo"] = msg.ErrInfo
- if res := svc.DB.Table("message").Where("id=?", msg.ID).Updates(m); res.Error != nil {
- err = errors.Wrap(res.Error, "UpdateMessage.update=")
- log.Errorf("%v", err)
- }
- return
- }
- func (svc *Service) QueryMsg() (msgs []model.Message, err error) {
- var sql2 string
- sql := `select sqltext from apisql where sqlname='getMessage' limit 1 `
- svc.DB.Raw(sql).Scan(&sql2)
- if err = svc.DB.Raw(sql2).Scan(&msgs).Error; err != nil {
- err = errors.Wrap(err, "queryMsg{query msg exec sql err}==%v")
- log.Errorf("%v", err)
- return
- }
- return
- }
- func (svc *Service) InsertMessage(msg *http.MessageReq, body []byte) (resp *http.MessageResp, err error) {
- tmp := make(map[string]interface{})
- tmp["miniprogram"] = msg.Miniprogram
- msgType := &http.MessageTypeReq{
- SysName: msg.SysName,
- PastureID: msg.PastureID,
- ServiceID: msg.ServiceID,
- }
- sysuserList, e := svc.GetSysUser(msg.Target, msg.SysName, msg.PastureID)
- if err != nil {
- err = e
- return
- }
- var targetList []string
- for _, user := range sysuserList {
- targetList = append(targetList, user.Openid)
- }
- if mt, e := svc.QueryMsgType(msgType); e != nil {
- err = e
- return
- } else if len(mt) == 0 {
- err = errors.New("没有匹配的消息类型")
- return
- } else {
- tmp["template_id"] = mt[0].TemplateID
- }
- data := make(map[string]http.Tag)
- for i, v := range msg.Keys {
- data[v] = msg.Content[i]
- }
- tmp["data"] = data
- msgDb := model.Message{
- SysName: msg.SysName,
- PastureID: msg.PastureID,
- ServiceID: msg.ServiceID,
- Target: util.MarshalToString(targetList),
- MsgTypeID: msg.MsgTypeID,
- MsgContent: util.MarshalToString(tmp),
- UpdatedAt: time.Now(),
- BodyData: string(body),
- }
- if err = svc.DB.Create(&msgDb).Error; err != nil {
- err = errors.Wrap(err, "InsertMessage{insert msg}==%v")
- log.Errorf("%v", err)
- return
- }
- resp = &http.MessageResp{
- ID: msgDb.ID,
- }
- return
- }
- // query the id or remind_type of the message by name
- func (svc *Service) QueryRemindTypeID(name string) (int, error) {
- m := new(http.MessageTypeReq)
- tx := svc.DB.Table("message_type").Where("type_name = ?").First(m)
- if tx.RowsAffected == 0 {
- return 0, errors.New("没有匹配的类型")
- }
- return m.ID, nil
- }
- func (svc *Service) InsertMsgType(req *http.MessageTypeReq) (resp *http.MessageTypeResp, err error) {
- //固定模板
- req.TemplateID = "1_zBqvbzD-edg0b-O5OD1kAEMefygikcmBZACSiwX0w"
- if query, e := svc.QueryMsgType(req); e != nil {
- err = e
- return
- } else {
- resp = new(http.MessageTypeResp)
- switch {
- case len(query) == 0:
- resp.Method = "insert"
- if res := svc.DB.Table("message_type").Create(req); res.Error != nil {
- err = errors.Wrap(res.Error, "InsertMsgType{create msg type===%v}")
- log.Errorf("%v", err)
- } else {
- resp.RowsAffected = int(res.RowsAffected)
- }
- break
- case len(query) > 0:
- resp.Method = "update"
- index := map[string]interface{}{
- "service_id": req.ServiceID,
- "pasture_id": req.PastureID,
- "sys_name": req.SysName,
- }
- log.Infof("msg type update index%v", index)
- req.PastureID = 0
- req.SysName = ""
- req.ServiceID = 0
- log.Infof("msg type update value%v", req)
- if res := svc.DB.Table("message_type").Where(index).Updates(req); res.Error != nil {
- err = errors.Wrap(err, "InsertMsgType{update msg type ===%v}")
- log.Errorf("%v", err)
- } else {
- resp.RowsAffected = int(res.RowsAffected)
- }
- break
- }
- }
- return
- }
- func (svc *Service) QueryMsgType(req *http.MessageTypeReq) (m []http.MessageTypeReq, err error) {
- index := map[string]interface{}{}
- if req.ServiceID != 0 {
- index["service_id"] = req.ServiceID
- }
- if req.PastureID != 0 {
- index["pasture_id"] = req.PastureID
- }
- if req.SysName != "" {
- index["sys_name"] = req.SysName
- }
- log.Infof("query msg type===%v", index)
- if err = svc.DB.Table("message_type").Where(index).Find(&m).Error; err != nil {
- err = errors.Wrap(err, "QueryMsgType.find=")
- log.Errorf("%v", err)
- }
- return
- }
|