Browse Source

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into debug

xingzai 9 months ago
parent
commit
98bdb2e1c4

+ 2 - 24
controllers/activity.go

@@ -647,21 +647,6 @@ func (this *ActivityCoAntroller) SignupAdd() {
 	if activityInfo.IsYidongConduct && activityInfo.IsCanOutboundCall == 0 {
 		signupType = 4
 	}
-	//SignupStatus "报名状态:人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"`
-	//HasPermission "1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请"`
-
-	//var userType int
-	//userType, _, err = services.GetUserType(user.CompanyId)
-	//if err != nil {
-	//	br.Msg = "获取信息失败!"
-	//	br.ErrMsg = "获取失败,Err:" + err.Error()
-	//	return
-	//}
-	//if userType == 1 && strings.Contains(activityInfo.ChartPermissionName, "研选") {
-	//	br.Msg = "您暂无查看该活动权限"
-	//	br.ErrMsg = "被分享客户不可见,永续客户无法查看研选行业"
-	//	return
-	//}
 	item := new(models.CygxActivitySignup)
 
 	// 判断是否属于研选类型的活动
@@ -768,15 +753,6 @@ func (this *ActivityCoAntroller) SignupAdd() {
 				resp.SignupStatus = "Success"
 				resp.HasPermission = hasPermission
 				resp.ActivityId = activityId
-				//total, err = models.GetUserMeetingReminderCount(user.UserId)
-				//if err != nil {
-				//	br.Msg = "获取信息失败"
-				//	br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
-				//	return
-				//}
-				//if total == 0 {
-				//	resp.GoFollow = true
-				//}
 				br.Ret = 200
 				br.Success = true
 				br.Msg = "操作成功"
@@ -1052,6 +1028,7 @@ func (this *ActivityCoAntroller) SignupCancel() {
 	// 如果是买方研选下的专家沙龙,同时推给内容组四人
 	if activityInfo.ActivityTypeId == 5 {
 		go services.SendActivitieCancelSignTemplateMsg(user, activityInfo)
+		go services.SendActivitieCancelSignCategoryTemplateMsg(user, activityInfo)
 	}
 
 	go services.SendResearchActivitiesTemplateMsg(user, activityInfo, "取消报名") //公司线下调研活动客户报名后给建会人,所属销售推送模板信息
@@ -1607,6 +1584,7 @@ func (this *ActivityCoAntroller) AskAdd() {
 			if openIpItem != nil && openIpItem.OpenId != "" {
 				services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "提问:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo, int(msgId))
 			}
+			go services.SendWxCategoryMsgWithAsk(user, activityInfo, content, int(msgId))
 		}
 	}
 

+ 2 - 1
controllers/report.go

@@ -3686,7 +3686,8 @@ func (this *ReportController) CommentAdd() {
 		return
 	}
 
-	services.SendCommentWxTemplateMsg(req, user, articleInfo, int(msgId))
+	go services.SendCommentWxTemplateMsg(req, user, articleInfo, int(msgId))
+	go services.SendCommentWxTemplateMsgByYxCategory(req, user, articleInfo, int(msgId)) // 发送用户留言提醒(研选公众号类目模版消息)
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "提交成功"

+ 17 - 10
controllers/user.go

@@ -933,6 +933,8 @@ func (this *UserController) ApplyTryOut() {
 	detailId := req.DetailId
 	sourceId = detailId
 	source = tryType
+	redirectUrl := ""
+	redirectUrlYx := ""
 	var isResearch bool // 是否属于研选
 	if tryType == "Article" {
 		detail, err := models.GetArticleDetailById(detailId)
@@ -945,6 +947,8 @@ func (this *UserController) ApplyTryOut() {
 		if detail.ArticleTypeId > 0 {
 			isResearch = true
 		}
+		redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(detailId)
+		redirectUrlYx = utils.WX_MSG_PATH_YX_ARTICLE_DETAIL + strconv.Itoa(detailId)
 	} else if tryType == "Activity" {
 		detail, err := models.GetAddActivityInfoById(detailId)
 		if err != nil {
@@ -956,6 +960,8 @@ func (this *UserController) ApplyTryOut() {
 		if strings.Contains(detail.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
 			isResearch = true
 		}
+		redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(detailId)
+		redirectUrlYx = utils.WX_MSG_PATH_YX_ARTICLE_DETAIL + strconv.Itoa(detailId)
 	} else if tryType == "MicroAudio" {
 		// 微路演音频
 		microAudio, e := models.GetCygxActivityVoiceById(detailId)
@@ -1208,9 +1214,9 @@ func (this *UserController) ApplyTryOut() {
 			CompanyIdType = 1
 			applyMethod = "潜在客户"
 		}
-		if detailId > 0 {
-			applyMethod = applyMethod + "," + title
-		}
+		//if detailId > 0 {
+		//	applyMethod = applyMethod + "," + title
+		//}
 	}
 	item := new(models.CygxApplyRecord)
 	item.UserId = user.UserId
@@ -1237,14 +1243,15 @@ func (this *UserController) ApplyTryOut() {
 		br.ErrMsg = "申请失败,Err:" + err.Error()
 		return
 	}
-	if sellerItem == nil {
-		go services.SendPermissionApplyTemplateMsgAdmin(req, mobile, applyMethod, isResearch)
-	} else {
-		openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
-		if openIpItem != nil && openIpItem.OpenId != "" {
-			go services.SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, mobile, applyMethod, openIpItem)
-		}
+
+	if isResearch {
+		//如果是研选的报告走研选的类目模版消息
+		go services.SendPermissionApplyTemplateMsgAdminByYxCategory(req, user.CompanyId, mobile, applyMethod, redirectUrlYx)
+	}
+	if detailId > 0 {
+		applyMethod = applyMethod + "," + title
 	}
+	go services.SendPermissionApplyTemplateMsg(req.RealName, req.CompanyName, mobile, applyMethod, redirectUrl, user) //权限申请模板消息推送
 	//添加成功后,设置5分钟缓存,不允许重复添加
 	//utils.Rc.SetNX(cacheKey, user.Mobile, time.Second*60)
 

+ 4 - 1
services/activity.go

@@ -2143,9 +2143,12 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 		return
 	}
 	// 如果是买方研选下的专家沙龙,同时推给内容组四人
-	if activityDetail.ActivityTypeId == 5 {
+
+	if activityDetail.ActivityTypeId == 5 && activityDetail.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
 		go SendNeiRongZuActivitieSignTemplateMsg(user, activityDetail)
+		go SendNeiRongZuActivitieSignCategoryTemplateMsg(user, activityDetail)
 	}
+
 	//获取销售手机号
 	sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
 	if e != nil && e.Error() != utils.ErrNoRow() {

+ 2 - 4
services/article.go

@@ -744,8 +744,7 @@ func UpdateArticleByRedis() (err error) {
 func HandleArticleListByApi(artcleId int) (err error) {
 	defer func() {
 		if err != nil {
-			go utils.SendAlarmMsg("处理同步策略平台数据失败"+"GetArticleListByApi ErrMsg:"+err.Error()+"artcleId:"+strconv.Itoa(artcleId), 2)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetArticleListByApi ErrMsg:"+err.Error()+"artcleId:"+strconv.Itoa(artcleId), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg("处理同步过来的文章失败"+"HandleArticleListByApi ErrMsg:"+err.Error()+"artcleId:"+strconv.Itoa(artcleId), 2)
 		}
 	}()
 	var clueApiUrl string
@@ -1274,8 +1273,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	var msg string
 	defer func() {
 		if err != nil {
-			go utils.SendAlarmMsg("处理同步策略平台数据失败"+"GetArticleListByApi ErrMsg:"+err.Error(), 2)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetArticleListByApi ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg("过滤策略平台报告,研选报告重复推送,以及权限勾选的推送失败 DoArticleOnenIdWxTemplateMsg  ErrMsg:"+err.Error(), 2)
 			fmt.Println(err)
 		}
 		if msg != "" {

+ 8 - 8
services/task.go

@@ -144,14 +144,14 @@ func Task() {
 		sendMfyxActivityBeginMsg := task.NewTask("sendMfyxActivityBeginMsg", "0 */5 6-23 * * *", SendMfyxActivityBeginMsg) //会议前60分钟的提醒
 		task.AddTask("sendMfyxActivityBeginMsg", sendMfyxActivityBeginMsg)
 
-		cancelCygxOrder := task.NewTask("CancelCygxOrder", "0 */1 * * * *", CancelCygxOrder)
-		task.AddTask("十分钟内未付款的订单自动取消", cancelCygxOrder) //十分钟内未付款的订单自动取消
-
-		getQueryOrderByOutTradeNoTask := task.NewTask("getQueryOrderByOutTradeNoTask", "0 */1 * * * *", GetQueryOrderByOutTradeNoTask)
-		task.AddTask("定时任务主动获取订单支付状态", getQueryOrderByOutTradeNoTask) //定时任务主动获取订单支付状态
-
-		handleOrderRefundHandleask := task.NewTask("HandleOrderRefundHandleask", "0 */1 * * * *", HandleOrderRefundHandleask)
-		task.AddTask("定时任务处理退款回调", handleOrderRefundHandleask) //定时任务处理退款回调
+		//cancelCygxOrder := task.NewTask("CancelCygxOrder", "0 */1 * * * *", CancelCygxOrder)
+		//task.AddTask("十分钟内未付款的订单自动取消", cancelCygxOrder) //十分钟内未付款的订单自动取消
+		//
+		//getQueryOrderByOutTradeNoTask := task.NewTask("getQueryOrderByOutTradeNoTask", "0 */1 * * * *", GetQueryOrderByOutTradeNoTask)
+		//task.AddTask("定时任务主动获取订单支付状态", getQueryOrderByOutTradeNoTask) //定时任务主动获取订单支付状态
+		//
+		//handleOrderRefundHandleask := task.NewTask("HandleOrderRefundHandleask", "0 */1 * * * *", HandleOrderRefundHandleask)
+		//task.AddTask("定时任务处理退款回调", handleOrderRefundHandleask) //定时任务处理退款回调
 	}
 
 	//if utils.RunMode != "release" {

+ 0 - 38
services/user.go

@@ -1093,41 +1093,3 @@ 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_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
-}

+ 34 - 35
services/user_permission.go

@@ -118,6 +118,40 @@ func GetUserRaiPermissionYanXuanInfo(user *models.WxUserItem) (hasPermission int
 	return
 }
 
+// 获取权益销售姓名
+func GetSellerName(user *models.WxUserItem) (sellerName string, sellerId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("获取权益销售姓名失败 GetSellerName, err:", err.Error()), 2)
+		}
+	}()
+	companyId := user.CompanyId
+	//潜在客户没有销售
+	if user.CompanyId <= 1 {
+		return
+	}
+	//权益客户
+	raiCount, e := models.GetCompanyProductCount(companyId, utils.COMPANY_PRODUCT_RAI_ID)
+	if e != nil {
+		err = errors.New("GetCompanyProductCount, Err: " + e.Error())
+		return
+	}
+	//仅开通FICC的客户不展示销售姓名
+	if raiCount == 0 {
+		return
+	}
+	sealldetail, e := models.GetRaiSellerByCompanyId(companyId)
+	if e != nil {
+		err = errors.New("GetRaiSellerByCompanyId, Err: " + e.Error())
+		return
+	}
+	sellerName = sealldetail.RealName
+	sellerId = sealldetail.AdminId
+	return
+}
+
 // 用户详情页获取用户权限状态  https://hzstatic.hzinsights.com/static/images/202402/20240205/LpE6dspJCLzfQoCoE8SFMDiLuxXk.png(状态码说明)这一期先不改2024-05-24。
 func GetUserDetailPermissionCode(userId, companyId int) (permission int, err error) {
 	// 用户申请记录
@@ -156,38 +190,3 @@ func GetUserDetailPermissionCode(userId, companyId int) (permission int, err err
 	}
 	return
 }
-
-// 获取权益销售姓名
-func GetSellerName(user *models.WxUserItem) (sellerName string, sellerId int) {
-	var err error
-	defer func() {
-		if err != nil {
-			fmt.Println(err)
-			go utils.SendAlarmMsg(fmt.Sprint("获取权益销售姓名失败 GetSellerName, err:", err.Error()), 2)
-		}
-	}()
-	companyId := user.CompanyId
-	//潜在客户没有销售
-	if user.CompanyId <= 1 {
-		return
-	}
-	//权益客户
-	raiCount, e := models.GetCompanyProductCount(companyId, utils.COMPANY_PRODUCT_RAI_ID)
-	if e != nil {
-		err = errors.New("GetCompanyProductCount, Err: " + e.Error())
-		return
-	}
-	//仅开通FICC的客户不展示销售姓名
-	if raiCount == 0 {
-		return
-	}
-	sealldetail, e := models.GetRaiSellerByCompanyId(companyId)
-	if e != nil {
-		err = errors.New("GetRaiSellerByCompanyId, Err: " + e.Error())
-		return
-	}
-	sellerName = sealldetail.RealName
-	sellerId = sealldetail.AdminId
-	return
-
-}

+ 37 - 8
services/wechat_send_msg.go

@@ -104,24 +104,54 @@ func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleT
 }
 
 // 权限申请
-func SendPermissionApplyTemplateMsg(realName, companyName, mobile, applyMethod string, itemOpenid *models.OpenIdList) (err error) {
-
+func SendPermissionApplyTemplateMsg(realName, companyName, mobile, applyMethod, redirectUrl string, user *models.WxUserItem) (err error) {
 	defer func() {
 		if err != nil {
-			go utils.SendAlarmMsg(fmt.Sprint("权限申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile, ";Err:"+err.Error()), 2)
+			go utils.SendAlarmMsg(fmt.Sprint("权限申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile), 2)
 		}
 	}()
+	companyId := user.CompanyId
+	//权益客户
+	raiCount, e := models.GetCompanyProductCount(companyId, utils.COMPANY_PRODUCT_RAI_ID)
+	if e != nil {
+		err = errors.New("GetCompanyProductCount, Err: " + e.Error())
+		return
+	}
+	var mobileOpenid string
+	if raiCount == 0 {
+		mobileOpenid = utils.WxMsgTemplateIdAskMsgMobilePublic
+	} else {
+		sealldetail, e := models.GetRaiSellerByCompanyId(companyId)
+		if e != nil {
+			err = errors.New("GetRaiSellerByCompanyId, Err: " + e.Error())
+			return
+		}
+		mobileOpenid = sealldetail.Mobile
+	}
+
+	openIdList, e := models.GetWxOpenIdByMobileList(mobileOpenid)
+	if e != nil {
+		err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
+		return
+	}
+	if len(openIdList) == 0 {
+		return
+	}
+	openIdArr := make([]string, 0)
+
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
 	var first string
 	var keyword1 string
 	var keyword2 string
 	var keyword3 string
 	var keyword4 string
 	var remark string
-	var redirectUrl string
-
+	//var redirectUrl string
 	detail, e := models.GetCygxApplyRecordByMobile(mobile)
 	if e != nil {
-		err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
+		err = errors.New("GetCygxApplyRecordByMobile" + e.Error())
 		return
 	}
 	//如果是潜在客户就推送可查看详情的模版消息
@@ -132,8 +162,7 @@ func SendPermissionApplyTemplateMsg(realName, companyName, mobile, applyMethod s
 	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

+ 382 - 51
services/wx_category_template_msg.go

@@ -68,6 +68,193 @@ func SendCategoryTemplateMsg(sendInfo *SendWxCategoryTemplate) (err error) {
 	return
 }
 
+// 用户模块
+// 研选类目模板消息
+func SendPermissionApplyTemplateMsgAdminByYxCategory(req models.ApplyTryReq, companyId int, usermobile, applyMethod, redirectUrl string) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("研选类目模板消息消息失败, SendPermissionApplyTemplateMsgAdminByYxCategoryErrMsg: "+err.Error(), 3)
+		}
+	}()
+
+	//潜在客户、未开权益,已开FICC的客户推给王芳,开通权益的客户推给对应销售
+	mobileOpneid := utils.WxMsgTemplateIdAskMsgMobilePublic
+	if companyId > 1 {
+		raiCount, e := models.GetCompanyProductCount(companyId, utils.COMPANY_PRODUCT_RAI_ID)
+		if e != nil {
+			err = errors.New("GetCompanyProductCount, Err: " + e.Error())
+			return
+		}
+		if raiCount == 0 {
+			return
+		}
+		sealldetail, e := models.GetRaiSellerByCompanyId(companyId)
+		if e != nil {
+			err = errors.New("GetRaiSellerByCompanyId, Err: " + e.Error())
+			return
+		}
+		mobileOpneid = sealldetail.Mobile
+	}
+
+	openIdList, e := models.GetMfyxWxOpenIdByMobileList(mobileOpneid)
+	if e != nil {
+		err = errors.New("GetMfyxWxOpenIdByMobileList, Err: " + e.Error())
+		return err
+	}
+	if len(openIdList) == 0 {
+		return
+	}
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	var keyword5 string
+	keyword1 = req.RealName
+	keyword2 = utils.TruncateActivityNameString(req.CompanyName)
+	keyword3 = "权限申请"
+	keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
+	keyword5 = applyMethod
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	detail, e := models.GetCygxApplyRecordByMobile(usermobile)
+	if e != nil {
+		err = errors.New("GetCygxApplyRecordByMobile" + e.Error())
+		return
+	}
+	//redirectUrl := ""
+	//如果是潜在客户就推送可查看详情的模版消息
+	if detail.ApplyMethod == 2 {
+		redirectUrl = utils.WX_MSG_PATH_APPLY_DETAIL + strconv.Itoa(detail.ApplyRecordId)
+	}
+
+	keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
+	sendInfo := new(SendWxCategoryTemplate)
+	sendInfo.Keywords = keywords
+	sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 4
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
+	sendInfo.OpenIdArr = openIdArr
+	sendInfo.RedirectUrl = redirectUrl
+	err = SendCategoryTemplateMsg(sendInfo)
+	return
+}
+
+// 用户模块End
+
+// 报告模块
+// 发送用户留言提醒(研选公众号类目模版消息)
+func SendCommentWxTemplateMsgByYxCategory(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail, msgId int) (err error) {
+	if articleInfo.ArticleTypeId == 0 {
+		return // 非研选的文章不做推送
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId, "err", err.Error()), 2)
+		}
+	}()
+
+	companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
+	if e != nil {
+		return
+	}
+	if companyItem == nil {
+		err = errors.New("获取客户所属销售信息失败")
+		return
+	}
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	var keyword5 string
+	var redirectUrl string
+	var mobile string
+
+	var keywords []string
+	keyword1 = user.RealName
+	keyword2 = utils.TruncateActivityNameString(companyItem.CompanyName)
+	keyword3 = companyItem.SellerName
+	keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
+	keyword5 = "报告留言:" + req.Content
+	keyword5 = utils.TruncateActivityNameString(keyword5)
+	keywords = append(keywords, keyword1, keyword2, keyword3, keyword4, keyword5)
+
+	var mobiles []string
+	mobiles = append(mobiles, utils.RAI_MOBILE_GAO_YI_WEN, utils.RAI_MOBILE_DONG_HENG, utils.RAI_MOBILE_WU_ANG_DI, utils.RAI_MOBILE_GE_LIN) //葛琳、高亦文、董衡、吴昂迪手机号
+	mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + strings.Join(mobiles, ",")
+	//mobile =
+	openIdList, e := models.GetMfyxWxOpenIdByMobileList(mobile)
+	if e != nil {
+		err = errors.New("GetMfyxWxOpenIdByMobileList, Err: " + e.Error())
+		return
+	}
+	if len(openIdList) == 0 {
+		return
+	}
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=1"
+	sendInfo := new(SendWxCategoryTemplate)
+	sendInfo.Keywords = keywords
+	sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 4
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	sendInfo.RedirectUrl = redirectUrl
+	err = SendCategoryTemplateMsg(sendInfo)
+	return
+}
+
+// 发送报告提问消息提醒
+func SendWxCategoryMsgWithActivityAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, msgId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒类目模版消息失败,用户名", realName, "留言ID:", msgId), 2)
+		}
+	}()
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	var keyword5 string
+
+	keyword1 = realName
+	keyword2 = companyName
+	keyword3 = sellerName
+	keyword4 = askTime
+	keyword5 = utils.TruncateActivityNameString("活动提问:" + askMsg)
+
+	keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
+
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(msgId)
+
+	sendInfo := new(SendWxCategoryTemplate)
+	sendInfo.Keywords = keywords
+	sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 4
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
+	sendInfo.OpenIdArr = openIdArr
+	sendInfo.RedirectUrl = redirectUrl
+	err = SendCategoryTemplateMsg(sendInfo)
+	if err != nil {
+		return
+	}
+	return
+}
+
+//报告模块END
+
+// 活动模块
 // 帮我带问的问题,会前1小时发送
 func SendMfyxEmailFileForAskMsgResearch(cont context.Context) (err error) {
 	var msg string
@@ -140,54 +327,6 @@ func SendMfyxEmailFileForAskMsgResearch(cont context.Context) (err error) {
 	return
 }
 
-// 发送报告提问消息提醒
-func SendWxCategoryMsgWithActivityAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, msgId 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("发送报告提问消息提醒类目模版消息失败,用户名", realName, "留言ID:", msgId), 2)
-			utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
-		}
-		fmt.Println("line 21", err, msg)
-	}()
-	var keyword1 string
-	var keyword2 string
-	var keyword3 string
-	var keyword4 string
-	var keyword5 string
-
-	keyword1 = realName
-	keyword2 = companyName
-	keyword3 = sellerName
-	keyword4 = askTime
-	keyword5 = utils.TruncateActivityNameString("活动提问:" + askMsg)
-
-	keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
-
-	openIdArr := make([]string, 0)
-	for _, v := range openIdList {
-		openIdArr = append(openIdArr, v.OpenId)
-	}
-	redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(msgId)
-
-	sendInfo := new(SendWxCategoryTemplate)
-	sendInfo.Keywords = keywords
-	sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
-	sendInfo.RedirectTarget = 4
-	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
-	sendInfo.OpenIdArr = openIdArr
-	sendInfo.RedirectUrl = redirectUrl
-	err = SendCategoryTemplateMsg(sendInfo)
-	if err != nil {
-		return
-	}
-	return
-}
-
 // 推送会议开始消息提醒60分钟前
 func SendMfyxActivityBeginMsg(cont context.Context) (err error) {
 	//func SendActivityBeginMsg() (err error) {
@@ -342,6 +481,9 @@ func SendMfyxActivityBeginMsgMeeting(cont context.Context) (err error) {
 
 // 线下调研活动扫码签到给对应销售发类目模班消息
 func SendActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
+	if activityDetail.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN {
+		return
+	}
 	defer func() {
 		if err != nil {
 			go utils.SendAlarmMsg(fmt.Sprint("线下调研活动扫码签到给对应销售发模班消息推送失败 SendActivitieSignCategoryTemplateMsg Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
@@ -354,7 +496,7 @@ func SendActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetai
 		return
 	}
 	if sellerItem != nil {
-		mobiles = append(mobiles, sellerItem.Mobile, utils.MobileWuAngDi, utils.MobileDongHeng, utils.MobileShenTao)
+		mobiles = append(mobiles, sellerItem.Mobile, utils.MobileWuAngDi, utils.MobileDongHeng, utils.MobileShenTao, utils.MobileZhangChuanXin)
 	}
 
 	var keyword1 string
@@ -398,6 +540,193 @@ func SendActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetai
 	return
 }
 
+// 发送活动提问消息提醒(研选公众号类目模版消息)
+func SendWxCategoryMsgWithAsk(user *models.WxUserItem, activityInfo *models.ActivityDetail, askMsg string, askId int) (err error) {
+	if activityInfo.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN {
+		return
+	}
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("发送活动提问消息提醒类目模版消息失败,用户名", user.RealName, "提问ID:", askId), 2)
+		}
+	}()
+
+	companyId := user.CompanyId
+	var sellerName string
+	//潜在客户、未开权益,已开FICC的客户推给王芳,开通权益的客户推给对应销售
+	mobile := utils.WxMsgTemplateIdAskMsgMobilePublic
+	if companyId > 1 {
+		raiCount, e := models.GetCompanyProductCount(companyId, utils.COMPANY_PRODUCT_RAI_ID)
+		if e != nil {
+			err = errors.New("GetCompanyProductCount, Err: " + e.Error())
+			return
+		}
+		if raiCount > 0 {
+			sealldetail, e := models.GetRaiSellerByCompanyId(companyId)
+			if e != nil {
+				err = errors.New("GetRaiSellerByCompanyId, Err: " + e.Error())
+				return
+			}
+			sellerName = sealldetail.RealName
+			mobile += "," + sealldetail.Mobile
+		}
+	}
+	var mobiles []string
+	mobiles = append(mobiles, utils.RAI_MOBILE_GAO_YI_WEN, utils.RAI_MOBILE_DONG_HENG, utils.RAI_MOBILE_WU_ANG_DI, utils.RAI_MOBILE_GE_LIN) //葛琳、高亦文、董衡、吴昂迪手机号
+	mobile += "," + strings.Join(mobiles, ",")
+	openIdList, e := models.GetMfyxWxOpenIdByMobileList(mobile)
+	if e != nil {
+		err = errors.New("GetMfyxWxOpenIdByMobileList, Err: " + e.Error())
+		return err
+	}
+	if len(openIdList) == 0 {
+		return
+	}
+
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	var keyword5 string
+
+	keyword1 = user.RealName
+	keyword2 = utils.TruncateActivityNameString(user.CompanyName)
+	keyword3 = sellerName
+	keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
+	keyword5 = utils.TruncateActivityNameString("活动提问:" + askMsg)
+
+	keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
+
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+
+	redirectUrl := utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(askId) + "&SourceType=2"
+	//redirectUrl = ""
+	sendInfo := new(SendWxCategoryTemplate)
+	sendInfo.Keywords = keywords
+	sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 4
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
+	sendInfo.OpenIdArr = openIdArr
+	sendInfo.RedirectUrl = redirectUrl
+	err = SendCategoryTemplateMsg(sendInfo)
+	return
+}
+
+// 用户报名模板消息推送(研选公众号类目模版消息)
+func SendNeiRongZuActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
+	if activityDetail.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityDetail.ActivityId), 2)
+			fmt.Println(err)
+		}
+	}()
+	sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		return
+	}
+	var mobile string
+	var sellerRealName string
+	var mobiles []string
+	mobiles = append(mobiles, utils.RAI_MOBILE_GAO_YI_WEN, utils.RAI_MOBILE_DONG_HENG, utils.RAI_MOBILE_WU_ANG_DI, utils.MobileShenTao, utils.MobileZhangChuanXin) //高亦文、董衡、吴昂迪手机号
+	if sellerItemQy != nil {
+		mobiles = append(mobiles, sellerItemQy.Mobile)
+		sellerRealName = sellerItemQy.RealName
+	} else {
+		sellerRealName = "__"
+	}
+	mobile = strings.Join(mobiles, ",")
+	openIdList, e := models.GetMfyxWxOpenIdByMobileList(mobile)
+	if e != nil {
+		err = errors.New("GetMfyxWxOpenIdByMobileList, Err: " + e.Error())
+		return err
+	}
+	if len(openIdList) == 0 {
+		err = nil
+		return
+	}
+
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	var keywords []string
+	keywords = append(keywords, user.RealName, user.CompanyName, sellerRealName, time.Now().Format(utils.FormatDateTimeMinute2), utils.TruncateActivityNameString("报名:"+activityDetail.ActivityName))
+	redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(activityDetail.ActivityId) //活动详情地址
+	sendInfo := new(SendWxCategoryTemplate)
+	sendInfo.Keywords = keywords
+	sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 4
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	sendInfo.RedirectUrl = redirectUrl
+	err = SendCategoryTemplateMsg(sendInfo)
+	return
+}
+
+// 用户取消报名模板消息推送(研选公众号类目模版消息)
+func SendActivitieCancelSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
+	if activityDetail.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN {
+		return
+	}
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,活动ID:", activityDetail.ActivityId), 2)
+		}
+	}()
+	sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		return
+	}
+	var mobile string
+	var sellerRealName string
+	var mobiles []string
+	mobiles = append(mobiles, utils.RAI_MOBILE_GAO_YI_WEN, utils.RAI_MOBILE_DONG_HENG, utils.RAI_MOBILE_WU_ANG_DI, utils.MobileShenTao, utils.MobileZhangChuanXin) //高亦文、董衡、吴昂迪手机号
+	if sellerItemQy != nil {
+		mobiles = append(mobiles, sellerItemQy.Mobile)
+		sellerRealName = sellerItemQy.RealName
+	} else {
+		sellerRealName = "__"
+	}
+	mobile = strings.Join(mobiles, ",")
+	openIdList, e := models.GetMfyxWxOpenIdByMobileList(mobile)
+	if e != nil {
+		err = errors.New("GetMfyxWxOpenIdByMobileList, Err: " + e.Error())
+		return err
+	}
+	if len(openIdList) == 0 {
+		err = nil
+		return
+	}
+
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	var keywords []string
+	keywords = append(keywords, user.RealName, user.CompanyName, sellerRealName, time.Now().Format(utils.FormatDateTimeMinute2), utils.TruncateActivityNameString("取消报名:"+activityDetail.ActivityName))
+	redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(activityDetail.ActivityId) //活动详情地址
+	sendInfo := new(SendWxCategoryTemplate)
+	sendInfo.Keywords = keywords
+	sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 4
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	sendInfo.RedirectUrl = redirectUrl
+	err = SendCategoryTemplateMsg(sendInfo)
+	return
+}
+
+// 活动模块END
+
+// 专栏模块
 // 研选专栏审核完成时,给提交人发送类目模板消息
 func SendWxCategoryMsgSpecialAuthor(specialId, status int) (err error) {
 	defer func() {
@@ -541,7 +870,7 @@ func SendWxCategoryMsgSpecialFollow(specialId int) (err error) {
 	return
 }
 
-// SendReviewCategoryTemplateMsgAdmin 提交审核时给王芳、葛琳和沈涛发研选类目模板消息
+// SendReviewCategoryTemplateMsgAdmin 专栏提交审核时给王芳、葛琳和沈涛发研选类目模板消息
 func SendReviewCategoryTemplateMsgAdmin(specialId int) (err error) {
 	defer func() {
 		if err != nil {
@@ -549,7 +878,7 @@ func SendReviewCategoryTemplateMsgAdmin(specialId int) (err error) {
 		}
 	}()
 	//王芳、葛琳和沈涛
-	mobile := utils.WxMsgTemplateIdAskMsgMobilePublic + utils.RAI_MOBILE_GE_LIN_WEN
+	mobile := utils.WxMsgTemplateIdAskMsgMobilePublic + utils.RAI_MOBILE_GE_LIN
 	openIdList, e := models.GetMfyxWxOpenIdByMobileList(mobile)
 	if e != nil && e.Error() != utils.ErrNoRow() {
 		err = errors.New("GetUserRecordListByMobile, Err: " + e.Error())
@@ -601,3 +930,5 @@ func SendReviewCategoryTemplateMsgAdmin(specialId int) (err error) {
 	}
 	return
 }
+
+//专栏模块END

+ 16 - 9
utils/config.go

@@ -56,10 +56,10 @@ var (
 	WxMsgCategoryTemplateIdArticleUserRemind         string //用户阅读报告通知-类目模板ID
 
 	//权益内容组手机号
-	RAI_MOBILE_GAO_YI_WEN    string // 权益高亦文手机号
-	RAI_MOBILE_DONG_HENG     string // 权益董衡手机号
-	RAI_MOBILE_WU_ANG_DI_WEN string // 权益吴昂迪手机号
-	RAI_MOBILE_GE_LIN_WEN    string // 权益葛琳手机号
+	RAI_MOBILE_GAO_YI_WEN string // 权益高亦文手机号
+	RAI_MOBILE_DONG_HENG  string // 权益董衡手机号
+	RAI_MOBILE_WU_ANG_DI  string // 权益吴昂迪手机号
+	RAI_MOBILE_GE_LIN     string // 权益葛琳手机号
 )
 
 // 微信公众号配置信息
@@ -267,6 +267,13 @@ func init() {
 		WxMsgCategoryTemplateIdCompanyApprovalMessageRai = "wU4x_c5XruwuA44VZelyklRNOfq4XrU9ILckTtDs6hg" //权益销售签约成功通知买方研选类目模版消息通知-类目模板ID
 		WxMsgCategoryTemplateIdActivityPublishApply = "wLeV7tVK4ZJBoAvsmfXkHveVW8yefGAkwnVKQWRi8uQ"
 		WxMsgCategoryTemplateIdArticleUserRemind = "4fwzgJ-2xUiyQqNkFCPd8vsGpOnNWWE2inZO4BXjfio"
+
+		//权益内容组手机号测试环境没什么用,配合测试切换他们的手机号
+		RAI_MOBILE_GAO_YI_WEN = "17706316791" //权益高亦文手机号
+		RAI_MOBILE_DONG_HENG = "15557270714"  // 权益董衡手机号
+		RAI_MOBILE_WU_ANG_DI = "15557270714"  // 权益吴昂迪手机号
+		RAI_MOBILE_GE_LIN = "15557270714"     // 权益葛琳手机号
+
 	} else {
 		//新的模板ID
 		WxPublicIdXzs = "wxb7cb8a15abad5b8e"                                                  //查研观向小助手
@@ -286,11 +293,11 @@ func init() {
 		WxMsgCategoryTemplateIdActivityPublishApply = "IBMqiE61lVgUfFM4rsH0XCH57R_G3PbWvRbnzg9JHPI"
 		WxMsgCategoryTemplateIdArticleUserRemind = "4fwzgJ-YQndzH5OJWLkd0grvftgqhvP285t_oXUboi7DaaIhMI"
 
-		//权益内容组手机号测试环境没什么用,配合测试切换他们的手机号
-		RAI_MOBILE_GAO_YI_WEN = "17706316791"    //权益高亦文手机号
-		RAI_MOBILE_DONG_HENG = "15557270714"     // 权益董衡手机号
-		RAI_MOBILE_WU_ANG_DI_WEN = "15557270714" // 权益吴昂迪手机号
-		RAI_MOBILE_GE_LIN_WEN = "15557270714"    // 权益葛琳手机号
+		//权益内容组手机号
+		RAI_MOBILE_GAO_YI_WEN = "15000123056" //权益高亦文手机号
+		RAI_MOBILE_DONG_HENG = "15216736473"  // 权益董衡手机号
+		RAI_MOBILE_WU_ANG_DI = "18701809782"  // 权益吴昂迪手机号
+		RAI_MOBILE_GE_LIN = "18258485832"     // 权益葛琳手机号
 	}
 
 	//易董开放api配置

+ 2 - 2
utils/constants.go

@@ -194,9 +194,9 @@ const (
 	WX_MSG_PATH_YX_SPECIAL_ENABLE_DETAIL = "pages-purchaser/toExamine/toExamine?isMessage=模板&id="         //研选专栏审核详情页面
 	WX_MSG_PATH_YX_SPECIAL_CENTER        = "pages-purchaser/contentAllPage/contentAllPage?Status=4"       //研选专栏内容中心
 	WX_MSG_PATH_YX_COMMENT_DETAIL        = "pages-activity/generationAsk/generationAsk?id="               //研选报告留言详情
-	WX_MSG_PATH_YX_ACTIVITY_DETAIL       = "pages-activity/activityDetail/activityDetail?id="             //研选活动详情
+	WX_MSG_PATH_YX_ACTIVITY_DETAIL       = "pages-activity/activityDetail/activityDetail?IsSendWx=1&id="  //研选活动详情
 	WX_MSG_PATH_YX_SIGNUP_DETAIL         = "pages-message/activityTemplate/activityTemplate?id="          //研选报名详情
-	WX_MSG_PATH_YX_ARTICLE_DETAIL        = "pages-user/reportDetail/reportDetail?id="                     //研选纪要详情
+	WX_MSG_PATH_YX_ARTICLE_DETAIL        = "pages-user/reportDetail/reportDetail?IsSendWx=1&id="          //研选纪要详情
 )
 
 //2:文章详情  https://web.hzinsights.com/material/info/8436  小程序路径:/pageMy/reportDetail/reportDetail?id=

+ 5 - 10
utils/wechat_cert.go

@@ -3,10 +3,10 @@ package utils
 import (
 	"context"
 	"fmt"
+	"github.com/beego/beego/v2/core/utils"
 	"github.com/wechatpay-apiv3/wechatpay-go/core"
 	"github.com/wechatpay-apiv3/wechatpay-go/core/option"
 	payUtils "github.com/wechatpay-apiv3/wechatpay-go/utils"
-	"os"
 )
 
 var WechatCertClient *core.Client
@@ -21,15 +21,10 @@ const (
 
 // 微信商户建立连接
 func init() {
-	if RunMode != "release" {
-		_, err := os.Stat(MchPKFileName) // 判断证书路径是否存在,非生产环境不做判断。
-		if err != nil {
-			//fmt.Println(err)
-			go SendAlarmMsg("微信商户链接失败 os.Stat"+err.Error(), 2)
-			FileLog.Info("WechatCertClient err:" + err.Error())
-			err = nil
-			return
-		}
+	if !utils.FileExists(MchPKFileName) {
+		//fmt.Println("商户私钥文件不存在")
+		go SendAlarmMsg("微信商户链接失败 商户私钥文件不存在", 2)
+		return
 	}
 
 	// 使用 utils 提供的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名