2022-01-26 16:40:50 +08:00
package realdata
import (
"github.com/1340691923/xwl_bi/engine/db"
"github.com/1340691923/xwl_bi/platform-basic-libs/response"
"github.com/1340691923/xwl_bi/platform-basic-libs/service/consumer_data"
"github.com/1340691923/xwl_bi/platform-basic-libs/util"
"strconv"
)
type RealDataService struct {
}
//错误数据列表
func ( this RealDataService ) FailDataList ( minutes int , appid int ) ( failDataResList [ ] response . FailDataRes , err error ) {
err = db . ClickHouseSqlx . Select ( & failDataResList , `
select
toStartOfInterval ( a . part_date , INTERVAL ` +strconv.Itoa(minutes)+ ` minute ) as interval_date ,
formatDateTime ( interval_date , ' % Y - % m - % d ' ) as year , formatDateTime ( interval_date , ' % H : % M ' ) as start_minute , formatDateTime ( addMinutes ( interval_date , ? ) , ' % H : % M ' ) as end_minute ,
count ( report_data ) as count , a . error_reason , a . error_handling , report_type
2022-03-09 11:56:26 +08:00
from ( select * from xwl_acceptance_status prewhere table_id = ? and status = ? order by part_date desc limit 1000 ) a
2022-01-26 16:40:50 +08:00
group by interval_date , a . error_reason , a . error_handling , report_type
order by interval_date desc ;
` , minutes , appid , consumer_data . FailStatus )
return
}
func ( this RealDataService ) FailDataDesc ( appid , startTime , endTime , errorReason , errorHandling , reportType string ) ( data string , err error ) {
err = db . ClickHouseSqlx . Get ( & data , `
2022-03-09 11:56:26 +08:00
select report_data from xwl_acceptance_status prewhere
2022-01-26 16:40:50 +08:00
table_id = ` +appid+ `
and part_date >= ' ` +startTime+ ` '
and part_date <= ' ` +endTime+ ` '
and error_reason = ' ` +errorReason+ ` '
and error_handling = ' ` +errorHandling+ ` '
and status = ` +strconv.Itoa(consumer_data.FailStatus)+ `
and report_type = ' ` +reportType+ ` ' LIMIT 1
` )
return
}
func ( this RealDataService ) ReportCount ( appid string , startTime string , endTime string ) ( res [ ] response . ReportCountRes , err error ) {
type count struct {
DataName string ` db:"data_name" `
Count int ` db:"count" `
}
type ShowNameTmp struct {
EventName string ` db:"event_name" `
ShowName string ` db:"show_name" `
}
var allCountArr [ ] count
var failCountArr [ ] count
var succCountArr [ ] count
var showNameTmpArr [ ] ShowNameTmp
mysqlErr := db . Sqlx . Select ( & showNameTmpArr , "select event_name,show_name from meta_event where appid = ?" , appid )
if util . FilterMysqlNilErr ( mysqlErr ) {
return nil , mysqlErr
}
2022-03-09 11:56:26 +08:00
err = db . ClickHouseSqlx . Select ( & allCountArr , ` select data_name,count() as count from xwl_acceptance_status xas prewhere table_id = ` + appid + ` and part_date >= ' ` + startTime + ` ' and part_date <= ' ` + endTime + ` ' group by data_name ` )
2022-01-26 16:40:50 +08:00
if err != nil {
return nil , err
}
2022-03-09 11:56:26 +08:00
err = db . ClickHouseSqlx . Select ( & failCountArr , ` select data_name,count() as count from xwl_acceptance_status xas prewhere status = 0 and table_id = ` + appid + ` and part_date >= ' ` + startTime + ` ' and part_date <= ' ` + endTime + ` ' group by data_name ` )
2022-01-26 16:40:50 +08:00
if err != nil {
return nil , err
}
2022-03-09 11:56:26 +08:00
err = db . ClickHouseSqlx . Select ( & succCountArr , ` select data_name,count() as count from xwl_acceptance_status xas prewhere status = 1 and table_id = ` + appid + ` and part_date >= ' ` + startTime + ` ' and part_date <= ' ` + endTime + ` ' group by data_name ` )
2022-01-26 16:40:50 +08:00
if err != nil {
return nil , err
}
resMap := map [ string ] response . ReportCountRes { }
for _ , data := range allCountArr {
var tmp response . ReportCountRes
tmp . ReceivedCount = data . Count
tmp . DataName = data . DataName
resMap [ data . DataName ] = tmp
}
for _ , data := range failCountArr {
if _ , found := resMap [ data . DataName ] ; found {
tmp := resMap [ data . DataName ]
tmp . FailCount = data . Count
resMap [ data . DataName ] = tmp
}
}
for _ , data := range succCountArr {
if _ , found := resMap [ data . DataName ] ; found {
tmp := resMap [ data . DataName ]
tmp . SuccCount = data . Count
resMap [ data . DataName ] = tmp
}
}
for _ , data := range showNameTmpArr {
if _ , found := resMap [ data . EventName ] ; found {
tmp := resMap [ data . EventName ]
tmp . ShowName = data . ShowName
resMap [ data . EventName ] = tmp
}
}
for _ , data := range resMap {
res = append ( res , data )
}
return res , nil
}
func ( this RealDataService ) EventFailDesc ( appid , startTime , endTime , dataName string ) ( res [ ] response . EventFailDescRes , err error ) {
2022-03-09 11:56:26 +08:00
err = db . ClickHouseSqlx . Select ( & res , ` select error_reason , count ( ) as count , any ( report_data ) as report_data from xwl_acceptance_status prewhere
2022-01-26 16:40:50 +08:00
table_id = ` +appid+ `
and part_date >= ' ` +startTime+ ` '
and part_date <= ' ` +endTime+ ` '
and data_name = ' ` +dataName+ ` '
and status = ` +strconv.Itoa(consumer_data.FailStatus)+ `
group by error_reason ` )
if err != nil {
return nil , err
}
return res , nil
}