فهرست منبع

Merge branch 'feature/v1.2.7' into dev/v1.2.7_rjj

# Conflicts:
#	rpc/internal/server/messageserver.go
#	rpc/type/message/message.pb.go
#	rpc/type/message/message_grpc.pb.go
renjiaojiao 2 سال پیش
والد
کامیت
8b57ac7cad
30فایلهای تغییر یافته به همراه1507 افزوده شده و 188 حذف شده
  1. 3 0
      entity/message.go
  2. 27 1
      rpc/etc/message.yaml
  3. 1 1
      rpc/internal/common/getBuoyMsg.go
  4. 2 2
      rpc/internal/common/messageService.go
  5. 1 1
      rpc/internal/common/sendMsg.go
  6. 105 0
      rpc/internal/common/sendWxTmplMsg.go
  7. 34 1
      rpc/internal/config/config.go
  8. 1 1
      rpc/internal/logic/changereadstatuslogic.go
  9. 1 1
      rpc/internal/logic/clearunreadmsglogic.go
  10. 42 0
      rpc/internal/logic/deletemultiplemessagelogic.go
  11. 38 0
      rpc/internal/logic/deletesinglemessagelogic.go
  12. 1 1
      rpc/internal/logic/findmessagedetaillogic.go
  13. 1 1
      rpc/internal/logic/finduserbuoymsglogic.go
  14. 1 1
      rpc/internal/logic/findusermsglogic.go
  15. 2 2
      rpc/internal/logic/getclassunreadcountlogic.go
  16. 2 2
      rpc/internal/logic/getlastmessagelogic.go
  17. 2 2
      rpc/internal/logic/getmsgtypelogic.go
  18. 2 2
      rpc/internal/logic/getunreadclasscountlogic.go
  19. 2 2
      rpc/internal/logic/getunreadcountlogic.go
  20. 1 1
      rpc/internal/logic/multiplesavemsglogic.go
  21. 1 1
      rpc/internal/logic/sendusermsglogic.go
  22. 31 0
      rpc/internal/logic/sendwxtmplmsglogic.go
  23. 1 1
      rpc/internal/logic/updatemessagereadlogic.go
  24. 1 1
      rpc/internal/logic/usermsglistlogic.go
  25. 50 26
      rpc/internal/server/messageserver.go
  26. 12 0
      rpc/message.go
  27. 21 0
      rpc/message.proto
  28. 23 13
      rpc/messageclient/message.go
  29. 363 124
      rpc/type/message/message.pb.go
  30. 735 0
      rpc/type/message/message_grpc.pb.go

+ 3 - 0
entity/message.go

@@ -1,6 +1,7 @@
 package entity
 
 import (
+	m "app.yhyue.com/moapp/jybase/mongodb"
 	"app.yhyue.com/moapp/jybase/mysql"
 	"database/sql"
 	clientv3 "go.etcd.io/etcd/client/v3"
@@ -15,6 +16,8 @@ var EtcdCli *clientv3.Client
 var Mysql *mysql.Mysql
 var MessageColumn []map[string]interface{}
 var Mysql11 *sql.DB
+var MQFW m.MongodbSim
+
 var SurvivalTime int
 var SaveConcurrencyChan chan int //  定义保存消息并发
 

+ 27 - 1
rpc/etc/message.yaml

@@ -7,6 +7,15 @@ Etcd:
   Key: message.rpc
 Timeout: 10000
 Mysql: root:=PDT49#80Z!RVv52_z@tcp(192.168.3.217:4000)/messagetest?charset=utf8mb4&parseTime=true&loc=Local
+Mongodb:
+  Address: 192.168.3.206:27080
+  Size: 10
+  DbName: qfw
+  ReplSet:
+  UserName:
+  Password:
+  Collection:
+  Collection_back:
 DataSource:
     DbName: messagetest
     Address: 192.168.3.217:4000
@@ -24,4 +33,21 @@ FileSystemConf:
       - 127.0.0.1:2379
     Key: message.rpc
 SurvivalTime: 86400
-SaveConcurrency: 10
+SaveConcurrency: 10
+
+#发送微信模版消息
+WxTmplConfig:
+  rpcAddr: 127.0.0.1:8201 #微信rpc地址
+  tmplSetting: #模版消息配置
+    jySchool: "BD_wh9LRkDzt3etWMoVq811X4x4bwaApmH8REgojt8o" #剑鱼课堂消息模版
+    system: "oN_GXBBzYnrOTxL0KNWut3sK9tQQ1_vvX_SV-3QmUgw" #系统消息模版(包含服务通知、私信)
+    closeNotice: "如不再接收此类信息,请在我的-设置-推送设置关闭设置。"
+  limit:
+    total: 300000 # 每日发送信息数量限制
+    privateMessage: #私信
+      oneDayLimit: 5 #每天私信数量限制
+      duringMine: 60 #间隔时间单位分钟
+    alert: #告警
+      nums: [ 150000,250000 ] #告警数量
+      mail: [ "wangkaiyue@topnet.net.cn" ] #告警人邮箱
+

+ 1 - 1
service/getBuoyMsg.go → rpc/internal/common/getBuoyMsg.go

@@ -1,4 +1,4 @@
-package service
+package common
 
 import (
 	"app.yhyue.com/moapp/MessageCenter/entity"

+ 2 - 2
service/messageService.go → rpc/internal/common/messageService.go

@@ -1,4 +1,4 @@
-package service
+package common
 
 import (
 	"app.yhyue.com/moapp/MessageCenter/entity"
@@ -114,7 +114,7 @@ func (service *MessageService) LastMessage(userId string, appId string, msgType
 
 }
 
-//查询消息详情
+// 查询消息详情
 func FindMessageDetail(id string) (entity.Message, error) {
 	orm := entity.Engine.NewSession()
 	defer orm.Close()

+ 1 - 1
service/sendMsg.go → rpc/internal/common/sendMsg.go

@@ -1,4 +1,4 @@
-package service
+package common
 
 import (
 	"app.yhyue.com/moapp/MessageCenter/entity"

+ 105 - 0
rpc/internal/common/sendWxTmplMsg.go

@@ -0,0 +1,105 @@
+package common
+
+import (
+	"app.yhyue.com/moapp/MessageCenter/entity"
+	"app.yhyue.com/moapp/MessageCenter/rpc/internal/config"
+	"app.yhyue.com/moapp/jybase/common"
+	m "app.yhyue.com/moapp/jybase/mongodb"
+	qrpc "app.yhyue.com/moapp/jybase/rpc"
+	"fmt"
+)
+
+// GetUserOpenIdAndWxPushState 查询微信openid微信消息通知状态
+// mId mongoUserid、oId 用户openid、pId positionId 用户职位id
+func GetUserOpenIdAndWxPushState(mId, oId, pId, settingKey string) (openId string, wxPushOpen bool) {
+	uData := func() map[string]interface{} {
+		query := map[string]interface{}{}
+		if oId != "" {
+			query["s_m_openid"] = oId
+		} else if mId != "" {
+			query["_id"] = m.StringTOBsonId(mId)
+		} else if pId != "" {
+			uInfo := entity.Mysql.SelectBySql("SELECT user_id FROM base_service.base_position WHERE id = ? ", pId)
+			if uInfo != nil && len(*uInfo) > 0 {
+				fmt.Println((*uInfo)[0]["user_id"])
+				base_user_id := common.Int64All((*uInfo)[0]["user_id"])
+				if base_user_id != 0 {
+					query["base_user_id"] = base_user_id
+				}
+			}
+		}
+		if len(query) > 0 {
+			rData, _ := entity.MQFW.FindOneByField("user", query, fmt.Sprintf(`{"s_m_openid":1,"o_pushset.%s.i_wxpush":1}`, settingKey))
+			if rData != nil && len(*rData) > 0 {
+				return *rData
+			}
+		}
+		return nil
+	}()
+	if uData == nil {
+		return openId, false
+	}
+	openId = common.ObjToString(uData["s_m_openid"])
+	if pushsetMap := common.ObjToMap(uData["o_pushset"]); pushsetMap != nil && len(*pushsetMap) > 0 {
+		if pushkeyMap := common.ObjToMap((*pushsetMap)[settingKey]); pushkeyMap != nil && len(*pushkeyMap) > 0 {
+			wxPushOpen = common.Int64All((*pushkeyMap)["i_wxpush"]) == 1
+		}
+	}
+	return
+}
+
+// sendWxTmplMsg 发送微信模版消息
+func sendWxTmplMsg(openId, tplId, link string, msg map[string]*qrpc.TmplItem) (pushOk bool) {
+	pushOk, _ = qrpc.WxSendTmplMsg(config.ConfigJson.WxTmplConfig.RpcAddr, &qrpc.WxTmplMsg{
+		OpenId:   openId,
+		TplId:    tplId,
+		TmplData: msg,
+		Url:      link,
+		//Url:      Config.WebDomain + "/front/sess/" + util.Se_Topnet.EncodeString(s_m_openid+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",msgremind") + "__" + hex.EncodeToString([]byte(fmt.Sprintf("type=%s&advertcode=%s", tp, wtmc.AdvertCode))),
+	})
+	return
+}
+
+// SendJySchoolMsg 发送剑鱼学堂类型消息
+// 标题 课程报名成功通知
+// 消息模版 课程名称 {{thing1.DATA}} 课程时间 {{time7.DATA}} 课程地点 {{thing6.DATA}} 课程类型 {{const11.DATA}}
+func SendJySchoolMsg(openId, title, date, address, class, link string) bool {
+	msg := map[string]*qrpc.TmplItem{
+		"thing1": &qrpc.TmplItem{
+			Value: title,
+		},
+		"time7": &qrpc.TmplItem{
+			Value: date,
+		},
+		"thing6": &qrpc.TmplItem{
+			Value: address,
+		},
+		"const11": &qrpc.TmplItem{
+			Value: class,
+		},
+	}
+	return sendWxTmplMsg(openId, "配置文件获取", link, msg)
+}
+
+// SendSystemMsg 系统消息模版(包含服务通知、私信)
+// 消息模版 工单类型 {{thing19.DATA}} 工单标题 {{thing6.DATA}} 项目名称 {{thing13.DATA}} 服务时间 {{time25.DATA}} 服务地址 {{thing26.DATA}}
+func SendSystemMsg(openId, msgClass, title, context, date, link string) bool {
+	msg := map[string]*qrpc.TmplItem{
+		"thing19": &qrpc.TmplItem{
+			Value: msgClass,
+		},
+		"thing6": &qrpc.TmplItem{
+			Value: title,
+		},
+		"thing13": &qrpc.TmplItem{
+			Value: context,
+		},
+		"time25": &qrpc.TmplItem{
+			Value: date,
+		},
+		"thing26": &qrpc.TmplItem{
+			Value: "如不再接收此类信息,请在我的-设置-推送设置关闭设置。",
+		},
+	}
+	return sendWxTmplMsg(openId, "配置文件获取", link, msg)
+}

+ 34 - 1
rpc/internal/config/config.go

@@ -9,8 +9,10 @@ type Config struct {
 	DataSource      *mysqlConfig // 手动代码
 	Mysql           string
 	Redis           *RedisConfig
+	Mongodb         *mgoConf
 	SurvivalTime    int
-	SaveConcurrency int // 消息保存并发数
+	SaveConcurrency int       // 消息保存并发数
+	WxTmplConfig    WxTmplMsg `json:"WxTmplConfig"`
 }
 
 type RedisConfig struct {
@@ -28,4 +30,35 @@ type mysqlConfig struct {
 	MaxIdleConns int
 }
 
+type mgoConf struct {
+	Address         string
+	Size            int
+	DbName          string
+	ReplSet         string
+	UserName        string
+	Password        string
+	Collection      string
+	Collection_back string
+}
+
 var ConfigJson Config
+
+type WxTmplMsg struct {
+	RpcAddr     string `json:"rpcAddr"`
+	TmplSetting struct {
+		JySchool    string `json:"jySchool"`
+		System      string `json:"system"`
+		CloseNotice string `json:"closeNotice"`
+	} `json:"tmplSetting"`
+	Limit struct {
+		Total          int `json:"total"`
+		PrivateMessage struct {
+			OneDayLimit int `json:"oneDayLimit"`
+			DuringMine  int `json:"duringMine"`
+		} `json:"privateMessage"`
+		Alert struct {
+			Nums []int    `json:"nums"`
+			Mail []string `json:"mail"`
+		} `json:"alert"`
+	} `json:"limit"`
+}

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

@@ -1,9 +1,9 @@
 package logic
 
 import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"context"
 
 	"github.com/zeromicro/go-zero/core/logx"

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

@@ -1,7 +1,7 @@
 package logic
 
 import (
-	"app.yhyue.com/moapp/MessageCenter/service"
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"context"
 
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"

+ 42 - 0
rpc/internal/logic/deletemultiplemessagelogic.go

@@ -0,0 +1,42 @@
+package logic
+
+import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
+	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
+	"app.yhyue.com/moapp/MessageCenter/rpc/type/message"
+	"context"
+	"strings"
+
+	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type DeleteMultipleMessageLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewDeleteMultipleMessageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteMultipleMessageLogic {
+	return &DeleteMultipleMessageLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 删除多条消息
+func (l *DeleteMultipleMessageLogic) DeleteMultipleMessage(in *messageclient.DeleteMultipleMessageRequest) (*messageclient.Response, error) {
+	// todo: add your logic here and delete this line
+	m := &service.MessageService{}
+	var idSlice []string
+	tmpList := strings.Split(in.Id, ",")
+	for _, v := range tmpList {
+		idSlice = append(idSlice, v)
+	}
+	code, msg := m.DeleteMessage(idSlice, in.Appid)
+	return &message.Response{
+		Code:    code,
+		Message: msg,
+	}, nil
+}

+ 38 - 0
rpc/internal/logic/deletesinglemessagelogic.go

@@ -0,0 +1,38 @@
+package logic
+
+import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
+	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
+	"context"
+
+	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type DeleteSingleMessageLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewDeleteSingleMessageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteSingleMessageLogic {
+	return &DeleteSingleMessageLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 删除单一消息
+func (l *DeleteSingleMessageLogic) DeleteSingleMessage(in *messageclient.DeleteSingleMessageRequest) (*messageclient.Response, error) {
+	// todo: add your logic here and delete this line
+
+	m := &service.MessageService{}
+	var idSlice []string
+	idSlice = append(idSlice, in.Id)
+	code, msg := m.DeleteMessage(idSlice, in.Appid)
+	return &messageclient.Response{
+		Code:    code,
+		Message: msg,
+	}, nil
+}

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

@@ -1,9 +1,9 @@
 package logic
 
 import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"context"
 
 	"github.com/zeromicro/go-zero/core/logx"

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

@@ -1,8 +1,8 @@
 package logic
 
 import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/type/message"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"context"
 
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"

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

@@ -4,8 +4,8 @@ import (
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
 	"context"
 
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"github.com/zeromicro/go-zero/core/logx"
 )
 

+ 2 - 2
rpc/internal/logic/getclassunreadcountlogic.go

@@ -4,8 +4,8 @@ import (
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
 	"context"
 
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"github.com/zeromicro/go-zero/core/logx"
 )
 
@@ -23,7 +23,7 @@ func NewGetClassUnreadCountLogic(ctx context.Context, svcCtx *svc.ServiceContext
 	}
 }
 
-//   查询指定用户指定分类的未读消息合计
+// 查询指定用户指定分类的未读消息合计
 func (l *GetClassUnreadCountLogic) GetClassUnreadCount(in *messageclient.GetClassUnreadCountReq) (*messageclient.GetUnreadCountResponse, error) {
 	// todo: add your logic here and delete this line
 	code, msg, count := service.ClassCountUnread(int(in.MsgType), in.UserId, in.Appid)

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

@@ -1,9 +1,9 @@
 package logic
 
 import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"context"
 
 	"github.com/zeromicro/go-zero/core/logx"
@@ -23,7 +23,7 @@ func NewGetLastMessageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Ge
 	}
 }
 
-//   获取指定分类的最新一条未读消息
+// 获取指定分类的最新一条未读消息
 func (l *GetLastMessageLogic) GetLastMessage(in *messageclient.GetLastMessageReq) (*messageclient.GetLastMessageRes, error) {
 	// todo: add your logic here and delete this line
 	m := service.MessageService{}

+ 2 - 2
rpc/internal/logic/getmsgtypelogic.go

@@ -1,8 +1,8 @@
 package logic
 
 import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"context"
 
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
@@ -23,7 +23,7 @@ func NewGetMsgTypeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetMsg
 	}
 }
 
-//   获取指定用户收到消息的分类
+// 获取指定用户收到消息的分类
 func (l *GetMsgTypeLogic) GetMsgType(in *messageclient.GetMsgTypeReq) (*messageclient.GetMsgTypeRes, error) {
 	// todo: add your logic here and delete this line
 	m := service.MessageService{}

+ 2 - 2
rpc/internal/logic/getunreadclasscountlogic.go

@@ -1,8 +1,8 @@
 package logic
 
 import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"context"
 
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
@@ -23,7 +23,7 @@ func NewGetUnreadClassCountLogic(ctx context.Context, svcCtx *svc.ServiceContext
 	}
 }
 
-//   获取指定用户的分类及未读消息的数量
+// 获取指定用户的分类及未读消息的数量
 func (l *GetUnreadClassCountLogic) GetUnreadClassCount(in *messageclient.GetUnreadClassCountReq) (*messageclient.GetUnreadClassCountRes, error) {
 	// todo: add your logic here and delete this line
 	m := service.MessageService{}

+ 2 - 2
rpc/internal/logic/getunreadcountlogic.go

@@ -1,8 +1,8 @@
 package logic
 
 import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"context"
 
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
@@ -23,7 +23,7 @@ func NewGetUnreadCountLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Ge
 	}
 }
 
-//   查询指定用户未读消息合计
+// 查询指定用户未读消息合计
 func (l *GetUnreadCountLogic) GetUnreadCount(in *messageclient.GetUnreadCountRequest) (*messageclient.GetUnreadCountResponse, error) {
 
 	m := &service.MessageService{}

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

@@ -1,8 +1,8 @@
 package logic
 
 import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"context"
 
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"

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

@@ -4,8 +4,8 @@ import (
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
 	"context"
 
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"github.com/zeromicro/go-zero/core/logx"
 )
 

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

@@ -0,0 +1,31 @@
+package logic
+
+import (
+	"context"
+
+	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/rpc/type/message"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type SendWxTmplMsgLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewSendWxTmplMsgLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SendWxTmplMsgLogic {
+	return &SendWxTmplMsgLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 发送微信模版消息
+func (l *SendWxTmplMsgLogic) SendWxTmplMsg(in *message.WxTmplMsg) (*message.Response, error) {
+	// todo: add your logic here and delete this line
+
+	return &message.Response{}, nil
+}

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

@@ -1,9 +1,9 @@
 package logic
 
 import (
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
 	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
-	"app.yhyue.com/moapp/MessageCenter/service"
 	"context"
 
 	"github.com/zeromicro/go-zero/core/logx"

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

@@ -1,7 +1,7 @@
 package logic
 
 import (
-	"app.yhyue.com/moapp/MessageCenter/service"
+	service "app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
 	"app.yhyue.com/moapp/MessageCenter/util"
 	"context"
 

+ 50 - 26
rpc/internal/server/messageserver.go

@@ -1,19 +1,19 @@
-// Code generated by goctl. DO NOT EDIT!
+// Code generated by goctl. DO NOT EDIT.
 // Source: message.proto
 
 package server
 
 import (
-	message2 "app.yhyue.com/moapp/MessageCenter/rpc/type/message"
 	"context"
 
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/logic"
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
+	"app.yhyue.com/moapp/MessageCenter/rpc/type/message"
 )
 
 type MessageServer struct {
 	svcCtx *svc.ServiceContext
-	message2.UnimplementedMessageServer
+	message.UnimplementedMessageServer
 }
 
 func NewMessageServer(svcCtx *svc.ServiceContext) *MessageServer {
@@ -23,79 +23,103 @@ func NewMessageServer(svcCtx *svc.ServiceContext) *MessageServer {
 }
 
 // 批量保存消息
-func (s *MessageServer) MultipleSaveMsg(ctx context.Context, in *message2.MultipleSaveMsgReq) (*message2.MultipleSaveMsgResp, error) {
+func (s *MessageServer) MultipleSaveMsg(ctx context.Context, in *message.MultipleSaveMsgReq) (*message.MultipleSaveMsgResp, error) {
 	l := logic.NewMultipleSaveMsgLogic(ctx, s.svcCtx)
 	return l.MultipleSaveMsg(in)
 }
 
-//  修改消息阅读状态
-func (s *MessageServer) ChangeReadStatus(ctx context.Context, in *message2.ChangeReadStatusReq) (*message2.Response, error) {
+// 修改消息阅读状态
+func (s *MessageServer) ChangeReadStatus(ctx context.Context, in *message.ChangeReadStatusRequest) (*message.Response, error) {
 	l := logic.NewChangeReadStatusLogic(ctx, s.svcCtx)
 	return l.ChangeReadStatus(in)
 }
 
 // 指定用户发消息
-func (s *MessageServer) SendUserMsg(ctx context.Context, in *message2.SendMsgRequest) (*message2.Response, error) {
+func (s *MessageServer) SendUserMsg(ctx context.Context, in *message.SendMsgRequest) (*message.Response, error) {
 	l := logic.NewSendUserMsgLogic(ctx, s.svcCtx)
 	return l.SendUserMsg(in)
 }
 
-//   查询指定用户未读消息合计
-func (s *MessageServer) GetUnreadCount(ctx context.Context, in *message2.GetUnreadCountRequest) (*message2.GetUnreadCountResponse, error) {
+// 删除单一消息
+func (s *MessageServer) DeleteSingleMessage(ctx context.Context, in *message.DeleteSingleMessageRequest) (*message.Response, error) {
+	l := logic.NewDeleteSingleMessageLogic(ctx, s.svcCtx)
+	return l.DeleteSingleMessage(in)
+}
+
+// 删除多条消息
+func (s *MessageServer) DeleteMultipleMessage(ctx context.Context, in *message.DeleteMultipleMessageRequest) (*message.Response, error) {
+	l := logic.NewDeleteMultipleMessageLogic(ctx, s.svcCtx)
+	return l.DeleteMultipleMessage(in)
+}
+
+// 查询指定用户未读消息合计
+func (s *MessageServer) GetUnreadCount(ctx context.Context, in *message.GetUnreadCountRequest) (*message.GetUnreadCountResponse, error) {
 	l := logic.NewGetUnreadCountLogic(ctx, s.svcCtx)
 	return l.GetUnreadCount(in)
 }
 
-//   查询指定用户的历史消息记录
-func (s *MessageServer) FindUserMsg(ctx context.Context, in *message2.FindUserMsgReq) (*message2.FindUserMsgRes, error) {
+// 查询指定用户的历史消息记录
+func (s *MessageServer) FindUserMsg(ctx context.Context, in *message.FindUserMsgReq) (*message.FindUserMsgRes, error) {
 	l := logic.NewFindUserMsgLogic(ctx, s.svcCtx)
 	return l.FindUserMsg(in)
 }
 
-//   查询指定用户指定分类的未读消息合计
-func (s *MessageServer) GetClassUnreadCount(ctx context.Context, in *message2.GetClassUnreadCountReq) (*message2.GetUnreadCountResponse, error) {
+// 查询指定用户指定分类的未读消息合计
+func (s *MessageServer) GetClassUnreadCount(ctx context.Context, in *message.GetClassUnreadCountReq) (*message.GetUnreadCountResponse, error) {
 	l := logic.NewGetClassUnreadCountLogic(ctx, s.svcCtx)
 	return l.GetClassUnreadCount(in)
 }
 
-//   获取指定用户指定分类的最新一条消息
-func (s *MessageServer) GetLastMessage(ctx context.Context, in *message2.GetLastMessageReq) (*message2.GetLastMessageRes, error) {
+// 获取指定用户指定分类的最新一条消息
+func (s *MessageServer) GetLastMessage(ctx context.Context, in *message.GetLastMessageReq) (*message.GetLastMessageRes, error) {
 	l := logic.NewGetLastMessageLogic(ctx, s.svcCtx)
 	return l.GetLastMessage(in)
 }
 
 // 查看详细详情
-func (s *MessageServer) FindMessageDetail(ctx context.Context, in *message2.MessageDetailReq) (*message2.MessageDetailResp, error) {
+func (s *MessageServer) FindMessageDetail(ctx context.Context, in *message.MessageDetailReq) (*message.MessageDetailResp, error) {
 	l := logic.NewFindMessageDetailLogic(ctx, s.svcCtx)
 	return l.FindMessageDetail(in)
 }
 
-//   获取指定用户的分类及未读消息数量
-func (s *MessageServer) GetUnreadClassCount(ctx context.Context, in *message2.GetUnreadClassCountReq) (*message2.GetUnreadClassCountRes, error) {
+// 获取指定用户的分类及未读消息数量
+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 *message2.GetMsgTypeReq) (*message2.GetMsgTypeRes, error) {
+// 获取指定用户收到消息的分类
+func (s *MessageServer) GetMsgType(ctx context.Context, in *message.GetMsgTypeReq) (*message.GetMsgTypeRes, error) {
 	l := logic.NewGetMsgTypeLogic(ctx, s.svcCtx)
 	return l.GetMsgType(in)
 }
 
-//   查询指定用户的浮标消息
-func (s *MessageServer) FindUserBuoyMsg(ctx context.Context, in *message2.FindUserBuoyMsgReq) (*message2.FindUserBuoyMsgRes, error) {
+// 修改用户指定分类下的消息已读未读
+func (s *MessageServer) UpdateMessageRead(ctx context.Context, in *message.UpdateMessageReadReq) (*message.UpdateMessageReadResp, error) {
+	l := logic.NewUpdateMessageReadLogic(ctx, s.svcCtx)
+	return l.UpdateMessageRead(in)
+}
+
+// 查询指定用户的浮标消息
+func (s *MessageServer) FindUserBuoyMsg(ctx context.Context, in *message.FindUserBuoyMsgReq) (*message.FindUserBuoyMsgRes, error) {
 	l := logic.NewFindUserBuoyMsgLogic(ctx, s.svcCtx)
 	return l.FindUserBuoyMsg(in)
 }
 
-//    一键清空未读消息
-func (s *MessageServer) ClearUnreadMsg(ctx context.Context, in *message2.ClearUnreadMsgReq) (*message2.Response, error) {
+// 一键清空未读消息
+func (s *MessageServer) ClearUnreadMsg(ctx context.Context, in *message.ClearUnreadMsgReq) (*message.Response, error) {
 	l := logic.NewClearUnreadMsgLogic(ctx, s.svcCtx)
 	return l.ClearUnreadMsg(in)
 }
 
-//    new用户消息列表
-func (s *MessageServer) UserMsgList(ctx context.Context, in *message2.UserMsgListReq) (*message2.UserMsgListRes, error) {
+// new用户消息列表
+func (s *MessageServer) UserMsgList(ctx context.Context, in *message.UserMsgListReq) (*message.UserMsgListRes, error) {
 	l := logic.NewUserMsgListLogic(ctx, s.svcCtx)
 	return l.UserMsgList(in)
 }
+
+// 发送微信模版消息
+func (s *MessageServer) SendWxTmplMsg(ctx context.Context, in *message.WxTmplMsg) (*message.Response, error) {
+	l := logic.NewSendWxTmplMsgLogic(ctx, s.svcCtx)
+	return l.SendWxTmplMsg(in)
+}

+ 12 - 0
rpc/message.go

@@ -9,6 +9,7 @@ import (
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/server"
 	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
 	"app.yhyue.com/moapp/MessageCenter/rpc/type/message"
+	m "app.yhyue.com/moapp/jybase/mongodb"
 	"app.yhyue.com/moapp/jybase/mysql"
 	"app.yhyue.com/moapp/jybase/redis"
 	"flag"
@@ -69,6 +70,17 @@ func init() {
 		log.Println("--初始化 redis--")
 		redis.InitRedisBySize(fmt.Sprintf("%s=%s", config.ConfigJson.Redis.Modules, config.ConfigJson.Redis.Addr), 20, 30, 300)
 	}
+	// 初始化mongo
+	if config.ConfigJson.Mongodb != nil {
+		log.Println("初始化 mongodb main")
+		entity.MQFW = m.MongodbSim{
+			MongodbAddr: config.ConfigJson.Mongodb.Address,
+			Size:        config.ConfigJson.Mongodb.Size,
+			DbName:      config.ConfigJson.Mongodb.DbName,
+			ReplSet:     config.ConfigJson.Mongodb.ReplSet,
+		}
+		entity.MQFW.InitPool()
+	}
 	// 初始化消息保存并发通道
 	entity.SaveConcurrencyChan = make(chan int, config.ConfigJson.SaveConcurrency)
 	//初始化日志信息

+ 21 - 0
rpc/message.proto

@@ -207,6 +207,18 @@ message UserMsgList {
     int64 count = 3; //总数
 }
 
+
+// 发送微信模版消息
+message WxTmplMsg {
+    string appid = 1;     //应用标识
+    string userIds = 2;   //接受人 mongo_userId(多个用,分割)
+    string openIds = 3;    //接受人 openid(多个用,分割)
+    string positionIds = 4; //接受人 职位id
+    string url = 5;       //消息跳转连接
+    int64 msgType = 6;    //信息类型 附件、图片、链接类型
+    string tmplId = 7;     //消息模版id 根据此字段判断发送模版
+}
+
 message AllSortData {
     int64 unreadMessages =1 ;
    string name =2;
@@ -215,6 +227,13 @@ message AllSortData {
    repeated Messages data = 5; //
 }
 
+
+message WxTmplResponse {
+    int64 sendTotal = 1; //发送数量
+    string message = 2; //信息
+}
+
+
 service Message {
     //批量保存消息
     rpc multipleSaveMsg (multipleSaveMsgReq) returns (multipleSaveMsgResp);
@@ -244,4 +263,6 @@ service Message {
 
     //   new用户消息列表
     rpc UserMsgList (UserMsgListReq) returns (UserMsgListRes);
+    //  发送微信模版消息
+    rpc SendWxTmplMsg (WxTmplMsg) returns(Response);
 }

+ 23 - 13
rpc/messageclient/message.go

@@ -1,4 +1,4 @@
-// Code generated by goctl. DO NOT EDIT!
+// Code generated by goctl. DO NOT EDIT.
 // Source: message.proto
 
 package messageclient
@@ -46,40 +46,44 @@ type (
 	UserMsgList                  = message.UserMsgList
 	UserMsgListReq               = message.UserMsgListReq
 	UserMsgListRes               = message.UserMsgListRes
+	WxTmplMsg                    = message.WxTmplMsg
+	WxTmplResponse               = message.WxTmplResponse
 
 	Message interface {
 		// 批量保存消息
 		MultipleSaveMsg(ctx context.Context, in *MultipleSaveMsgReq, opts ...grpc.CallOption) (*MultipleSaveMsgResp, error)
-		//  修改消息阅读状态
+		// 修改消息阅读状态
 		ChangeReadStatus(ctx context.Context, in *ChangeReadStatusRequest, opts ...grpc.CallOption) (*Response, error)
 		// 指定用户发消息
 		SendUserMsg(ctx context.Context, in *SendMsgRequest, opts ...grpc.CallOption) (*Response, error)
-		//  删除单一消息
+		// 删除单一消息
 		DeleteSingleMessage(ctx context.Context, in *DeleteSingleMessageRequest, opts ...grpc.CallOption) (*Response, error)
-		//  删除多条消息
+		// 删除多条消息
 		DeleteMultipleMessage(ctx context.Context, in *DeleteMultipleMessageRequest, opts ...grpc.CallOption) (*Response, error)
-		//   查询指定用户未读消息合计
+		// 查询指定用户未读消息合计
 		GetUnreadCount(ctx context.Context, in *GetUnreadCountRequest, opts ...grpc.CallOption) (*GetUnreadCountResponse, error)
-		//   查询指定用户的历史消息记录
+		// 查询指定用户的历史消息记录
 		FindUserMsg(ctx context.Context, in *FindUserMsgReq, opts ...grpc.CallOption) (*FindUserMsgRes, error)
-		//   查询指定用户指定分类的未读消息合计
+		// 查询指定用户指定分类的未读消息合计
 		GetClassUnreadCount(ctx context.Context, in *GetClassUnreadCountReq, opts ...grpc.CallOption) (*GetUnreadCountResponse, error)
-		//   获取指定用户指定分类的最新一条消息
+		// 获取指定用户指定分类的最新一条消息
 		GetLastMessage(ctx context.Context, in *GetLastMessageReq, opts ...grpc.CallOption) (*GetLastMessageRes, error)
 		// 查看详细详情
 		FindMessageDetail(ctx context.Context, in *MessageDetailReq, opts ...grpc.CallOption) (*MessageDetailResp, error)
-		//   获取指定用户的分类及未读消息数量
+		// 获取指定用户的分类及未读消息数量
 		GetUnreadClassCount(ctx context.Context, in *GetUnreadClassCountReq, opts ...grpc.CallOption) (*GetUnreadClassCountRes, error)
-		//   获取指定用户收到消息的分类
+		// 获取指定用户收到消息的分类
 		GetMsgType(ctx context.Context, in *GetMsgTypeReq, opts ...grpc.CallOption) (*GetMsgTypeRes, error)
 		// 修改用户指定分类下的消息已读未读
 		UpdateMessageRead(ctx context.Context, in *UpdateMessageReadReq, opts ...grpc.CallOption) (*UpdateMessageReadResp, error)
-		//   查询指定用户的浮标消息
+		// 查询指定用户的浮标消息
 		FindUserBuoyMsg(ctx context.Context, in *FindUserBuoyMsgReq, opts ...grpc.CallOption) (*FindUserBuoyMsgRes, error)
-		//    一键清空未读消息
+		// 一键清空未读消息
 		ClearUnreadMsg(ctx context.Context, in *ClearUnreadMsgReq, opts ...grpc.CallOption) (*Response, error)
-		//    new用户消息列表
+		// new用户消息列表
 		UserMsgList(ctx context.Context, in *UserMsgListReq, opts ...grpc.CallOption) (*UserMsgListRes, error)
+		// 发送微信模版消息
+		SendWxTmplMsg(ctx context.Context, in *WxTmplMsg, opts ...grpc.CallOption) (*Response, error)
 	}
 
 	defaultMessage struct {
@@ -188,3 +192,9 @@ func (m *defaultMessage) UserMsgList(ctx context.Context, in *UserMsgListReq, op
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.UserMsgList(ctx, in, opts...)
 }
+
+// 发送微信模版消息
+func (m *defaultMessage) SendWxTmplMsg(ctx context.Context, in *WxTmplMsg, opts ...grpc.CallOption) (*Response, error) {
+	client := message.NewMessageClient(m.cli.Conn())
+	return client.SendWxTmplMsg(ctx, in, opts...)
+}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 363 - 124
rpc/type/message/message.pb.go


+ 735 - 0
rpc/type/message/message_grpc.pb.go

@@ -0,0 +1,735 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc             v3.21.12
+// source: message.proto
+
+package message
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+	Message_MultipleSaveMsg_FullMethodName       = "/message.Message/multipleSaveMsg"
+	Message_ChangeReadStatus_FullMethodName      = "/message.Message/ChangeReadStatus"
+	Message_SendUserMsg_FullMethodName           = "/message.Message/SendUserMsg"
+	Message_DeleteSingleMessage_FullMethodName   = "/message.Message/DeleteSingleMessage"
+	Message_DeleteMultipleMessage_FullMethodName = "/message.Message/DeleteMultipleMessage"
+	Message_GetUnreadCount_FullMethodName        = "/message.Message/GetUnreadCount"
+	Message_FindUserMsg_FullMethodName           = "/message.Message/FindUserMsg"
+	Message_GetClassUnreadCount_FullMethodName   = "/message.Message/GetClassUnreadCount"
+	Message_GetLastMessage_FullMethodName        = "/message.Message/GetLastMessage"
+	Message_FindMessageDetail_FullMethodName     = "/message.Message/FindMessageDetail"
+	Message_GetUnreadClassCount_FullMethodName   = "/message.Message/GetUnreadClassCount"
+	Message_GetMsgType_FullMethodName            = "/message.Message/GetMsgType"
+	Message_UpdateMessageRead_FullMethodName     = "/message.Message/UpdateMessageRead"
+	Message_FindUserBuoyMsg_FullMethodName       = "/message.Message/FindUserBuoyMsg"
+	Message_ClearUnreadMsg_FullMethodName        = "/message.Message/ClearUnreadMsg"
+	Message_UserMsgList_FullMethodName           = "/message.Message/UserMsgList"
+	Message_SendWxTmplMsg_FullMethodName         = "/message.Message/SendWxTmplMsg"
+)
+
+// MessageClient is the client API for Message service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type MessageClient interface {
+	// 批量保存消息
+	MultipleSaveMsg(ctx context.Context, in *MultipleSaveMsgReq, opts ...grpc.CallOption) (*MultipleSaveMsgResp, error)
+	// 修改消息阅读状态
+	ChangeReadStatus(ctx context.Context, in *ChangeReadStatusRequest, opts ...grpc.CallOption) (*Response, error)
+	// 指定用户发消息
+	SendUserMsg(ctx context.Context, in *SendMsgRequest, opts ...grpc.CallOption) (*Response, error)
+	// 删除单一消息
+	DeleteSingleMessage(ctx context.Context, in *DeleteSingleMessageRequest, opts ...grpc.CallOption) (*Response, error)
+	// 删除多条消息
+	DeleteMultipleMessage(ctx context.Context, in *DeleteMultipleMessageRequest, opts ...grpc.CallOption) (*Response, error)
+	// 查询指定用户未读消息合计
+	GetUnreadCount(ctx context.Context, in *GetUnreadCountRequest, opts ...grpc.CallOption) (*GetUnreadCountResponse, error)
+	// 查询指定用户的历史消息记录
+	FindUserMsg(ctx context.Context, in *FindUserMsgReq, opts ...grpc.CallOption) (*FindUserMsgRes, error)
+	// 查询指定用户指定分类的未读消息合计
+	GetClassUnreadCount(ctx context.Context, in *GetClassUnreadCountReq, opts ...grpc.CallOption) (*GetUnreadCountResponse, error)
+	// 获取指定用户指定分类的最新一条消息
+	GetLastMessage(ctx context.Context, in *GetLastMessageReq, opts ...grpc.CallOption) (*GetLastMessageRes, error)
+	// 查看详细详情
+	FindMessageDetail(ctx context.Context, in *MessageDetailReq, opts ...grpc.CallOption) (*MessageDetailResp, error)
+	// 获取指定用户的分类及未读消息数量
+	GetUnreadClassCount(ctx context.Context, in *GetUnreadClassCountReq, opts ...grpc.CallOption) (*GetUnreadClassCountRes, error)
+	// 获取指定用户收到消息的分类
+	GetMsgType(ctx context.Context, in *GetMsgTypeReq, opts ...grpc.CallOption) (*GetMsgTypeRes, error)
+	// 修改用户指定分类下的消息已读未读
+	UpdateMessageRead(ctx context.Context, in *UpdateMessageReadReq, opts ...grpc.CallOption) (*UpdateMessageReadResp, error)
+	// 查询指定用户的浮标消息
+	FindUserBuoyMsg(ctx context.Context, in *FindUserBuoyMsgReq, opts ...grpc.CallOption) (*FindUserBuoyMsgRes, error)
+	// 一键清空未读消息
+	ClearUnreadMsg(ctx context.Context, in *ClearUnreadMsgReq, opts ...grpc.CallOption) (*Response, error)
+	// new用户消息列表
+	UserMsgList(ctx context.Context, in *UserMsgListReq, opts ...grpc.CallOption) (*UserMsgListRes, error)
+	// 发送微信模版消息
+	SendWxTmplMsg(ctx context.Context, in *WxTmplMsg, opts ...grpc.CallOption) (*Response, error)
+}
+
+type messageClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewMessageClient(cc grpc.ClientConnInterface) MessageClient {
+	return &messageClient{cc}
+}
+
+func (c *messageClient) MultipleSaveMsg(ctx context.Context, in *MultipleSaveMsgReq, opts ...grpc.CallOption) (*MultipleSaveMsgResp, error) {
+	out := new(MultipleSaveMsgResp)
+	err := c.cc.Invoke(ctx, Message_MultipleSaveMsg_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) ChangeReadStatus(ctx context.Context, in *ChangeReadStatusRequest, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, Message_ChangeReadStatus_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) SendUserMsg(ctx context.Context, in *SendMsgRequest, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, Message_SendUserMsg_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) DeleteSingleMessage(ctx context.Context, in *DeleteSingleMessageRequest, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, Message_DeleteSingleMessage_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) DeleteMultipleMessage(ctx context.Context, in *DeleteMultipleMessageRequest, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, Message_DeleteMultipleMessage_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) GetUnreadCount(ctx context.Context, in *GetUnreadCountRequest, opts ...grpc.CallOption) (*GetUnreadCountResponse, error) {
+	out := new(GetUnreadCountResponse)
+	err := c.cc.Invoke(ctx, Message_GetUnreadCount_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) FindUserMsg(ctx context.Context, in *FindUserMsgReq, opts ...grpc.CallOption) (*FindUserMsgRes, error) {
+	out := new(FindUserMsgRes)
+	err := c.cc.Invoke(ctx, Message_FindUserMsg_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) GetClassUnreadCount(ctx context.Context, in *GetClassUnreadCountReq, opts ...grpc.CallOption) (*GetUnreadCountResponse, error) {
+	out := new(GetUnreadCountResponse)
+	err := c.cc.Invoke(ctx, Message_GetClassUnreadCount_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) GetLastMessage(ctx context.Context, in *GetLastMessageReq, opts ...grpc.CallOption) (*GetLastMessageRes, error) {
+	out := new(GetLastMessageRes)
+	err := c.cc.Invoke(ctx, Message_GetLastMessage_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) FindMessageDetail(ctx context.Context, in *MessageDetailReq, opts ...grpc.CallOption) (*MessageDetailResp, error) {
+	out := new(MessageDetailResp)
+	err := c.cc.Invoke(ctx, Message_FindMessageDetail_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) GetUnreadClassCount(ctx context.Context, in *GetUnreadClassCountReq, opts ...grpc.CallOption) (*GetUnreadClassCountRes, error) {
+	out := new(GetUnreadClassCountRes)
+	err := c.cc.Invoke(ctx, Message_GetUnreadClassCount_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) GetMsgType(ctx context.Context, in *GetMsgTypeReq, opts ...grpc.CallOption) (*GetMsgTypeRes, error) {
+	out := new(GetMsgTypeRes)
+	err := c.cc.Invoke(ctx, Message_GetMsgType_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) UpdateMessageRead(ctx context.Context, in *UpdateMessageReadReq, opts ...grpc.CallOption) (*UpdateMessageReadResp, error) {
+	out := new(UpdateMessageReadResp)
+	err := c.cc.Invoke(ctx, Message_UpdateMessageRead_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) FindUserBuoyMsg(ctx context.Context, in *FindUserBuoyMsgReq, opts ...grpc.CallOption) (*FindUserBuoyMsgRes, error) {
+	out := new(FindUserBuoyMsgRes)
+	err := c.cc.Invoke(ctx, Message_FindUserBuoyMsg_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) ClearUnreadMsg(ctx context.Context, in *ClearUnreadMsgReq, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, Message_ClearUnreadMsg_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) UserMsgList(ctx context.Context, in *UserMsgListReq, opts ...grpc.CallOption) (*UserMsgListRes, error) {
+	out := new(UserMsgListRes)
+	err := c.cc.Invoke(ctx, Message_UserMsgList_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *messageClient) SendWxTmplMsg(ctx context.Context, in *WxTmplMsg, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, Message_SendWxTmplMsg_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// MessageServer is the server API for Message service.
+// All implementations must embed UnimplementedMessageServer
+// for forward compatibility
+type MessageServer interface {
+	// 批量保存消息
+	MultipleSaveMsg(context.Context, *MultipleSaveMsgReq) (*MultipleSaveMsgResp, error)
+	// 修改消息阅读状态
+	ChangeReadStatus(context.Context, *ChangeReadStatusRequest) (*Response, error)
+	// 指定用户发消息
+	SendUserMsg(context.Context, *SendMsgRequest) (*Response, error)
+	// 删除单一消息
+	DeleteSingleMessage(context.Context, *DeleteSingleMessageRequest) (*Response, error)
+	// 删除多条消息
+	DeleteMultipleMessage(context.Context, *DeleteMultipleMessageRequest) (*Response, error)
+	// 查询指定用户未读消息合计
+	GetUnreadCount(context.Context, *GetUnreadCountRequest) (*GetUnreadCountResponse, error)
+	// 查询指定用户的历史消息记录
+	FindUserMsg(context.Context, *FindUserMsgReq) (*FindUserMsgRes, error)
+	// 查询指定用户指定分类的未读消息合计
+	GetClassUnreadCount(context.Context, *GetClassUnreadCountReq) (*GetUnreadCountResponse, error)
+	// 获取指定用户指定分类的最新一条消息
+	GetLastMessage(context.Context, *GetLastMessageReq) (*GetLastMessageRes, error)
+	// 查看详细详情
+	FindMessageDetail(context.Context, *MessageDetailReq) (*MessageDetailResp, error)
+	// 获取指定用户的分类及未读消息数量
+	GetUnreadClassCount(context.Context, *GetUnreadClassCountReq) (*GetUnreadClassCountRes, error)
+	// 获取指定用户收到消息的分类
+	GetMsgType(context.Context, *GetMsgTypeReq) (*GetMsgTypeRes, error)
+	// 修改用户指定分类下的消息已读未读
+	UpdateMessageRead(context.Context, *UpdateMessageReadReq) (*UpdateMessageReadResp, error)
+	// 查询指定用户的浮标消息
+	FindUserBuoyMsg(context.Context, *FindUserBuoyMsgReq) (*FindUserBuoyMsgRes, error)
+	// 一键清空未读消息
+	ClearUnreadMsg(context.Context, *ClearUnreadMsgReq) (*Response, error)
+	// new用户消息列表
+	UserMsgList(context.Context, *UserMsgListReq) (*UserMsgListRes, error)
+	// 发送微信模版消息
+	SendWxTmplMsg(context.Context, *WxTmplMsg) (*Response, error)
+	mustEmbedUnimplementedMessageServer()
+}
+
+// UnimplementedMessageServer must be embedded to have forward compatible implementations.
+type UnimplementedMessageServer struct {
+}
+
+func (UnimplementedMessageServer) MultipleSaveMsg(context.Context, *MultipleSaveMsgReq) (*MultipleSaveMsgResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MultipleSaveMsg not implemented")
+}
+func (UnimplementedMessageServer) ChangeReadStatus(context.Context, *ChangeReadStatusRequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ChangeReadStatus not implemented")
+}
+func (UnimplementedMessageServer) SendUserMsg(context.Context, *SendMsgRequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SendUserMsg not implemented")
+}
+func (UnimplementedMessageServer) DeleteSingleMessage(context.Context, *DeleteSingleMessageRequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteSingleMessage not implemented")
+}
+func (UnimplementedMessageServer) DeleteMultipleMessage(context.Context, *DeleteMultipleMessageRequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteMultipleMessage not implemented")
+}
+func (UnimplementedMessageServer) GetUnreadCount(context.Context, *GetUnreadCountRequest) (*GetUnreadCountResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetUnreadCount not implemented")
+}
+func (UnimplementedMessageServer) FindUserMsg(context.Context, *FindUserMsgReq) (*FindUserMsgRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindUserMsg not implemented")
+}
+func (UnimplementedMessageServer) GetClassUnreadCount(context.Context, *GetClassUnreadCountReq) (*GetUnreadCountResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetClassUnreadCount not implemented")
+}
+func (UnimplementedMessageServer) GetLastMessage(context.Context, *GetLastMessageReq) (*GetLastMessageRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetLastMessage not implemented")
+}
+func (UnimplementedMessageServer) FindMessageDetail(context.Context, *MessageDetailReq) (*MessageDetailResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindMessageDetail not implemented")
+}
+func (UnimplementedMessageServer) GetUnreadClassCount(context.Context, *GetUnreadClassCountReq) (*GetUnreadClassCountRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetUnreadClassCount not implemented")
+}
+func (UnimplementedMessageServer) GetMsgType(context.Context, *GetMsgTypeReq) (*GetMsgTypeRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetMsgType not implemented")
+}
+func (UnimplementedMessageServer) UpdateMessageRead(context.Context, *UpdateMessageReadReq) (*UpdateMessageReadResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateMessageRead not implemented")
+}
+func (UnimplementedMessageServer) FindUserBuoyMsg(context.Context, *FindUserBuoyMsgReq) (*FindUserBuoyMsgRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindUserBuoyMsg not implemented")
+}
+func (UnimplementedMessageServer) ClearUnreadMsg(context.Context, *ClearUnreadMsgReq) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ClearUnreadMsg not implemented")
+}
+func (UnimplementedMessageServer) UserMsgList(context.Context, *UserMsgListReq) (*UserMsgListRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UserMsgList not implemented")
+}
+func (UnimplementedMessageServer) SendWxTmplMsg(context.Context, *WxTmplMsg) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SendWxTmplMsg not implemented")
+}
+func (UnimplementedMessageServer) mustEmbedUnimplementedMessageServer() {}
+
+// UnsafeMessageServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to MessageServer will
+// result in compilation errors.
+type UnsafeMessageServer interface {
+	mustEmbedUnimplementedMessageServer()
+}
+
+func RegisterMessageServer(s grpc.ServiceRegistrar, srv MessageServer) {
+	s.RegisterService(&Message_ServiceDesc, srv)
+}
+
+func _Message_MultipleSaveMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MultipleSaveMsgReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).MultipleSaveMsg(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_MultipleSaveMsg_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).MultipleSaveMsg(ctx, req.(*MultipleSaveMsgReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_ChangeReadStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ChangeReadStatusRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).ChangeReadStatus(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_ChangeReadStatus_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).ChangeReadStatus(ctx, req.(*ChangeReadStatusRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_SendUserMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SendMsgRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).SendUserMsg(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_SendUserMsg_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).SendUserMsg(ctx, req.(*SendMsgRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_DeleteSingleMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteSingleMessageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).DeleteSingleMessage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_DeleteSingleMessage_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).DeleteSingleMessage(ctx, req.(*DeleteSingleMessageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_DeleteMultipleMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteMultipleMessageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).DeleteMultipleMessage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_DeleteMultipleMessage_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).DeleteMultipleMessage(ctx, req.(*DeleteMultipleMessageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_GetUnreadCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetUnreadCountRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).GetUnreadCount(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_GetUnreadCount_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).GetUnreadCount(ctx, req.(*GetUnreadCountRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_FindUserMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FindUserMsgReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).FindUserMsg(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_FindUserMsg_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).FindUserMsg(ctx, req.(*FindUserMsgReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_GetClassUnreadCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetClassUnreadCountReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).GetClassUnreadCount(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_GetClassUnreadCount_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).GetClassUnreadCount(ctx, req.(*GetClassUnreadCountReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_GetLastMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetLastMessageReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).GetLastMessage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_GetLastMessage_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).GetLastMessage(ctx, req.(*GetLastMessageReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_FindMessageDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MessageDetailReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).FindMessageDetail(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_FindMessageDetail_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).FindMessageDetail(ctx, req.(*MessageDetailReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_GetUnreadClassCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetUnreadClassCountReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).GetUnreadClassCount(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_GetUnreadClassCount_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).GetUnreadClassCount(ctx, req.(*GetUnreadClassCountReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_GetMsgType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetMsgTypeReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).GetMsgType(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_GetMsgType_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).GetMsgType(ctx, req.(*GetMsgTypeReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_UpdateMessageRead_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateMessageReadReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).UpdateMessageRead(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_UpdateMessageRead_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).UpdateMessageRead(ctx, req.(*UpdateMessageReadReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_FindUserBuoyMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FindUserBuoyMsgReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).FindUserBuoyMsg(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_FindUserBuoyMsg_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).FindUserBuoyMsg(ctx, req.(*FindUserBuoyMsgReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_ClearUnreadMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ClearUnreadMsgReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).ClearUnreadMsg(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_ClearUnreadMsg_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).ClearUnreadMsg(ctx, req.(*ClearUnreadMsgReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_UserMsgList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UserMsgListReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).UserMsgList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_UserMsgList_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).UserMsgList(ctx, req.(*UserMsgListReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Message_SendWxTmplMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(WxTmplMsg)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MessageServer).SendWxTmplMsg(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Message_SendWxTmplMsg_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).SendWxTmplMsg(ctx, req.(*WxTmplMsg))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// Message_ServiceDesc is the grpc.ServiceDesc for Message service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Message_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "message.Message",
+	HandlerType: (*MessageServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "multipleSaveMsg",
+			Handler:    _Message_MultipleSaveMsg_Handler,
+		},
+		{
+			MethodName: "ChangeReadStatus",
+			Handler:    _Message_ChangeReadStatus_Handler,
+		},
+		{
+			MethodName: "SendUserMsg",
+			Handler:    _Message_SendUserMsg_Handler,
+		},
+		{
+			MethodName: "DeleteSingleMessage",
+			Handler:    _Message_DeleteSingleMessage_Handler,
+		},
+		{
+			MethodName: "DeleteMultipleMessage",
+			Handler:    _Message_DeleteMultipleMessage_Handler,
+		},
+		{
+			MethodName: "GetUnreadCount",
+			Handler:    _Message_GetUnreadCount_Handler,
+		},
+		{
+			MethodName: "FindUserMsg",
+			Handler:    _Message_FindUserMsg_Handler,
+		},
+		{
+			MethodName: "GetClassUnreadCount",
+			Handler:    _Message_GetClassUnreadCount_Handler,
+		},
+		{
+			MethodName: "GetLastMessage",
+			Handler:    _Message_GetLastMessage_Handler,
+		},
+		{
+			MethodName: "FindMessageDetail",
+			Handler:    _Message_FindMessageDetail_Handler,
+		},
+		{
+			MethodName: "GetUnreadClassCount",
+			Handler:    _Message_GetUnreadClassCount_Handler,
+		},
+		{
+			MethodName: "GetMsgType",
+			Handler:    _Message_GetMsgType_Handler,
+		},
+		{
+			MethodName: "UpdateMessageRead",
+			Handler:    _Message_UpdateMessageRead_Handler,
+		},
+		{
+			MethodName: "FindUserBuoyMsg",
+			Handler:    _Message_FindUserBuoyMsg_Handler,
+		},
+		{
+			MethodName: "ClearUnreadMsg",
+			Handler:    _Message_ClearUnreadMsg_Handler,
+		},
+		{
+			MethodName: "UserMsgList",
+			Handler:    _Message_UserMsgList_Handler,
+		},
+		{
+			MethodName: "SendWxTmplMsg",
+			Handler:    _Message_SendWxTmplMsg_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "message.proto",
+}

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است