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.
429 lines
12 KiB
429 lines
12 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"github.com/jinzhu/gorm" |
|
"go-common/app/service/live/resource/api/http/v1" |
|
"go-common/app/service/live/resource/model" |
|
"go-common/library/database/sql" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
xtime "time" |
|
) |
|
|
|
var ( |
|
_statusDel = 4 |
|
_statusOn = 1 |
|
_statusOff = 2 |
|
) |
|
|
|
// CheckParams 校验key及team |
|
func (d *Dao) CheckParams(c context.Context, team int64, keyword string) (err error) { |
|
err = nil |
|
if "" == keyword { |
|
err = ecode.ResourceParamErr |
|
} |
|
return err |
|
} |
|
|
|
// TeamKeyword 用于封装业务参数结构 |
|
type TeamKeyword struct { |
|
Team int64 |
|
Keyword string |
|
} |
|
|
|
// SelectByTeamIndex 单个key的value查询 |
|
func (d *Dao) SelectByTeamIndex(c context.Context, team int64, keyword string, id int64) (res *model.SundryConfig, err error) { |
|
res = &model.SundryConfig{} |
|
resMid := &model.SundyConfigObject{} |
|
if 0 != id { |
|
err = d.rsDB.Model(&model.SundyConfigObject{}).Where("id=?", id).Where("status != ?", _statusDel).Find(&resMid).Error |
|
} else { |
|
err = d.rsDB.Model(&model.SundyConfigObject{}).Where("team=?", team).Where("keyword=?", keyword).Where("status != ?", _statusDel).Find(&resMid).Error |
|
} |
|
|
|
if err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("[live.titans.dao| selectByGroupIndex] d.db.Exec err: %v", err) |
|
return |
|
} |
|
res.Id = resMid.Id |
|
res.Team = resMid.Team |
|
res.Keyword = resMid.Keyword |
|
res.Value = resMid.Value |
|
res.Status = resMid.Status |
|
res.Ctime = resMid.Ctime.Time().Format("2006-01-02 15:04:05") |
|
res.Mtime = resMid.Mtime.Time().Format("2006-01-02 15:04:05") |
|
|
|
err = nil |
|
return |
|
} |
|
|
|
// SelectByParams 管理后台通过条件查询 |
|
func (d *Dao) SelectByParams(c context.Context, id int64, team int64, keyword string, name string, status int64, page int64, pageSize int64) (res []*model.SundryConfig, count int64, err error) { |
|
var ( |
|
Items []*model.SundyConfigObject |
|
) |
|
|
|
condition := d.rsDB |
|
|
|
//模型配置 |
|
if -1 == team { |
|
condition = condition.Where("team = ?", 0) |
|
} |
|
//除模型配置外的全部配置 |
|
if 0 == team { |
|
condition = condition.Where("team != ?", 0) |
|
} |
|
if 0 != team && -1 != team { |
|
condition = condition.Where("team = ?", team) |
|
} |
|
|
|
if 0 != id { |
|
condition = condition.Where("id = ?", id) |
|
} |
|
if "" != keyword { |
|
condition = condition.Where("keyword = ?", keyword) |
|
} |
|
if "" != name { |
|
condition = condition.Where("name like '%" + name + "%'") |
|
} |
|
if 0 != status { |
|
condition = condition.Where("status = ?", status) |
|
} |
|
condition = condition.Where("status != ?", _statusDel) |
|
sModel := condition.Model(&model.SundryConfig{}) |
|
sModel.Count(&count) |
|
|
|
iOffset := (page - 1) * pageSize |
|
err = sModel.Offset(iOffset).Limit(pageSize).Order("mtime DESC, id DESC").Find(&Items).Error |
|
if err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("[live.titans.dao| select by params] d.db.Exec err: %v", err) |
|
return |
|
} |
|
for _, v := range Items { |
|
item := &model.SundryConfig{ |
|
Id: v.Id, |
|
Team: v.Team, |
|
Keyword: v.Keyword, |
|
Name: v.Name, |
|
Value: v.Value, |
|
Ctime: v.Ctime.Time().Format("2006-01-02 15:04:05"), |
|
Mtime: v.Mtime.Time().Format("2006-01-02 15:04:05"), |
|
Status: v.Status, |
|
} |
|
res = append(res, item) |
|
} |
|
return |
|
} |
|
|
|
// InsertRecord 管理后台插入/编辑一条记录 |
|
func (d *Dao) InsertRecord(c context.Context, team int64, keyword string, value string, name string, status int64, oid int64) (id int64, count int64, err error) { |
|
//创建模板 |
|
if team == -1 { |
|
team = 0 |
|
} |
|
//查询唯一索引 |
|
err = d.rsDB.Model(&model.SundryConfig{}).Where("team=? and keyword=? and id != ?", team, keyword, oid).Count(&count).Error |
|
if nil != err { |
|
return |
|
} |
|
if 0 != count { |
|
return |
|
} |
|
setMaps := &model.InsertMaps{ |
|
Team: team, |
|
Keyword: keyword, |
|
Value: value, |
|
Name: name, |
|
Status: status, |
|
} |
|
newRecord := &model.SundryConfig{} |
|
|
|
//编辑 |
|
if oid != 0 { |
|
err = d.rsDB.Model(&model.SundryConfig{}).Where("id = ?", oid).Update(setMaps).Error |
|
id = oid |
|
return |
|
} |
|
setMaps.Status = int64(_statusOff) |
|
err = d.rsDB.Create(setMaps).Error |
|
if err != nil { |
|
log.Error("[live.titans.dao| insertRecord] d.db.Exec err: %v", err) |
|
return |
|
} |
|
d.rsDB.Where("keyword = ?", keyword).Find(&newRecord) |
|
id = newRecord.Id |
|
return |
|
} |
|
|
|
// SelectByLikes 业务方的请求sql |
|
func (d *Dao) SelectByLikes(c context.Context, teams []int64, teamKeys []*TeamKeyword) (Items []*model.SundyConfigObject, err error) { |
|
Items = []*model.SundyConfigObject{} |
|
if len(teams) == 0 && len(teamKeys) == 0 { |
|
return |
|
} |
|
|
|
/** sql 式执行 |
|
sql := "select * from ap_sundry_config where status = 1" |
|
if len(teams) != 0 { |
|
teamStr := "" |
|
for i, num := range teams { |
|
teamStr += strconv.Itoa(int(num)) |
|
if i+1 != len(teams) { |
|
teamStr += "," |
|
} |
|
} |
|
sql += " and team in (" + teamStr + ") " |
|
} |
|
if len(teamKeys) != 0 { |
|
for _, v := range teamKeys { |
|
sql = sql + " or (team =" + strconv.Itoa(int(v.Team)) + " and keyword = '" + v.Keyword + "') " |
|
} |
|
} |
|
rows, err := d.db.Query(c, sql) |
|
if err != nil { |
|
return |
|
} |
|
for rows.Next() { |
|
resMid := &model.SundyConfigObject{} |
|
rows.Scan(&resMid.Id, &resMid.Team, &resMid.Keyword, &resMid.Name, &resMid.Value, &resMid.Ctime, &resMid.Mtime, &resMid.Status) |
|
Items = append(Items, resMid) |
|
}*/ |
|
/** orm **/ |
|
condition := d.rsDB.Where("status = ?", 1) |
|
if len(teams) != 0 { |
|
condition = condition.Where("team in (?)", teams) |
|
} |
|
if len(teamKeys) != 0 { |
|
for _, v := range teamKeys { |
|
condition = condition.Or("team = ? and keyword = ?", v.Team, v.Keyword) |
|
} |
|
} |
|
err = condition.Find(&Items).Error |
|
return |
|
} |
|
|
|
// FormatTime 时间格式化 |
|
func (d *Dao) FormatTime(c context.Context, timeStrUtc string) (timeStr string) { |
|
ctime, _ := xtime.ParseInLocation("2006-01-02T15:04:05+08:00", timeStrUtc, xtime.Local) |
|
timeStr = ctime.Format("2006-01-02 15:04:05") |
|
return timeStr |
|
} |
|
|
|
// InsertServiceConfig 插入服务配置 |
|
func (d *Dao) InsertServiceConfig(c context.Context, oid int64, treeName string, treePath string, treeId int64, service string, keyword string, template int64, name string, value string, status int64) (id int64, err error) { |
|
checkRes := &model.ServiceConfigObject{} |
|
err = d.rsDB.Model(&model.ServiceConfigObject{}).Where("tree_id=?", treeId).Where("keyword=?", keyword).Find(&checkRes).Error |
|
|
|
if err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("[live.titans.dao| insertServiceRecord] d.db.Exec err: %v", err) |
|
return |
|
} |
|
if 0 != checkRes.Id && oid != checkRes.Id { |
|
id = -1 |
|
return |
|
} |
|
|
|
if oid != 0 { |
|
//编辑 |
|
updateMaps := &model.UpdateServiceConfig{ |
|
Service: service, |
|
Keyword: keyword, |
|
Template: template, |
|
Value: value, |
|
Name: name, |
|
Status: status, |
|
} |
|
err = d.rsDB.Model(&model.ServiceConfigObject{}).Where("id=?", oid).Update(updateMaps).Error |
|
id = oid |
|
} else { |
|
setMaps := &model.InsertServiceConfig{ |
|
TreeName: treeName, |
|
TreePath: treePath, |
|
TreeId: treeId, |
|
Service: service, |
|
Keyword: keyword, |
|
Template: template, |
|
Value: value, |
|
Name: name, |
|
Status: status, |
|
} |
|
err = d.rsDB.Model(&model.ServiceConfigObject{}).Create(setMaps).Error |
|
newRecord := &model.ServiceConfigObject{} |
|
d.rsDB.Model(&model.ServiceConfigObject{}).Where("tree_id = ?", treeId).Where("keyword=?", keyword).Find(&newRecord) |
|
id = newRecord.Id |
|
} |
|
return |
|
} |
|
|
|
// GetServiceConfig 通过tree_id 获取配置 |
|
func (d *Dao) GetServiceConfig(c context.Context, treeId int64) (value map[string]string, err error) { |
|
value = make(map[string]string) |
|
res := []*model.ServiceConfigObject{} |
|
err = d.rsDB.Model(&model.ServiceConfigObject{}).Where("tree_id = ?", treeId).Where("status= ?", _statusOn).Find(&res).Error |
|
if err != nil && err != gorm.ErrRecordNotFound { |
|
return |
|
} |
|
for _, v := range res { |
|
value[v.Keyword] = v.Value |
|
} |
|
return |
|
} |
|
|
|
// GetServiceConfigList 管理后台获取服务配置列表 |
|
func (d *Dao) GetServiceConfigList(c context.Context, treeName string, treeId int64, keyword string, service string, page int64, pageSize int64, name string, status int64) (list []*v1.MList, totalNum int64, err error) { |
|
list = []*v1.MList{} |
|
Items := make([]*model.ServiceConfigObject, 0) |
|
totalNum = 0 |
|
condition := d.rsDB |
|
condition = condition.Where("tree_name=?", treeName) |
|
if 1 == status { |
|
condition = condition.Where("status=?", status) |
|
} |
|
if status != 0 && status != int64(_statusOn) { |
|
condition = condition.Where("status !=? ", _statusOn) |
|
} |
|
|
|
if 0 != treeId { |
|
condition = condition.Where("tree_id =? ", treeId) |
|
} |
|
|
|
if "" != name { |
|
condition = condition.Where("name like '%" + name + "%'") |
|
} |
|
|
|
if "" != keyword { |
|
condition = condition.Where("keyword like '%" + keyword + "%'") |
|
} |
|
|
|
if "" != service { |
|
condition = condition.Where("service =?", service) |
|
} |
|
|
|
sModel := condition.Model(&model.ServiceConfigObject{}) |
|
sModel.Count(&totalNum) |
|
|
|
iOffset := (page - 1) * pageSize |
|
err = sModel.Offset(iOffset).Limit(pageSize).Order("mtime DESC, id DESC").Find(&Items).Error |
|
if nil != err { |
|
log.Error("sql error select by params") |
|
return |
|
} |
|
for _, v := range Items { |
|
item := &v1.MList{ |
|
Id: v.Id, |
|
TreeName: v.TreeName, |
|
TreePath: v.TreePath, |
|
TreeId: v.TreeId, |
|
Service: v.Service, |
|
Keyword: v.Keyword, |
|
Template: v.Template, |
|
Name: v.Name, |
|
Value: v.Value, |
|
Ctime: v.Ctime.Time().Format("2006-01-02 15:04:05"), |
|
Mtime: v.Mtime.Time().Format("2006-01-02 15:04:05"), |
|
Status: v.Status, |
|
} |
|
list = append(list, item) |
|
} |
|
return |
|
} |
|
|
|
// GetTreeIds 获取treeName对应的tree_ids |
|
func (d *Dao) GetTreeIds(c context.Context, treeName string) (list []int64, err error) { |
|
list = make([]int64, 0) |
|
query := "select distinct tree_id from ap_services_config where status=1 and tree_name = ?" |
|
rows, err := d.db.Query(c, query, treeName) |
|
if err != nil && err != sql.ErrNoRows { |
|
log.Error("[live.titans.dao| getDiscoveryIds] d.db.Exec err: %v", err) |
|
return |
|
} |
|
defer rows.Close() |
|
for rows.Next() { |
|
item := &model.ServiceModel{} |
|
err = rows.Scan(&item.TreeId) |
|
if err != nil { |
|
return |
|
} |
|
if item.TreeId != 0 { |
|
list = append(list, item.TreeId) |
|
} |
|
} |
|
return |
|
} |
|
|
|
// GetEasyRecord 获取运营配置 |
|
func (d *Dao) GetEasyRecord(c context.Context, treeName string) (list *v1.MList) { |
|
list = &v1.MList{} |
|
query := "select id, value from ap_services_config where tree_name = ? and tree_id = 0" |
|
rows := d.db.QueryRow(c, query, treeName) |
|
err := rows.Scan(&list.Id, &list.Value) |
|
if err != nil { |
|
log.Error("[live.titans.dao| GetEasyRecord] d.db.Exec err: %v", err) |
|
return |
|
} |
|
return |
|
} |
|
|
|
// SetEasyRecord 设置运营配置 |
|
func (d *Dao) SetEasyRecord(c context.Context, treeName string, value string, id int64) (nId int64, err error) { |
|
record := &model.InsertServiceConfig{ |
|
TreeName: treeName, |
|
TreePath: treeName, |
|
TreeId: 0, |
|
Name: treeName + "运营操作列表", |
|
Value: value, |
|
Status: int64(_statusOn), |
|
} |
|
nId = id |
|
if id != 0 { |
|
err = d.rsDB.Model(&model.ServiceConfigObject{}).Where("id = ?", id).Update(record).Error |
|
} else { |
|
err = d.rsDB.Model(&model.ServiceConfigObject{}).Create(record).Error |
|
if err != nil { |
|
return |
|
} |
|
newRecord := &model.ServiceConfigObject{} |
|
err = d.rsDB.Model(&model.ServiceConfigObject{}).Where("tree_name = ?", treeName).Where("tree_id = ?", 0).Find(&newRecord).Error |
|
if err != nil { |
|
return |
|
} |
|
nId = newRecord.Id |
|
} |
|
return |
|
} |
|
|
|
// GetListByIds 通过ids获取配置列表 |
|
func (d *Dao) GetListByIds(c context.Context, ids []int64) (list []*model.ServiceModel, err error) { |
|
list = []*model.ServiceModel{} |
|
Items := make([]*model.ServiceConfigObject, 0) |
|
condition := d.rsDB |
|
|
|
condition = condition.Where("id in (?)", ids) |
|
|
|
sModel := condition.Model(&model.ServiceConfigObject{}) |
|
|
|
err = sModel.Find(&Items).Error |
|
if nil != err { |
|
log.Error("sql error select by params") |
|
return |
|
} |
|
for _, v := range Items { |
|
item := &model.ServiceModel{ |
|
Id: v.Id, |
|
TreeName: v.TreeName, |
|
TreePath: v.TreePath, |
|
TreeId: v.TreeId, |
|
Service: v.Service, |
|
Keyword: v.Keyword, |
|
Template: v.Template, |
|
Name: v.Name, |
|
Value: v.Value, |
|
Ctime: v.Ctime.Time().Format("2006-01-02 15:04:05"), |
|
Mtime: v.Mtime.Time().Format("2006-01-02 15:04:05"), |
|
Status: v.Status, |
|
} |
|
list = append(list, item) |
|
} |
|
return |
|
}
|
|
|