qixiaoning
2025-08-26 7799d5acb4a25526625b3e99c2f7fd71d1be39ff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
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
}