Browse Source

no message

xingzai 8 months ago
parent
commit
2710ae1c7d

+ 0 - 29
models/wx_template_msg.go

@@ -65,35 +65,6 @@ type AdminOpenIdList struct {
 	CompanyId int    `description:"手机号"`
 }
 
-// GetAdminOpendidByCompany 通过用户公司ID获取对应销售的openid
-func GetAdminOpendidByCompany(condition string, pars []interface{}) (list []*AdminOpenIdList, err error) {
-	o := orm.NewOrmUsingDB("weekly_report")
-	sql := `SELECT
-			a.mobile,
-			p.company_id 
-		FROM
-			company_product AS p
-			INNER JOIN admin AS a ON a.admin_id = p.seller_id 
-		WHERE
-			1 = 1 
-			AND p.product_id = 2 ` + condition
-	_, err = o.Raw(sql, pars).QueryRows(&list)
-	return
-}
-
-//func GetWxOpenIdByMobileSliceList(mobiles []string) (items []*OpenIdList, err error) {
-//	itemsLen := len(mobiles)
-//	if itemsLen == 0 {
-//		return
-//	}
-//	o := orm.NewOrm()
-//	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 (` + utils.GetOrmInReplace(itemsLen) + `) AND create_platform = 4`
-//	_, err = o.Raw(sql, mobiles).QueryRows(&items)
-//	return
-//}
-
 // 根据手机号获取用户的openid
 func GetWxOpenIdByMobileSliceList(mobiles []string) (items []*OpenIdList, err error) {
 	o := orm.NewOrm()

+ 5 - 4
services/activity.go

@@ -795,7 +795,7 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 	} else if source == 4 {
 		sourceMsg = "活动报名"
 	}
-	openIdList, e := models.GetUserRecordListByMobile(12, sellerItemQy.Mobile)
+	openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
 	if e != nil {
 		err = errors.New("GetUserRecordListByMobile, Err: " + e.Error())
 		return err
@@ -804,15 +804,16 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 	var keyword2 string
 	keyword1 = activityDetail.ActivityName
 	keyword2 = fmt.Sprint("互动:", sourceMsg, ",", user.RealName, "--", user.CompanyName)
-	//SendWxMsgWithActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
+	SendWxMsgWithActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
 
-	// 类目模版
+	// 买方研选类目模版
+	openIdListMfyx, e := models.GetMfyxWxOpenIdByMobileList(sellerItemQy.Mobile)
 	keyword1 = utils.TruncateActivityNameString(user.RealName + "-" + user.CompanyName)
 	keyword2 = fmt.Sprint("互动提醒:", sourceMsg)
 	keyword3 := utils.TruncateActivityNameString(activityDetail.ActivityName)
 	keyword4 := time.Now().Format(utils.FormatDateTimeMinute2)
 	redirectUrl = utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(activityDetail.ActivityId)
-	SendWxCategoryMsgWithActivityUserRemind(keyword1, keyword2, keyword3, keyword4, redirectUrl, openIdList, activityDetail.ActivityId)
+	SendWxCategoryMsgWithActivityUserRemind(keyword1, keyword2, keyword3, keyword4, redirectUrl, openIdListMfyx, activityDetail.ActivityId)
 	return
 }
 

+ 67 - 52
services/wechat_send_msg.go

@@ -16,47 +16,46 @@ import (
 
 // 访谈申请
 func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle string, itemOpenid *models.OpenIdList) (err error) {
-	var msg string
 	defer func() {
 		if err != nil {
-			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 			go utils.SendAlarmMsg(fmt.Sprint("访谈申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile), 2)
 		}
-		if msg != "" {
-			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
-		}
 	}()
 
-	accessToken, err := models.GetWxAccessTokenByXzs()
-	if err != nil {
-		msg = "GetWxAccessToken Err:" + err.Error()
-		return
-	}
-	if accessToken == "" {
-		msg = "accessToken is empty"
-		return
-	}
-
-	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-
-	sendMap := make(map[string]interface{})
-	sendData := make(map[string]interface{})
-
 	keyword1 := realName + "【" + companyName + "】"
 	first := "您有一条新的访谈申请,请及时处理。"
 	keyword2 := mobile
 	keyword3 := time.Now().Format(utils.FormatDateTime)
 	keyword4 := articleTitle
-	fontColor := "#D9001B"
-	sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
-	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
-	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
-	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
-	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
+	//fontColor := "#D9001B"
+	//sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
+	//sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
+	//sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
+	//sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
+	//sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
+	//
+	//sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
+	//sendMap["data"] = sendData
+	//sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY)
+
+	openIdArr := make([]string, 0)
+	openIdArr = append(openIdArr, itemOpenid.OpenId)
+
+	redirectUrl := ""
+	sendInfo := new(SendWxTemplate)
+	sendInfo.First = first
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	//sendInfo.Resource =
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
 
-	sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
-	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY)
 	fmt.Println("send end")
 	return
 }
@@ -73,32 +72,48 @@ func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleT
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
-	accessToken, err := models.GetWxAccessTokenByXzs()
-	if err != nil {
-		msg = "GetWxAccessToken Err:" + err.Error()
-		return
-	}
-	if accessToken == "" {
-		msg = "accessToken is empty"
-		return
-	}
-
-	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-
-	sendMap := make(map[string]interface{})
-	sendData := make(map[string]interface{})
-
-	first := realName + "-" + mobile + "【" + companyName + "】的访谈申请已取消,请留意。"
+	//accessToken, err := models.GetWxAccessTokenByXzs()
+	//if err != nil {
+	//	msg = "GetWxAccessToken Err:" + err.Error()
+	//	return
+	//}
+	//if accessToken == "" {
+	//	msg = "accessToken is empty"
+	//	return
+	//}
+	//
+	//sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	//
+	//sendMap := make(map[string]interface{})
+	//sendData := make(map[string]interface{})
+	//
+	//first := realName + "-" + mobile + "【" + companyName + "】的访谈申请已取消,请留意。"
 	keyword1 := articleTitle
 	keyword2 := time.Now().Format(utils.FormatDateTime)
-	fontColor := "#D9001B"
-	sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
-	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
-	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
+	//fontColor := "#D9001B"
+	//sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
+	//sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
+	//sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
+	//
+	//sendMap["template_id"] = utils.WxMsgTemplateIdApplyCancelXzs
+	//sendMap["data"] = sendData
+	//sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY)
 
-	sendMap["template_id"] = utils.WxMsgTemplateIdApplyCancelXzs
-	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY)
+	openIdArr := make([]string, 0)
+	openIdArr = append(openIdArr, itemOpenid.OpenId)
+	redirectUrl := ""
+	sendInfo := new(SendWxTemplate)
+
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyCancelXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	//sendInfo.Resource =
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
 	fmt.Println("send end")
 	return
 }

+ 16 - 28
services/wx_category_template_msg.go

@@ -68,24 +68,13 @@ func SendWxCategoryMsgWithActivityUserRemind(keyWord1, keyWord2, keyWord3, keyWo
 	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())
 		}
 	}()
 	keyWord1 = utils.TruncateActivityNameString(keyWord1)
-	accessToken, err := models.GetWxAccessTokenByXzs()
-	if err != nil {
-		msg = "GetWxAccessToken Err:" + err.Error()
-		return
-	}
-	if accessToken == "" {
-		msg = "accessToken is empty"
-		return
-	}
+
 	openIdArr := make([]string, 0)
 	for _, v := range openIdList {
 		openIdArr = append(openIdArr, v.OpenId)
@@ -122,7 +111,7 @@ func SendPermissionApplyCategoryTemplateMsg(realName, companyName, mobile, apply
 
 	detail, e := models.GetCygxApplyRecordByMobile(mobile)
 	if e != nil {
-		err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
+		err = errors.New("GetCygxApplyRecordByMobile" + e.Error())
 		return
 	}
 	//如果是潜在客户就推送可查看详情的模版消息
@@ -257,22 +246,18 @@ func SendActivitieCancelSignCategoryTemplateMsg(user *models.WxUserItem, activit
 
 // 发送用户留言提醒
 func SendCommentWxCategoryTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail, msgId int) (err error) {
-	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:", req.ArticleId), 2)
-			utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
 		}
 	}()
 
 	companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
 	if e != nil {
+		err = errors.New("GetSellerDetailAllByCompanyId, Err: " + e.Error())
 		return
 	}
-	if companyItem == nil {
-		msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
-	}
+
 	var keyword1 string
 	var keyword2 string
 	var keyword3 string
@@ -296,9 +281,9 @@ func SendCommentWxCategoryTemplateMsg(req models.AddCygxArticleCommentReq, user
 	} else {
 		mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
 	}
-	openIdList, e := models.GetWxOpenIdByMobileList(mobile)
+	openIdList, e := models.GetMfyxWxOpenIdByMobileList(mobile)
 	if e != nil {
-		err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
+		err = errors.New("GetMfyxWxOpenIdByMobileList, Err: " + e.Error())
 		return
 	}
 	openIdArr := make([]string, 0)
@@ -428,7 +413,10 @@ func SendActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetai
 
 	openIdList, e := models.GetMfyxUserRecordListByMobileArr(mobiles)
 	if e != nil {
-		err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
+		err = errors.New("GetMfyxUserRecordListByMobileArr, Err: " + e.Error())
+		return
+	}
+	if len(openIdList) == 0 {
 		return
 	}
 	openIdArr := make([]string, 0)
@@ -614,9 +602,9 @@ func SendWxCategoryMsgSpecialFollow(specialId int) (err error) {
 
 	mobile = strings.TrimRight(mobile, ",")
 
-	openIdList, e := models.GetWxOpenIdByMobileList(mobile)
+	openIdList, e := models.GetMfyxWxOpenIdByMobileList(mobile)
 	if e != nil {
-		err = errors.New("GetSellerByAdminId, Err: " + e.Error())
+		err = errors.New("GetMfyxWxOpenIdByMobileList, Err: " + e.Error())
 		return
 	}
 	if len(openIdList) == 0 {
@@ -684,9 +672,9 @@ func SendWxCategoryMsgInteractive(user *models.WxUserItem, interactive string, a
 		return err
 	}
 	if sellerItemQy != nil {
-		openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
+		openIdList, e := models.GetMfyxWxOpenIdByMobileList(sellerItemQy.Mobile)
 		if e != nil {
-			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
+			err = errors.New("GetMfyxWxOpenIdByMobileList, Err: " + e.Error())
 			return
 		}
 		if len(openIdList) == 0 {
@@ -750,9 +738,9 @@ func SearchKeywordUserRmindCategoryMsg(user *models.WxUserItem, keyWord string)
 		return
 	}
 	if sellerItemQy != nil {
-		openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
+		openIdList, e := models.GetMfyxWxOpenIdByMobileList(sellerItemQy.Mobile)
 		if e != nil {
-			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
+			err = errors.New("GetMfyxWxOpenIdByMobileList, Err: " + e.Error())
 			return
 		}
 		if len(openIdList) == 0 {

+ 82 - 55
services/wx_template_msg.go

@@ -65,83 +65,110 @@ func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.
 }
 
 // 发送用户阅读报告消息提醒
-func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, articleId int) (err error) {
+func SendWxMsgWithArticleUserRemind(keyword1, keyword2 string, openIdList []*models.OpenIdList, articleId 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:", articleId), 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
+	//accessToken, err := models.GetWxAccessTokenByXzs()
+	//if err != nil {
+	//	msg = "GetWxAccessToken Err:" + err.Error()
+	//	return
+	//}
+	//if accessToken == "" {
+	//	msg = "accessToken is empty"
+	//	return
+	//}
+	//var first string
+	//first = keyWord1
+	////keyword1 := keyWord2
+	////keyword1 := keyWord2
+	//remark := "点击查看报告详情"
+	//sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	//templateId := utils.WxMsgTemplateIdArticleUserRemind
+	//sendMap := make(map[string]interface{})
+	//sendData := make(map[string]interface{})
+	//sendMap["template_id"] = templateId
+	//sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)}
+	//sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
+	//sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
+	//sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
+	//sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
+	//sendMap["data"] = sendData
+	//WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
 	}
-	var first string
-	first = keyWord1
-	//keyword1 := keyWord2
-	//keyword1 := keyWord2
-	remark := "点击查看报告详情"
-	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	templateId := utils.WxMsgTemplateIdArticleUserRemind
-	sendMap := make(map[string]interface{})
-	sendData := make(map[string]interface{})
-	sendMap["template_id"] = templateId
-	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)}
-	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-	sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
-	sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
-	sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
-	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+	redirectUrl := utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+
+	sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = strconv.Itoa(articleId)
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
 	return
 }
 
 // 发送用户操作活动消息提醒
-func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
+func SendWxMsgWithActivityUserRemind(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
+	//accessToken, err := models.GetWxAccessTokenByXzs()
+	//if err != nil {
+	//	msg = "GetWxAccessToken Err:" + err.Error()
+	//	return
+	//}
+	//if accessToken == "" {
+	//	msg = "accessToken is empty"
+	//	return
+	//}
+	//var first string
+	////first = keyWord1
+	////keyword1 := keyWord2
+	//sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	//templateId := utils.WxMsgTemplateIdArticleUserRemind
+	//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["first"] = map[string]interface{}{"value": first, "color": "#173177"}
+	//sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
+	//sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
+	//sendMap["data"] = sendData
+	//WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
 	}
-	var first string
-	//first = keyWord1
-	//keyword1 := keyWord2
-	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	templateId := utils.WxMsgTemplateIdArticleUserRemind
-	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["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-	sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
-	sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
-	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+	redirectUrl := utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = strconv.Itoa(activityId)
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
 	return
 }