Kaynağa Gözat

查研观向6.4.1

xingzai 2 yıl önce
ebeveyn
işleme
b28135267c

+ 14 - 0
controllers/activity.go

@@ -1214,6 +1214,13 @@ func (this *ActivityCoAntroller) SignupAdd() {
 					return
 				}
 				resp.HaqveJurisdiction = true
+				//1:预约外呼 、2:设置会议提醒 、 3:预约纪要 、4:活动报名
+				if signupType == 1 {
+					go services.ActivityUserRemind(user, activityInfo, 1)
+				} else {
+					go services.ActivityUserRemind(user, activityInfo, 4)
+				}
+
 			}
 		} else {
 			if companyItem.ProductId == 2 {
@@ -1698,6 +1705,8 @@ func (this *ActivityCoAntroller) MeetingReminderAdd() {
 				return
 			}
 			resp.HaqveJurisdiction = true
+			//1:预约外呼 、2:设置会议提醒 、 3:预约纪要 、4:活动报名
+			go services.ActivityUserRemind(user, activityInfo, 2)
 		} else {
 			if companyItem.ProductId == 2 {
 				hasPermission = 2
@@ -4143,6 +4152,8 @@ func (this *ActivityCoAntroller) SpecialSignupAdd() {
 					}
 				}
 			}
+			//用户专项调研操作行为,模板消息推送
+			go services.SpecialActivityUserRemind(user, activityInfo, 1)
 		} else {
 			err = models.DeleteCygxActivitySpecialSignup(user.UserId, activityId)
 			if err != nil {
@@ -4651,6 +4662,9 @@ func (this *ActivityCoAntroller) ActivityAppointmentAdd() {
 				return
 			}
 			resp.HaqveJurisdiction = true
+			//1:预约外呼 、2:设置会议提醒 、 3:预约纪要 、4:活动报名
+			go services.ActivityUserRemind(user, activityInfo, 3)
+
 		} else {
 			if companyItem.ProductId == 2 {
 				hasPermission = 2

+ 18 - 3
controllers/article.go

@@ -190,6 +190,12 @@ func (this *ArticleController) Detail() {
 						go models.AddCygxArticleHistoryRecord(historyRecord)
 					}
 				}
+				//30分钟之内阅读同一篇文章不错二次推送
+				key := "CYGX_ARTICLE_READ" + strconv.Itoa(articleId) + "_" + strconv.Itoa(uid)
+				if !utils.Rc.IsExist(key) {
+					go services.ArticleUserRemind(user, detail, 1)
+					utils.Rc.Put(key, 1, 30*time.Second)
+				}
 			} else { //无该行业权限
 				companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
 				if err == nil && companyDetail.ProductId == 1 {
@@ -370,7 +376,14 @@ func (this *ArticleController) ArticleCollect() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-	count, err := models.GetArticleCollectCount(uid, req.ArticleId)
+	articleId := req.ArticleId
+	detail, err := models.GetArticleDetailById(articleId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取信息失败,Err:" + err.Error()
+		return
+	}
+	count, err := models.GetArticleCollectCount(uid, articleId)
 	if err != nil {
 		br.Msg = "获取数据失败!"
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
@@ -395,8 +408,10 @@ func (this *ArticleController) ArticleCollect() {
 		}
 		br.Msg = "收藏成功"
 		resp.Status = 1
+		// 文章收藏消息发送
+		go services.ArticleUserRemind(user, detail, 2)
 	} else {
-		err = models.RemoveArticleCollect(uid, req.ArticleId)
+		err = models.RemoveArticleCollect(uid, articleId)
 		if err != nil {
 			br.Msg = "取消收藏失败"
 			br.ErrMsg = "取消收藏失败,Err:" + err.Error()
@@ -405,7 +420,7 @@ func (this *ArticleController) ArticleCollect() {
 		br.Msg = "已取消收藏"
 		resp.Status = 2
 	}
-	collectTotal, err := models.GetArticleCollectUsersCount(req.ArticleId)
+	collectTotal, err := models.GetArticleCollectUsersCount(articleId)
 	if err != nil {
 		br.Msg = "获取数据失败"
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()

+ 64 - 0
models/company_interaction_num.go

@@ -0,0 +1,64 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxCompanyInteractionNum struct {
+	Id                  int       `orm:"column(id);pk"`
+	CompanyId           int       `description:"用户ID"`
+	ArticleHistoryNum   int       `description:"文章浏览数量"`
+	ArticleCountNum     int       `description:"文章收藏数量"`
+	ChartCountNum       int       `description:"图表收藏"`
+	IndustryFllowNum    int       `description:"产业关注数量"`
+	DepartmentFollowNum int       `description:"作者关注数量"`
+	KeyWordNum          int       `description:"关键词搜索次数"`
+	ActivityOnLineNum   int       `description:"线上活动报名次数"`
+	ActivityOfficeNum   int       `description:"线下活动报名次数"`
+	ActivityNum         int       `description:"活动报名次数"`
+	CreateTime          time.Time `description:"创建时间"`
+	ModifyTime          time.Time `description:"更新时间"`
+}
+
+//添加
+func AddCygxCompanyInteractionNum(item *CygxCompanyInteractionNum) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+//修改
+func UpdateCygxCompanyInteractionNum(item *CygxCompanyInteractionNum) (err error) {
+	updateParams := make(map[string]interface{})
+	updateParams["CompanyId"] = item.CompanyId
+	updateParams["ArticleHistoryNum"] = item.ArticleHistoryNum
+	updateParams["ArticleCountNum"] = item.ArticleCountNum
+	updateParams["ChartCountNum"] = item.ChartCountNum
+	updateParams["IndustryFllowNum"] = item.IndustryFllowNum
+	updateParams["DepartmentFollowNum"] = item.DepartmentFollowNum
+	updateParams["KeyWordNum"] = item.KeyWordNum
+	updateParams["ActivityOnLineNum"] = item.ActivityOnLineNum
+	updateParams["ActivityOfficeNum"] = item.ActivityOfficeNum
+	updateParams["ActivityNum"] = item.ActivityNum
+	updateParams["CreateTime"] = time.Now()
+	updateParams["ModifyTime"] = time.Now()
+	whereParam := map[string]interface{}{"company_id": item.CompanyId}
+	err = UpdateByExpr(CygxCompanyInteractionNum{}, whereParam, updateParams)
+	return
+}
+
+//获取列表
+func GetCygxCompanyInteractionNumList() (items []*CygxCompanyInteractionNum, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_company_interaction_num   `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//批量添加用户互动信息
+func AddCygxCompanyInteractionNumList(items []*CygxCompanyInteractionNum) (lastId int64, err error) {
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(1, items)
+	return
+}

+ 1 - 0
models/db.go

@@ -108,6 +108,7 @@ func init() {
 		new(UserTemplateRecord),
 		new(CygxUserInteractionNum),
 		new(CygxChartCollectByCygx),
+		new(CygxCompanyInteractionNum),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 9 - 2
models/wx_user.go

@@ -261,6 +261,13 @@ func GetUserCountByName(companyId int, name string) (count int, err error) {
 	return
 }
 
+//判断这个用户是否被设置消息提醒
+func GetUserRemind(uid int) (count int, err error) {
+	sql := `SELECT  COUNT(1) AS count FROM cygx_user_remind WHERE user_id = ? `
+	err = orm.NewOrm().Raw(sql, uid).QueryRow(&count)
+	return
+}
+
 //判断公司下用户名称是否存在
 func GetUserCountByThirdName(companyId int, name string) (count int, err error) {
 	sql := `SELECT  COUNT(1) AS count FROM wx_user WHERE company_id = ? AND tripartite_code = ?`
@@ -296,6 +303,7 @@ func GetUserRegisterList() (items []*WxUser, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
 			u.user_id,
+			u.company_id,
 			u.mobile,
 			u.email,
 			u.real_name,
@@ -317,8 +325,7 @@ func GetUserRegisterList() (items []*WxUser, err error) {
 				a.enabled = 1 
 				AND b.STATUS IN ( '正式', '试用', '冻结' ) 
 				AND cp.product_id = 2 
-			) 
-			AND (u.register_time IS NOT NULL OR u.report_last_view_time <>'')
+			)
 			AND cp.product_id = 2
 		GROUP BY
 			u.user_id `

+ 128 - 0
services/activity.go

@@ -979,3 +979,131 @@ func IsShowAppointment(activityTypeId int, chartPermissionName string) (isShowAp
 	}
 	return
 }
+
+//用户报告操作行为,模板消息推送 (先放在活动模块下,避免代码冲突)
+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)
+		}
+	}()
+	countUser, err := models.GetUserRemind(user.UserId)
+	if err != nil {
+		return err
+	}
+	if countUser == 0 {
+		return err
+	}
+	var sourceMsg string
+	if source == 1 {
+		sourceMsg = "阅读报告"
+	} else {
+		sourceMsg = "收藏报告"
+	}
+
+	//获取销售手机号
+	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return err
+	}
+	if sellerItemQy != nil {
+		openIdList, err := models.GetUserRecordListByMobile(4, sellerItemQy.Mobile)
+		if err != nil {
+			fmt.Println(err)
+			return err
+		}
+		var keyword1 string
+		var keyword2 string
+
+		keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:", sourceMsg)
+		keyword2 = articleDetail.Title
+		SendWxMsgWithArticleUserRemind(keyword1, keyword2, openIdList, articleDetail.ArticleId)
+	}
+	return
+}
+
+//用户活动操作行为,模板消息推送
+func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.ActivityDetail, source int) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("同步策略平台阅读数据失败", 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetCeLueArticlePv ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	countUser, err := models.GetUserRemind(user.UserId)
+	if err != nil {
+		return err
+	}
+	if countUser == 0 {
+		return err
+	}
+	var sourceMsg string
+	if source == 1 {
+		sourceMsg = "预约外呼"
+	} else if source == 2 {
+		sourceMsg = "设置会议提醒"
+	} else if source == 3 {
+		sourceMsg = "预约纪要"
+	} 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 {
+			fmt.Println(err)
+			return err
+		}
+		var keyword1 string
+		var keyword2 string
+		keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:", sourceMsg)
+		keyword2 = activityDetail.ActivityName
+		SendWxMsgWithActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
+	}
+	return
+}
+
+//用户专项调研操作行为,模板消息推送
+func SpecialActivityUserRemind(user *models.WxUserItem, activityDetail *models.CygxActivitySpecialDetail, source int) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("同步策略平台阅读数据失败", 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetCeLueArticlePv ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	countUser, err := models.GetUserRemind(user.UserId)
+	if err != nil {
+		return err
+	}
+	if countUser == 0 {
+		return err
+	}
+	var sourceMsg string
+	if source == 1 {
+		sourceMsg = "预报名调研"
+	}
+	//获取销售手机号
+	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return err
+	}
+	if sellerItemQy != nil {
+		openIdList, err := models.GetUserRecordListByMobile(4, sellerItemQy.Mobile)
+		if err != nil {
+			fmt.Println(err)
+			return err
+		}
+		var keyword1 string
+		var keyword2 string
+		keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, ",有新的互动:", sourceMsg)
+		keyword2 = activityDetail.ResearchTheme
+		SendWxMsgWithSpecialActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
+	}
+	return
+}

+ 0 - 1
services/task.go

@@ -76,7 +76,6 @@ func Task() {
 		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */60 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
 		task.AddTask("getArticleListByApi", getArticleListByApi)
 	}
-
 	//DoCompany()
 	//ActivityAttendanceDetail()
 	//SynchronizationArthistory()//同步原有的阅读记录

+ 105 - 0
services/wx_template_msg.go

@@ -181,6 +181,111 @@ func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 str
 	return
 }
 
+//发送用户阅读报告消息提醒
+func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, articleId int) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
+			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+		}
+	}()
+	accessToken, err := models.GetWxAccessTokenByXzs()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+	var first string
+	first = keyWord1
+	keyword1 := keyWord2
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	templateId := utils.WxMsgTemplateIdArticleUserRemind
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+	sendMap["template_id"] = templateId
+	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
+	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
+	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
+	sendMap["data"] = sendData
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+	return
+}
+
+//发送用户操作活动消息提醒
+func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
+			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+		}
+	}()
+	accessToken, err := models.GetWxAccessTokenByXzs()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+	var first string
+	first = keyWord1
+	keyword1 := keyWord2
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	templateId := utils.WxMsgTemplateIdArticleUserRemind
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+	sendMap["template_id"] = templateId
+	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
+	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
+	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
+	sendMap["data"] = sendData
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+	return
+}
+
+//发送用户操作专项调研活动消息提醒
+func SendWxMsgWithSpecialActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
+			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+		}
+	}()
+	accessToken, err := models.GetWxAccessTokenByXzs()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+	var first string
+	first = keyWord1
+	keyword1 := keyWord2
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	templateId := utils.WxMsgTemplateIdArticleUserRemind
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+	sendMap["template_id"] = templateId
+	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/specialDetail/specialDetail?id=" + strconv.Itoa(activityId)}
+	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
+	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
+	sendMap["data"] = sendData
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
+	return
+}
+
 //活动带问提醒
 func SendActivityAskApplyTemplateMsg(applyName, applyTime, askContent, activityName string, activityId int, itemOpenid *models.OpenIdList) (err error) {
 	var msg string

+ 93 - 3
services/wx_user.go

@@ -102,6 +102,7 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 	}
 
 	//处理 前一天移动之后的用户的公司记录信息
+
 	{
 		updateTime := time.Now().Add(-time.Hour * 25).Format("2006-01-02 15:04:05")
 		listUpdateUser, err := models.GetWxUserOpLogList(updateTime)
@@ -435,6 +436,8 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 		var userIds string
 		var itemsInteraction []*models.CygxUserInteractionNum
 		mapUserInteraction := make(map[int]int)
+		mapCompanyInteraction := make(map[int]int)
+		mapCompanyInteractionItem := make(map[int]*models.CygxCompanyInteractionNum)
 		//获取已经处理记录的用户并记录切片
 		listUserInteractionNum, err := models.GetCygxUserInteractionNumList()
 		if err != nil && err.Error() != utils.ErrNoRow() {
@@ -445,6 +448,15 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 			mapUserInteraction[v.UserId] = v.UserId
 		}
 
+		listCompanyInteractionNum, err := models.GetCygxCompanyInteractionNumList()
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			fmt.Println("GetCygxUserInteractionNumList Err", err)
+			return err
+		}
+		for _, v := range listCompanyInteractionNum {
+			mapCompanyInteraction[v.CompanyId] = v.CompanyId
+		}
+
 		//处理用户互动量数据
 		for kUser, vUser := range listUser {
 			userIds += strconv.Itoa(vUser.UserId) + ","
@@ -482,6 +494,37 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 							itemInteraction.ActivityNum = vsplit.OnLineNum + vsplit.OfficeNum
 							itemInteraction.CreateTime = time.Now()
 							itemInteraction.ModifyTime = time.Now()
+
+							//如果这个切片下的结构体没有值就给他初始值,如果有就跟后面的相加
+							if mapCompanyInteractionItem[vsplit.CompanyId] == nil {
+								itemCompanyInteraction := new(models.CygxCompanyInteractionNum)
+								itemCompanyInteraction.CompanyId = vsplit.CompanyId
+								itemCompanyInteraction.ArticleHistoryNum = vsplit.HistoryNum
+								itemCompanyInteraction.ArticleCountNum = vsplit.CountNum
+								itemCompanyInteraction.ChartCountNum = vsplit.ChartCountNum
+								itemCompanyInteraction.IndustryFllowNum = vsplit.IndustryFllowNum
+								itemCompanyInteraction.DepartmentFollowNum = vsplit.DepartmentFollowNum
+								itemCompanyInteraction.KeyWordNum = vsplit.KeyWordNum
+								itemCompanyInteraction.ActivityOnLineNum = vsplit.OnLineNum
+								itemCompanyInteraction.ActivityOfficeNum = vsplit.OfficeNum
+								itemCompanyInteraction.ActivityNum = vsplit.OnLineNum + vsplit.OfficeNum
+								mapCompanyInteractionItem[vsplit.CompanyId] = itemCompanyInteraction
+								mapCompanyInteractionItem[vsplit.CompanyId].CreateTime = time.Now()
+								mapCompanyInteractionItem[vsplit.CompanyId].ModifyTime = time.Now()
+							} else {
+								fmt.Println("公司ID", vsplit.CompanyId)
+								mapCompanyInteractionItem[vsplit.CompanyId].CompanyId = vsplit.CompanyId
+								mapCompanyInteractionItem[vsplit.CompanyId].ArticleHistoryNum += vsplit.HistoryNum
+								mapCompanyInteractionItem[vsplit.CompanyId].ArticleCountNum += vsplit.CountNum
+								mapCompanyInteractionItem[vsplit.CompanyId].ChartCountNum += vsplit.ChartCountNum
+								mapCompanyInteractionItem[vsplit.CompanyId].IndustryFllowNum += vsplit.IndustryFllowNum
+								mapCompanyInteractionItem[vsplit.CompanyId].DepartmentFollowNum += vsplit.DepartmentFollowNum
+								mapCompanyInteractionItem[vsplit.CompanyId].KeyWordNum += vsplit.KeyWordNum
+								mapCompanyInteractionItem[vsplit.CompanyId].ActivityOnLineNum += vsplit.OnLineNum
+								mapCompanyInteractionItem[vsplit.CompanyId].ActivityOfficeNum += vsplit.OfficeNum
+								mapCompanyInteractionItem[vsplit.CompanyId].ActivityNum += vsplit.OnLineNum + vsplit.OfficeNum
+							}
+
 							//如果存在就修改不存在就新增
 							if mapUserInteraction[int(vsplit.UserId)] == 0 {
 								itemsInteraction = append(itemsInteraction, itemInteraction)
@@ -531,8 +574,36 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 						itemInteraction.ActivityOnLineNum = vsplit.OnLineNum
 						itemInteraction.ActivityOfficeNum = vsplit.OfficeNum
 						itemInteraction.ActivityNum = vsplit.OnLineNum + vsplit.OfficeNum
-						itemInteraction.CreateTime = time.Now()
-						itemInteraction.ModifyTime = time.Now()
+
+						//如果这个切片下的结构体没有值就给他初始值,如果有就跟后面的相加
+						if mapCompanyInteractionItem[vsplit.CompanyId] == nil {
+							itemCompanyInteraction := new(models.CygxCompanyInteractionNum)
+							itemCompanyInteraction.CompanyId = vsplit.CompanyId
+							itemCompanyInteraction.ArticleHistoryNum = vsplit.HistoryNum
+							itemCompanyInteraction.ArticleCountNum = vsplit.CountNum
+							itemCompanyInteraction.ChartCountNum = vsplit.ChartCountNum
+							itemCompanyInteraction.IndustryFllowNum = vsplit.IndustryFllowNum
+							itemCompanyInteraction.DepartmentFollowNum = vsplit.DepartmentFollowNum
+							itemCompanyInteraction.KeyWordNum = vsplit.KeyWordNum
+							itemCompanyInteraction.ActivityOnLineNum = vsplit.OnLineNum
+							itemCompanyInteraction.ActivityOfficeNum = vsplit.OfficeNum
+							itemCompanyInteraction.ActivityNum = vsplit.OnLineNum + vsplit.OfficeNum
+							mapCompanyInteractionItem[vsplit.CompanyId] = itemCompanyInteraction
+							mapCompanyInteractionItem[vsplit.CompanyId].CreateTime = time.Now()
+							mapCompanyInteractionItem[vsplit.CompanyId].ModifyTime = time.Now()
+						} else {
+							mapCompanyInteractionItem[vsplit.CompanyId].CompanyId = vsplit.CompanyId
+							mapCompanyInteractionItem[vsplit.CompanyId].ArticleHistoryNum += vsplit.HistoryNum
+							mapCompanyInteractionItem[vsplit.CompanyId].ArticleCountNum += vsplit.CountNum
+							mapCompanyInteractionItem[vsplit.CompanyId].ChartCountNum += vsplit.ChartCountNum
+							mapCompanyInteractionItem[vsplit.CompanyId].IndustryFllowNum += vsplit.IndustryFllowNum
+							mapCompanyInteractionItem[vsplit.CompanyId].DepartmentFollowNum += vsplit.DepartmentFollowNum
+							mapCompanyInteractionItem[vsplit.CompanyId].KeyWordNum += vsplit.KeyWordNum
+							mapCompanyInteractionItem[vsplit.CompanyId].ActivityOnLineNum += vsplit.OnLineNum
+							mapCompanyInteractionItem[vsplit.CompanyId].ActivityOfficeNum += vsplit.OfficeNum
+							mapCompanyInteractionItem[vsplit.CompanyId].ActivityNum += vsplit.OnLineNum + vsplit.OfficeNum
+						}
+
 						//如果存在就修改不存在就新增
 						if mapUserInteraction[int(vsplit.UserId)] == 0 {
 							itemsInteraction = append(itemsInteraction, itemInteraction)
@@ -559,7 +630,26 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 		if len(itemsInteraction) > 0 {
 			_, err = models.AddCygxUserInteractionNumList(itemsInteraction)
 			if err != nil {
-				fmt.Println(" RemoveChartCollectByMobile Err", err)
+				fmt.Println(" AddCygxUserInteractionNumList Err", err)
+			}
+		}
+
+		// 批量添加用户互动量信息
+		if len(mapCompanyInteractionItem) > 0 {
+			fmt.Println("添加机构互动信息")
+			for _, v := range mapCompanyInteractionItem {
+				fmt.Println(v.CompanyId)
+				if mapCompanyInteraction[v.CompanyId] > 0 {
+					err = models.UpdateCygxCompanyInteractionNum(v)
+					if err != nil {
+						fmt.Println(" UpdateCygxCompanyInteractionNum Err", err)
+					}
+				} else {
+					_, err = models.AddCygxCompanyInteractionNum(v)
+					if err != nil {
+						fmt.Println(" AddCygxCompanyInteractionNum Err", err)
+					}
+				}
 			}
 		}
 	}

+ 18 - 13
utils/config.go

@@ -27,19 +27,21 @@ 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 -
-	TemplateIdByProductXzs          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 -
+	TemplateIdByProductXzs              string //产品运行报告通知-模板ID(小助手)
+	WxMsgTemplateIdArticleUserRemind    string //用户阅读报告通知-模板ID
+	WxMsgTemplateIdArticleUserRemindXzs string //用户阅读报告通知-模板ID(小助手)
 )
 
 //微信公众号配置信息
@@ -142,6 +144,7 @@ func init() {
 		EmailExpert = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com"                         //研选行业专家邮箱
 		EmaiWhiteUserList = "tshen@hzinsights.com;cxzhang@hzinsights.com;yyli@hzinsights.com"                                            //白名单邮箱
 		WxMsgTemplateIdAskMsg = "PaoDanHGlt1kFw5q-4_ipJSwO3FyZpxSSNg4rwB7YCk"
+		WxMsgTemplateIdArticleUserRemind = "CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM"
 		WxMsgTemplateIdAskMsgMobile = ""
 		ActSendMsgMobile = "15618524605"
 		ArticleTaskClassMobile = "15557270714,18767183922,15216736473,15000123056,18701809782,17706316791,18652179672"
@@ -157,6 +160,8 @@ func init() {
 		WxMsgTemplateIdActivityApply = "Y59n_AHg-RLCKaz293geW76KDHpGL1qOnE7eF_lxelY"
 
 		WxMsgTemplateIdActivityChange = "qfNuops-CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM"
+		WxMsgTemplateIdArticleUserRemind = "CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM"
+
 		WxPublicAppId = "wx9b5d7291e581233a"
 		WxPublicAppSecret = "f4d52e34021eee262dce9682b31f8861"
 		WxPublicId = "gh_5dc508325c6f"