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") }