You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.5 KiB
105 lines
2.5 KiB
package gorm |
|
|
|
import ( |
|
"context" |
|
"strings" |
|
|
|
"github.com/jinzhu/gorm" |
|
"go-common/app/admin/main/aegis/model/net" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
) |
|
|
|
// FlowByID . |
|
func (d *Dao) FlowByID(c context.Context, id int64) (f *net.Flow, err error) { |
|
f = &net.Flow{} |
|
err = d.orm.Where("id=?", id).First(f).Error |
|
if err == gorm.ErrRecordNotFound { |
|
err = ecode.AegisFlowNotFound |
|
return |
|
} |
|
if err != nil { |
|
log.Error("FlowByID(%+v) error(%v)", id, err) |
|
} |
|
return |
|
} |
|
|
|
// FlowList . |
|
func (d *Dao) FlowList(c context.Context, pm *net.ListNetElementParam) (result *net.ListFlowRes, err error) { |
|
result = &net.ListFlowRes{ |
|
Pager: net.Pager{ |
|
Num: pm.Pn, |
|
Size: pm.Ps, |
|
}, |
|
} |
|
|
|
db := d.orm.Table(net.TableFlow).Where("net_id=?", pm.NetID) |
|
if len(pm.ID) > 0 { |
|
db = db.Where("id in (?)", pm.ID) |
|
} |
|
pm.Name = strings.TrimSpace(pm.Name) |
|
if pm.Name != "" { |
|
db = db.Where("name=?", pm.Name) |
|
} |
|
|
|
err = db.Scopes(state(pm.State)).Count(&result.Pager.Total).Scopes(pager(pm.Ps, pm.Pn, pm.Sort)).Find(&result.Result).Error |
|
if err != nil { |
|
log.Error("FlowList find error(%v) params(%+v)", err, pm) |
|
} |
|
return |
|
} |
|
|
|
// FlowByUnique . |
|
func (d *Dao) FlowByUnique(c context.Context, netID int64, name string) (f *net.Flow, err error) { |
|
f = &net.Flow{} |
|
err = d.orm.Where("net_id=? AND name=?", netID, name).First(f).Error |
|
if err == gorm.ErrRecordNotFound { |
|
err = nil |
|
f = nil |
|
return |
|
} |
|
if err != nil { |
|
log.Error("FlowByUnique(%d,%s) error(%v)", netID, name, err) |
|
} |
|
return |
|
} |
|
|
|
// Flows . |
|
func (d *Dao) Flows(c context.Context, ids []int64) (fs []*net.Flow, err error) { |
|
fs = []*net.Flow{} |
|
err = d.orm.Where("id in (?)", ids).Find(&fs).Error |
|
if err != nil { |
|
log.Error("Flows(%v) error(%v)", ids, err) |
|
} |
|
|
|
return |
|
} |
|
|
|
// FlowsByNet . |
|
func (d *Dao) FlowsByNet(c context.Context, netID []int64) (fs []*net.Flow, err error) { |
|
fs = []*net.Flow{} |
|
err = d.orm.Scopes(Available).Where("net_id in (?)", netID).Order("id ASC").Find(&fs).Error |
|
if err != nil { |
|
log.Error("Flows(%d) error(%v)", netID, err) |
|
} |
|
return |
|
} |
|
|
|
func (d *Dao) FlowIDByNet(c context.Context, nid []int64) (res map[int64][]int64, err error) { |
|
res = map[int64][]int64{} |
|
listi := []struct { |
|
ID int64 `gorm:"column:id"` |
|
NetID int64 `gorm:"column:net_id"` |
|
}{} |
|
|
|
if err = d.orm.Table(net.TableFlow).Select("id,net_id"). |
|
Where("net_id in (?)", nid).Scopes(Available).Scan(&listi).Error; err != nil { |
|
log.Error("FlowIDByNet error(%v) nid(%v)", err, nid) |
|
return |
|
} |
|
|
|
for _, item := range listi { |
|
res[item.NetID] = append(res[item.NetID], item.ID) |
|
} |
|
return |
|
}
|
|
|