Browse Source

模板消息推送,结果记录

xingzai 2 years ago
parent
commit
bd57d78c8f

+ 2 - 0
models/activity.go

@@ -320,6 +320,7 @@ func UpdateActivitySattusToComplete() (err error) {
 //活动详情
 type WxMsgCygxActivityList struct {
 	Id                      int    `description:"报名ID"`
+	UserId                  int    `description:"用户ID"`
 	ActivityId              int    `description:"活动ID 等于0新增活动,大于0修改活动"`
 	ActivityTypeId          int    `description:"活动类型id"`
 	ActivityName            string `description:"活动名称"`
@@ -350,6 +351,7 @@ func GetActivitySendMsgListAll(endDate string) (items []*WxMsgCygxActivityList,
 	o := orm.NewOrm()
 	sql := `SELECT
 	s.id,
+	s.user_id,
 	s.fail_type,
 	cr.open_id,
 	a.*

+ 1 - 0
models/db.go

@@ -105,6 +105,7 @@ func init() {
 		new(CygxCelueArticleHistoryRecord),
 		new(CygxArticleHistoryRecordAll),
 		new(CygxActivityAppointment),
+		new(UserTemplateRecord),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 2 - 2
models/user_record.go

@@ -129,12 +129,12 @@ func GetUserThirdRecordByUserId(userId int) (item *UserRecord, err error) {
 func GetUserRecordListByMobile(platform int, bindAccount string) (items []*OpenIdList, err error) {
 	var sql string
 	if utils.RunMode == "release" {
-		sql = `SELECT cr.open_id FROM user_record  as u 
+		sql = `SELECT cr.open_id,user_id FROM user_record  as u 
 			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
 			WHERE create_platform=? AND bind_account IN (` + bindAccount + `)`
 	} else {
 		platform = 1
-		sql = `SELECT open_id FROM	user_record  WHERE create_platform =? AND bind_account IN (` + bindAccount + `)`
+		sql = `SELECT open_id,user_id FROM	user_record  WHERE create_platform =? AND bind_account IN (` + bindAccount + `)`
 	}
 	_, err = orm.NewOrm().Raw(sql, platform).QueryRows(&items)
 	return

+ 23 - 0
models/user_template_record.go

@@ -0,0 +1,23 @@
+package models
+
+import "github.com/beego/beego/v2/client/orm"
+
+type UserTemplateRecord struct {
+	Id         int `orm:"column(id);pk"`
+	UserId     int
+	OpenId     string
+	Resource   string
+	SendData   string
+	Result     string
+	CreateDate string
+	CreateTime string
+	SendStatus int
+	SendType   int
+}
+
+//添加banner
+func AddUserTemplateRecord(item *UserTemplateRecord) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 2 - 1
models/wx_template_msg.go

@@ -12,6 +12,7 @@ type SendTemplateResponse struct {
 
 type OpenIdList struct {
 	OpenId string
+	UserId int
 }
 
 func GetOpenIdList() (items []*OpenIdList, err error) {
@@ -37,7 +38,7 @@ func GetWxOpenIdList() (items []*OpenIdList, err error) {
 
 func GetWxOpenIdByMobileList(mobile string) (items []*OpenIdList, err error) {
 	//sql := `SELECT * FROM user_record WHERE bind_account IN (` + utils.WxMsgTemplateIdAskMsgMobile + `) AND create_platform = 1`
-	sql := `SELECT cr.* FROM user_record  as c
+	sql := `SELECT cr.*,user_id FROM user_record  as c
 			INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
 			WHERE bind_account IN (` + mobile + `) AND create_platform = 4`
 	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)

+ 2 - 0
services/activity.go

@@ -51,6 +51,7 @@ func SendActivityBeginMsg(cont context.Context) (err error) {
 		var first string
 		openIdItem := new(models.OpenIdList)
 		openIdItem.OpenId = v.OpenId
+		openIdItem.UserId = v.UserId
 		openIdList := make([]*models.OpenIdList, 0)
 		openIdList = append(openIdList, openIdItem)
 		//if v.FailType == 0 {
@@ -104,6 +105,7 @@ func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
 		var first string
 		openIdItem := new(models.OpenIdList)
 		openIdItem.OpenId = v.OpenId
+		openIdItem.UserId = v.UserId
 		openIdList := make([]*models.OpenIdList, 0)
 		openIdList = append(openIdList, openIdItem)
 		reserveResults = "--"

+ 67 - 43
services/wx_template_msg.go

@@ -46,7 +46,7 @@ func SendWxMsgWithFrequency(first, activityName, reserveResults, activityTime, a
 	sendData["activity_address"] = map[string]interface{}{"value": activityAddress, "color": "#173177"}
 	sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
 	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList)
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
 	return
 }
 
@@ -96,46 +96,7 @@ func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.
 	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
 	sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
 	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList)
-	return
-}
-
-func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList) (err error) {
-	for _, v := range items {
-		sendMap["touser"] = v.OpenId
-		data, err := json.Marshal(sendMap)
-		if err != nil {
-			fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
-			return err
-		}
-		utils.FileLog.Info("One SendData:%s", string(data))
-		fmt.Println(string(data))
-		err = SendTemplateMsg(sendUrl, data)
-		if err != nil {
-			fmt.Println("send err:", err.Error())
-			return err
-		}
-	}
-	return
-}
-
-func SendTemplateMsg(sendUrl string, data []byte) (err error) {
-	client := http.Client{}
-	resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
-	if err != nil {
-		return
-	}
-	defer resp.Body.Close()
-
-	body, _ := ioutil.ReadAll(resp.Body)
-	utils.FileLog.Info("SendResult:%s", string(body))
-	var templateResponse models.SendTemplateResponse
-	err = json.Unmarshal(body, &templateResponse)
-	fmt.Println(templateResponse.Errcode)
-	fmt.Println(templateResponse.Errmsg)
-	if err != nil {
-		return err
-	}
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
 	return
 }
 
@@ -172,7 +133,8 @@ func SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark string, openId
 	sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
 	sendMap["data"] = sendData
 	fmt.Println(accessToken)
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList)
+	fmt.Println(sendUrl)
+	//WxSendTemplateMsg(sendUrl, sendMap, openIdList)
 	return
 }
 
@@ -214,7 +176,7 @@ func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 str
 	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
 	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
 	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList)
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
 	return
 }
 
@@ -226,3 +188,65 @@ func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 str
 //弘则研究:
 //MwZ5wxfd0O1Yt0Pkf6OkfWP4USQzZbiEo5SkZ26735s     活动预约通知
 //dYg6iHooRq74PyCXmw_Ns7qdJZmbtLoKS2p2FKeaXl0     项目状态变更通知
+
+func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList, resource string, sendType int) (err error) {
+	for _, v := range items {
+		sendMap["touser"] = v.OpenId
+		data, err := json.Marshal(sendMap)
+		if err != nil {
+			fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
+			return err
+		}
+		utils.FileLog.Info("One SendData:%s", string(data))
+		fmt.Println(string(data))
+		err = SendTemplateMsg(sendUrl, data, resource, sendType, v)
+		if err != nil {
+			fmt.Println("send err:", err.Error())
+			return err
+		}
+	}
+	return
+}
+
+func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
+	client := http.Client{}
+	resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
+	if err != nil {
+		return
+	}
+	defer resp.Body.Close()
+
+	body, _ := ioutil.ReadAll(resp.Body)
+	utils.FileLog.Info("SendResult:%s", string(body))
+	var templateResponse models.SendTemplateResponse
+	err = json.Unmarshal(body, &templateResponse)
+	fmt.Println(templateResponse.Errcode)
+	fmt.Println(templateResponse.Errmsg)
+	if err != nil {
+		return err
+	}
+	//新增模板消息推送记录
+	{
+		tr := new(models.UserTemplateRecord)
+		tr.UserId = dataItem.UserId
+		tr.OpenId = dataItem.OpenId
+		tr.Resource = resource
+		tr.SendData = string(data)
+		tr.Result = string(body)
+		tr.CreateDate = time.Now().Format(utils.FormatDate)
+		tr.CreateTime = time.Now().Format(utils.FormatDateTime)
+		if templateResponse.Errcode == 0 {
+			tr.SendStatus = 1
+		} else {
+			tr.SendStatus = 0
+		}
+		tr.SendType = sendType
+		go func() {
+			err = models.AddUserTemplateRecord(tr)
+			if err != nil {
+				utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
+			}
+		}()
+	}
+	return
+}

+ 6 - 0
utils/constants.go

@@ -63,3 +63,9 @@ var (
 const (
 	CACHE_KEY_USER_VIEW = "user_view_record" //用户阅读数据
 )
+
+//模板消息推送类型
+const (
+	TEMPLATE_MSG_CYGX_ACTIVITY_ADD = 12 //查研观向小程序活动更新推送 12
+	TEMPLATE_MSG_CYGX_ARTICLE_ADD  = 13 //查研观向报告更新推送  13
+)