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.
106 lines
2.4 KiB
106 lines
2.4 KiB
package gorm |
|
|
|
import ( |
|
"context" |
|
"database/sql" |
|
"fmt" |
|
"strings" |
|
|
|
"github.com/jinzhu/gorm" |
|
"go-common/app/admin/main/aegis/model/net" |
|
"go-common/library/log" |
|
) |
|
|
|
// Available . |
|
func Available(db *gorm.DB) *gorm.DB { |
|
return db.Where("disable_time = '0000-00-00 00:00:00'") |
|
} |
|
|
|
// Disable . |
|
func Disable(db *gorm.DB) *gorm.DB { |
|
return db.Not("disable_time = '0000-00-00 00:00:00'") |
|
} |
|
|
|
func state(state string) func(db *gorm.DB) *gorm.DB { |
|
state = strings.TrimSpace(state) |
|
if state == net.StateAvailable { |
|
return func(db *gorm.DB) *gorm.DB { |
|
return Available(db) |
|
} |
|
} else if state == net.StateDisable { |
|
return func(db *gorm.DB) *gorm.DB { |
|
return Disable(db) |
|
} |
|
} else { |
|
return func(db *gorm.DB) *gorm.DB { |
|
return db |
|
} |
|
} |
|
} |
|
|
|
func pager(ps int64, pn int64, sort string) func(db *gorm.DB) *gorm.DB { |
|
offset := ps * (pn - 1) |
|
order := fmt.Sprintf("id %s", sort) |
|
return func(db *gorm.DB) *gorm.DB { |
|
return db.Limit(ps).Offset(offset).Order(order) |
|
} |
|
} |
|
|
|
// UpdateFields . |
|
func (d *Dao) UpdateFields(c context.Context, db *gorm.DB, table string, id int64, fields map[string]interface{}) (err error) { |
|
if db == nil { |
|
db = d.orm |
|
} |
|
if err = db.Table(table).Where("id=?", id).Updates(fields).Error; err != nil { |
|
log.Error("UpdateFlow(%s,%d) error(%v) changed(%+v)", table, id, err, fields) |
|
} |
|
return |
|
} |
|
|
|
// AddItem . |
|
func (d *Dao) AddItem(c context.Context, db *gorm.DB, n interface{}) (err error) { |
|
if db == nil { |
|
db = d.orm |
|
} |
|
if err = db.Create(n).Error; err != nil { |
|
log.Error("AddItem error(%v) (%+v)", err, n) |
|
} |
|
return |
|
} |
|
|
|
// ColumnMapString . |
|
func (d *Dao) ColumnMapString(c context.Context, table string, column string, ids []int64, where string) (result map[int64]string, err error) { |
|
var ( |
|
rows *sql.Rows |
|
id int64 |
|
value string |
|
slt = fmt.Sprintf("`id`,`%s`", column) |
|
) |
|
|
|
result = map[int64]string{} |
|
db := d.orm.Table(table).Select(slt).Where("id in (?)", ids) |
|
where = strings.TrimSpace(where) |
|
if where != "" { |
|
db = db.Where(where) |
|
} |
|
rows, err = db.Rows() |
|
if err == sql.ErrNoRows { |
|
err = nil |
|
return |
|
} |
|
if err != nil { |
|
log.Error("ColumnMapString(%s, %s) rows error(%v) ids(%v)", table, column, err, ids) |
|
return |
|
} |
|
defer rows.Close() |
|
|
|
for rows.Next() { |
|
if err = rows.Scan(&id, &value); err != nil { |
|
log.Error("ColumnMapString(%s, %s) rows.scan error(%v) ids(%v)", table, column, err, ids) |
|
return |
|
} |
|
result[id] = value |
|
} |
|
|
|
return |
|
}
|
|
|