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 }