zwxi 11 months ago
parent
commit
9b3e9e4623
6 changed files with 187 additions and 18 deletions
  1. 1 0
      controllers/user.go
  2. 1 0
      services/activity.go
  3. 1 0
      services/user.go
  4. 149 0
      services/wx_category_template_msg.go
  5. 33 18
      utils/config.go
  6. 2 0
      utils/constants.go

+ 1 - 0
controllers/user.go

@@ -1202,6 +1202,7 @@ func (this *UserController) ApplyTryOut() {
 		openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 		if openIpItem != nil && openIpItem.OpenId != "" {
 			go services.SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, mobile, applyMethod, openIpItem)
+			go services.SendPermissionApplyCategoryTemplateMsg(req.RealName, req.CompanyName, mobile, applyMethod, openIpItem)
 		}
 	}
 	//添加成功后,设置5分钟缓存,不允许重复添加

+ 1 - 0
services/activity.go

@@ -767,6 +767,7 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 	keyword1 = activityDetail.ActivityName
 	keyword2 = fmt.Sprint("互动:", sourceMsg, ",", user.RealName, "--", user.CompanyName)
 	SendWxMsgWithActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
+	SendWxCategoryMsgWithActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
 	return
 }
 

+ 1 - 0
services/user.go

@@ -1172,6 +1172,7 @@ func SendPermissionApplyTemplateMsgAdmin(req models.ApplyTryReq, usermobile, app
 
 	for _, v := range openIdList {
 		go SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, usermobile, applyMethod, v)
+		go SendPermissionApplyCategoryTemplateMsg(req.RealName, req.CompanyName, usermobile, applyMethod, v)
 	}
 
 	//openIpItem, e := models.GetUserRecordByMobile(4, cnf.ConfigValue)

+ 149 - 0
services/wx_category_template_msg.go

@@ -0,0 +1,149 @@
+package services
+
+import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"hongze/hongze_mfyx/models"
+	"hongze/hongze_mfyx/utils"
+	"io/ioutil"
+	"net/http"
+	"strconv"
+	"strings"
+	"time"
+)
+type SendWxCategoryTemplate struct {
+	WxAppId        string   `description:"公众号appId"`
+	Keywords       []string `description:"模板消息keyword字段"`
+	TemplateId     string   `description:"模板id"`
+	RedirectUrl    string   `description:"跳转地址"`
+	RedirectTarget int      `description:"小程序跳转目标:1:弘则研报小程序,2:随手办公小程序,3:查研观向"`
+	Resource       string   `description:"资源唯一标识"`
+	SendType       int      `description:"发送的消息类型:1:报告,2:指标更新提醒,3:审批通知,4:销售领取客户通知,5:活动取消通知,6活动更改时间通知,7:关注的作者发布报告通知,8:发送日报(周报、双周报、月报)模板消息,9:活动预约/报名时间通知"`
+	OpenIdArr      []string `description:"消息接收者openid"`
+}
+
+// 推送类目模板消息
+func SendCategoryTemplateMsg(sendInfo *SendWxCategoryTemplate) (err error) {
+	postData, err := json.Marshal(sendInfo)
+	if err != nil {
+		go utils.SendAlarmMsg("SendCategoryTemplateMsg json.Marshal Err:"+err.Error(), 1)
+		return err
+	}
+	body := ioutil.NopCloser(strings.NewReader(string(postData)))
+	client := &http.Client{}
+	req, err := http.NewRequest("POST", utils.SendWxCategoryTemplateMsgUrl, body)
+	if err != nil {
+		go utils.SendAlarmMsg("SendCategoryTemplateMsg http.NewRequest Err:"+err.Error(), 1)
+		return err
+	}
+	contentType := "application/json;charset=utf-8"
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("Authorization", utils.SendTemplateMsgAuthorization)
+	resp, err := client.Do(req)
+	if err != nil {
+		fmt.Println("http client.Do Err:" + err.Error())
+		return err
+	}
+	defer resp.Body.Close()
+	b, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		return err
+	}
+	result := new(models.BaseResponse)
+	err = json.Unmarshal(b, &result)
+	if err != nil {
+		return err
+	}
+	if result.Ret != 200 {
+		err = errors.New(string(b))
+		return err
+	}
+	return
+}
+
+
+// 发送用户操作活动消息提醒
+func SendWxCategoryMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
+			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+		}
+	}()
+	accessToken, err := models.GetWxAccessTokenByXzs()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+	var keywords []string
+	keywords = append(keywords, keyWord1, keyWord2)
+
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	templateId := utils.WxMsgCategoryTemplateIdArticleUserRemind
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+	sendMap["template_id"] = templateId
+	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
+	sendData["keywords"] = map[string]interface{}{"value": keywords, "color": "#173177"}
+	sendMap["data"] = sendData
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+	return
+}
+
+func SendPermissionApplyCategoryTemplateMsg(realName, companyName, mobile, applyMethod string, itemOpenid *models.OpenIdList) (err error) {
+
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("权限申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile, ";Err:"+err.Error()), 2)
+		}
+	}()
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	var keyword5 string
+	var redirectUrl string
+
+	detail, e := models.GetCygxApplyRecordByMobile(mobile)
+	if e != nil {
+		err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
+		return
+	}
+	//如果是潜在客户就推送可查看详情的模版消息
+	if detail.ApplyMethod == 2 {
+		redirectUrl = utils.WX_MSG_PATH_APPLY_DETAIL + strconv.Itoa(detail.ApplyRecordId)
+	}
+	keyword1 = "权限申请:" + realName + "【" + companyName + "】"
+	keyword2 = mobile
+	keyword3 = time.Now().Format(utils.FormatDateTime)
+	keyword4 = applyMethod
+	openIdArr := make([]string, 0)
+	openIdArr = append(openIdArr, itemOpenid.OpenId)
+	sendInfo := new(SendWxCategoryTemplate)
+
+	keyword1 = realName
+	keyword2 = companyName
+	keyword3 = "权限申请"
+	keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
+	keyword5 = applyMethod
+
+	sendInfo.Keywords = []string{keyword1, keyword2, keyword3, keyword4, keyword5}
+	sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = mobile
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	err = SendCategoryTemplateMsg(sendInfo)
+	return
+}

+ 33 - 18
utils/config.go

@@ -28,24 +28,28 @@ var (
 	WxPublicIdXzs     string //查研观向小助手公众号
 	WxPublicSecretXzs string //查研观向小助手公众号
 
-	WxMsgTemplateIdApply                  string //申请待处理
-	WxMsgTemplateIdApplyXzs               string //申请待处理(小助手)
-	WxMsgTemplateIdApplyCancel            string //预约取消提醒
-	WxMsgTemplateIdApplyCancelXzs         string //预约取消提醒(小助手)
-	WxMsgTemplateIdPermissionApply        string //预约取消提醒
-	WxMsgTemplateIdActivityApply          string //活动预约消息提醒
-	WxMsgTemplateIdActivityApplyXzs       string //活动预约消息提醒(小助手)
-	WxMsgTemplateIdActivityChange         string //活动预约变更提醒
-	WxMsgTemplateIdAskMsg                 string //手机号用户【XXX】发送模板消息模板ID
-	WxMsgTemplateIdAskMsgXzs              string //手机号用户【XXX】发送模板消息模板ID(小助手)
-	WxMsgTemplateIdAskMsgMobile           string //手机号用户【XXX】发送模板消息
-	WxMsgTemplateIdAskMsgMobileAll        string //手机号用户【XXX】发送模板消rm --
-	WxMsgTemplateIdAskMsgMobilePublic     string //手机号用户【XXX】发送模板消rm --
-	TemplateIdByProductXzs                string //产品运行报告通知-模板ID(小助手)
-	WxMsgTemplateIdArticleUserRemind      string //用户阅读报告通知-模板ID
-	WxMsgTemplateIdArticleUserRemindXzs   string //用户阅读报告通知-模板ID(小助手)
-	WxMsgTemplateIdActivityChangeApplyXzs string //查研观向活动变更通知-模板ID(小助手)
-	WxMsgTemplateIdActivitySign           string //查研观向活动签到通知-模板ID(小助手)
+	WxMsgTemplateIdApply                     string //申请待处理
+	WxMsgTemplateIdApplyXzs                  string //申请待处理(小助手)
+	WxMsgTemplateIdApplyCancel               string //预约取消提醒
+	WxMsgTemplateIdApplyCancelXzs            string //预约取消提醒(小助手)
+	WxMsgTemplateIdPermissionApply           string //预约取消提醒
+	WxMsgTemplateIdActivityApply             string //活动预约消息提醒
+	WxMsgTemplateIdActivityApplyXzs          string //活动预约消息提醒(小助手)
+	WxMsgTemplateIdActivityChange            string //活动预约变更提醒
+	WxMsgTemplateIdAskMsg                    string //手机号用户【XXX】发送模板消息模板ID
+	WxMsgTemplateIdAskMsgXzs                 string //手机号用户【XXX】发送模板消息模板ID(小助手)
+	WxMsgTemplateIdAskMsgMobile              string //手机号用户【XXX】发送模板消息
+	WxMsgTemplateIdAskMsgMobileAll           string //手机号用户【XXX】发送模板消rm --
+	WxMsgTemplateIdAskMsgMobilePublic        string //手机号用户【XXX】发送模板消rm --
+	TemplateIdByProductXzs                   string //产品运行报告通知-模板ID(小助手)
+	WxMsgTemplateIdArticleUserRemind         string //用户阅读报告通知-模板ID
+	WxMsgCategoryTemplateIdArticleUserRemind string //用户阅读报告通知-类目模板ID
+	WxMsgTemplateIdArticleUserRemindXzs      string //用户阅读报告通知-模板ID(小助手)
+	WxMsgTemplateIdActivityChangeApplyXzs    string //查研观向活动变更通知-模板ID(小助手)
+	WxMsgTemplateIdActivitySign              string //查研观向活动签到通知-模板ID(小助手)
+
+	// 类目模板
+	WxCategoryMsgTemplateIdApplyXzs                  string //申请待处理(买方研选)
 )
 
 // 微信公众号配置信息
@@ -90,6 +94,7 @@ var (
 // 模板消息推送
 var (
 	SendWxTemplateMsgUrl string
+	SendWxCategoryTemplateMsgUrl string
 )
 
 func init() {
@@ -179,6 +184,7 @@ func init() {
 		EmaiWhiteUserList = "tshen@hzinsights.com;cxzhang@hzinsights.com;yyli@hzinsights.com"                                                                 //白名单邮箱
 		WxMsgTemplateIdAskMsg = "PaoDanHGlt1kFw5q-4_ipJSwO3FyZpxSSNg4rwB7YCk"
 		WxMsgTemplateIdArticleUserRemind = "7qe3i4MrGxAIPhJeMgoqqw6j0A_foUB65DLSmxKe05s"
+		WxMsgCategoryTemplateIdArticleUserRemind = "4fwzgJ-YQndzH5OJWLkd0grvftgqhvP285t_oXUboi7DaaIhMI"
 		WxMsgTemplateIdAskMsgMobile = ""
 		//ActSendMsgMobile = "15618524605"
 		ActSendMsgMobile = "18955528215" // 汪洋手机号
@@ -186,6 +192,7 @@ func init() {
 
 		ShangHaiCrmApiLink = "https://crm.hzinsights.com/"
 		SendWxTemplateMsgUrl = "http://127.0.0.1:8086/v1/wechat/send_template_msg"
+		SendWxCategoryTemplateMsgUrl = "http://127.0.0.1:8086/v1/wechat/send_category_template_msg"
 	} else {
 		WxAppId = "wx5e3240ab90c247ac"
 		WxAppSecret = "6b1316b46dc9c63429f5c1df6f51b4ac"
@@ -198,6 +205,7 @@ func init() {
 
 		WxMsgTemplateIdActivityChange = "qfNuops-CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM"
 		WxMsgTemplateIdArticleUserRemind = "CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM"
+		WxMsgCategoryTemplateIdArticleUserRemind = "4fwzgJ-2xUiyQqNkFCPd8vsGpOnNWWE2inZO4BXjfio"
 
 		WxPublicAppId = "wx9b5d7291e581233a"
 		WxPublicAppSecret = "f4d52e34021eee262dce9682b31f8861"
@@ -221,6 +229,7 @@ func init() {
 
 		ShangHaiCrmApiLink = "http://106.15.192.100:8100/"
 		SendWxTemplateMsgUrl = "http://127.0.0.1:8086/v1/wechat/send_template_msg"
+		SendWxCategoryTemplateMsgUrl = "http://127.0.0.1:8086/v1/wechat/send_category_template_msg"
 	}
 
 	//查研观向小助手
@@ -235,6 +244,9 @@ func init() {
 		TemplateIdByProductXzs = "-YjuPOB7Fqd-S3ilabYa6wvjDY9aXmeEfPN6DCiy-EY"                //产品运行报告通知-模板ID(小助手)
 		WxMsgTemplateIdActivityChangeApplyXzs = "CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM" //查研观向活动变更通知-模板ID(小助手)
 		WxMsgTemplateIdActivitySign = "3l5cxpqH6c9kkLe9ow7qzqd0uYEOdY3A_PB8wRWkiHk"           //查研观向活动签到通知-模板ID(小助手)
+
+		// 类目模版
+		WxCategoryMsgTemplateIdApplyXzs = "IemWOTzbnLBqJ2ozSiFqm13WjaotoC3V4uXaxTij08I"
 	} else {
 		//新的模板ID
 		WxPublicIdXzs = "wxb7cb8a15abad5b8e"                                                  //查研观向小助手
@@ -246,6 +258,9 @@ func init() {
 		TemplateIdByProductXzs = "tNcCUiK_uUkuxaFF7M9NP2RwLkw8uHFjG-TDIxGUKxo"                //产品运行报告通知-模板ID(小助手)
 		WxMsgTemplateIdActivityChangeApplyXzs = "7qe3i4MrGxAIPhJeMgoqqw6j0A_foUB65DLSmxKe05s" //查研观向活动变更通知-模板ID(小助手)
 		WxMsgTemplateIdActivitySign = "GIcOqewJql4rQ_dvhUna2knWIVogKulaqRxtZKnWZeo"           //查研观向活动签到通知-模板ID(小助手)
+
+		// 类目模版
+		WxCategoryMsgTemplateIdApplyXzs = "HKD03oZfSv8LJgeoHz0pynai3G2Ls4h8zZ6BfOpZmIA"
 	}
 
 	//易董开放api配置

+ 2 - 0
utils/constants.go

@@ -11,6 +11,8 @@ const (
 	FormatDateTime         = "2006-01-02 15:04:05"     //完整时间格式
 	HlbFormatDateTime      = "2006-01-02_15:04:05.999" //完整时间格式
 	FormatDateTimeNoSecond = "2006-01-02 15:04"        //完整时间格式
+	FormatDateTimeMinute   = "2006/01/02 15:04"        //时间格式 年/月/日 时:分
+	FormatDateTimeMinute2  = "2006-01-02 15:04"        //时间格式 年-月-日 时:分
 	FormatDateTimeUnSpace  = "20060102150405"          //完整时间格式
 	FormatDateTimeInit     = "0000-00-00 00:00:00"     //为空的初始化时间格式
 	PageSize15             = 15                        //列表页每页数据量