fuwencai 3 lat temu
rodzic
commit
752a6eda78

+ 31 - 0
rpc/internal/logic/getunreadclasscountlogic.go

@@ -0,0 +1,31 @@
+package logic
+
+import (
+	"context"
+
+	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/rpc/message"
+
+	"github.com/tal-tech/go-zero/core/logx"
+)
+
+type GetUnreadClassCountLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewGetUnreadClassCountLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUnreadClassCountLogic {
+	return &GetUnreadClassCountLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+//   获取指定用户的未读消息分类及数量 及分类的最新消息
+func (l *GetUnreadClassCountLogic) GetUnreadClassCount(in *message.GetUnreadClassCountReq) (*message.GetUnreadClassCountRes, error) {
+	// todo: add your logic here and delete this line
+
+	return &message.GetUnreadClassCountRes{}, nil
+}

+ 19 - 1
rpc/message.proto

@@ -20,7 +20,10 @@ message  ChangeReadStatusRequest {
   int64 readStatus = 2;// 阅读状态 0-未读 1-已读
   string appid = 3; //应用标识
 }
-
+message ResCount{
+  int64 msgType = 1;// 类型及未读数量
+  int64 count = 2;// 类型及未读数量
+}
 // 删除单一消息
 message DeleteSingleMessageRequest{
   int64 id = 1;    // 消息id
@@ -95,6 +98,18 @@ message GetLastMessageRes{
   string message = 2;//响应消息
   Messages data = 3;//
 }
+// 获取用户分类的的未读消息分类及数量 及分类下最新的消息
+message GetUnreadClassCountReq{
+  string userId = 1;    // 用户id
+  string appid = 2;     //应用标识
+}
+message GetUnreadClassCountRes{
+  int64 code = 1;//状态码
+  string message = 2;//响应消息
+  repeated ResCount data = 3;//
+  repeated Messages info = 4; // 每个类型最新消息列表
+
+}
 service Message {
   // 修改消息阅读状态
   rpc ChangeReadStatus(ChangeReadStatusRequest) returns(Response);
@@ -112,4 +127,7 @@ service Message {
   rpc GetClassUnreadCount(GetClassUnreadCountReq) returns(GetUnreadCountResponse);
   //  获取指定用户指定分类的最新一条未读消息
   rpc GetLastMessage(GetLastMessageReq) returns(GetLastMessageRes);
+  //  获取指定用户的未读消息分类及数量 及分类的最新消息
+  rpc GetUnreadClassCount(GetUnreadClassCountReq) returns(GetUnreadClassCountRes);
+
 }

+ 75 - 34
service/messageService.go

@@ -72,54 +72,95 @@ func (service *MessageService) CountUnread(userId string, appId string) (int64,
 }
 
 // 获取指定用户指定分类最新一条未读消息
-func (service *MessageService)LastMessage(userId string, appId string, msgType int64) ( *message.Messages,error) {
+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)
+	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("查询未读消息失败")
+		return nil, errors.New("查询未读消息失败")
 	}
-	//msg := message.Messages{
-	//	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),
-	//}
-	//log.Println(count)
-	if len(m1)>0{
+	if len(m1) > 0 {
 		m := m1[0]
 		msg := message.Messages{
-				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),
+			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
+		return &msg, nil
+	} else {
+		return nil, 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", 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{
+					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
+}

+ 3 - 2
service/sendMsg.go

@@ -8,7 +8,8 @@ import (
 	"app.yhyue.com/moapp/MessageCenter/entity"
 	"app.yhyue.com/moapp/MessageCenter/rpc/message"
 )
-
+// 类型的顺序
+const order = "1,4"
 func SendMsg(this message.SendMsgRequest) (int64, string) {
 	orm := entity.Engine.NewSession()
 	defer orm.Close()
@@ -94,7 +95,7 @@ func FindUserMsg(this message.FindUserMsgReq) message.FindUserMsgRes {
 	data := message.FindUserMsgRes{}
 	if count > 0 {
 		err = orm.Table("message").Select("*").Where("((receive_userid = ? and send_userid = ?) or (receive_userid = ? and send_userid = ?)) and isdel = ? and appid = ?" +q, this.UserId, this.ReceiveUserId, this.ReceiveUserId, this.UserId, 1, this.Appid).
-			OrderBy("FIELD(`msg_type`,4,1),createtime").
+			OrderBy("FIELD(`msg_type`,"+order+"),createtime").
 			Limit(int(this.PageSize), (int(this.OffSet)-1)*int(this.PageSize)).
 			Find(&messages)
 		log.Println("数据:", messages)