Browse Source

no message

xingzai 7 months ago
parent
commit
7df9867c17

+ 41 - 0
models/activity_signup_detail.go

@@ -67,6 +67,47 @@ func GetSignupDetailBySignup(condition string, pars []interface{}) (list []*Cygx
 	return
 }
 
+type CygxActivitySignupDetailServreBill struct {
+	Id           int    `orm:"column(id);pk"`
+	ActivityId   int    `description:"活动ID"`
+	ActivityName string `description:"活动名称"`
+	UserId       int    `description:"用户ID"`
+	RealName     string `description:"用户实际名称"`
+	Mobile       string `description:"手机号"`
+	Email        string `description:"邮箱"`
+	CompanyId    int    `description:"公司id"`
+	CompanyName  string `description:"公司名称"`
+	ActivityTime string `description:"活动时间"`
+	ActivityType int    `description:"1线上,其余线下"`
+}
+
+// 获取今天报名的用户信息,存入到参会记录表中
+func GetSignupDetailBySignupjoinactivity(condition string, pars []interface{}) (list []*CygxActivitySignupDetailServreBill, err error) {
+	sql := `SELECT
+			art.activity_id,
+			art.user_id,
+			art.real_name,
+			art.mobile,
+			art.email,
+			art.company_id,
+			art.company_name,
+			art.register_platform,
+			a.activity_time,
+			a.activity_name,
+			t.activity_type 
+		FROM
+			cygx_activity_signup AS art
+			INNER JOIN cygx_activity AS a ON a.activity_id = art.activity_id
+			INNER JOIN cygx_activity_type AS t ON t.activity_type_id = a.activity_type_id 
+		WHERE
+			1 = 1  `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	return
+}
+
 // 获取参会记录表列表
 func GetSignupDetailList(condition string, pars []interface{}) (list []*CygxActivitySignupDetail, err error) {
 	sql := `SELECT * FROM cygx_activity_signup_detail  WHERE  1= 1 `

+ 26 - 0
models/activity_special_trip.go

@@ -30,6 +30,7 @@ type CygxActivitySpecialTripResp struct {
 	Id             int    `description:"ID"`
 	UserId         int    `description:"用户id"`
 	ActivityId     int    `description:"活动ID"`
+	ActivityTime   string `description:"活动时间"`
 	CreateTime     string `description:"创建时间"`
 	Mobile         string `description:"手机号"`
 	Email          string `description:"邮箱号"`
@@ -39,6 +40,7 @@ type CygxActivitySpecialTripResp struct {
 	SellerName     string `description:"所属销售"`
 	OutboundMobile string `description:"外呼手机号"`
 	CountryCode    string `description:"手机国家区号"`
+	ResearchTheme  string `description:"调研主题"`
 }
 
 func GetCygxActivitySpecialTripList(condition string, pars []interface{}) (item []*CygxActivitySpecialTripResp, err error) {
@@ -193,3 +195,27 @@ WHERE
 	_, err = o.Raw(sql, pars).QueryRows(&item)
 	return
 }
+
+// 获取今天报名的用户信息,存入到参会记录表中
+func GetCygxActivitySpecialMeetingDetailList(condition string, pars []interface{}) (list []*CygxActivitySpecialTripResp, err error) {
+	sql := `SELECT
+			art.activity_id,
+			art.user_id,
+			art.real_name,
+			art.mobile,
+			art.email,
+			art.company_id,
+			art.company_name,
+			a.activity_time,
+			a.research_theme
+		FROM
+			cygx_activity_special_meeting_detail AS art
+			INNER JOIN cygx_activity_special AS a ON a.activity_id = art.activity_id
+		WHERE
+			1 = 1  `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	return
+}

+ 29 - 17
models/article_history_record_all.go

@@ -6,23 +6,24 @@ import (
 )
 
 type CygxArticleHistoryRecordAll struct {
-	Id             int `orm:"column(id);pk"`
-	ArticleId      int
-	UserId         int
-	CreateTime     string
-	ModifyTime     time.Time
-	Mobile         string    `description:"手机号"`
-	Email          string    `description:"邮箱"`
-	CompanyId      int       `description:"公司id"`
-	CompanyName    string    `description:"公司名称"`
-	StopTime       int       `description:"停留时间"`
-	OutType        int       `description:"退出方式,1正常退出,2强制关闭"`
-	Source         string    `description:"来源,MOBILE:手机端,PC:电脑端"`
-	RealName       string    `description:"用户实际名称"`
-	CreateDateApi  time.Time `description:"同步创建时间"`
-	CelueHistoryId int       `description:"策略平台记录的ID"`
-	Platfor        int       `description:"PV阅读记录来源,1:查研观向,2:策略平台"`
-	IsDel          int       `description:"是否删除"`
+	Id               int `orm:"column(id);pk"`
+	ArticleId        int
+	UserId           int
+	CreateTime       string
+	ModifyTime       time.Time
+	Mobile           string    `description:"手机号"`
+	Email            string    `description:"邮箱"`
+	CompanyId        int       `description:"公司id"`
+	CompanyName      string    `description:"公司名称"`
+	StopTime         int       `description:"停留时间"`
+	OutType          int       `description:"退出方式,1正常退出,2强制关闭"`
+	Source           string    `description:"来源,MOBILE:手机端,PC:电脑端"`
+	RealName         string    `description:"用户实际名称"`
+	CreateDateApi    time.Time `description:"同步创建时间"`
+	CelueHistoryId   int       `description:"策略平台记录的ID"`
+	Platfor          int       `description:"PV阅读记录来源,1:查研观向,2:策略平台"`
+	IsDel            int       `description:"是否删除"`
+	RegisterPlatform int       `description:"来源"`
 }
 
 // 获取数量
@@ -47,3 +48,14 @@ func GetCygxArticleHistoryRecordAllList(condition string, pars []interface{}, st
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
+
+// 列表
+func GetCygxArticleHistoryRecordAllListNoLimit(condition string, pars []interface{}) (items []*CygxArticleHistoryRecordAll, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT art.* FROM cygx_article_history_record_all as art INNER JOIN cygx_article AS a  ON a.article_id = art.article_id    WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 14 - 0
models/cygx_yanxuan_special_record.go

@@ -114,6 +114,20 @@ func GetCygxYanxuanSpecialRecordRespList(condition string, pars []interface{}, s
 	return
 }
 
+// 列表
+func GetCygxYanxuanSpecialRecordRespListAll(condition string, pars []interface{}) (items []*CygxYanxuanSpecialRecordResp, err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_yanxuan_special_record as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
 type LisYanxuanSpecialRecordPvResp struct {
 	YanxuanSpecialId int `description:"文章ID"`
 	Pv               int `description:"pv"`

+ 39 - 2
models/rai_serve/rai_serve_bill.go

@@ -7,7 +7,7 @@ import (
 
 // 权益服务明细表
 type CygxRaiServeBill struct {
-	BillId           int       `comment:"服务明细主键ID"`
+	BillId           int       `orm:"column(bill_id);pk" description:"服务明细主键ID"`
 	Content          string    `comment:"服务内容说明"`
 	ServeTypeId      int       `comment:"服务类型ID"`
 	ServeTypeName    string    `comment:"服务类型"`
@@ -23,7 +23,7 @@ type CygxRaiServeBill struct {
 	SourceId         int       `comment:"来源ID"`
 	Source           string    `comment:"来源 "`
 	CreateTime       time.Time `comment:"创建时间"`
-	ViewTime         time.Time `comment:"浏览时间"`
+	ViewTime         string    `comment:"浏览时间"`
 }
 
 // Redis对列消息中的结构体
@@ -50,3 +50,40 @@ func GetCygxRaiServeBillCountByUserAndSource(userId, sourceId int, source string
 	err = o.Raw(sql, userId, sourceId, source).QueryRow(&count)
 	return
 }
+
+// 列表
+func GetCygxRaiServeBillListAll(condition string, pars []interface{}) (items []*CygxRaiServeBill, err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_rai_serve_bill   WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// AddCygxRaiServeBillMulti 批量添加
+func AddCygxRaiServeBillMulti(items []*CygxRaiServeBill) (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
+}

+ 12 - 0
models/wx_user.go

@@ -631,3 +631,15 @@ func GetUserRegisterListinit() (items []*WxUser, err error) {
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+// GetWxUserisMakerByCompanyIds 根据公司ID获取所有决策人ID
+func GetWxUserisMakerByCompanyIds(companyIds []int) (items []*WxUser, err error) {
+	lenArr := len(companyIds)
+	if lenArr == 0 {
+		return
+	}
+	sql := `SELECT user_id  FROM wx_user  WHERE company_id in (` + utils.GetOrmInReplace(lenArr) + `)  `
+	o := orm.NewOrmUsingDB("weekly_report")
+	_, err = o.Raw(sql, companyIds).QueryRows(&items)
+	return
+}

+ 374 - 4
services/rai_serve_count.go

@@ -14,9 +14,9 @@ import (
 
 //权益服务统计
 
-func init() {
-	UpdateRaiServeCompany()
-}
+//func init() {
+//	UpdateRaiServeCompany()
+//}
 
 // 更新现有的权益服务客户数据
 func UpdateRaiServeCompany() (err error) {
@@ -553,7 +553,377 @@ func RaiServeBillRedisAddReduceByYanxuanspecial(log rai_serve.RaiServeBillRedis)
 	item.SourceId = log.SourceId
 	item.Source = log.Source
 	item.CreateTime = time.Now()
-	item.ViewTime = log.ViewTime
+	item.ViewTime = log.ViewTime.Format(utils.FormatDateTime)
 	err = rai_serve.AddCygxRaiServeBill(item)
 	return
 }
+
+func init() {
+	UpdateCygxRaiServeBillByCompanyIds()
+}
+
+// 批量更新企业服务明细记录
+func UpdateCygxRaiServeBillByCompanyIds() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("批量更新企业服务明细记录失败: UpdateCygxRaiServeBillByCompanyIds Err"+err.Error(), 2)
+		}
+	}()
+	companyList, e := rai_serve.GetCygxRaiServeCompanyAllList()
+	if e != nil {
+		err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
+		return
+	}
+	var companyIds []int
+	var items []*rai_serve.CygxRaiServeBill
+	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)
+	for _, v := range listisMakeruser {
+		mapUserMaker[v.UserId] = true
+	}
+	fmt.Println(mapUserMaker)
+
+	var condition string
+	var pars []interface{}
+	createTime := time.Now().AddDate(0, 0, -80) // 查询12周以内的数据
+
+	condition = " AND  company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND create_time > ?  "
+	pars = append(pars, companyIds, createTime)
+
+	//研选专栏阅读记录内容
+	{
+		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, createTime)
+		listBillByYanxuanspecial, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
+		if e != nil {
+			err = errors.New("GetCygxRaiServeBillListAll, 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.CygxRaiServeBill)
+			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
+			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
+		}
+		//return
+		var articleIds []int
+		for _, v := range listArticleRecord {
+			articleIds = append(articleIds, v.ArticleId)
+		}
+
+		var conditionArticle string
+		var parsArticle []interface{}
+		conditionArticle += `  AND  article_id  IN (` + utils.GetOrmInReplace(len(articleIds)) + `) `
+		parsArticle = append(parsArticle, articleIds)
+		listArticle, e := models.GetCygxCygxArticleList(conditionArticle, parsArticle, 0, len(articleIds))
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCygxCygxArticleList, Err: " + e.Error())
+			return
+		}
+		mapArticleTitle := make(map[int]string)
+
+		for _, v := range listArticle {
+			mapArticleTitle[v.ArticleId] = v.Title
+		}
+		fmt.Println(mapArticleTitle[10080])
+		//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, createTime)
+		listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(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
+		}
+
+		for _, v := range listArticleRecord {
+			if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ArticleId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiServeBill)
+			item.Content = mapArticleTitle[v.ArticleId]
+			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.ArticleId
+			item.Source = utils.CYGX_OBJ_ARTICLE
+			item.CreateTime = time.Now()
+			item.ViewTime = v.CreateTime
+			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, createTime)
+		listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(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
+		}
+
+		for _, v := range signUpDetailList {
+			if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiServeBill)
+			item.Content = v.ActivityName
+			if v.ActivityType == 1 {
+				item.ServeTypeId = 1
+				item.ServeTypeName = "线上活动"
+			} else {
+				item.ServeTypeId = 2
+				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_ACTIVITY
+			item.CreateTime = time.Now()
+			item.ViewTime = v.ActivityTime
+			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, createTime)
+		listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(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
+		}
+
+		for _, v := range activitySpecialList {
+			if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiServeBill)
+			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
+			items = append(items, item)
+		}
+	}
+	//专项调研活动记录内容 end
+
+	//1v1路演
+	{
+		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, createTime)
+		listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(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
+		}
+
+		for _, v := range activitySpecialList {
+			if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
+				continue
+			}
+			item := new(rai_serve.CygxRaiServeBill)
+			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
+			items = append(items, item)
+		}
+	}
+	//1v1路演 end
+
+	fmt.Println(len(items))
+	e = rai_serve.AddCygxRaiServeBillMulti(items)
+	if e != nil {
+		err = errors.New("AddCygxRaiServeBillMulti, Err: " + e.Error())
+		return
+	}
+
+	return
+}