소스 검색

增加fohow user grouth 接口

abiao 5 년 전
부모
커밋
f504218473

+ 95 - 0
go/gopath/src/fohow-statement-api/controllers/fohow_user_controller/user_grouth.go

@@ -0,0 +1,95 @@
+package fohow_user_controller
+
+import (
+	"fmt"
+	"fohow-statement-api/models"
+	"github.com/astaxie/beego"
+	"strconv"
+	"time"
+)
+
+type FohowUserGrouthController struct {
+	beego.Controller
+}
+
+// @Title Get
+// @Description get d5c's user_grouth : FOHOW平台的近六月的用户增长(注册用户,新代理)
+// @Param	Authorization	header 	string	true	"格式: Token XXXXXX"
+// @Success 200 {object} Ret
+// @router / [get]
+func (self *FohowUserGrouthController) Get() {
+
+	type Ret struct {
+		Months              []string `json:"months"`             //最近6个月
+		MonthNewUsers       []int64  `json:"month_users"`        //每月新增粉丝用户
+		MonthNewInvestUsers []int64  `json:"month_invest_users"` //每月新增代理
+		MonthNewShopUsers   []int64  `json:"month_shop_users"`   //每月新增店长
+		MonthTotalOrders    []int64  `json:"month_total_orders"` //每月订单总额
+	}
+	now := time.Now()
+	startTime := now.AddDate(0, -5, 0) //前五个月
+	endTime := now.AddDate(0, 1, 0)
+
+	// 2017-10-01 00:00:00 前五个月的第一天
+	start := time.Date(startTime.Year(), startTime.Month(), 1, 0, 0, 0, 0, time.Local)
+	// 2018-03-01 00:00:00 下一个月的第一天
+	end := time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, time.Local)
+
+	beego.BeeLogger.Warn("getting fohow's user_grouth: %s, %s", start.Format("2006-01-02"), end.Format("2006-01-02"))
+
+	var months []string
+	var monthNewUsers []int64
+	var monthNewInvestUsers []int64
+	var monthNewShops []int64
+	var monthNewTotalOrders []int64
+
+	monthNewUserList := models.GetFohowMonthNewUsers(start.Format("2006-01-02"), end.Format("2006-01-02"))
+
+	monthNewInvestUserList := models.GetFohowRankMonthNewUsers(start, end)
+	monthNewShopList := models.GetFohowMonthNewShops(start.Format("2006-01-02"), end.Format("2006-01-02"))
+
+	monthNewOrderLists := models.GetFohowMonthNewOrderTotals(start.Format("2006-01-02"), end.Format("2006-01-02"))
+
+	for i := 0; i < 6; i++ {
+
+		month := start.AddDate(0, i, 0).Month()
+
+		months = append(months, fmt.Sprintf("%d月", month))
+
+		ym := start.AddDate(0, i, 0).Format("200601")
+
+		ymInt, _ := strconv.ParseInt(ym, 0, 64)
+
+		if tmp := models.YearMonthIsContainInList(ymInt, monthNewUserList); tmp != nil {
+
+			monthNewUsers = append(monthNewUsers, tmp.Count)
+		} else {
+			monthNewUsers = append(monthNewUsers, 0)
+		}
+
+		if tmp := models.YearMonthIsContainInList(ymInt, monthNewInvestUserList); tmp != nil {
+			monthNewInvestUsers = append(monthNewInvestUsers, tmp.Count)
+		} else {
+			monthNewInvestUsers = append(monthNewInvestUsers, 0)
+		}
+		if tmp := models.YearMonthIsContainInList(ymInt, monthNewShopList); tmp != nil {
+
+			monthNewShops = append(monthNewShops, tmp.Count)
+		} else {
+			monthNewShops = append(monthNewShops, 0)
+		}
+		if tmp := models.YearMonthIsContainInList(ymInt, monthNewOrderLists); tmp != nil {
+
+			monthNewTotalOrders = append(monthNewTotalOrders, tmp.Count)
+		} else {
+			monthNewTotalOrders = append(monthNewTotalOrders, 0)
+		}
+
+	}
+
+	beego.BeeLogger.Warn("geted fohow's user_grouth: %s, %s", start.Format("2006-01-02"), end.Format("2006-01-02"))
+
+	self.Data["json"] = &Ret{Months: months, MonthNewUsers: monthNewUsers, MonthNewInvestUsers: monthNewInvestUsers, MonthNewShopUsers: monthNewShops, MonthTotalOrders: monthNewTotalOrders}
+	self.ServeJSON()
+
+}

+ 148 - 0
go/gopath/src/fohow-statement-api/models/d5c_user.go

@@ -207,6 +207,154 @@ func GetMonthNewUsers(startTime, endTime string) (list []*MonthItem) {
 	return list
 }
 
+//某时间段里,fohow每月用户增长量
+func GetFohowMonthNewUsers(startTime, endTime string) (list []*MonthItem) {
+
+	o := orm.NewOrm()
+	o.Using("fohow_data_source")
+
+	sql := `
+		SELECT
+			date_format(
+				date_add(created_at, INTERVAL 8 HOUR),
+				'%s'
+			) as ym,
+			count(*) as c,
+			date_format(
+				date_add(created_at, INTERVAL 8 HOUR),
+				'%s'
+			) as m
+		FROM
+			wx_users
+		WHERE
+			date_add(created_at, INTERVAL 8 HOUR) < '%s'
+		AND date_add(created_at, INTERVAL 8 HOUR) >= '%s'
+		GROUP BY
+			ym
+		ORDER BY
+			ym ASC;
+		`
+	sql = fmt.Sprintf(sql, "%Y%m", "%m", endTime, startTime)
+	_, err := o.Raw(sql).QueryRows(&list)
+
+	if err != nil {
+		beego.BeeLogger.Warn("models.GetFohowMonthNewUsers(%s,%s) err(%s) ", startTime, endTime, err)
+		return nil
+	}
+
+	return list
+}
+
+//某时间段里,fohow代理每月用户增长量
+func GetFohowRankMonthNewUsers(startTime, endTime time.Time) (list []*MonthItem) {
+
+	o := orm.NewOrm()
+	o.Using("fohow_data_source")
+
+	sql := `
+		SELECT
+			DATE_FORMAT(FROM_UNIXTIME(partner_time),'%s') as ym,
+			count(*) as c,
+			DATE_FORMAT(FROM_UNIXTIME(partner_time),'%s') as m
+		FROM
+			wx_users
+		WHERE
+			and UNIX_TIMESTAMP('%s') <= partner_time
+			AND partner_time < UNIX_TIMESTAMP('%s')
+		AND rank=1 and show_invite_mode=true
+		GROUP BY
+			ym
+		ORDER BY
+			ym ASC;
+		`
+	sql = fmt.Sprintf(sql, "%Y%m", "%m", endTime, startTime)
+	_, err := o.Raw(sql).QueryRows(&list)
+
+	if err != nil {
+		beego.BeeLogger.Warn("models.GetFohowMonthNewUsers(%s,%s) err(%s) ", startTime, endTime, err)
+		return nil
+	}
+
+	return list
+}
+
+//某时间段里,fohow每月用户增长量
+func GetFohowMonthNewShops(startTime, endTime string) (list []*MonthItem) {
+
+	o := orm.NewOrm()
+	o.Using("fohow_data_source")
+
+	sql := `
+		SELECT
+			date_format(
+				date_add(pass_time, INTERVAL 8 HOUR),
+				'%s'
+			) as ym,
+			count(*) as c,
+			date_format(
+				date_add(pass_time, INTERVAL 8 HOUR),
+				'%s'
+			) as m
+		FROM
+			shop_applications
+		WHERE
+			date_add(pass_time, INTERVAL 8 HOUR) < '%s'
+		AND date_add(pass_time, INTERVAL 8 HOUR) >= '%s'
+		GROUP BY
+			ym
+		ORDER BY
+			ym ASC;
+		`
+	sql = fmt.Sprintf(sql, "%Y%m", "%m", endTime, startTime)
+	_, err := o.Raw(sql).QueryRows(&list)
+
+	if err != nil {
+		beego.BeeLogger.Warn("models.GetFohowMonthNewShops(%s,%s) err(%s) ", startTime, endTime, err)
+		return nil
+	}
+
+	return list
+}
+
+//某时间段里,fohow每月用户增长量
+func GetFohowMonthNewOrderTotals(startTime, endTime string) (list []*MonthItem) {
+
+	o := orm.NewOrm()
+	o.Using("fohow_data_source")
+
+	sql := `
+		SELECT
+			date_format(
+				date_add(created_at, INTERVAL 8 HOUR),
+				'%s'
+			) as ym,
+			sum(total_price)/100 as c,
+			date_format(
+				date_add(created_at, INTERVAL 8 HOUR),
+				'%s'
+			) as m
+		FROM
+			orders
+		WHERE
+			date_add(created_at, INTERVAL 8 HOUR) < '%s'
+		AND date_add(created_at, INTERVAL 8 HOUR) >= '%s'
+		AND status in ('processing','dispatch','complete')
+		GROUP BY
+			ym
+		ORDER BY
+			ym ASC;
+		`
+	sql = fmt.Sprintf(sql, "%Y%m", "%m", endTime, startTime)
+	_, err := o.Raw(sql).QueryRows(&list)
+
+	if err != nil {
+		beego.BeeLogger.Warn("models.GetFohowMonthNewOrderTotals(%s,%s) err(%s) ", startTime, endTime, err)
+		return nil
+	}
+
+	return list
+}
+
 // 获取平台投资人总数
 func GetTotalInvestUserCount() int64 {
 

+ 2 - 2
go/gopath/src/fohow-statement-api/models/fohow_wx_user.go

@@ -1071,7 +1071,7 @@ func GetRank1UsersTotalCount() int64 {
 //店主用户总数
 func GetRank2UsersTotalCount() int64 {
 	o := orm.NewOrm()
-	o.Using("data_source")
+	o.Using("fohow_data_source")
 
 	type Ret struct {
 		Count int64 `json:"count"`
@@ -1079,7 +1079,7 @@ func GetRank2UsersTotalCount() int64 {
 
 	var ret Ret
 
-	sql := fmt.Sprintf("select count(1) as count from %s ", users_table)
+	sql := fmt.Sprintf("select count(1) as count from %s where show_invite_mode=true and rank=2", fohow_wx_user_table)
 
 	err := o.Raw(sql).QueryRow(&ret)
 

+ 6 - 0
go/gopath/src/fohow-statement-api/routers/router.go

@@ -33,6 +33,7 @@ import (
 	"fohow-statement-api/controllers/d5c_user_controller"
 	"fohow-statement-api/controllers/d5c_zt_invest_controller"
 	"fohow-statement-api/controllers/fohow_home_page_stat_controller"
+	"fohow-statement-api/controllers/fohow_user_controller"
 	"fohow-statement-api/controllers/rabbit_balance_consume_controller"
 	"fohow-statement-api/controllers/rabbit_exchange_platform_controller"
 	"fohow-statement-api/controllers/rabbit_merchant_controller"
@@ -436,6 +437,11 @@ func init() {
 				&fohow_home_page_stat_controller.FohowLeftTopDataOfHomePageController{},
 			),
 		),
+		beego.NSNamespace("/fohow_user_grouth",
+			beego.NSInclude(
+				&fohow_user_controller.FohowUserGrouthController{},
+			),
+		),
 	)
 	beego.AddNamespace(ns)
 }