xingzai 11 месяцев назад
Родитель
Сommit
66a45ac9df
3 измененных файлов с 288 добавлено и 406 удалено
  1. 37 37
      services/activity.go
  2. 32 52
      services/wechat_send_msg.go
  3. 219 317
      services/wx_template_msg.go

+ 37 - 37
services/activity.go

@@ -2196,43 +2196,43 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 }
 
 // 用户专项调研操作行为,模板消息推送
-func SpecialActivityUserRemind(user *models.WxUserItem, activityDetail *models.CygxActivitySpecialDetail, source int) (err error) {
-	defer func() {
-		if err != nil {
-			go utils.SendAlarmMsg("同步策略平台阅读数据失败", 2)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetCeLueArticlePv ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-		}
-	}()
-	countUser, err := models.GetUserRemind(user.UserId)
-	if err != nil {
-		return err
-	}
-	if countUser == 0 {
-		return err
-	}
-	var sourceMsg string
-	if source == 1 {
-		sourceMsg = "预报名调研"
-	}
-	//获取销售手机号
-	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		return err
-	}
-	if sellerItemQy != nil {
-		openIdList, err := models.GetUserRecordListByMobile(4, sellerItemQy.Mobile)
-		if err != nil {
-			fmt.Println(err)
-			return err
-		}
-		var keyword1 string
-		var keyword2 string
-		keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:", sourceMsg)
-		keyword2 = activityDetail.ResearchTheme
-		SendWxMsgWithSpecialActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
-	}
-	return
-}
+//func SpecialActivityUserRemind(user *models.WxUserItem, activityDetail *models.CygxActivitySpecialDetail, source int) (err error) {
+//	defer func() {
+//		if err != nil {
+//			go utils.SendAlarmMsg("同步策略平台阅读数据失败", 2)
+//			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetCeLueArticlePv ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+//		}
+//	}()
+//	countUser, err := models.GetUserRemind(user.UserId)
+//	if err != nil {
+//		return err
+//	}
+//	if countUser == 0 {
+//		return err
+//	}
+//	var sourceMsg string
+//	if source == 1 {
+//		sourceMsg = "预报名调研"
+//	}
+//	//获取销售手机号
+//	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+//	if err != nil && err.Error() != utils.ErrNoRow() {
+//		return err
+//	}
+//	if sellerItemQy != nil {
+//		openIdList, err := models.GetUserRecordListByMobile(4, sellerItemQy.Mobile)
+//		if err != nil {
+//			fmt.Println(err)
+//			return err
+//		}
+//		var keyword1 string
+//		var keyword2 string
+//		keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:", sourceMsg)
+//		keyword2 = activityDetail.ResearchTheme
+//		SendWxMsgWithSpecialActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
+//	}
+//	return
+//}
 
 //func init() {
 //	DoActivityOnenIdWxTemplateMsg()

+ 32 - 52
services/wechat_send_msg.go

@@ -27,79 +27,59 @@ func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle s
 		}
 	}()
 
-	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}
 
-	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)
 	fmt.Println("send end")
 	return
 }
 
 // 访谈申请取消
 func SendInterviewApplyCancelTemplateMsg(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{})
-
-	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}
 
-	sendMap["template_id"] = utils.WxMsgTemplateIdApplyCancelXzs
-	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY)
-	fmt.Println("send end")
+	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)
 	return
 }
 

+ 219 - 317
services/wx_template_msg.go

@@ -207,232 +207,108 @@ func SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark string, openId
 }
 
 // 发送报告提问消息提醒
-func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, articleId int) (err error) {
+func SendWxMsgWithArticleClassToAdmin(keyword1, keyword2, keyword3, keyword4 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
+
+	//sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	//templateId := utils.TemplateIdByProductXzs
+	//sendMap := make(map[string]interface{})
+	//sendData := make(map[string]interface{})
+	//sendMap["template_id"] = templateId
+	//sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + 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["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
+	//sendData["keyword4"] = map[string]interface{}{"value": keyword4, "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
-	keyword2 := keyWord3
-	keyword3 := keyWord4
-	keyword4 := ""
 
-	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	templateId := utils.TemplateIdByProductXzs
-	sendMap := make(map[string]interface{})
-	sendData := make(map[string]interface{})
-	sendMap["template_id"] = templateId
-	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + 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["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
-	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "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.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+
+	sendInfo.TemplateId = utils.TemplateIdByProductXzs
+	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 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
-	}
-	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)
-	return
-}
 
-// 发送用户操作活动消息提醒
-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
+	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_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
 	return
 }
 
-// 发送用户操作专项调研活动消息提醒
-func SendWxMsgWithSpecialActivityUserRemind(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
-	}
-	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/specialDetail/specialDetail?id=" + strconv.Itoa(activityId)}
-	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
-	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
-	return
-}
-
-// 活动带问提醒
-func SendActivityAskApplyTemplateMsg(applyName, applyTime, askContent, activityName string, activityId int, 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("活动带问提醒发送模版消息失败"+activityName, 2)
-		}
-		if msg != "" {
-			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
 
-	var accessToken string
-	if utils.RunMode == "release" {
-		accessToken, err = models.GetWxAccessTokenByXzs()
-		if err != nil {
-			msg = "GetWxAccessToken Err:" + err.Error()
-			return
-		}
-		if accessToken == "" {
-			msg = "accessToken is empty"
-			return
-		}
-	} else {
-		accessToken, err = models.GetWxAccessToken()
-		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 := "有新的客户提问"
-	keyword1 := applyName
-	keyword2 := "-"
-	keyword3 := applyTime
-	keyword4 := askContent
-	remark := activityName
-	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}
-	sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
-	if utils.RunMode == "release" {
-		sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
-	} else {
-		sendMap["template_id"] = utils.WxMsgTemplateIdApply
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
 	}
-	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
-	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, sendMap, itemOpenid, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
-	fmt.Println("send end")
+	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
 }
 
@@ -479,69 +355,69 @@ func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, r
 }
 
 // 专项产业调研模板消息推送
-func SendSpecialTemplateMsg(applyName, applyTime, mobile, activityName, resource 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("专项产业调研模板消息推送消息失败"+activityName, 2)
-		}
-		if msg != "" {
-			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
-		}
-	}()
-	var accessToken string
-	if utils.RunMode == "release" {
-		accessToken, err = models.GetWxAccessTokenByXzs()
-		if err != nil {
-			msg = "GetWxAccessToken Err:" + err.Error()
-			return
-		}
-		if accessToken == "" {
-			msg = "accessToken is empty"
-			return
-		}
-	} else {
-		accessToken, err = models.GetWxAccessToken()
-		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{})
-	var first string
-	if resource == "sale" {
-		first = "有客户对专项调研感兴趣"
-	} else {
-		first = "有5家公司预报名专项调研"
-	}
-
-	keyword1 := applyName
-	keyword2 := mobile
-	keyword3 := applyTime
-	keyword4 := activityName
-
-	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}
-	if utils.RunMode == "release" {
-		sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
-	} else {
-		sendMap["template_id"] = utils.WxMsgTemplateIdApply
-	}
-	sendMap["data"] = sendData
-	sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
-	return
-}
+//func SendSpecialTemplateMsg(applyName, applyTime, mobile, activityName, resource 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("专项产业调研模板消息推送消息失败"+activityName, 2)
+//		}
+//		if msg != "" {
+//			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
+//		}
+//	}()
+//	var accessToken string
+//	if utils.RunMode == "release" {
+//		accessToken, err = models.GetWxAccessTokenByXzs()
+//		if err != nil {
+//			msg = "GetWxAccessToken Err:" + err.Error()
+//			return
+//		}
+//		if accessToken == "" {
+//			msg = "accessToken is empty"
+//			return
+//		}
+//	} else {
+//		accessToken, err = models.GetWxAccessToken()
+//		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{})
+//	var first string
+//	if resource == "sale" {
+//		first = "有客户对专项调研感兴趣"
+//	} else {
+//		first = "有5家公司预报名专项调研"
+//	}
+//
+//	keyword1 := applyName
+//	keyword2 := mobile
+//	keyword3 := applyTime
+//	keyword4 := activityName
+//
+//	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}
+//	if utils.RunMode == "release" {
+//		sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
+//	} else {
+//		sendMap["template_id"] = utils.WxMsgTemplateIdApply
+//	}
+//	sendMap["data"] = sendData
+//	sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
+//	return
+//}
 
 //弘则投资:
 //Y59n_AHg-RLCKaz293geW76KDHpGL1qOnE7eF_lxelY  活动预约通知
@@ -615,101 +491,127 @@ func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int,
 }
 
 // 发送报告更新的消息给预约的用户
-func SendWxMsgWithArticleUpdate(first, keyWord1, keyWord2, keyWord3, keyWord4 string, item *models.OpenIdList, articleId int) (err error) {
-	var msg string
+func SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4 string, item *models.OpenIdList, articleId int) (err error) {
 	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
-	}
-	var openIdList []*models.OpenIdList
-	openIdList = append(openIdList, item)
-	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	templateId := utils.TemplateIdByProductXzs
-	sendMap := make(map[string]interface{})
-	sendData := make(map[string]interface{})
-	sendMap["template_id"] = templateId
-	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId) + "&IsSendWx=1"}
-	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["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
-	sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
-	sendData["remark"] = map[string]interface{}{"value": "点击查看报告详情", "color": "#173177"}
-	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+	//accessToken, err := models.GetWxAccessTokenByXzs()
+	//if err != nil {
+	//	msg = "GetWxAccessToken Err:" + err.Error()
+	//	return
+	//}
+	//if accessToken == "" {
+	//	msg = "accessToken is empty"
+	//	return
+	//}
+	//var openIdList []*models.OpenIdList
+	//openIdList = append(openIdList, item)
+	//sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	//templateId := utils.TemplateIdByProductXzs
+	//sendMap := make(map[string]interface{})
+	//sendData := make(map[string]interface{})
+	//sendMap["template_id"] = templateId
+	//sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId) + "&IsSendWx=1"}
+	//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["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
+	//sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
+	//sendData["remark"] = map[string]interface{}{"value": "点击查看报告详情", "color": "#173177"}
+	//sendMap["data"] = sendData
+	//WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+
+	openIdArr := make([]string, 0)
+	openIdArr = append(openIdArr, item.OpenId)
+	redirectUrl := utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword2 = keyword3
+	sendInfo.Keyword2 = keyword4
+	sendInfo.TemplateId = utils.TemplateIdByProductXzs
+	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
 }
 
 // 周日下午4点半,推送全部活动
-func SendActivityOnenIdWxTemplateMsg(first, keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList) (err error) {
-	var msg string
+func SendActivityOnenIdWxTemplateMsg(first, keyword1, keyword2, keyword3, keyword4 string, openIdList []*models.OpenIdList) (err error) {
 	defer func() {
 		if err != nil {
-			go utils.SendEmail("周日下午4点半,推送全部活"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 			go utils.SendAlarmMsg(fmt.Sprint("发送周日下午4点半,推送全部活模版消息失败,"), 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 openIdList []*models.OpenIdList
+	////openIdList = append(openIdList, item)
+	//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": "pages/activity/activity"}
+	////sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
+	//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["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
+	//sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
+	//sendData["remark"] = map[string]interface{}{"value": "点击查看下周活动列表", "color": "#173177"}
+	//sendMap["data"] = sendData
+	//WxSendTemplateMsg(sendUrl, sendMap, openIdList, "", utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+
+	openIdArr := make([]string, 0)
+
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
 	}
-	//var openIdList []*models.OpenIdList
-	//openIdList = append(openIdList, item)
-	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": "pages/activity/activity"}
-	//sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
-	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["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
-	sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
-	sendData["remark"] = map[string]interface{}{"value": "点击查看下周活动列表", "color": "#173177"}
-	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList, "", utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+	redirectUrl := "pages/activity/activity"
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword2 = keyword3
+	sendInfo.Keyword2 = keyword4
+	sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	//sendInfo.Resource =
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
 	return
 }
 
 // 发送用户留言提醒
 // func SendCommentWxTemplateMsg(title, companyName, userName, sellerName, createTime, content string, openIdList []*models.OpenIdList, articleId int) (err error) {
+
 func SendCommentWxTemplateMsg(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())
+			go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId, "Err:", err.Error()), 2)
 		}
 	}()
 
 	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 first string
 	var keyword1 string
 	var keyword2 string