xingzai 8 mēneši atpakaļ
vecāks
revīzija
e9b66af265

+ 3 - 2
models/db.go

@@ -217,7 +217,8 @@ func initOrder() {
 // 权益服务记录模块
 func initRaiServe() {
 	orm.RegisterModel(
-		new(rai_serve.CygxRaiServeBill),    //服务明细表
-		new(rai_serve.CygxRaiServeCompany), //当前所属权益服务公司表
+		new(rai_serve.CygxRaiServeBill),     //服务明细表
+		new(rai_serve.CygxRaiServeCompany),  //当前所属权益服务公司表
+		new(rai_serve.CygxRaiServeWeekBill), //当前所属权益服务公司周度统计表
 	)
 }

+ 2 - 0
models/rai_serve/rai_serve_bill.go

@@ -22,6 +22,8 @@ type CygxRaiServeBill struct {
 	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:"浏览时间"`
 }

+ 42 - 0
models/rai_serve/rai_serve_week_bill.go

@@ -0,0 +1,42 @@
+package rai_serve
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxRaiServeWeekBill struct {
+	ServeWeekBillId int       `orm:"column(serve_week_bill_id);pk" description:"服务周账单ID"`
+	CompanyId       int       `comment:"公司ID"`
+	CompanyName     string    `comment:"公司名称"`
+	UserTotal       int       `comment:"用户数量"`
+	WeekServeCount  float64   `comment:"周度服务量总计"`
+	CoverageRate    float64   `comment:"覆盖率"`
+	WeekStartDate   string    `comment:"周一开始日期"`
+	WeekEndDate     string    `comment:"周日结束日期"`
+	CreateTime      time.Time `comment:"创建时间"`
+	ModifyTime      time.Time `comment:"修改时间"`
+}
+
+// AddCygxRaiServeWeekBillMulti 批量添加
+func AddCygxRaiServeWeekBillMulti(items []*CygxRaiServeWeekBill) (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
+}

+ 23 - 0
models/wx_user.go

@@ -643,3 +643,26 @@ func GetWxUserisMakerByCompanyIds(companyIds []int) (items []*WxUser, err error)
 	_, err = o.Raw(sql, companyIds).QueryRows(&items)
 	return
 }
+
+// GetWxUserNumByCompanyIds 根据公司ID获取所有决策人ID
+func GetWxUserNumByCompanyIds(companyIds []int) (items []*WxUserNumGroup, err error) {
+	lenArr := len(companyIds)
+	if lenArr == 0 {
+		return
+	}
+	sql := `SELECT
+			company_id,
+			COUNT( user_id ) AS user_num 
+		FROM
+			wx_user 
+		WHERE
+			company_id IN  (` + utils.GetOrmInReplace(lenArr) + `) GROUP BY company_id `
+	o := orm.NewOrmUsingDB("weekly_report")
+	_, err = o.Raw(sql, companyIds).QueryRows(&items)
+	return
+}
+
+type WxUserNumGroup struct {
+	CompanyId int `comment:"公司ID"`
+	UserNum   int `comment:"用户数量"`
+}

+ 89 - 3
services/rai_serve_count.go

@@ -559,9 +559,9 @@ func RaiServeBillRedisAddReduceByYanxuanspecial(log rai_serve.RaiServeBillRedis)
 	return
 }
 
-//func init() {
-//	UpdateCygxRaiServeBillByCompanyIds()
-//}
+func init() {
+	UpdateCygxRaiServeBillWeek()
+}
 
 // 批量更新企业服务明细记录
 func UpdateCygxRaiServeBillByCompanyIds() (err error) {
@@ -671,6 +671,7 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			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)
 		}
 	}
@@ -747,6 +748,7 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			item.Source = utils.CYGX_OBJ_ARTICLE
 			item.CreateTime = time.Now()
 			item.ViewTime = v.CreateTime
+			item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
 			items = append(items, item)
 		}
 	}
@@ -806,6 +808,7 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			item.Source = utils.CYGX_OBJ_ACTIVITY
 			item.CreateTime = time.Now()
 			item.ViewTime = v.ActivityTime
+			item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
 			items = append(items, item)
 		}
 	}
@@ -860,6 +863,7 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			item.Source = utils.CYGX_OBJ_ACTIVITYSPECIAL
 			item.CreateTime = time.Now()
 			item.ViewTime = v.ActivityTime
+			item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
 			items = append(items, item)
 		}
 	}
@@ -929,6 +933,7 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			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)
 			items = append(items, item)
 		}
 	}
@@ -982,6 +987,7 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 			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)
 		}
 	}
@@ -996,3 +1002,83 @@ func UpdateCygxRaiServeBillByCompanyIds() (err error) {
 
 	return
 }
+
+func UpdateCygxRaiServeBillWeek() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("批量更新企业服务明细记录失败: UpdateCygxRaiServeBillByCompanyIds Err"+err.Error(), 2)
+		}
+	}()
+
+	now := time.Now()
+	weeks := 12
+
+	companyList, e := rai_serve.GetCygxRaiServeCompanyAllList()
+	if e != nil {
+		err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
+		return
+	}
+	var companyIds []int
+
+	for _, v := range companyList {
+		companyIds = append(companyIds, v.CompanyId)
+	}
+
+	listCompanyUserNum, e := models.GetWxUserNumByCompanyIds(companyIds)
+	if e != nil {
+		err = errors.New("GetWxUserisMakerByCompanyIds, Err: " + e.Error())
+		return
+	}
+	mapCompanyUserNum := make(map[int]int) //企业对应的用户数量
+	for _, v := range listCompanyUserNum {
+		mapCompanyUserNum[v.CompanyId] = v.UserNum
+	}
+	lencompanyId := len(companyIds)
+	//研选阅读明细
+	var conditionBill string
+	var parsBill []interface{}
+	conditionBill = "  AND   company_id IN  (" + utils.GetOrmInReplace(lencompanyId) + ")  AND view_time > ?  "
+	parsBill = append(parsBill, companyIds, time.Now().AddDate(0, 0, -80))
+	listBillByYanxuanspecial, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
+	if e != nil {
+		err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
+		return
+	}
+
+	mapWeekServeCount := make(map[string]float64)
+	for _, v := range listBillByYanxuanspecial {
+		mapWeekServeCount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", v.WeekStartDate)] += v.ServeCount
+	}
+
+	fmt.Println(companyIds)
+	var items []*rai_serve.CygxRaiServeWeekBill
+	for _, v := range companyList {
+		for i := 0; i < weeks; i++ {
+			item := new(rai_serve.CygxRaiServeWeekBill)
+			// 计算当前周的周一
+			monday := now.AddDate(0, 0, -int(now.Weekday()-time.Monday)-i*7)
+			// 计算当前周的周日
+			sunday := monday.AddDate(0, 0, 6)
+			item.WeekStartDate = monday.Format(utils.FormatDate)
+			item.WeekEndDate = sunday.Format(utils.FormatDate)
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.UserTotal = mapCompanyUserNum[v.CompanyId]
+			item.WeekServeCount = mapWeekServeCount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", item.WeekStartDate)]
+			if mapCompanyUserNum[v.CompanyId] > 0 {
+				item.CoverageRate = item.WeekServeCount / float64(mapCompanyUserNum[v.CompanyId])
+			}
+			item.CreateTime = time.Now()
+			item.ModifyTime = time.Now()
+			items = append(items, item)
+		}
+	}
+	e = rai_serve.AddCygxRaiServeWeekBillMulti(items)
+	if e != nil {
+		err = errors.New("AddCygxRaiServeWeekBillMulti, Err: " + e.Error())
+		return
+	}
+
+	return
+}

+ 11 - 0
utils/common.go

@@ -1021,3 +1021,14 @@ func TruncateActivityNameString(s string) string {
 	// 截取前15个汉字,并添加省略号
 	return s[:byteIndex] + "…"
 }
+
+// 根据字符串时间格式获取所在时间段周一、周日
+func GetMondayAndSundayByTimeString(timeString string) (monday, sunday string) {
+	now := StrTimeToTime(timeString)
+	mondayDate := now.AddDate(0, 0, -int(now.Weekday()-time.Monday))
+	// 计算当前周的周日
+	sundayDate := mondayDate.AddDate(0, 0, 6)
+	monday = mondayDate.Format(FormatDate)
+	sunday = sundayDate.Format(FormatDate)
+	return
+}