jiaojiao7 há 3 anos atrás
pai
commit
670c77650f

+ 29 - 0
api/internal/handler/messagefindhandler.go

@@ -0,0 +1,29 @@
+package handler
+
+import (
+	"net/http"
+
+	"app.yhyue.com/moapp/MessageCenter/api/internal/logic"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+
+	"github.com/tal-tech/go-zero/rest/httpx"
+)
+
+func MessageFindHandler(ctx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.MessageFindReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewMessageFindLogic(r.Context(), ctx)
+		resp, err := l.MessageFind(req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 29 - 0
api/internal/handler/messagegetlasthandler.go

@@ -0,0 +1,29 @@
+package handler
+
+import (
+	"net/http"
+
+	"app.yhyue.com/moapp/MessageCenter/api/internal/logic"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+
+	"github.com/tal-tech/go-zero/rest/httpx"
+)
+
+func MessageGetLastHandler(ctx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.MessageGetLastReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewMessageGetLastLogic(r.Context(), ctx)
+		resp, err := l.MessageGetLast(req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 29 - 0
api/internal/handler/messagetypehandler.go

@@ -0,0 +1,29 @@
+package handler
+
+import (
+	"net/http"
+
+	"app.yhyue.com/moapp/MessageCenter/api/internal/logic"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+
+	"github.com/tal-tech/go-zero/rest/httpx"
+)
+
+func MessageTypeHandler(ctx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.MessageTypeReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewMessageTypeLogic(r.Context(), ctx)
+		resp, err := l.MessageType(req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 29 - 0
api/internal/handler/messageunreadclasscounthandler.go

@@ -0,0 +1,29 @@
+package handler
+
+import (
+	"net/http"
+
+	"app.yhyue.com/moapp/MessageCenter/api/internal/logic"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+
+	"github.com/tal-tech/go-zero/rest/httpx"
+)
+
+func MessageUnreadClassCountHandler(ctx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.MessageUnreadClassCountReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewMessageUnreadClassCountLogic(r.Context(), ctx)
+		resp, err := l.MessageUnreadClassCount(req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 29 - 0
api/internal/handler/messageunreadcounthandler.go

@@ -0,0 +1,29 @@
+package handler
+
+import (
+	"net/http"
+
+	"app.yhyue.com/moapp/MessageCenter/api/internal/logic"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+
+	"github.com/tal-tech/go-zero/rest/httpx"
+)
+
+func MessageUnreadCountHandler(ctx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.MessageUnreadCountReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewMessageUnreadCountLogic(r.Context(), ctx)
+		resp, err := l.MessageUnreadCount(req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 25 - 0
api/internal/handler/routes.go

@@ -22,6 +22,31 @@ func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) {
 				Path:    "/message/messageDetail",
 				Handler: MessageDetailHandler(serverCtx),
 			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/message/messageGetLast",
+				Handler: MessageGetLastHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/message/messageFind",
+				Handler: MessageFindHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/message/messageUnreadClassCount",
+				Handler: MessageUnreadClassCountHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/message/messageUnreadCount",
+				Handler: MessageUnreadCountHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/message/messageType",
+				Handler: MessageTypeHandler(serverCtx),
+			},
 		},
 	)
 }

+ 70 - 0
api/internal/logic/messagefindlogic.go

@@ -0,0 +1,70 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
+	"context"
+	"log"
+
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+
+	"github.com/tal-tech/go-zero/core/logx"
+)
+
+type MessageFindLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewMessageFindLogic(ctx context.Context, svcCtx *svc.ServiceContext) MessageFindLogic {
+	return MessageFindLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *MessageFindLogic) MessageFind(req types.MessageFindReq) (*types.MessageFindRes, error) {
+	// todo: add your logic here and delete this line
+	result := &types.MessageFindRes{}
+	log.Println(req)
+	lsi := l.svcCtx.MessageCenter
+	resp, err := lsi.FindUserMsg(l.ctx, &messageclient.FindUserMsgReq{
+		MsgType:       req.MsgType,
+		Appid:         req.AppId,
+		UserId:        req.UserId,
+		ReceiveUserId: req.ReceiveUserId,
+		Read:          req.IsRead,
+		OffSet:        req.Offset,
+		PageSize:      req.PageSize,
+	})
+	if err != nil {
+		return nil, err
+	}
+	//data := make([]map[string]interface{}, 0)
+
+	result.Code = resp.Code
+	result.Message = resp.Message
+	result.Total = resp.Count
+	result.Status = 0
+	for _, v := range resp.Data {
+		result.Data = append(result.Data, map[string]interface{}{
+			"id":           v.Id,
+			"appid":        v.Appid,
+			"receive_name": v.ReceiveName,
+			"send_userid":  v.SendUserId,
+			"send_name":    v.SendName,
+			"createtime":   v.Createtime,
+			"title":        v.Title,
+			"msg_type":     v.MsgType,
+			"link":         v.Link,
+			"cite_id":      v.CiteId,
+			"content":      v.Content,
+			"isRead":       v.IsRead,
+		})
+
+	}
+
+	return result, nil
+}

+ 61 - 0
api/internal/logic/messagegetlastlogic.go

@@ -0,0 +1,61 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
+	"context"
+	"log"
+
+	"github.com/tal-tech/go-zero/core/logx"
+)
+
+type MessageGetLastLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewMessageGetLastLogic(ctx context.Context, svcCtx *svc.ServiceContext) MessageGetLastLogic {
+	return MessageGetLastLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *MessageGetLastLogic) MessageGetLast(req types.MessageGetLastReq) (*types.MessageGetLastRes, error) {
+	// todo: add your logic here and delete this line
+	result := &types.MessageGetLastRes{}
+	log.Println(req)
+	lsi := l.svcCtx.MessageCenter
+	resp, err := lsi.GetLastMessage(l.ctx, &messageclient.GetLastMessageReq{
+		MsgType: req.MsgType,
+		Appid:   req.AppId,
+		UserId:  req.UserId,
+	})
+	if err != nil {
+		return nil, err
+	}
+	//data := make([]map[string]interface{}, 0)
+
+	result.Code = resp.Code
+	result.Message = resp.Message
+	result.Status = 0
+	result.Data = map[string]interface{}{
+		"id":           resp.Data.Id,
+		"appid":        resp.Data.Appid,
+		"receive_name": resp.Data.ReceiveName,
+		"send_userid":  resp.Data.SendUserId,
+		"send_name":    resp.Data.SendName,
+		"createtime":   resp.Data.Createtime,
+		"title":        resp.Data.Title,
+		"msg_type":     resp.Data.MsgType,
+		"link":         resp.Data.Link,
+		"cite_id":      resp.Data.CiteId,
+		"content":      resp.Data.Content,
+		"isRead":       resp.Data.IsRead,
+	}
+
+	return result, nil
+}

+ 48 - 0
api/internal/logic/messagetypelogic.go

@@ -0,0 +1,48 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
+	"context"
+	"log"
+
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+
+	"github.com/tal-tech/go-zero/core/logx"
+)
+
+type MessageTypeLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewMessageTypeLogic(ctx context.Context, svcCtx *svc.ServiceContext) MessageTypeLogic {
+	return MessageTypeLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *MessageTypeLogic) MessageType(req types.MessageTypeReq) (*types.MessageTypeReqRes, error) {
+	// todo: add your logic here and delete this line
+	result := &types.MessageTypeReqRes{}
+	log.Println(req)
+	lsi := l.svcCtx.MessageCenter
+	resp, err := lsi.GetMsgType(l.ctx, &messageclient.GetMsgTypeReq{
+		Appid:   req.AppId,
+		UserId:  req.UserId,
+	})
+	if err != nil {
+		return nil, err
+	}
+	//data := make([]map[string]interface{}, 0)
+
+	result.Code = resp.Code
+	result.Message = resp.Message
+	result.Status = 0
+	result.Data = resp.Data
+
+	return result, nil
+}

+ 70 - 0
api/internal/logic/messageunreadclasscountlogic.go

@@ -0,0 +1,70 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
+	"context"
+	"log"
+
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+
+	"github.com/tal-tech/go-zero/core/logx"
+)
+
+type MessageUnreadClassCountLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewMessageUnreadClassCountLogic(ctx context.Context, svcCtx *svc.ServiceContext) MessageUnreadClassCountLogic {
+	return MessageUnreadClassCountLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *MessageUnreadClassCountLogic) MessageUnreadClassCount(req types.MessageUnreadClassCountReq) (*types.MessageUnreadClassCountRes, error) {
+	// todo: add your logic here and delete this line
+	result := &types.MessageUnreadClassCountRes{}
+	log.Println(req)
+	lsi := l.svcCtx.MessageCenter
+	resp, err := lsi.GetUnreadClassCount(l.ctx, &messageclient.GetUnreadClassCountReq{
+		Appid:  req.AppId,
+		UserId: req.UserId,
+	})
+	if err != nil {
+		return nil, err
+	}
+	//data := make([]map[string]interface{}, 0)
+
+	result.Code = resp.Code
+	result.Message = resp.Message
+	result.Status = 0
+	for _, v := range resp.Data {
+		result.Data = append(result.Data, map[string]interface{}{
+			"type":  v.MsgType,
+			"count": v.Count,
+		})
+
+	}
+	for _, v2 := range resp.Info {
+		result.Info = append(result.Info, map[string]interface{}{
+			"id":           v2.Id,
+			"appid":        v2.Appid,
+			"receive_name": v2.ReceiveName,
+			"send_userid":  v2.SendUserId,
+			"send_name":    v2.SendName,
+			"createtime":   v2.Createtime,
+			"title":        v2.Title,
+			"msg_type":     v2.MsgType,
+			"link":         v2.Link,
+			"cite_id":      v2.CiteId,
+			"content":      v2.Content,
+			"isRead":       v2.IsRead,
+		})
+
+	}
+	return result, nil
+}

+ 49 - 0
api/internal/logic/messageunreadcountlogic.go

@@ -0,0 +1,49 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
+	"context"
+	"log"
+
+	"app.yhyue.com/moapp/MessageCenter/api/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/api/internal/types"
+
+	"github.com/tal-tech/go-zero/core/logx"
+)
+
+type MessageUnreadCountLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewMessageUnreadCountLogic(ctx context.Context, svcCtx *svc.ServiceContext) MessageUnreadCountLogic {
+	return MessageUnreadCountLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *MessageUnreadCountLogic) MessageUnreadCount(req types.MessageUnreadCountReq) (*types.MessageUnreadCountRes, error) {
+	// todo: add your logic here and delete this line
+	result := &types.MessageUnreadCountRes{}
+	log.Println(req)
+	lsi := l.svcCtx.MessageCenter
+	resp, err := lsi.GetUnreadCount(l.ctx, &messageclient.GetUnreadCountRequest{
+		Appid:  req.AppId,
+		UserId: req.UserId,
+	})
+	if err != nil {
+		return nil, err
+	}
+	//data := make([]map[string]interface{}, 0)
+
+	result.Code = resp.Code
+	result.Message = resp.Message
+	result.Status = 0
+	result.Data = map[string]interface{}{
+		"count": resp.Count,
+	}
+	return result, nil
+}

+ 68 - 0
api/internal/types/types.go

@@ -20,3 +20,71 @@ type MessageDetailResp struct {
 	Message string                 `json:"message"`
 	Data    map[string]interface{} `json:"data"`
 }
+
+type MessageGetLastReq struct {
+	UserId  string `form:"userId"`
+	AppId   string `form:"appId"`
+	MsgType int64  `form:"msgType"`
+}
+
+type MessageGetLastRes struct {
+	Code    int64                  `json:"code"`
+	Message string                 `json:"message"`
+	Data    map[string]interface{} `json:"data"`
+	Status  int64                  `json:"isOk"`
+}
+
+type MessageFindReq struct {
+	UserId        string `form:"userId"`
+	AppId         string `form:"appId"`
+	ReceiveUserId string `form:"receiveUserId"`
+	MsgType       int64  `form:"msgType"`  // 是否限制消息类型  -1 不限制
+	IsRead        int64  `form:"isRead"`   // 是否限制未读    -1 不限制
+	Offset        int64  `form:"offset"`   // 页数
+	PageSize      int64  `form:"pageSize"` //
+}
+
+type MessageFindRes struct {
+	Code    int64                    `json:"code"`
+	Message string                   `json:"message"`
+	Status  int64                    `json:"isOk"`
+	Data    []map[string]interface{} `json:"data"`
+	Total   int64                    `json:"total"`
+}
+
+type MessageUnreadClassCountReq struct {
+	UserId string `form:"userId"`
+	AppId  string `form:"appId"`
+}
+
+type MessageUnreadClassCountRes struct {
+	Code    int64                    `json:"code"`
+	Status  int64                    `json:"isOk"`
+	Message string                   `json:"message"`
+	Data    []map[string]interface{} `json:"data"`
+	Info    []map[string]interface{} `json:"info"`
+}
+
+type MessageUnreadCountReq struct {
+	UserId string `form:"userId"`
+	AppId  string `form:"appId"`
+}
+
+type MessageUnreadCountRes struct {
+	Code    int64                  `json:"code"`
+	Status  int64                  `json:"isOk"`
+	Message string                 `json:"message"`
+	Data    map[string]interface{} `json:"data"`
+}
+
+type MessageTypeReq struct {
+	UserId string `form:"userId"`
+	AppId  string `form:"appId"`
+}
+
+type MessageTypeReqRes struct {
+	Code    int64   `json:"code"`
+	Status  int64   `json:"isOk"`
+	Message string  `json:"message"`
+	Data    []int64 `json:"data"`
+}

+ 69 - 1
api/message.api

@@ -26,7 +26,66 @@ type MessageDetailResp {
 	Message string                 `json:"message"`
 	Data    map[string]interface{} `json:"data"`
 }
+type MessageGetLastReq {
+	UserId  string `form:"userId"`
+	AppId   string `form:"appId"`
+	MsgType int64  `form:"msgType"`
+}
+type MessageGetLastRes {
+	Code    int64                  `json:"code"`
+	Message string                 `json:"message"`
+	Data    map[string]interface{} `json:"data"`
+	Status  int64                  `json:"isOk"`
+}
+type MessageFindReq {
+	UserId string `form:"userId"`
+	AppId  string `form:"appId"`
+	//    MsgType int64 `form:"msgType"`
+	ReceiveUserId string `form:"receiveUserId"`
+	MsgType       int64  `form:"msgType"`  // 是否限制消息类型  -1 不限制
+	IsRead        int64  `form:"isRead"`   // 是否限制未读    -1 不限制
+	Offset        int64  `form:"offset"`   // 页数
+	PageSize      int64  `form:"pageSize"` //
+}
+type MessageFindRes {
+	Code    int64                    `json:"code"`
+	Message string                   `json:"message"`
+	Status  int64                    `json:"isOk"`
+	Data    []map[string]interface{} `json:"data"`
+	Total   int64                    `json:"total"`
+}
+type MessageUnreadClassCountReq {
+	UserId string `form:"userId"`
+	AppId  string `form:"appId"`
+}
 
+type MessageUnreadClassCountRes {
+	Code    int64                    `json:"code"`
+	Status  int64                    `json:"isOk"`
+	Message string                   `json:"message"`
+	Data    []map[string]interface{} `json:"data"`
+	Info    []map[string]interface{} `json:"info"`
+}
+type MessageUnreadCountReq {
+	UserId string `form:"userId"`
+	AppId  string `form:"appId"`
+}
+type MessageUnreadCountRes {
+	Code    int64                  `json:"code"`
+	Status  int64                  `json:"isOk"`
+	Message string                 `json:"message"`
+	Data    map[string]interface{} `json:"data"`
+}
+type MessageTypeReq {
+	UserId string `form:"userId"`
+	AppId  string `form:"appId"`
+}
+type MessageTypeReqRes {
+	Code    int64   `json:"code"`
+	Status  int64   `json:"isOk"`
+	Message string  `json:"message"`
+	Data    []int64 `json:"data"`
+}
 service message-api {
 	//删除消息
 	@handler MessageDeleteHandler // TODO: set handler name and delete this comment
@@ -34,5 +93,14 @@ service message-api {
 	//查询消息详情
 	@handler MessageDetailHandler // TODO: set handler name and delete this comment
 	get /message/messageDetail(MessageDetailReq) returns(MessageDetailResp)
-	
+	@handler MessageGetLastHandler // 获取指定类型的最新一条未读消息
+	get /message/messageGetLast (MessageGetLastReq) returns (MessageGetLastRes)
+	@handler MessageFindHandler // 获取指定用户的历史消息  条件可选 消息类型 是否未读
+	get /message/messageFind (MessageFindReq) returns (MessageFindRes)
+	@handler MessageUnreadClassCountHandler // 获取用户未读消息分类及分类下的最新消息
+	get /message/messageUnreadClassCount (MessageUnreadClassCountReq) returns (MessageUnreadClassCountRes)
+	@handler MessageUnreadCountHandler // 获取用户未读消息数量
+	get /message/messageUnreadCount (MessageUnreadCountReq) returns (MessageUnreadCountRes)
+	@handler MessageTypeHandler // 获取用户未读消息数量
+	get /message/messageType (MessageTypeReq) returns (MessageTypeReqRes)
 }

+ 1 - 1
rpc/internal/logic/getlastmessagelogic.go

@@ -31,7 +31,7 @@ func (l *GetLastMessageLogic) GetLastMessage(in *message.GetLastMessageReq) (*me
 	data,err := m.LastMessage(in.UserId,in.Appid,in.MsgType)
 	code := 0
 	msg :=""
-	if err != nil{
+	if err == nil{
 		code = 1
 	}
 	return &message.GetLastMessageRes{

+ 43 - 0
rpc/internal/logic/getmsgtypelogic.go

@@ -0,0 +1,43 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/MessageCenter/service"
+	"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 GetMsgTypeLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewGetMsgTypeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetMsgTypeLogic {
+	return &GetMsgTypeLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+//   获取指定用户收到消息的分类
+func (l *GetMsgTypeLogic) GetMsgType(in *message.GetMsgTypeReq) (*message.GetMsgTypeRes, error) {
+	// todo: add your logic here and delete this line
+	m := service.MessageService{}
+	data, err := m.ReceiveMsgType(in.UserId, in.Appid)
+	code := 0
+	msg := ""
+	if err == nil {
+		code = 1
+	}
+	return &message.GetMsgTypeRes{
+		Code:    int64(code),
+		Message: msg,
+		Data:    data,
+	}, nil
+
+}

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

@@ -0,0 +1,43 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/MessageCenter/service"
+	"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
+	m := service.MessageService{}
+	count, info, err := m.ClassCountAndMessage(in.UserId, in.Appid)
+	code := 0
+	msg := ""
+	if err == nil {
+		code = 1
+	}
+	return &message.GetUnreadClassCountRes{
+		Code:    int64(code),
+		Message: msg,
+		Data:    count,
+		Info:    info,
+	}, nil
+}

+ 12 - 0
rpc/internal/server/messageserver.go

@@ -74,3 +74,15 @@ func (s *MessageServer) FindMessageDetail(ctx context.Context, in *message.Messa
 	l := logic.NewFindMessageDetailLogic(ctx, s.svcCtx)
 	return l.FindMessageDetail(in)
 }
+
+//   获取指定用户的未读消息分类及数量 及分类的最新消息
+func (s *MessageServer) GetUnreadClassCount(ctx context.Context, in *message.GetUnreadClassCountReq) (*message.GetUnreadClassCountRes, error) {
+	l := logic.NewGetUnreadClassCountLogic(ctx, s.svcCtx)
+	return l.GetUnreadClassCount(in)
+}
+
+//   获取指定用户收到消息的分类
+func (s *MessageServer) GetMsgType(ctx context.Context, in *message.GetMsgTypeReq) (*message.GetMsgTypeRes, error) {
+	l := logic.NewGetMsgTypeLogic(ctx, s.svcCtx)
+	return l.GetMsgType(in)
+}

+ 109 - 82
rpc/message.proto

@@ -3,98 +3,96 @@ syntax = "proto3";
 package message;
 
 message SendMsgRequest {
-    string receiveUserId = 1; //接收方用户ID
-    string receiveName = 2; //接收方用户名
-    string sendUserId = 3; //发送方用户ID
-    string sendName = 4; //发送方用户名
-    string title = 5; //主题
-    string content = 6; //内容
-    int64 msgType = 7; //消息类型 1:客服   2:系统通知  3:营销   4:用户会话
-    string link = 8; //跳转链接
-    int64 citeId = 9; //引用id
-    string appid = 10; //应用标识
-    int64 isdel = 11; //是否删除
-    string sendTime = 12; //发送时间
-    string sendMode = 13; //发送模式
-    string receiveTime = 14; //接收时间
-    int64 sendStatus = 15; //发送状态
-    string updateTime = 16; //修改时间
+  string receiveUserId = 1; //接收方用户ID
+  string receiveName = 2; //接收方用户名
+  string sendUserId = 3; //发送方用户ID
+  string sendName = 4; //发送方用户名
+  string title = 5; //主题
+  string content = 6; //内容
+  int64 msgType = 7; //消息类型 1:客服   2:系统通知  3:营销   4:用户会话
+  string link = 8; //跳转链接
+  int64 citeId = 9; //引用id
+  string appid = 10; //应用标识
 }
 
 message ChangeReadStatusRequest {
-    int64 id = 1; // 消息id
-    int64 readStatus = 2; // 阅读状态 0-未读 1-已读
-    string appid = 3; //应用标识
+  int64 id = 1; // 消息id
+  int64 readStatus = 2; // 阅读状态 0-未读 1-已读
+  string appid = 3; //应用标识
+}
+message ResCount{
+  int64 msgType = 1;// 类型及未读数量
+  int64 count = 2;// 类型及未读数量
 }
-
 // 删除单一消息
 message DeleteSingleMessageRequest {
-    int64 id = 1; // 消息id
-    string appid = 3; //应用标识
+  int64 id = 1; // 消息id
+  string appid = 3; //应用标识
 }
 // 批量删除消息
 message DeleteMultipleMessageRequest {
-    string id = 1; // 多条消息id, 逗号分隔
-    string appid = 3; //应用标识
+  string id = 1; // 多条消息id, 逗号分隔
+  string appid = 3; //应用标识
 }
 // 查询指定用户未读消息合计
 message GetUnreadCountRequest {
-    string userId = 1; // 用户id
-    string appid = 2; //应用标识
+  string userId = 1; // 用户id
+  string appid = 2; //应用标识
 }
 
 message Response {
-    int64 code = 1; //状态码
-    string message = 2; //响应消息
+  int64 code = 1; //状态码
+  string message = 2; //响应消息
 }
 
 message GetUnreadCountResponse {
-    int64 code = 1; //状态码
-    string message = 2; //响应消息
-    int64 count = 3; //
+  int64 code = 1; //状态码
+  string message = 2; //响应消息
+  int64 count = 3; //
 }
 
 message FindUserMsgReq {
-    string userId = 1; //用户id
-    string receiveUserId = 2; //聊天方用户id
-    string appid = 3; //应用标识
-    int64 offSet = 4; //当前
-    int64 pageSize = 5; //大小
-    int64 msgType = 6; //是否区分类型
-    int64 read = 7; // 是否区分已读未读 -1 不区分已读未读  0 未读 1 已读
+  string userId = 1; //用户id
+  string receiveUserId = 2; //聊天方用户id
+  string appid = 3; //应用标识
+  int64 offSet = 4; //当前
+  int64 pageSize = 5; //大小
+  int64 msgType = 6; //是否区分类型
+  int64 read = 7; // 是否区分已读未读 -1 不区分已读未读  0 未读 1 已读
 }
 
 message Messages {
-    string receiveUserId = 1; //接收方用户ID
-    string receiveName = 2; //接收方用户名
-    string sendUserId = 3; //发送方用户ID
-    string sendName = 4; //发送方用户名
-    string title = 5; //主题
-    string content = 6; //内容
-    int64 msgType = 7; //消息类型 1:客服   2:系统通知  3:营销   4:用户会话
-    string link = 8; //跳转链接
-    int64 citeId = 9; //引用id
-    int64 isRead = 10; //已读未读 0:未读  1:已读
-    string createtime = 11;
-    string appid = 12; //应用标识
+  string receiveUserId = 1; //接收方用户ID
+  string receiveName = 2; //接收方用户名
+  string sendUserId = 3; //发送方用户ID
+  string sendName = 4; //发送方用户名
+  string title = 5; //主题
+  string content = 6; //内容
+  int64 msgType = 7; //消息类型 1:客服   2:系统通知  3:营销   4:用户会话
+  string link = 8; //跳转链接
+  int64 citeId = 9; //引用id
+  int64 isRead = 10; //已读未读 0:未读  1:已读
+  string createtime = 11;
+  string appid = 12; //应用标识
+  int64 id = 13;//消息id
 }
 
 message FindUserMsgRes {
-    int64 code = 1; //状态码
-    string message = 2; //响应消息
-    repeated Messages data = 3; //
-    int64 count = 4; //总数
+  int64 code = 1; //状态码
+  string message = 2; //响应消息
+  repeated Messages data = 3; //
+  int64 count = 4; //总数
 }
 
 message GetClassUnreadCountReq {
-    string userId = 1; // 用户id
-    int64 msgType = 2; //分类 1:客服   2:系统通知  3:营销   4:用户会话
-    string appid = 3; //应用标识
+  string userId = 1; // 用户id
+  int64 msgType = 2; //分类 1:客服   2:系统通知  3:营销   4:用户会话
+  string appid = 3; //应用标识
 }
 
 //查看消息内容
 message MessageDetailReq {
-    int64 id = 1; //消息id
+  int64 id = 1; //消息id
 }
 message MessageDetailResp {
     int64 code = 1; //状态码
@@ -102,32 +100,61 @@ message MessageDetailResp {
     Messages data = 3; //
 }
 message GetLastMessageReq {
-    string userId = 1; // 用户id
-    int64 msgType = 2; //分类 1:客服   2:系统通知  3:营销   4:用户会话
-    string appid = 3; //应用标识
+  string userId = 1; // 用户id
+  int64 msgType = 2; //分类 1:客服   2:系统通知  3:营销   4:用户会话
+  string appid = 3; //应用标识
 }
 message GetLastMessageRes {
-    int64 code = 1; //状态码
-    string message = 2; //响应消息
-    Messages data = 3; //
+  int64 code = 1; //状态码
+  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; // 每个类型最新消息列表
+
+}
+message GetMsgTypeReq{
+  string userId = 1;    // 用户id
+  string appid = 2;     //应用标识
+}
+message GetMsgTypeRes{
+  int64 code = 1;//状态码
+  string message = 2;//响应消息
+  repeated int64 data = 3;//
+
+
 }
 service Message {
-    // 修改消息阅读状态
-    rpc ChangeReadStatus (ChangeReadStatusRequest) returns (Response);
-    //指定用户发消息
-    rpc SendUserMsg (SendMsgRequest) returns (Response);
-    // 删除单一消息
-    rpc DeleteSingleMessage (DeleteSingleMessageRequest) returns (Response);
-    // 删除多条消息
-    rpc DeleteMultipleMessage (DeleteMultipleMessageRequest) returns (Response);
-    //  查询指定用户未读消息合计
-    rpc GetUnreadCount (GetUnreadCountRequest) returns (GetUnreadCountResponse);
-    //  查询指定用户的历史消息记录
-    rpc FindUserMsg (FindUserMsgReq) returns (FindUserMsgRes);
-    //  查询指定用户指定分类的未读消息合计
-    rpc GetClassUnreadCount (GetClassUnreadCountReq) returns (GetUnreadCountResponse);
-    //  获取指定用户指定分类的最新一条未读消息
-    rpc GetLastMessage (GetLastMessageReq) returns (GetLastMessageRes);
-    //查看详细详情
-    rpc FindMessageDetail (MessageDetailReq) returns (MessageDetailResp);
+
+
+  // 修改消息阅读状态
+  rpc ChangeReadStatus (ChangeReadStatusRequest) returns (Response);
+  //指定用户发消息
+  rpc SendUserMsg (SendMsgRequest) returns (Response);
+  // 删除单一消息
+  rpc DeleteSingleMessage (DeleteSingleMessageRequest) returns (Response);
+  // 删除多条消息
+  rpc DeleteMultipleMessage (DeleteMultipleMessageRequest) returns (Response);
+  //  查询指定用户未读消息合计
+  rpc GetUnreadCount (GetUnreadCountRequest) returns (GetUnreadCountResponse);
+  //  查询指定用户的历史消息记录
+  rpc FindUserMsg (FindUserMsgReq) returns (FindUserMsgRes);
+  //  查询指定用户指定分类的未读消息合计
+  rpc GetClassUnreadCount (GetClassUnreadCountReq) returns (GetUnreadCountResponse);
+  //  获取指定用户指定分类的最新一条未读消息
+  rpc GetLastMessage (GetLastMessageReq) returns (GetLastMessageRes);
+  //查看详细详情
+  rpc FindMessageDetail (MessageDetailReq) returns (MessageDetailResp);
+  //  获取指定用户的未读消息分类及数量 及分类的最新消息
+  rpc GetUnreadClassCount(GetUnreadClassCountReq) returns(GetUnreadClassCountRes);
+  //  获取指定用户收到消息的分类
+  rpc GetMsgType(GetMsgTypeReq) returns(GetMsgTypeRes);
 }

Diff do ficheiro suprimidas por serem muito extensas
+ 517 - 231
rpc/message/message.pb.go


+ 30 - 9
rpc/messageclient/message.go

@@ -14,21 +14,26 @@ import (
 )
 
 type (
-	ChangeReadStatusRequest      = message.ChangeReadStatusRequest
-	MessageDetailReq             = message.MessageDetailReq
-	SendMsgRequest               = message.SendMsgRequest
+	ResCount                     = message.ResCount
 	Response                     = message.Response
-	GetUnreadCountResponse       = message.GetUnreadCountResponse
-	FindUserMsgReq               = message.FindUserMsgReq
-	Messages                     = message.Messages
-	MessageDetailResp            = message.MessageDetailResp
+	GetUnreadClassCountRes       = message.GetUnreadClassCountRes
 	GetLastMessageReq            = message.GetLastMessageReq
 	GetLastMessageRes            = message.GetLastMessageRes
 	DeleteSingleMessageRequest   = message.DeleteSingleMessageRequest
-	DeleteMultipleMessageRequest = message.DeleteMultipleMessageRequest
 	GetUnreadCountRequest        = message.GetUnreadCountRequest
-	FindUserMsgRes               = message.FindUserMsgRes
+	FindUserMsgReq               = message.FindUserMsgReq
 	GetClassUnreadCountReq       = message.GetClassUnreadCountReq
+	GetMsgTypeReq                = message.GetMsgTypeReq
+	SendMsgRequest               = message.SendMsgRequest
+	ChangeReadStatusRequest      = message.ChangeReadStatusRequest
+	Messages                     = message.Messages
+	MessageDetailReq             = message.MessageDetailReq
+	GetUnreadClassCountReq       = message.GetUnreadClassCountReq
+	GetMsgTypeRes                = message.GetMsgTypeRes
+	DeleteMultipleMessageRequest = message.DeleteMultipleMessageRequest
+	GetUnreadCountResponse       = message.GetUnreadCountResponse
+	FindUserMsgRes               = message.FindUserMsgRes
+	MessageDetailResp            = message.MessageDetailResp
 
 	Message interface {
 		//  修改消息阅读状态
@@ -49,6 +54,10 @@ type (
 		GetLastMessage(ctx context.Context, in *GetLastMessageReq) (*GetLastMessageRes, error)
 		// 查看详细详情
 		FindMessageDetail(ctx context.Context, in *MessageDetailReq) (*MessageDetailResp, error)
+		//   获取指定用户的未读消息分类及数量 及分类的最新消息
+		GetUnreadClassCount(ctx context.Context, in *GetUnreadClassCountReq) (*GetUnreadClassCountRes, error)
+		//   获取指定用户收到消息的分类
+		GetMsgType(ctx context.Context, in *GetMsgTypeReq) (*GetMsgTypeRes, error)
 	}
 
 	defaultMessage struct {
@@ -115,3 +124,15 @@ func (m *defaultMessage) FindMessageDetail(ctx context.Context, in *MessageDetai
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.FindMessageDetail(ctx, in)
 }
+
+//   获取指定用户的未读消息分类及数量 及分类的最新消息
+func (m *defaultMessage) GetUnreadClassCount(ctx context.Context, in *GetUnreadClassCountReq) (*GetUnreadClassCountRes, error) {
+	client := message.NewMessageClient(m.cli.Conn())
+	return client.GetUnreadClassCount(ctx, in)
+}
+
+//   获取指定用户收到消息的分类
+func (m *defaultMessage) GetMsgType(ctx context.Context, in *GetMsgTypeReq) (*GetMsgTypeRes, error) {
+	client := message.NewMessageClient(m.cli.Conn())
+	return client.GetMsgType(ctx, in)
+}

+ 76 - 15
service/messageService.go

@@ -85,24 +85,11 @@ func (service *MessageService) LastMessage(userId string, appId string, msgType
 		log.Println("咋回事")
 		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 {
 		m := m1[0]
 		msg := message.Messages{
+			Id:            int64(m.Id),
 			Appid:         m.AppId,
 			ReceiveUserId: m.ReceiveUserid,
 			ReceiveName:   m.ReceiveName,
@@ -135,3 +122,77 @@ func FindMessageDetail(id int64) (entity.Message, error) {
 	}
 	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
+}

+ 4 - 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,13 +95,14 @@ 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)
 		log.Println("数据:", messages)
 		for _, v := range messages {
 			data.Data = append(data.Data, &message.Messages{
+				Id: int64(v.Id),
 				Appid:         v.AppId,
 				ReceiveUserId: v.ReceiveUserid,
 				ReceiveName:   v.ReceiveName,

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff