Selaa lähdekoodia

fix:app push 推送rpc添加

duxin 2 vuotta sitten
vanhempi
commit
367124bf39

+ 1 - 0
rpc/etc/message.yaml

@@ -6,6 +6,7 @@ Etcd:
   - 127.0.0.1:2379
   Key: message.rpc
 Timeout: 10000
+PushGrpcServer: 192.168.3.11:5565
 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

+ 1 - 1
rpc/internal/common/sendWxTmplMsg.go

@@ -36,7 +36,7 @@ const CacheDb = "msgCount"
 
 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")
+	rData := entity.Mysql.SelectBySql(`SELECT * FROM message_column where switch != "" ORDER BY sequence ASC`)
 	switchName := map[string]WxTmplConfig{}
 	if rData != nil && len(*rData) > 0 {
 		data = *rData

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

@@ -16,6 +16,7 @@ type Config struct {
 	SaveConcurrency int       // 消息保存并发数
 	WxWebdomain     string    `json:"WxWebdomain"`
 	WxTmplConfig    WxTmplMsg `json:"WxTmplConfig"`
+	PushGrpcServer  string    `json:"PushGrpcServer"`
 	Mail            []struct {
 		Addr string `json:"addr"`
 		Port int    `json:"port"`

+ 144 - 0
rpc/internal/logic/appletterpushlogic.go

@@ -0,0 +1,144 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/MessageCenter/entity"
+	"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"
+	qutil "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/go-xweb/log"
+	"app.yhyue.com/moapp/jybase/mongodb"
+	"context"
+	"encoding/json"
+	"fmt"
+	"net/rpc"
+	"strings"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type AppLetterPushLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewAppLetterPushLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AppLetterPushLogic {
+	return &AppLetterPushLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 发送剑鱼微信模版消息
+func (l *AppLetterPushLogic) AppLetterPush(in *message.WxTmplMsgRequest) (*message.SendMsgResponse, error) {
+	var userArr []string
+	userArr = strings.Split(in.PositionIds, ",")
+	pushConfig, err := common.GetWxTmplConfig(in.MessageClass)
+	if err != nil {
+		return &message.SendMsgResponse{
+			Total:   0,
+			Message: err.Error(),
+		}, nil
+	}
+
+	for _, uId := range userArr {
+		if uId == "" {
+			continue
+		}
+		query := make(map[string]interface{})
+		uInfo := entity.Mysql.SelectBySql("SELECT user_id FROM base_service.base_position WHERE id = ? ", uId)
+		if uInfo != nil && len(*uInfo) > 0 {
+			if baseUserId := qutil.Int64All((*uInfo)[0]["user_id"]); baseUserId != 0 {
+				query["base_user_id"] = baseUserId
+			}
+		}
+		userData := make(map[string]interface{})
+		if len(query) > 0 {
+			rData, _ := entity.MQFW.FindOneByField("user", query, fmt.Sprintf(`{"s_appversion":1,"s_nmae":1,"s_nmae":1,"s_jpushid":1,"s_opushid":1,"s_m_openid":1,"o_pushset.%s.i_apppush":1}`, pushConfig.Switch))
+			if rData != nil && len(*rData) > 0 {
+				userData = *rData
+			}
+		}
+
+		AppPushMsg(userData, pushConfig.Switch, in.Url, in.Title, in.Detail)
+	}
+	return &message.SendMsgResponse{
+		Total: 1,
+	}, nil
+}
+
+func AppPushMsg(userInfo map[string]interface{}, stm, appPushUrl, title string, detail string) {
+	userId := mongodb.BsonIdToSId(userInfo["_id"])
+	if pushSetMap := qutil.ObjToMap(userInfo["o_pushset"]); pushSetMap != nil && len(*pushSetMap) > 0 {
+		if pushKeyMap := qutil.ObjToMap((*pushSetMap)[stm]); pushKeyMap != nil && len(*pushKeyMap) > 0 {
+			if qutil.Int64All((*pushKeyMap)["i_apppush"]) == 1 {
+				//用户信息
+				var otherPushId, jgPushId, phoneType, name, appVersion = "", "", "", "", ""
+				otherPushId = qutil.ObjToString(userInfo["s_opushid"])
+				jgPushId = qutil.ObjToString(userInfo["s_jpushid"])
+				phoneType = qutil.ObjToString(userInfo["s_appponetype"])
+				name = qutil.ObjToString(userInfo["s_name"])
+				appVersion = qutil.ObjToString(userInfo["s_appversion"])
+
+				dt := map[string]interface{}{
+					"receiveUserId": userId,
+					"receiveName":   name,
+					//"sendName":      loginUserName,
+					"title":    title,
+					"content":  detail,
+					"msgType":  "messagecenter",
+					"link":     appPushUrl,
+					"appid":    "10000",
+					"menuName": "message",
+				}
+				//推送消息
+				if appVersion > "3.0.3" {
+					go AppGrpcPush(dt, otherPushId, jgPushId, phoneType, appPushUrl)
+				}
+				return
+			}
+		}
+	}
+	//log.Println("用户未打开app推送", msgType, userId)
+}
+
+func AppGrpcPush(pushData map[string]interface{}, otherPushId, jgPushId, phoneType, appPushUrl string) {
+	menuName := "message"
+	if value, ok := pushData["menuName"]; ok {
+		menuName = qutil.ObjToString(value)
+	}
+	var repl string
+	client, err := rpc.DialHTTP("tcp", config.ConfigJson.PushGrpcServer)
+	if err != nil {
+		log.Println(err.Error())
+		return
+	}
+	defer client.Close()
+	push := map[string]interface{}{
+		"title":       pushData["title"],         //标题
+		"descript":    pushData["content"],       //副标题
+		"otherPushId": otherPushId,               //mongodb库user表中s_opushid
+		"jgPushId":    jgPushId,                  //mongodb库user表中s_jpushid
+		"userId":      pushData["receiveUserId"], //mongodb库user表中_id转string
+		"phoneType":   phoneType,                 //mongodb库user表中s_appponetype
+		"type":        "messagecenter",           //消息类型,消息中心推送的消息使用messagecenter
+		"url":         appPushUrl,                //点了消息以后,跳转的链接地址,不需要带域名
+		"menuName":    menuName,                  //在哪个webview打开链接,search:搜索 subscribe:订阅 box:百宝箱 me:我的 other:新的webview  消息中心 message
+		"redDot":      "",                        //在哪个底部菜单显示小红点,空值则不显示小红点,search:搜索 subscribe:订阅 box:百宝箱 me:我的
+	}
+	b, _ := json.Marshal(push)
+	err = client.Call("Rpc.Push", b, &repl)
+	if err != nil {
+		log.Println(err.Error())
+		return
+	}
+	if repl == "y" {
+		log.Println("推送成功!", pushData["receiveUserId"])
+	} else {
+		log.Println("推送失败!", pushData["receiveUserId"])
+	}
+
+}

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

@@ -87,3 +87,9 @@ func (s *MessageServer) MsgOpenLog(ctx context.Context, in *message.MsgOpenLogRe
 	l := logic.NewMsgOpenLogLogic(ctx, s.svcCtx)
 	return l.MsgOpenLog(in)
 }
+
+//   发送剑鱼微信模版消息
+func (s *MessageServer) AppLetterPush(ctx context.Context, in *message.WxTmplMsgRequest) (*message.SendMsgResponse, error) {
+	l := logic.NewAppLetterPushLogic(ctx, s.svcCtx)
+	return l.AppLetterPush(in)
+}

+ 4 - 0
rpc/message.proto

@@ -283,4 +283,8 @@ service Message {
     rpc UserUnreadMsgList (UserUnreadMsgListReq) returns (UserUnreadMsgListRes);
     // 点击消息-存查看记录
     rpc MsgOpenLog (MsgOpenLogReq) returns (Response);
+
+    //  发送剑鱼微信模版消息
+    rpc AppLetterPush (WxTmplMsgRequest) returns(SendMsgResponse);
+
 }

+ 8 - 0
rpc/messageclient/message.go

@@ -70,6 +70,8 @@ type (
 		UserUnreadMsgList(ctx context.Context, in *UserUnreadMsgListReq, opts ...grpc.CallOption) (*UserUnreadMsgListRes, error)
 		//  点击消息-存查看记录
 		MsgOpenLog(ctx context.Context, in *MsgOpenLogReq, opts ...grpc.CallOption) (*Response, error)
+		//   发送剑鱼微信模版消息
+		AppLetterPush(ctx context.Context, in *WxTmplMsgRequest, opts ...grpc.CallOption) (*SendMsgResponse, error)
 	}
 
 	defaultMessage struct {
@@ -148,3 +150,9 @@ func (m *defaultMessage) MsgOpenLog(ctx context.Context, in *MsgOpenLogReq, opts
 	client := message.NewMessageClient(m.cli.Conn())
 	return client.MsgOpenLog(ctx, in, opts...)
 }
+
+//   发送剑鱼微信模版消息
+func (m *defaultMessage) AppLetterPush(ctx context.Context, in *WxTmplMsgRequest, opts ...grpc.CallOption) (*SendMsgResponse, error) {
+	client := message.NewMessageClient(m.cli.Conn())
+	return client.AppLetterPush(ctx, in, opts...)
+}

+ 22 - 16
rpc/type/message/message.pb.go

@@ -2839,7 +2839,7 @@ var file_message_proto_rawDesc = []byte{
 	0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a,
 	0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75,
 	0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x32, 0x88, 0x06, 0x0a, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x32, 0xce, 0x06, 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,
@@ -2888,8 +2888,12 @@ var file_message_proto_rawDesc = []byte{
 	0x0a, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x2e, 0x6d, 0x65,
 	0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x73, 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x6f, 0x67,
 	0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0a, 0x5a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
-	0x65, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x4c, 0x65, 0x74,
+	0x74, 0x65, 0x72, 0x50, 0x75, 0x73, 0x68, 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, 0x42, 0x0a, 0x5a, 0x08,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -2968,19 +2972,21 @@ var file_message_proto_depIdxs = []int32{
 	30, // 23: message.Message.SendWxTmplMsg:input_type -> message.WxTmplMsgRequest
 	28, // 24: message.Message.UserUnreadMsgList:input_type -> message.UserUnreadMsgListReq
 	32, // 25: message.Message.MsgOpenLog:input_type -> message.MsgOpenLogReq
-	18, // 26: message.Message.multipleSaveMsg:output_type -> message.multipleSaveMsgResp
-	2,  // 27: message.Message.ChangeReadStatus:output_type -> message.Response
-	5,  // 28: message.Message.FindUserMsg:output_type -> message.FindUserMsgRes
-	8,  // 29: message.Message.FindMessageDetail:output_type -> message.MessageDetailResp
-	15, // 30: message.Message.GetMsgType:output_type -> message.GetMsgTypeRes
-	20, // 31: message.Message.FindUserBuoyMsg:output_type -> message.FindUserBuoyMsgRes
-	2,  // 32: message.Message.ClearUnreadMsg:output_type -> message.Response
-	24, // 33: message.Message.UserMsgList:output_type -> message.UserMsgListRes
-	31, // 34: message.Message.SendWxTmplMsg:output_type -> message.SendMsgResponse
-	29, // 35: message.Message.UserUnreadMsgList:output_type -> message.UserUnreadMsgListRes
-	2,  // 36: message.Message.MsgOpenLog:output_type -> message.Response
-	26, // [26:37] is the sub-list for method output_type
-	15, // [15:26] is the sub-list for method input_type
+	30, // 26: message.Message.AppLetterPush:input_type -> message.WxTmplMsgRequest
+	18, // 27: message.Message.multipleSaveMsg:output_type -> message.multipleSaveMsgResp
+	2,  // 28: message.Message.ChangeReadStatus:output_type -> message.Response
+	5,  // 29: message.Message.FindUserMsg:output_type -> message.FindUserMsgRes
+	8,  // 30: message.Message.FindMessageDetail:output_type -> message.MessageDetailResp
+	15, // 31: message.Message.GetMsgType:output_type -> message.GetMsgTypeRes
+	20, // 32: message.Message.FindUserBuoyMsg:output_type -> message.FindUserBuoyMsgRes
+	2,  // 33: message.Message.ClearUnreadMsg:output_type -> message.Response
+	24, // 34: message.Message.UserMsgList:output_type -> message.UserMsgListRes
+	31, // 35: message.Message.SendWxTmplMsg:output_type -> message.SendMsgResponse
+	29, // 36: message.Message.UserUnreadMsgList:output_type -> message.UserUnreadMsgListRes
+	2,  // 37: message.Message.MsgOpenLog:output_type -> message.Response
+	31, // 38: message.Message.AppLetterPush:output_type -> message.SendMsgResponse
+	27, // [27:39] is the sub-list for method output_type
+	15, // [15:27] is the sub-list for method input_type
 	15, // [15:15] is the sub-list for extension type_name
 	15, // [15:15] is the sub-list for extension extendee
 	0,  // [0:15] is the sub-list for field type_name

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

@@ -44,6 +44,8 @@ type MessageClient interface {
 	UserUnreadMsgList(ctx context.Context, in *UserUnreadMsgListReq, opts ...grpc.CallOption) (*UserUnreadMsgListRes, error)
 	// 点击消息-存查看记录
 	MsgOpenLog(ctx context.Context, in *MsgOpenLogReq, opts ...grpc.CallOption) (*Response, error)
+	// 发送剑鱼微信模版消息
+	AppLetterPush(ctx context.Context, in *WxTmplMsgRequest, opts ...grpc.CallOption) (*SendMsgResponse, error)
 }
 
 type messageClient struct {
@@ -153,6 +155,15 @@ func (c *messageClient) MsgOpenLog(ctx context.Context, in *MsgOpenLogReq, opts
 	return out, nil
 }
 
+func (c *messageClient) AppLetterPush(ctx context.Context, in *WxTmplMsgRequest, opts ...grpc.CallOption) (*SendMsgResponse, error) {
+	out := new(SendMsgResponse)
+	err := c.cc.Invoke(ctx, "/message.Message/AppLetterPush", 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
@@ -179,6 +190,8 @@ type MessageServer interface {
 	UserUnreadMsgList(context.Context, *UserUnreadMsgListReq) (*UserUnreadMsgListRes, error)
 	// 点击消息-存查看记录
 	MsgOpenLog(context.Context, *MsgOpenLogReq) (*Response, error)
+	// 发送剑鱼微信模版消息
+	AppLetterPush(context.Context, *WxTmplMsgRequest) (*SendMsgResponse, error)
 	mustEmbedUnimplementedMessageServer()
 }
 
@@ -219,6 +232,9 @@ func (UnimplementedMessageServer) UserUnreadMsgList(context.Context, *UserUnread
 func (UnimplementedMessageServer) MsgOpenLog(context.Context, *MsgOpenLogReq) (*Response, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method MsgOpenLog not implemented")
 }
+func (UnimplementedMessageServer) AppLetterPush(context.Context, *WxTmplMsgRequest) (*SendMsgResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method AppLetterPush not implemented")
+}
 func (UnimplementedMessageServer) mustEmbedUnimplementedMessageServer() {}
 
 // UnsafeMessageServer may be embedded to opt out of forward compatibility for this service.
@@ -430,6 +446,24 @@ func _Message_MsgOpenLog_Handler(srv interface{}, ctx context.Context, dec func(
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Message_AppLetterPush_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).AppLetterPush(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/message.Message/AppLetterPush",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MessageServer).AppLetterPush(ctx, req.(*WxTmplMsgRequest))
+	}
+	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)
@@ -481,6 +515,10 @@ var Message_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "MsgOpenLog",
 			Handler:    _Message_MsgOpenLog_Handler,
 		},
+		{
+			MethodName: "AppLetterPush",
+			Handler:    _Message_AppLetterPush_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "message.proto",