package service import ( "app.yhyue.com/moapp/MessageCenter/entity" "app.yhyue.com/moapp/MessageCenter/rpc/message" "errors" "log" ) type MessageService struct { } // 修改消息阅读状态 func (service *MessageService) ChangeReadStatus(data *message.ChangeReadStatusRequest) (int64, string) { orm := entity.Engine.NewSession() log.Println("123") defer orm.Close() m := entity.Message{} count, err1 := orm.Where("id=? and isdel=1 and appid=?", data.Id, data.Appid).Count(m) if count == 0 || err1 != nil { return 0, "该消息不存在" } m.IsRead = int(data.ReadStatus) _, err := orm.Where("id=? and isdel=1", data.Id).Cols("isRead").Update(&m) if err != nil { orm.Rollback() return 0, "修改消息阅读状态失败" } err2 := orm.Commit() if err2 != nil { return 0, "修改消息阅读状态失败" } return 1, "修改消息阅读状态成功" } // 删除消息 func (service *MessageService) DeleteMessage(id []int64, appId string) (int64, string) { orm := entity.Engine.NewSession() log.Println("123") defer orm.Close() m := entity.Message{} m.Isdel = -1 count, err := orm.Where("appid=?", appId).In("id", id).Cols("isdel").Update(&m) if err != nil || count == 0 { log.Println(err) log.Println(count) orm.Rollback() return 0, "删除消息失败" } err2 := orm.Commit() if err2 != nil { return 0, "删除消息失败" } return 1, "删除消息成功" } // 未读消息合计 func (service *MessageService) CountUnread(userId string, appId string) (int64, string, int64) { orm := entity.Engine.NewSession() log.Println("123") defer orm.Close() m := entity.Message{} count, err := orm.Where("receive_userid=? and isdel=1 and appid=?", userId, appId).Count(m) if err != nil { log.Println(err) log.Println(count) return 0, "查询未读消息失败", 0 } log.Println(count) return 1, "查询未读消息成功", count } // 获取指定用户指定分类最新一条未读消息 func (service *MessageService) LastMessage(userId string, appId string, msgType int64) (*message.Messages, error) { orm := entity.Engine.NewSession() log.Println("123") defer orm.Close() m1 := []*entity.Message{} //m := []*message.Messages{} err := orm.Select("*").Where("receive_userid=? and isdel=1 and appid=? and isRead=0 and msg_type=?", userId, appId, msgType).OrderBy("createtime desc").Limit(1, 0).Find(&m1) if err != nil { log.Println(err) log.Println("咋回事") return nil, errors.New("查询未读消息失败") } if len(m1) > 0 { m := m1[0] msg := message.Messages{ Id: int64(m.Id), Appid: m.AppId, ReceiveUserId: m.ReceiveUserid, ReceiveName: m.ReceiveName, SendUserId: m.SendUserid, SendName: m.SendName, Createtime: m.CreateTime.Format("2006-01-02 15:04:05"), Title: m.Title, MsgType: int64(m.MsgType), Link: m.Link, CiteId: int64(m.CiteId), Content: m.Content, IsRead: int64(m.IsRead), } return &msg, nil } else { return nil, nil } } //查询消息详情 func FindMessageDetail(id int64) (entity.Message, error) { orm := entity.Engine.NewSession() defer orm.Close() mess := entity.Message{} err := orm.Table("message").Select("*").Where("id = ?", id).Find(&mess) if err != nil { return mess, err } return mess, nil } // 获取用户未读消息分类及数量 及分类下的最新一条消息 func (service *MessageService) ClassCountAndMessage(userId string, appId string) ([]*message.ResCount, []*message.Messages, error) { orm := entity.Engine.NewSession() log.Println("123") defer orm.Close() //m := []*message.Messages{} query, err := orm.QueryInterface("select count(*) as count,msg_type from message where receive_userid=? and isdel=1 and appid=? and isRead=0 group by msg_type", userId, appId) if err != nil { return nil, nil, err } if err != nil { log.Println(err) log.Println("咋回事") return nil, nil, errors.New("查询未读消息失败") } typeCount := []*message.ResCount{} // 未读消息分类及数量 if query != nil && len(query) > 0 { for _, v := range query { log.Println(v) typeCount = append(typeCount, &message.ResCount{MsgType: v["msg_type"].(int64), Count: v["count"].(int64)}) } } var m1 []*entity.Message var m2 []*message.Messages // 已经有的消息类型 existType := map[int64]bool{} // 分类下最新一条消息 先查出来所有所有的 然后再取出来最新的一条 err = orm.Select("*").Where("receive_userid=? and isdel=1 and appid=? ", userId, appId).OrderBy("createtime desc").Find(&m1) if err != nil { return typeCount, m2, errors.New("获取类型下最新消息失败") } if m1 != nil && (len(m1) > 0) { for _, v1 := range m1 { if !existType[int64(v1.MsgType)] { existType[int64(v1.MsgType)] = true m2 = append(m2, &message.Messages{ Id: int64(v1.Id), Appid: v1.AppId, ReceiveUserId: v1.ReceiveUserid, ReceiveName: v1.ReceiveName, SendUserId: v1.SendUserid, SendName: v1.SendName, Createtime: v1.CreateTime.Format("2006-01-02 15:04:05"), Title: v1.Title, MsgType: int64(v1.MsgType), Link: v1.Link, CiteId: int64(v1.CiteId), Content: v1.Content, IsRead: int64(v1.IsRead), }) } } } return typeCount, m2, nil } // 已接收到消息的分类 func (service *MessageService) ReceiveMsgType(userId string, appId string) ([]int64, error) { orm := entity.Engine.NewSession() log.Println("123") defer orm.Close() m := []entity.Message{} err := orm.Distinct("msg_type").Where("receive_userid=? and isdel=1 and appid=?", userId, appId).Find(&m) if err != nil { log.Println(err) return nil, err } msgTypeList := []int64{} for _, v := range m { msgTypeList = append(msgTypeList, int64(v.MsgType)) } return msgTypeList, nil } func (service *MessageService) UpdateMessageReadStatus(msgType int, receiveUserid, appId string) (int, error) { orm := entity.Engine.NewSession() defer orm.Close() msg := entity.Message{} msg.Isdel = 1 c, err := orm.Where("receive_userid=? and msg_type = ? and appid = ?", receiveUserid, msgType, appId).Cols("isRead").Update(&msg) log.Println("更新后返回值:", c, err) if c < 0 && err != nil { return 0, err } return 1, nil }