package edbmonitor import ( "eta/eta_api/global" "eta/eta_api/utils" "fmt" "time" ) type EdbMonitorClassify struct { ClassifyId int `orm:"column(classify_id);pk" gorm:"primaryKey"` ClassifyName string `description:"分类名称"` Level int `description:"分类层级"` ParentId int `description:"父分类ID"` RootId int `description:"根分类ID"` Sort int `description:"排序"` CreateTime time.Time `description:"创建时间"` } func (e *EdbMonitorClassify) Insert() (id int64, err error) { o := global.DbMap[utils.DbNameIndex] var edbMonitorIds []int if e.ParentId != 0 { sql := `SELECT edb_monitor_id FROM edb_monitor_info WHERE edb_monitor_classify_id = ?` err = o.Raw(sql, e.ParentId).Find(&edbMonitorIds).Error if err != nil { return } } tx := o.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() err = tx.Create(e).Error if err != nil { return } id = int64(e.ClassifyId) if len(edbMonitorIds) > 0 { sql := `UPDATE edb_monitor_info SET edb_monitor_classify_id = ? WHERE edb_monitor_id IN (` + utils.GetOrmInReplace(len(edbMonitorIds)) + `)` err = tx.Exec(sql, id, edbMonitorIds).Error if err != nil { return } } return } func (e *EdbMonitorClassify) Update(cols []string, classifyId []int) (err error) { o := global.DbMap[utils.DbNameIndex] var edbMonitorIds []int if e.ParentId != 0 { sql := `SELECT edb_monitor_id FROM edb_monitor_info WHERE edb_monitor_classify_id = ?` err = o.Raw(sql, e.ParentId).Scan(&edbMonitorIds).Error if err != nil { return } } tx := o.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() err = tx.Select(cols).Updates(e).Error if err != nil { return } if len(classifyId) > 0 { sql := `UPDATE edb_monitor_classify SET root_id = ? WHERE classify_id IN (` + utils.GetOrmInReplace(len(classifyId)) + `)` err = tx.Exec(sql, e.RootId, classifyId).Error if err != nil { return } } if len(edbMonitorIds) > 0 { sql := `UPDATE edb_monitor_info SET edb_monitor_classify_id = ? WHERE edb_monitor_id IN (` + utils.GetOrmInReplace(len(edbMonitorIds)) + `)` err = tx.Exec(sql, e.ClassifyId, edbMonitorIds).Error if err != nil { return } } return } func DeleteEdbMonitorClassifyById(id int) (err error) { o := global.DbMap[utils.DbNameIndex] err = o.Exec("DELETE FROM edb_monitor_classify WHERE classify_id =?", id).Error return } func DeleteEdbMonitorClassifyByIdList(ids []int) (err error) { if len(ids) == 0 { return } o := global.DbMap[utils.DbNameIndex] sql := "DELETE FROM edb_monitor_classify WHERE classify_id IN (" + utils.GetOrmInReplace(len(ids)) + ")" err = o.Exec(sql, ids).Error return } func GetEdbMonitorClassifyList() (items []*EdbMonitorClassify, err error) { o := global.DbMap[utils.DbNameIndex] sql := "SELECT * FROM edb_monitor_classify ORDER BY sort ASC" err = o.Raw(sql).Find(&items).Error return } func GetEdbMonitorClassifyById(id int) (item *EdbMonitorClassify, err error) { o := global.DbMap[utils.DbNameIndex] sql := "SELECT * FROM edb_monitor_classify WHERE classify_id =?" err = o.Raw(sql, id).First(&item).Error return } func GetEdbMonitorClassifyMaxSortByParentId(parentId int) (sort int, err error) { o := global.DbMap[utils.DbNameIndex] sql := "SELECT COALESCE(MAX(sort), 0) FROM edb_monitor_classify WHERE parent_id =?" err = o.Raw(sql, parentId).Scan(&sort).Error return } func GetChildEdbMonitorClassifyIdById(id int) (classifyId []int, err error) { o := global.DbMap[utils.DbNameIndex] sql := "SELECT classify_id FROM edb_monitor_classify WHERE parent_id =?" err = o.Raw(sql, id).Scan(&classifyId).Error return } func GetChildEdbMonitorClassifyById(id int) (items []*EdbMonitorClassify, err error) { o := global.DbMap[utils.DbNameIndex] sql := "SELECT * FROM edb_monitor_classify WHERE parent_id =?" err = o.Raw(sql, id).Find(&items).Error return } func GetChildEdbMonitorClassifyByRootId(rootId int) (items []*EdbMonitorClassify, err error) { o := global.DbMap[utils.DbNameIndex] sql := "SELECT * FROM edb_monitor_classify WHERE root_id =?" err = o.Raw(sql, rootId).Find(&items).Error return } func GetEdbMonitorClassifyCountByIdList(ids []int) (count int, err error) { if len(ids) == 0 { return } o := global.DbMap[utils.DbNameIndex] sql := `SELECT COUNT(*) FROM edb_monitor_classify WHERE classify_id IN (` + utils.GetOrmInReplace(len(ids)) + `)` err = o.Raw(sql, ids).Scan(&count).Error return } // GetEdbMonitorClassifyByParentIdAndName 根据父级ID和名称获取分类 func GetEdbMonitorClassifyByParentIdAndName(parentId int, classifyName string, classifyId int) (item *EdbMonitorClassify, err error) { o := global.DbMap[utils.DbNameIndex] sql := `SELECT * FROM edb_monitor_classify WHERE parent_id = ? AND classify_name = ? AND classify_id <> ? LIMIT 1` err = o.Raw(sql, parentId, classifyName, classifyId).First(&item).Error return } // UpdateEdbMonitorClassifySortByParentId 根据分类父类id更新排序 func UpdateEdbMonitorClassifySortByParentId(parentId, classifyId, nowSort int, updateSort string) (err error) { o := global.DbMap[utils.DbNameIndex] sql := ` update edb_monitor_classify set sort = ` + updateSort + ` WHERE parent_id=? and sort > ? ` if classifyId > 0 { sql += ` or ( classify_id > ` + fmt.Sprint(classifyId) + ` and sort= ` + fmt.Sprint(nowSort) + `)` } err = o.Exec(sql, parentId, nowSort).Error return } // GetFirstEdbMonitorClassifyByParentId 获取当前父级图表分类下的排序第一条的数据 func GetFirstEdbMonitorClassifyByParentId(parentId int) (item *EdbMonitorClassify, err error) { o := global.DbMap[utils.DbNameIndex] sql := ` SELECT * FROM edb_monitor_classify WHERE parent_id=? order by sort asc,classify_id asc limit 1` err = o.Raw(sql, parentId).First(&item).Error return }