版本更新

This commit is contained in:
hahwu 2025-03-06 15:52:17 +08:00
parent bf5867c7b7
commit 3f1130d367
16 changed files with 606 additions and 292 deletions

View File

@ -40,3 +40,12 @@ type Card struct {
Elements string
Tag1 string
}
type CardVchartHeat struct {
Time string `json:"time"`
Value float64 `json:"value"`
}
type CardVchartData struct {
Values string
}

View File

@ -66,3 +66,21 @@ type Server struct {
StartTime string `json:"StartTime"`
PlayerNum int `json:"PlayerNum"`
}
type HeatData struct {
Key []string `json:"key"`
Value []int `json:"value"`
Value2 []int `json:"value2"`
}
type LevelData struct {
Key []string `json:"key"`
Value []int `json:"value"`
Value2 []int `json:"value2"`
}
type DecorateData struct {
Key []string `json:"key"`
Value []int `json:"value"`
Value2 []int `json:"value2"`
}

View File

@ -26,6 +26,14 @@ func FeishuSendInfo(c *gin.Context) {
}
}
func FeishuSendInfo2(c *gin.Context) {
// TODO
err := feishu.SendOperationMsg2(3)
if err != nil {
log.Printf("failed to send operation message: %v", err)
}
}
func FeishuSendWeekInfo(c *gin.Context) {
// TODO
Result, err := util.GetOperation(3)

View File

@ -8,6 +8,7 @@ import (
"bytes"
"encoding/json"
"fmt"
"log"
"net/http"
"strings"
"time"
@ -104,63 +105,109 @@ func SendNoticeMsg(AppName, ServerName, notice string) error {
// table_raw_array_1
func SendOperationMsg(Operation *Type.Operation) error {
card_md_data := Type.CardMdData{
Date: Operation.Date,
Register: Operation.Register,
Recharge: Operation.Recharge,
RechargeUserNum: Operation.RechargeUserNum,
ChurnRate: Operation.ChurnRate,
ARPU: Operation.ARPU,
YRegister: Operation.Retain[0].Register,
YRecharge: Operation.Retain[0].Recharge,
YLogin: Operation.Retain[0].Login,
PerOnlineTime: Operation.Retain[0].PerOnlineTime,
PerOrderNum: Operation.Retain[0].PerOrderNum,
C1: util.Ternary(Operation.Retain[0].PerOnlineTime > Operation.Retain[1].PerOnlineTime, common.FONT_COLOR_UP, common.FONT_COLOR_DOWN).(string),
C2: util.Ternary(Operation.Retain[0].PerOrderNum > Operation.Retain[1].PerOrderNum, common.FONT_COLOR_UP, common.FONT_COLOR_DOWN).(string),
}
data1 := Type.MarkDown{
Markdown: util.ToTmplStr(util.ParseTmpl("./template/card_md_1.tmpl", card_md_data)),
}
MarkDown := util.ParseTmpl("./template/card_md.tmpl", data1)
var table_tmpl string
var table_tmpl_rows []string
// retainStr := ""
// for _, v := range data.Retain {
// retainStr += fmt.Sprintf("| %s | %d | %d | %.2f | %.2f%% | %.2f%% | %.2f%% | %.2f%% |\n", v.Date, v.Register, v.Login, v.Recharge, 100*float64(v.SecondRemain)/float64(v.Register), 100*float64(v.ThirdRemain)/float64(v.Register), 100*float64(v.SeventhRemain)/float64(v.Register), 100*float64(v.ThirtiethRemain)/float64(v.Register))
// }
RetainData := make([]map[string]interface{}, 0)
for _, v := range Operation.Retain {
row_data := Type.RowData{
Date: v.Date,
Login: v.Login,
Register: v.Register,
Recharge: v.Recharge,
SecondRemain: fmt.Sprintf("%.2f%%", 100*util.FloatDiv(v.SecondRemain, v.Register, 5)),
ThirdRemain: fmt.Sprintf("%.2f%%", 100*util.FloatDiv(v.ThirdRemain, v.Register, 5)),
SeventhRemain: fmt.Sprintf("%.2f%%", 100*util.FloatDiv(v.SeventhRemain, v.Register, 5)),
var retain2, retain3, retain7 string
if v.Register == 0 {
retain2 = "0.00%"
retain3 = "0.00%"
retain7 = "0.00%"
} else {
retain2 = fmt.Sprintf("%.2f%%", 100*float64(v.SecondRemain)/float64(v.Register))
retain3 = fmt.Sprintf("%.2f%%", 100*float64(v.ThirdRemain)/float64(v.Register))
retain7 = fmt.Sprintf("%.2f%%", 100*float64(v.SeventhRemain)/float64(v.Register))
}
table_tmpl_rows = append(table_tmpl_rows, util.ParseTmpl("./template/card_table_row.tmpl", row_data))
RetainData = append(RetainData, map[string]interface{}{
"Date": v.Date,
"Reg": v.Register,
"Login": v.Login,
"Pay": v.Recharge,
"Retain2": retain2,
"Retain3": retain3,
"Retain7": retain7,
// "Retain14": fmt.Sprintf("%.2f%%", 100*float64(v.ThirtiethRemain)/float64(v.Register)),
})
}
var c1, c2 string
if Operation.Retain[0].PerOnlineTime > Operation.Retain[1].PerOnlineTime {
c1 = common.FONT_COLOR_UP
} else {
c1 = common.FONT_COLOR_DOWN
}
if Operation.Retain[0].PerOrderNum > Operation.Retain[1].PerOrderNum {
c2 = common.FONT_COLOR_UP
} else {
c2 = common.FONT_COLOR_DOWN
}
str := fmt.Sprintf(`
# 日期 %s
-----------------------------
## 总体数据
- **注册**%d
- **充值**%.2f
- **流失率**%.2f%%
> 超过7天未登录视为流失
## 昨日数据
- **注册**%d
- **充值**%.2f
- **登录**%d
- **平均在线时长**<font color="%s">%.2f</font>分钟
- **平均完成订单数**<font color="%s">%.2f</font>
----------------------
## 留存数据
`, time.Now().In(time.UTC).Format("2006-01-02"),
Operation.Register, Operation.Recharge, Operation.ChurnRate, Operation.Retain[0].Register, Operation.Retain[0].Recharge, Operation.Retain[0].Login,
c1, Operation.Retain[0].PerOnlineTime, c2, Operation.Retain[0].PerOrderNum)
// 创建请求体
payload := map[string]interface{}{
"msg_type": "interactive",
"card": map[string]interface{}{
"type": "template",
"data": map[string]interface{}{
"template_id": "AAqBcfmUwQya1",
"template_version_name": "1.0.10",
"template_variable": map[string]interface{}{
"msg": str,
"appName": "merge_pet_london",
"table_raw_array_1": RetainData,
},
},
},
}
payloadBytes, err := json.Marshal(payload)
if err != nil {
return err
}
table_tmpl_data := Type.CardTable{
Rows: strings.Join(table_tmpl_rows, ","),
// 创建HTTP请求
req, err := http.NewRequest("POST", common.GetOperationUrl(), bytes.NewBuffer(payloadBytes))
if err != nil {
return err
}
table_tmpl = util.ParseTmpl("./template/card_table.tmpl", table_tmpl_data)
req.Header.Set("Content-Type", "application/json")
elements := []string{
MarkDown,
table_tmpl,
// 发送请求
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
elementsStr := strings.Join(elements, ",")
data := Type.Card{
Title: "运营日报",
Elements: elementsStr,
Tag1: "UK",
defer resp.Body.Close()
// 检查响应状态码
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
}
s := util.ParseTmpl("./template/card.tmpl", data)
if !json.Valid([]byte(s)) {
return fmt.Errorf("invalid JSON format")
}
c := client.GetClient()
c.SendGroupMsg(common.GetOperationChatId(), common.FEISHU_CART_TYPE, s)
return nil
}
@ -343,3 +390,102 @@ func SendWeekOperationMsg(data *Type.Operation) error {
return nil
}
func SendOperationMsg2(AppId int) error {
Operation, err := util.GetOperation(AppId)
if err != nil {
return err
}
card_md_data := Type.CardMdData{
Date: Operation.Date,
Register: Operation.Register,
Recharge: Operation.Recharge,
RechargeUserNum: Operation.RechargeUserNum,
ChurnRate: Operation.ChurnRate,
ARPU: Operation.ARPU,
YRegister: Operation.Retain[0].Register,
YRecharge: Operation.Retain[0].Recharge,
YLogin: Operation.Retain[0].Login,
PerOnlineTime: Operation.Retain[0].PerOnlineTime,
PerOrderNum: Operation.Retain[0].PerOrderNum,
C1: util.Ternary(Operation.Retain[0].PerOnlineTime > Operation.Retain[1].PerOnlineTime, common.FONT_COLOR_UP, common.FONT_COLOR_DOWN).(string),
C2: util.Ternary(Operation.Retain[0].PerOrderNum > Operation.Retain[1].PerOrderNum, common.FONT_COLOR_UP, common.FONT_COLOR_DOWN).(string),
}
data1 := Type.MarkDown{
Markdown: util.ToTmplStr(util.ParseTmpl("./template/card_md_1.tmpl", card_md_data)),
}
MarkDown := util.ParseTmpl("./template/card_md.tmpl", data1)
var table_tmpl string
var table_tmpl_rows []string
for _, v := range Operation.Retain {
row_data := Type.RowData{
Date: v.Date,
Login: v.Login,
Register: v.Register,
Recharge: v.Recharge,
SecondRemain: fmt.Sprintf("%.2f%%", 100*util.FloatDiv(v.SecondRemain, v.Register, 5)),
ThirdRemain: fmt.Sprintf("%.2f%%", 100*util.FloatDiv(v.ThirdRemain, v.Register, 5)),
SeventhRemain: fmt.Sprintf("%.2f%%", 100*util.FloatDiv(v.SeventhRemain, v.Register, 5)),
}
table_tmpl_rows = append(table_tmpl_rows, util.ParseTmpl("./template/card_table_row.tmpl", row_data))
}
table_tmpl_data := Type.CardTable{
Rows: strings.Join(table_tmpl_rows, ","),
}
table_tmpl = util.ParseTmpl("./template/card_table.tmpl", table_tmpl_data)
HeatArr := make([]string, 0)
statisticsData, err := util.GetDailyHeat(AppId)
for k, v := range statisticsData.Key {
HeatArr = append(HeatArr, fmt.Sprintf(`{"time":"%s","value":%d}`, v, statisticsData.Value[k]))
}
if err != nil {
log.Printf("failed to get statistics data: %v", err)
}
VchartArea := util.ParseTmpl("./template/card_vchart_area.tmpl", Type.CardVchartData{Values: strings.Join(HeatArr, ",")})
LevelArr := make([]string, 0)
levelData, _ := util.GetLevelData(AppId)
for k, v := range levelData.Key {
LevelArr = append(LevelArr, fmt.Sprintf(`{"level":"%s","value":%d, "type":"all"}`, v, levelData.Value[k]))
LevelArr = append(LevelArr, fmt.Sprintf(`{"level":"%s","value":%d, "type":"churn"}`, v, levelData.Value2[k]))
}
VchartBar := util.ParseTmpl("./template/card_vchart_bar.tmpl", Type.CardVchartData{Values: strings.Join(LevelArr, ",")})
DecoArr := make([]string, 0)
decoData, _ := util.GetDecorateData(AppId)
for k, v := range decoData.Key {
DecoArr = append(DecoArr, fmt.Sprintf(`{"deco_step":"%s","value":%d, "type":"all"}`, v, decoData.Value[k]))
DecoArr = append(DecoArr, fmt.Sprintf(`{"deco_step":"%s","value":%d, "type":"churn"}`, v, decoData.Value2[k]))
}
VchartBarDeco := util.ParseTmpl("./template/card_vchart_bar_d.tmpl", Type.CardVchartData{Values: strings.Join(DecoArr, ",")})
hr := util.ParseTmpl("./template/card_hr.tmpl", nil)
elements := []string{
MarkDown,
table_tmpl,
hr,
VchartArea,
hr,
VchartBar,
hr,
VchartBarDeco,
}
elementsStr := strings.Join(elements, ",")
data := Type.Card{
Title: "运营日报",
Elements: elementsStr,
Tag1: "UK",
}
s := util.ParseTmpl("./template/card.tmpl", data)
if !json.Valid([]byte(s)) {
fmt.Println(s)
return fmt.Errorf("invalid JSON format")
}
c := client.GetClient()
c.SendGroupMsg(common.GetOperationChatId(), common.FEISHU_CART_TYPE, s)
return nil
}

View File

@ -288,3 +288,67 @@
2025/03/04 11:30:56 map[]
2025/03/04 11:30:56 remain panic: runtime error: integer divide by zero
2025/03/04 11:30:56 end statistics
2025/03/06 09:47:30 start statistics
2025/03/06 09:47:30 map[300100623:252 300100875:46 300101164:407]
2025/03/06 09:47:31 remain 2025-03-06 success
2025/03/06 09:47:31 map[300100087:1834 300100104:665 300100194:541 300100240:523 300100269:19052 300100287:474 300100353:1969 300100401:610 300100432:1080 300100493:1312 300100501:1319 300100508:949 300100521:1017 300100546:1952 300100623:1554 300100633:6851 300100642:1384 300100649:1973 300100713:455 300100740:1464 300100772:664 300100776:3322 300100781:1217 300100787:991 300100810:251 300100838:383 300100853:617 300100860:855 300100861:1637 300100867:612 300100875:1943 300100893:499 300100933:451 300100963:146 300100989:313 300101002:222 300101008:360 300101063:876 300101074:684 300101117:2882 300101131:3661 300101137:3292 300101151:1914 300101152:851 300101165:4352 300101166:1251 300101169:3012 300101170:52 300101184:3110 300101188:4233 300101198:2884 300101210:22 300101255:1851 300101264:809 300101290:2898 300101305:125 300101313:1274]
2025/03/06 09:47:32 remain 2025-03-05 success
2025/03/06 09:47:32 map[300100087:2115 300100099:425 300100106:17 300100154:2055 300100194:883 300100269:9257 300100295:666 300100322:123 300100353:2515 300100432:2569 300100468:34689 300100493:759 300100501:2232 300100519:1234 300100546:539 300100623:1649 300100629:722 300100633:7649 300100642:1277 300100649:2579 300100666:398 300100713:117 300100724:14 300100740:2162 300100772:492 300100773:527 300100775:154 300100776:1976 300100781:1019 300100788:1980 300100838:894 300100844:1674 300100860:2002 300100861:788 300100867:679 300100870:108 300100893:612 300100902:84 300100909:122 300100933:890 300101018:34 300101063:3431 300101074:1861 300101131:1741 300101137:2786 300101151:3630 300101152:294 300101165:3339 300101166:1267 300101169:5183 300101184:3383 300101188:4839 300101198:5256 300101210:1792 300101213:155 300101216:300 300101245:302 300101255:2210 300101264:1870 300101290:2323 300101309:832 300101310:3113 300101311:16812 300101312:383]
2025/03/06 09:47:32 remain 2025-03-04 success
2025/03/06 09:47:33 map[300100002:122 300100053:392 300100085:2261 300100087:838 300100106:17 300100126:258 300100127:441 300100195:1281 300100240:530 300100258:1151 300100269:21957 300100290:462 300100353:2789 300100432:678 300100445:2435 300100493:222 300100501:4282 300100519:85 300100546:1148 300100623:1006 300100633:5211 300100649:459 300100713:1206 300100740:1610 300100773:1031 300100776:16508 300100781:1176 300100810:1155 300100817:1648 300100838:1240 300100844:1484 300100853:552 300100860:1523 300100867:744 300100875:382 300100912:287 300100933:1015 300100951:3614 300100979:1428 300100987:409 300100995:1015 300101008:793 300101063:4352 300101074:1324 300101090:505 300101111:98 300101123:10198 300101131:2745 300101137:2061 300101151:1477 300101165:2508 300101166:2021 300101169:3457 300101184:1902 300101188:3099 300101198:5296 300101210:1126 300101216:950 300101234:1113 300101245:236 300101251:433 300101253:44 300101255:1417 300101256:371 300101260:10042 300101261:470 300101280:564 300101287:316 300101290:620]
2025/03/06 09:47:33 remain 2025-03-03 success
2025/03/06 09:47:34 map[300100051:198 300100085:8085 300100087:1040 300100099:489 300100104:165 300100106:280 300100159:765 300100194:571 300100240:725 300100269:8101 300100290:1224 300100353:5286 300100432:1229 300100501:2593 300100546:3663 300100623:1156 300100633:7484 300100642:2961 300100649:1329 300100723:26 300100740:2017 300100772:1966 300100781:1388 300100787:3083 300100788:770 300100820:1019 300100828:4006 300100838:1465 300100860:9093 300100861:754 300100867:1269 300100901:577 300100933:1057 300100951:598 300100981:1001 300101032:264 300101062:1405 300101063:6101 300101074:2412 300101087:888 300101100:534 300101131:2421 300101137:1467 300101139:779 300101144:3086 300101165:3384 300101169:4550 300101175:1283 300101184:3069 300101188:4730 300101194:651 300101198:6347 300101216:3009 300101225:35 300101255:2500 300101266:635 300101287:519 300101290:3201 300101294:742 300101307:72 300101308:6572]
2025/03/06 09:47:34 remain 2025-03-02 success
2025/03/06 09:47:35 map[300100002:29 300100051:110 300100085:4619 300100087:807 300100133:2046 300100154:248 300100240:744 300100269:3902 300100353:2140 300100395:777 300100432:1256 300100493:1232 300100501:2812 300100508:104 300100519:1268 300100521:1073 300100546:4993 300100623:1123 300100633:5841 300100642:3820 300100723:34 300100740:2517 300100781:1304 300100828:5676 300100838:736 300100844:1946 300100860:1756 300100861:1159 300100867:1278 300100871:2158 300100893:636 300100903:1103 300100933:888 300100981:323 300101008:385 300101014:997 300101018:38 300101049:614 300101062:1380 300101074:813 300101104:2201 300101117:14089 300101131:1314 300101137:1837 300101144:337 300101151:1039 300101159:692 300101164:3584 300101165:5340 300101166:2230 300101169:4961 300101175:1495 300101184:1740 300101188:948 300101198:2249 300101210:1255 300101216:403 300101225:107 300101234:641 300101247:1142 300101255:553 300101261:472 300101287:2026 300101290:2068 300101294:2055 300101296:2798 300101298:2758 300101299:1818 300101300:2142 300101301:846 300101302:394 300101303:1464 300101304:1467 300101305:1817 300101306:2488 300101307:1142]
2025/03/06 09:47:35 remain 2025-03-01 success
2025/03/06 09:47:35 map[300100240:661 300100353:1535 300100395:610 300100426:600 300100432:970 300100445:2574 300100501:2464 300100519:425 300100546:1996 300100610:5738 300100623:454 300100633:14567 300100642:8845 300100740:1173 300100776:680 300100810:452 300100828:3076 300100838:549 300100853:506 300100893:396 300100895:1096 300100906:3200 300100933:643 300100974:542 300100997:754 300101002:1403 300101011:11622 300101063:2755 300101090:2401 300101131:1618 300101137:1689 300101146:2166 300101151:1140 300101160:2276 300101165:5375 300101169:2743 300101170:2335 300101175:1292 300101184:2635 300101198:2009 300101210:2696 300101216:413 300101235:248 300101244:246 300101245:3463 300101253:275 300101261:434 300101284:567 300101285:776 300101286:1622 300101287:238 300101288:228 300101289:704 300101290:6199 300101291:400 300101292:609 300101293:2239 300101294:4646 300101295:227 300101296:611 300101297:2449]
2025/03/06 09:47:36 remain 2025-02-28 success
2025/03/06 09:47:36 map[300100023:415 300100035:440 300100074:390 300100085:664 300100087:3596 300100099:56 300100104:456 300100106:763 300100126:1293 300100127:200 300100159:659 300100163:957 300100194:2116 300100218:133 300100240:655 300100295:2682 300100334:183 300100353:1255 300100360:1155 300100395:154 300100426:772 300100432:1455 300100493:620 300100501:3468 300100519:616 300100521:1410 300100576:228 300100610:7144 300100633:7887 300100636:3785 300100649:564 300100665:3956 300100713:2158 300100740:1823 300100751:492 300100770:1060 300100772:634 300100776:2061 300100778:853 300100828:5017 300100838:842 300100853:1652 300100860:2442 300100861:911 300100867:553 300100870:973 300100875:2729 300100893:388 300100906:1024 300100933:51 300100960:71 300100974:1248 300100997:775 300101002:451 300101008:342 300101011:3519 300101012:563 300101014:887 300101021:993 300101039:1221 300101049:309 300101062:2441 300101063:1921 300101074:1044 300101075:880 300101100:842 300101123:2401 300101125:493 300101129:655 300101131:1819 300101146:6300 300101151:515 300101152:615 300101155:399 300101164:1928 300101165:4172 300101169:5715 300101175:1241 300101184:5211 300101187:349 300101188:2377 300101190:1410 300101193:294 300101198:5461 300101210:3955 300101216:4888 300101218:543 300101221:2246 300101234:1319 300101235:550 300101237:1695 300101245:2771 300101247:772 300101255:1260 300101256:1060 300101257:167 300101258:47 300101259:2836 300101260:39 300101261:1730 300101262:560 300101263:1295 300101264:848 300101265:432 300101266:4755 300101267:890 300101268:759 300101269:570 300101270:2714 300101271:698 300101272:515 300101273:363 300101274:313 300101275:37 300101276:2332 300101277:556 300101278:922 300101279:544 300101280:5401 300101281:737 300101282:2095 300101283:368 300101284:1405 300101285:221]
2025/03/06 09:47:37 remain 2025-02-27 success
2025/03/06 09:47:37 map[300100002:627 300100051:3221 300100087:1197 300100096:445 300100104:571 300100126:244 300100159:537 300100240:1063 300100252:1217 300100269:9403 300100295:-76 300100353:4621 300100395:646 300100417:417 300100432:763 300100445:304 300100501:2356 300100508:671 300100546:1079 300100576:176 300100580:112 300100589:291 300100610:5074 300100623:1478 300100633:5648 300100636:313 300100642:787 300100665:3856 300100713:37 300100723:43 300100735:4111 300100740:3618 300100772:736 300100776:614 300100781:1043 300100810:907 300100817:2931 300100828:448 300100838:569 300100853:1296 300100860:415 300100861:1827 300100862:1479 300100867:1968 300100869:83 300100875:1717 300100901:562 300100903:584 300100906:2453 300100914:1005 300100933:120 300100974:835 300100986:1257 300100989:1536 300100997:3016 300101008:474 300101011:6788 300101014:2622 300101017:484 300101028:532 300101049:480 300101074:2087 300101075:624 300101090:1149 300101117:18260 300101123:3690 300101131:1424 300101137:3832 300101151:3179 300101156:1535 300101165:5822 300101169:3633 300101170:993 300101184:3087 300101188:9909 300101190:1959 300101193:220 300101194:8752 300101198:5905 300101210:2526 300101216:6879 300101221:4728 300101223:1014 300101225:171 300101229:1518 300101230:1535 300101231:1006 300101232:1912 300101233:2533 300101234:5479 300101235:2923 300101236:2747 300101237:3985 300101238:338 300101239:493 300101240:848 300101241:2206 300101242:3065 300101243:2507 300101244:2617 300101245:1642 300101246:265 300101247:1943 300101248:2246 300101249:3119 300101250:598 300101251:3368 300101252:2373 300101253:750 300101254:1946 300101255:2275 300101256:2151]
2025/03/06 09:47:38 remain 2025-02-26 success
2025/03/06 09:47:38 map[300100023:345 300100051:5369 300100087:815 300100096:372 300100099:1051 300100194:5243 300100240:1134 300100252:19 300100258:625 300100269:4159 300100290:478 300100295:569 300100310:1218 300100334:223 300100353:2568 300100360:732 300100395:449 300100414:788 300100428:1263 300100466:1448 300100493:1905 300100501:2312 300100508:1004 300100519:173 300100521:1014 300100576:158 300100610:5327 300100623:452 300100633:4018 300100636:260 300100642:642 300100649:1107 300100665:4847 300100713:146 300100723:384 300100740:1185 300100751:361 300100772:896 300100775:179 300100776:1081 300100778:585 300100781:990 300100794:94 300100809:481 300100820:1792 300100828:3822 300100838:344 300100844:2316 300100860:1320 300100861:1096 300100867:1843 300100875:350 300100893:236 300100903:718 300100906:3148 300100933:326 300100951:1791 300100967:768 300100974:879 300100981:352 300100987:340 300100989:588 300100997:3575 300101002:1138 300101011:4166 300101013:496 300101014:1396 300101016:983 300101017:34 300101021:1511 300101039:1578 300101074:1447 300101075:951 300101090:719 300101100:183 300101101:1259 300101102:755 300101120:110 300101123:3705 300101125:859 300101131:3153 300101134:260 300101137:1338 300101139:477 300101151:1976 300101152:1135 300101158:3589 300101159:876 300101164:2565 300101165:8323 300101169:1831 300101170:577 300101172:2365 300101175:1756 300101184:4526 300101186:4532 300101188:4029 300101189:865 300101190:881 300101191:236 300101192:1202 300101193:2152 300101194:6779 300101195:2752 300101196:542 300101197:3696 300101198:5544 300101199:613 300101200:4255 300101201:1697 300101202:739 300101203:141 300101204:1083 300101205:63 300101206:341 300101207:424 300101208:3145 300101209:1211 300101210:4869 300101211:272 300101212:908 300101213:497 300101214:1442 300101215:244 300101216:6348 300101217:427 300101218:306 300101219:1818 300101220:642 300101221:1537 300101222:4221 300101223:957 300101224:3600 300101225:626 300101226:3445 300101227:1625 300101228:563]
2025/03/06 09:47:38 remain 2025-02-25 success
2025/03/06 09:47:39 map[300100051:1806 300100085:15468 300100087:4918 300100096:1003 300100099:1335 300100106:228 300100201:352 300100240:940 300100269:3973 300100290:1041 300100332:931 300100334:393 300100353:3389 300100374:105 300100395:661 300100428:3906 300100432:1180 300100461:18 300100493:1017 300100501:3835 300100508:379 300100519:63 300100521:17859 300100576:591 300100589:1400 300100590:252 300100610:9166 300100633:4872 300100642:1818 300100649:601 300100657:1195 300100665:5351 300100713:185 300100723:57 300100740:2198 300100741:441 300100751:433 300100772:-63 300100778:1065 300100781:1979 300100810:1086 300100817:3650 300100828:2251 300100838:282 300100844:426 300100857:2172 300100860:1161 300100861:877 300100862:1319 300100867:2804 300100870:1297 300100873:704 300100875:1155 300100888:163 300100893:719 300100903:372 300100906:6762 300100933:603 300100951:2727 300100974:832 300100981:75 300100987:892 300100997:1128 300101008:316 300101011:6861 300101013:994 300101014:691 300101020:-20 300101021:1281 300101049:737 300101066:834 300101074:2391 300101075:796 300101097:208 300101100:507 300101101:1210 300101102:890 300101113:2758 300101123:1519 300101131:4138 300101133:327 300101139:2895 300101142:2994 300101144:3395 300101151:2724 300101152:869 300101155:390 300101157:854 300101159:2768 300101164:274 300101165:9797 300101167:-205 300101168:555 300101169:3532 300101170:2676 300101171:1165 300101172:4077 300101173:216 300101174:31 300101175:5162 300101176:583 300101177:1521 300101178:1741 300101179:624 300101180:679 300101181:1962 300101182:223 300101183:1505 300101184:3817 300101185:396 300101186:455 300101187:45 300101188:4094 300101189:2296 300101190:2469]
2025/03/06 09:47:39 remain 2025-02-24 success
2025/03/06 09:47:40 map[300100051:580 300100085:6839 300100087:2124 300100097:686 300100099:469 300100104:1062 300100126:1690 300100154:1328 300100159:1788 300100209:1041 300100221:485 300100240:1106 300100266:473 300100269:16355 300100290:1754 300100334:709 300100353:2795 300100395:1494 300100470:690 300100471:820 300100493:1623 300100501:3014 300100508:811 300100519:924 300100576:1951 300100589:1255 300100605:671 300100610:7042 300100623:1538 300100633:2602 300100636:1452 300100642:2389 300100649:2322 300100665:2962 300100681:1167 300100713:797 300100723:379 300100740:734 300100756:605 300100772:781 300100778:1018 300100781:1641 300100810:482 300100821:483 300100828:8067 300100838:452 300100857:508 300100860:1090 300100867:741 300100875:1465 300100893:373 300100894:1345 300100901:19340 300100903:3393 300100906:8350 300100933:752 300100946:3118 300100951:978 300100964:110 300100969:412 300100974:830 300100981:1346 300100987:943 300100997:1516 300101008:1309 300101011:11442 300101012:677 300101013:950 300101016:751 300101018:601 300101020:5853 300101021:641 300101026:175 300101032:740 300101039:424 300101049:164 300101062:1608 300101074:2250 300101075:1799 300101094:572 300101095:633 300101100:1312 300101101:271 300101103:489 300101111:147 300101113:532 300101119:696 300101125:54 300101128:996 300101129:1197 300101131:5760 300101132:190 300101133:2108 300101134:890 300101135:2132 300101136:2105 300101137:3127 300101138:288 300101139:1533 300101140:47 300101141:855 300101142:5562 300101143:934 300101144:5282 300101145:1108 300101146:3973 300101147:6232 300101148:3503 300101149:1225 300101150:2025 300101151:3408 300101152:1396 300101153:1864 300101154:2406 300101155:1382 300101156:1845 300101157:3785 300101158:2979 300101159:1143 300101160:2870 300101161:103 300101162:240 300101163:1436 300101164:3934 300101165:1440 300101166:1006 300101167:-64]
2025/03/06 09:47:40 remain 2025-02-23 success
2025/03/06 09:47:41 map[300100051:450 300100087:848 300100096:3392 300100099:842 300100104:147 300100107:454 300100117:1716 300100159:1124 300100240:919 300100269:1342 300100287:28794 300100304:1003 300100309:931 300100334:1503 300100353:2582 300100395:414 300100428:1571 300100432:938 300100472:679 300100493:1737 300100501:3222 300100521:1326 300100576:575 300100580:95 300100603:338 300100610:4331 300100623:2402 300100633:3304 300100636:1741 300100642:2825 300100649:1097 300100665:3672 300100666:502 300100681:508 300100713:1354 300100723:172 300100728:6 300100733:3228 300100740:2073 300100772:2278 300100775:163 300100778:1314 300100809:652 300100817:1790 300100821:898 300100824:808 300100828:5281 300100838:215 300100844:533 300100857:4230 300100860:1526 300100861:879 300100864:327 300100867:3961 300100875:9746 300100893:756 300100903:1958 300100906:458 300100933:1122 300100946:3146 300100951:641 300100974:306 300100977:33 300100981:1242 300100987:1653 300100997:1751 300101008:1098 300101011:6235 300101012:498 300101014:1226 300101021:1179 300101028:3468 300101039:649 300101042:543 300101046:4920 300101049:700 300101054:2310 300101061:752 300101062:1518 300101063:853 300101069:339 300101072:27 300101074:4964 300101075:230 300101089:3213 300101090:476 300101092:161 300101094:2724 300101095:1818 300101096:3492 300101097:1826 300101098:4438 300101099:768 300101100:2481 300101101:4795 300101102:265 300101103:153 300101104:1516 300101105:100 300101106:3705 300101107:1595 300101108:1048 300101109:2986 300101110:358 300101111:250 300101112:315 300101113:4127 300101114:543 300101115:1818 300101116:19 300101117:679 300101118:2620 300101119:1563 300101120:1162 300101121:430 300101122:65 300101123:8340 300101124:1143 300101125:422 300101126:1765 300101127:172 300101128:1011 300101129:2637 300101130:476 300101131:2141 300101132:47]
2025/03/06 09:47:41 remain 2025-02-22 success
2025/03/06 09:47:42 map[300100047:601 300100051:1517 300100085:2416 300100087:3166 300100096:668 300100097:691 300100099:2937 300100104:691 300100127:171 300100135:1805 300100146:406 300100159:711 300100194:1725 300100240:1930 300100258:1557 300100269:12048 300100272:1758 300100295:1362 300100325:1141 300100334:132 300100353:2629 300100395:298 300100428:563 300100432:785 300100471:138 300100493:1536 300100501:3177 300100508:531 300100519:852 300100576:88 300100589:1879 300100604:39 300100610:8638 300100623:709 300100627:85 300100629:400 300100633:3122 300100636:858 300100642:2540 300100649:2006 300100665:5078 300100666:437 300100681:264 300100713:309 300100723:171 300100727:607 300100740:2259 300100748:1515 300100751:879 300100755:799 300100756:393 300100772:249 300100776:2250 300100778:853 300100781:1519 300100809:862 300100824:1454 300100828:5845 300100838:747 300100844:3184 300100857:5474 300100858:2762 300100860:1734 300100861:2390 300100862:879 300100864:3022 300100867:1607 300100872:607 300100873:1643 300100887:238 300100893:679 300100903:1066 300100906:971 300100907:444 300100914:967 300100917:1223 300100929:1645 300100933:366 300100946:9187 300100951:269 300100958:430 300100969:304 300100974:2614 300100981:436 300100983:1793 300100987:1094 300100990:2667 300100997:237 300101008:1297 300101009:612 300101011:18987 300101012:2079 300101013:371 300101014:3112 300101016:970 300101021:810 300101023:2083 300101024:1935 300101026:781 300101027:2732 300101028:4777 300101030:2670 300101031:2673 300101032:10829 300101033:1750 300101034:6214 300101035:91 300101036:1626 300101037:630 300101038:60 300101039:7419 300101040:388 300101041:121 300101042:728 300101043:466 300101044:2123 300101045:161 300101046:1340 300101047:5939 300101048:6181 300101049:2533 300101050:496 300101051:63 300101052:2729 300101053:1115 300101054:459 300101055:3546 300101056:475 300101057:2758 300101058:51 300101059:2124 300101060:5512 300101061:3291 300101062:4184 300101063:971 300101064:668 300101065:50 300101066:1115 300101067:94 300101068:2495 300101069:1725 300101070:3307 300101071:198 300101072:7479 300101073:595 300101074:2659 300101075:3039 300101076:1930 300101077:1634 300101078:3835 300101079:546 300101080:484 300101081:3554 300101082:155 300101083:453 300101084:952 300101085:91 300101086:2569 300101087:735 300101088:115 300101089:4178 300101090:3084 300101091:2802 300101092:1842 300101093:623]
2025/03/06 09:47:42 remain 2025-02-21 success
2025/03/06 09:47:43 map[300100029:1428 300100051:2993 300100085:8099 300100087:1630 300100097:826 300100099:1426 300100131:173 300100159:582 300100163:1576 300100194:1869 300100240:1522 300100269:15150 300100290:1139 300100334:532 300100343:1040 300100353:2890 300100395:270 300100432:641 300100472:731 300100493:2298 300100501:6361 300100505:130 300100519:1006 300100521:796 300100576:2006 300100589:1070 300100605:1121 300100610:5618 300100615:523 300100623:761 300100633:5543 300100636:2239 300100649:2362 300100650:492 300100665:1709 300100686:2373 300100713:3487 300100722:805 300100723:708 300100740:2012 300100755:478 300100775:259 300100776:1954 300100778:1085 300100781:895 300100793:1875 300100802:321 300100823:4733 300100824:420 300100825:38 300100826:576 300100828:6665 300100832:586 300100838:601 300100844:4118 300100857:3969 300100860:2230 300100861:1395 300100862:796 300100864:4020 300100867:1467 300100870:1575 300100873:414 300100884:1487 300100887:759 300100893:810 300100899:593 300100901:984 300100903:1198 300100906:1899 300100908:477 300100914:773 300100917:1959 300100929:2651 300100931:640 300100933:992 300100948:346 300100951:837 300100966:1025 300100967:673 300100970:1571 300100974:2807 300100981:1065 300100982:2362 300100983:4333 300100984:2826 300100985:1285 300100986:4631 300100987:3154 300100988:328 300100989:2402 300100990:1387 300100991:374 300100992:308 300100993:1169 300100994:17 300100995:5048 300100996:757 300100997:3919 300100998:75 300100999:764 300101000:959 300101001:1307 300101002:1616 300101003:1336 300101004:940 300101005:1036 300101006:236 300101007:1268 300101008:4289 300101009:1783 300101010:295 300101011:4413 300101012:386 300101013:718 300101014:4472 300101015:2176 300101016:1822 300101017:644 300101018:2012 300101019:4051 300101020:4291 300101021:2913 300101022:2112 300101023:1723 300101024:1006 300101025:564 300101026:567 300101027:1026 300101028:-68 300101029:106 300101030:380 300101031:-184]
2025/03/06 09:47:43 remain 2025-02-20 success
2025/03/06 09:47:44 map[300100051:2841 300100066:9 300100085:6751 300100087:2499 300100096:344 300100097:502 300100099:1063 300100104:349 300100106:201 300100117:690 300100154:1390 300100240:1713 300100269:3295 300100288:392 300100289:1008 300100333:423 300100334:733 300100353:2319 300100395:343 300100432:1108 300100471:93 300100493:1282 300100498:168 300100501:3673 300100508:1976 300100519:634 300100521:1584 300100576:148 300100589:1641 300100603:173 300100605:1319 300100610:9833 300100617:347 300100623:511 300100633:3868 300100636:905 300100642:19083 300100649:2710 300100650:1481 300100665:4154 300100681:1815 300100689:1826 300100713:1817 300100723:806 300100733:753 300100740:3389 300100742:66 300100751:929 300100769:-107 300100770:579 300100772:669 300100773:407 300100776:5869 300100778:1828 300100781:1580 300100809:893 300100818:359 300100823:480 300100824:4039 300100828:4804 300100837:86 300100838:801 300100839:1028 300100841:491 300100844:1234 300100845:1993 300100857:2794 300100860:1943 300100861:2177 300100862:1798 300100866:5050 300100867:6599 300100870:2531 300100873:1824 300100875:874 300100883:974 300100884:2530 300100887:1634 300100890:172 300100891:2751 300100892:167 300100893:1757 300100894:4278 300100895:3968 300100896:1036 300100897:783 300100898:811 300100899:6210 300100900:141 300100901:2144 300100902:576 300100903:3901 300100904:528 300100905:225 300100906:17035 300100907:2087 300100908:5256 300100909:2309 300100910:2815 300100911:3035 300100912:4003 300100913:395 300100914:1412 300100915:2255 300100916:183 300100917:4893 300100918:756 300100919:149 300100920:423 300100921:453 300100922:1792 300100923:816 300100924:1844 300100925:2350 300100926:322 300100927:1016 300100928:1202 300100929:1183 300100930:485 300100931:5716 300100932:2617 300100933:2455 300100934:288 300100935:819 300100936:231 300100937:1336 300100938:425 300100939:904 300100940:144 300100941:692 300100942:1074 300100943:228 300100944:303 300100945:1191 300100946:946 300100947:831 300100948:497 300100949:1958 300100950:140 300100951:1885 300100952:56 300100953:1674 300100954:171 300100955:1968 300100956:86 300100957:62 300100958:2775 300100959:330 300100960:2353 300100961:157 300100962:159 300100963:175 300100964:1129 300100965:827 300100966:2095 300100967:6172 300100968:4438 300100969:5320 300100970:155 300100971:375 300100972:169 300100973:56 300100974:792 300100975:354 300100976:1431 300100977:325 300100978:4626 300100979:2829 300100980:2079 300100981:1020]
2025/03/06 09:47:44 remain 2025-02-19 success
2025/03/06 09:47:44 map[300100051:1115 300100066:417 300100074:355 300100085:4214 300100087:1201 300100092:324 300100096:357 300100099:884 300100102:638 300100146:1005 300100152:211 300100154:684 300100194:30717 300100201:485 300100225:172 300100240:702 300100287:1511 300100290:1316 300100295:1959 300100307:971 300100332:756 300100334:452 300100353:1472 300100365:576 300100377:1345 300100395:284 300100428:3920 300100432:483 300100471:169 300100472:1190 300100493:928 300100501:4045 300100508:1151 300100519:869 300100564:1661 300100576:164 300100589:323 300100605:1186 300100610:12872 300100626:614 300100628:959 300100633:4655 300100636:1617 300100642:7563 300100649:3549 300100665:8381 300100681:502 300100697:319 300100713:1725 300100723:1953 300100733:836 300100740:3036 300100744:1540 300100751:667 300100752:25 300100755:1148 300100769:813 300100772:1018 300100773:781 300100774:708 300100776:4631 300100778:1685 300100780:1361 300100781:3436 300100793:426 300100800:424 300100802:991 300100808:317 300100809:799 300100810:889 300100811:15967 300100813:120 300100815:309 300100817:2237 300100818:466 300100819:2785 300100820:982 300100822:2965 300100823:3645 300100824:6364 300100825:2178 300100826:2188 300100827:247 300100828:8724 300100829:79 300100830:1580 300100831:78 300100832:1189 300100833:4746 300100834:1215 300100835:3537 300100836:1513 300100837:2005 300100838:1715 300100839:1843 300100840:1791 300100841:552 300100842:150 300100843:50 300100844:4615 300100845:3290 300100846:1364 300100847:2731 300100848:379 300100849:44 300100850:624 300100851:4587 300100852:759 300100853:217 300100854:1761 300100855:49 300100856:674 300100857:4866 300100858:3793 300100859:117 300100860:3047 300100861:2437 300100862:2938 300100863:1004 300100864:4958 300100865:2118 300100866:3683 300100867:3265 300100868:3042 300100869:3102 300100870:1937 300100871:366 300100872:335 300100873:1801 300100874:397 300100875:2577 300100876:5877 300100877:1106 300100878:219 300100879:560 300100880:1971 300100881:1552 300100882:586 300100883:1972 300100884:2708 300100885:22 300100886:338 300100887:1747 300100888:1221 300100889:47 300100890:227 300100891:-61 300100892:808 300100893:496 300100894:371 300100895:-155]
2025/03/06 09:47:45 remain 2025-02-18 success
2025/03/06 09:47:45 map[300100047:1437 300100051:4025 300100087:1464 300100099:2865 300100179:398 300100194:-217 300100228:572 300100240:1229 300100265:429 300100269:6680 300100295:631 300100334:463 300100353:2333 300100360:377 300100377:773 300100395:2063 300100398:24685 300100407:155 300100426:850 300100432:572 300100445:1308 300100472:2921 300100479:672 300100493:1844 300100501:2687 300100508:683 300100519:397 300100521:1276 300100522:1102 300100539:4862 300100576:88 300100583:744 300100589:4944 300100605:479 300100610:8968 300100617:264 300100623:857 300100626:1367 300100633:7675 300100636:741 300100641:442 300100642:2726 300100644:246 300100649:3151 300100653:2 300100665:1301 300100670:586 300100686:178 300100694:448 300100705:1694 300100713:2864 300100715:1377 300100716:1050 300100722:577 300100723:855 300100727:2463 300100734:406 300100735:2834 300100740:4260 300100741:1205 300100755:1537 300100756:379 300100758:164 300100764:1872 300100767:72 300100768:-217 300100769:6116 300100770:2776 300100771:207 300100772:1202 300100773:5023 300100774:2704 300100775:1451 300100776:1021 300100777:1638 300100778:2089 300100779:1393 300100780:3490 300100781:3129 300100782:1216 300100783:63 300100784:397 300100785:1130 300100786:517 300100787:2436 300100788:5058 300100789:523 300100790:2126 300100791:258 300100792:800 300100793:578 300100794:621 300100795:1413 300100796:756 300100797:659 300100798:1449 300100799:2713 300100800:2908 300100801:3763 300100802:428 300100803:247 300100804:168 300100805:2437 300100806:374 300100807:2978 300100808:5918 300100809:4393 300100810:640 300100811:1583 300100812:190 300100813:1034 300100814:3439 300100815:1320 300100816:27 300100817:155 300100818:1556 300100819:1545 300100820:1425 300100821:661]
2025/03/06 09:47:46 remain 2025-02-17 success
2025/03/06 09:47:46 map[300100038:776 300100047:8143 300100051:1377 300100087:2156 300100096:791 300100099:2532 300100106:218 300100131:1056 300100146:637 300100147:1956 300100154:1758 300100159:762 300100184:308 300100189:236 300100194:1366 300100240:1437 300100258:1491 300100287:396 300100295:2364 300100323:1290 300100343:2025 300100353:4543 300100360:912 300100365:691 300100383:1378 300100393:102 300100395:1507 300100397:340 300100398:7031 300100414:586 300100432:746 300100465:746 300100472:1820 300100490:1560 300100493:897 300100494:735 300100501:3247 300100508:878 300100519:387 300100521:1477 300100522:1725 300100561:185 300100562:5597 300100570:759 300100576:725 300100589:948 300100603:1111 300100610:21576 300100615:1599 300100621:644 300100623:562 300100628:796 300100633:5982 300100636:1040 300100642:2777 300100644:1776 300100645:750 300100649:2159 300100659:146 300100665:11024 300100666:601 300100668:1483 300100670:407 300100684:1301 300100686:1229 300100689:1085 300100694:434 300100697:1033 300100704:82 300100705:1778 300100711:977 300100712:3640 300100713:6446 300100714:2975 300100715:4046 300100716:2449 300100717:168 300100718:3125 300100719:601 300100720:895 300100721:2264 300100722:2367 300100723:1703 300100724:2261 300100725:2338 300100726:464 300100727:494 300100728:974 300100729:36490 300100730:666 300100731:503 300100732:199 300100733:2780 300100734:1066 300100735:1855 300100736:45 300100737:879 300100738:1184 300100739:32 300100740:4554 300100741:2071 300100742:2074 300100743:183 300100744:994 300100745:5471 300100746:1132 300100747:338 300100748:774 300100749:2300 300100750:521 300100751:2396 300100752:297 300100753:162 300100754:148 300100755:2347 300100756:2616 300100757:191 300100758:49 300100759:146 300100760:1137 300100761:347 300100762:741 300100763:170 300100764:4320 300100765:3755 300100766:192 300100767:905 300100768:582]
2025/03/06 09:47:47 remain 2025-02-16 success
2025/03/06 09:47:47 map[300100047:4048 300100051:5685 300100087:1147 300100096:1396 300100099:2777 300100127:372 300100131:1303 300100132:975 300100146:1006 300100173:1937 300100194:3542 300100225:263 300100228:192 300100240:739 300100244:1554 300100249:176 300100269:10036 300100290:2902 300100295:926 300100315:595 300100325:193 300100332:1811 300100334:163 300100343:1016 300100353:5167 300100374:400 300100395:921 300100407:1298 300100426:470 300100432:896 300100465:3672 300100468:7774 300100471:1221 300100472:2225 300100493:1572 300100494:310 300100501:2581 300100521:791 300100539:2174 300100570:1104 300100581:342 300100589:4496 300100610:7249 300100615:689 300100623:1967 300100626:1727 300100627:296 300100628:449 300100631:1768 300100633:2222 300100636:1112 300100639:2210 300100642:1027 300100644:3082 300100646:719 300100649:3862 300100650:846 300100653:1595 300100656:337 300100665:3202 300100666:-29 300100667:385 300100668:2181 300100669:1625 300100670:3646 300100671:197 300100672:1275 300100673:211 300100674:4348 300100675:94 300100676:75 300100677:1195 300100678:1016 300100679:320 300100680:907 300100681:3095 300100682:112 300100683:3030 300100684:1817 300100685:340 300100686:1372 300100687:2335 300100688:958 300100689:1018 300100690:611 300100691:1995 300100692:438 300100693:1299 300100694:5530 300100695:485 300100696:1648 300100697:1589 300100698:195 300100699:1627 300100700:533 300100701:261 300100702:2444 300100703:685 300100704:1582 300100705:2393 300100706:2839 300100707:2477 300100708:600 300100709:2499 300100710:1008 300100711:1803]
2025/03/06 09:47:48 remain 2025-02-15 success
2025/03/06 09:47:48 map[300100004:602 300100023:936 300100038:548 300100047:8214 300100051:2696 300100053:619 300100073:1664 300100085:6880 300100087:2212 300100096:1316 300100098:664 300100099:2088 300100106:344 300100127:334 300100131:555 300100145:808 300100151:694 300100154:998 300100158:653 300100159:581 300100173:1255 300100180:1472 300100189:113 300100193:1676 300100195:871 300100228:877 300100240:807 300100258:1951 300100274:341 300100287:443 300100288:1447 300100295:358 300100302:787 300100309:3148 300100325:758 300100334:632 300100338:587 300100353:6165 300100390:500 300100395:247 300100398:5084 300100414:1038 300100417:3356 300100425:864 300100426:916 300100465:1431 300100471:610 300100472:1939 300100492:317 300100494:869 300100497:660 300100501:3356 300100521:5808 300100534:452 300100562:466 300100570:1054 300100586:19 300100589:922 300100591:768 300100593:1646 300100594:589 300100598:379 300100600:18 300100605:979 300100610:9432 300100614:987 300100615:2046 300100617:2746 300100621:-31 300100623:2262 300100624:1051 300100625:4212 300100626:2485 300100627:476 300100628:1836 300100629:1581 300100630:482 300100631:3878 300100632:8752 300100633:5869 300100634:112 300100635:1439 300100636:3498 300100637:210 300100638:766 300100639:118 300100640:1125 300100641:1468 300100642:11518 300100643:760 300100644:5111 300100645:1561 300100646:3597 300100647:213 300100648:1878 300100649:2554 300100650:2511 300100651:364 300100652:6200 300100653:995 300100654:639 300100655:370 300100656:5887 300100657:825 300100658:2994 300100659:105 300100660:71 300100661:397 300100662:92 300100663:345 300100664:988 300100665:5588 300100666:1248]
2025/03/06 09:47:50 remain 2025-02-14 success
2025/03/06 09:47:50 map[300100038:888 300100047:4040 300100051:2917 300100083:956 300100085:2136 300100087:1904 300100096:777 300100099:1481 300100104:886 300100173:871 300100177:586 300100180:1409 300100194:3753 300100202:24 300100225:497 300100228:1638 300100240:1121 300100258:1402 300100266:3045 300100269:4614 300100283:264 300100285:870 300100290:998 300100295:1709 300100309:782 300100310:582 300100322:615 300100334:579 300100338:3662 300100353:3825 300100393:48 300100395:180 300100402:40 300100413:27 300100414:704 300100421:389 300100445:1076 300100458:1537 300100465:2450 300100466:1009 300100468:11673 300100471:1388 300100472:1811 300100493:728 300100497:181 300100498:2062 300100501:2583 300100508:2753 300100512:2355 300100520:1927 300100521:1027 300100539:1326 300100546:2397 300100548:1704 300100549:502 300100559:381 300100562:3217 300100563:981 300100564:1242 300100567:1392 300100569:295 300100570:913 300100572:753 300100574:3443 300100575:17 300100576:4139 300100577:3681 300100578:586 300100579:701 300100580:1327 300100581:2631 300100582:292 300100583:1358 300100584:103 300100585:1184 300100586:75 300100587:72 300100588:1705 300100589:17689 300100590:2005 300100591:857 300100592:161 300100593:4238 300100594:145 300100595:422 300100596:1201 300100597:2201 300100598:1611 300100599:2843 300100600:53 300100601:90 300100602:1149 300100603:704 300100604:251 300100605:2181 300100606:2614 300100607:744 300100608:566 300100609:1544 300100610:1528 300100611:1725 300100612:243 300100613:128 300100614:3079 300100615:942 300100616:1249 300100617:945 300100618:150 300100619:549 300100620:1419 300100621:640 300100622:19]
2025/03/06 09:47:51 remain 2025-02-13 success
2025/03/06 09:47:52 map[300100002:95 300100004:9398 300100023:3714 300100038:1447 300100047:7319 300100051:2626 300100062:3767 300100083:391 300100085:6258 300100087:2346 300100095:211 300100096:890 300100099:1026 300100104:911 300100106:91 300100111:2149 300100124:109 300100131:275 300100140:31 300100146:675 300100154:2273 300100159:677 300100167:489 300100173:1187 300100180:431 300100189:635 300100202:56 300100209:6930 300100225:433 300100228:1446 300100235:44 300100240:455 300100260:1393 300100265:1455 300100269:7171 300100287:284 300100290:569 300100295:574 300100322:1242 300100331:747 300100332:4464 300100333:1639 300100334:496 300100343:3350 300100350:2968 300100352:1394 300100353:3459 300100360:929 300100365:530 300100393:214 300100395:486 300100398:5716 300100407:373 300100414:1645 300100426:4437 300100432:1437 300100435:314 300100442:34 300100443:753 300100445:3069 300100459:39 300100465:3432 300100466:3321 300100470:2876 300100472:304 300100477:229 300100485:812 300100486:4156 300100492:2685 300100494:479 300100497:1017 300100498:2887 300100501:2233 300100510:128 300100511:123 300100512:2585 300100514:7377 300100516:1104 300100519:3752 300100520:2356 300100521:1429 300100522:4857 300100523:269 300100524:1618 300100525:1951 300100526:770 300100527:3488 300100528:2083 300100529:27 300100530:175 300100531:1768 300100532:607 300100533:134 300100534:1434 300100535:497 300100536:410 300100537:3537 300100538:1870 300100539:3811 300100540:1823 300100541:1071 300100542:2821 300100543:1452 300100544:154 300100545:232 300100546:3344 300100547:2376 300100548:377 300100549:1017 300100550:509 300100551:513 300100552:655 300100553:214 300100554:682 300100555:183 300100556:3663 300100557:513 300100558:528 300100559:1652 300100560:1043 300100561:183 300100562:1603 300100563:2230 300100564:3733 300100565:1473 300100566:684 300100567:629 300100568:618 300100569:966 300100570:1973 300100571:257 300100572:1620 300100573:138 300100574:991 300100575:-181]
2025/03/06 09:47:52 remain 2025-02-12 success
2025/03/06 09:47:53 map[300100038:752 300100047:2897 300100051:3930 300100074:480 300100085:6497 300100087:1917 300100097:1050 300100099:1694 300100104:510 300100106:401 300100121:609 300100127:388 300100131:335 300100146:898 300100151:230 300100158:401 300100163:1255 300100173:1156 300100180:2998 300100189:667 300100190:34 300100194:4412 300100200:2386 300100221:150 300100225:357 300100228:1281 300100258:854 300100265:304 300100269:2139 300100274:412 300100280:1192 300100287:1905 300100288:697 300100290:1834 300100294:479 300100295:4506 300100310:1112 300100319:44 300100333:1242 300100334:837 300100337:602 300100353:3535 300100360:623 300100365:1072 300100374:588 300100390:170 300100395:100 300100398:3562 300100402:351 300100406:590 300100407:1766 300100414:1729 300100425:1384 300100426:555 300100436:589 300100445:1466 300100448:1286 300100449:1101 300100458:1489 300100459:1215 300100464:125 300100465:4584 300100466:1872 300100467:862 300100468:5038 300100469:1316 300100470:19235 300100471:3764 300100472:5474 300100473:96 300100474:754 300100475:473 300100476:155 300100477:598 300100478:136 300100479:1403 300100480:292 300100481:397 300100482:4254 300100483:1967 300100484:1073 300100485:2406 300100486:1907 300100487:58 300100488:672 300100489:236 300100490:1429 300100491:2727 300100492:3243 300100493:2684 300100494:1619 300100495:451 300100496:377 300100497:1760 300100498:356 300100499:708 300100500:896 300100501:3339 300100502:2190 300100503:43 300100504:421 300100505:358 300100506:126 300100507:306 300100508:670 300100509:2285 300100510:2718 300100511:3393 300100512:5929 300100513:1777 300100514:-40 300100515:659 300100516:1207 300100517:481 300100518:414 300100519:-75]
2025/03/06 09:47:54 remain 2025-02-11 success
2025/03/06 09:47:54 map[300100036:848 300100038:1885 300100047:2951 300100051:4975 300100077:131 300100085:8913 300100087:1386 300100091:35 300100096:2467 300100099:482 300100117:1309 300100123:795 300100124:861 300100131:1492 300100140:674 300100146:841 300100148:98 300100154:2981 300100158:421 300100159:620 300100167:305 300100173:1663 300100180:3368 300100195:1085 300100200:3082 300100209:9750 300100213:1199 300100218:19 300100221:494 300100228:823 300100230:1738 300100233:279 300100236:2774 300100240:1073 300100248:1796 300100256:632 300100258:1016 300100265:1875 300100269:1550 300100274:808 300100276:24 300100283:1635 300100287:1344 300100288:968 300100290:3527 300100292:294 300100294:10990 300100295:3148 300100302:671 300100303:2748 300100309:1284 300100310:873 300100318:2045 300100319:827 300100321:722 300100325:675 300100331:1887 300100332:765 300100333:1346 300100334:703 300100337:882 300100353:4688 300100356:426 300100357:670 300100358:68 300100360:1512 300100365:1000 300100367:1867 300100368:1946 300100373:1670 300100374:13980 300100376:893 300100377:2224 300100378:3110 300100379:2560 300100380:2208 300100381:1200 300100382:1562 300100383:3883 300100384:2035 300100385:2925 300100386:6207 300100387:55 300100388:56 300100389:4986 300100390:3776 300100391:2498 300100392:677 300100393:3451 300100394:292 300100395:3039 300100396:739 300100397:1331 300100398:12735 300100399:712 300100400:3282 300100401:3279 300100402:352 300100403:7239 300100404:7673 300100405:275 300100406:2094 300100407:5837 300100408:436 300100409:562 300100410:527 300100411:18 300100412:947 300100413:518 300100414:4836 300100415:4658 300100416:783 300100417:2272 300100418:1837 300100419:1806 300100420:2147 300100421:102 300100422:2319 300100423:814 300100424:1835 300100425:2284 300100426:2399 300100427:2513 300100428:6407 300100429:2642 300100430:819 300100431:1753 300100432:2088 300100433:877 300100434:4196 300100435:2603 300100436:1498 300100437:888 300100438:401 300100439:501 300100440:338 300100441:69 300100442:274 300100443:2437 300100444:584 300100445:3138 300100446:2196 300100447:2494 300100448:3886 300100449:2030 300100450:214 300100451:300 300100452:667 300100453:1848 300100454:250 300100455:282 300100456:294 300100457:80 300100458:2662 300100459:49 300100460:168 300100461:798 300100462:-5 300100463:-24]
2025/03/06 09:47:54 remain 2025-02-10 success
2025/03/06 09:47:55 map[300100036:1129 300100038:803 300100045:1454 300100047:7148 300100048:810 300100051:4341 300100080:942 300100085:3760 300100089:2605 300100096:2708 300100097:307 300100099:1142 300100104:1005 300100105:671 300100106:79 300100114:198 300100117:1410 300100125:131 300100127:820 300100131:3137 300100146:2731 300100151:603 300100153:59 300100154:928 300100155:771 300100158:2216 300100165:1199 300100171:545 300100173:1207 300100177:1385 300100180:2338 300100188:6870 300100189:861 300100190:459 300100193:1116 300100195:2939 300100199:2242 300100200:2220 300100221:970 300100225:493 300100228:1041 300100229:712 300100230:3245 300100233:1123 300100234:1760 300100235:821 300100236:4885 300100240:1766 300100246:521 300100247:325 300100248:3074 300100253:84 300100257:707 300100258:3464 300100259:2754 300100260:1349 300100261:91 300100262:2281 300100263:806 300100264:4625 300100265:3246 300100266:4953 300100267:2534 300100268:578 300100269:10421 300100270:4748 300100271:136 300100272:1205 300100273:451 300100274:3684 300100275:6647 300100276:946 300100277:81 300100278:314 300100279:190 300100280:8624 300100281:318 300100282:492 300100283:6279 300100284:146 300100285:9611 300100286:505 300100287:5256 300100288:3825 300100289:1815 300100290:7038 300100291:117 300100292:1600 300100293:3238 300100294:3551 300100295:1502 300100296:1601 300100297:620 300100298:11945 300100299:744 300100300:1414 300100301:830 300100302:4327 300100303:2565 300100304:2736 300100305:778 300100306:118 300100307:978 300100308:1795 300100309:4153 300100310:2905 300100311:39 300100312:3063 300100313:2235 300100314:91 300100315:2180 300100316:2986 300100317:1053 300100318:957 300100319:1063 300100320:3270 300100321:436 300100322:2502 300100323:659 300100324:3843 300100325:892 300100326:402 300100327:2196 300100328:940 300100329:2794 300100330:892 300100331:2394 300100332:5114 300100333:2144 300100334:3241 300100335:535 300100336:3053 300100337:3172 300100338:3258 300100339:870 300100340:2768 300100341:60 300100342:3323 300100343:3034 300100344:630 300100345:163 300100346:1384 300100347:4424 300100348:2568 300100349:2752 300100350:3009 300100351:1115 300100352:2749 300100353:1345 300100354:6003 300100355:1163 300100356:2537 300100357:3348 300100358:50 300100359:498 300100360:811 300100361:85 300100362:454 300100363:850 300100364:386 300100365:2147 300100366:1293 300100367:3276 300100368:3444 300100369:2000 300100370:591 300100371:182 300100372:476 300100373:2493 300100374:2170 300100375:515]
2025/03/06 09:47:56 remain 2025-02-09 success
2025/03/06 09:47:57 map[300100032:4029 300100035:256 300100036:1104 300100038:1850 300100045:2974 300100047:4219 300100048:789 300100051:2788 300100062:11439 300100074:1006 300100079:1740 300100080:1720 300100083:553 300100084:481 300100085:1677 300100087:343 300100089:2479 300100095:585 300100096:2499 300100097:1834 300100099:1334 300100100:57 300100104:1508 300100105:1660 300100112:439 300100117:1285 300100118:2421 300100121:2235 300100123:1052 300100124:6061 300100126:1374 300100131:6094 300100134:204 300100141:1040 300100146:1813 300100151:9095 300100153:141 300100154:2464 300100155:473 300100158:262 300100159:3022 300100160:507 300100162:-109 300100163:5938 300100164:808 300100165:4759 300100166:1815 300100167:4312 300100168:4013 300100169:531 300100170:3004 300100171:1827 300100172:2403 300100173:4299 300100174:1204 300100175:685 300100176:164 300100177:1824 300100178:4020 300100179:401 300100180:2962 300100181:279 300100182:260 300100183:1278 300100184:4792 300100185:3859 300100186:610 300100187:946 300100188:4322 300100189:4462 300100190:2377 300100191:5199 300100192:1860 300100193:2753 300100194:5606 300100195:6112 300100196:358 300100197:252 300100198:757 300100199:3014 300100200:3721 300100201:1016 300100202:1757 300100203:785 300100204:3044 300100205:221 300100206:859 300100207:1819 300100208:4735 300100209:15187 300100210:2477 300100211:549 300100212:10817 300100213:587 300100214:3415 300100215:677 300100216:522 300100217:2385 300100218:577 300100219:1345 300100220:275 300100221:3035 300100222:3081 300100223:69 300100224:901 300100225:2432 300100226:247 300100227:2525 300100228:2095 300100229:7558 300100230:1858 300100231:1181 300100232:2820 300100233:2964 300100234:987 300100235:1554 300100236:2121 300100237:587 300100238:2723 300100239:1357 300100240:2374 300100241:233 300100242:2160 300100243:654 300100244:1603 300100245:399 300100246:2818 300100247:4852 300100248:2401 300100249:6447 300100250:2648 300100251:2618 300100252:3744 300100253:480 300100254:2316 300100255:347 300100256:2220 300100257:115 300100258:-165 300100259:2074 300100260:1356]
2025/03/06 09:47:57 remain 2025-02-08 success
2025/03/06 09:47:58 map[300100004:132 300100023:1293 300100032:23316 300100035:1342 300100036:1260 300100038:3211 300100041:220 300100043:942 300100044:1103 300100045:2483 300100047:5925 300100048:793 300100049:902 300100051:2233 300100062:2162 300100064:2037 300100065:226 300100066:1751 300100067:456 300100068:5980 300100069:1126 300100070:596 300100071:471 300100072:6284 300100073:2000 300100074:1385 300100075:149 300100076:3561 300100077:801 300100078:733 300100079:504 300100080:6683 300100081:533 300100082:5777 300100083:2238 300100084:3222 300100085:13675 300100086:375 300100087:3816 300100088:1725 300100089:5732 300100090:398 300100091:523 300100092:1103 300100093:550 300100094:192 300100095:4778 300100096:5140 300100097:6028 300100098:789 300100099:2540 300100100:2015 300100101:4476 300100102:3762 300100103:153 300100104:3637 300100105:3905 300100106:886 300100107:1364 300100108:1111 300100109:4327 300100110:2445 300100111:1429 300100112:539 300100113:2781 300100114:152 300100115:396 300100116:560 300100117:3868 300100118:5524 300100119:2072 300100120:1788 300100121:139 300100122:1236 300100123:3150 300100124:2616 300100125:2272 300100126:1881 300100127:512 300100128:521 300100129:715 300100130:235 300100131:3700 300100132:339 300100133:560 300100134:2286 300100135:2099 300100136:569 300100137:517 300100138:1628 300100139:414 300100140:2908 300100141:708 300100142:186 300100143:755 300100144:324 300100145:2501 300100146:776 300100147:2343 300100148:234 300100149:191 300100150:632 300100151:4910 300100152:185 300100153:2241 300100154:5794 300100155:2194 300100156:709 300100157:1677 300100158:271 300100159:984 300100160:785 300100161:1162 300100162:-186 300100163:394 300100164:219]
2025/03/06 09:47:58 remain 2025-02-07 success
2025/03/06 09:47:59 map[300100004:861 300100019:2758 300100029:82 300100030:1040 300100031:6247 300100032:5404 300100033:60 300100034:2584 300100035:7024 300100036:2472 300100037:1141 300100038:4210 300100039:431 300100040:3178 300100041:1362 300100042:302 300100043:1286 300100044:2136 300100045:2547 300100046:259 300100047:2754 300100048:3908 300100049:2306 300100050:1927 300100051:3588 300100052:1625 300100053:3247 300100054:297 300100055:76 300100056:398 300100057:1795 300100058:1133 300100059:1620 300100060:775 300100061:948 300100062:504 300100063:413 300100064:1319 300100065:-28 300100066:-51]
2025/03/06 09:47:59 remain 2025-02-06 success
2025/03/06 09:48:00 map[300100002:38 300100026:528]
2025/03/06 09:48:00 remain 2025-02-05 success
2025/03/06 09:48:00 map[]
2025/03/06 09:48:00 remain panic: runtime error: integer divide by zero
2025/03/06 09:48:00 end statistics

View File

@ -1,239 +0,0 @@
{
"schema": "2.0",
"header": {
"title": {
"tag": "plain_text",
"content": "运营周报"
},
"subtitle": {
"tag": "plain_text",
"content": ""
},
"text_tag_list": [
{
"tag": "text_tag",
"element_id": "custom_id_psd1",
"text": {
"tag": "plain_text",
"content": "UK"
},
"color": "orange"
}
],
"template": "green",
"icon": {
"tag": "standard_icon",
"token": "calendar_colorful",
"color": "green"
},
"padding": "12px 8px 12px 8px"
},
"body":{
"elements": [
{
"tag": "markdown",
"element_id": "custom_md_id_s12",
"margin": "0px 0px 0px 0px",
"content": "# 日期 2025-03-05 \n-----------------------------\n## 总体数据\n\n- **注册**1312\n- **充值**68.87\n- **充值人数**35\n- **流失率**77.74%\n- **ARPU**0.052\n\n> 超过7天未登录视为流失 \n\n---------------------------\n## 昨日数据\n\n- **注册**4\n- **充值**0\n- **登录**64\n- **平均在线时长**<font color="red">41.08%</font>\n- **平均完成订单数**<font color="red">8.27</font>\n\n## 留存数据",
"text_size": "normal",
"text_align": "left"
},{
"tag": "table",
"element_id": "custom_table_id_x12",
"margin": "0px 0px 0px 0px",
"page_size": 10,
"row_height": "low",
"row_max_height": "50px",
"freeze_first_column": true,
"header_style": {
"text_align": "center",
"text_size": "normal",
"background_style": "grey",
"text_color": "grey",
"bold": true,
"lines": 1
},
"columns": [
{
"name": "customer_date",
"display_name": "Date",
"width": "auto",
"data_type": "text",
"horizontal_align": "center" ,
"width": "105px"
},
{
"name": "customer_reg",
"display_name": "Reg",
"data_type": "number",
"horizontal_align": "center",
"width": "80px"
},
{
"name": "customer_login",
"display_name": "Login",
"data_type": "number",
"horizontal_align": "center",
"width": "80px"
},
{
"name": "customer_pay",
"display_name": "Pay",
"data_type": "number",
"horizontal_align": "center",
"format": {
"symbol": "$",
"precision": 2,
"separator": true
},
"width": "80px"
},
{
"name": "customer_retain2",
"display_name": "Retain2",
"data_type": "text",
"horizontal_align": "center",
"width": "80px"
},
{
"name": "customer_retain3",
"display_name": "Retain3",
"data_type": "text",
"horizontal_align": "center",
"width": "80px"
},
{
"name": "customer_retain7",
"display_name": "Retain7",
"data_type": "text",
"horizontal_align": "center",
"width": "80px"
}
],
"rows": [
{
"customer_date": "2025-03-04",
"customer_reg": 4,
"customer_login": 64,
"customer_pay": 0,
"customer_retain2": "0.00%",
"customer_retain3": "0.00%",
"customer_retain7": "0.00%"
},{
"customer_date": "2025-03-03",
"customer_reg": 0,
"customer_login": 69,
"customer_pay": 0,
"customer_retain2": "0.00%",
"customer_retain3": "0.00%",
"customer_retain7": "0.00%"
},{
"customer_date": "2025-03-02",
"customer_reg": 1,
"customer_login": 61,
"customer_pay": 0.49,
"customer_retain2": "0.00%",
"customer_retain3": "0.00%",
"customer_retain7": "0.00%"
},{
"customer_date": "2025-03-01",
"customer_reg": 10,
"customer_login": 76,
"customer_pay": 2.98,
"customer_retain2": "10.00%",
"customer_retain3": "0.00%",
"customer_retain7": "0.00%"
},{
"customer_date": "2025-02-28",
"customer_reg": 12,
"customer_login": 59,
"customer_pay": 0,
"customer_retain2": "33.33%",
"customer_retain3": "25.00%",
"customer_retain7": "0.00%"
},{
"customer_date": "2025-02-27",
"customer_reg": 29,
"customer_login": 123,
"customer_pay": 3.99,
"customer_retain2": "3.45%",
"customer_retain3": "3.45%",
"customer_retain7": "0.00%"
},{
"customer_date": "2025-02-26",
"customer_reg": 28,
"customer_login": 112,
"customer_pay": 3.47,
"customer_retain2": "25.00%",
"customer_retain3": "14.29%",
"customer_retain7": "7.14%"
},{
"customer_date": "2025-02-25",
"customer_reg": 38,
"customer_login": 136,
"customer_pay": 0,
"customer_retain2": "21.05%",
"customer_retain3": "15.79%",
"customer_retain7": "7.90%"
},{
"customer_date": "2025-02-24",
"customer_reg": 23,
"customer_login": 111,
"customer_pay": 1.47,
"customer_retain2": "34.78%",
"customer_retain3": "21.74%",
"customer_retain7": "17.39%"
},{
"customer_date": "2025-02-23",
"customer_reg": 35,
"customer_login": 125,
"customer_pay": 0.99,
"customer_retain2": "28.57%",
"customer_retain3": "25.71%",
"customer_retain7": "20.00%"
},{
"customer_date": "2025-02-22",
"customer_reg": 39,
"customer_login": 126,
"customer_pay": 1.47,
"customer_retain2": "30.77%",
"customer_retain3": "17.95%",
"customer_retain7": "2.56%"
},{
"customer_date": "2025-02-21",
"customer_reg": 62,
"customer_login": 163,
"customer_pay": 4.45,
"customer_retain2": "24.19%",
"customer_retain3": "9.68%",
"customer_retain7": "9.68%"
},{
"customer_date": "2025-02-20",
"customer_reg": 50,
"customer_login": 133,
"customer_pay": 0,
"customer_retain2": "36.00%",
"customer_retain3": "16.00%",
"customer_retain7": "16.00%"
},{
"customer_date": "2025-02-19",
"customer_reg": 86,
"customer_login": 167,
"customer_pay": 7.47,
"customer_retain2": "19.77%",
"customer_retain3": "13.95%",
"customer_retain7": "8.14%"
},{
"customer_date": "2025-02-18",
"customer_reg": 74,
"customer_login": 149,
"customer_pay": 11.9,
"customer_retain2": "35.13%",
"customer_retain3": "25.68%",
"customer_retain7": "17.57%"
}
]
}
]
}
}

View File

@ -2,7 +2,6 @@ package main
import (
"backend/controller"
"backend/feishu/server"
"backend/util"
"log"
"os"
@ -55,13 +54,13 @@ func main() {
// 飞书
api.POST("/feishu/sendInfo", controller.FeishuSendInfo)
api.POST("/feishu/sendInfo2", controller.FeishuSendInfo2)
api.POST("/feishu/sendWeekInfo", controller.FeishuSendWeekInfo)
api.POST("/feishu/updateApp", controller.FeishuUpdateApp)
api.POST("/feishu/serverInfo", controller.FeishuServerInfo)
}
go controller.AppPortNmap()
go util.ScheduleDailyTask()
go server.Server()
// go server.Server()
r.Run(":5320") // 在 0.0.0.0:5320 上监听并服务
}

Binary file not shown.

5
template/card_hr.tmpl Normal file
View File

@ -0,0 +1,5 @@
{
"tag": "hr",
"element_id": "card_hr_fso",
"margin": "0px 0px 0px 0px"
}

View File

@ -16,7 +16,7 @@
- **注册**{{.YRegister}}
- **充值**{{.YRecharge}}
- **登录**{{.YLogin}}
- **平均在线时长**<font color="{{.C1}}">{{.PerOnlineTime}}%</font>
- **平均在线时长**<font color="{{.C1}}">{{.PerOnlineTime}}</font>分钟
- **平均完成订单数**<font color="{{.C2}}">{{.PerOrderNum}}</font>
## 留存数据

View File

@ -0,0 +1,14 @@
{
"tag": "chart",
"chart_spec": {
"type": "area",
"title": {
"text": "活跃度"
},
"data": {
"values": [{{.Values}}]
},
"xField": "time",
"yField": "value"
}
}

View File

@ -0,0 +1,22 @@
{
"tag": "chart",
"chart_spec": {
"type": "bar",
"title": {
"text": "等级分布"
},
"data": {
"values": [{{.Values}}]
},
"xField": [
"level",
"type"
],
"yField": "value",
"seriesField": "type",
"legends": {
"visible": true,
"orient": "bottom"
}
}
}

View File

@ -0,0 +1,22 @@
{
"tag": "chart",
"chart_spec": {
"type": "bar",
"title": {
"text": "等级分布"
},
"data": {
"values": [{{.Values}}]
},
"xField": [
"deco_step",
"type"
],
"yField": "value",
"seriesField": "type",
"legends": {
"visible": true,
"orient": "bottom"
}
}
}

View File

@ -20,7 +20,7 @@ func TestXxx1(t *testing.T) {
fmt.Println(str)
}
func TestXxx(t *testing.T) {
controller.FeishuSendInfo(nil)
controller.FeishuSendInfo2(nil)
}
func TestFeishu(t *testing.T) {

View File

@ -5,7 +5,9 @@ import (
"encoding/json"
"fmt"
"log"
"sort"
"strconv"
"strings"
"time"
)
@ -279,3 +281,238 @@ func GetOperation(AppId int) (*Type.Operation, error) {
}
return R, nil
}
func GetDailyHeat(AppId int) (*Type.HeatData, error) {
AppConfig, err := GetAppConfig(AppId)
if err != nil {
return nil, err
}
LogDb := MPool.GetTopicDB(AppConfig.Topic)
defer LogDb.Close()
if LogDb == nil {
return nil, fmt.Errorf("failed to get mysql database")
}
now := ZeroTimestampByTz(AppConfig.Tz)
value := make([]int, 0, 24)
value2 := make([]int, 0, 24)
key := make([]string, 0, 24)
for i := 0; i < 24; i++ {
key = append(key, fmt.Sprintf("%02d:00", i))
}
type r struct {
Sum1 int `db:"sum1"`
Sum2 int `db:"sum2"`
}
var result r
for i := 0; i < 24; i++ {
err := LogDb.Get(&result, "select count(*) as sum1, count(distinct Uid) as sum2 from log_event where Timestamp >= ? and Timestamp <= ?", now-int64(i)*3600-3600, now-int64(i)*3600)
if err != nil {
return nil, fmt.Errorf("failed to get heat count: %v", err)
}
value = append(value, result.Sum1)
value2 = append(value2, result.Sum2)
key[i] = fmt.Sprintf("%02d:00", GetHour(now-int64(i)*3600, AppConfig.Tz))
}
if len(value) < 2 {
return nil, nil
}
// 反转key和value
for i, j := 0, len(value)-1; i < j; i, j = i+1, j-1 {
key[i], key[j] = key[j], key[i]
value2[i], value2[j] = value2[j], value2[i]
value[i], value[j] = value[j], value[i]
}
return &Type.HeatData{
Key: key,
Value: value,
Value2: value2,
}, nil
}
func GetLevelData(AppId int) (*Type.LevelData, error) {
AppConfig, err := GetAppConfig(AppId)
if err != nil {
return nil, err
}
LogDb := MPool.GetTopicDB(AppConfig.Topic)
defer LogDb.Close()
if LogDb == nil {
return nil, fmt.Errorf("failed to get mysql database")
}
type data struct {
Param string `db:"param"`
Uid int `db:"Uid"`
Timestamp int64 `db:"Timestamp"`
}
dataList := []data{}
err = LogDb.Select(&dataList, "SELECT `param`, `Uid`, `Timestamp` FROM log_event WHERE `Event` = 'level_up'")
if err != nil {
return nil, fmt.Errorf("failed to select data: %v", err)
}
type Users struct {
Uid int `db:"Uid"`
}
InactiveUsers := []Users{}
ZeroTimestamp := ZeroTimestampByTz(AppConfig.Tz)
err = LogDb.Select(&InactiveUsers, "SELECT Uid from (SELECT Uid, MAX(Timestamp) as LastLogin FROM log_login WHERE Event = 'Login_log' GROUP BY Uid) as lt where lastlogin < ?", ZeroTimestamp-7*86400)
if err != nil {
return nil, fmt.Errorf("failed to select data: %v", err)
}
d0 := make([]int, 0)
for _, v := range InactiveUsers {
d0 = append(d0, v.Uid)
}
d1 := make(map[int]data)
for _, v := range dataList {
if _, ok := d1[v.Uid]; !ok {
d1[v.Uid] = v
}
if v.Timestamp > d1[v.Uid].Timestamp {
d1[v.Uid] = v
}
}
type data2 struct {
Num int
Churn int
}
d2 := make(map[int]*data2)
for _, v := range d1 {
var jd struct {
NextLevel int `json:"after_level"`
}
err := json.Unmarshal([]byte(v.Param), &jd)
if err != nil {
continue
}
if _, ok := d2[jd.NextLevel]; !ok {
d2[jd.NextLevel] = &data2{
Num: 0,
Churn: 0,
}
}
d2[jd.NextLevel].Num++
if InArray(v.Uid, d0) {
d2[jd.NextLevel].Churn++
}
}
key := make([]int, 0, len(d2))
for k := range d2 {
key = append(key, k)
}
sort.Slice(key, func(i, j int) bool {
return key[i] < key[j]
})
value := make([]int, 0, len(d2))
value2 := make([]int, 0, len(d2))
for _, v := range key {
value = append(value, d2[v].Num)
value2 = append(value2, d2[v].Churn)
}
key1 := make([]string, 0, len(d2))
for _, v := range key {
key1 = append(key1, strconv.Itoa(v))
}
return &Type.LevelData{
Key: key1,
Value: value,
Value2: value2,
}, nil
}
func GetDecorateData(AppId int) (*Type.DecorateData, error) {
AppConfig, err := GetAppConfig(AppId)
if err != nil {
return nil, err
}
LogDb := MPool.GetTopicDB(AppConfig.Topic)
defer LogDb.Close()
if LogDb == nil {
return nil, fmt.Errorf("failed to get mysql database")
}
type data struct {
Param string `db:"param"`
Uid int `db:"Uid"`
Timestamp int64 `db:"Timestamp"`
}
dataList := []data{}
err = LogDb.Select(&dataList, "SELECT `param`, `Uid`, `Timestamp` FROM log_event WHERE `Event` = 'scene_reward'")
if err != nil {
return nil, fmt.Errorf("failed to select data: %v", err)
}
type Users struct {
Uid int `db:"Uid"`
}
InactiveUsers := []Users{}
ZeroTimestamp := ZeroTimestampByTz(AppConfig.Tz)
err = LogDb.Select(&InactiveUsers, "SELECT Uid from (SELECT Uid, MAX(Timestamp) as LastLogin FROM log_login WHERE Event = 'Login_log' GROUP BY Uid) as lt where lastlogin < ?", ZeroTimestamp-7*86400)
if err != nil {
return nil, fmt.Errorf("failed to select data: %v", err)
}
d0 := make([]int, 0)
for _, v := range InactiveUsers {
d0 = append(d0, v.Uid)
}
d1 := make(map[int]data)
for _, v := range dataList {
if _, ok := d1[v.Uid]; !ok {
d1[v.Uid] = v
}
if v.Timestamp > d1[v.Uid].Timestamp {
d1[v.Uid] = v
}
}
type data2 struct {
Num int
Churn int
}
d2 := make(map[string]*data2)
for _, v := range d1 {
var jd struct {
Step string `json:"deco_step_id"`
}
err := json.Unmarshal([]byte(v.Param), &jd)
if err != nil {
continue
}
if _, ok := d2[jd.Step]; !ok {
d2[jd.Step] = &data2{
Num: 0,
Churn: 0,
}
}
d2[jd.Step].Num++
if InArray(v.Uid, d0) {
d2[jd.Step].Churn++
}
}
key := make([]string, 0, len(d2))
for k := range d2 {
key = append(key, k)
}
sort.Slice(key, func(i, j int) bool {
a := strings.Split(key[i], "_")
b := strings.Split(key[j], "_")
aa1, _ := strconv.Atoi(a[0])
aa2, _ := strconv.Atoi(a[1])
bb1, _ := strconv.Atoi(b[0])
bb2, _ := strconv.Atoi(b[1])
if aa1 == bb1 {
return aa2 < bb2
}
return aa1 < bb1
})
value := make([]int, 0, len(d2))
value2 := make([]int, 0, len(d2))
for _, v := range key {
value = append(value, d2[v].Num)
value2 = append(value2, d2[v].Churn)
}
return &Type.DecorateData{
Key: key,
Value: value,
Value2: value2,
}, nil
}

View File

@ -82,6 +82,15 @@ func Int(a interface{}) int {
return 0
}
func InArray(Id int, s []int) bool {
for _, v := range s {
if v == Id {
return true
}
}
return false
}
func Now() int64 {
return time.Now().Unix()
}