224 lines
5.6 KiB
Go
224 lines
5.6 KiB
Go
package channel
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"time"
|
||
|
||
"go-common/app/admin/main/feed/model/common"
|
||
"go-common/app/admin/main/feed/model/show"
|
||
"go-common/app/admin/main/feed/util"
|
||
"go-common/library/log"
|
||
)
|
||
|
||
const (
|
||
//TabOnline channel tab online
|
||
TabOnline = 1
|
||
//TabDownline channel tab down line
|
||
TabDownline = 2
|
||
//TabWaitOnline channel tab wait to line
|
||
TabWaitOnline = 3
|
||
//OrderTimeDown channel tab oder by stime desc
|
||
OrderTimeDown = 1
|
||
//OrderTimeUp channel tab oder by stime asc
|
||
OrderTimeUp = 2
|
||
//ActionAddCTab log action
|
||
ActionAddCTab = "ActAddChannelTab"
|
||
//ActionUpCTab log action
|
||
ActionUpCTab = "ActUpChannelTab"
|
||
//ActionDelCTab log action
|
||
ActionDelCTab = "ActDelChannelTab"
|
||
//ActionOfflineCTab log action
|
||
ActionOfflineCTab = "ActOfflineChannelTab"
|
||
)
|
||
|
||
//TabList channel tab list
|
||
func (s *Service) TabList(lp *show.ChannelTabLP) (pager *show.ChannelTabPager, err error) {
|
||
var (
|
||
eTime int64
|
||
sTime int64
|
||
)
|
||
pager = &show.ChannelTabPager{
|
||
Page: common.Page{
|
||
Num: lp.Pn,
|
||
Size: lp.Ps,
|
||
},
|
||
}
|
||
w := map[string]interface{}{
|
||
"is_delete": common.NotDeleted,
|
||
}
|
||
query := s.showDao.DB.Model(&show.ChannelTab{})
|
||
if lp.TagID > 0 {
|
||
w["tag_id"] = lp.TagID
|
||
}
|
||
if lp.TabID > 0 {
|
||
w["tab_id"] = lp.TabID
|
||
}
|
||
if lp.Stime > 0 {
|
||
query = query.Where("stime >= ?", lp.Stime)
|
||
}
|
||
if lp.Etime > 0 {
|
||
query = query.Where("etime <= ?", lp.Etime)
|
||
}
|
||
if lp.Person != "" {
|
||
query = query.Where("person like ?", "%"+lp.Person+"%")
|
||
}
|
||
if lp.Status == TabWaitOnline {
|
||
if lp.Stime != 0 {
|
||
if lp.Stime < time.Now().Unix() {
|
||
sTime = time.Now().Unix()
|
||
} else {
|
||
sTime = lp.Stime
|
||
}
|
||
} else {
|
||
sTime = time.Now().Unix()
|
||
}
|
||
query = query.Where("stime >= ?", sTime)
|
||
} else if lp.Status == TabOnline {
|
||
if lp.Stime != 0 {
|
||
if lp.Stime < time.Now().Unix() {
|
||
sTime = time.Now().Unix()
|
||
} else {
|
||
sTime = lp.Stime
|
||
}
|
||
} else {
|
||
sTime = time.Now().Unix()
|
||
}
|
||
if lp.Etime != 0 {
|
||
if lp.Etime > time.Now().Unix() {
|
||
eTime = time.Now().Unix()
|
||
} else {
|
||
eTime = lp.Etime
|
||
}
|
||
} else {
|
||
eTime = time.Now().Unix()
|
||
}
|
||
query = query.Where("stime < ?", sTime).Where("etime >= ?", eTime)
|
||
} else if lp.Status == TabDownline {
|
||
if lp.Etime != 0 {
|
||
if lp.Etime < time.Now().Unix() {
|
||
eTime = lp.Etime
|
||
} else {
|
||
eTime = time.Now().Unix()
|
||
}
|
||
} else {
|
||
eTime = time.Now().Unix()
|
||
}
|
||
query = query.Where("etime < ?", eTime)
|
||
}
|
||
if lp.Order == OrderTimeDown {
|
||
query = query.Order("`stime` ASC")
|
||
} else if lp.Order == OrderTimeUp {
|
||
query = query.Order("`stime` DESC")
|
||
}
|
||
if err = query.Where(w).Count(&pager.Page.Total).Error; err != nil {
|
||
log.Error("chanelSvc.CardSetupList Index count error(%v)", err)
|
||
return
|
||
}
|
||
|
||
tabs := []*show.ChannelTab{}
|
||
if err = query.Where(w).Order("`id` DESC").Offset((lp.Pn - 1) * lp.Ps).Limit(lp.Ps).Find(&tabs).Error; err != nil {
|
||
log.Error("chanelSvc.CardSetupList First error(%v)", err)
|
||
return
|
||
}
|
||
for k, v := range tabs {
|
||
//online for fe
|
||
if time.Now().Unix() < v.Stime {
|
||
tabs[k].Status = TabWaitOnline
|
||
} else if time.Now().Unix() >= v.Etime {
|
||
tabs[k].Status = TabDownline
|
||
} else {
|
||
tabs[k].Status = TabOnline
|
||
}
|
||
}
|
||
pager.Item = tabs
|
||
return
|
||
}
|
||
|
||
//AddTab add channel tab
|
||
func (s *Service) AddTab(c context.Context, param *show.ChannelTabAP, name string, uid int64) (err error) {
|
||
if err = s.IsValid(0, param.TagID, param.Stime, param.Etime, param.Priority); err != nil {
|
||
return
|
||
}
|
||
if err = s.showDao.ChannelTabAdd(param); err != nil {
|
||
return
|
||
}
|
||
if err = util.AddLogs(common.LogChannelTab, name, uid, 0, ActionAddCTab, param); err != nil {
|
||
log.Error("chanelSvc.AddTab AddLog error(%v)", err)
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
//IsValid validate data
|
||
func (s *Service) IsValid(id, tagID, sTime int64, eTime int64, priority int) (err error) {
|
||
var (
|
||
count int
|
||
)
|
||
if sTime > eTime {
|
||
err = fmt.Errorf("开始时间不能大于结束时间")
|
||
return
|
||
}
|
||
if sTime < time.Now().Unix() {
|
||
err = fmt.Errorf("生效时间需要大于当前时间")
|
||
return
|
||
}
|
||
if count, err = s.showDao.ChannelTabValid(id, tagID, sTime, eTime, priority); err != nil {
|
||
return
|
||
}
|
||
if count > 0 {
|
||
err = fmt.Errorf("已有该排序无法创建,请重新选择")
|
||
return
|
||
}
|
||
if count, err = s.showDao.ChannelTabValid(id, tagID, sTime, eTime, 0); err != nil {
|
||
return
|
||
}
|
||
if count >= 3 {
|
||
stimeStr := time.Unix(sTime, 0).Format("2006-01-02 15:04:05")
|
||
etimeStr := time.Unix(eTime, 0).Format("2006-01-02 15:04:05")
|
||
str := "频道在" + stimeStr + " 至 " + etimeStr + " 时间段内已有3个运营tab,无法创建"
|
||
err = fmt.Errorf(str)
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
//UpdateTab update channel tab
|
||
func (s *Service) UpdateTab(c context.Context, param *show.ChannelTabUP, name string, uid int64) (err error) {
|
||
if err = s.IsValid(param.ID, param.TagID, param.Stime, param.Etime, param.Priority); err != nil {
|
||
return
|
||
}
|
||
if err = s.showDao.ChannelTabUpdate(param); err != nil {
|
||
return
|
||
}
|
||
if err = util.AddLogs(common.LogChannelTab, name, uid, 0, ActionUpCTab, param); err != nil {
|
||
log.Error("chanelSvc.UpdateTab AddLog error(%v)", err)
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
//DeleteTab delete channel tab
|
||
func (s *Service) DeleteTab(id int64, name string, uid int64) (err error) {
|
||
if err = s.showDao.ChannelTabDelete(id); err != nil {
|
||
return
|
||
}
|
||
if err = util.AddLogs(common.LogChannelTab, name, uid, id, ActionDelCTab, id); err != nil {
|
||
log.Error("chanelSvc.DeleteTab AddLog error(%v)", err)
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
//OfflineTab offline channel tab
|
||
func (s *Service) OfflineTab(id int64, name string, uid int64) (err error) {
|
||
if err = s.showDao.ChannelTabOffline(id); err != nil {
|
||
return
|
||
}
|
||
if err = util.AddLogs(common.LogChannelTab, name, uid, id, ActionOfflineCTab, id); err != nil {
|
||
log.Error("chanelSvc.DeleteTab AddLog error(%v)", err)
|
||
return
|
||
}
|
||
return
|
||
}
|