|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- package svc
-
- import (
- "applet/app/e"
- "applet/app/md"
- "applet/app/utils"
- db "code.fnuoos.com/zhimeng/model.git/src"
- "fmt"
- "github.com/gin-gonic/gin"
- "strings"
- "time"
- )
-
- func OperatorIndexTotal(c *gin.Context) {
- //昨天
- yesterday := utils.GetTimeRange("yesterday")
- yesterdayTotal := commOperatorTotal(c, time.Unix(yesterday["start"], 0).Format("2006-01-02"), time.Unix(yesterday["end"]-3600, 0).Format("2006-01-02"))
-
- //前天
- beforeYesterDayTotal := commOperatorTotal(c, time.Unix(yesterday["start"]-86400, 0).Format("2006-01-02"), time.Unix(yesterday["start"]-3600, 0).Format("2006-01-02"))
-
- //7天
- withinSevenDays := utils.GetTimeRange("new_within_seven_days")
- withinSevenDaysTotal := commOperatorTotal(c, time.Unix(withinSevenDays["start"], 0).Format("2006-01-02"), time.Unix(withinSevenDays["end"]-3600, 0).Format("2006-01-02"))
-
- //7天前的 7天
- beforeWithinSevenDaysTotal := commOperatorTotal(c, time.Unix(withinSevenDays["start"]-3600-7*86400, 0).Format("2006-01-02"), time.Unix(withinSevenDays["start"]-3600, 0).Format("2006-01-02"))
-
- //本月
- currentMonth := utils.GetTimeRange("current_month")
- currentMonthTotal := commOperatorTotal(c, time.Unix(currentMonth["start"], 0).Format("2006-01-02"), time.Unix(currentMonth["end"]-3600, 0).Format("2006-01-02"))
-
- //上月
- lastMonth := utils.GetTimeRange("last_month")
- lastMonthTotal := commOperatorTotal(c, time.Unix(lastMonth["start"], 0).Format("2006-01-02"), time.Unix(lastMonth["end"]-3600, 0).Format("2006-01-02"))
-
- //上上月
- beforeLastMonth := time.Unix(lastMonth["start"]-86400, 0)
- beforeLastMonthStr := time.Date(beforeLastMonth.Year(), beforeLastMonth.Month(), 1, 0, 0, 0, 0, beforeLastMonth.Location())
- beforeLastMonthTotal := commOperatorTotal(c, beforeLastMonthStr.Format("2006-01-02"), time.Unix(lastMonth["start"]-3600, 0).Format("2006-01-02"))
-
- res := []md.IndexAppListDataList{
- {Name: "昨日收益(媒体)", Type: "yesterday", Bili: commBili(c, beforeYesterDayTotal, yesterdayTotal, "media_revenue"), Value: utils.Float64ToStr(utils.StrToFloat64(yesterdayTotal[0]["media_revenue"]) / 100)},
- {Name: "七日收益(媒体)", Type: "within_seven_days", Bili: commBili(c, beforeWithinSevenDaysTotal, withinSevenDaysTotal, "media_revenue"), Value: utils.Float64ToStr(utils.StrToFloat64(withinSevenDaysTotal[0]["media_revenue"]) / 100)},
- {Name: "本月收益(媒体)", Type: "current_month", Bili: commBili(c, lastMonthTotal, currentMonthTotal, "media_revenue"), Value: utils.Float64ToStr(utils.StrToFloat64(currentMonthTotal[0]["media_revenue"]) / 100)},
- {Name: "上月收益(媒体)", Type: "last_month", Bili: commBili(c, beforeLastMonthTotal, lastMonthTotal, "media_revenue"), Value: utils.Float64ToStr(utils.StrToFloat64(lastMonthTotal[0]["media_revenue"]) / 100)},
- {Name: "昨日曝光量(媒体)", Type: "yesterday", Bili: commBili(c, beforeYesterDayTotal, yesterdayTotal, "exposure_count"), Value: yesterdayTotal[0]["exposure_count"]},
- {Name: "七日曝光量(媒体)", Type: "within_seven_days", Bili: commBili(c, beforeWithinSevenDaysTotal, withinSevenDaysTotal, "exposure_count"), Value: withinSevenDaysTotal[0]["exposure_count"]},
- {Name: "本月曝光量(媒体)", Type: "current_month", Bili: commBili(c, lastMonthTotal, currentMonthTotal, "exposure_count"), Value: currentMonthTotal[0]["exposure_count"]},
- {Name: "上月曝光量(媒体)", Type: "last_month", Bili: commBili(c, beforeLastMonthTotal, lastMonthTotal, "exposure_count"), Value: lastMonthTotal[0]["exposure_count"]},
- }
- e.OutSuc(c, res, nil)
- return
- }
-
- func OperatorBeforeSevenPoint(c *gin.Context, req md.IndexAppListTableReq) map[string][]string {
- start := utils.TimeStdParseUnix(req.StartDate + " 00:00:00")
- day := (utils.TimeStdParseUnix(req.EndDate+" 00:00:00")-start)/86400 + 1
- first := start - day*86400*6
- dayAll := (utils.TimeStdParseUnix(req.EndDate+" 00:00:00")-first)/86400 + 1
-
- firstTime := time.Unix(first, 0).Format("2006-01-02")
- appData := make(map[string][]string)
- for _, v := range req.AppId {
- appData[v] = make([]string, dayAll/day+1, dayAll/day+1)
- }
- dateList := make(map[int]string)
- j := 1
- for i := 0; i < int(dayAll); i++ {
- if i >= (j-1)*int(day) && i < j*int(day) {
- dateList[j-1] += "," + time.Unix(first+int64(i)*86400, 0).Format("2006-01-02")
- continue
- }
- j++
- dateList[j-1] += "," + time.Unix(first+int64(i)*86400, 0).Format("2006-01-02")
- }
- if len(req.AppId) > 0 {
- date := commOperatorTotalByDate(c, firstTime, req.EndDate, req.AppId)
- for _, v := range date {
- for k1, v1 := range dateList {
- if strings.Contains(v1, v["date"]) {
- appData[v["app_id"]][k1] = utils.Float64ToStr(utils.StrToFloat64(appData[v["app_id"]][k1]) + utils.StrToFloat64(v["media_revenue"])/100)
- }
- }
- }
- }
- for k, v := range appData {
- for k1, v1 := range v {
- if v1 == "" {
- appData[k][k1] = "0"
- }
- }
- }
- return appData
- }
-
- func OperatorIndexAppList(c *gin.Context, req md.IndexAppListReq) md.IndexAppListRes {
- appId := make([]string, 0)
- data := commOperatorTotalByApp(c, req, appId)
- for _, v := range data {
- appId = append(appId, v["app_id"])
- }
- start := utils.TimeStdParseUnix(req.StartDate + " 00:00:00")
- day := (utils.TimeStdParseUnix(req.EndDate+" 00:00:00") - start) / 86400
- req.EndDate = time.Unix(start-1, 0).Format("2006-01-02")
- req.StartDate = time.Unix(start-1-day*86400, 0).Format("2006-01-02")
- dataLast := commOperatorTotalByApp(c, req, appId)
- dataLastMap := make(map[string][]map[string]string)
- for _, v := range dataLast {
- dataLastMap[v["app_id"]] = make([]map[string]string, 0)
- dataLastMap[v["app_id"]] = append(dataLastMap[v["app_id"]], v)
- }
- list := make([]md.IndexAppListData, 0)
- for _, v := range data {
- _, ok := dataLastMap[v["app_id"]]
- if ok == false {
- dataLastMap[v["app_id"]] = []map[string]string{
- {"media_revenue": "0", "ecpm": "0", "exposure_count": "0", "click_count": "0", "click_rate": "0"},
- }
- }
- tmpList := []map[string]string{
- v,
- }
- dataList := []md.IndexAppListDataList{
- {Name: "广告预估收益", Type: "media_revenue", Bili: commBili(c, dataLastMap[v["app_id"]], tmpList, "media_revenue"), Value: utils.Float64ToStr(utils.StrToFloat64(v["media_revenue"]) / 100)},
- {Name: "ECPM", Type: "ecpm", Bili: commBili(c, dataLastMap[v["app_id"]], tmpList, "ecpm"), Value: utils.Float64ToStr(utils.StrToFloat64(v["ecpm"]) / 100 / utils.StrToFloat64(v["count"]))},
- {Name: "曝光量", Type: "exposure_count", Bili: commBili(c, dataLastMap[v["app_id"]], tmpList, "exposure_count"), Value: v["exposure_count"]},
- {Name: "点击量", Type: "click_count", Bili: commBili(c, dataLastMap[v["app_id"]], tmpList, "click_count"), Value: v["click_count"]},
- {Name: "点击率", Type: "click_rate", Bili: commBili(c, dataLastMap[v["app_id"]], tmpList, "click_rate"), Value: utils.GetPrec(v["click_rate"], "2") + "%"},
- }
- applet := GetAppletInfo(c, v["app_id"])
- tmp := md.IndexAppListData{
- Name: applet["name"],
- Logo: applet["logo"],
- List: dataList,
- TableList: []string{},
- }
- list = append(list, tmp)
- }
- res := md.IndexAppListRes{
- List: list,
- AppId: appId,
- Sort: []md.SelectData{
- {Name: "按收益最高", Value: "media_revenue desc"},
- {Name: "按ECPM最高", Value: "ecpm desc"},
- {Name: "按曝光量最高", Value: "exposure_count desc"},
- },
- }
- return res
- }
- func commOperatorTotal(c *gin.Context, startDate, endDate string) []map[string]string {
- sql := `
- SELECT
- SUM(exposure_count) as exposure_count,
- SUM(click_count) as click_count,
- SUM(click_rate) as click_rate,
- SUM(ecpm) as ecpm,
- SUM(media_revenue) as media_revenue
- FROM generate_wx_ad_data
- where %s
- `
- where := "is_generate_report=1 and uuid=" + c.GetString("mid")
- if startDate != "" {
- where += " and date>='" + startDate + "'"
- }
- if endDate != "" {
- where += " and date<='" + endDate + "'"
- }
- user := GetUser(c)
- appId := GetMediumIdStr(c, user.AdmId, "", "")
- if appId != "" {
- ex := strings.Split(appId, ",")
- str := ""
- for _, v := range ex {
- if str == "" {
- str += "'" + v + "'"
- } else {
- str += ",'" + v + "'"
- }
- }
- where += " and medium_id in(" + str + ")"
- }
- sql = fmt.Sprintf(sql, where)
- nativeString, _ := db.QueryNativeString(db.Db, sql)
- if len(nativeString) == 0 {
- nativeString = []map[string]string{
- {
- "media_revenue": "0",
- },
- }
- }
- return nativeString
- }
- func commOperatorTotalByApp(c *gin.Context, req md.IndexAppListReq, appId []string) []map[string]string {
- sql := `
- SELECT
- COUNT(*) as count,
- app_id as app_id,
- SUM(exposure_count) as exposure_count,
- SUM(click_count) as click_count,
- SUM(click_count)/SUM(exposure_count)*100 as click_rate,
- SUM(ecpm) as ecpm,
- SUM(media_revenue) as media_revenue
- FROM generate_wx_ad_data
- where %s group by app_id order by %s,id asc limit 50
- `
- where := "is_generate_report=1 and uuid=" + c.GetString("mid")
- if req.StartDate != "" {
- where += " and date>='" + req.StartDate + "'"
- }
- if req.EndDate != "" {
- where += " and date<='" + req.EndDate + "'"
- }
- user := GetUser(c)
- appIds := GetMediumIdStr(c, user.AdmId, req.Name, "")
- if appIds != "" {
- ex := strings.Split(appIds, ",")
- str := ""
- for _, v := range ex {
- if str == "" {
- str += "'" + v + "'"
- } else {
- str += ",'" + v + "'"
- }
- }
- where += " and medium_id in(" + str + ")"
- }
- if len(appId) > 0 {
- str := ""
- for _, v := range appId {
- if str == "" {
- str += "'" + v + "'"
- } else {
- str += ",'" + v + "'"
- }
- }
- where += " and app_id in(" + str + ")"
- }
- if req.Sort == "" {
- req.Sort = "media_revenue desc"
- }
- sql = fmt.Sprintf(sql, where, req.Sort)
- nativeString, _ := db.QueryNativeString(db.Db, sql)
- return nativeString
- }
- func commOperatorTotalByDate(c *gin.Context, startDate, endDate string, appId []string) []map[string]string {
- sql := `
- SELECT
- app_id as app_id,
- date as date,
- SUM(exposure_count) as exposure_count,
- SUM(click_count) as click_count,
- SUM(click_count)/SUM(exposure_count)*100 as click_rate,
- SUM(ecpm) as ecpm,
- SUM(media_revenue) as media_revenue
- FROM generate_wx_ad_data
- where %s group by date,app_id
- `
- where := "is_generate_report=1 and uuid=" + c.GetString("mid")
- if startDate != "" {
- where += " and date>='" + startDate + "'"
- }
- if endDate != "" {
- where += " and date<='" + endDate + "'"
- }
- if len(appId) > 0 {
- str := ""
- for _, v := range appId {
- if str == "" {
- str += "'" + v + "'"
- } else {
- str += ",'" + v + "'"
- }
- }
- where += " and app_id in(" + str + ")"
- }
- sql = fmt.Sprintf(sql, where)
- nativeString, err := db.QueryNativeString(db.Db, sql)
- fmt.Println(err)
- return nativeString
- }
|