Browse Source

no message

xingzai 6 months ago
parent
commit
7c34a841c0

+ 40 - 0
models/company/company_product.go

@@ -1,7 +1,9 @@
 package company
 
 import (
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
 	"time"
 )
 
@@ -116,3 +118,41 @@ func GetCompanyProductAndCompanyListByCondition(condition string, pars []interfa
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// 获取权益客户下的正式、试用、永续客户。
+func GetRaiCompanyProductCompanyids() (items []*CompanyProduct, err error) {
+	sql := ` SELECT  company_id  FROM  company_product WHERE  product_id = 2 AND status IN  ('正式','试用','永续') AND  company_id > 1  `
+	o := orm.NewOrmUsingDB("weekly_report")
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+// 更新权益客户下近四周之内是否包含决策人(是否有KP互动过)
+func UpdateRaiCompanyProductIsUserMakerByCompanyids(companyIds []int) (err error) {
+	lenArr := len(companyIds)
+	if lenArr == 0 {
+		return
+	}
+	o, err := orm.NewOrmUsingDB("weekly_report").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	sql := `UPDATE company_product SET is_user_maker = 0 WHERE is_user_maker=1 AND product_id=2  `
+	_, err = o.Raw(sql).Exec()
+	if err != nil {
+		return
+	}
+
+	sql = `UPDATE company_product SET is_user_maker = 1 WHERE  product_id=2   AND status IN  ('正式','试用','永续') AND  company_id > 1   AND  company_id IN (` + utils.GetOrmInReplace(lenArr) + `) `
+	_, err = o.Raw(sql, companyIds).Exec()
+
+	return
+}

+ 4 - 3
models/db.go

@@ -217,8 +217,9 @@ func initOrder() {
 // 权益服务记录模块
 func initRaiServe() {
 	orm.RegisterModel(
-		new(rai_serve.CygxRaiServeBill),     //服务明细表
-		new(rai_serve.CygxRaiServeCompany),  //当前所属权益服务公司表
-		new(rai_serve.CygxRaiServeWeekBill), //当前所属权益服务公司周度统计表
+		new(rai_serve.CygxRaiServeBill),       //服务明细表
+		new(rai_serve.CygxRaiServeCompany),    //当前所属权益服务公司表
+		new(rai_serve.CygxRaiServeWeekBill),   //当前所属权益服务公司周度统计表
+		new(rai_serve.CygxRaiCompanyUserBill), //权益正式,试用客户近四周互动记录统计表
 	)
 }

+ 68 - 0
models/rai_serve/rai_company_user_bill.go

@@ -0,0 +1,68 @@
+package rai_serve
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// 权益服务明细表
+type CygxRaiCompanyUserBill struct {
+	BillId              int       `orm:"column(bill_id);pk" description:"服务明细主键ID"`
+	Content             string    `comment:"服务内容说明"`
+	ServeTypeId         int       `comment:"服务类型ID"`
+	ServeTypeName       string    `comment:"服务类型"`
+	UserId              int       `comment:"用户ID"`
+	Mobile              string    `comment:"手机号"`
+	Email               string    `comment:"邮箱"`
+	CompanyId           int       `comment:"公司ID"`
+	CompanyName         string    `comment:"公司名称"`
+	RealName            string    `comment:"用户实际名称"`
+	RegisterPlatform    int       `comment:"来源 1小程序,2:网页"`
+	ServeCount          float64   `comment:"服务量小计"`
+	IsKp                int       `comment:"是否是KP,1:是、0:否"`
+	SourceId            int       `comment:"来源ID"`
+	Source              string    `comment:"来源 "`
+	WeekStartDate       string    `comment:"周一开始日期"`
+	WeekEndDate         string    `comment:"周日结束日期"`
+	ChartPermissionId   int       `description:"行业id"`
+	ChartPermissionName string    `description:"行业名称"`
+	CreateTime          time.Time `comment:"创建时间"`
+	ViewTime            string    `comment:"浏览时间"`
+}
+
+// 列表
+func GetCygxRaiCompanyUserBillListAll(condition string, pars []interface{}) (items []*CygxRaiCompanyUserBill, err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_rai_company_user_bill   WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// AddCygxRaiCompanyUserBilllMulti 批量添加
+func AddCygxRaiCompanyUserBilllMulti(items []*CygxRaiCompanyUserBill) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	if len(items) > 0 {
+		//批量添加流水信息
+		_, err = o.InsertMulti(len(items), items)
+	}
+	return
+}

+ 630 - 0
services/rai_company_user_bill.go

@@ -0,0 +1,630 @@
+package services
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/models/company"
+	"hongze/hongze_cygx/models/rai_serve"
+	"hongze/hongze_cygx/models/roadshow"
+	"hongze/hongze_cygx/utils"
+	"strings"
+	"time"
+)
+
+//func init() {
+//	UpdateCompanyProductIsUserMaker()
+//}
+
+// 权益正式,试用客户近四周互动记录
+func UpdateCygxRaiCompanyUserBillDate(cont context.Context) (err error) {
+	//func UpdateCygxRaiCompanyUserBillDate() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("定时任务处理权权益正式,试用客户近四周互动记录 失败 UpdateCygxRaiCompanyUserBillDate  ,err:", err.Error()), 2)
+		}
+	}()
+
+	err = UpdateCygxRaiCompanyUserBill() // 处理共享机构信息
+	if err != nil {
+		return
+	}
+
+	err = UpdateCompanyProductIsUserMaker() // 处理个人流水记录
+	if err != nil {
+		return
+	}
+
+	return
+}
+
+// 批量更新权益正式,试用客户近四周互动记录
+func UpdateCygxRaiCompanyUserBill() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("批量更新权益正式,试用客户近四周互动记录  失败: UpdateCygxRaiCompanyUserBill Err"+err.Error(), 2)
+		}
+	}()
+	var delBillIds []int
+	var startWeekDate = time.Now().AddDate(0, 0, -28).Format(utils.FormatDate) + " 23:59:59"
+	fmt.Println("UpdateCygxRaiCompanyUserBill start")
+	companyList, e := company.GetRaiCompanyProductCompanyids()
+	if e != nil {
+		err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
+		return
+	}
+	var companyIds []int
+	var items []*rai_serve.CygxRaiCompanyUserBill
+	for _, v := range companyList {
+		companyIds = append(companyIds, v.CompanyId)
+	}
+
+	lencompanyId := len(companyIds)
+
+	listisMakeruser, e := models.GetWxUserisMakerByCompanyIds(companyIds)
+	if e != nil {
+		err = errors.New("GetWxUserisMakerByCompanyIds, Err: " + e.Error())
+		return
+	}
+	mapUserMaker := make(map[int]bool)
+	mapUserMobileUserId := make(map[string]int)
+	for _, v := range listisMakeruser {
+		mapUserMaker[v.UserId] = true
+		mapUserMobileUserId[v.Mobile] = v.UserId
+	}
+
+	var condition string
+	var pars []interface{}
+
+	condition = " AND  company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND create_time > ?  "
+	pars = append(pars, companyIds, startWeekDate)
+
+	fmt.Println("startWeekDate", startWeekDate)
+	//研选专栏阅读记录内容
+	{
+		listYanxuanSpecialRecord, e := models.GetCygxYanxuanSpecialRecordRespListAll(condition+"  GROUP BY user_id, yanxuan_special_id  ORDER BY create_time ASC ", pars)
+		if e != nil {
+			err = errors.New("GetCygxYanxuanSpecialRecordRespListAll, Err: " + e.Error())
+			return
+		}
+
+		var yanxuanspecialIds []int
+		for _, v := range listYanxuanSpecialRecord {
+			yanxuanspecialIds = append(yanxuanspecialIds, v.YanxuanSpecialId)
+		}
+
+		var conditionYanxuanSpecial string
+		var parsYanxuanSpecial []interface{}
+		conditionYanxuanSpecial += `  AND  id  IN (` + utils.GetOrmInReplace(len(yanxuanspecialIds)) + `) `
+		parsYanxuanSpecial = append(parsYanxuanSpecial, yanxuanspecialIds)
+		listYanxuanSpecial, e := models.GetYanxuanSpecialListBycondition(conditionYanxuanSpecial, parsYanxuanSpecial, 0, len(yanxuanspecialIds))
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetYanxuanSpecialListBycondition, Err: " + e.Error())
+			return
+		}
+		mapYanxuanSpecialTitle := make(map[int]string)
+
+		for _, v := range listYanxuanSpecial {
+			mapYanxuanSpecialTitle[v.Id] = v.Title
+		}
+
+		//研选阅读明细
+		var conditionBill string
+		var parsBill []interface{}
+		conditionBill = " AND source = 'yanxuanspecial' AND   company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND view_time > ?  "
+		parsBill = append(parsBill, companyIds, startWeekDate)
+		listBillByYanxuanspecial, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
+		if e != nil {
+			err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
+			return
+		}
+
+		mapYanxuanspecialBill := make(map[string]bool)
+		for _, v := range listBillByYanxuanspecial {
+			mapYanxuanspecialBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
+		}
+
+		for _, v := range listYanxuanSpecialRecord {
+			if mapYanxuanspecialBill[fmt.Sprint("UID_", v.UserId, "SID_", v.YanxuanSpecialId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiCompanyUserBill)
+			item.Content = mapYanxuanSpecialTitle[v.YanxuanSpecialId]
+			item.ServeTypeId = 5
+			item.ServeTypeName = "阅读uv"
+			item.UserId = v.UserId
+			item.Mobile = v.Mobile
+			item.Email = v.Email
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.RealName = v.RealName
+			item.RegisterPlatform = v.RegisterPlatform
+			item.ServeCount = 0.5
+
+			if mapUserMaker[v.UserId] {
+				item.IsKp = 1
+				item.ServeCount = item.ServeCount * 3
+			}
+			item.SourceId = v.YanxuanSpecialId
+			item.Source = utils.CYGX_OBJ_YANXUANSPECIAL
+			item.CreateTime = time.Now()
+			item.ViewTime = v.CreateTime
+			item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
+			items = append(items, item)
+		}
+	}
+	//研选专栏阅读记录内容end
+
+	//文章阅读记录内容
+	{
+		listArticleRecord, e := models.GetCygxArticleHistoryRecordAllListNoLimit(condition+"  GROUP BY user_id, article_id  ORDER BY create_time ASC ", pars)
+		if e != nil {
+			err = errors.New("GetCygxArticleHistoryRecordAllListNoLimit, Err: " + e.Error())
+			return
+		}
+		//文章阅读明细
+		var conditionBill string
+		var parsBill []interface{}
+		conditionBill = " AND source = 'article' AND   company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND view_time > ?  "
+		parsBill = append(parsBill, companyIds, startWeekDate)
+		listBillByArticle, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
+		if e != nil {
+			err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
+			return
+		}
+
+		mapArticleBill := make(map[string]bool)
+		for _, v := range listBillByArticle {
+			mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
+		}
+
+		//部分数据来源没有存用户姓名,重新查一下
+		var userIds []int
+		for _, v := range listArticleRecord {
+			userIds = append(userIds, v.UserId)
+		}
+		ListUser, e := models.GetWxUserListByUserIdsArr(userIds)
+		if e != nil {
+			err = errors.New("GetWxUserListByUserIdsArr, Err: " + e.Error())
+			return
+		}
+		mapUserName := make(map[int]string)
+		for _, v := range ListUser {
+			mapUserName[v.UserId] = v.RealName
+		}
+
+		for _, v := range listArticleRecord {
+			if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ArticleId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiCompanyUserBill)
+			item.Content = v.Title
+			item.ServeTypeId = 5
+			item.ServeTypeName = "阅读uv"
+			item.UserId = v.UserId
+			item.Mobile = v.Mobile
+			item.Email = v.Email
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.RealName = mapUserName[v.UserId]
+			item.RegisterPlatform = v.RegisterPlatform
+			item.ServeCount = 0.5
+
+			if mapUserMaker[v.UserId] {
+				item.IsKp = 1
+				item.ServeCount = item.ServeCount * 3
+			}
+			item.SourceId = v.ArticleId
+			item.Source = utils.CYGX_OBJ_ARTICLE
+			item.CreateTime = time.Now()
+			item.ViewTime = v.CreateTime
+			item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
+
+			if strings.Contains(v.CategoryName, "固收") {
+				item.ChartPermissionName = utils.GU_SHOU_NAME
+				item.ChartPermissionId = utils.GU_SHOU_ID_CHART
+			}
+			if strings.Contains(v.CategoryName, "策略") {
+				item.ChartPermissionName = utils.CE_LUE_NAME
+				item.ChartPermissionId = utils.CE_LUE_ID
+			}
+			items = append(items, item)
+		}
+	}
+	//文章阅读记录内容 end
+
+	//活动记录内容
+	{
+		condition = " AND  art.company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND a.activity_time > ?  "
+		signUpDetailList, e := models.GetSignupDetailBySignupjoinactivity(condition+"  ORDER BY a.activity_time ASC ", pars)
+		if e != nil {
+			err = errors.New("GetSignupDetailBySignupjoinactivity, Err: " + e.Error())
+			return
+		}
+
+		//文章阅读明细
+		var conditionBill string
+		var parsBill []interface{}
+		conditionBill = " AND source = 'activity' AND   company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND view_time > ?  "
+		parsBill = append(parsBill, companyIds, startWeekDate)
+		listBillByActivity, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
+		if e != nil {
+			err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
+			return
+		}
+
+		mapActivityeBill := make(map[string]bool)
+		for _, v := range listBillByActivity {
+			mapActivityeBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
+		}
+
+		mapArticleBillDel := make(map[string]bool)
+		for _, v := range signUpDetailList {
+			mapArticleBillDel[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] = true
+		}
+
+		mapDelActivityBillDel := make(map[string]bool)
+		for _, v := range signUpDetailList {
+			mapDelActivityBillDel[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] = true
+		}
+		for _, v := range listBillByActivity {
+			if !mapDelActivityBillDel[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] { // 如果内容存在就插入删除ID中
+				delBillIds = append(delBillIds, v.BillId)
+			}
+		}
+
+		for _, v := range signUpDetailList {
+			if mapActivityeBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiCompanyUserBill)
+			item.Content = v.ActivityName
+			if v.ActivityType == 1 {
+				item.ServeTypeId = 1
+				item.ServeTypeName = "线上活动"
+			} else {
+				item.ServeTypeId = 2
+				item.ServeTypeName = "线下活动"
+			}
+			if v.UserId == 0 && v.Mobile != "" {
+				v.UserId = mapUserMobileUserId[v.Mobile] // 空降的部分联系人 userid 为0这里做一下修复
+			}
+
+			item.UserId = v.UserId
+			item.Mobile = v.Mobile
+			item.Email = v.Email
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.RealName = v.RealName
+			//item.RegisterPlatform = v.RegisterPlatform
+			item.ServeCount = 1
+			if mapUserMaker[v.UserId] {
+				item.IsKp = 1
+				item.ServeCount = item.ServeCount * 3
+			}
+			item.SourceId = v.ActivityId
+			item.Source = utils.CYGX_OBJ_ACTIVITY
+			item.CreateTime = time.Now()
+			item.ViewTime = v.ActivityTime
+			item.ChartPermissionName = v.ChartPermissionName
+			item.ChartPermissionId = v.ChartPermissionId
+			item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
+			items = append(items, item)
+		}
+	}
+	//活动记录内容 end
+
+	//专项调研活动记录内容
+	{
+		condition = " AND  art.company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND a.activity_time > ?  "
+		activitySpecialList, e := models.GetCygxActivitySpecialMeetingDetailList(condition+"  ORDER BY a.activity_time ASC ", pars)
+		if e != nil {
+			err = errors.New("GetCygxActivitySpecialMeetingDetailList, Err: " + e.Error())
+			return
+		}
+
+		//专项调研活动明细
+		var conditionBill string
+		var parsBill []interface{}
+		conditionBill = " AND source = 'activityspecial' AND   company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND view_time > ?  "
+		parsBill = append(parsBill, companyIds, startWeekDate)
+		listBillByActivitySpecial, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
+		if e != nil {
+			err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
+			return
+		}
+
+		mapActivitySpecial := make(map[string]bool)
+		for _, v := range listBillByActivitySpecial {
+			mapActivitySpecial[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
+		}
+
+		mapDelActivitySpecial := make(map[string]bool)
+		for _, v := range activitySpecialList {
+			mapDelActivitySpecial[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] = true
+		}
+		for _, v := range listBillByActivitySpecial {
+			if !mapDelActivitySpecial[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] { // 如果内容存在就插入删除ID中
+				delBillIds = append(delBillIds, v.BillId)
+			}
+		}
+
+		for _, v := range activitySpecialList {
+			if mapActivitySpecial[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiCompanyUserBill)
+			item.Content = v.ResearchTheme
+			item.ServeTypeId = 3
+			item.ServeTypeName = "专项调研"
+			item.UserId = v.UserId
+			item.Mobile = v.Mobile
+			item.Email = v.Email
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.RealName = v.RealName
+			//item.RegisterPlatform = v.RegisterPlatform
+			item.ServeCount = 1
+			if mapUserMaker[v.UserId] {
+				item.IsKp = 1
+				item.ServeCount = item.ServeCount * 3
+			}
+			item.SourceId = v.ActivityId
+			item.Source = utils.CYGX_OBJ_ACTIVITYSPECIAL
+			item.CreateTime = time.Now()
+			item.ViewTime = v.ActivityTime
+			item.ChartPermissionName = v.ChartPermissionName
+			item.ChartPermissionId = v.ChartPermissionId
+			item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
+			items = append(items, item)
+		}
+	}
+	//专项调研活动记录内容 end
+
+	//1v1路演
+	{
+		condition = " AND  art.company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND rs.start_date > ?  "
+		calendarMeetingUserList, e := roadshow.GetRsCalendarMeetingUserList(condition+"  ORDER BY rs.start_date ASC ", pars)
+		if e != nil {
+			err = errors.New("GetRsCalendarMeetingUserList, Err: " + e.Error())
+			return
+		}
+		var rsCalendarIds []int
+		for _, v := range calendarMeetingUserList {
+			rsCalendarIds = append(rsCalendarIds, v.RsCalendarId)
+		}
+
+		//获取研究员信息
+		researchers, e := roadshow.GetRsCalendarResearcherListByIds(rsCalendarIds)
+		if e != nil {
+			err = errors.New("GetRsCalendarResearcherListByIds, Err: " + e.Error())
+			return
+		}
+		mapResearcherName := make(map[int][]string)
+		for _, v := range researchers {
+			mapResearcherName[v.RsCalendarId] = append(mapResearcherName[v.RsCalendarId], v.ResearcherName)
+		}
+
+		listEmail, e := models.GetAskEmail()
+		if e != nil {
+			err = errors.New("GetAskEmail, Err: " + e.Error())
+			return
+		}
+
+		var ceLueResearcherName []string
+		var guShouResearcherName []string
+
+		for _, v := range listEmail {
+			if v.ChartPermissionName == utils.CE_LUE_NAME {
+				ceLueResearcherName = append(ceLueResearcherName, v.Name)
+			}
+			if v.ChartPermissionName == utils.GU_SHOU_NAME {
+				guShouResearcherName = append(guShouResearcherName, v.Name)
+			}
+		}
+
+		//专项调研活动明细
+		var conditionBill string
+		var parsBill []interface{}
+		conditionBill = " AND source = 'rscalendar' AND   company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND view_time > ?  "
+		parsBill = append(parsBill, companyIds, startWeekDate)
+		listBillByRscalendar, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
+		if e != nil {
+			err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
+			return
+		}
+
+		mapRscalendarBill := make(map[string]bool)
+		for _, v := range listBillByRscalendar {
+			mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
+		}
+
+		mapDelRscalendarBill := make(map[string]bool)
+		for _, v := range calendarMeetingUserList {
+			mapDelRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RsCalendarId)] = true
+		}
+		for _, v := range listBillByRscalendar {
+			if !mapDelRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] { // 如果内容存在就插入删除ID中
+				delBillIds = append(delBillIds, v.BillId)
+			}
+		}
+
+		for _, v := range calendarMeetingUserList {
+			if mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RsCalendarId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiCompanyUserBill)
+			item.Content = strings.Join(mapResearcherName[v.RsCalendarId], ",")
+			item.ServeTypeId = 4
+			item.ServeTypeName = "一对一路演"
+			item.UserId = v.UserId
+			item.Mobile = v.Mobile
+			item.Email = v.Email
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.RealName = v.RealName
+			//item.RegisterPlatform = v.RegisterPlatform
+			item.ServeCount = 1.5
+			if mapUserMaker[v.UserId] {
+				item.IsKp = 1
+				item.ServeCount = item.ServeCount * 3
+			}
+			item.SourceId = v.RsCalendarId
+			item.Source = utils.CYGX_OBJ_RS_CALENDAR
+			item.CreateTime = time.Now()
+			item.ViewTime = v.StartDate + " " + v.StartTime
+			item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
+
+			if utils.InArrayByStr(guShouResearcherName, item.Content) {
+				item.ChartPermissionName = utils.GU_SHOU_NAME
+				item.ChartPermissionId = utils.GU_SHOU_ID_CHART
+			}
+			if utils.InArrayByStr(ceLueResearcherName, item.Content) {
+				item.ChartPermissionName = utils.CE_LUE_NAME
+				item.ChartPermissionId = utils.CE_LUE_ID
+			}
+			items = append(items, item)
+		}
+	}
+	//1v1路演 end
+
+	//交流反馈
+	{
+		condition = " AND  company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND create_time > ?  "
+		userFeedbackList, e := rai_serve.GetCygxUserFeedbackList(condition+"  ORDER BY  user_feedback_id ASC ", pars)
+		if e != nil {
+			err = errors.New("GetCygxUserFeedbackList, Err: " + e.Error())
+			return
+		}
+
+		//交流反馈明细
+		var conditionBill string
+		var parsBill []interface{}
+		conditionBill = " AND source = 'userfeedback' AND   company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND view_time > ?  "
+		parsBill = append(parsBill, companyIds, startWeekDate)
+		listBillByuserFeedback, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
+		if e != nil {
+			err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
+			return
+		}
+
+		mapRscalendarBill := make(map[string]bool)
+		for _, v := range listBillByuserFeedback {
+			mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
+		}
+
+		mapDelRscalendarBill := make(map[string]bool)
+		for _, v := range userFeedbackList {
+			mapDelRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.UserFeedbackId)] = true
+		}
+		for _, v := range listBillByuserFeedback {
+			if !mapDelRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] { // 如果内容存在就插入删除ID中
+				delBillIds = append(delBillIds, v.BillId)
+			}
+		}
+
+		for _, v := range userFeedbackList {
+			if mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.UserFeedbackId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiCompanyUserBill)
+			item.Content = v.Content
+			item.ServeTypeId = 6
+			item.ServeTypeName = "交流反馈"
+			item.UserId = v.UserId
+			item.Mobile = v.Mobile
+			item.Email = v.Email
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.RealName = v.RealName
+			item.ServeCount = 1
+			if mapUserMaker[v.UserId] {
+				item.IsKp = 1
+				item.ServeCount = item.ServeCount * 3
+			}
+			item.SourceId = v.UserFeedbackId
+			item.Source = utils.CYGX_OBJ_USER_FEEDBACK
+			item.CreateTime = time.Now()
+			item.ViewTime = v.CreateTime
+			item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
+			items = append(items, item)
+		}
+	}
+	//交流反馈 end
+	//fmt.Println("items", len(items))
+	//return
+	if len(items) > 0 {
+		var itemsAdd []*rai_serve.CygxRaiCompanyUserBill
+		for k, v := range items {
+			itemsAdd = append(itemsAdd, v)
+			if len(itemsAdd)%2000 == 0 {
+				fmt.Println(k)
+				e = rai_serve.AddCygxRaiCompanyUserBilllMulti(itemsAdd)
+				if e != nil {
+					err = errors.New("AddCygxRaiServeBillMulti, Err: " + e.Error())
+					return
+				}
+				itemsAdd = make([]*rai_serve.CygxRaiCompanyUserBill, 0)
+			}
+		}
+		e = rai_serve.AddCygxRaiCompanyUserBilllMulti(itemsAdd)
+		if e != nil {
+			err = errors.New("AddCygxRaiCompanyUserBilllMulti, Err: " + e.Error())
+			return
+		}
+	}
+
+	fmt.Println("delBillIds", (delBillIds))
+	fmt.Println("UpdateCygxRaiCompanyUserBill end")
+	return
+}
+
+// 更新权益客户最近四周是否有决策人互动记录
+func UpdateCompanyProductIsUserMaker() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("更新权益客户最近四周是否有决策人互动记录 失败: UpdateCompanyProductIsUserMaker Err"+err.Error(), 2)
+		}
+	}()
+	fmt.Println(" UpdateCompanyProductIsUserMaker  start")
+	now := time.Now()
+	weeks := 3
+	monday := now.AddDate(0, 0, -int(now.Weekday()-time.Monday)-weeks*7)
+
+	startDate := monday.Format(utils.FormatDate)
+
+	var condition string
+	var pars []interface{}
+
+	condition = ` AND week_start_date >= ?  AND is_kp = 1  GROUP BY company_id `
+	pars = append(pars, startDate)
+
+	//获取近四周之内含有KP的公司
+	listKpCompanyId, e := rai_serve.GetCygxRaiCompanyUserBillListAll(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
+		return
+	}
+
+	var companyIds []int
+	for _, v := range listKpCompanyId {
+		companyIds = append(companyIds, v.CompanyId)
+	}
+
+	if len(companyIds) == 0 {
+		return
+	}
+	fmt.Println(len(companyIds))
+
+	e = company.UpdateRaiCompanyProductIsUserMakerByCompanyids(companyIds)
+	if e != nil {
+		err = errors.New("UpdateRaiCompanyProductIsUserMakerByCompanyids, Err: " + e.Error())
+		return
+	}
+	fmt.Println(" UpdateCompanyProductIsUserMaker  end")
+	return
+}