119 lines
3.1 KiB
Go
119 lines
3.1 KiB
Go
![]() |
package analysis
|
||
|
|
||
|
import (
|
||
|
"github.com/1340691923/xwl_bi/engine/db"
|
||
|
"github.com/1340691923/xwl_bi/engine/logs"
|
||
|
"github.com/1340691923/xwl_bi/platform-basic-libs/my_error"
|
||
|
"github.com/1340691923/xwl_bi/platform-basic-libs/request"
|
||
|
"github.com/1340691923/xwl_bi/platform-basic-libs/service/analysis/utils"
|
||
|
parser "github.com/1340691923/xwl_bi/platform-basic-libs/sinker/parse"
|
||
|
"github.com/1340691923/xwl_bi/platform-basic-libs/util"
|
||
|
jsoniter "github.com/json-iterator/go"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type UserList struct {
|
||
|
req request.UserListReqData
|
||
|
propMap map[string]string
|
||
|
}
|
||
|
|
||
|
func (this *UserList) GetList() (interface{}, error) {
|
||
|
SQL, args, err := this.GetExecSql()
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
logs.Logger.Sugar().Infof("sql", SQL, args)
|
||
|
|
||
|
rows, err := db.ClickHouseSqlx.Query(SQL, args...)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
columns, err := rows.Columns()
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
columnLength := len(columns)
|
||
|
cache := make([]interface{}, columnLength)
|
||
|
for index, _ := range cache {
|
||
|
var a interface{}
|
||
|
cache[index] = &a
|
||
|
}
|
||
|
var list []map[string]interface{}
|
||
|
|
||
|
for rows.Next() {
|
||
|
err := rows.Scan(cache...)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
item := make(map[string]interface{})
|
||
|
for i, data := range cache {
|
||
|
item[columns[i]] = *data.(*interface{})
|
||
|
}
|
||
|
list = append(list, item)
|
||
|
}
|
||
|
|
||
|
for index := range list {
|
||
|
obj := list[index]
|
||
|
|
||
|
for k, v := range obj {
|
||
|
|
||
|
switch v.(type) {
|
||
|
case time.Time:
|
||
|
obj[k] = v.(time.Time).Format(util.TimeFormat)
|
||
|
}
|
||
|
}
|
||
|
list[index] = obj
|
||
|
}
|
||
|
delete(this.propMap, "xwl_update_time")
|
||
|
return map[string]interface{}{"alldata": list, "propMap": this.propMap}, nil
|
||
|
|
||
|
}
|
||
|
|
||
|
func (this *UserList) GetExecSql() (SQL string, allArgs []interface{}, err error) {
|
||
|
allArgs = append(allArgs, this.req.UI)
|
||
|
|
||
|
type Attribute struct {
|
||
|
AttributeName string `db:"attribute_name" json:"attribute_name"` //属性名
|
||
|
ShowName string `db:"show_name" json:"show_name"`
|
||
|
}
|
||
|
var attributes []Attribute
|
||
|
err = db.Sqlx.Select(&attributes, "select attribute_name,show_name from attribute where app_id = ? and attribute_source =? and (status = 1 or attribute_type = 1)", this.req.Appid, 1)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
fields := make([]string, len(attributes))
|
||
|
|
||
|
for index, attribute := range attributes {
|
||
|
|
||
|
fields[index] = attribute.AttributeName
|
||
|
if _, ok := parser.SysColumn[attribute.AttributeName]; ok {
|
||
|
this.propMap[attribute.AttributeName] = parser.SysColumn[attribute.AttributeName]
|
||
|
} else {
|
||
|
if attribute.ShowName == "" {
|
||
|
this.propMap[attribute.AttributeName] = attribute.AttributeName
|
||
|
} else {
|
||
|
this.propMap[attribute.AttributeName] = attribute.ShowName
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SQL = `select * from ` + utils.GetUserTableView(this.req.Appid, fields) + ` where xwl_distinct_id in (?)`
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func NewUserList(reqData []byte) (Ianalysis, error) {
|
||
|
obj := &UserList{}
|
||
|
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
||
|
err := json.Unmarshal(reqData, &obj.req)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if len(obj.req.UI) <= 0 {
|
||
|
return nil, my_error.NewBusiness(ERROR_TABLE, UIEmptyError)
|
||
|
}
|
||
|
obj.propMap = map[string]string{}
|
||
|
return obj, nil
|
||
|
}
|