package models
|
|
import (
|
"basic.com/pubsub/protomsg.git"
|
"github.com/pkg/errors"
|
"strconv"
|
"vamicro/config"
|
)
|
|
type Dbtables struct {
|
BaseEntity
|
TableName string `gorm:"column:tableName" json:"tableName" example:"底库123"`
|
TableDesc string `gorm:"column:tableDesc" json:"tableDesc" example:"底库描述"`
|
TableType string `gorm:"column:tableType" json:"tableType" example:"person,car"`
|
BwType string `gorm:"column:bwType" json:"bwType" example:"黑名单:1,白名单:0"`
|
StartTime string `gorm:"column:startTime" json:"startTime" example:"2019-01-12 12:14:56"`
|
EndTime string `gorm:"column:endTime" json:"endTime" example:"2019-10-12 12:14:56"`
|
IsSync string `gorm:"column:isSync" json:"isSync" example:"1:同步到管理平台,2:不同步"`
|
AnalyServerId string `gorm:"column:analyServerId" json:"analyServerId" example:"本地库所属的分析设备id,如果是同步库就不需要记录"`
|
}
|
|
func (dt *Dbtables) Add() (bool, error) {
|
if dt.AnalyServerId != "" { //本地库
|
db.LogMode(false)
|
defer db.LogMode(true)
|
}
|
result := db.Table("dbtables").Create(&dt)
|
if result.Error != nil {
|
return false, result.Error
|
}
|
if result.RowsAffected > 0 {
|
go SyncSdkCompareCache(dt.AnalyServerId, protomsg.EsCacheChanged_T_DbTable,
|
dt.Id, "", "", protomsg.DbAction_Insert, int32(dt.Enable), "")
|
return true, nil
|
}
|
return false, errors.New("dbtable create err")
|
}
|
|
func (dt *Dbtables) Update() (bool, error) {
|
if dt.AnalyServerId != "" { //本地库不同步
|
db.LogMode(false)
|
defer db.LogMode(true)
|
}
|
sql := "update dbtables set tableName=?,tableDesc=?,tableType=?,bwType=?,startTime=?,endTime=?,isSync=?,updateTime=?,enable=? where id=?"
|
result := db.Exec(sql, dt.TableName, dt.TableDesc, dt.TableType, dt.BwType, dt.StartTime, dt.EndTime, dt.IsSync, dt.UpdateTime, dt.Enable, dt.Id)
|
//result := db.Table("dbtables").Where("id=?",dt.Id).Update(&dt)
|
if result.Error != nil {
|
return false, result.Error
|
}
|
if result.RowsAffected > 0 {
|
go SyncSdkCompareCache(dt.AnalyServerId, protomsg.EsCacheChanged_T_DbTable,
|
dt.Id, "", "", protomsg.DbAction_Update, int32(dt.Enable), "")
|
|
return true, nil
|
}
|
return false, errors.New("dbtable update err")
|
}
|
|
func (dt *Dbtables) FindByName(name string) (list []Dbtables, err error) {
|
err = db.Table("dbtables").Where("tableName=? and isDelete=0", name).Scan(&list).Error
|
return list, err
|
}
|
|
func (dt *Dbtables) UpdateEnableStatus(id string, enable int) (bool, error) {
|
var dtTmp Dbtables
|
rows, _ := dtTmp.SelectById(id)
|
if rows > 0 {
|
if dtTmp.AnalyServerId != "" { //本地库
|
db.LogMode(false)
|
defer db.LogMode(true)
|
}
|
sql := ""
|
|
/*
|
// 不明白之前的逻辑为什么关闭的时候要修改到期时间. 暂时先取消 20221117
|
if enable ==0 {//切换为关闭
|
//如果截止日期为当前时间以后,则强制将截止日期改为过去时间
|
var flag = false
|
if dtTmp.EndTime != "" {
|
ct := time.Now()
|
et, _ := time.ParseInLocation("2006-01-02 15:04:05", dtTmp.EndTime, time.Local)
|
if et.After(ct) {
|
flag = true
|
}
|
} else {
|
flag = true
|
}
|
if flag {
|
yesTime := time.Now().AddDate(0,0,-1).Format("2006-01-02")+" 23:59:59"
|
sql = "update dbtables set enable="+strconv.Itoa(enable)+",endTime='"+yesTime+"' where id='"+id+"'"
|
} else {
|
sql = "update dbtables set enable="+strconv.Itoa(enable)+" where id='"+id+"'"
|
}
|
|
} else {
|
sql = "update dbtables set enable="+strconv.Itoa(enable)+" where id='"+id+"'"
|
}
|
*/
|
|
sql = "update dbtables set enable=" + strconv.Itoa(enable) + " where id='" + id + "'"
|
|
result := db.Exec(sql)
|
if result.Error != nil {
|
return false, result.Error
|
}
|
if result.RowsAffected > 0 {
|
go SyncSdkCompareCache(dtTmp.AnalyServerId, protomsg.EsCacheChanged_T_DbTable,
|
id, "", "", protomsg.DbAction_Update, int32(enable), "")
|
|
return true, nil
|
}
|
}
|
|
return false, errors.New("dbtable not exist")
|
}
|
|
func (dt *Dbtables) SelectById(id string) (rows int64, err error) {
|
dbselect := db.Table("dbtables").Where("id = ?", id).First(&dt)
|
if dbselect.Error != nil || dbselect.RowsAffected == 0 {
|
return 0, err
|
}
|
return dbselect.RowsAffected, nil
|
}
|
|
func (dt *Dbtables) DeleteById(id string) (b bool, err error) {
|
var dtTmp Dbtables
|
rows, _ := dtTmp.SelectById(id)
|
if rows > 0 {
|
if dtTmp.AnalyServerId != "" { //本地库
|
db.LogMode(false)
|
defer db.LogMode(true)
|
}
|
tx := db.Begin()
|
defer func() {
|
if tx != nil && err != nil {
|
tx.Rollback()
|
}
|
}()
|
|
result := tx.Exec("update dbtables set isDelete=1 where id=?", id)
|
err = result.Error
|
if err != nil {
|
return false, err
|
}
|
//底库被删除则底库下的人都置为删除状态
|
err = tx.Exec("update dbtablepersons set isDelete=1 where tableId=?", id).Error
|
if err != nil {
|
return false, err
|
}
|
tx.Commit()
|
if result.RowsAffected > 0 {
|
go SyncSdkCompareCache(dtTmp.AnalyServerId, protomsg.EsCacheChanged_T_DbTable,
|
id, "", "", protomsg.DbAction_Delete, 0, "")
|
return true, nil
|
}
|
}
|
|
return false, errors.New("dbtable not exist")
|
}
|
|
//查同步库或者本地库
|
//isSync:1表示查同步库,analyServerId为空,isSync:2表示查本地库,analyServerId为当前服务器的serverId
|
func (dt *Dbtables) FindByIsSync(tableName string, isSync string) (arr []Dbtables, err error) {
|
if config.Server.AnalyServerId == "" {
|
return nil, errors.New("localConfig select err")
|
}
|
sql := "select * from dbtables where isDelete=0"
|
if tableName != "" {
|
sql += " and tableName like '%" + tableName + "%'"
|
}
|
if isSync == "1" { //同步库
|
sql += " and (analyServerId ='' or analyServerId is NULL)"
|
} else if isSync == "2" { //本地库
|
sql += " and analyServerId ='" + config.Server.AnalyServerId + "'"
|
}
|
|
err = db.Raw(sql).Scan(&arr).Error
|
if err != nil {
|
return nil, err
|
}
|
return
|
}
|
|
func (dt *Dbtables) FindByDbtIds(ids []string) (arr []Dbtables, err error) {
|
str := ""
|
for _, id := range ids {
|
str += `'` + id + `',`
|
}
|
str = str[:len(str)-1]
|
sql := "select * from dbtables where id in (" + str + ")"
|
err = db.Raw(sql).Scan(&arr).Error
|
if err != nil {
|
return nil, err
|
}
|
return
|
}
|
|
func (dt *Dbtables) FindAllDbTablesByCurServer(isDelete int, typ string) (arr []Dbtables, err error) {
|
if config.Server.AnalyServerId == "" {
|
return nil, errors.New("localConfig select err")
|
}
|
sql := "select * from dbtables dbt where (analyServerId='" + config.Server.AnalyServerId + "' or (analyServerId='' or analyServerId is NULL))" //查本地库
|
if isDelete == 0 || isDelete == 1 {
|
sql += " and isDelete=" + strconv.Itoa(isDelete) + ""
|
}
|
if typ != "" {
|
sql += " and tableType='" + typ + "'"
|
}
|
err = db.Raw(sql).Find(&arr).Error
|
if err != nil {
|
return nil, err
|
}
|
return
|
}
|
|
func (dt *Dbtables) FindAllDbTables() (arr []Dbtables, err error) {
|
err = db.Raw("select * from dbtables").Scan(&arr).Error
|
if err != nil {
|
return nil, err
|
}
|
return arr, nil
|
}
|
|
func (dt *Dbtables) FindAllLocalDbTables(isDelete string) (arr []Dbtables, err error) {
|
if config.Server.AnalyServerId == "" {
|
return nil, errors.New("server config err")
|
}
|
sql := "select * from dbtables where analyServerId='" + config.Server.AnalyServerId + "'"
|
if isDelete == "0" || isDelete == "1" {
|
sql = sql + " and isDelete=" + isDelete + ""
|
}
|
|
err = db.Raw(sql).Scan(&arr).Error
|
if err != nil {
|
return nil, err
|
}
|
return
|
}
|