Sfoglia il codice sorgente

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into cygx_10.5.1

xingzai 1 anno fa
parent
commit
06f52a49a1

+ 12 - 13
controllers/activity.go

@@ -1465,7 +1465,7 @@ func (this *ActivityCoAntroller) AskAdd() {
 	item.Mobile = user.Mobile
 	item.Email = user.Email
 	item.Content = content
-	_, err = models.AddActivityHelpAsk(item)
+	msgId, err := models.AddActivityHelpAsk(item)
 	if err != nil {
 		br.Msg = "提交失败"
 		br.ErrMsg = "提交带问失败,Err:" + err.Error()
@@ -1496,6 +1496,7 @@ func (this *ActivityCoAntroller) AskAdd() {
 				sendMobile = v.Mobile
 			}
 		}
+		//如果是研选的就推送给汪洋
 		if activityInfo.ChartPermissionId == 31 {
 			sendMobile = utils.ActSendMsgMobile
 		}
@@ -1512,8 +1513,7 @@ func (this *ActivityCoAntroller) AskAdd() {
 			openIpItem, _ := models.GetUserRecordByMobile(4, sendMobile)
 			if openIpItem != nil && openIpItem.OpenId != "" {
 				if sellerItem != nil {
-					//services.SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
-					services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo, int(msgId))
 				}
 			}
 		}
@@ -1521,8 +1521,7 @@ func (this *ActivityCoAntroller) AskAdd() {
 		if sellerItem != nil {
 			openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 			if openIpItem != nil && openIpItem.OpenId != "" {
-				//services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
-				services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+				services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo, int(msgId))
 			}
 		}
 	}
@@ -3048,14 +3047,14 @@ func (this *ActivityCoAntroller) SpecialSignupAdd() {
 			resp.PopupMsg = "感谢反馈"
 			resp.PopupMsg2 = "此调研具体行程尚未确认,待预报名人数满10人后弘则会确定行程并推送给您活动日期,只有在确认行程中再次报名才完成占位。"
 			//给所属销售发送消息
-			if sellerItem.Mobile != "" {
-				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
-				if openIpItem != nil && openIpItem.OpenId != "" {
-					if sellerItem != nil {
-						go services.SendSpecialTemplateMsg(user.RealName+"【"+user.CompanyName+"】", time.Now().Format(utils.FormatDateTime), user.Mobile, activityInfo.ResearchTheme, "sale", openIpItem)
-					}
-				}
-			}
+			//if sellerItem.Mobile != "" {
+			//	openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
+			//	if openIpItem != nil && openIpItem.OpenId != "" {
+			//		if sellerItem != nil {
+			//			go services.SendSpecialTemplateMsg(user.RealName+"【"+user.CompanyName+"】", time.Now().Format(utils.FormatDateTime), user.Mobile, activityInfo.ResearchTheme, "sale", openIpItem)
+			//		}
+			//	}
+			//}
 			// 给芳姐发消息
 			//cnf, _ := models.GetConfigByCode("tpl_msg")
 			actList, _ := models.GetActivityListSpecialByActivityId(activityId)

+ 80 - 8
controllers/micro_roadshow.go

@@ -345,9 +345,9 @@ func (this *MicroRoadShowController) CommentAdd() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-
+	var isResearch bool // 是否属于研选
 	sourceType := req.SourceType
-
+	title := req.Title
 	if sourceType == 0 {
 		sourceType = 1
 	}
@@ -362,7 +362,8 @@ func (this *MicroRoadShowController) CommentAdd() {
 		Content:     req.Content,
 		Title:       req.Title,
 	}
-	var resourceId int
+
+	//var resourceId int
 	if sourceType == 1 {
 		activityVoiceInfo, _ := models.GetCygxActivityVoiceByActivityId(req.Id)
 		if activityVoiceInfo == nil {
@@ -372,7 +373,7 @@ func (this *MicroRoadShowController) CommentAdd() {
 		}
 		item.ActivityId = req.Id
 		item.ActivityVoiceId = activityVoiceInfo.ActivityVoiceId
-		resourceId = activityVoiceInfo.ActivityId
+		//resourceId = activityVoiceInfo.ActivityId
 	} else if sourceType == 2 {
 		activityInfo, _ := models.GetCygxActivityVideoByActivityId(req.Id)
 		if activityInfo == nil {
@@ -382,7 +383,7 @@ func (this *MicroRoadShowController) CommentAdd() {
 		}
 		item.VideoId = activityInfo.VideoId
 		item.ActivityId = req.Id
-		resourceId = activityInfo.ActivityId
+		//resourceId = activityInfo.ActivityId
 	} else if sourceType == 3 {
 		item.VideoId = req.Id
 		microVideo, e := models.GetMicroRoadshowVideoById(req.Id)
@@ -392,15 +393,28 @@ func (this *MicroRoadShowController) CommentAdd() {
 			return
 		}
 		item.IndustryId = microVideo.IndustryId
-		resourceId = microVideo.IndustryId
+		//resourceId = microVideo.IndustryId
+	}
+
+	if sourceType == 2 || sourceType == 3 {
+		detail, err := models.GetAddActivityInfoById(req.Id)
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(req.Id)
+			return
+		}
+		if strings.Contains(detail.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
+			isResearch = true
+		}
 	}
-	_, err = models.AddArticleComment(&item)
+
+	msgId, err := models.AddArticleComment(&item)
 	if err != nil {
 		br.Msg = "提交失败"
 		br.ErrMsg = "提交留言失败,Err:" + err.Error()
 		return
 	}
-	services.SendWxMsgWithMicroRoadshowAsk(req, user, resourceId)
+	services.SendWxMsgWithMicroRoadshowAsk(req, user, sourceType, int(msgId), title, isResearch)
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -779,3 +793,61 @@ func (this *MicroRoadShowController) Mycollect() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 模版消息留言详情
+// @Description 模版消息留言详情接口
+// @Param   SourceId		query	int		true	"资源ID"
+// @Param   SourceType	query	int		true	"留言类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频"
+// @Success Ret=200 {object} models.CygxArticleCommentWxResp
+// @router /comment/detail [get]
+func (this *MicroRoadShowController) CommentDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	sourceId, _ := this.GetInt("SourceId")
+	sourceType, _ := this.GetInt("SourceType")
+	resp := new(models.CygxArticleCommentWxResp)
+	if sourceType == 1 || sourceType == 3 || sourceType == 4 || sourceType == 5 {
+		detail, err := models.GetArticleCommentById(sourceId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取用户权限失败, Err: " + err.Error()
+			return
+		}
+		resp.Content = detail.Content
+		if sourceType == 1 {
+			resp.SourceId = detail.ArticleId
+			resp.RedirectType = 1
+		} else if sourceType == 3 {
+			resp.SourceId = detail.IndustryId
+			resp.RedirectType = 3
+		} else {
+			resp.SourceId = detail.ActivityId
+			resp.RedirectType = 2
+		}
+	} else {
+		detail, err := models.GetCygxActivityHelpAskById(sourceId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取用户权限失败, Err: " + err.Error()
+			return
+		}
+		resp.Content = detail.Content
+		resp.SourceId = detail.ActivityId
+		resp.RedirectType = 2
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Data = resp
+	br.Msg = "操作成功"
+	return
+}

+ 2 - 36
controllers/report.go

@@ -3586,48 +3586,14 @@ func (this *ReportController) CommentAdd() {
 		Content:     content,
 		Title:       articleInfo.Title,
 	}
-	_, err = models.AddArticleComment(&item)
+	msgId, err := models.AddArticleComment(&item)
 	if err != nil {
 		br.Msg = "提交失败"
 		br.ErrMsg = "提交留言失败,Err:" + err.Error()
 		return
 	}
 
-	//获取销售信息
-	//sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-	//if err != nil && err.Error() != utils.ErrNoRow() {
-	//	br.Msg = "提交失败"
-	//	br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-	//	return
-	//}
-	//// 给所属销售发送消息
-	//var openIdList []*models.OpenIdList
-	//if sellerItem != nil {
-	//	list, _ := models.GetWxOpenIdByMobileList(sellerItem.Mobile)
-	//	for _, idList := range list {
-	//		openIdList = append(openIdList, idList)
-	//	}
-	//	if openIdList != nil {
-	//		// 给芳姐发消息
-	//		cnf, _ := models.GetConfigByCode("tpl_msg")
-	//		if cnf != nil {
-	//			list, _ := models.GetWxOpenIdByMobileList(cnf.ConfigValue)
-	//			for _, idList := range list {
-	//				openIdList = append(openIdList, idList)
-	//			}
-	//		}
-	//		if articleId > 1000000 {
-	//			//发给汪洋
-	//			list, _ := models.GetWxOpenIdByMobileList(utils.ActSendMsgMobile)
-	//			for _, idList := range list {
-	//				openIdList = append(openIdList, idList)
-	//			}
-	//		}
-	//		services.SendCommentWxTemplateMsg(articleInfo.Title, user.CompanyName, user.RealName, sellerItem.RealName, item.CreateTime.Format(utils.FormatDateTime), req.Content, openIdList, req.ArticleId)
-	//	}
-	//}
-
-	services.SendCommentWxTemplateMsg(req, user, articleInfo)
+	services.SendCommentWxTemplateMsg(req, user, articleInfo, int(msgId))
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "提交成功"

+ 81 - 67
controllers/user.go

@@ -861,7 +861,7 @@ func (this *UserController) ApplyTryOut() {
 	var title string
 	tryType := req.TryType
 	detailId := req.DetailId
-
+	var isResearch bool // 是否属于研选
 	if tryType == "Article" {
 		detail, err := models.GetArticleDetailById(detailId)
 		if err != nil {
@@ -870,6 +870,9 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = detail.Title
+		if detail.ArticleTypeId > 0 {
+			isResearch = true
+		}
 	} else if tryType == "Activity" {
 		detail, err := models.GetAddActivityInfoById(detailId)
 		if err != nil {
@@ -878,6 +881,9 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = detail.ActivityName
+		if strings.Contains(detail.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
+			isResearch = true
+		}
 	} else if tryType == "MicroAudio" {
 		// 微路演音频
 		microAudio, e := models.GetCygxActivityVoiceById(detailId)
@@ -1033,91 +1039,99 @@ func (this *UserController) ApplyTryOut() {
 		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
 		return
 	}
-	if sellerItem != nil {
-		sellerMobile = sellerItem.Mobile
-		//推送模板消息
-		mobile := user.Mobile
-		if mobile == "" {
-			mobile = user.Email
-		}
-	}
+
 	//用户状态,1:潜在客户 、2:现有客户 、3:FICC客户 、4:现有客户(正式,无对应权限) 、5:现有客户(试用,无对应权限)  、6:现有客户(试用暂停) 、7:现有客户(冻结) 、8:现有客户(流失)?
 	CompanyIdType := 1
 	applyMethod := ""
-	cnf, _ := models.GetConfigByCode("tpl_msg")
-	if cnf != nil {
-		if sellerItem != nil {
-			cnf.ConfigValue = sellerItem.Mobile
-			companyItem, err := models.GetCompanyDetailById(user.CompanyId)
+	if sellerItem != nil {
+		companyItem, err := models.GetCompanyDetailById(user.CompanyId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+			return
+		}
+		if companyItem != nil && companyItem.CompanyId > 0 {
+			companyProduct, err := models.GetCompanyProductDetail(user.CompanyId, 2)
 			if err != nil && err.Error() != utils.ErrNoRow() {
 				br.Msg = "获取信息失败"
 				br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
 				return
 			}
-			if companyItem != nil && companyItem.CompanyId > 0 {
-				companyProduct, err := models.GetCompanyProductDetail(user.CompanyId, 2)
-				if err != nil && err.Error() != utils.ErrNoRow() {
-					br.Msg = "获取信息失败"
-					br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
-					return
+			if companyProduct != nil && companyProduct.IsSuspend == 1 {
+				CompanyIdType = 6
+			} else {
+				switch companyItem.Status {
+				case "正式":
+					CompanyIdType = 4
+				case "试用":
+					CompanyIdType = 5
+				case "冻结":
+					CompanyIdType = 7
+				case "流失":
+					CompanyIdType = 8
 				}
+			}
+			applyMethod = companyItem.Status + "客户申请"
+			if detailId > 0 {
 				if companyProduct != nil && companyProduct.IsSuspend == 1 {
-					CompanyIdType = 6
+					applyMethod = "试用暂停客户"
 				} else {
-					switch companyItem.Status {
-					case "正式":
-						CompanyIdType = 4
-					case "试用":
-						CompanyIdType = 5
-					case "冻结":
-						CompanyIdType = 7
-					case "流失":
-						CompanyIdType = 8
+					if companyItem.Status == "正式" || companyItem.Status == "试用" {
+						applyMethod = companyItem.Status + "客户申请,无对应权限"
+					} else if companyItem.Status == "冻结" || companyItem.Status == "流失" {
+						applyMethod = companyItem.Status + "客户"
 					}
 				}
-				applyMethod = companyItem.Status + "客户申请"
-				if detailId > 0 {
-					if companyProduct != nil && companyProduct.IsSuspend == 1 {
-						applyMethod = "试用暂停客户"
-					} else {
-						if companyItem.Status == "正式" || companyItem.Status == "试用" {
-							applyMethod = companyItem.Status + "客户申请,无对应权限"
-						} else if companyItem.Status == "冻结" || companyItem.Status == "流失" {
-							applyMethod = companyItem.Status + "客户"
-						}
-					}
-					applyMethod = applyMethod + "," + title
+				applyMethod = applyMethod + "," + title
+			}
+			openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
+			if openIpItem != nil && openIpItem.OpenId != "" {
+				if req.ApplyMethod != 2 {
+					req.RealName = user.RealName
+					req.CompanyName = user.CompanyName
 				}
+				go services.SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, mobile, applyMethod, openIpItem)
 			}
+		}
+	} else {
+		//获取销售信息
+		sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "申请失败"
+			br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+			return
+		}
+		if sellerItem != nil {
+			CompanyIdType = 3
+			applyMethod = "FICC客户"
 		} else {
-			//获取销售信息
-			sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 1)
-			if err != nil && err.Error() != utils.ErrNoRow() {
-				br.Msg = "申请失败"
-				br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-				return
-			}
-			if sellerItem != nil {
-				CompanyIdType = 3
-				applyMethod = "FICC客户"
-			} else {
-				CompanyIdType = 1
-				applyMethod = "潜在客户"
-			}
-			if detailId > 0 {
-				applyMethod = applyMethod + "," + title
-			}
+			CompanyIdType = 1
+			applyMethod = "潜在客户"
 		}
-		openIpItem, _ := models.GetUserRecordByMobile(4, cnf.ConfigValue)
-		if openIpItem != nil && openIpItem.OpenId != "" {
-			if req.ApplyMethod != 2 {
-				req.RealName = user.RealName
-				req.CompanyName = user.CompanyName
-			}
-			utils.FileLog.Info("推送消息 %s %s,%s,%s,%s", req.RealName, req.CompanyName, mobile, openIpItem.OpenId, applyMethod)
-			go services.SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, mobile, applyMethod, openIpItem)
+		if detailId > 0 {
+			applyMethod = applyMethod + "," + title
 		}
 	}
+	//var configCode string
+	////如果是研选的就推送给汪洋,否则就推送给王芳
+	//if isResearch {
+	//	configCode = "tpl_msg_wang_yang"
+	//} else {
+	//	configCode = "tpl_msg"
+	//}
+	//cnf, _ := models.GetConfigByCode(configCode)
+	//openIpItem, _ := models.GetUserRecordByMobile(4, cnf.ConfigValue)
+	//if openIpItem != nil && openIpItem.OpenId != "" {
+	//	if req.ApplyMethod != 2 {
+	//		req.RealName = user.RealName
+	//		req.CompanyName = user.CompanyName
+	//	}
+	//	go services.SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, mobile, applyMethod, openIpItem)
+	//}
+	//如果对应销售不存在就给王芳,汪洋推模版消息
+	if sellerItem == nil {
+		go services.SendPermissionApplyTemplateMsgAdmin(req, mobile, applyMethod, isResearch)
+	}
 	err = models.AddApplyRecord(&req, user.Mobile, user.CompanyName, uid, user.CompanyId, CompanyIdType)
 	if err != nil {
 		br.Msg = "申请失败"

+ 1 - 0
models/activity.go

@@ -691,6 +691,7 @@ type SignupExportRep struct {
 }
 
 type ActivityMsgExportRep struct {
+	AskId       int    `description:"活动带问ID"`
 	UserId      int    `description:"用户ID"`
 	RealName    string `description:"姓名"`
 	CompanyName string `description:"公司名称"`

+ 10 - 3
models/activity_help_ask.go

@@ -17,7 +17,7 @@ type CygxActivityHelpAsk struct {
 	Content     string    `description:"内容"`
 }
 
-//添加优化建议
+// 添加优化建议
 func AddActivityHelpAsk(item *CygxActivityHelpAsk) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
@@ -43,7 +43,7 @@ type CygxAskListResp struct {
 
 //report_or_activity_id
 
-//主题列表
+// 主题列表
 func GetActivityAskList(userId int) (items []*CygxAskList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
@@ -60,7 +60,7 @@ func GetActivityAskList(userId int) (items []*CygxAskList, err error) {
 	return
 }
 
-//列表
+// 列表
 func GetArticleAskList(userId int) (items []*CygxAskList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
@@ -76,3 +76,10 @@ func GetArticleAskList(userId int) (items []*CygxAskList, err error) {
 	_, err = o.Raw(sql, userId).QueryRows(&items)
 	return
 }
+
+// 通过ID获取详情
+func GetCygxActivityHelpAskById(id int) (item *CygxActivityHelpAsk, err error) {
+	sql := `SELECT * FROM cygx_activity_help_ask WHERE ask_id=? `
+	err = orm.NewOrm().Raw(sql, id).QueryRow(&item)
+	return
+}

+ 40 - 0
models/activity_restrict_signup.go

@@ -0,0 +1,40 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
+)
+
+// 批量添加
+func AddCygxActivityRestrictSignupList(items []*CygxActivityRestrictSignup) (lastId int64, err error) {
+	lenitems := len(items)
+	if lenitems == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(1, items)
+	return
+}
+
+// 删除
+func DeleteCygxActivityRestrictSignupByUserIds(userIdDelArr []int) (err error) {
+	if len(userIdDelArr) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity_restrict_signup  WHERE  1= 1  AND user_id IN (` + utils.GetOrmInReplace(len(userIdDelArr)) + `)`
+	_, err = o.Raw(sql, userIdDelArr).Exec()
+	return
+}
+
+// 列表
+func GetCygxActivityRestrictSignupList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityRestrictSignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_restrict_signup as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?  `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 15 - 2
models/activity_signup.go

@@ -530,8 +530,7 @@ FROM
 	cygx_activity_signup AS s
 	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 
 WHERE
-	1 = 1 
-	AND a.is_limit_people > 0 
+	1 = 1
 	AND s.is_meeting = 0 
 	AND a.is_submit_meeting = 1
 	AND a.activity_id = ?`
@@ -625,3 +624,17 @@ func GetActivitySignupList(condition string, pars []interface{}) (items []*CygxA
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// GetCygxCygxActivitySignupList 获取报名列表信息
+func GetActivitySignupInnerActivityList(condition string, pars []interface{}) (items []*CygxActivitySignup, err error) {
+	sql := `SELECT
+			*
+		FROM
+			cygx_activity_signup AS v
+			INNER JOIN cygx_activity as a 
+		WHERE
+			1 = 1 	` + condition
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 8 - 2
models/activity_signup_detail.go

@@ -35,7 +35,7 @@ type CygxActivitySignupDetail struct {
 	CrmCompanyMapStatusId int       `description:"转换后的对应状态信息:1=正式客户, 2=曾使用客户, 3=其他"`
 }
 
-//获取当天已结束的活动
+// 获取当天已结束的活动
 func GetActivitySattusToComplete() (items []*CygxActivity, err error) {
 	defer func() {
 		if err != nil {
@@ -76,7 +76,7 @@ func GetSignupDetailList(condition string, pars []interface{}) (list []*CygxActi
 	return
 }
 
-//添加
+// 添加
 func AddCygxActivitySignupDetail(items []*CygxActivitySignupDetail) (err error) {
 	o, err := orm.NewOrm().Begin()
 	if err != nil {
@@ -148,6 +148,9 @@ func UpdateActivitySignupDetailMultiByYiDong(items []*CygxActivitySignupDetail)
 	p, err := o.Raw(` UPDATE cygx_activity_signup_detail SET 
 							first_meeting_time = ?,
 							last_meeting_time = ?,
+							meeting_status_str = ?,
+							position = ?,
+							real_name = ?,
 							duration = ?,
 							is_meeting = ?
 							WHERE mobile = ? AND activity_id = ? `).Prepare()
@@ -161,6 +164,9 @@ func UpdateActivitySignupDetailMultiByYiDong(items []*CygxActivitySignupDetail)
 		_, err = p.Exec(
 			v.FirstMeetingTime,
 			v.LastMeetingTime,
+			v.MeetingStatusStr,
+			v.Position,
+			v.RealName,
 			v.Duration,
 			v.IsMeeting,
 			v.Mobile, v.ActivityId)

+ 13 - 0
models/article_comment.go

@@ -70,3 +70,16 @@ type CygxArticleCommentResp struct {
 type CygxCommentListResp struct {
 	List []*CygxArticleCommentResp
 }
+
+// 通过ID获取详情
+func GetArticleCommentById(id int) (item *CygxArticleCommentResp, err error) {
+	sql := `SELECT * FROM cygx_article_comment WHERE id=? `
+	err = orm.NewOrm().Raw(sql, id).QueryRow(&item)
+	return
+}
+
+type CygxArticleCommentWxResp struct {
+	Content      string `description:"内容"`
+	SourceId     int    `description:"跳转ID"`
+	RedirectType int    `description:"跳转类型 1文章 2活动 3产业资源包"`
+}

+ 24 - 1
models/yidong.go

@@ -96,7 +96,7 @@ type ApifoxModaluser struct {
 	Timestamp int64        `json:"timestamp"`
 }
 
-type Resultuser struct {
+type Resultuser111 struct {
 	DeviceType      *int64 `json:"deviceType"`                // 参会方式,1-PC,2-Mac,3-Android,4-IOS,5-Web,6-iPad,7-Android Pad,8-小程序
 	Duration        string `json:"duration"`                  // 参会时长
 	EndTime         string `json:"endTime"`                   // 最后退会时间
@@ -107,6 +107,29 @@ type Resultuser struct {
 	UserID          string `json:"userId,omitempty"`          // 用户id
 }
 
+type Resultuser struct {
+	DeviceType        string `json:"deviceType"`        // 参会方式,1-PC,2-Mac,3-Android,4-IOS,5-Web,6-iPad,7-Android Pad,8-小程序,0-PSTN
+	Duration          string `json:"duration"`          // 云会议参会时长
+	DurationInteract  string `json:"durationInteract"`  // 互动交流参会时长
+	DurationLive      string `json:"durationLive"`      // 直播参会时长
+	DurationReview    string `json:"durationReview"`    // 回看参会时长
+	EndTime           string `json:"endTime"`           // 云会议最后退会时间
+	EndTimeInteract   string `json:"endTimeInteract"`   // 互动交流最后退会时间
+	EndTimeLive       string `json:"endTimeLive"`       // 直播最后退会时间
+	EndTimeReview     string `json:"endTimeReview"`     // 回看最后退会时间
+	ID                string `json:"id"`                // 主键id
+	JobName           string `json:"jobName"`           // 职务
+	MobileCountryCode string `json:"mobileCountryCode"` // 手机号国际区号码
+	PersonName        string `json:"personName"`        // 姓名
+	PersonTelephone   string `json:"personTelephone"`   // 用户手机号
+	StartTime         string `json:"startTime"`         // 云会议最早入会时间
+	StartTimeInteract string `json:"startTimeInteract"` // 互动交流最早入会时间
+	StartTimeLive     string `json:"startTimeLive"`     // 直播最早入会时间
+	StartTimeReview   string `json:"startTimeReview"`   // 回看最早入会时间
+	Status            string `json:"status"`            // 状态,D表示被删除
+	UserID            string `json:"userId,omitempty"`  // 用户id
+}
+
 type ApifoxModalUserTgc struct {
 	Result  结果Map `json:"result"`  // 结果Map
 	Success bool  `json:"success"` // 成功标识,可作为请求是否成功标识

+ 9 - 0
routers/commentsRouter.go

@@ -718,6 +718,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:MicroRoadShowController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:MicroRoadShowController"],
+        beego.ControllerComments{
+            Method: "CommentDetail",
+            Router: `/comment/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:MicroRoadShowController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:MicroRoadShowController"],
         beego.ControllerComments{
             Method: "List",

+ 206 - 23
services/activity.go

@@ -67,7 +67,7 @@ func SendActivityBeginMsg(cont context.Context) (err error) {
 		//	reserveResults = "失败(爽约次数超限)"
 		//}
 		reserveResults = "--"
-		first = "您有一场【" + v.ActivityTypeName + "】将在1小时后开始"
+		first = "将在1小时后开始"
 		SendWxMsgWithFrequency(first, v.ActivityName, reserveResults, v.ActivityTimeText, v.Address, remark, openIdList, v.ActivityId)
 	}
 	if len(signupIds) == 0 {
@@ -112,7 +112,7 @@ func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
 		openIdList := make([]*models.OpenIdList, 0)
 		openIdList = append(openIdList, openIdItem)
 		reserveResults = "--"
-		first = "您有一场【" + v.ActivityTypeName + "】将在15分钟后开始"
+		first = "将在15分钟后开始"
 		SendWxMsgWithFrequency(first, v.ActivityName, reserveResults, v.ActivityTimeText, "--", remark, openIdList, v.ActivityId)
 	}
 	if len(signupIds) == 0 {
@@ -1125,31 +1125,36 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 		}
 
 		for _, v2 := range list {
-			user, err := models.GetWxUserItemByUserId(v2.UserId)
-			if err != nil && err.Error() != utils.ErrNoRow() {
+			user, e := models.GetWxUserItemByUserId(v2.UserId)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
 				return err
 			}
 			//获取销售信息
-			sellerItem, err := models.GetSellerByCompanyIdCheckFicc(v2.CompanyId, 2)
-			if err != nil && err.Error() != utils.ErrNoRow() {
-				return err
+			sellerItem, e := models.GetSellerByCompanyIdCheckFicc(v2.CompanyId, 2)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
+				return
 			}
-			//给研究员推送消息
+
+			//如果是研选的就推送给汪洋
+			cnf, e := models.GetConfigByCode(utils.TPL_MSG_WANG_YANG)
+			if e != nil {
+				err = errors.New("GetConfigByCode, Err: " + e.Error())
+				return
+			}
+			//给汪洋推送消息
 			if sellerItem != nil {
-				openIpItem, _ := models.GetUserRecordByMobile(4, utils.ActSendMsgMobile)
+				openIpItem, _ := models.GetUserRecordByMobile(4, cnf.ConfigValue)
 				if openIpItem != nil && openIpItem.OpenId != "" {
-					//SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
-					//SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
-					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo, v2.AskId)
 				}
 			}
 			//给所属销售推送消息
 			if sellerItem != nil {
 				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
-					//SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
-					//SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
-					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo, v2.AskId)
 				}
 			}
 		}
@@ -1232,7 +1237,7 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					//SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
 					//SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
-					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo, v2.AskId)
 				}
 			}
 			//给销售推送模板消息
@@ -1241,7 +1246,7 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					//SendActivityAskApplyTemplateMsg(user.RealName+"——"+user.CompanyName+"(所属销售:"+sellerItem.RealName+")", v2.CreateTime, v2.Content, activityInfo.ActivityName, activityInfo.ActivityId, openIpItem)
 					//SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
-					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo)
+					SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), v2.Content, activityInfo.ActivityName, openIpItem, activityInfo, v2.AskId)
 				}
 			}
 		}
@@ -1572,7 +1577,7 @@ func ActivityAttendanceDetail(cont context.Context) (err error) {
 }
 
 // 判断是否加入黑名单
-func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
+func AddCygxActivityRestrictSignupByAdmin111(activityId int) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println(err)
@@ -1680,6 +1685,185 @@ func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
 	return
 }
 
+// 查研观向处理活动用户限制报名
+func AddCygxActivityRestrictSignupByAdmin(activityId int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go utils.SendAlarmMsg("查研观向处理活动用户限制报名失败,Err:"+err.Error()+"activityId"+strconv.Itoa(activityId), 3)
+		}
+	}()
+	activityInfo, e := models.GetAddActivityInfoById(activityId)
+	if e != nil {
+		err = errors.New("GetAddActivityInfoById" + e.Error())
+		return
+	}
+	if activityInfo == nil {
+		return
+	}
+	//不限制报名的不做爽约限制处理
+	//if activityInfo.IsLimitPeople > 0 {
+	//total, err := cygx.GetActivitySignupNomeetingCount(activityId)
+
+	if err != nil {
+		return
+	}
+	mobileList, _ := models.GetUserMeetingMobile(activityId)
+	var userIdArr []int
+	if len(mobileList) > 0 {
+		for _, v := range mobileList {
+			userIdArr = append(userIdArr, v.UserId)
+		}
+		lenuserIdArr := len(userIdArr)
+		var condition string
+		var pars []interface{}
+		condition = ` AND user_id IN (` + utils.GetOrmInReplace(lenuserIdArr) + `)`
+
+		pars = append(pars, userIdArr)
+		restrictSignupList, e := models.GetCygxActivityRestrictSignupList(condition, pars, 0, 9999)
+		if e != nil {
+			err = errors.New("GetCygxActivityRestrictSignupList" + e.Error())
+			return
+		}
+		//获取这些用户是否被加入到限制报名了
+		maptotalRestrict := make(map[int]bool)
+		for _, v := range restrictSignupList {
+			maptotalRestrict[v.UserId] = true
+		}
+
+		pars = make([]interface{}, 0)
+		condition = `   AND a.is_limit_people  = 1  AND  v.is_meeting = 0 	AND  v.do_fail_type = 0   AND  v.user_id IN (` + utils.GetOrmInReplace(lenuserIdArr) + `)`
+		pars = append(pars, userIdArr)
+		listSignup, e := models.GetActivitySignupInnerActivityList(condition, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetActivitySignupInnerActivityList" + e.Error())
+			return
+		}
+		mapNomeet := make(map[int]int)
+		if len(listSignup) > 0 {
+			for _, v := range listSignup {
+				mapNomeet[v.UserId]++
+			}
+		}
+		var userIdDelArr []int
+		for _, v := range mobileList {
+			//如果加入了爽约限制但是爽约次数少于3条就删除爽约记录
+			if maptotalRestrict[v.UserId] && mapNomeet[v.UserId] < 3 {
+				userIdDelArr = append(userIdDelArr, v.UserId)
+			}
+		}
+		if len(userIdDelArr) > 0 {
+			e = models.DeleteCygxActivityRestrictSignupByUserIds(userIdDelArr)
+			if e != nil {
+				err = errors.New("DeleteCygxActivityRestrictSignupByUserIds" + e.Error())
+				return
+			}
+		}
+	}
+	//if total == 0 {
+	//	return
+	//}
+	//}
+	list, e := models.GetActivitySignupNomeetingCountList(activityId)
+	if e != nil {
+		err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
+		return
+	}
+	var userIdSiginArr []int
+	var items []*models.CygxActivitySignupBreak
+	for _, v := range list {
+		userIdSiginArr = append(userIdSiginArr, v.UserId)
+		//添加爽约记录
+		item := new(models.CygxActivitySignupBreak)
+		item.UserId = v.UserId
+		item.ActivityId = v.ActivityId
+		item.CreateTime = time.Now()
+		item.Mobile = v.Mobile
+		item.Email = v.Email
+		item.CompanyId = v.CompanyId
+		item.CompanyName = v.CompanyName
+		item.RealName = v.RealName
+		item.SellerName = v.SellerName
+		items = append(items, item)
+	}
+	if len(list) == 0 {
+		return
+	}
+
+	var itemsRestrict []*models.CygxActivityRestrictSignup
+	maptotalRestrict := make(map[int]bool)
+	lenuserIdSiginArr := len(userIdSiginArr)
+	var condition string
+	var pars []interface{}
+	condition = ` AND user_id IN (` + utils.GetOrmInReplace(lenuserIdSiginArr) + `)`
+	pars = append(pars, userIdSiginArr)
+	restrictSignupList, e := models.GetCygxActivityRestrictSignupList(condition, pars, 0, 9999)
+	if e != nil {
+		err = errors.New("GetCygxActivityRestrictSignupList" + e.Error())
+		return
+	}
+	//获取这些用户是否被加入到限制报名了
+	for _, v := range restrictSignupList {
+		maptotalRestrict[v.UserId] = true
+	}
+
+	pars = make([]interface{}, 0)
+	condition = `    AND a.is_limit_people  = 1  AND  v.is_meeting = 0 	AND  v.do_fail_type = 0  AND user_id IN (` + utils.GetOrmInReplace(lenuserIdSiginArr) + `)`
+	pars = append(pars, userIdSiginArr)
+	listSignup, e := models.GetActivitySignupInnerActivityList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetActivitySignupInnerActivityList" + e.Error())
+		return
+	}
+	mapNomeet := make(map[int]int)
+	if len(listSignup) > 0 {
+		for _, v := range listSignup {
+			mapNomeet[v.UserId]++
+		}
+	}
+
+	for _, v := range mobileList {
+		//如果加入了爽约限制但是爽约次数少于3条就删除爽约记录
+		if !maptotalRestrict[v.UserId] && mapNomeet[v.UserId] >= 3 {
+			itemRestrict := new(models.CygxActivityRestrictSignup)
+			itemRestrict.UserId = v.UserId
+			itemRestrict.CreateTime = time.Now()
+			itemRestrict.Mobile = v.Mobile
+			itemRestrict.Email = v.Email
+			itemRestrict.CompanyId = v.CompanyId
+			itemRestrict.CompanyName = v.CompanyName
+			itemRestrict.IsRestrict = 1
+			itemsRestrict = append(itemsRestrict, itemRestrict)
+		}
+	}
+
+	err = models.DeleteCygxActivitySignupBreakById(activityId)
+	if err != nil {
+		err = errors.New("DeleteCygxActivitySignupBreakById" + err.Error())
+		return
+	}
+
+	//添加爽约记录
+	if len(items) > 0 {
+		_, e = models.AddCygxActivitySignupBreakList(items)
+		if e != nil {
+			err = errors.New("AddCygxActivitySignupBreakList, Err: " + e.Error())
+			return
+		}
+	}
+
+	//添加报名限制
+	if len(itemsRestrict) > 0 {
+		_, e = models.AddCygxActivityRestrictSignupList(itemsRestrict)
+		if e != nil {
+			err = errors.New("AddCygxActivityRestrictSignupList, Err: " + e.Error())
+			return
+		}
+	}
+
+	return
+}
+
 // 判断预约纪要按钮是否显示
 func IsShowAppointment(activityTypeId int, chartPermissionName string) (isShowAppointment bool) {
 	if activityTypeId == 1 || activityTypeId == 2 || activityTypeId == 3 || activityTypeId == 4 {
@@ -1710,8 +1894,7 @@ func IsShowAppointmentByactivityInfo(item *models.ActivityDetail, chartPermissio
 func ArticleUserRemind(user *models.WxUserItem, articleDetail *models.ArticleDetail, 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)
+			go utils.SendAlarmMsg(" 用户报告操作行为,模板消息推送失败"+fmt.Sprint("UserId:", user.UserId, "ArticleId:", articleDetail.ArticleId), 2)
 		}
 	}()
 	countUser, err := models.GetUserRemind(user.UserId)
@@ -2155,7 +2338,6 @@ func ActivityVideoUserRmind(user *models.WxUserItem, activityId, fileType int) (
 			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
 			return
 		}
-
 		//TripStatus            int    `description:"行程进行状态 1:预报名,2:确定行程"`
 		if fileType == 1 {
 			activityInfo, e := models.GetCygxActivityVideoByActivityId(activityId)
@@ -2169,6 +2351,7 @@ func ActivityVideoUserRmind(user *models.WxUserItem, activityId, fileType int) (
 			keyword1 = activityInfo.VideoName
 			keyword2 = fmt.Sprint("互动:播放视频,", user.RealName, "--", user.CompanyName)
 			first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放视频")
+
 		} else {
 			activityInfo, e := models.GetCygxActivityVoiceByActivityId(activityId)
 			if e != nil {
@@ -2183,8 +2366,8 @@ func ActivityVideoUserRmind(user *models.WxUserItem, activityId, fileType int) (
 			first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放音频")
 		}
 
-		keyword2 = "__"
-		remark = "点击查看活动详情"
+		//keyword2 = "__"
+		//remark = "点击查看活动详情"
 		openIdArr := make([]string, 0)
 		for _, v := range openIdList {
 			openIdArr = append(openIdArr, v.OpenId)

+ 7 - 7
services/activity_special.go

@@ -1011,7 +1011,7 @@ func SendWxMsgActivitySpecial10(activityInfo *models.CygxActivitySpecialDetail)
 	first = "【" + activityInfo.ResearchTheme + "】已有10人预报名"
 	keyword3 = "-"
 	keyword2 = "-"
-	keyword4 = activityInfo.ResearchTheme
+	keyword4 = "【" + activityInfo.ResearchTheme + "】已有10人预报名"
 	openIdArr := make([]string, 0)
 	for _, v := range openIdList {
 		openIdArr = append(openIdArr, v.OpenId)
@@ -1090,9 +1090,9 @@ func SendWxMsgActivitySpecialTwoDays(cont context.Context) (err error) {
 			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
 			return
 		}
-		first := "【" + v.ResearchTheme + "】专项调研将在两天后进行,如不能参加,请及时取消报名"
-		keyword1 := v.ResearchTheme
-		keyword2 := "报名"
+		first := ""
+		keyword1 := "专项调研【" + v.ResearchTheme + "】"
+		keyword2 := "将在两天后进行,如不能参加,请及时取消报名"
 		keyword3 := v.ActivityTimeTextByDay
 		keyword4 := "线上"
 		if v.SpecialType == 2 {
@@ -1132,9 +1132,9 @@ func SendWxMsgActivitySpecialTwoDays(cont context.Context) (err error) {
 					}
 				}
 			}
-			for k, vM := range mapSller {
-				first = "【" + v.ResearchTheme + "】专项调研将在两天后进行,请及时提醒您的报名客户"
-				keyword2 = vM
+			for k, _ := range mapSller {
+				keyword1 = "将在两天后进行,请及时提醒您的报名客户"
+				//keyword2 = vM
 				openIdList = make([]*models.OpenIdList, 0)
 				openIdList = append(openIdList, &models.OpenIdList{OpenId: mapSllerOpenid[k]})
 				SendWxMsgWithFrequencySpecial(first, keyword1, keyword2, keyword3, keyword4, remark, openIdList, v.ActivityId)

+ 0 - 1
services/activity_special_trip.go

@@ -181,7 +181,6 @@ func ActivitySpecialUserRmind(user *models.WxUserItem, activityId, TripStatus in
 			keyword2 = fmt.Sprint("互动:专项调研预报名,", user.RealName, "--", user.CompanyName)
 		} else {
 			keyword2 = fmt.Sprint("互动:活动报名,", user.RealName, "--", user.CompanyName)
-
 		}
 		keyword1 = activityInfo.ResearchTheme
 		//keyword2 = "__"

+ 3 - 2
services/keyword.go

@@ -32,6 +32,7 @@ func AddSearchKeyWord(user *models.WxUserItem, keyWord string, source int) (err
 	keyWordItem.RealName = user.RealName
 	_, err = models.AddSearchKeyWord(keyWordItem)
 	go AddUserSearchLog(user, keyWord, source)
+	go SearchKeywordUserRmind(user, keyWord)
 	////一分钟之内的相同搜索词不重复记录
 	//setNX := utils.Rc.SetNX(cacheKey, keyWord, time.Minute*1)
 	//if !setNX {
@@ -60,7 +61,6 @@ func AddUserSearchLog(user *models.WxUserItem, keyWord string, source int) (err
 	item.RealName = user.RealName
 	item.Source = source
 	_, err = models.AddSearchKeyWordLog(item)
-	go SearchKeywordUserRmind(user, keyWord)
 	return
 }
 
@@ -96,8 +96,9 @@ func SearchKeywordUserRmind(user *models.WxUserItem, keyWord string) (err error)
 			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
 			return
 		}
-		first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:搜索")
+		first = fmt.Sprint("互动:搜索,", user.RealName, "--", user.CompanyName)
 		keyword1 = "搜索关键词:" + keyWord
+		keyword2 = first
 		openIdArr := make([]string, 0)
 		for _, v := range openIdList {
 			openIdArr = append(openIdArr, v.OpenId)

+ 10 - 0
services/product_interior.go

@@ -109,6 +109,11 @@ func GetProductInteriorUrlBody(body string) (itemResp []*models.ProductInteriorU
 }
 
 func AddCygxProductInteriorHistory(user *models.WxUserItem, articleId int) (err error) {
+	cacheKey := fmt.Sprint("ProductInterior:", user.UserId, "articleId:", articleId)
+	isExist := utils.Rc.IsExist(cacheKey)
+	if isExist {
+		return err
+	}
 	defer func() {
 		if err != nil {
 			go utils.SendAlarmMsg("产品内测用户浏览信息记录失败"+err.Error(), 2)
@@ -131,6 +136,11 @@ func AddCygxProductInteriorHistory(user *models.WxUserItem, articleId int) (err
 		historyRecord.SellerName = sellerItem.RealName
 	}
 	_, err = models.AddCygxProductInteriorHistory(historyRecord)
+	////10秒之内的阅读不重复记录
+	setNX := utils.Rc.SetNX(cacheKey, articleId, time.Second*10)
+	if !setNX {
+		go utils.SendAlarmMsg("记录用户搜索关键词失败,设置Redis Key 过期时间失败:key"+cacheKey, 3)
+	}
 	return
 }
 

+ 11 - 9
services/task.go

@@ -22,12 +22,6 @@ func Task() {
 		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */5 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
 		task.AddTask("getArticleListByApi", getArticleListByApi)
 
-		//会议提醒模板消息推送
-		sendActivityBeginMsg := task.NewTask("sendActivityBeginMsg", "0 */10 6-23 * * *", SendActivityBeginMsg) //会议前60分钟的提醒
-		task.AddTask("sendActivityBeginMsg", sendActivityBeginMsg)
-		sendActivityBeginMsgMeeting := task.NewTask("sendActivityBeginMsgMeeting", "0 */5 6-23 * * *", SendActivityBeginMsgMeeting) //会议前15分钟的提醒
-		task.AddTask("sendActivityBeginMsgMeeting", sendActivityBeginMsgMeeting)
-
 		//预约外呼名单,会前1小时自动发送邮件给专家组
 		sendEmailFileToExpert := task.NewTask("sendEmailFileToExpert", "0 */5 6-23 * * *", SendEmailFileToExpert) //预约外呼名单,会前1小时自动发送邮件给专家组
 		task.AddTask("sendEmailFileToExpert", sendEmailFileToExpert)
@@ -40,17 +34,25 @@ func Task() {
 
 		getChartListByApi := task.NewTask("getChartListByApi", "0 */10 * * * *", GetChartDetailByChartId) //同步图表
 		task.AddTask("getChartListByApi", getChartListByApi)
-	}
 
-	if utils.IsTask {
 		getYiDongActivity := task.NewTask("getYiDongActivity", "0 */10 * * * *", GetYiDongActivity) //同步易董的活动信息
 		task.AddTask("getYiDongActivity", getYiDongActivity)
 
-		getYiDongActivityMeeting := task.NewTask("getYiDongActivityMeeting", "0 */30 * * * *", GetYiDongActivityMeeting) //同步易董的活动信息
+		getYiDongActivityMeeting := task.NewTask("getYiDongActivityMeeting", "0 */60 * * * *", GetYiDongActivityMeeting) //同步易董的活动信息
 		task.AddTask("getYiDongActivityMeeting", getYiDongActivityMeeting)
 
 		yiDongSignAppointmentsForThird := task.NewTask("yiDongSignAppointmentsForThird", "0 */10 * * * *", YiDongSignAppointmentsForThird) //会前一小时将,报名信息同步到易董
 		task.AddTask("yiDongSignAppointmentsForThird", yiDongSignAppointmentsForThird)
+	}
+
+	if utils.IsTask {
+
+		//会议提醒模板消息推送
+		sendActivityBeginMsg := task.NewTask("sendActivityBeginMsg", "0 */10 6-23 * * *", SendActivityBeginMsg) //会议前60分钟的提醒
+		task.AddTask("sendActivityBeginMsg", sendActivityBeginMsg)
+
+		sendActivityBeginMsgMeeting := task.NewTask("sendActivityBeginMsgMeeting", "0 */5 6-23 * * *", SendActivityBeginMsgMeeting) //会议前15分钟的提醒
+		task.AddTask("sendActivityBeginMsgMeeting", sendActivityBeginMsgMeeting)
 
 		//修改任务状
 		updateActivitySattus := task.NewTask("syncTacticsListAddreport", "0 */1 6-23 * * *", UpdateActivitySattus)

+ 38 - 0
services/user.go

@@ -1072,3 +1072,41 @@ func UpdateCygxSubscribe(uid int, unionId string) (err error) {
 	}
 	return
 }
+
+// SendPermissionApplyTemplateMsgAdmin 处理试用申请给王芳,汪洋发消息
+func SendPermissionApplyTemplateMsgAdmin(req models.ApplyTryReq, usermobile, applyMethod string, isResearch bool) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("处理试用申请给王芳,汪洋发消息失败, ErrMsg: "+err.Error(), 3)
+		}
+	}()
+	var configCode string
+	//如果是研选的就推送给汪洋跟王芳,否则就推送给王芳
+	if isResearch {
+		configCode = utils.TPL_MSG_WANG_FANG_WANG_YANG
+	} else {
+		configCode = utils.TPL_MSG
+	}
+	cnf, e := models.GetConfigByCode(configCode)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
+		return
+	}
+	openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
+		return err
+	}
+
+	for _, v := range openIdList {
+		go SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, usermobile, applyMethod, v)
+	}
+
+	//openIpItem, e := models.GetUserRecordByMobile(4, cnf.ConfigValue)
+	//if e != nil {
+	//	err = errors.New("GetUserRecordByMobile, Err: " + e.Error() + cnf.ConfigValue)
+	//	return
+	//}
+
+	return
+}

+ 60 - 33
services/wechat_send_msg.go

@@ -115,40 +115,67 @@ func SendPermissionApplyTemplateMsg(realName, companyName, mobile, applyMethod s
 		}
 	}()
 
-	var accessToken string
-	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{})
+	//var accessToken string
+	//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 := applyMethod
+	//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_APPLY)
 
-	keyword1 := realName + "【" + companyName + "】"
-	first := "查研观向有一条新的权限申请,请及时处理。"
-	keyword2 := mobile
-	keyword3 := time.Now().Format(utils.FormatDateTime)
-	keyword4 := applyMethod
-	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_APPLY)
-	fmt.Println("send end")
+	var first string
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	var remark string
+	var redirectUrl string
+	keyword1 = "权限申请:" + realName + "【" + companyName + "】"
+	keyword2 = mobile
+	keyword3 = time.Now().Format(utils.FormatDateTime)
+	keyword4 = applyMethod
+	openIdArr := make([]string, 0)
+	openIdArr = append(openIdArr, itemOpenid.OpenId)
+	sendInfo := new(SendWxTemplate)
+	sendInfo.First = first
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.Remark = remark
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = mobile
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
 	return
 }
 

+ 129 - 140
services/wx_template_msg.go

@@ -14,7 +14,7 @@ import (
 )
 
 // 活动预开始模版消息通知
-func SendWxMsgWithFrequency(first, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
+func SendWxMsgWithFrequency(keyword2, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
 	var msg string
 	defer func() {
 		if err != nil {
@@ -23,29 +23,24 @@ func SendWxMsgWithFrequency(first, activityName, reserveResults, activityTime, a
 		}
 		fmt.Println("line 21", err, msg)
 	}()
-	utils.FileLog.Info("%s", "services SendMsg")
-	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.WxMsgTemplateIdActivityApplyXzs
-	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_ACTIVITY_DETAIL + strconv.Itoa(activityId)}
-	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-	sendData["keyword1"] = map[string]interface{}{"value": activityName, "color": "#173177"}
-	sendData["keyword2"] = map[string]interface{}{"value": activityTime, "color": "#173177"}
-	sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
-	sendMap["data"] = sendData
-	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
+	redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
+	sendInfo := new(SendWxTemplate)
+
+	sendInfo.Keyword1 = activityName
+	sendInfo.Keyword2 = keyword2
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	sendInfo.Remark = remark
+	sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = strconv.Itoa(activityId)
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
 	return
 }
 
@@ -58,32 +53,58 @@ func SendWxMsgWithFrequencySpecial(first, activityName, reserveResults, activity
 			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
+	//}
+	//
+	//sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	//templateId := utils.WxMsgTemplateIdActivityApplyXzs
+	//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_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)}
+	//sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
+	//sendData["keyword1"] = map[string]interface{}{"value": activityName, "color": "#173177"}
+	//sendData["keyword2"] = map[string]interface{}{"value": activityTime, "color": "#173177"}
+	//sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
+	//sendMap["data"] = sendData
+	//WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
+
+	//var first string
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+
+	first = ""
+	keyword1 = activityName
+	keyword3 = activityTime
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
 	}
+	redirectUrl := utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)
+	sendInfo := new(SendWxTemplate)
+	sendInfo.First = first
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.Remark = remark
+	sendInfo.TemplateId = utils.WxMsgTemplateIdActivityApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = strconv.Itoa(activityId)
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
 
-	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	templateId := utils.WxMsgTemplateIdActivityApplyXzs
-	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_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)}
-	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-	sendData["keyword1"] = map[string]interface{}{"value": activityName, "color": "#173177"}
-	sendData["keyword2"] = map[string]interface{}{"value": activityTime, "color": "#173177"}
-	//sendData["activity_name"] = map[string]interface{}{"value": activityName, "color": "#173177"}
-	//sendData["reserve_results"] = map[string]interface{}{"value": reserveResults, "color": "#173177"}
-	//sendData["activity_time"] = map[string]interface{}{"value": activityTime, "color": "#173177"}
-	//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, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
 	return
 }
 
@@ -390,7 +411,7 @@ func SendActivityAskApplyTemplateMsg(applyName, applyTime, askContent, activityN
 }
 
 // 活动带问提醒
-func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, remark string, itemOpenid *models.OpenIdList, itemAct *models.ActivityDetail) (err error) {
+func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, remark string, itemOpenid *models.OpenIdList, itemAct *models.ActivityDetail, msgId int) (err error) {
 	var msg string
 	defer func() {
 		if err != nil {
@@ -402,59 +423,31 @@ func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, r
 		}
 	}()
 
-	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
-		}
-	}
 	activityId := itemAct.ActivityId
-	//fmt.Println("itemAct.Host", itemAct.Host)
-	//if itemAct.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN && itemAct.Host != "" {
-	//	keyword2 += ",会议主持人:" + itemAct.Host
-	//}
-	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 redirectUrl string
+	redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
+	openIdArr := make([]string, 0)
+	openIdArr = append(openIdArr, itemOpenid.OpenId)
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.Remark = remark
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = strconv.Itoa(activityId)
 
-	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
+	//mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
+	if utils.RunMode != "release" {
+		sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
 	} else {
-		sendMap["template_id"] = utils.WxMsgTemplateIdApply
+		redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=2"
 	}
-	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")
+
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
 	return
 }
 
@@ -673,7 +666,7 @@ func SendActivityOnenIdWxTemplateMsg(first, keyWord1, keyWord2, keyWord3, keyWor
 
 // 发送用户留言提醒
 // 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) (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 {
@@ -701,11 +694,11 @@ func SendCommentWxTemplateMsg(req models.AddCygxArticleCommentReq, user *models.
 
 	first = "【" + articleInfo.Title + "】有新的留言,请及时处理"
 	keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
-	keyword2 = "-"
+	keyword2 = "留言:" + articleInfo.Title
 	keyword3 = time.Now().Format(utils.FormatDateTime)
 	keyword4 = req.Content
 	remark = "点击查看报告详情"
-	if articleInfo.ArticleId >= utils.SummaryArticleId {
+	if articleInfo.ArticleTypeId > 0 {
 		//研选报告添加汪洋
 		mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
 	} else {
@@ -720,7 +713,13 @@ func SendCommentWxTemplateMsg(req models.AddCygxArticleCommentReq, user *models.
 	for _, v := range openIdList {
 		openIdArr = append(openIdArr, v.OpenId)
 	}
-	redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
+	//mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
+	if utils.RunMode != "release" {
+		redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
+	} else {
+		redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=1"
+	}
+
 	sendInfo := new(SendWxTemplate)
 	sendInfo.First = first
 	sendInfo.Keyword1 = keyword1
@@ -738,40 +737,11 @@ func SendCommentWxTemplateMsg(req models.AddCygxArticleCommentReq, user *models.
 	if err != nil {
 		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 = "【" + title + "】有新的留言,请及时处理"
-	//keyword1 := companyName + "--" + userName + "(" + sellerName + ")"
-	//keyword2 := "-"
-	//keyword3 := createTime
-	//keyword4 := content
-	//sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-	//templateId := utils.WxMsgTemplateIdAskMsgXzs
-	//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["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_COMMENT)
 	return
 }
 
 // 微路演新增留言提问消息提醒
-func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.WxUserItem, resourceId int) (err error) {
+func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.WxUserItem, resourceId, msgId int, title string, isResearch bool) (err error) {
 	var msg string
 	defer func() {
 		if err != nil || msg != "" {
@@ -794,13 +764,18 @@ func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.W
 	var keyword3 string
 	var keyword4 string
 	var remark string
+	var mobile string
 	first = req.Title + "有新的留言,请及时处理"
 	keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
 	keyword3 = time.Now().Format(utils.FormatDateTime)
-	keyword2 = ""
+	keyword2 = "留言:" + title
 	keyword4 = req.Content
-
-	mobile := companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
+	if isResearch {
+		//研选报告添加汪洋
+		mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
+	} else {
+		mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
+	}
 	openIdList, e := models.GetWxOpenIdByMobileList(mobile)
 	if e != nil {
 		err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
@@ -810,15 +785,29 @@ func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.W
 	for _, v := range openIdList {
 		openIdArr = append(openIdArr, v.OpenId)
 	}
+	mapSource := make(map[int]string)
+	mapSource[1] = "5"
+	mapSource[2] = "4"
+	mapSource[3] = "3"
+
+	if mapSource[resourceId] == "" {
+		err = errors.New("留言消息类型错误, resourceId: " + strconv.Itoa(resourceId))
+		return
+	}
 
 	//SourceType int    `description:"视频来源: 1-音频; 2-活动视频; 3-微路演视频 (不传默认为1)"`
+	//mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
 	redirectUrl := ""
-	if req.SourceType == 3 {
-		redirectUrl = utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(resourceId)
-		remark = "点击进入产业资源包详情页"
+	if utils.RunMode != "release" {
+		if req.SourceType == 3 {
+			redirectUrl = utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(resourceId)
+			remark = "点击进入产业资源包详情页"
+		} else {
+			redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(resourceId)
+			remark = "点击查看活动详情"
+		}
 	} else {
-		redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(resourceId)
-		remark = "点击查看活动详情"
+		redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=" + mapSource[resourceId]
 	}
 	sendInfo := new(SendWxTemplate)
 	sendInfo.First = first
@@ -827,7 +816,7 @@ func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.W
 	sendInfo.Keyword3 = keyword3
 	sendInfo.Keyword4 = keyword4
 	sendInfo.Remark = remark
-	sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
 	sendInfo.RedirectUrl = redirectUrl
 	sendInfo.RedirectTarget = 3
 	sendInfo.Resource = strconv.Itoa(req.Id)

+ 32 - 30
services/yidong.go

@@ -642,7 +642,10 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 			needAddAttendanc := make([]*models.CygxActivityAttendanceDetail, 0)
 
 			for _, vresult := range ApifoxModal.Result {
-				if vresult.EndTime != "" {
+				if vresult.PersonTelephone == "" {
+					continue
+				}
+				if vresult.Duration != "" || vresult.DurationReview != "" {
 					mobiles = append(mobiles, vresult.PersonTelephone)
 					//err = models.UpdateCygxActivitySignupisMeet(v.ActivityId, vresult.PersonTelephone)
 					//if err != nil {
@@ -650,11 +653,22 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 					//	return err
 					//}
 					var itemDetail = new(models.CygxActivitySignupDetail)
+					if vresult.Duration != "" {
+						itemDetail.FirstMeetingTime = vresult.StartTime
+						itemDetail.LastMeetingTime = vresult.EndTime
+						itemDetail.Duration = vresult.Duration
+						itemDetail.MeetingStatusStr = "直播"
+					} else if vresult.DurationReview != "" {
+						itemDetail.FirstMeetingTime = vresult.StartTimeReview
+						itemDetail.LastMeetingTime = vresult.EndTimeReview
+						itemDetail.Duration = vresult.DurationReview
+						itemDetail.MeetingStatusStr = "回放"
+					}
+					itemDetail.Position = vresult.JobName
+					itemDetail.RealName = vresult.PersonName
+
 					itemDetail.Mobile = vresult.PersonTelephone
 					itemDetail.OutboundMobile = vresult.PersonTelephone
-					itemDetail.FirstMeetingTime = vresult.StartTime
-					itemDetail.LastMeetingTime = vresult.EndTime
-					itemDetail.Duration = vresult.Duration
 					itemDetail.IsMeeting = 1
 					itemDetail.ActivityId = v.ActivityId
 					mapActivityAttendanceDetail[vresult.PersonTelephone] = new(models.CygxActivityAttendanceDetail)
@@ -668,6 +682,20 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 				item.ActivityId = v.ActivityId
 				item.Mobile = vresult.PersonTelephone
 				if vresult.Duration != "" {
+					if vresult.Duration != "" {
+						item.FirstMeetingTime = vresult.StartTime
+						item.LastMeetingTime = vresult.EndTime
+						item.Duration = vresult.Duration
+						item.MeetingStatusStr = "直播"
+					} else if vresult.DurationReview != "" {
+						item.FirstMeetingTime = vresult.StartTimeReview
+						item.LastMeetingTime = vresult.EndTimeReview
+						item.Duration = vresult.DurationReview
+						item.MeetingStatusStr = "回放"
+					}
+					item.Position = vresult.JobName
+					item.RealName = vresult.PersonName
+
 					item.FirstMeetingTime = vresult.StartTime
 					item.LastMeetingTime = vresult.EndTime
 					item.Duration = vresult.Duration
@@ -696,32 +724,6 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 					fmt.Println("UpdateActivitySignupDetailMultiByYiDong Err:", err.Error())
 					return err
 				}
-				//var condition string
-				//var pars []interface{}
-				//condition = ` AND do_fail_type = 0 AND mobile IN (` + utils.GetOrmInReplace(lenmobiles) + `) AND activity_id = ?`
-				//pars = append(pars, mobiles, v.ActivityId)
-				//listSignup, e := models.GetActivitySignupList(condition, pars)
-				//if e != nil {
-				//	err = errors.New("GetActivitySignupList, Err: " + e.Error())
-				//	return err
-				//}
-
-				//for _, vSignup := range listSignup {
-				//	item := new(models.CygxActivityAttendanceDetail)
-				//	item.ActivityId = vSignup.ActivityId
-				//	item.RealName = vSignup.RealName
-				//	item.Mobile = vSignup.Mobile
-				//	item.CompanyName = vSignup.CompanyName
-				//	if mapActivityAttendanceDetail[vSignup.Mobile] != nil {
-				//		item.FirstMeetingTime = mapActivityAttendanceDetail[vSignup.Mobile].FirstMeetingTime
-				//		item.LastMeetingTime = mapActivityAttendanceDetail[vSignup.Mobile].LastMeetingTime
-				//		item.Duration = mapActivityAttendanceDetail[vSignup.Mobile].Duration
-				//		item.IsMeetingStr = 1
-				//		mobileStr += "'" + vSignup.Mobile + "'" + ","
-				//	}
-				//	item.CreateTime = time.Now()
-				//	needAddAttendanc = append(needAddAttendanc, item)
-				//}
 			}
 
 			mobileStr = strings.TrimRight(mobileStr, ",")

+ 35 - 32
utils/config.go

@@ -27,22 +27,23 @@ 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(小助手)
+	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(小助手)
 )
 
 // 微信公众号配置信息
@@ -72,7 +73,7 @@ var (
 	HtgjSalt                  string //海通加密使用的盐
 	HtgjName                  string //海通国际名称
 	HtgjPublicMobile          string //海通国际公共请求的手机号
-	ActSendMsgMobile          string //活动带问发送模板消息接收者的手机号 (汪洋手机号)
+	ActSendMsgMobile          string //研选活动带问发送模板消息接收者的手机号 (汪洋手机号)
 	StrategyPlatform          string //策略品台跳转链接地址
 	ArticleTaskClassMobile    string //策略平台报告自动归类消息通知对象
 	YiDongZhengTongYunUrl     string //易董 证通云请求域名
@@ -208,7 +209,7 @@ func init() {
 		EmaiWhiteUserList = "cxzhang@hzinsights.com"
 		WxMsgTemplateIdAskMsg = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"
 		WxMsgTemplateIdAskMsgMobile = "15557270714,17634786714,18767183922,17516315016"
-		ActSendMsgMobile = "17634786714"
+		ActSendMsgMobile = "15557270714"
 		ArticleTaskClassMobile = "15557270714,18767183922,17706316791"
 
 		ShangHaiCrmApiLink = "http://106.15.192.100:8100/"
@@ -218,22 +219,24 @@ func init() {
 	//查研观向小助手
 	if RunMode != "release" {
 		//原有的模板ID
-		WxPublicIdXzs = "wx9b5d7291e581233a"                                            //查研观向小助手
-		WxPublicSecretXzs = "f4d52e34021eee262dce9682b31f8861"                          //查研观向小助手
-		WxMsgTemplateIdActivityApplyXzs = "U3su--7d6xsCDcP6Tya0N0wWpKn_uI0zO1cutRK52cc" //活动预约消息提醒(小助手)
-		WxMsgTemplateIdAskMsgXzs = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"        //手机号用户【XXX】发送模板消息模板ID(小助手)
-		WxMsgTemplateIdApplyXzs = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"         //申请待处理(小助手)
-		WxMsgTemplateIdApplyCancelXzs = "UU_d7ks0XZBnWg2xFzxL9Heilm4kisX39K7dr4SDdO8"   ////预约取消提醒(小助手)
-		TemplateIdByProductXzs = "-YjuPOB7Fqd-S3ilabYa6wvjDY9aXmeEfPN6DCiy-EY"          //产品运行报告通知-模板ID(小助手)
+		WxPublicIdXzs = "wx9b5d7291e581233a"                                                  //查研观向小助手
+		WxPublicSecretXzs = "f4d52e34021eee262dce9682b31f8861"                                //查研观向小助手
+		WxMsgTemplateIdActivityApplyXzs = "U3su--7d6xsCDcP6Tya0N0wWpKn_uI0zO1cutRK52cc"       //活动预约消息提醒(小助手)
+		WxMsgTemplateIdAskMsgXzs = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"              //手机号用户【XXX】发送模板消息模板ID(小助手)
+		WxMsgTemplateIdApplyXzs = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"               //申请待处理(小助手)
+		WxMsgTemplateIdApplyCancelXzs = "UU_d7ks0XZBnWg2xFzxL9Heilm4kisX39K7dr4SDdO8"         ////预约取消提醒(小助手)
+		TemplateIdByProductXzs = "-YjuPOB7Fqd-S3ilabYa6wvjDY9aXmeEfPN6DCiy-EY"                //产品运行报告通知-模板ID(小助手)
+		WxMsgTemplateIdActivityChangeApplyXzs = "CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM" //查研观向活动变更通知-模板ID(小助手)
 	} else {
 		//新的模板ID
-		WxPublicIdXzs = "wxb7cb8a15abad5b8e"                                            //查研观向小助手
-		WxPublicSecretXzs = "f425ba2863084249722af1e2a5cfffd3"                          //查研观向小助手
-		WxMsgTemplateIdActivityApplyXzs = "mItHdTF6swcunM4P36lOjnLknGbHaLqYdbOsRKscBq4" //活动预约消息提醒(小助手)
-		WxMsgTemplateIdAskMsgXzs = "IpS-yuNNQc8osCoy20jPHNkvBUyKRL1NGn7c0G9xmQA"        //手机号用户【XXX】发送模板消息模板ID(小助手)
-		WxMsgTemplateIdApplyXzs = "IpS-yuNNQc8osCoy20jPHNkvBUyKRL1NGn7c0G9xmQA"         //申请待处理(小助手)
-		WxMsgTemplateIdApplyCancelXzs = "gCSCAWNNhjkzE2V1cjbIV_Ex68R_8LM_u25qDlSKWyM"   ////预约取消提醒(小助手)
-		TemplateIdByProductXzs = "tNcCUiK_uUkuxaFF7M9NP2RwLkw8uHFjG-TDIxGUKxo"          //产品运行报告通知-模板ID(小助手)
+		WxPublicIdXzs = "wxb7cb8a15abad5b8e"                                                  //查研观向小助手
+		WxPublicSecretXzs = "f425ba2863084249722af1e2a5cfffd3"                                //查研观向小助手
+		WxMsgTemplateIdActivityApplyXzs = "mItHdTF6swcunM4P36lOjnLknGbHaLqYdbOsRKscBq4"       //活动预约消息提醒(小助手)
+		WxMsgTemplateIdAskMsgXzs = "IpS-yuNNQc8osCoy20jPHNkvBUyKRL1NGn7c0G9xmQA"              //手机号用户【XXX】发送模板消息模板ID(小助手)
+		WxMsgTemplateIdApplyXzs = "IpS-yuNNQc8osCoy20jPHNkvBUyKRL1NGn7c0G9xmQA"               //申请待处理(小助手)
+		WxMsgTemplateIdApplyCancelXzs = "gCSCAWNNhjkzE2V1cjbIV_Ex68R_8LM_u25qDlSKWyM"         ////预约取消提醒(小助手)
+		TemplateIdByProductXzs = "tNcCUiK_uUkuxaFF7M9NP2RwLkw8uHFjG-TDIxGUKxo"                //产品运行报告通知-模板ID(小助手)
+		WxMsgTemplateIdActivityChangeApplyXzs = "7qe3i4MrGxAIPhJeMgoqqw6j0A_foUB65DLSmxKe05s" //查研观向活动变更通知-模板ID(小助手)
 	}
 
 	//易董开放api配置

+ 11 - 0
utils/constants.go

@@ -193,3 +193,14 @@ const (
 const (
 	GAO_YI_ZI_CHAN_COMPANY_ID = 5285 // 高毅资产ID
 )
+
+// 模板消息地址路由2
+const (
+	WX_MSG_PATH_TEMPLATE_MSG = "/pages-message/templateMsg/templateMsg?" //留言带问模版消息地址详情
+)
+
+const (
+	TPL_MSG_WANG_YANG           = "tpl_msg_wang_yang"           //汪洋手机号地址参数
+	TPL_MSG_WANG_FANG_WANG_YANG = "tpl_msg_wang_fang_wang_yang" //权限模板消息接收人,王芳,汪洋
+	TPL_MSG                     = "tpl_msg"                     //王芳手机号地址参数
+)