238 lines
5.8 KiB
Go
Raw Normal View History

2022-01-26 16:40:50 +08:00
package app
import (
"errors"
"github.com/1340691923/xwl_bi/engine/db"
"github.com/1340691923/xwl_bi/model"
"github.com/1340691923/xwl_bi/platform-basic-libs/service/analysis/utils"
"github.com/1340691923/xwl_bi/platform-basic-libs/service/myapp"
"github.com/1340691923/xwl_bi/platform-basic-libs/sinker"
"github.com/1340691923/xwl_bi/platform-basic-libs/util"
"strconv"
)
type AppService struct {
}
func (this *AppService) UpdateManager(app model.App, managerUid int32) (err error) {
2022-04-10 23:22:35 +08:00
_, err = db.
SqlBuilder.
Update("app").
SetMap(map[string]interface{}{
2025-05-22 16:27:39 +08:00
"app_manager": app.AppManager,
"update_by": managerUid}).
2022-04-10 23:22:35 +08:00
Where(db.Eq{"app_id": app.AppId}).
RunWith(db.Sqlx).Exec()
2022-01-26 16:40:50 +08:00
if err != nil {
return
}
return
}
func (this *AppService) Create(app model.App, managerUid int32) (err error) {
roolbackFn := func(id int64) {
2022-04-10 23:22:35 +08:00
db.SqlBuilder.
Delete("app").
Where(db.Eq{"id": id}).
RunWith(db.Sqlx).
Exec()
2022-01-26 16:40:50 +08:00
}
app.AppId = util.GetUUid()
app.AppKey = util.MD5HexHash(util.Str2bytes(util.GetUUid()))
2025-05-22 16:27:39 +08:00
if app.SaveMonthInt < 1 {
app.SaveMonthInt = 1
2022-01-26 16:40:50 +08:00
}
2022-04-10 23:22:35 +08:00
rows, err := db.
SqlBuilder.
Insert("app").
SetMap(map[string]interface{}{
2025-05-22 16:27:39 +08:00
"app_name": app.AppName,
"descibe": app.Descibe,
"app_id": app.AppId,
"app_key": app.AppKey,
"update_by": managerUid,
"create_by": managerUid,
"app_manager": managerUid,
"save_mouth": app.SaveMonth,
}).RunWith(db.Sqlx).Exec()
2022-01-26 16:40:50 +08:00
if err != nil {
return
}
tableId, err := rows.LastInsertId()
if err != nil {
return
}
eventTableName := "xwl_event" + strconv.Itoa(int(tableId))
_, err = db.ClickHouseSqlx.Exec(
` CREATE TABLE ` + eventTableName + ` ` + sinker.GetClusterSql() + ` (
xwl_part_date DateTime DEFAULT now(),
xwl_part_event String,
xwl_account_id String,
xwl_distinct_id String,
xwl_lib_version String,
xwl_os String,
xwl_screen_width Int64,
xwl_screen_height Int64,
xwl_device_id String,
xwl_network_type String,
xwl_device_model String,
xwl_ip String,
xwl_city String,
xwl_province String,
xwl_lib String,
xwl_scene String,
xwl_manufacturer String,
xwl_os_version String,
xwl_kafka_offset Int64,
xwl_kafka_partition Int64
)ENGINE = ` + sinker.GetMergeTree(eventTableName) + `
PARTITION BY (toYYYYMM(xwl_part_date))
2025-05-22 16:27:39 +08:00
ORDER BY (toYYYYMM(xwl_part_date),xwl_part_event) TTL xwl_part_date + toIntervalMonth(` + strconv.Itoa(app.SaveMonthInt) + `) SETTINGS index_granularity = 8192;`)
2022-01-26 16:40:50 +08:00
if err != nil {
roolbackFn(tableId)
return
}
userTableName := "xwl_user" + strconv.Itoa(int(tableId))
//由于clickhouse修改性能上的缺失所以本项目修改数据采用增量覆盖的方式
//因为ddl会修改所以不采用进行物化视图建立的方案
_, err = db.ClickHouseSqlx.Exec(
`CREATE table ` + userTableName + ` ` + sinker.GetClusterSql() + ` (
xwl_account_id String,
xwl_distinct_id String,
xwl_reg_time Nullable(DateTime),
xwl_update_time DateTime,
xwl_kafka_offset Int64,
xwl_kafka_partition Int64,
xwl_ip String,
xwl_city String,
xwl_province String
)
ENGINE = ` + sinker.GetReplacingMergeTree(userTableName, utils.ReplacingMergeTreeKey) + `
ORDER BY xwl_distinct_id
SETTINGS index_granularity = 8192;`)
if err != nil {
roolbackFn(tableId)
return
}
conn := db.RedisPool.Get()
defer conn.Close()
if _, err = conn.Do("hset", "AppidToTableid", app.AppId+"_xwl_"+app.AppKey, tableId); err != nil {
roolbackFn(tableId)
return
}
return
}
2022-03-16 16:04:29 +08:00
func (this AppService) ChangeStatus(app model.App, managerUid int32) (err error) {
2022-01-26 16:40:50 +08:00
if !util.InArr([]int{1, 0}, *app.IsClose) {
return errors.New("无效操作")
}
2022-04-10 23:22:35 +08:00
_, err = db.
SqlBuilder.
Update("app").
2022-01-26 16:40:50 +08:00
SetMap(map[string]interface{}{
2022-03-16 16:04:29 +08:00
"is_close": *app.IsClose,
"update_by": managerUid}).
2022-01-26 16:40:50 +08:00
Where(db.Eq{"app_id": app.AppId}).
RunWith(db.Sqlx).
Exec()
if err != nil {
return err
}
switch *app.IsClose {
case 1:
myapp.DeleteAppidToTableid(app.AppId, app.AppKey)
case 0:
if err = myapp.SetAppidToTableid(app.AppId, app.AppKey, app.Id); err != nil {
return err
}
default:
return errors.New("无效操作")
}
return nil
}
func (this *AppService) List(managerUid int32, app model.App) (list []model.App, count int, err error) {
2022-04-10 23:22:35 +08:00
selectBuilder := db.
SqlBuilder.
Select("*").
From("app")
selectBuilder2 := db.
SqlBuilder.
Select("count(*)").
From("app")
2022-01-26 16:40:50 +08:00
if managerUid != 1 {
selectBuilder = selectBuilder.Where(db.Eq{"create_by": managerUid})
selectBuilder2 = selectBuilder2.Where(db.Eq{"create_by": managerUid})
}
if app.AppName != "" {
selectBuilder = selectBuilder.Where(db.Like{"app_name": db.CreateLike(app.AppName)})
selectBuilder2 = selectBuilder2.Where(db.Like{"app_name": db.CreateLike(app.AppName)})
}
if app.IsClose != nil {
selectBuilder = selectBuilder.Where(db.Eq{"is_close": &app.IsClose})
selectBuilder2 = selectBuilder2.Where(db.Eq{"is_close": &app.IsClose})
}
sql, args, err := selectBuilder.Limit(app.Limit).Offset(db.CreatePage(app.Page, app.Limit)).ToSql()
if err != nil {
return
}
2022-04-10 23:22:35 +08:00
err = db.
Sqlx.
Select(&list, sql, args...)
2022-01-26 16:40:50 +08:00
if err != nil {
return
}
err = selectBuilder2.RunWith(db.Sqlx).QueryRow().Scan(&count)
if err != nil {
return
}
return
}
2022-03-16 16:04:29 +08:00
func (this *AppService) ResetAppkey(managerUid int32, app model.App) (err error) {
2022-01-26 16:40:50 +08:00
app.AppKey = util.MD5HexHash(util.Str2bytes(util.GetUUid()))
2022-04-10 23:22:35 +08:00
_, err = db.
SqlBuilder.
Update("app").
SetMap(map[string]interface{}{
2025-05-22 16:27:39 +08:00
"app_key": app.AppKey,
"update_by": managerUid,
}).Where(db.Eq{"app_id": app.AppId}).RunWith(db.Sqlx).Exec()
2022-01-26 16:40:50 +08:00
if err != nil {
return
}
if err = myapp.DeleteAppidToTableid(app.AppId, app.AppKey); err != nil {
return
}
if err = myapp.SetAppidToTableid(app.AppId, app.AppKey, app.Id); err != nil {
return
}
return
2022-03-16 16:04:29 +08:00
}