package service import ( "context" "dashoo.cn/micro/app/dao" "dashoo.cn/micro/app/model" "fmt" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/os/gtime" "github.com/gogf/gf/util/gconv" "strings" ) type MessageService struct { *contextService Dao *dao.SysMessageDao logDao *dao.SysMessageLogDao } func NewMessageService(ctx context.Context) (svc *MessageService, err error) { svc = new(MessageService) if svc.contextService, err = svc.Init(ctx); err != nil { return nil, err } svc.Dao = dao.NewSysMessageDao(svc.Tenant) svc.logDao = dao.NewSysMessageLogDao(svc.Tenant) return svc, nil } func (s *MessageService) GetList(req *model.SysMessageSearchReq) (total int, list []*model.SysMessage, err error) { m := s.Dao.M if req != nil { if req.MsgTitle != "" { m = m.WhereLike(s.Dao.C.MsgTitle, "%"+req.MsgTitle+"%") } if req.MsgType != "" { m = m.Where(s.Dao.C.MsgType, req.MsgType) } } total, err = m.Count() if err != nil { return } err = m.Page(req.GetPage()).OrderDesc("id").Scan(&list) if err != nil { return } return } func (s *MessageService) GetListByUser(req *model.SysMessageSearchReq) (total int, list []*model.SysMessage, err error) { m := s.Dao.As("msg").LeftJoin(dao.SysMessageLog.Table, "log", "msg.id=log.msg_id").Where("log.user_id", s.GetCxtUserId()) if req != nil { if req.MsgTitle != "" { m = m.WhereLike(s.Dao.C.MsgTitle, "%"+req.MsgTitle+"%") } if req.MsgType != "" { m = m.Where(s.Dao.C.MsgType, req.MsgType) } } total, err = m.Count() if err != nil { return } err = m.Page(req.GetPage()).Fields("msg.*,log.is_read,log.read_time").OrderDesc(s.Dao.C.CreatedTime).Scan(&list) if err != nil { return } return } func (s *MessageService) GetEntityById(id int64) (msg *model.SysMessage, err error) { msg, err = s.Dao.WherePri(id).One() if err != nil { return nil, err } data := g.Map{ s.logDao.C.IsRead: "20", s.logDao.C.ReadTime: gtime.Now(), } _, err = s.logDao.Where(s.logDao.C.MsgId, id).Where(s.logDao.C.UserId, s.GetCxtUserId()).Data(data).Update() return } // Create 添加操作 func (s *MessageService) Create(req *model.CreateSysMessageReq) (err error) { data := new(model.SysMessage) if err := gconv.Struct(req, data); err != nil { return err } if data.SendType == "" { data.SendType = "10" } SetCreatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName()) lastId, err := s.Dao.InsertAndGetId(data) if err != nil { return err } data.Id = int(lastId) userIds := strings.Split(data.RecvUserIds, ",") for _, userId := range userIds { if userId == "" { continue } log := g.Map{ s.logDao.C.MsgId: lastId, s.logDao.C.UserId: userId, s.logDao.C.IsRead: "10", } s.logDao.Data(log).Insert() sendMsgType := strings.Split(data.SendType, ",") for _, v := range sendMsgType { switch v { case "10": // 10:websocket MessageNotify(userId, *data) fmt.Println(v, "1") case "20": // 20:邮件 fmt.Println(v, "20") case "30": // 30:钉钉 fmt.Println(v, "3") case "40": // 40:小程序模版 fmt.Println(v, "4") case "50": // fmt.Println(v, "5") } } } return } // UpdateById 修改系统参数 func (s *MessageService) UpdateById(req *model.UpdateSysMessageReq) (err error) { data := new(model.SysMessage) if err := gconv.Struct(req, data); err != nil { return err } SetUpdatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName()) _, err = s.Dao.FieldsEx(UpdateFieldEx...).WherePri(req.Id).Data(data).Update() s.logDao.Where(s.logDao.C.MsgId, data.Id).Delete() userIds := strings.Split(data.RecvUserIds, ",") for _, uid := range userIds { if uid == "" { continue } log := g.Map{ s.logDao.C.MsgId: data.Id, s.logDao.C.UserId: uid, s.logDao.C.IsRead: "10", } s.logDao.Data(log).Insert() } return } // DeleteByIds 删除 func (s *MessageService) DeleteByIds(ids []int64) error { _, err := s.Dao.WhereIn(s.Dao.C.Id, ids).Delete() return err } // 全部已读 func (s *MessageService) AllRead() error { data := g.Map{ s.logDao.C.IsRead: "20", s.logDao.C.ReadTime: gtime.Now(), } _, err := s.logDao.Where(s.logDao.C.UserId, s.GetCxtUserId()).Data(data).Update() return err }