Răsfoiți Sursa

Merge branch 'cygx_10.9'

# Conflicts:
#	models/db.go
ziwen 1 an în urmă
părinte
comite
495b81e6a1

+ 108 - 2
controllers/activity.go

@@ -16,6 +16,11 @@ type ActivityController struct {
 	BaseAuthController
 }
 
+type ActivityNoLoginController struct {
+	BaseAuthMobileController
+}
+
+
 // @Title 活动类型下的主题列表
 // @Description 获取活动类型下的主题列表接口
 // @Param   ChartPermissionIds   query   string  false     "行业id 多个用 , 隔开"
@@ -27,7 +32,7 @@ type ActivityController struct {
 // @Param   IsResearchPoints   query   int  false       "是否仅展示研选扣点 1:是、0:否 默认0"
 // @Success 200 {object} models.ActivityTypeListHomeResp
 // @router /labelTypeList [get]
-func (this *ActivityController) LabelTypeList() {
+func (this *ActivityNoLoginController) LabelTypeList() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -195,7 +200,7 @@ func (this *ActivityController) LabelTypeList() {
 // @Param   IsResearchPoints   query   int  false       "是否仅展示研选扣点 1:是、0:否 默认0"
 // @Success 200 {object} models.GetCygxActivityListRep
 // @router /list [get]
-func (this *ActivityController) ActivityListNew() {
+func (this *ActivityNoLoginController) ActivityListNew() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -1249,6 +1254,10 @@ func (this *ActivityController) SignupCancel() {
 		return
 	}
 	go services.YanXuanActivityPointsBillSignupCancel(activityId, uid) // 用户取消报名添加到处理研选扣点
+	// 如果是买方研选下的专家沙龙,同时推给内容组四人
+	if activityInfo.ActivityTypeId == 5 {
+		go services.SendActivitieCancelSignTemplateMsg(user, activityInfo)
+	}
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -1440,6 +1449,7 @@ func (this *ActivityController) MeetingReminderCancel() {
 		br.ErrMsg = "操作失败,Err:" + errSignup.Error()
 		return
 	}
+
 	resp := new(models.SignupStatus)
 	resp.SignupStatus = signupStatus
 	resp.HasPermission = 1
@@ -2358,3 +2368,99 @@ func (this *ActivityController) Check() {
 	br.Success = true
 	br.Data = resp
 }
+
+// @Title 记录用户浏览音频回放接口
+// @Description 记录用户浏览音频回放接口
+// @Param	request	body models.ActivityIdRep true "type json string"
+// @Success Ret=200 {object} models.AppointmentResp
+// @router /voiceHistory/add [post]
+func (this *ActivityController) ActivityVoiceHistoryAdd() {
+	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
+	}
+	uid := user.UserId
+	var req models.ActivityIdRep
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	activityId := req.ActivityId
+	playSeconds := req.PlaySeconds
+
+	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
+	if activityInfo == nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	if errInfo != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
+		return
+	}
+	var sellerName string
+	sellerName, err = models.GetCompanySellerName(user.CompanyId)
+	if err != nil {
+		br.Msg = "报名失败!"
+		br.ErrMsg = "获取对应销售失败,Err:" + err.Error()
+		return
+	}
+	item := models.CygxActivityVoiceHistory{
+		ActivityId:  activityId,
+		UserId:      uid,
+		CreateTime:  time.Now(),
+		Mobile:      user.Mobile,
+		Email:       user.Email,
+		CompanyId:   user.CompanyId,
+		CompanyName: user.CompanyName,
+		RealName:    user.RealName,
+		SellerName:  sellerName,
+		PlaySeconds: strconv.Itoa(req.PlaySeconds),
+		ModifyTime:  time.Now(),
+	}
+
+	if playSeconds != 0 {
+		lastItem, err := models.GetLastCygxActivityVoiceHistory(activityId, user.UserId)
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "操作失败,GetLastCygxActivityVoiceHistory Err:" + err.Error()
+			return
+		}
+		err = models.UpdateLastCygxActivityVoiceHistory(strconv.Itoa(req.PlaySeconds), lastItem.Id)
+		if err != nil {
+			br.Msg = "更新失败"
+			br.ErrMsg = "更新失败,UpdateLastCygxActivityVoiceHistory Err:" + err.Error()
+			return
+		}
+	} else {
+		err = models.AddCygxActivityVoiceHistory(&item)
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "操作失败,Err:" + err.Error()
+			return
+		}
+		err = models.UpdateCygxActivityVoiceCounts(activityId)
+		if err != nil {
+			br.Msg = "更新失败"
+			br.ErrMsg = "更新失败,Err:" + err.Error()
+			return
+		}
+		go services.ActivityVideoUserRmind(user, activityId, 2)
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+	return
+}

+ 64 - 0
models/activity_voice_history.go

@@ -0,0 +1,64 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivityVoiceHistory struct {
+	Id          int       `orm:"column(id);pk"`
+	ActivityId  int       `description:"活动ID"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	RealName    string    `description:"用户实际名称"`
+	SellerName  string    `description:"所属销售"`
+	PlaySeconds string    `description:"播放时间 单位s"`
+	ModifyTime  time.Time `description:"视频修改时间"`
+}
+
+//添加
+func AddCygxActivityVoiceHistory(item *CygxActivityVoiceHistory) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+func GetLastCygxActivityVoiceHistory(activityId, userId int) (item *CygxActivityVoiceHistory, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM cygx_activity_voice_history WHERE activity_id=? AND user_id=? ORDER BY create_time DESC limit 1 `
+	err = o.Raw(sql, activityId, userId).QueryRow(&item)
+	return
+}
+
+func UpdateLastCygxActivityVoiceHistory(playSeconds string, lastId int) (err error) {
+	o := orm.NewOrm()
+	sql := ` UPDATE cygx_activity_voice_history SET play_seconds =? WHERE id=? `
+	_, err = o.Raw(sql, playSeconds, lastId).Exec()
+	return
+}
+
+//获取列表信息根据手机号分组
+func GetActivityVoiceHistoryByMobileList(condition string) (items []*CygxActivityVoiceHistory, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_voice_history  WHERE 1 =1  ` + condition + `  GROUP BY user_id  `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//修改用户浏览活动音频的相关信息
+func UpdateCygxActivityVoiceHistory(wxUser *WxUserItem) (err error) {
+	o := orm.NewOrm()
+	var sql string
+	if wxUser.Mobile != "" {
+		sql = `UPDATE cygx_activity_voice_history SET email=?,company_id=?,company_name=?,user_id=?,real_name=? WHERE mobile=? `
+		_, err = o.Raw(sql, wxUser.Email, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Mobile).Exec()
+	} else if wxUser.Email != "" {
+		sql = `UPDATE cygx_activity_voice_history SET mobile=?,company_id=?,company_name=?,user_id=?,real_name=? WHERE email=? `
+		_, err = o.Raw(sql, wxUser.Mobile, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Email).Exec()
+	}
+	return
+}

+ 1 - 0
models/db.go

@@ -76,6 +76,7 @@ func init() {
 		new(CygxApplyRecord),
 		new(CygxTagHistory),
 		new(CygxActivitySpecialMeetingDetail),
+		new(CygxActivityVoiceHistory),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 61 - 3
models/report.go

@@ -596,11 +596,13 @@ type TimeLineReportItem struct {
 	PublishDate     string `description:"发布时间"`
 	Content         string `description:"内容"`
 	VideoUrl        string `description:"视频链接"`
+	VoiceUrl        string `description:"音频链接"`
 	IsHaveVideo     bool   `description:"是否包含视频"`
 	ImgUrlPc        string `description:"pc图片"`
 	SubCategoryName string `description:"二级分类"`
 	IsRed           bool   `description:"是否标红"`
 	Readnum         int    `description:"阅读数量"`
+	Resource        int    `description:"来源类型,1:文章、2:产品内测、3:晨报点评 4:活动回放视频 5:活动回放音频 "`
 }
 
 // 获取产业报告+晨会点评列表
@@ -616,8 +618,10 @@ FROM
 		a.title,
 		a.publish_date,
 		a.video_url,
+		'' AS voice_url,
 		a.sub_category_name,
 		'' AS content,
+		1 AS resource,
 		( SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.article_id = a.article_id ) AS readnum 
 	FROM
 		cygx_article AS a
@@ -632,8 +636,10 @@ FROM
 		mmc.content AS title,
 		mm.publish_time AS publish_date,
 		'' AS video_url,
+		'' AS voice_url,
 		'时间线' AS sub_category_name,
 		'' AS content,
+		3 AS resource,
 		0  AS readnum 
 	FROM
 		cygx_morning_meeting_review_chapter AS mmc
@@ -641,13 +647,65 @@ FROM
 	WHERE
 		mm.id = mmc.meeting_id 
 		AND mm.STATUS = 1 
-		AND mmc.industry_id = ? 
+		AND mmc.industry_id = ? UNION ALL
+	SELECT
+		p.product_interior_id AS id,
+		p.product_interior_id  as article_id,
+		p.title,
+		p.publish_time AS publish_date,
+		'' AS video_url,
+		'' AS voice_url,
+		'' AS sub_category_name,
+		'' AS content,
+		2 AS resource,
+		0 AS readnum 
+	FROM
+		cygx_product_interior AS p
+		INNER JOIN cygx_product_interior_industrial_group_management AS pm 
+	WHERE
+		p.product_interior_id = pm.product_interior_id 
+		AND p.visible_range = 1 
+		AND pm.industrial_management_id = ? UNION ALL
+ 	SELECT 
+		cav.video_id AS id,
+		0 as  article_id,
+		cav.video_name AS title,
+		ca.activity_time AS publish_time,
+		cav.video_url AS video_url,
+		'' AS voice_url,
+		'' AS sub_category_name,
+		'' AS content,
+		4 AS resource,
+		( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.activity_id = ca.activity_id ) AS readnum 
+	FROM 
+		cygx_activity AS ca 
+		INNER JOIN cygx_activity_video AS cav ON ca.activity_id = cav.activity_id 
+		INNER JOIN cygx_industrial_activity_group_management AS cam ON ca.activity_id=cam.activity_id
+	WHERE 
+		cam.industrial_management_id = ? AND cam.source = 1 UNION ALL
+ 	SELECT 
+		ca.activity_id AS id,
+		0 as  article_id,
+		cavo.voice_name AS title,
+		ca.activity_time AS publish_time,
+		'' AS video_url,
+		cavo.voice_url AS voice_url,
+		'' AS sub_category_name,
+		'' AS content,
+		5 AS resource,
+		( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.activity_id = ca.activity_id ) AS readnum 
+	FROM 
+		cygx_activity AS ca 
+		INNER JOIN cygx_activity_voice AS cavo ON ca.activity_id = cavo.activity_id 
+		INNER JOIN cygx_industrial_activity_group_management AS cam ON ca.activity_id=cam.activity_id
+	WHERE 
+		cam.industrial_management_id = ? AND cam.source = 1 
 	) AS t`
 	totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
-	err = o.Raw(totalSql, industrialManagementId, industrialManagementId).QueryRow(&total)
+	err = o.Raw(totalSql, industrialManagementId, industrialManagementId, industrialManagementId, industrialManagementId,industrialManagementId).QueryRow(&total)
 	sql += ` ORDER BY 
 	t.publish_date DESC LIMIT ?,? `
-	_, err = o.Raw(sql, industrialManagementId, industrialManagementId, startSize, pageSize).QueryRows(&items)
+	_, err = o.Raw(sql, industrialManagementId, industrialManagementId, industrialManagementId, industrialManagementId,industrialManagementId, startSize, pageSize).QueryRows(&items)
 	return
 }
 

+ 27 - 18
routers/commentsRouter.go

@@ -61,24 +61,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"],
-        beego.ControllerComments{
-            Method: "LabelTypeList",
-            Router: `/labelTypeList`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"],
-        beego.ControllerComments{
-            Method: "ActivityListNew",
-            Router: `/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"],
         beego.ControllerComments{
             Method: "ActivityListSearch",
@@ -133,6 +115,33 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"],
+        beego.ControllerComments{
+            Method: "ActivityVoiceHistoryAdd",
+            Router: `/voiceHistory/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityNoLoginController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityNoLoginController"],
+        beego.ControllerComments{
+            Method: "LabelTypeList",
+            Router: `/labelTypeList`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityNoLoginController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityNoLoginController"],
+        beego.ControllerComments{
+            Method: "ActivityListNew",
+            Router: `/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivitySpecialController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivitySpecialController"],
         beego.ControllerComments{
             Method: "SpecialDetail",

+ 1 - 0
routers/router.go

@@ -89,6 +89,7 @@ func init() {
 		web.NSNamespace("/activity",
 			web.NSInclude(
 				&controllers.ActivityController{},
+				&controllers.ActivityNoLoginController{},
 			),
 		),
 		web.NSNamespace("/activity_special",

+ 101 - 6
services/activity.go

@@ -315,6 +315,11 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 
 // 根据用户身份处理活动可见
 func ActivityConditioninitSql(user *models.WxUserItem, condition string, isPower int) (conditionActivity string, err error) {
+	// cygx_10.9 未绑定联系方式的客户可以看到部分活动
+	if user.UserId == 0 || user.CompanyId == 1 {
+		conditionActivity  = ` AND art.publish_status = 1  AND art.visible_range != 1 AND (art.is_limit_people = 0 OR (art.is_limit_people=1 AND art.is_all_customer_type=1))   ` + condition
+		return
+	}
 	condition += `   AND art.publish_status = 1 `
 	conditionActivity = condition
 	//弘则可以查看所有活动
@@ -1329,6 +1334,15 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetCeLueArticlePv ErrMsg:"+err.Error(), utils.EmailSendToUsers)
 		}
 	}()
+	//获取销售手机号
+	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return err
+	}
+	// 如果是买方研选下的专家沙龙,同时推给内容组四人
+	if activityDetail.ActivityTypeId == 5 {
+		go SendNeiRongZuActivitieSignTemplateMsg(user, activityDetail)
+	}
 	countUser, err := models.GetUserRemind(user.UserId)
 	if err != nil {
 		return err
@@ -1346,12 +1360,6 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 	} else if source == 4 {
 		sourceMsg = "活动报名"
 	}
-
-	//获取销售手机号
-	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		return err
-	}
 	if sellerItemQy != nil {
 		openIdList, err := models.GetUserRecordListByMobile(4, sellerItemQy.Mobile)
 		if err != nil {
@@ -1366,3 +1374,90 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 	}
 	return
 }
+
+// 用户音视频回放操作操作行为,模板消息推送
+func ActivityVideoUserRmind(user *models.WxUserItem, activityId, fileType int) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("用户音视频回放操作操作行为,模板消息推送失败"+err.Error(), 2)
+		}
+	}()
+	countUser, err := models.GetUserRemind(user.UserId)
+	if err != nil {
+		return err
+	}
+	if countUser == 0 {
+		return err
+	}
+	var first string
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	var remark string
+	//获取销售手机号
+	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return err
+	}
+	if sellerItemQy != nil {
+		openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
+		if e != nil {
+			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
+			return
+		}
+		//TripStatus            int    `description:"行程进行状态 1:预报名,2:确定行程"`
+		if fileType == 1 {
+			activityInfo, e := models.GetCygxActivityVideoByActivityId(activityId)
+			if e != nil {
+				err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
+				return
+			}
+			if activityInfo == nil {
+				return
+			}
+			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 {
+				err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
+				return
+			}
+			if activityInfo == nil {
+				return
+			}
+			keyword1 = activityInfo.VoiceName
+			keyword2 = fmt.Sprint("互动:播放音频,", user.RealName, "--", user.CompanyName)
+			first = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:播放音频")
+		}
+
+		//keyword2 = "__"
+		//remark = "点击查看活动详情"
+		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.WxMsgTemplateIdArticleUserRemind
+		sendInfo.RedirectUrl = redirectUrl
+		sendInfo.RedirectTarget = 3
+		sendInfo.Resource = strconv.Itoa(activityId)
+		sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
+		sendInfo.OpenIdArr = openIdArr
+		err = PublicSendTemplateMsg(sendInfo)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 90 - 0
services/wx_template_msg.go

@@ -403,3 +403,93 @@ func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*mod
 	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
 	return
 }
+
+// SendActivitieCancelSignTemplateMsg 取消活动给销售和内容组四人发模版消息
+func SendActivitieCancelSignTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("取消活动给销售和内容组四人发模版消息Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
+		}
+	}()
+	//获取销售手机号
+	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	configCode := utils.TPL_MSG_NEI_RONG_ZU
+	cnf, e := models.GetConfigByCode(configCode)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
+		return
+	}
+	openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
+		return
+	}
+	keyword1 := user.RealName + "--" + user.CompanyName + "(" + sellerItemQy.RealName + ")"
+	keyword2 := user.Mobile
+	keyword3 := time.Now().Format(utils.FormatDateTime)
+	keyword4 := "取消报名" + "【" + activityDetail.ActivityName + "】"
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = user.Mobile
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
+	return
+}
+
+// SendNeiRongZuActivitieSignTemplateMsg 报名活动给销售和内容组四人发模版消息
+func SendNeiRongZuActivitieSignTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("取消活动给销售和内容组四人发模版消息Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
+		}
+	}()
+	//获取销售手机号
+	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	configCode := utils.TPL_MSG_NEI_RONG_ZU
+	cnf, e := models.GetConfigByCode(configCode)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
+		return
+	}
+	openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
+		return err
+	}
+	keyword1 := user.RealName + "--" + user.CompanyName + "(" + sellerItemQy.RealName + ")"
+	keyword2 := user.Mobile
+	keyword3 := time.Now().Format(utils.FormatDateTime)
+	keyword4 := "报名" + "【" + activityDetail.ActivityName + "】"
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = user.Mobile
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
+	return
+}

+ 1 - 0
utils/constants.go

@@ -207,4 +207,5 @@ 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"                     //王芳手机号地址参数
+	TPL_MSG_NEI_RONG_ZU         = "tpl_msg_nei_rong_zu"         //内容组四人
 )