123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 |
- 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
- }
|