index.go
3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package thinkingdata
import (
"crypto/tls"
"encoding/json"
"errors"
"fmt"
"gitee.com/lxgow/lxconv"
"github.com/astaxie/beego"
"github.com/astaxie/beego/httplib"
lconv "github.com/lixu-any/go-tools/conv"
"time"
)
// index
// 创建时间:2023/10/23 10:06
// 创建人:lixu
// index 数数科技
// 创建时间:2023/7/18 16:03
// 创建人:lixu
// GetNowDateTime 当前日期时间
func GetNowDateTime() string {
tim := time.Unix(time.Now().Unix(), 0).Format("2006-01-02 15:04:05")
return fmt.Sprintf("%s", tim)
}
type MThinkDataConfig struct {
Url string `json:"url"`
Debug int `json:"debug"`
}
type MRespData struct {
Msg string `json:"Msg"`
Code int `json:"code"`
}
var THINKINGDATACONFIG MThinkDataConfig
// InitThinkData 初始化数数
func InitThinkData() (err error) {
thinkingdata, _ := beego.AppConfig.GetSection("thinkingdata")
THINKINGDATACONFIG.Url = thinkingdata["url"]
THINKINGDATACONFIG.Debug = lxconv.ParseInt(thinkingdata["debug"])
return
}
// AddOneData 数据上报
func AddOneData(appid, account_id, distinct_id string, event string, data map[string]interface{}, typ string) (resp MRespData, err error) {
_data := map[string]interface{}{
"#type": typ,
//"#event_name": event,
"#time": GetNowDateTime(),
"#account_id": account_id,
"#distinct_id": distinct_id,
"properties": data,
}
if typ == "track" && event != "" {
_data["#event_name"] = event
}
postdata := map[string]interface{}{
"appid": appid,
"debug": THINKINGDATACONFIG.Debug,
"data": _data,
}
req := httplib.Post(THINKINGDATACONFIG.Url + "/sync_json")
req.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
_, err = req.JSONBody(&postdata)
if err != nil {
err = errors.New("thinkingdata-AddOneData req.JSONBody() error::" + err.Error() + "::" + lconv.JsonEncode(postdata))
return
}
var (
bytes []byte
)
bytes, err = req.Bytes()
if err != nil {
err = errors.New("thinkingdata-AddOneData req.Bytes() error::" + err.Error() + "::" + lconv.JsonEncode(postdata) + "::" + string(bytes))
return
}
_ = json.Unmarshal(bytes, &resp)
if resp.Code != 0 {
err = errors.New("thinkingdata-AddOneData resp.Code error:: " + lconv.JsonEncode(postdata) + "::" + string(bytes))
return
}
return
}
// TrackOne 向事件表传入一个事件
func TrackOne(appid, account_id string, event string, data map[string]interface{}) (resp MRespData, err error) {
return AddOneData(appid, account_id, "", event, data, "track")
}
// UserSet 对用户表进行操作,覆盖一个或多个用户属性,如果该属性已有值存在,覆盖先前值
func UserSet(appid, account_id string, data map[string]interface{}) (resp MRespData, err error) {
return AddOneData(appid, account_id, "", "", data, "user_set")
}
// UserSetOnce 对用户表进行操作,初始化一个或多个用户属性,如果该属性已有值存在,则忽略本次操作
func UserSetOnce(appid, account_id string, data map[string]interface{}) (resp MRespData, err error) {
return AddOneData(appid, account_id, "", "", data, "user_setOnce")
}
// UserAdd 对用户表进行操作,为一个或多个数值型用户属性做累加计算
func UserAdd(appid, account_id string, data map[string]interface{}) (resp MRespData, err error) {
return AddOneData(appid, account_id, "", "", data, "user_add")
}