xingzai 7 kuukautta sitten
vanhempi
commit
11147f596a

+ 4 - 3
models/activity.go

@@ -928,9 +928,10 @@ func UPdateActivityMsgToSendFile(activityId int) (err error) {
 }
 
 type AskEmailRep struct {
-	Name   string `description:"姓名"`
-	Email  string `description:"邮箱"`
-	Mobile string `description:"手机号"`
+	Name                string `description:"姓名"`
+	Email               string `description:"邮箱"`
+	Mobile              string `description:"手机号"`
+	ChartPermissionName string `description:"行业名称"`
 }
 
 func GetAskEmail() (item []*AskEmailRep, err error) {

+ 15 - 11
models/activity_signup_detail.go

@@ -68,17 +68,19 @@ func GetSignupDetailBySignup(condition string, pars []interface{}) (list []*Cygx
 }
 
 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线上,其余线下"`
+	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线上,其余线下"`
+	ChartPermissionId   int    `description:"行业id"`
+	ChartPermissionName string `description:"行业名称"`
 }
 
 // 获取今天报名的用户信息,存入到参会记录表中
@@ -94,6 +96,8 @@ func GetSignupDetailBySignupjoinactivity(condition string, pars []interface{}) (
 			art.register_platform,
 			a.activity_time,
 			a.activity_name,
+			a.chart_permission_id,
+			a.chart_permission_name,
 			t.activity_type 
 		FROM
 			cygx_activity_signup AS art

+ 18 - 14
models/activity_special_trip.go

@@ -27,20 +27,22 @@ type CygxActivitySpecialTrip struct {
 }
 
 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:"邮箱号"`
-	CompanyId      int    `description:"公司ID"`
-	CompanyName    string `description:"公司名称"`
-	RealName       string `description:"用户实际名称"`
-	SellerName     string `description:"所属销售"`
-	OutboundMobile string `description:"外呼手机号"`
-	CountryCode    string `description:"手机国家区号"`
-	ResearchTheme  string `description:"调研主题"`
+	Id                  int    `description:"ID"`
+	UserId              int    `description:"用户id"`
+	ActivityId          int    `description:"活动ID"`
+	ActivityTime        string `description:"活动时间"`
+	CreateTime          string `description:"创建时间"`
+	Mobile              string `description:"手机号"`
+	Email               string `description:"邮箱号"`
+	CompanyId           int    `description:"公司ID"`
+	CompanyName         string `description:"公司名称"`
+	RealName            string `description:"用户实际名称"`
+	SellerName          string `description:"所属销售"`
+	OutboundMobile      string `description:"外呼手机号"`
+	CountryCode         string `description:"手机国家区号"`
+	ResearchTheme       string `description:"调研主题"`
+	ChartPermissionId   int    `description:"行业id"`
+	ChartPermissionName string `description:"行业名称"`
 }
 
 func GetCygxActivitySpecialTripList(condition string, pars []interface{}) (item []*CygxActivitySpecialTripResp, err error) {
@@ -207,6 +209,8 @@ func GetCygxActivitySpecialMeetingDetailList(condition string, pars []interface{
 			art.company_id,
 			art.company_name,
 			a.activity_time,
+			a.chart_permission_id,
+			a.chart_permission_name,
 			a.research_theme
 		FROM
 			cygx_activity_special_meeting_detail AS art

+ 25 - 2
models/article_history_record_all.go

@@ -49,10 +49,33 @@ func GetCygxArticleHistoryRecordAllList(condition string, pars []interface{}, st
 	return
 }
 
+type CygxArticleHistoryRecordAllResp 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:"是否删除"`
+	RegisterPlatform int       `description:"来源"`
+	Title            string    `description:"标题"`
+	CategoryName     string    `description:"一级分类"`
+}
+
 // 列表
-func GetCygxArticleHistoryRecordAllListNoLimit(condition string, pars []interface{}) (items []*CygxArticleHistoryRecordAll, err error) {
+func GetCygxArticleHistoryRecordAllListNoLimit(condition string, pars []interface{}) (items []*CygxArticleHistoryRecordAllResp, 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 `
+	sql := `SELECT 	art.* ,a.title,a.category_name 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
 	}

+ 1 - 0
models/company/company_product.go

@@ -19,6 +19,7 @@ type CompanyProduct struct {
 	SellerId            int       `description:"销售id"`
 	SellerName          string    `description:"销售名称"`
 	GroupId             int       `description:"销售分组id"`
+	ShareGroupId        int       `description:"共享销售分组id"`
 	DepartmentId        int       `description:"销售部门id"`
 	IsSuspend           int       `description:"1:暂停,0:启用"`
 	SuspendTime         time.Time `description:"暂停启用时间"`

+ 21 - 19
models/rai_serve/rai_serve_bill.go

@@ -7,25 +7,27 @@ import (
 
 // 权益服务明细表
 type CygxRaiServeBill 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:"周日结束日期"`
-	CreateTime       time.Time `comment:"创建时间"`
-	ViewTime         string    `comment:"浏览时间"`
+	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:"浏览时间"`
 }
 
 // Redis对列消息中的结构体

+ 7 - 4
models/rai_serve/rai_serve_company.go

@@ -18,8 +18,11 @@ type CygxRaiServeCompany struct {
 	EndDate           string    `comment:"结束日期"`
 	ShareSeller       string    `comment:"共享销售"`
 	ShareSellerId     int       `comment:"共享销售员id"`
+	GroupId           int       `description:"销售分组id"`
+	ShareGroupId      int       `description:"共享销售分组id"`
 	Status            string    `comment:"客户状态"`
 	PermissionName    string    `comment:"权限名"`
+	IsUserMaker       int       `comment:"近四周之内是否包含决策人 ,1是、0否"`
 }
 
 func AddCygxRaiServeCompanyMulti(items []*CygxRaiServeCompany) (err error) {
@@ -56,7 +59,7 @@ func AddCygxRaiServeCompanyMulti(items []*CygxRaiServeCompany) (err error) {
 // UpdateCygxRaiServeCompanyMulti 批量修改正式客户信息
 func UpdateCygxRaiServeCompanyMulti(items []*CygxRaiServeCompany) (err error) {
 	o := orm.NewOrm()
-	p, err := o.Raw("UPDATE cygx_rai_serve_company SET money = ? ,serve_coverage_rate =? ,permission_name = ?  WHERE company_id = ?").Prepare()
+	p, err := o.Raw("UPDATE cygx_rai_serve_company SET money = ? ,serve_coverage_rate =? ,permission_name = ?  ,is_user_maker = ?   WHERE company_id = ?").Prepare()
 	if err != nil {
 		return
 	}
@@ -64,7 +67,7 @@ func UpdateCygxRaiServeCompanyMulti(items []*CygxRaiServeCompany) (err error) {
 		_ = p.Close() // 别忘记关闭 statement
 	}()
 	for _, v := range items {
-		_, err = p.Exec(v.Money, v.ServeCoverageRate, v.PermissionName, v.CompanyId)
+		_, err = p.Exec(v.Money, v.ServeCoverageRate, v.PermissionName, v.IsUserMaker, v.CompanyId)
 		if err != nil {
 			return
 		}
@@ -75,7 +78,7 @@ func UpdateCygxRaiServeCompanyMulti(items []*CygxRaiServeCompany) (err error) {
 // UpdateCygxRaiServeCompanyFormalNoMulti 批量修改非正式客户信息
 func UpdateCygxRaiServeCompanyFormalNoMulti(items []*CygxRaiServeCompany) (err error) {
 	o := orm.NewOrm()
-	p, err := o.Raw("UPDATE cygx_rai_serve_company SET money = ? , serve_coverage_rate =? ,permission_name = ? , start_date = ? , end_date = ?  WHERE company_id = ?").Prepare()
+	p, err := o.Raw("UPDATE cygx_rai_serve_company SET money = ? , serve_coverage_rate =? ,permission_name = ? , start_date = ? , end_date = ? ,is_user_maker = ?    WHERE company_id = ?").Prepare()
 	if err != nil {
 		return
 	}
@@ -83,7 +86,7 @@ func UpdateCygxRaiServeCompanyFormalNoMulti(items []*CygxRaiServeCompany) (err e
 		_ = p.Close() // 别忘记关闭 statement
 	}()
 	for _, v := range items {
-		_, err = p.Exec(v.Money, v.ServeCoverageRate, v.PermissionName, v.StartDate, v.EndDate, v.CompanyId)
+		_, err = p.Exec(v.Money, v.ServeCoverageRate, v.PermissionName, v.StartDate, v.EndDate, v.IsUserMaker, v.CompanyId)
 		if err != nil {
 			return
 		}

+ 14 - 0
models/rai_serve/rai_serve_week_bill.go

@@ -40,3 +40,17 @@ func AddCygxRaiServeWeekBillMulti(items []*CygxRaiServeWeekBill) (err error) {
 	}
 	return
 }
+
+// 列表
+func GetCygxRaiServeWeekBillListAll(condition string, pars []interface{}) (items []*CygxRaiServeWeekBill, err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_rai_serve_week_bill   WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 223 - 156
services/rai_serve_count.go

@@ -28,19 +28,6 @@ func UpdateRaiServeCompany() (err error) {
 		}
 	}()
 
-	//获取当前所有的权益服务客户ID
-	//listRaiServeCompanyId, e := rai_serve.GetCygxRaiServeCompanyAllList()
-	//if e != nil {
-	//	err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
-	//	return
-	//}
-	//mapOldCompanyId := make(map[int]bool) //原来的所属机构
-	//mapNewCompanyId := make(map[int]bool) // 现有的所属机构
-	//var deleteCompanyIds []int            // 需要删除的机构
-	//for _, v := range listRaiServeCompanyId {
-	//	mapOldCompanyId[v.CompanyId] = true
-	//}
-
 	var condition string
 	var pars []interface{}
 	condition = `    AND p.product_id = 2 AND  (p.group_id = ? OR  p.share_group_id = ?) `
@@ -61,8 +48,6 @@ func UpdateRaiServeCompany() (err error) {
 		item.CompanyId = v.CompanyId
 		item.CompanyName = v.CompanyName
 		item.CreateTime = time.Now()
-		//item.Money = 100
-		//item.ServeCoverageRate = "66.66%"
 		item.SellerId = v.SellerId
 		item.SellerName = v.SellerName
 		item.StartDate = v.StartDate
@@ -70,15 +55,11 @@ func UpdateRaiServeCompany() (err error) {
 		item.ShareSeller = v.ShareSeller
 		item.ShareSellerId = v.ShareSellerId
 		item.Status = v.Status
-		//item.PermissionName = "科技"
+		item.GroupId = v.GroupId
+		item.ShareGroupId = v.ShareGroupId
 		items = append(items, item)
 	}
 
-	//for _, v := range listRaiServeCompanyId {
-	//	if !mapNewCompanyId[v.CompanyId] {
-	//		deleteCompanyIds = append(deleteCompanyIds, v.CompanyId)
-	//	}
-	//}
 	//先删除老的再添加新的
 	e = rai_serve.AddCygxRaiServeCompanyMulti(items)
 	if e != nil {
@@ -86,113 +67,6 @@ func UpdateRaiServeCompany() (err error) {
 		return
 	}
 
-	//listRaiServeCompanyNow, e := rai_serve.GetCygxRaiServeCompanyAllList()
-	//if e != nil {
-	//	err = errors.New("GetCygxRaiServeCompanyAllList_Now, Err: " + e.Error())
-	//	return
-	//}
-
-	var formalCompanyIds []int   // 当前正式客户ID
-	var formalNoCompanyIds []int // 当前非正式客户ID
-
-	for _, v := range listCompanyProduct {
-		if v.Status == "正式" {
-			formalCompanyIds = append(formalCompanyIds, v.CompanyId)
-		} else {
-			formalNoCompanyIds = append(formalNoCompanyIds, v.CompanyId)
-		}
-	}
-
-	var itemsUpdate []*rai_serve.CygxRaiServeCompany
-	if len(formalCompanyIds) > 0 { //正式客户信息
-		condition = ""
-		pars = make([]interface{}, 0)
-		condition = `    AND product_id = 2 AND company_id IN  (` + utils.GetOrmInReplace(len(formalCompanyIds)) + `) AND status = 1  AND  end_date > ? `
-		pars = append(pars, formalCompanyIds, time.Now())
-		listCompanyContract, e := company.GetCompanyContractList(condition, pars)
-		if e != nil {
-			err = errors.New("GetCompanyContractList, Err: " + e.Error())
-			return
-		}
-		companyMoney := make(map[int]float64)
-		for _, v := range listCompanyContract {
-			companyMoney[v.CompanyId] += v.Money
-		}
-
-		permissionNameMapByCompanyId, e := GetCompanyReportPermissionNameMapByCompanyId(formalCompanyIds)
-		if e != nil {
-			err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
-			return
-		}
-		for _, v := range formalCompanyIds {
-			item := new(rai_serve.CygxRaiServeCompany)
-			item.CompanyId = v
-			item.Money = companyMoney[v]
-			item.PermissionName = permissionNameMapByCompanyId[v]
-			item.ServeCoverageRate = "61.8"
-			itemsUpdate = append(itemsUpdate, item)
-		}
-
-		fmt.Println(companyMoney)
-	}
-
-	//正式客户数据修改
-	e = rai_serve.UpdateCygxRaiServeCompanyMulti(itemsUpdate)
-	if e != nil {
-		err = errors.New("UpdateCygxRaiServeCompanyMulti, Err: " + e.Error())
-		return
-	}
-
-	//非正式客户数据修改
-	var itemsUpdateFormalNo []*rai_serve.CygxRaiServeCompany
-	if len(formalNoCompanyIds) > 0 { //非正式客户信息
-		condition = ""
-		pars = make([]interface{}, 0)
-		condition = `    AND product_id = 2 AND company_id IN  (` + utils.GetOrmInReplace(len(formalNoCompanyIds)) + `) AND status = 1  AND  end_date < ?  GROUP BY	company_id  ORDER BY	company_contract_id DESC `
-		pars = append(pars, formalNoCompanyIds, time.Now())
-		listCompanyContractLastId, e := company.GetCompanyContractLastList(condition, pars) //获取关联的最后一笔合同信息
-		if e != nil {
-			err = errors.New("GetCompanyContractLastList, Err: " + e.Error())
-			return
-		}
-		var companyContractIds []int
-		for _, v := range listCompanyContractLastId {
-			companyContractIds = append(companyContractIds, v.CompanyContractId)
-		}
-
-		condition = ""
-		pars = make([]interface{}, 0)
-		condition = `    AND product_id = 2 AND company_id IN  (` + utils.GetOrmInReplace(len(formalNoCompanyIds)) + `) AND status = 1  AND company_contract_id IN  (` + utils.GetOrmInReplace(len(companyContractIds)) + `)   AND    end_date < ?  GROUP BY	company_id  ORDER BY	company_contract_id DESC `
-		pars = append(pars, formalNoCompanyIds, companyContractIds, time.Now())
-		listCompanyContractLast, e := company.GetCompanyContractList(condition, pars)
-		if e != nil {
-			err = errors.New("GetCompanyContractList, Err: " + e.Error())
-			return
-		}
-
-		permissionNameMapByContractId, e := GetCompanyContractPermissionNameMapById(companyContractIds)
-		if e != nil {
-			err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
-			return
-		}
-		fmt.Println("permissionNameMapByContractId", permissionNameMapByContractId)
-		for _, v := range listCompanyContractLast {
-			item := new(rai_serve.CygxRaiServeCompany)
-			item.CompanyId = v.CompanyId
-			item.Money = v.Money
-			item.StartDate = v.StartDate
-			item.EndDate = v.EndDate
-			item.ServeCoverageRate = " 61.8"
-			item.PermissionName = permissionNameMapByContractId[v.CompanyContractId]
-			itemsUpdateFormalNo = append(itemsUpdateFormalNo, item)
-		}
-	}
-	e = rai_serve.UpdateCygxRaiServeCompanyFormalNoMulti(itemsUpdateFormalNo)
-	if e != nil {
-		err = errors.New("UpdateCygxRaiServeCompanyFormalNoMulti, Err: " + e.Error())
-		return
-	}
-
 	return
 }
 
@@ -473,10 +347,6 @@ func CygxRaiServeBillRedisAdd(content, source string, userId, comapnyId, sourceI
 	return
 }
 
-//func init() {
-//	CygxRaiServeBillRedisAddReduce()
-//}
-
 // CygxRaiServeBillRedisAddReduce 处理权益服务统计
 func CygxRaiServeBillRedisAddReduce() (err error) {
 	for {
@@ -559,9 +429,9 @@ func RaiServeBillRedisAddReduceByYanxuanspecial(log rai_serve.RaiServeBillRedis)
 	return
 }
 
-func init() {
-	UpdateCygxRaiServeBillWeek()
-}
+//func init() {
+//	UpdateWeekAvg()
+//}
 
 // 批量更新企业服务明细记录
 func UpdateCygxRaiServeBillByCompanyIds() (err error) {
@@ -685,26 +555,26 @@ func UpdateCygxRaiServeBillByCompanyIds() (err 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])
+		//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
 
 		//文章阅读明细
@@ -728,7 +598,7 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 				continue
 			}
 			item := new(rai_serve.CygxRaiServeBill)
-			item.Content = mapArticleTitle[v.ArticleId]
+			item.Content = v.Title
 			item.ServeTypeId = 5
 			item.ServeTypeName = "阅读uv"
 			item.UserId = v.UserId
@@ -749,6 +619,15 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			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)
 		}
 	}
@@ -808,6 +687,8 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			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)
 		}
@@ -863,6 +744,8 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			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)
 		}
@@ -893,6 +776,24 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			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{}
@@ -934,6 +835,15 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			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)
 		}
 	}
@@ -1079,6 +989,163 @@ func UpdateCygxRaiServeBillWeek() (err error) {
 		err = errors.New("AddCygxRaiServeWeekBillMulti, Err: " + e.Error())
 		return
 	}
+	return
+}
+
+func UpdateWeekAvg() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("批量更新企业服务明细记录失败: UpdateCygxRaiServeBillByCompanyIds Err"+err.Error(), 2)
+		}
+	}()
+	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 >= ? `
+	pars = append(pars, startDate)
+
+	listWeekBill, e := rai_serve.GetCygxRaiServeWeekBillListAll(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxRaiServeWeekBillListAll, Err: " + e.Error())
+		return
+	}
+
+	mapWeekServeCount := make(map[int]float64) //四周平均率总合
+	for _, v := range listWeekBill {
+		mapWeekServeCount[v.CompanyId] += v.WeekServeCount * 100
+	}
 
+	//获取近四周含有Kp 的公司
+	condition = ""
+	pars = make([]interface{}, 0)
+	condition += ` AND week_start_date >= ? AND is_kp = 1  GROUP BY  company_id  `
+	pars = append(pars, startDate)
+	listIsKpWeekBill, e := rai_serve.GetCygxRaiServeBillListAll(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxRaiServeWeekBillListAll, Err: " + e.Error())
+		return
+	}
+
+	mapWeekIsKp := make(map[int]bool) //最近四周是否包含KP
+	for _, v := range listIsKpWeekBill {
+		mapWeekIsKp[v.CompanyId] = true
+	}
+
+	companyList, e := rai_serve.GetCygxRaiServeCompanyAllList()
+	if e != nil {
+		err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
+		return
+	}
+	var formalCompanyIds []int   // 当前正式客户ID
+	var formalNoCompanyIds []int // 当前非正式客户ID
+
+	for _, v := range companyList {
+		if v.Status == "正式" {
+			formalCompanyIds = append(formalCompanyIds, v.CompanyId)
+		} else {
+			formalNoCompanyIds = append(formalNoCompanyIds, v.CompanyId)
+		}
+	}
+
+	var itemsUpdate []*rai_serve.CygxRaiServeCompany
+	if len(formalCompanyIds) > 0 { //正式客户信息
+		condition = ""
+		pars = make([]interface{}, 0)
+		condition = `    AND product_id = 2 AND company_id IN  (` + utils.GetOrmInReplace(len(formalCompanyIds)) + `) AND status = 1  AND  end_date > ? `
+		pars = append(pars, formalCompanyIds, time.Now())
+		listCompanyContract, e := company.GetCompanyContractList(condition, pars)
+		if e != nil {
+			err = errors.New("GetCompanyContractList, Err: " + e.Error())
+			return
+		}
+		companyMoney := make(map[int]float64)
+		for _, v := range listCompanyContract {
+			companyMoney[v.CompanyId] += v.Money
+		}
+
+		permissionNameMapByCompanyId, e := GetCompanyReportPermissionNameMapByCompanyId(formalCompanyIds)
+		if e != nil {
+			err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
+			return
+		}
+		for _, v := range formalCompanyIds {
+			item := new(rai_serve.CygxRaiServeCompany)
+			item.CompanyId = v
+			item.Money = companyMoney[v]
+			item.PermissionName = permissionNameMapByCompanyId[v]
+			item.ServeCoverageRate = utils.SubFloatToString(mapWeekServeCount[v]/4, 2)
+			if mapWeekIsKp[v] {
+				item.IsUserMaker = 1
+			}
+			itemsUpdate = append(itemsUpdate, item)
+		}
+	}
+
+	//正式客户数据修改
+	e = rai_serve.UpdateCygxRaiServeCompanyMulti(itemsUpdate)
+	if e != nil {
+		err = errors.New("UpdateCygxRaiServeCompanyMulti, Err: " + e.Error())
+		return
+	}
+
+	//非正式客户数据修改
+	var itemsUpdateFormalNo []*rai_serve.CygxRaiServeCompany
+	if len(formalNoCompanyIds) > 0 { //非正式客户信息
+		condition = ""
+		pars = make([]interface{}, 0)
+		condition = `    AND product_id = 2 AND company_id IN  (` + utils.GetOrmInReplace(len(formalNoCompanyIds)) + `) AND status = 1  AND  end_date < ?  GROUP BY	company_id  ORDER BY	company_contract_id DESC `
+		pars = append(pars, formalNoCompanyIds, time.Now())
+		listCompanyContractLastId, e := company.GetCompanyContractLastList(condition, pars) //获取关联的最后一笔合同信息
+		if e != nil {
+			err = errors.New("GetCompanyContractLastList, Err: " + e.Error())
+			return
+		}
+		var companyContractIds []int
+		for _, v := range listCompanyContractLastId {
+			companyContractIds = append(companyContractIds, v.CompanyContractId)
+		}
+
+		condition = ""
+		pars = make([]interface{}, 0)
+		condition = `    AND product_id = 2 AND company_id IN  (` + utils.GetOrmInReplace(len(formalNoCompanyIds)) + `) AND status = 1  AND company_contract_id IN  (` + utils.GetOrmInReplace(len(companyContractIds)) + `)   AND    end_date < ?  GROUP BY	company_id  ORDER BY	company_contract_id DESC `
+		pars = append(pars, formalNoCompanyIds, companyContractIds, time.Now())
+		listCompanyContractLast, e := company.GetCompanyContractList(condition, pars)
+		if e != nil {
+			err = errors.New("GetCompanyContractList, Err: " + e.Error())
+			return
+		}
+
+		permissionNameMapByContractId, e := GetCompanyContractPermissionNameMapById(companyContractIds)
+		if e != nil {
+			err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
+			return
+		}
+		for _, v := range listCompanyContractLast {
+			item := new(rai_serve.CygxRaiServeCompany)
+			item.CompanyId = v.CompanyId
+			item.Money = v.Money
+			item.StartDate = v.StartDate
+			item.EndDate = v.EndDate
+			item.ServeCoverageRate = utils.SubFloatToString(mapWeekServeCount[v.CompanyId]/4, 2)
+			if mapWeekIsKp[v.CompanyId] {
+				item.IsUserMaker = 1
+			}
+			item.PermissionName = permissionNameMapByContractId[v.CompanyContractId]
+			itemsUpdateFormalNo = append(itemsUpdateFormalNo, item)
+		}
+	}
+	e = rai_serve.UpdateCygxRaiServeCompanyFormalNoMulti(itemsUpdateFormalNo)
+	if e != nil {
+		err = errors.New("UpdateCygxRaiServeCompanyFormalNoMulti, Err: " + e.Error())
+		return
+	}
+	fmt.Println(" UpdateWeekAvg  end")
 	return
 }