zhangxinlei1996 3 жил өмнө
parent
commit
55c835689b
10 өөрчлөгдсөн 351 нэмэгдсэн , 2 устгасан
  1. 2 2
      config.json
  2. 20 0
      config/config.go
  3. 33 0
      logs/message.log
  4. 17 0
      main.go
  5. BIN
      message.exe
  6. 55 0
      model/push.go
  7. 1 0
      points/points.go
  8. 33 0
      push.json
  9. 79 0
      push/push.go
  10. 111 0
      util/push.go

+ 2 - 2
config.json

@@ -3,10 +3,10 @@
 		"address": "192.168.3.240:4161"
 	},
 	"redis": {
-    	"address": "main=192.168.3.128:1712"
+    	"address": "main=192.168.3.206:1712"
     },
     "mongodb": {
-		"address": "192.168.3.128:27090",
+		"address": "192.168.3.206:27090",
  		"size": 5,
  		"dbName": "qfw",
 		"replSet": "",

+ 20 - 0
config/config.go

@@ -2,6 +2,7 @@ package config
 
 import (
 	"app.yhyue.com/moapp/jybase/common"
+	qrpc "app.yhyue.com/moapp/message/model"
 )
 
 type config struct {
@@ -36,8 +37,27 @@ type config struct {
 	}
 }
 
+var PushConfig *pushConfig
+
+type pushConfig struct {
+	Webdomain    string `json:"webdomain"`
+	Weixinrpc    string `json:"weixinrpc"`
+	PushPoolSize int    `json:"pushPoolSize"`
+	WxMsg        struct {
+		Id       string
+		First    *qrpc.TmplItem
+		Keyword1 *qrpc.TmplItem
+		Keyword2 *qrpc.TmplItem
+		Keyword3 *qrpc.TmplItem
+		Keyword4 *qrpc.TmplItem
+		Remark   *qrpc.TmplItem
+	} `json:"wxTplMsg"`
+	TestId string `json:"testId"`
+}
+
 var Config *config
 
 func init() {
 	common.ReadConfig(&Config)
+	common.ReadConfig("./push.json", &PushConfig)
 }

+ 33 - 0
logs/message.log

@@ -0,0 +1,33 @@
+2021/10/19 13:53:14 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634622794 E_app:jyapp_node1 E_body:map[]}
+2021/10/19 15:47:02 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634629622 E_app:jyapp_node1 E_body:map[]}
+2021/10/19 15:49:31 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634629766 E_app:jyapp_node1 E_body:map[]}
+2021/10/19 15:54:46 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634630078 E_app:jyapp_node1 E_body:map[]}
+2021/10/19 16:11:02 points.go:55: info  接收到消息 &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634631059 E_app:jywx_node E_body:map[]}
+2021/10/19 16:11:02 points.go:132: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634631059 E_app:jywx_node E_body:map[]} 已成功增加 5 积分
+2021/10/19 16:15:41 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634631341 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 16:18:14 points.go:55: info  接收到消息 &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634631492 E_app:jywx_node E_body:map[]}
+2021/10/19 16:18:15 points.go:132: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634631492 E_app:jywx_node E_body:map[]} 已成功增加 5 积分
+2021/10/19 16:26:38 points.go:55: info  接收到消息 &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634631995 E_app:jywx_node E_body:map[]}
+2021/10/19 16:26:38 points.go:132: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634631995 E_app:jywx_node E_body:map[]} 已成功增加 5 积分
+2021/10/19 16:34:22 points.go:55: info  接收到消息 &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634632460 E_app:jywx_node E_body:map[]}
+2021/10/19 16:34:22 points.go:111: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634632460 E_app:jywx_node E_body:map[]} 超过一天最大次数 5 限制,不再增加积分
+2021/10/19 16:35:49 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634632549 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 16:36:19 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634632579 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 16:37:20 points.go:55: info  接收到消息 &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634632638 E_app:jywx_node E_body:map[]}
+2021/10/19 16:37:20 points.go:111: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634632638 E_app:jywx_node E_body:map[]} 超过一天最大次数 5 限制,不再增加积分
+2021/10/19 16:38:39 points.go:55: info  接收到消息 &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634632716 E_app:jywx_node E_body:map[]}
+2021/10/19 16:38:39 points.go:111: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634632716 E_app:jywx_node E_body:map[]} 超过一天最大次数 5 限制,不再增加积分
+2021/10/19 16:40:06 points.go:55: info  接收到消息 &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634632803 E_app:jywx_node E_body:map[]}
+2021/10/19 16:40:06 points.go:111: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634632803 E_app:jywx_node E_body:map[]} 超过一天最大次数 5 限制,不再增加积分
+2021/10/19 16:42:28 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634632948 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 16:42:33 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634632953 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 16:42:34 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634632954 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 16:42:35 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634632955 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 16:42:37 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634632957 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 16:42:39 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634632959 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 16:53:32 points.go:55: info  接收到消息 &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634633609 E_app:jywx_node E_body:map[]}
+2021/10/19 16:53:32 points.go:111: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634633609 E_app:jywx_node E_body:map[]} 超过一天最大次数 5 限制,不再增加积分
+2021/10/19 16:54:13 points.go:55: info  接收到消息 &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634633650 E_app:jywx_node E_body:map[]}
+2021/10/19 16:54:13 points.go:111: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634633650 E_app:jywx_node E_body:map[]} 超过一天最大次数 5 限制,不再增加积分
+2021/10/19 17:02:05 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634634125 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2021/10/19 17:02:05 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634634125 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}

+ 17 - 0
main.go

@@ -6,6 +6,7 @@ import (
 	"app.yhyue.com/moapp/jybase/go-logger/logger"
 	. "app.yhyue.com/moapp/message/config"
 	"app.yhyue.com/moapp/message/points"
+	"app.yhyue.com/moapp/message/push"
 	"github.com/nsqio/go-nsq"
 )
 
@@ -34,6 +35,22 @@ func main() {
 		log.Fatal(err)
 	}
 
+	//push
+	config_push := nsq.NewConfig()
+	consumer_push, err := nsq.NewConsumer("jy_event", "push", config_push)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	consumer_push.AddHandler(&push.Push{})
+
+	// Use nsqlookupd to discover nsqd instances.
+	// See also ConnectToNSQD, ConnectToNSQDs, ConnectToNSQLookupds.
+	err = consumer_push.ConnectToNSQLookupd(Config.Nsq.Address)
+	if err != nil {
+		log.Fatal(err)
+	}
+
 	// Gracefully stop the consumer.
 	//consumer.Stop()
 	select {}

BIN
message.exe


+ 55 - 0
model/push.go

@@ -0,0 +1,55 @@
+package model
+
+type NotifyMsg struct {
+	Openid      string //用户id
+	Remark      string //消息内容,其他属性待加
+	Result      string //
+	Detail      string //
+	Title       string
+	Url         string
+	Date        string
+	Service     string
+	Color       string
+	DetailColor string
+	TplId       string
+}
+
+type RpcResult string
+
+//红包
+type BonusMsg struct {
+	Mchbillno   string `json:"mch_billno"`   //订单号
+	Sendname    string `json:"send_name"`    //红包发送者名称
+	Reopenid    string `json:"re_openid"`    //接受人openid
+	Totalamount int    `json:"total_amount"` //金额,单位分
+	Totalnum    int    `json:"total_num"`    //发放总人数
+	Wishing     string `json:"wishing"`      //祝福语128字以内
+	Actname     string `json:"act_name"`     //活动名称
+	Remark      string `json:"remark"`       //说明
+}
+type Article struct {
+	Title       string `json:"title"`
+	Description string `json:"description"`
+	PicUrl      string `json:"picurl"`
+	Url         string `json:"url"`
+}
+type News struct {
+	ToUser   string //用户id
+	Articles []Article
+}
+type CustomMsg struct {
+	Url  string
+	Data map[string]interface{}
+}
+
+type TmplItem struct {
+	Value string `json:"value,omitempty"`
+	Color string `json:"color,omitempty"`
+}
+
+type WxTmplMsg struct {
+	OpenId   string //用户id
+	Url      string
+	TplId    string
+	TmplData map[string]*TmplItem
+}

+ 1 - 0
points/points.go

@@ -63,6 +63,7 @@ func (p *Points) HandleMessage(m *nsq.Message) error {
 		f(msg)
 	} else {
 		logger.Info("无效的code值", msg)
+		return nil
 	}
 	Mgo_Log.Save("nsq_logs", map[string]interface{}{
 		"createtime": time.Now().Unix(),

+ 33 - 0
push.json

@@ -0,0 +1,33 @@
+{
+    	"webdomain":"http:// web-zxl.jydev.jianyu360.com",
+    	"weixinrpc": "127.0.0.1:8083",
+    	"pushPoolSize":5,
+    	"wxTplMsg":{
+    		"id":"bHGXG6wVqHInKONGkkRSPzQjt-truzxdSIzHkqQbf0Y",
+    		"first":{
+    			"value":"感谢用户%v,参与剑鱼标讯双十一大促抽奖活动!恭喜您抽中如下商品",
+    			"color":"#686868"
+    		},
+    		"keyword1":{
+    			"value":"%v",
+    			"color":"#44BEF3"
+    		},
+		"keyword2":{
+    			"value":"%v",
+    			"color":"#44BEF3"
+    		},
+		"keyword3":{
+    			"value":"%v",
+    			"color":"#44BEF3"
+    		},
+		"keyword4":{
+    			"value":"%v",
+    			"color":"#44BEF3"
+    		},
+    		"remark":{
+				"value":"快登陆剑鱼产品体验服务吧~",
+    			"color":"#686868"
+    		}
+    	},
+    "testId":"o043a5hr4gD9e1Yy8DSNjy9BX3U4"
+}

+ 79 - 0
push/push.go

@@ -0,0 +1,79 @@
+package push
+
+import (
+	"encoding/json"
+	"fmt"
+	"time"
+
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/go-logger/logger"
+	. "app.yhyue.com/moapp/message/db"
+	"app.yhyue.com/moapp/message/model"
+	"app.yhyue.com/moapp/message/util"
+	"github.com/nsqio/go-nsq"
+)
+
+type Push struct {
+}
+
+var funcMap = map[string]func(msg *model.Message){
+	"jywx_activity_message": jywx_activity_message,
+}
+
+//处理文库积分
+func (p *Push) HandleMessage(m *nsq.Message) error {
+	defer common.Catch()
+	if len(m.Body) == 0 {
+		// Returning nil will automatically send a FIN command to NSQ to mark the message as processed.
+		return nil
+	}
+	var msg *model.Message
+	err := json.Unmarshal(m.Body, &msg)
+	if err != nil {
+		logger.Error(err)
+		return err
+	}
+	logger.Info("接收到消息", fmt.Sprintf("%+v", msg))
+	if msg.E_code == "" {
+		logger.Info("缺少参数e_code", fmt.Sprintf("%+v", msg))
+		return nil
+	} else if msg.E_time == 0 {
+		logger.Info("缺少参数e_time", fmt.Sprintf("%+v", msg))
+		return nil
+	}
+	f, f_ok := funcMap[msg.E_code]
+	if f_ok {
+		f(msg)
+	} else {
+		logger.Info("无效的code值", msg)
+	}
+	Mgo_Log.Save("nsq_logs", map[string]interface{}{
+		"createtime": time.Now().Unix(),
+		"body":       msg,
+		"type":       "consumer", //producer or consumer
+	})
+	// Returning a non-nil error will automatically send a REQ command to NSQ to re-queue the message.
+	return nil
+}
+
+func jywx_activity_message(msg *model.Message) {
+	if len(msg.E_body) == 0 {
+		return
+	}
+	util.StartPush(msg.E_body)
+	/*
+			phone := qu.ObjToString(mess["phone"])
+		product_type := qu.ObjToString(mess["product_type"])
+		order_code := qu.ObjToString(mess["order_code"])
+		buy_time := qu.ObjToString(mess["buy_time"])
+		end_time := qu.ObjToString(mess["end_time"])
+	*/
+	// util.StartPush("", map[string]interface{}{
+	// 	"phone":        "18624906090",
+	// 	"product_type": "超级订阅一个月",
+	// 	"order_code":   "1234567890",
+	// 	"buy_time":     "2021-10-19 22:22:22",
+	// 	"end_time":     "2021-11-19 23:59:59",
+	// })
+	// return
+}

+ 111 - 0
util/push.go

@@ -0,0 +1,111 @@
+package util
+
+import (
+	"fmt"
+	"log"
+	"net/rpc"
+
+	qu "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/message/config"
+	qrpc "app.yhyue.com/moapp/message/model"
+)
+
+var PushPool = make(chan bool, config.PushConfig.PushPoolSize)
+
+func StartPush(mess map[string]interface{}) {
+	//推送微信
+	if isPushOk := SendWeixin(mess); !isPushOk {
+		log.Println("推送失败:", mess)
+	}
+
+}
+
+//推送微信
+func SendWeixin(mess map[string]interface{}) bool {
+	if len(mess) == 0 {
+		return false
+	}
+	s_m_openid := qu.ObjToString(mess["openid"])
+	if config.PushConfig.TestId != "" {
+		s_m_openid = config.PushConfig.TestId
+	}
+	PushPool <- true
+	defer func() {
+		<-PushPool
+	}()
+	phone := qu.ObjToString(mess["phone"])
+	product_type := qu.ObjToString(mess["product_type"])
+	order_code := qu.ObjToString(mess["order_code"])
+	buy_time := qu.ObjToString(mess["buy_time"])
+	end_time := qu.ObjToString(mess["end_time"])
+
+	//商品名称
+	keyword1_color := config.PushConfig.WxMsg.Keyword1.Color
+	keyword1_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword1.Value, product_type)
+	//订单编号
+	keyword2_color := config.PushConfig.WxMsg.Keyword2.Color
+	keyword2_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword2.Value, order_code)
+	//购买时间
+	keyword3_color := config.PushConfig.WxMsg.Keyword3.Color
+	keyword3_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword3.Value, buy_time)
+	//到期时间
+	keyword4_color := config.PushConfig.WxMsg.Keyword4.Color
+	keyword4_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword4.Value, end_time)
+
+	first_value := fmt.Sprintf(config.PushConfig.WxMsg.First.Value, phone)
+	first_color := config.PushConfig.WxMsg.First.Color
+	remark_value := config.PushConfig.WxMsg.Remark.Value
+
+	tmplData := map[string]*qrpc.TmplItem{
+		"first": &qrpc.TmplItem{
+			Value: first_value,
+			Color: first_color,
+		},
+		"keyword1": &qrpc.TmplItem{
+			Value: keyword1_value,
+			Color: keyword1_color,
+		},
+		"keyword2": &qrpc.TmplItem{
+			Value: keyword2_value,
+			Color: keyword2_color,
+		},
+		"keyword3": &qrpc.TmplItem{
+			Value: keyword3_value,
+			Color: keyword3_color,
+		},
+		"keyword4": &qrpc.TmplItem{
+			Value: keyword4_value,
+			Color: keyword4_color,
+		},
+		"remark": &qrpc.TmplItem{
+			Value: remark_value,
+			Color: first_color,
+		},
+	}
+	ok, _ := WxSendTmplMsg(config.PushConfig.Weixinrpc, &qrpc.WxTmplMsg{
+		OpenId:   s_m_openid,
+		TplId:    config.PushConfig.WxMsg.Id,
+		TmplData: tmplData,
+	})
+	return ok
+}
+
+/*通用的微信发模板消息方法
+ *成功:repl=="Y"
+ */
+func WxSendTmplMsg(address string, p *qrpc.WxTmplMsg) (bool, error) {
+	defer qu.Catch()
+	var repl qrpc.RpcResult
+	client, err := rpc.DialHTTP("tcp", address)
+	if err != nil {
+		log.Println(p.OpenId, err)
+		return false, err
+	}
+	defer client.Close()
+	err = client.Call("WeiXinRpc.SendTmplMsg", p, &repl)
+	if err != nil {
+		log.Println(p.OpenId, err)
+		return false, err
+	}
+	return repl == "Y", nil
+}