Forráskód Böngészése

wip:微信模版消息发送方法合并

wangkaiyue 2 éve
szülő
commit
5254f6da8c

+ 1 - 1
api/internal/logic/sendwxtmplmsglogic.go

@@ -25,7 +25,7 @@ func NewSendWxTmplMsgLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Sen
 }
 
 func (l *SendWxTmplMsgLogic) SendWxTmplMsg(req *types.WxTmplMessageReq) (resp *types.WxTmplMessageResponse, err error) {
-	res, err := l.svcCtx.MessageCenter.SendWxTmplSystemDefaultMsg(l.ctx, &messageclient.SystemDefaultMsg{
+	res, err := l.svcCtx.MessageCenter.SendWxTmplMsg(l.ctx, &messageclient.WxTmplMsgRequest{
 		UserIds:      req.UserIds,
 		PositionIds:  req.PositionIds,
 		MessageClass: req.Class,

+ 4 - 7
rpc/etc/message.yaml

@@ -30,11 +30,11 @@ BaseSource:
   PassWord: =PDT49#80Z!RVv52_z
   MaxOpenConns: 50
   MaxIdleConns: 50
-RedisAddr: "msgCount=192.168.3.149:1713"
+RedisAddr: "msgCount=127.0.0.1:6379"
 FileSystemConf:
   Etcd:
     Hosts:
-      - 127.0.0.1:2379
+      - 192.168.3.206:2379
     Key: message.rpc
 SurvivalTime: 86400
 SaveConcurrency: 10
@@ -51,11 +51,8 @@ mail:
 
 #发送微信模版消息
 WxTmplConfig:
-  rpcAddr: 127.0.0.1:8201 #微信rpc地址
-  tmplSetting: #模版消息配置
-    jySchoolTmplId: "BD_wh9LRkDzt3etWMoVq811X4x4bwaApmH8REgojt8o" #剑鱼课堂消息模版
-    systemTmplId: "oN_GXBBzYnrOTxL0KNWut3sK9tQQ1_vvX_SV-3QmUgw" #系统消息模版(包含服务通知、私信)
-    closeNotice: "如不再接收此类信息,请在我的-设置-推送设置关闭设置。"
+  rpcAddr: 127.0.0.1:8083 #微信rpc地址
+  closeNotice: "如不再接收此类信息,请在我的-设置-推送设置关闭设置。"
   limit:
     total: 300000 # 每日发送信息数量限制
     oneDayLimit: 5 #每天私信数量限制

+ 76 - 28
rpc/internal/common/sendWxTmplMsg.go

@@ -9,6 +9,7 @@ import (
 	m "app.yhyue.com/moapp/jybase/mongodb"
 	"app.yhyue.com/moapp/jybase/redis"
 	qrpc "app.yhyue.com/moapp/jybase/rpc"
+	"encoding/json"
 	"fmt"
 	"strings"
 	"time"
@@ -16,38 +17,43 @@ import (
 
 type WxTmplPush struct {
 	MgoId, OpenId, Position string //UserId 用户mgoId, OpenId 微信id, Position 职位id
-	MessageClass            string //对应是否开启推送的key
-	PushTmplId              string //推送模版id
+	Config                  *WxTmplConfig
+}
+
+var AllMsgType func() map[string]WxTmplConfig
+var allMsgValueKeys = []string{"$class", "$title", "$detail", "$date", "$note"}
+
+type WxTmplConfig struct {
+	Name      string //信息名称
+	Switch    string //开关
+	TmplId    string //微信模版id
+	TmplValue string //微信模版
 }
 
 const CacheDb = "msgCount"
 
-func MessageType() (func() map[string]string, []map[string]interface{}) {
+func MessageType() (func() map[string]WxTmplConfig, []map[string]interface{}) {
 	var data []map[string]interface{}
 	rData := entity.Mysql.SelectBySql("SELECT * FROM message_column ORDER BY sequence ASC")
-	switchName := map[string]string{}
+	switchName := map[string]WxTmplConfig{}
 	if rData != nil && len(*rData) > 0 {
 		data = *rData
 		for _, mData := range *rData {
-			if settingKey, messageName := util.ObjToString(mData["switch"]), util.ObjToString(mData["name"]); settingKey == "" && messageName == "" {
-				switchName[settingKey] = messageName
+			if settingKey, messageName, tmplId, tmplValue := util.ObjToString(mData["switch"]), util.ObjToString(mData["name"]), util.ObjToString(mData["wxtmplId"]), util.ObjToString(mData["wxtmpValue"]); settingKey != "" && messageName != "" && tmplId != "" && tmplValue != "" {
+				switchName[settingKey] = WxTmplConfig{
+					Name:      messageName,
+					Switch:    settingKey,
+					TmplId:    tmplId,
+					TmplValue: tmplValue,
+				}
 			}
 		}
 	}
-	return func() map[string]string {
+	return func() map[string]WxTmplConfig {
 		return switchName
 	}, data
 }
 
-type WxConfig struct {
-	Name      string //信息名称
-	Switch    string //开关
-	tmplId    string //微信模版id
-	tmplValue string //微信模版
-}
-
-var AllMsgType func() map[string]string
-
 var getSendTotalRedisKey = func(uFlag ...string) string {
 	if len(uFlag) == 0 { //统计当日信息总发送量
 		return fmt.Sprintf("messageCenter_SendWxMsgTotal_%s", time.Now().Format(dataFormat.Date_yyyyMMdd))
@@ -55,22 +61,32 @@ var getSendTotalRedisKey = func(uFlag ...string) string {
 	return fmt.Sprintf("messageCenter_SendWxMsgTotal_%s_%s", time.Now().Format(dataFormat.Date_yyyyMMdd), uFlag[0])
 }
 
-func (stm *WxTmplPush) SendMsg(link string, getMsg func() map[string]*qrpc.TmplItem) error {
-	if stm.PushTmplId == "" || stm.MessageClass == "" || (stm.MgoId != "" && stm.OpenId != "" && stm.Position != "") {
-		return fmt.Errorf("缺少参数")
+func GetWxTmplConfig(class string) (*WxTmplConfig, error) {
+	if val, ok := AllMsgType()[class]; ok {
+		return &val, nil
 	}
-	if AllMsgType()[stm.MessageClass] == "" {
-		return fmt.Errorf("未知消息类型")
+	return nil, fmt.Errorf("未知消息类型")
+}
+
+func (stm *WxTmplPush) SendMsg(link, title, detail, date string) error {
+	if stm.Config.TmplId == "" || (stm.MgoId != "" && stm.OpenId != "" && stm.Position != "") {
+		return fmt.Errorf("缺少参数")
 	}
+	// 校验推送是否开启
 	if err := stm.getUserOpenIdAndWxPushState(); err != nil {
 		return err
 	}
-	//校验发送量及频率
+	// 校验发送量及频率
 	if err := stm.Check(); err != nil {
 		return err
 	}
+	// 获取消息
+	msg, err := stm.getMessage(title, detail, date)
+	if err != nil {
+		return err
+	}
 	// 发送信息
-	if _, err := stm.Send(link, getMsg()); err != nil {
+	if _, err := stm.Send(link, msg); err != nil {
 		return err
 	}
 	// 发送数量计数
@@ -78,6 +94,32 @@ func (stm *WxTmplPush) SendMsg(link string, getMsg func() map[string]*qrpc.TmplI
 	return nil
 }
 
+// getMessage 获取消息内容
+func (stm *WxTmplPush) getMessage(title, detail, date string) (map[string]*qrpc.TmplItem, error) {
+	var formatValue string = stm.Config.TmplValue
+	for _, key := range allMsgValueKeys {
+		switch key {
+		case "$class":
+			formatValue = strings.ReplaceAll(formatValue, key, stm.Config.Name)
+		case "$title":
+			formatValue = strings.ReplaceAll(formatValue, key, title)
+		case "$detail":
+			formatValue = strings.ReplaceAll(formatValue, key, detail)
+		case "$date":
+			formatValue = strings.ReplaceAll(formatValue, key, date)
+		case "$note":
+			formatValue = strings.ReplaceAll(formatValue, key, config.ConfigJson.WxTmplConfig.CloseNotice)
+		}
+	}
+	bValue := map[string]*qrpc.TmplItem{}
+	if err := json.Unmarshal([]byte(formatValue), &bValue); err != nil {
+		return nil, fmt.Errorf("格式化信息内容异常 %s", err.Error())
+	}
+	return bValue, nil
+
+}
+
+// Check 校验发送量和频率
 func (stm *WxTmplPush) Check() error {
 	uCache, allCache := getSendTotalRedisKey(stm.OpenId), getSendTotalRedisKey()
 	//校验当日微信模版发送总量
@@ -99,9 +141,11 @@ func (stm *WxTmplPush) IncrCount() {
 	uCache, allCache := getSendTotalRedisKey(stm.OpenId), getSendTotalRedisKey() //当日微信模版消息发送总量
 	var total int64
 	if total = redis.Incr(CacheDb, allCache); total == 1 {
-		_ = redis.SetExpire(CacheDb, allCache, 60*60*24*7)
+		_ = redis.SetExpire(CacheDb, allCache, 60*60*24)
 	}
-	redis.Incr(CacheDb, uCache)                                                                                   //当日用户发送数量
+	if uTotal := redis.Incr(CacheDb, uCache); uTotal == 1 {
+		_ = redis.SetExpire(CacheDb, uCache, 60*60*24)
+	} //当日用户发送数量
 	redis.Put(CacheDb, fmt.Sprintf("%s_sendwait", uCache), 1, config.ConfigJson.WxTmplConfig.Limit.DuringMine*60) //下次发送时间
 
 	for _, num := range config.ConfigJson.WxTmplConfig.Limit.Alert.Nums {
@@ -130,7 +174,7 @@ func (stm *WxTmplPush) getUserOpenIdAndWxPushState() error {
 			}
 		}
 		if len(query) > 0 {
-			rData, _ := entity.MQFW.FindOneByField("user", query, fmt.Sprintf(`{"s_m_openid":1,"o_pushset.%s.i_wxpush":1}`, stm.MessageClass))
+			rData, _ := entity.MQFW.FindOneByField("user", query, fmt.Sprintf(`{"s_m_openid":1,"o_pushset.%s.i_wxpush":1}`, stm.Config.Switch))
 			if rData != nil && len(*rData) > 0 {
 				return *rData
 			}
@@ -138,10 +182,14 @@ func (stm *WxTmplPush) getUserOpenIdAndWxPushState() error {
 		return nil
 	}()
 	if uData == nil {
+		return fmt.Errorf("未查询到用户信息")
+	}
+	stm.OpenId = common.ObjToString(uData["s_m_openid"])
+	if stm.OpenId == "" {
 		return fmt.Errorf("未查询到用户微信信息")
 	}
 	if pushSetMap := common.ObjToMap(uData["o_pushset"]); pushSetMap != nil && len(*pushSetMap) > 0 {
-		if pushKeyMap := common.ObjToMap((*pushSetMap)[stm.MessageClass]); pushKeyMap != nil && len(*pushKeyMap) > 0 {
+		if pushKeyMap := common.ObjToMap((*pushSetMap)[stm.Config.Switch]); pushKeyMap != nil && len(*pushKeyMap) > 0 {
 			if common.Int64All((*pushKeyMap)["i_wxpush"]) == 1 {
 				return nil
 			}
@@ -154,7 +202,7 @@ func (stm *WxTmplPush) getUserOpenIdAndWxPushState() error {
 func (stm *WxTmplPush) Send(link string, msg map[string]*qrpc.TmplItem) (pushOk bool, err error) {
 	return qrpc.WxSendTmplMsg(config.ConfigJson.WxTmplConfig.RpcAddr, &qrpc.WxTmplMsg{
 		OpenId:   stm.OpenId,
-		TplId:    stm.PushTmplId,
+		TplId:    stm.Config.TmplId,
 		TmplData: msg,
 		Url:      link,
 	})

+ 2 - 6
rpc/internal/config/config.go

@@ -47,12 +47,8 @@ var ConfigJson Config
 
 type WxTmplMsg struct {
 	RpcAddr     string `json:"rpcAddr"`
-	TmplSetting struct {
-		JySchoolTmplId string `json:"jySchoolTmplId"`
-		SystemTmplId   string `json:"systemTmplId"`
-		CloseNotice    string `json:"closeNotice"`
-	} `json:"tmplSetting"`
-	Limit struct {
+	CloseNotice string `json:"closeNotice"`
+	Limit       struct {
 		Total       int `json:"total"`
 		OneDayLimit int `json:"oneDayLimit"`
 		DuringMine  int `json:"duringMine"`

+ 0 - 70
rpc/internal/logic/sendwxtmpljyschoolmsglogic.go

@@ -1,70 +0,0 @@
-package logic
-
-import (
-	"app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
-	"app.yhyue.com/moapp/MessageCenter/rpc/internal/config"
-	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
-	"app.yhyue.com/moapp/MessageCenter/rpc/type/message"
-	"app.yhyue.com/moapp/MessageCenter/util"
-	qrpc "app.yhyue.com/moapp/jybase/rpc"
-	"context"
-	"strings"
-
-	"github.com/zeromicro/go-zero/core/logx"
-)
-
-type SendWxTmplJySchoolMsgLogic struct {
-	ctx    context.Context
-	svcCtx *svc.ServiceContext
-	logx.Logger
-}
-
-func NewSendWxTmplJySchoolMsgLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SendWxTmplJySchoolMsgLogic {
-	return &SendWxTmplJySchoolMsgLogic{
-		ctx:    ctx,
-		svcCtx: svcCtx,
-		Logger: logx.WithContext(ctx),
-	}
-}
-
-// SendWxTmplJySchoolMsg 发送剑鱼学堂微信模版消息
-func (l *SendWxTmplJySchoolMsgLogic) SendWxTmplJySchoolMsg(in *message.JySchoolMsg) (*message.SendMsgResponse, error) {
-	var total int
-	userIdArr := strings.Split(in.UserIds, ",")
-	for index, userId := range userIdArr {
-		p := &common.WxTmplPush{
-			MgoId:        userId,
-			MessageClass: "o_msg_jyschool",
-			PushTmplId:   config.ConfigJson.WxTmplConfig.TmplSetting.JySchoolTmplId,
-		}
-		err := p.SendMsg(in.Url, func() map[string]*qrpc.TmplItem {
-			// 消息模版 课程名称 {{thing1.DATA}} 课程时间 {{time7.DATA}} 课程地点 {{thing6.DATA}} 课程类型 {{const11.DATA}}
-			return map[string]*qrpc.TmplItem{
-				"thing1": &qrpc.TmplItem{
-					Value: in.Title,
-				},
-				"time7": &qrpc.TmplItem{
-					Value: in.Date,
-				},
-				"thing6": &qrpc.TmplItem{
-					Value: in.Address,
-				},
-				"const11": &qrpc.TmplItem{
-					Value: config.ConfigJson.WxTmplConfig.TmplSetting.CloseNotice,
-				},
-			}
-		})
-		if err != nil {
-			logx.Error(err)
-		} else {
-			total++
-		}
-		if index%10 == 0 {
-			logx.Infof("共%d条,已送达%d条,失败%d条", len(userIdArr), total, index-total)
-		}
-	}
-	return &message.SendMsgResponse{
-		Total:   util.Int64All(total),
-		Message: "",
-	}, nil
-}

+ 0 - 89
rpc/internal/logic/sendwxtmplsystemdefaultmsglogic.go

@@ -1,89 +0,0 @@
-package logic
-
-import (
-	"app.yhyue.com/moapp/MessageCenter/rpc/internal/common"
-	"app.yhyue.com/moapp/MessageCenter/rpc/internal/config"
-	"app.yhyue.com/moapp/MessageCenter/util"
-	qrpc "app.yhyue.com/moapp/jybase/rpc"
-	"context"
-	"strings"
-
-	"app.yhyue.com/moapp/MessageCenter/rpc/internal/svc"
-	"app.yhyue.com/moapp/MessageCenter/rpc/type/message"
-
-	"github.com/zeromicro/go-zero/core/logx"
-)
-
-type SendWxTmplSystemDefaultMsgLogic struct {
-	ctx    context.Context
-	svcCtx *svc.ServiceContext
-	logx.Logger
-}
-
-func NewSendWxTmplSystemDefaultMsgLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SendWxTmplSystemDefaultMsgLogic {
-	return &SendWxTmplSystemDefaultMsgLogic{
-		ctx:    ctx,
-		svcCtx: svcCtx,
-		Logger: logx.WithContext(ctx),
-	}
-}
-
-// SendWxTmplSystemDefaultMsg 发送剑鱼系统通用模版消息
-func (l *SendWxTmplSystemDefaultMsgLogic) SendWxTmplSystemDefaultMsg(in *message.SystemDefaultMsg) (*message.SendMsgResponse, error) {
-	total, uFlag := 0, 0
-	var userArr []string
-	if in.UserIds != "" {
-		userArr, uFlag = strings.Split(in.UserIds, ","), 1
-	} else if in.PositionIds != "" {
-		userArr, uFlag = strings.Split(in.PositionIds, ","), 2
-	}
-	if len(userArr) == 0 {
-		return &message.SendMsgResponse{
-			Total:   0,
-			Message: "用户列表为空",
-		}, nil
-	}
-	for index, uId := range userArr {
-		p := &common.WxTmplPush{
-			MessageClass: in.MessageClass,
-			PushTmplId:   config.ConfigJson.WxTmplConfig.TmplSetting.SystemTmplId,
-		}
-		if uFlag == 1 {
-			p.MgoId = uId
-		} else if uFlag == 2 {
-			p.Position = uId
-		}
-
-		// 消息模版 工单类型 {{thing19.DATA}} 工单标题 {{thing6.DATA}} 项目名称 {{thing13.DATA}} 服务时间 {{time25.DATA}} 服务地址 {{thing26.DATA}}
-		err := p.SendMsg(in.Url, func() map[string]*qrpc.TmplItem {
-			return map[string]*qrpc.TmplItem{
-				"thing19": &qrpc.TmplItem{
-					Value: common.AllMsgType()[in.MessageClass],
-				},
-				"thing6": &qrpc.TmplItem{
-					Value: in.Title,
-				},
-				"thing13": &qrpc.TmplItem{
-					Value: in.Detail,
-				},
-				"time25": &qrpc.TmplItem{
-					Value: in.Date,
-				},
-				"thing26": &qrpc.TmplItem{
-					Value: config.ConfigJson.WxTmplConfig.TmplSetting.CloseNotice,
-				},
-			}
-		})
-		if err != nil {
-			logx.Error(err)
-		} else {
-			total++
-		}
-		if index%10 == 0 {
-			logx.Infof("共%d条,已送达%d条,失败%d条", len(userArr), total, index-total)
-		}
-	}
-	return &message.SendMsgResponse{
-		Total: util.Int64All(total),
-	}, nil
-}

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

@@ -1,4 +1,4 @@
-// Code generated by goctl. DO NOT EDIT!
+// Code generated by goctl. DO NOT EDIT.
 // Source: message.proto
 
 package server
@@ -28,13 +28,13 @@ func (s *MessageServer) MultipleSaveMsg(ctx context.Context, in *message.Multipl
 	return l.MultipleSaveMsg(in)
 }
 
-//  修改消息阅读状态
+// 修改消息阅读状态
 func (s *MessageServer) ChangeReadStatus(ctx context.Context, in *message.ChangeReadStatusReq) (*message.Response, error) {
 	l := logic.NewChangeReadStatusLogic(ctx, s.svcCtx)
 	return l.ChangeReadStatus(in)
 }
 
-//   查询指定用户的历史消息记录
+// 查询指定用户的历史消息记录
 func (s *MessageServer) FindUserMsg(ctx context.Context, in *message.FindUserMsgReq) (*message.FindUserMsgRes, error) {
 	l := logic.NewFindUserMsgLogic(ctx, s.svcCtx)
 	return l.FindUserMsg(in)
@@ -46,37 +46,37 @@ func (s *MessageServer) FindMessageDetail(ctx context.Context, in *message.Messa
 	return l.FindMessageDetail(in)
 }
 
-//   消息的分类
+// 消息的分类
 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 *message.FindUserBuoyMsgReq) (*message.FindUserBuoyMsgRes, error) {
 	l := logic.NewFindUserBuoyMsgLogic(ctx, s.svcCtx)
 	return l.FindUserBuoyMsg(in)
 }
 
-//    一键清空未读消息
+// 一键清空未读消息
 func (s *MessageServer) ClearUnreadMsg(ctx context.Context, in *message.ClearUnreadMsgReq) (*message.Response, error) {
 	l := logic.NewClearUnreadMsgLogic(ctx, s.svcCtx)
 	return l.ClearUnreadMsg(in)
 }
 
-//    new用户消息列表
+// 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) SendWxTmplSystemDefaultMsg(ctx context.Context, in *message.SystemDefaultMsg) (*message.SendMsgResponse, error) {
-	l := logic.NewSendWxTmplSystemDefaultMsgLogic(ctx, s.svcCtx)
-	return l.SendWxTmplSystemDefaultMsg(in)
+// 发送剑鱼微信模版消息
+func (s *MessageServer) SendWxTmplMsg(ctx context.Context, in *message.WxTmplMsgRequest) (*message.SendMsgResponse, error) {
+	l := logic.NewSendWxTmplMsgLogic(ctx, s.svcCtx)
+	return l.SendWxTmplMsg(in)
 }
 
-//    官网、移动端首页、工作桌面消息滚动
+// 官网、移动端首页、工作桌面消息滚动
 func (s *MessageServer) UserUnreadMsgList(ctx context.Context, in *message.UserUnreadMsgListReq) (*message.UserUnreadMsgListRes, error) {
 	l := logic.NewUserUnreadMsgListLogic(ctx, s.svcCtx)
 	return l.UserUnreadMsgList(in)

+ 10 - 12
rpc/message.proto

@@ -226,16 +226,16 @@ message UserUnreadMsgListRes {
 }
 
 // 剑鱼学堂模版消息
-message JySchoolMsg {
-  string userIds = 1;  //接受人 mongo_userId(多个用,分割)
-  string title = 2;    //课程名称
-  string date = 3;     //课程时间
-  string address = 4;  //课程地点
-  string url = 5;      //消息跳转连接
-}
+//message JySchoolMsg {
+//  string userIds = 1;  //接受人 mongo_userId(多个用,分割)
+//  string title = 2;    //课程名称
+//  string date = 3;     //课程时间
+//  string address = 4;  //课程地点
+//  string url = 5;      //消息跳转连接
+//}
 
 // 剑鱼系统通用模版
-message SystemDefaultMsg {
+message WxTmplMsgRequest {
   string userIds = 1;      //接受人 mongo_userId(多个用,分割)
   string positionIds = 2;  //接受人 职位id(多个用,分割)
   string messageClass =3;  //数据库中switch字段
@@ -269,10 +269,8 @@ service Message {
 
     //   new用户消息列表
     rpc UserMsgList (UserMsgListReq) returns (UserMsgListRes);
-    //  发送剑鱼学堂微信模版消息
-    // rpc SendWxTmplJySchoolMsg (JySchoolMsg) returns(SendMsgResponse);
-    //  发送剑鱼系统通用模版消息
-    rpc SendWxTmplSystemDefaultMsg (SystemDefaultMsg) returns(SendMsgResponse);
+    //  发送剑鱼微信模版消息
+    rpc SendWxTmplMsg (WxTmplMsgRequest) returns(SendMsgResponse);
     //   官网、移动端首页、工作桌面消息滚动
     rpc UserUnreadMsgList (UserUnreadMsgListReq) returns (UserUnreadMsgListRes);
 }

+ 21 - 22
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
@@ -28,7 +28,6 @@ type (
 	GetMsgTypeRes          = message.GetMsgTypeRes
 	GetUnreadClassCountReq = message.GetUnreadClassCountReq
 	GetUnreadClassCountRes = message.GetUnreadClassCountRes
-	JySchoolMsg            = message.JySchoolMsg
 	MessageDetailReq       = message.MessageDetailReq
 	MessageDetailResp      = message.MessageDetailResp
 	Messages               = message.Messages
@@ -38,35 +37,35 @@ type (
 	ResCount               = message.ResCount
 	Response               = message.Response
 	SendMsgResponse        = message.SendMsgResponse
-	SystemDefaultMsg       = message.SystemDefaultMsg
 	User                   = message.User
 	UserMsgList            = message.UserMsgList
 	UserMsgListReq         = message.UserMsgListReq
 	UserMsgListRes         = message.UserMsgListRes
 	UserUnreadMsgListReq   = message.UserUnreadMsgListReq
 	UserUnreadMsgListRes   = message.UserUnreadMsgListRes
+	WxTmplMsgRequest       = message.WxTmplMsgRequest
 	WxTmplResponse         = message.WxTmplResponse
 
 	Message interface {
 		// 批量保存消息
 		MultipleSaveMsg(ctx context.Context, in *MultipleSaveMsgReq, opts ...grpc.CallOption) (*MultipleSaveMsgResp, error)
-		//  修改消息阅读状态
+		// 修改消息阅读状态
 		ChangeReadStatus(ctx context.Context, in *ChangeReadStatusReq, opts ...grpc.CallOption) (*Response, error)
-		//   查询指定用户的历史消息记录
+		// 查询指定用户的历史消息记录
 		FindUserMsg(ctx context.Context, in *FindUserMsgReq, opts ...grpc.CallOption) (*FindUserMsgRes, error)
 		// 查看详细详情
 		FindMessageDetail(ctx context.Context, in *MessageDetailReq, opts ...grpc.CallOption) (*MessageDetailResp, error)
-		//   消息的分类
+		// 消息的分类
 		GetMsgType(ctx context.Context, in *GetMsgTypeReq, opts ...grpc.CallOption) (*GetMsgTypeRes, 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)
-		//   发送剑鱼学堂微信模版消息
-		SendWxTmplSystemDefaultMsg(ctx context.Context, in *SystemDefaultMsg, opts ...grpc.CallOption) (*SendMsgResponse, error)
-		//    官网、移动端首页、工作桌面消息滚动
+		// 发送剑鱼微信模版消息
+		SendWxTmplMsg(ctx context.Context, in *WxTmplMsgRequest, opts ...grpc.CallOption) (*SendMsgResponse, error)
+		// 官网、移动端首页、工作桌面消息滚动
 		UserUnreadMsgList(ctx context.Context, in *UserUnreadMsgListReq, opts ...grpc.CallOption) (*UserUnreadMsgListRes, error)
 	}
 
@@ -87,13 +86,13 @@ func (m *defaultMessage) MultipleSaveMsg(ctx context.Context, in *MultipleSaveMs
 	return client.MultipleSaveMsg(ctx, in, opts...)
 }
 
-//  修改消息阅读状态
+// 修改消息阅读状态
 func (m *defaultMessage) ChangeReadStatus(ctx context.Context, in *ChangeReadStatusReq, opts ...grpc.CallOption) (*Response, error) {
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.ChangeReadStatus(ctx, in, opts...)
 }
 
-//   查询指定用户的历史消息记录
+// 查询指定用户的历史消息记录
 func (m *defaultMessage) FindUserMsg(ctx context.Context, in *FindUserMsgReq, opts ...grpc.CallOption) (*FindUserMsgRes, error) {
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.FindUserMsg(ctx, in, opts...)
@@ -105,37 +104,37 @@ func (m *defaultMessage) FindMessageDetail(ctx context.Context, in *MessageDetai
 	return client.FindMessageDetail(ctx, in, opts...)
 }
 
-//   消息的分类
+// 消息的分类
 func (m *defaultMessage) GetMsgType(ctx context.Context, in *GetMsgTypeReq, opts ...grpc.CallOption) (*GetMsgTypeRes, error) {
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.GetMsgType(ctx, in, opts...)
 }
 
-//   查询指定用户的浮标消息
+// 查询指定用户的浮标消息
 func (m *defaultMessage) FindUserBuoyMsg(ctx context.Context, in *FindUserBuoyMsgReq, opts ...grpc.CallOption) (*FindUserBuoyMsgRes, error) {
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.FindUserBuoyMsg(ctx, in, opts...)
 }
 
-//    一键清空未读消息
+// 一键清空未读消息
 func (m *defaultMessage) ClearUnreadMsg(ctx context.Context, in *ClearUnreadMsgReq, opts ...grpc.CallOption) (*Response, error) {
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.ClearUnreadMsg(ctx, in, opts...)
 }
 
-//    new用户消息列表
+// new用户消息列表
 func (m *defaultMessage) UserMsgList(ctx context.Context, in *UserMsgListReq, opts ...grpc.CallOption) (*UserMsgListRes, error) {
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.UserMsgList(ctx, in, opts...)
 }
 
-//   发送剑鱼学堂微信模版消息
-func (m *defaultMessage) SendWxTmplSystemDefaultMsg(ctx context.Context, in *SystemDefaultMsg, opts ...grpc.CallOption) (*SendMsgResponse, error) {
+// 发送剑鱼微信模版消息
+func (m *defaultMessage) SendWxTmplMsg(ctx context.Context, in *WxTmplMsgRequest, opts ...grpc.CallOption) (*SendMsgResponse, error) {
 	client := message.NewMessageClient(m.cli.Conn())
-	return client.SendWxTmplSystemDefaultMsg(ctx, in, opts...)
+	return client.SendWxTmplMsg(ctx, in, opts...)
 }
 
-//    官网、移动端首页、工作桌面消息滚动
+// 官网、移动端首页、工作桌面消息滚动
 func (m *defaultMessage) UserUnreadMsgList(ctx context.Context, in *UserUnreadMsgListReq, opts ...grpc.CallOption) (*UserUnreadMsgListRes, error) {
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.UserUnreadMsgList(ctx, in, opts...)

+ 97 - 198
rpc/type/message/message.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.28.0
-// 	protoc        v3.19.4
+// 	protoc-gen-go v1.30.0
+// 	protoc        v3.21.12
 // source: message.proto
 
 package message
@@ -581,7 +581,7 @@ func (x *GetClassUnreadCountReq) GetAppid() string {
 	return ""
 }
 
-//查看消息内容
+// 查看消息内容
 type MessageDetailReq struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -2296,88 +2296,8 @@ func (x *UserUnreadMsgListRes) GetCount() int64 {
 	return 0
 }
 
-// 剑鱼学堂模版消息
-type JySchoolMsg struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserIds string `protobuf:"bytes,1,opt,name=userIds,proto3" json:"userIds,omitempty"` //接受人 mongo_userId(多个用,分割)
-	Title   string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`     //课程名称
-	Date    string `protobuf:"bytes,3,opt,name=date,proto3" json:"date,omitempty"`       //课程时间
-	Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` //课程地点
-	Url     string `protobuf:"bytes,5,opt,name=url,proto3" json:"url,omitempty"`         //消息跳转连接
-}
-
-func (x *JySchoolMsg) Reset() {
-	*x = JySchoolMsg{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_message_proto_msgTypes[30]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *JySchoolMsg) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*JySchoolMsg) ProtoMessage() {}
-
-func (x *JySchoolMsg) ProtoReflect() protoreflect.Message {
-	mi := &file_message_proto_msgTypes[30]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use JySchoolMsg.ProtoReflect.Descriptor instead.
-func (*JySchoolMsg) Descriptor() ([]byte, []int) {
-	return file_message_proto_rawDescGZIP(), []int{30}
-}
-
-func (x *JySchoolMsg) GetUserIds() string {
-	if x != nil {
-		return x.UserIds
-	}
-	return ""
-}
-
-func (x *JySchoolMsg) GetTitle() string {
-	if x != nil {
-		return x.Title
-	}
-	return ""
-}
-
-func (x *JySchoolMsg) GetDate() string {
-	if x != nil {
-		return x.Date
-	}
-	return ""
-}
-
-func (x *JySchoolMsg) GetAddress() string {
-	if x != nil {
-		return x.Address
-	}
-	return ""
-}
-
-func (x *JySchoolMsg) GetUrl() string {
-	if x != nil {
-		return x.Url
-	}
-	return ""
-}
-
 // 剑鱼系统通用模版
-type SystemDefaultMsg struct {
+type WxTmplMsgRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
@@ -2391,23 +2311,23 @@ type SystemDefaultMsg struct {
 	Url          string `protobuf:"bytes,7,opt,name=url,proto3" json:"url,omitempty"`                   //消息跳转连接
 }
 
-func (x *SystemDefaultMsg) Reset() {
-	*x = SystemDefaultMsg{}
+func (x *WxTmplMsgRequest) Reset() {
+	*x = WxTmplMsgRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_message_proto_msgTypes[31]
+		mi := &file_message_proto_msgTypes[30]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *SystemDefaultMsg) String() string {
+func (x *WxTmplMsgRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*SystemDefaultMsg) ProtoMessage() {}
+func (*WxTmplMsgRequest) ProtoMessage() {}
 
-func (x *SystemDefaultMsg) ProtoReflect() protoreflect.Message {
-	mi := &file_message_proto_msgTypes[31]
+func (x *WxTmplMsgRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_message_proto_msgTypes[30]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2418,54 +2338,54 @@ func (x *SystemDefaultMsg) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use SystemDefaultMsg.ProtoReflect.Descriptor instead.
-func (*SystemDefaultMsg) Descriptor() ([]byte, []int) {
-	return file_message_proto_rawDescGZIP(), []int{31}
+// Deprecated: Use WxTmplMsgRequest.ProtoReflect.Descriptor instead.
+func (*WxTmplMsgRequest) Descriptor() ([]byte, []int) {
+	return file_message_proto_rawDescGZIP(), []int{30}
 }
 
-func (x *SystemDefaultMsg) GetUserIds() string {
+func (x *WxTmplMsgRequest) GetUserIds() string {
 	if x != nil {
 		return x.UserIds
 	}
 	return ""
 }
 
-func (x *SystemDefaultMsg) GetPositionIds() string {
+func (x *WxTmplMsgRequest) GetPositionIds() string {
 	if x != nil {
 		return x.PositionIds
 	}
 	return ""
 }
 
-func (x *SystemDefaultMsg) GetMessageClass() string {
+func (x *WxTmplMsgRequest) GetMessageClass() string {
 	if x != nil {
 		return x.MessageClass
 	}
 	return ""
 }
 
-func (x *SystemDefaultMsg) GetTitle() string {
+func (x *WxTmplMsgRequest) GetTitle() string {
 	if x != nil {
 		return x.Title
 	}
 	return ""
 }
 
-func (x *SystemDefaultMsg) GetDetail() string {
+func (x *WxTmplMsgRequest) GetDetail() string {
 	if x != nil {
 		return x.Detail
 	}
 	return ""
 }
 
-func (x *SystemDefaultMsg) GetDate() string {
+func (x *WxTmplMsgRequest) GetDate() string {
 	if x != nil {
 		return x.Date
 	}
 	return ""
 }
 
-func (x *SystemDefaultMsg) GetUrl() string {
+func (x *WxTmplMsgRequest) GetUrl() string {
 	if x != nil {
 		return x.Url
 	}
@@ -2484,7 +2404,7 @@ type SendMsgResponse struct {
 func (x *SendMsgResponse) Reset() {
 	*x = SendMsgResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_message_proto_msgTypes[32]
+		mi := &file_message_proto_msgTypes[31]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2497,7 +2417,7 @@ func (x *SendMsgResponse) String() string {
 func (*SendMsgResponse) ProtoMessage() {}
 
 func (x *SendMsgResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_message_proto_msgTypes[32]
+	mi := &file_message_proto_msgTypes[31]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2510,7 +2430,7 @@ func (x *SendMsgResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SendMsgResponse.ProtoReflect.Descriptor instead.
 func (*SendMsgResponse) Descriptor() ([]byte, []int) {
-	return file_message_proto_rawDescGZIP(), []int{32}
+	return file_message_proto_rawDescGZIP(), []int{31}
 }
 
 func (x *SendMsgResponse) GetTotal() int64 {
@@ -2804,78 +2724,70 @@ var file_message_proto_rawDesc = []byte{
 	0x32, 0x11, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61,
 	0x67, 0x65, 0x73, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75,
 	0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22,
-	0x7d, 0x0a, 0x0b, 0x4a, 0x79, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x4d, 0x73, 0x67, 0x12, 0x18,
-	0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c,
-	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12,
-	0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61,
-	0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03,
-	0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xc6,
-	0x01, 0x0a, 0x10, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
-	0x4d, 0x73, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x20, 0x0a,
-	0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12,
-	0x22, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6c,
-	0x61, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74,
-	0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69,
-	0x6c, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x04, 0x64, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x41, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x4d,
-	0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f,
-	0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c,
-	0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0xdc, 0x05, 0x0a, 0x07, 0x4d,
-	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70,
-	0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x1b, 0x2e, 0x6d, 0x65, 0x73, 0x73,
-	0x61, 0x67, 0x65, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65,
-	0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
-	0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x4d, 0x73, 0x67,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65,
-	0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61,
-	0x67, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
-	0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x46, 0x69, 0x6e,
-	0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x17, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61,
-	0x67, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x65,
-	0x71, 0x1a, 0x17, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x64,
-	0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x11, 0x46, 0x69,
-	0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12,
-	0x19, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
-	0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x6d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61,
-	0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x73, 0x67,
-	0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x47,
-	0x65, 0x74, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x6d,
-	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70,
-	0x65, 0x52, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72,
-	0x42, 0x75, 0x6f, 0x79, 0x4d, 0x73, 0x67, 0x12, 0x1b, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
-	0x65, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x42, 0x75, 0x6f, 0x79, 0x4d, 0x73,
-	0x67, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x46,
-	0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x42, 0x75, 0x6f, 0x79, 0x4d, 0x73, 0x67, 0x52, 0x65,
-	0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64,
-	0x4d, 0x73, 0x67, 0x12, 0x1a, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6c,
-	0x65, 0x61, 0x72, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a,
-	0x11, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73,
-	0x74, 0x12, 0x17, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72,
-	0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x6d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74,
-	0x52, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x1a, 0x53, 0x65, 0x6e, 0x64, 0x57, 0x78, 0x54, 0x6d, 0x70,
-	0x6c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4d, 0x73,
-	0x67, 0x12, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x74,
-	0x65, 0x6d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4d, 0x73, 0x67, 0x1a, 0x18, 0x2e, 0x6d,
-	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x55, 0x6e,
-	0x72, 0x65, 0x61, 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1d, 0x2e, 0x6d, 0x65,
-	0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64,
-	0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x6d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x4d,
-	0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x42, 0x0a, 0x5a, 0x08, 0x6d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0xc6, 0x01, 0x0a, 0x10, 0x57, 0x78, 0x54, 0x6d, 0x70, 0x6c, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x20,
+	0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73,
+	0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43,
+	0x6c, 0x61, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65,
+	0x74, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x41, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64,
+	0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74,
+	0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61,
+	0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0xcf, 0x05, 0x0a, 0x07,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69,
+	0x70, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x1b, 0x2e, 0x6d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x53, 0x61, 0x76,
+	0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x4d, 0x73,
+	0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x43, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52,
+	0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x2e, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x46, 0x69,
+	0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x17, 0x2e, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52,
+	0x65, 0x71, 0x1a, 0x17, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x46, 0x69, 0x6e,
+	0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x11, 0x46,
+	0x69, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
+	0x12, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x6d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74,
+	0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x73,
+	0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,
+	0x47, 0x65, 0x74, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x73, 0x67, 0x54, 0x79,
+	0x70, 0x65, 0x52, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65,
+	0x72, 0x42, 0x75, 0x6f, 0x79, 0x4d, 0x73, 0x67, 0x12, 0x1b, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x42, 0x75, 0x6f, 0x79, 0x4d,
+	0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,
+	0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x42, 0x75, 0x6f, 0x79, 0x4d, 0x73, 0x67, 0x52,
+	0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0e, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x55, 0x6e, 0x72, 0x65, 0x61,
+	0x64, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43,
+	0x6c, 0x65, 0x61, 0x72, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71,
+	0x1a, 0x11, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x4c, 0x69,
+	0x73, 0x74, 0x12, 0x17, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x73, 0x65,
+	0x72, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x6d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73,
+	0x74, 0x52, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x57, 0x78, 0x54, 0x6d,
+	0x70, 0x6c, 0x4d, 0x73, 0x67, 0x12, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,
+	0x57, 0x78, 0x54, 0x6d, 0x70, 0x6c, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x18, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d,
+	0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x11, 0x55, 0x73,
+	0x65, 0x72, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12,
+	0x1d, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x55, 0x6e,
+	0x72, 0x65, 0x61, 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d,
+	0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x55, 0x6e, 0x72,
+	0x65, 0x61, 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x42, 0x0a, 0x5a,
+	0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
 }
 
 var (
@@ -2890,7 +2802,7 @@ func file_message_proto_rawDescGZIP() []byte {
 	return file_message_proto_rawDescData
 }
 
-var file_message_proto_msgTypes = make([]protoimpl.MessageInfo, 34)
+var file_message_proto_msgTypes = make([]protoimpl.MessageInfo, 33)
 var file_message_proto_goTypes = []interface{}{
 	(*ChangeReadStatusReq)(nil),    // 0: message.ChangeReadStatusReq
 	(*ResCount)(nil),               // 1: message.ResCount
@@ -2922,13 +2834,12 @@ var file_message_proto_goTypes = []interface{}{
 	(*WxTmplResponse)(nil),         // 27: message.WxTmplResponse
 	(*UserUnreadMsgListReq)(nil),   // 28: message.UserUnreadMsgListReq
 	(*UserUnreadMsgListRes)(nil),   // 29: message.UserUnreadMsgListRes
-	(*JySchoolMsg)(nil),            // 30: message.JySchoolMsg
-	(*SystemDefaultMsg)(nil),       // 31: message.SystemDefaultMsg
-	(*SendMsgResponse)(nil),        // 32: message.SendMsgResponse
-	nil,                            // 33: message.Messages.UrlEntry
+	(*WxTmplMsgRequest)(nil),       // 30: message.WxTmplMsgRequest
+	(*SendMsgResponse)(nil),        // 31: message.SendMsgResponse
+	nil,                            // 32: message.Messages.UrlEntry
 }
 var file_message_proto_depIdxs = []int32{
-	33, // 0: message.Messages.url:type_name -> message.Messages.UrlEntry
+	32, // 0: message.Messages.url:type_name -> message.Messages.UrlEntry
 	4,  // 1: message.FindUserMsgRes.data:type_name -> message.Messages
 	4,  // 2: message.MessageDetailResp.data:type_name -> message.Messages
 	4,  // 3: message.GetLastMessageRes.data:type_name -> message.Messages
@@ -2951,7 +2862,7 @@ var file_message_proto_depIdxs = []int32{
 	19, // 20: message.Message.FindUserBuoyMsg:input_type -> message.FindUserBuoyMsgReq
 	22, // 21: message.Message.ClearUnreadMsg:input_type -> message.ClearUnreadMsgReq
 	23, // 22: message.Message.UserMsgList:input_type -> message.UserMsgListReq
-	31, // 23: message.Message.SendWxTmplSystemDefaultMsg:input_type -> message.SystemDefaultMsg
+	30, // 23: message.Message.SendWxTmplMsg:input_type -> message.WxTmplMsgRequest
 	28, // 24: message.Message.UserUnreadMsgList:input_type -> message.UserUnreadMsgListReq
 	18, // 25: message.Message.multipleSaveMsg:output_type -> message.multipleSaveMsgResp
 	2,  // 26: message.Message.ChangeReadStatus:output_type -> message.Response
@@ -2961,7 +2872,7 @@ var file_message_proto_depIdxs = []int32{
 	20, // 30: message.Message.FindUserBuoyMsg:output_type -> message.FindUserBuoyMsgRes
 	2,  // 31: message.Message.ClearUnreadMsg:output_type -> message.Response
 	24, // 32: message.Message.UserMsgList:output_type -> message.UserMsgListRes
-	32, // 33: message.Message.SendWxTmplSystemDefaultMsg:output_type -> message.SendMsgResponse
+	31, // 33: message.Message.SendWxTmplMsg:output_type -> message.SendMsgResponse
 	29, // 34: message.Message.UserUnreadMsgList:output_type -> message.UserUnreadMsgListRes
 	25, // [25:35] is the sub-list for method output_type
 	15, // [15:25] is the sub-list for method input_type
@@ -3337,7 +3248,7 @@ func file_message_proto_init() {
 			}
 		}
 		file_message_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*JySchoolMsg); i {
+			switch v := v.(*WxTmplMsgRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3349,18 +3260,6 @@ func file_message_proto_init() {
 			}
 		}
 		file_message_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SystemDefaultMsg); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_message_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*SendMsgResponse); i {
 			case 0:
 				return &v.state
@@ -3379,7 +3278,7 @@ func file_message_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_message_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   34,
+			NumMessages:   33,
 			NumExtensions: 0,
 			NumServices:   1,
 		},

+ 64 - 55
rpc/type/message/message_grpc.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
-// - protoc-gen-go-grpc v1.2.0
-// - protoc             v3.19.4
+// - protoc-gen-go-grpc v1.3.0
+// - protoc             v3.21.12
 // source: message.proto
 
 package message
@@ -18,31 +18,42 @@ import (
 // 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_FindUserMsg_FullMethodName       = "/message.Message/FindUserMsg"
+	Message_FindMessageDetail_FullMethodName = "/message.Message/FindMessageDetail"
+	Message_GetMsgType_FullMethodName        = "/message.Message/GetMsgType"
+	Message_FindUserBuoyMsg_FullMethodName   = "/message.Message/FindUserBuoyMsg"
+	Message_ClearUnreadMsg_FullMethodName    = "/message.Message/ClearUnreadMsg"
+	Message_UserMsgList_FullMethodName       = "/message.Message/UserMsgList"
+	Message_SendWxTmplMsg_FullMethodName     = "/message.Message/SendWxTmplMsg"
+	Message_UserUnreadMsgList_FullMethodName = "/message.Message/UserUnreadMsgList"
+)
+
 // 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 *ChangeReadStatusReq, opts ...grpc.CallOption) (*Response, error)
-	//  查询指定用户的历史消息记录
+	// 查询指定用户的历史消息记录
 	FindUserMsg(ctx context.Context, in *FindUserMsgReq, opts ...grpc.CallOption) (*FindUserMsgRes, error)
-	//查看详细详情
+	// 查看详细详情
 	FindMessageDetail(ctx context.Context, in *MessageDetailReq, opts ...grpc.CallOption) (*MessageDetailResp, error)
-	//  消息的分类
+	// 消息的分类
 	GetMsgType(ctx context.Context, in *GetMsgTypeReq, opts ...grpc.CallOption) (*GetMsgTypeRes, 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)
-	//  发送剑鱼学堂微信模版消息
-	// rpc SendWxTmplJySchoolMsg (JySchoolMsg) returns(SendMsgResponse);
-	//  发送剑鱼系统通用模版消息
-	SendWxTmplSystemDefaultMsg(ctx context.Context, in *SystemDefaultMsg, opts ...grpc.CallOption) (*SendMsgResponse, error)
-	//   官网、移动端首页、工作桌面消息滚动
+	// 发送剑鱼微信模版消息
+	SendWxTmplMsg(ctx context.Context, in *WxTmplMsgRequest, opts ...grpc.CallOption) (*SendMsgResponse, error)
+	// 官网、移动端首页、工作桌面消息滚动
 	UserUnreadMsgList(ctx context.Context, in *UserUnreadMsgListReq, opts ...grpc.CallOption) (*UserUnreadMsgListRes, error)
 }
 
@@ -56,7 +67,7 @@ func NewMessageClient(cc grpc.ClientConnInterface) MessageClient {
 
 func (c *messageClient) MultipleSaveMsg(ctx context.Context, in *MultipleSaveMsgReq, opts ...grpc.CallOption) (*MultipleSaveMsgResp, error) {
 	out := new(MultipleSaveMsgResp)
-	err := c.cc.Invoke(ctx, "/message.Message/multipleSaveMsg", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_MultipleSaveMsg_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -65,7 +76,7 @@ func (c *messageClient) MultipleSaveMsg(ctx context.Context, in *MultipleSaveMsg
 
 func (c *messageClient) ChangeReadStatus(ctx context.Context, in *ChangeReadStatusReq, opts ...grpc.CallOption) (*Response, error) {
 	out := new(Response)
-	err := c.cc.Invoke(ctx, "/message.Message/ChangeReadStatus", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_ChangeReadStatus_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -74,7 +85,7 @@ func (c *messageClient) ChangeReadStatus(ctx context.Context, in *ChangeReadStat
 
 func (c *messageClient) FindUserMsg(ctx context.Context, in *FindUserMsgReq, opts ...grpc.CallOption) (*FindUserMsgRes, error) {
 	out := new(FindUserMsgRes)
-	err := c.cc.Invoke(ctx, "/message.Message/FindUserMsg", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_FindUserMsg_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -83,7 +94,7 @@ func (c *messageClient) FindUserMsg(ctx context.Context, in *FindUserMsgReq, opt
 
 func (c *messageClient) FindMessageDetail(ctx context.Context, in *MessageDetailReq, opts ...grpc.CallOption) (*MessageDetailResp, error) {
 	out := new(MessageDetailResp)
-	err := c.cc.Invoke(ctx, "/message.Message/FindMessageDetail", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_FindMessageDetail_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -92,7 +103,7 @@ func (c *messageClient) FindMessageDetail(ctx context.Context, in *MessageDetail
 
 func (c *messageClient) GetMsgType(ctx context.Context, in *GetMsgTypeReq, opts ...grpc.CallOption) (*GetMsgTypeRes, error) {
 	out := new(GetMsgTypeRes)
-	err := c.cc.Invoke(ctx, "/message.Message/GetMsgType", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_GetMsgType_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -101,7 +112,7 @@ func (c *messageClient) GetMsgType(ctx context.Context, in *GetMsgTypeReq, opts
 
 func (c *messageClient) FindUserBuoyMsg(ctx context.Context, in *FindUserBuoyMsgReq, opts ...grpc.CallOption) (*FindUserBuoyMsgRes, error) {
 	out := new(FindUserBuoyMsgRes)
-	err := c.cc.Invoke(ctx, "/message.Message/FindUserBuoyMsg", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_FindUserBuoyMsg_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -110,7 +121,7 @@ func (c *messageClient) FindUserBuoyMsg(ctx context.Context, in *FindUserBuoyMsg
 
 func (c *messageClient) ClearUnreadMsg(ctx context.Context, in *ClearUnreadMsgReq, opts ...grpc.CallOption) (*Response, error) {
 	out := new(Response)
-	err := c.cc.Invoke(ctx, "/message.Message/ClearUnreadMsg", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_ClearUnreadMsg_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -119,16 +130,16 @@ func (c *messageClient) ClearUnreadMsg(ctx context.Context, in *ClearUnreadMsgRe
 
 func (c *messageClient) UserMsgList(ctx context.Context, in *UserMsgListReq, opts ...grpc.CallOption) (*UserMsgListRes, error) {
 	out := new(UserMsgListRes)
-	err := c.cc.Invoke(ctx, "/message.Message/UserMsgList", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_UserMsgList_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-func (c *messageClient) SendWxTmplSystemDefaultMsg(ctx context.Context, in *SystemDefaultMsg, opts ...grpc.CallOption) (*SendMsgResponse, error) {
+func (c *messageClient) SendWxTmplMsg(ctx context.Context, in *WxTmplMsgRequest, opts ...grpc.CallOption) (*SendMsgResponse, error) {
 	out := new(SendMsgResponse)
-	err := c.cc.Invoke(ctx, "/message.Message/SendWxTmplSystemDefaultMsg", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_SendWxTmplMsg_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -137,7 +148,7 @@ func (c *messageClient) SendWxTmplSystemDefaultMsg(ctx context.Context, in *Syst
 
 func (c *messageClient) UserUnreadMsgList(ctx context.Context, in *UserUnreadMsgListReq, opts ...grpc.CallOption) (*UserUnreadMsgListRes, error) {
 	out := new(UserUnreadMsgListRes)
-	err := c.cc.Invoke(ctx, "/message.Message/UserUnreadMsgList", in, out, opts...)
+	err := c.cc.Invoke(ctx, Message_UserUnreadMsgList_FullMethodName, in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -148,27 +159,25 @@ func (c *messageClient) UserUnreadMsgList(ctx context.Context, in *UserUnreadMsg
 // All implementations must embed UnimplementedMessageServer
 // for forward compatibility
 type MessageServer interface {
-	//批量保存消息
+	// 批量保存消息
 	MultipleSaveMsg(context.Context, *MultipleSaveMsgReq) (*MultipleSaveMsgResp, error)
 	// 修改消息阅读状态
 	ChangeReadStatus(context.Context, *ChangeReadStatusReq) (*Response, error)
-	//  查询指定用户的历史消息记录
+	// 查询指定用户的历史消息记录
 	FindUserMsg(context.Context, *FindUserMsgReq) (*FindUserMsgRes, error)
-	//查看详细详情
+	// 查看详细详情
 	FindMessageDetail(context.Context, *MessageDetailReq) (*MessageDetailResp, error)
-	//  消息的分类
+	// 消息的分类
 	GetMsgType(context.Context, *GetMsgTypeReq) (*GetMsgTypeRes, error)
-	//  查询指定用户的浮标消息
+	// 查询指定用户的浮标消息
 	FindUserBuoyMsg(context.Context, *FindUserBuoyMsgReq) (*FindUserBuoyMsgRes, error)
-	//   一键清空未读消息
+	// 一键清空未读消息
 	ClearUnreadMsg(context.Context, *ClearUnreadMsgReq) (*Response, error)
-	//   new用户消息列表
+	// new用户消息列表
 	UserMsgList(context.Context, *UserMsgListReq) (*UserMsgListRes, error)
-	//  发送剑鱼学堂微信模版消息
-	// rpc SendWxTmplJySchoolMsg (JySchoolMsg) returns(SendMsgResponse);
-	//  发送剑鱼系统通用模版消息
-	SendWxTmplSystemDefaultMsg(context.Context, *SystemDefaultMsg) (*SendMsgResponse, error)
-	//   官网、移动端首页、工作桌面消息滚动
+	// 发送剑鱼微信模版消息
+	SendWxTmplMsg(context.Context, *WxTmplMsgRequest) (*SendMsgResponse, error)
+	// 官网、移动端首页、工作桌面消息滚动
 	UserUnreadMsgList(context.Context, *UserUnreadMsgListReq) (*UserUnreadMsgListRes, error)
 	mustEmbedUnimplementedMessageServer()
 }
@@ -201,8 +210,8 @@ func (UnimplementedMessageServer) ClearUnreadMsg(context.Context, *ClearUnreadMs
 func (UnimplementedMessageServer) UserMsgList(context.Context, *UserMsgListReq) (*UserMsgListRes, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method UserMsgList not implemented")
 }
-func (UnimplementedMessageServer) SendWxTmplSystemDefaultMsg(context.Context, *SystemDefaultMsg) (*SendMsgResponse, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method SendWxTmplSystemDefaultMsg not implemented")
+func (UnimplementedMessageServer) SendWxTmplMsg(context.Context, *WxTmplMsgRequest) (*SendMsgResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SendWxTmplMsg not implemented")
 }
 func (UnimplementedMessageServer) UserUnreadMsgList(context.Context, *UserUnreadMsgListReq) (*UserUnreadMsgListRes, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method UserUnreadMsgList not implemented")
@@ -230,7 +239,7 @@ func _Message_MultipleSaveMsg_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/multipleSaveMsg",
+		FullMethod: Message_MultipleSaveMsg_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MessageServer).MultipleSaveMsg(ctx, req.(*MultipleSaveMsgReq))
@@ -248,7 +257,7 @@ func _Message_ChangeReadStatus_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/ChangeReadStatus",
+		FullMethod: Message_ChangeReadStatus_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MessageServer).ChangeReadStatus(ctx, req.(*ChangeReadStatusReq))
@@ -266,7 +275,7 @@ func _Message_FindUserMsg_Handler(srv interface{}, ctx context.Context, dec func
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/FindUserMsg",
+		FullMethod: Message_FindUserMsg_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MessageServer).FindUserMsg(ctx, req.(*FindUserMsgReq))
@@ -284,7 +293,7 @@ func _Message_FindMessageDetail_Handler(srv interface{}, ctx context.Context, de
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/FindMessageDetail",
+		FullMethod: Message_FindMessageDetail_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MessageServer).FindMessageDetail(ctx, req.(*MessageDetailReq))
@@ -302,7 +311,7 @@ func _Message_GetMsgType_Handler(srv interface{}, ctx context.Context, dec func(
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/GetMsgType",
+		FullMethod: Message_GetMsgType_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MessageServer).GetMsgType(ctx, req.(*GetMsgTypeReq))
@@ -320,7 +329,7 @@ func _Message_FindUserBuoyMsg_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/FindUserBuoyMsg",
+		FullMethod: Message_FindUserBuoyMsg_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MessageServer).FindUserBuoyMsg(ctx, req.(*FindUserBuoyMsgReq))
@@ -338,7 +347,7 @@ func _Message_ClearUnreadMsg_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/ClearUnreadMsg",
+		FullMethod: Message_ClearUnreadMsg_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MessageServer).ClearUnreadMsg(ctx, req.(*ClearUnreadMsgReq))
@@ -356,7 +365,7 @@ func _Message_UserMsgList_Handler(srv interface{}, ctx context.Context, dec func
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/UserMsgList",
+		FullMethod: Message_UserMsgList_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MessageServer).UserMsgList(ctx, req.(*UserMsgListReq))
@@ -364,20 +373,20 @@ func _Message_UserMsgList_Handler(srv interface{}, ctx context.Context, dec func
 	return interceptor(ctx, in, info, handler)
 }
 
-func _Message_SendWxTmplSystemDefaultMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(SystemDefaultMsg)
+func _Message_SendWxTmplMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(WxTmplMsgRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
 	if interceptor == nil {
-		return srv.(MessageServer).SendWxTmplSystemDefaultMsg(ctx, in)
+		return srv.(MessageServer).SendWxTmplMsg(ctx, in)
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/SendWxTmplSystemDefaultMsg",
+		FullMethod: Message_SendWxTmplMsg_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(MessageServer).SendWxTmplSystemDefaultMsg(ctx, req.(*SystemDefaultMsg))
+		return srv.(MessageServer).SendWxTmplMsg(ctx, req.(*WxTmplMsgRequest))
 	}
 	return interceptor(ctx, in, info, handler)
 }
@@ -392,7 +401,7 @@ func _Message_UserUnreadMsgList_Handler(srv interface{}, ctx context.Context, de
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/message.Message/UserUnreadMsgList",
+		FullMethod: Message_UserUnreadMsgList_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(MessageServer).UserUnreadMsgList(ctx, req.(*UserUnreadMsgListReq))
@@ -440,8 +449,8 @@ var Message_ServiceDesc = grpc.ServiceDesc{
 			Handler:    _Message_UserMsgList_Handler,
 		},
 		{
-			MethodName: "SendWxTmplSystemDefaultMsg",
-			Handler:    _Message_SendWxTmplSystemDefaultMsg_Handler,
+			MethodName: "SendWxTmplMsg",
+			Handler:    _Message_SendWxTmplMsg_Handler,
 		},
 		{
 			MethodName: "UserUnreadMsgList",