Ver código fonte

修改统计注册,主播筛选

neo 1 ano atrás
pai
commit
6da61cc29f
5 arquivos alterados com 118 adições e 51 exclusões
  1. 19 10
      controllers/register.go
  2. 33 28
      events/register.go
  3. 14 3
      models/role.go
  4. 21 0
      models/user.go
  5. 31 10
      views/register.tpl

+ 19 - 10
controllers/register.go

@@ -22,28 +22,37 @@ func (c *RegisterController) Get() {
22 22
 		c.Ctx.Redirect(302, "/accountlogin")
23 23
 		return
24 24
 	}
25
-	c.Data["username"] = userinfo.(*LoginInfo).Username
25
+	username := userinfo.(*LoginInfo).Username
26
+	c.Data["username"] = username
26 27
 	c.Data["token"] = models.GetToken()
27
-	userPermission := models.GetPermission(userinfo.(*LoginInfo).Username)
28
+	userPermission := models.GetPermission(username)
28 29
 	if (userPermission & (1 << uint(models.ModelStatment))) == 0 {
29 30
 		c.Ctx.Redirect(302, "/accountlogin")
30 31
 		return
31 32
 	}
32
-	serverId := c.GetString("server_id")
33
-	if serverId == "" {
34
-		serverId = "1001"
35
-	}
33
+	select_username := c.GetString("select_username")
36 34
 	days, _ := c.GetInt("days")
37
-	log.Printf("RegisterController days[%d]", days)
38 35
 	if days == 0 {
39 36
 		days = 7
40 37
 	}
41 38
 	log.Printf("RegisterController days[%d]", days)
42 39
 
43
-	series, categories := events.Register_get_range_day_time_count(days, serverId)
44
-	filename := events.Save_register_records(series, userinfo.(*LoginInfo).Username)
40
+	users, _ := models.GetTypeUserList("主播")
41
+	shareCode := ""
42
+	if select_username != "" {
43
+		shareCode = models.GetUserShareCode(select_username)
44
+	}
45
+	promoter := models.IsUserPromoter(username)
46
+	if promoter == 1 {
47
+		select_username = username
48
+		shareCode = models.GetUserShareCode(username)
49
+	}
50
+	series, categories := events.Register_get_range_day_time_count(days, shareCode)
51
+	filename := events.Save_register_records(series, username)
45 52
 	c.Data["Series"], c.Data["Categories"] = series, categories
46
-	c.Data["Server_id"] = serverId
53
+	c.Data["SelectUserName"] = select_username
54
+	c.Data["Promoter"] = promoter
55
+	c.Data["users"] = users
47 56
 	c.Data["Days"] = days
48 57
 	c.Data["file"] = filename
49 58
 	if c.GetString("querydata") == "register" {

+ 33 - 28
events/register.go

@@ -1,58 +1,63 @@
1 1
 package events
2 2
 
3 3
 import (
4
-	"fmt"
5
-	"os"
6 4
 	"bufio"
5
+	"fmt"
7 6
 	"io"
8
-	"strings"
9 7
 	"math"
8
+	"os"
9
+	"strings"
10 10
 
11 11
 	"box-gm/utils"
12 12
 	"time"
13
+
13 14
 	// "log"
14
-	"github.com/tealeg/xlsx"
15 15
 	"github.com/astaxie/beego"
16
+	"github.com/tealeg/xlsx"
16 17
 )
17 18
 
18 19
 // 注册分布
19
-func Register_get_day_time_count(date string, serverId string) (map[int]int, int) {
20
+func Register_get_day_time_count(date string, shareCode string) (map[int]int, int) {
20 21
 	var timeCount = make(map[int]int)
21
-	
22
-	f, err := os.Open(fmt.Sprintf("%s/register-%s.log", utils.GetKeyConf("events", "path"), date))
22
+
23
+	filename := fmt.Sprintf("%s/register-%s.log", utils.GetKeyConf("events", "path"), date)
24
+	f, err := os.Open(filename)
23 25
 	if err != nil {
24 26
 		return timeCount, 0
25 27
 	}
26 28
 	defer f.Close()
27 29
 
28
-
29
-	startTime := utils.GetTime(date+" 00:00:00")
30
+	startTime := utils.GetTime(date + " 00:00:00")
30 31
 	totalCount := 0
31
-	
32
+
32 33
 	buff := bufio.NewReader(f)
33 34
 	for {
34 35
 		line, err := buff.ReadString('\n')
35 36
 
36
-		if err != nil || io.EOF == err {
37
+		if (err != nil || io.EOF == err) && line == "" {
37 38
 			break
38 39
 		}
39 40
 		line = strings.TrimSpace(line)
40 41
 
41 42
 		arr := strings.Split(line, ";")
42
-		if serverId == "0" || arr[1] == serverId {
43
-			eventTime := utils.GetTime(arr[0])
43
+		if shareCode == "" || arr[3] == shareCode {
44
+			eventTime := utils.GetTime(arr[1])
44 45
 
45 46
 			sec := eventTime - startTime
46
-			sec = int(math.Floor(float64(sec/300)))
47
-			timeCount[sec] ++
48
-			totalCount ++
47
+			sec = int(math.Floor(float64(sec / 300)))
48
+			timeCount[sec]++
49
+			totalCount++
50
+		}
51
+
52
+		if err != nil || io.EOF == err {
53
+			break
49 54
 		}
50 55
 	}
51 56
 
52 57
 	return timeCount, totalCount
53 58
 }
54 59
 
55
-func Register_get_range_day_time_count(days int, serverId string) ([]*tgSeries, []string) {
60
+func Register_get_range_day_time_count(days int, shareCode string) ([]*tgSeries, []string) {
56 61
 	var series []*tgSeries
57 62
 	currTime := int(time.Now().Unix())
58 63
 	dayCount := 0
@@ -61,26 +66,26 @@ func Register_get_range_day_time_count(days int, serverId string) ([]*tgSeries,
61 66
 		date := time.Unix(int64(tiEvent), 0).Format("2006-01-02")
62 67
 
63 68
 		item := &tgSeries{}
64
-		glCount, totalCount := Register_get_day_time_count(date, serverId)
69
+		glCount, totalCount := Register_get_day_time_count(date, shareCode)
65 70
 		item.Name = date + fmt.Sprintf(" 总人数:%d", totalCount)
66
-		for i:=0; i < 289; i++ {
71
+		for i := 0; i < 289; i++ {
67 72
 			item.Data = append(item.Data, glCount[i])
68 73
 		}
69 74
 		item.MapCount = glCount
70 75
 		// log.Printf("item[%v]", item)
71 76
 		series = append(series, item)
72 77
 
73
-		dayCount ++
78
+		dayCount++
74 79
 		if dayCount > days {
75 80
 			break
76 81
 		}
77 82
 	}
78
-	
79
-	var arrCate [] string
83
+
84
+	var arrCate []string
80 85
 	loc, _ := time.LoadLocation("Local")
81
-	theTime, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Now().Format("2006-01-02") + " 00:00:00", loc)
82
-	for i:=0; i < 289; i++ {
83
-		ti := theTime.Add(time.Minute*5*time.Duration(i))
86
+	theTime, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Now().Format("2006-01-02")+" 00:00:00", loc)
87
+	for i := 0; i < 289; i++ {
88
+		ti := theTime.Add(time.Minute * 5 * time.Duration(i))
84 89
 		arrCate = append(arrCate, fmt.Sprintf("%02d:%02d:%02d", ti.Hour(), ti.Minute(), ti.Second()))
85 90
 	}
86 91
 	return series, arrCate
@@ -106,13 +111,13 @@ func Save_register_records(series []*tgSeries, user string) string {
106 111
 	row.AddCell().Value = "人数"
107 112
 
108 113
 	loc, _ := time.LoadLocation("Local")
109
-	theTime, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Now().Format("2006-01-02") + " 00:00:00", loc)
114
+	theTime, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Now().Format("2006-01-02")+" 00:00:00", loc)
110 115
 	for i := 0; i < len(series); i++ {
111 116
 		item := series[i]
112 117
 		for k, v := range item.MapCount {
113 118
 			row = sheet.AddRow()
114 119
 			row.AddCell().SetString(item.Name)
115
-			ti := theTime.Add(time.Minute*5*time.Duration(k))
120
+			ti := theTime.Add(time.Minute * 5 * time.Duration(k))
116 121
 			row.AddCell().SetString(fmt.Sprintf("%02d:%02d:%02d", ti.Hour(), ti.Minute(), ti.Second()))
117 122
 			row.AddCell().SetInt(v)
118 123
 		}
@@ -127,4 +132,4 @@ func Save_register_records(series []*tgSeries, user string) string {
127 132
 	}
128 133
 
129 134
 	return name
130
-}
135
+}

+ 14 - 3
models/role.go

@@ -2,9 +2,10 @@ package models
2 2
 
3 3
 import (
4 4
 	"errors"
5
+	"log"
6
+
5 7
 	"github.com/astaxie/beego/orm"
6 8
 	"github.com/astaxie/beego/validation"
7
-	"log"
8 9
 )
9 10
 
10 11
 type Role struct {
@@ -42,7 +43,7 @@ func GetRolelist() (roles []orm.Params, count int64) {
42 43
 	return roles, count
43 44
 }
44 45
 
45
-//添加权限组
46
+// 添加权限组
46 47
 func AddRole(r *Role) (int64, error) {
47 48
 	if err := checkRole(r); err != nil {
48 49
 		return 0, err
@@ -56,7 +57,7 @@ func AddRole(r *Role) (int64, error) {
56 57
 	return id, err
57 58
 }
58 59
 
59
-//更新用户
60
+// 更新用户
60 61
 func UpdateRole(r *Role) (int64, error) {
61 62
 	if err := checkRole(r); err != nil {
62 63
 		return 0, err
@@ -92,3 +93,13 @@ func GetRoleById(id int64) (role *Role) {
92 93
 	}
93 94
 	return role
94 95
 }
96
+
97
+func GetRoleIdByName(name string) int64 {
98
+	role := &Role{Name: name}
99
+	o := orm.NewOrm()
100
+	err := o.Read(role, "Name")
101
+	if err != nil {
102
+		return -1
103
+	}
104
+	return role.Id
105
+}

+ 21 - 0
models/user.go

@@ -49,6 +49,17 @@ func GetUserlist() (users []orm.Params, count int64) {
49 49
 	return users, count
50 50
 }
51 51
 
52
+// 主播类型
53
+func GetTypeUserList(name string) (users []orm.Params, count int64) {
54
+	roleId := GetRoleIdByName(name)
55
+	o := orm.NewOrm()
56
+	user := new(User)
57
+	qs := o.QueryTable(user).Filter("Role", roleId)
58
+	qs.Values(&users)
59
+	count, _ = qs.Count()
60
+	return users, count
61
+}
62
+
52 63
 // 添加用户
53 64
 func AddUser(u *User) (int64, error) {
54 65
 	if err := checkUser(u); err != nil {
@@ -166,3 +177,13 @@ func GetUserRoleName(username string) string {
166 177
 	}
167 178
 	return p.Name
168 179
 }
180
+
181
+// 账号是否主播
182
+func IsUserPromoter(username string) int {
183
+	roleName := GetUserRoleName(username)
184
+	status := 0
185
+	if roleName == "主播" {
186
+		status = 1
187
+	}
188
+	return status
189
+}

+ 31 - 10
views/register.tpl

@@ -12,11 +12,18 @@
12 12
         <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
13 13
         <script src="http://code.highcharts.com/highcharts.js"></script>
14 14
     </head>
15
-    <body onload="InitParams({{.Server_id}}, {{.Days}})">
15
+    <body onload="InitParams({{.SelectUserName}}, {{.Days}}, {{.Promoter}})">
16
+    <input type="text" id="token" value={{.token}} hidden=true>
16 17
     <div class="x-body layui-anim layui-anim-up">
17 18
         <blockquote class="layui-elem-quote">
18
-          指定服务器:<input id="server_id" type="text" name="服务器ID" />
19
-              
19
+          <label for="select_username" id="label_username">主播列表:</label>
20
+          <select name="" id="select_username" style="width:256px;">
21
+            <option value="">全部</option>
22
+            {{range .users}}
23
+              <option value={{.Username}}>{{.Username}}</option>
24
+            {{end}}
25
+          </select>
26
+          {{"       "}}
20 27
           过往天数:<input id="days" type="text" name="天数" />
21 28
           <br>
22 29
           <br>
@@ -87,19 +94,33 @@
87 94
         $('#container').highcharts(json);
88 95
       });
89 96
     
90
-      function InitParams(ServerId, Days) {
91
-        if (ServerId.length > 0) {
92
-            document.getElementById("server_id").value = ServerId;
97
+      var promoter = 0
98
+      function InitParams(SelectUserName, Days, Promoter) {
99
+        promoter = Promoter
100
+        if (SelectUserName.length > 0) {
101
+            var obj = document.getElementById("select_username");
102
+            if (obj.options.length > 0){
103
+              for (var i = 0; i < obj.options.length; i ++){
104
+                if (obj.options[i].value == SelectUserName) {
105
+                  obj.options[i].selected = true;
106
+                  break
107
+                }
108
+              }
109
+            }
93 110
         }
94 111
         if (Days != null && Days > 0) {
95 112
             document.getElementById("days").value = Days;
96 113
         }
114
+        if (promoter == 1){
115
+          document.getElementById("label_username").hidden = true
116
+          document.getElementById("select_username").hidden = true
117
+        }
97 118
       }
98 119
 
99 120
       function submitUpdate () {
100
-        var sid = document.getElementById("server_id").value;
121
+        var sid = document.getElementById("select_username").value;
101 122
         var days = document.getElementById("days").value;
102
-        var text = "server_id=" + encodeURI(sid) + "&days=" + encodeURI(days);
123
+        var text = "select_username=" + encodeURI(sid) + "&days=" + encodeURI(days);
103 124
         
104 125
         $.ajax({
105 126
           type:"get",
@@ -122,9 +143,9 @@
122 143
         });
123 144
       }
124 145
       function submitDownload () {
125
-        var sid = document.getElementById("server_id").value;
146
+        var sid = document.getElementById("select_username").value;
126 147
         var days = document.getElementById("days").value;
127
-        var text = "server_id=" + encodeURI(sid) + "&days=" + encodeURI(days) + "&querydata=register";
148
+        var text = "select_username=" + encodeURI(sid) + "&days=" + encodeURI(days) + "&querydata=register";
128 149
         
129 150
         $.ajax({
130 151
           type:"get",