2022-01-26 16:40:50 +08:00
package meta_data
import (
"bytes"
"fmt"
"github.com/1340691923/xwl_bi/engine/db"
"github.com/1340691923/xwl_bi/platform-basic-libs/request"
"github.com/1340691923/xwl_bi/platform-basic-libs/response"
parser "github.com/1340691923/xwl_bi/platform-basic-libs/sinker/parse"
"github.com/1340691923/xwl_bi/platform-basic-libs/util"
"github.com/garyburd/redigo/redis"
"strings"
"time"
)
type MetaDataService struct {
Appid string ` json:"appid" `
}
type YesterdayCountRes struct {
XwlPartEvent string ` db:"xwl_part_event" `
Count int ` db:"count" `
}
func ( this * MetaDataService ) UpdateYesterdayCount ( ) ( err error ) {
Hash := "EventYesterdayCountCache"
redisConn := db . RedisPool . Get ( )
defer redisConn . Close ( )
lastUpdateDay , redisErr := redis . Int64 ( redisConn . Do ( "hget" , Hash , this . Appid ) )
if util . FilterRedisNilErr ( redisErr ) {
return redisErr
}
timeNow := time . Now ( ) . Unix ( )
if util . IsSameDay ( lastUpdateDay , timeNow ) {
return nil
}
var datas [ ] YesterdayCountRes
err = db . ClickHouseSqlx . Select ( & datas , "SELECT xwl_part_event,count() as count from xwl_event" + this . Appid + " xe where toDateTime(formatDateTime(xwl_part_date,'%Y-%m-%d')) = yesterday() group by xwl_part_event " )
if err != nil {
return err
}
_ , err = db . Sqlx . Exec ( "update meta_event set yesterday_count = 0 where appid= ?;" , this . Appid )
if err != nil {
return err
}
if len ( datas ) > 0 {
sqlStr := this . createSql ( datas )
_ , err = db . Sqlx . Exec ( sqlStr , this . Appid )
if err != nil {
return err
}
}
_ , err = redisConn . Do ( "hset" , Hash , this . Appid , timeNow )
if err != nil {
return err
}
return nil
}
func ( this * MetaDataService ) createSql ( datas [ ] YesterdayCountRes ) string {
sqlStart := ` UPDATE meta_event SET yesterday_count = CASE event_name `
sqlCaseWhen := ""
eventNameArr := [ ] string { }
for _ , data := range datas {
eventNameArr = append ( eventNameArr , fmt . Sprintf ( "'%v'" , data . XwlPartEvent ) )
sqlCaseWhen = sqlCaseWhen + fmt . Sprintf ( " WHEN '%v' THEN %v " , data . XwlPartEvent , data . Count )
}
sqlEnd := " END WHERE event_name IN (" + strings . Join ( eventNameArr , "," ) + ") and appid= ? "
return sqlStart + sqlCaseWhen + sqlEnd
}
func ( this * MetaDataService ) GetEventNameShowMap ( ) ( mapStr string , err error ) {
var eventNameList [ ] response . MetaEventListRes
if err := db . Sqlx . Select ( & eventNameList , "select event_name,show_name from meta_event where appid = ?" , this . Appid ) ; err != nil {
return "" , err
}
buff := bytes . Buffer { }
buff . WriteString ( "map(" )
for index , eventNameObj := range eventNameList {
buff . WriteString ( "'" )
buff . WriteString ( eventNameObj . EventName )
buff . WriteString ( "'" )
buff . WriteString ( "," )
buff . WriteString ( "'" )
if strings . TrimSpace ( eventNameObj . ShowName ) == "" {
buff . WriteString ( eventNameObj . EventName )
} else {
buff . WriteString ( eventNameObj . ShowName )
}
buff . WriteString ( "'" )
if index != len ( eventNameList ) - 1 {
buff . WriteString ( "," )
}
}
buff . WriteString ( ") " )
return buff . String ( ) , err
}
2022-03-16 16:04:29 +08:00
func ( this * MetaDataService ) MetaEventList ( ) ( res [ ] response . MetaEventListRes , err error ) {
2022-01-26 16:40:50 +08:00
if err := db . Sqlx . Select ( & res , "select event_name,show_name,yesterday_count from meta_event where appid = ?" , this . Appid ) ; err != nil {
2022-03-16 16:04:29 +08:00
return res , err
2022-01-26 16:40:50 +08:00
}
2022-03-16 16:04:29 +08:00
return res , err
2022-01-26 16:40:50 +08:00
}
2022-03-16 16:04:29 +08:00
func ( this * MetaDataService ) MetaEventListByAttr ( attr string ) ( res [ ] response . MetaEventListRes , err error ) {
2022-01-26 16:40:50 +08:00
eventNameList := [ ] string { }
if err := db . Sqlx . Select ( & eventNameList , "select event_name from meta_attr_relation where app_id = ? and event_attr = ? " , this . Appid , attr ) ; err != nil {
2022-03-16 16:04:29 +08:00
return res , err
2022-01-26 16:40:50 +08:00
}
var resTmp [ ] response . MetaEventListRes
if err := db . Sqlx . Select ( & resTmp , "select event_name,show_name,yesterday_count from meta_event where appid = ?" , this . Appid ) ; err != nil {
2022-03-16 16:04:29 +08:00
return res , err
2022-01-26 16:40:50 +08:00
}
for _ , v := range resTmp {
if util . InstrArr ( eventNameList , v . EventName ) {
res = append ( res , v )
}
}
2022-03-16 16:04:29 +08:00
return res , err
2022-01-26 16:40:50 +08:00
}
2022-03-16 16:04:29 +08:00
func ( this * MetaDataService ) AttrManager ( typ int ) ( res [ ] response . AttributeRes , err error ) {
2022-01-26 16:40:50 +08:00
if err := db . Sqlx . Select ( & res , "select attribute_name,show_name,data_type,attribute_type,status from attribute where app_id = ? and attribute_source =?" , this . Appid , typ ) ; err != nil {
2022-03-16 16:04:29 +08:00
return res , err
2022-01-26 16:40:50 +08:00
}
for k , v := range res {
if _ , ok := parser . TypeRemarkMap [ v . DataType ] ; ok {
res [ k ] . DataTypeFormat = parser . TypeRemarkMap [ v . DataType ]
}
if _ , ok := parser . SysColumn [ v . AttributeName ] ; ok {
res [ k ] . ShowName = parser . SysColumn [ v . AttributeName ]
res [ k ] . AttributeType = 1
}
}
2022-03-16 16:04:29 +08:00
return res , err
2022-01-26 16:40:50 +08:00
}
2022-03-16 16:04:29 +08:00
func ( this * MetaDataService ) UpdateAttrInvisible ( reqData request . UpdateAttrInvisibleReq ) ( err error ) {
2022-01-26 16:40:50 +08:00
appid := reqData . Appid
attributeSource := reqData . AttributeSource
attributeName := reqData . AttributeName
status := reqData . Status
if _ , err := db . Sqlx . Exec ( "update attribute set status = ? where app_id = ? and attribute_source = ? and attribute_name = ?;" , status , appid , attributeSource , attributeName ) ; err != nil {
return err
}
return nil
}
2022-03-16 16:04:29 +08:00
func ( this * MetaDataService ) AttrManagerByMeta ( reqData request . AttrManagerByMetaReq ) ( res [ ] response . AttributeRes , err error ) {
2022-01-26 16:40:50 +08:00
appid := reqData . Appid
2022-03-16 16:04:29 +08:00
typ := reqData . Typ
2022-01-26 16:40:50 +08:00
eventName := reqData . EventName
eventAttrList := [ ] string { }
if err := db . Sqlx . Select ( & eventAttrList , "select event_attr from meta_attr_relation where app_id = ? and event_name = ? " , appid , eventName ) ; err != nil {
2022-03-16 16:04:29 +08:00
return nil , err
2022-01-26 16:40:50 +08:00
}
var resTmp [ ] response . AttributeRes
if err := db . Sqlx . Select ( & resTmp , "select attribute_name,show_name,data_type,attribute_type from attribute where app_id = ? and attribute_source =?" , appid , typ ) ; err != nil {
2022-03-16 16:04:29 +08:00
return nil , err
2022-01-26 16:40:50 +08:00
}
for k , v := range resTmp {
if _ , ok := parser . TypeRemarkMap [ v . DataType ] ; ok {
resTmp [ k ] . DataTypeFormat = parser . TypeRemarkMap [ v . DataType ]
}
if _ , ok := parser . SysColumn [ v . AttributeName ] ; ok {
resTmp [ k ] . ShowName = parser . SysColumn [ v . AttributeName ]
}
if util . InstrArr ( eventAttrList , v . AttributeName ) {
res = append ( res , resTmp [ k ] )
}
}
2022-03-16 16:04:29 +08:00
return res , err
2022-01-26 16:40:50 +08:00
}
2022-03-16 16:04:29 +08:00
func ( this * MetaDataService ) UpdateAttrShowName ( reqData request . UpdateAttrShowNameReq ) ( err error ) {
2022-01-26 16:40:50 +08:00
appid := reqData . Appid
attributeName := reqData . AttributeName
attributeSource := reqData . Typ
showName := reqData . ShowName
if _ , err := db . Sqlx . Exec ( "update attribute set show_name = ? where app_id = ? and attribute_source = ? and attribute_name = ?;" , showName , appid , attributeSource , attributeName ) ; err != nil {
return err
}
return nil
}
2022-03-16 16:04:29 +08:00
func ( this * MetaDataService ) UpdateEventShowName ( reqData request . UpdateShowNameReq ) ( err error ) {
2022-01-26 16:40:50 +08:00
appid := reqData . Appid
eventName := reqData . EventName
showName := reqData . ShowName
if _ , err := db . Sqlx . Exec ( "update meta_event set show_name = ? where event_name = ? and appid = ? ;" , showName , eventName , appid ) ; err != nil {
return err
}
return nil
}
2022-03-16 16:04:29 +08:00
func ( this * MetaDataService ) GetCalcuSymbolData ( reqData request . GetCalcuSymbolDataReq ) ( res [ ] response . AttributeRes , err error ) {
2022-01-26 16:40:50 +08:00
appid := reqData . Appid
eventName := reqData . EventName
eventAttrList := [ ] string { }
if err := db . Sqlx . Select ( & eventAttrList , "select event_attr from meta_attr_relation where app_id = ? and event_name = ? " , appid , eventName ) ; err != nil {
2022-03-16 16:04:29 +08:00
return nil , err
2022-01-26 16:40:50 +08:00
}
var resTmp [ ] response . AttributeRes
if err := db . Sqlx . Select ( & resTmp , "select attribute_name,show_name,data_type,attribute_type from attribute where app_id = ? and (status = 1 or attribute_type = 1) and attribute_source =2" , appid ) ; err != nil {
2022-03-16 16:04:29 +08:00
return nil , err
2022-01-26 16:40:50 +08:00
}
for k , v := range resTmp {
if _ , ok := parser . TypeRemarkMap [ v . DataType ] ; ok {
resTmp [ k ] . DataTypeFormat = parser . TypeRemarkMap [ v . DataType ]
}
if _ , ok := parser . SysColumn [ v . AttributeName ] ; ok {
resTmp [ k ] . ShowName = parser . SysColumn [ v . AttributeName ]
}
if util . InstrArr ( eventAttrList , v . AttributeName ) {
res = append ( res , resTmp [ k ] )
}
}
2022-03-16 16:04:29 +08:00
return res , nil
2022-01-26 16:40:50 +08:00
}
type EventNameAndTheAttr struct {
EventNameDesc string ` json:"event_name_desc" db:"event_name_desc" `
EventName string ` json:"event_name" db:"event_name" `
AttributeName string ` json:"attribute_name" db:"attribute_name" `
AttributeDesc string ` json:"attribute_desc" db:"attribute_desc" `
DataType string ` json:"data_type" db:"data_type" `
AttributeType string ` json:"attribute_type" db:"attribute_type" `
}
2022-03-16 16:04:29 +08:00
func ( this * MetaDataService ) GetAnalyseSelectOptions ( appid int ) ( eventNameAndTheAttrList [ ] EventNameAndTheAttr , err error ) {
2022-01-26 16:40:50 +08:00
getEventNameAndTheAttrSql := `
SELECT e . show_name as event_name_desc ,
e . event_name ,
a . attribute_name ,
a . show_name as attribute_desc ,
a . data_type ,
a . attribute_type
FROM
( select * from meta_attr_relation where app_id = ? ) mu
INNER JOIN ( select * from meta_event where appid = ? ) e ON e . event_name = mu . event_name
INNER JOIN ( select * from attribute where app_id = ? and ( status = 1 or attribute_type = 1 ) and attribute_source = 2 and attribute_name not in ( ' xwl_part_event ',' xwl_part_date ',' xwl_kafka_offset ' ) ) a ON a . attribute_name = mu . event_attr `
err = db . Sqlx . Select ( & eventNameAndTheAttrList , getEventNameAndTheAttrSql , appid , appid , appid )
if err != nil {
return
}
return
}