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.
295 lines
6.7 KiB
295 lines
6.7 KiB
package service |
|
|
|
import ( |
|
"fmt" |
|
"strconv" |
|
"time" |
|
|
|
"go-common/app/admin/main/tv/model" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
|
|
"github.com/jinzhu/gorm" |
|
) |
|
|
|
//ModulesAdd is used for add modules |
|
func (s *Service) ModulesAdd(v *model.Modules) (err error) { |
|
var ( |
|
order uint8 |
|
mod *model.Modules |
|
) |
|
if mod, err = s.isModulesExists(v.PageID, v.Title); err != nil { |
|
return |
|
} |
|
if mod != nil { |
|
err = fmt.Errorf("当前模块下,标题已存在") |
|
return |
|
} |
|
if order, err = s.getOrder(v.PageID); err != nil { |
|
return |
|
} |
|
//在已存在顺序上加一 |
|
v.Order = order + 1 |
|
if err = s.DB.Model(&model.Modules{}).Create(v).Error; err != nil { |
|
return |
|
} |
|
return |
|
} |
|
|
|
//isModulesExists is use for checking is module exists |
|
func (s *Service) isModulesExists(pageID string, title string) (v *model.Modules, err error) { |
|
v = &model.Modules{} |
|
w := map[string]interface{}{ |
|
"deleted": model.ModulesNotDelete, |
|
"page_id": pageID, |
|
"title": title, |
|
} |
|
if err = s.DB.Where(w).First(v).Error; err != nil { |
|
if err == gorm.ErrRecordNotFound { |
|
return nil, nil |
|
} |
|
return |
|
} |
|
return |
|
} |
|
|
|
//getOrder is used for getting existed model order |
|
func (s *Service) getOrder(pageID string) (order uint8, err error) { |
|
var v model.Modules |
|
if err = s.DB.Where("deleted = 0").Where("page_id = ?", pageID).Order("`order` DESC").First(&v).Error; err != nil { |
|
if err == gorm.ErrRecordNotFound { |
|
return 0, nil |
|
} |
|
log.Error("getOrder Err %v", err) |
|
return |
|
} |
|
order = v.Order |
|
return |
|
} |
|
|
|
//ModulesList is used for get module list |
|
func (s *Service) ModulesList(pageID string) (v []*model.Modules, err error) { |
|
selectStr := []string{ |
|
"id", |
|
"title", |
|
"page_id", |
|
"source", |
|
"type", |
|
"flexible", |
|
"icon", |
|
"capacity", |
|
"more", |
|
"`order`", |
|
"moretype", |
|
"morepage", |
|
"valid", |
|
"src_type", |
|
} |
|
w := map[string]interface{}{ |
|
"deleted": model.ModulesNotDelete, |
|
"page_id": pageID, |
|
} |
|
if err = s.DB.Where(w).Select(selectStr).Order("`order` ASC").Find(&v).Error; err != nil { |
|
return |
|
} |
|
for i := range v { |
|
attr := v[i] |
|
pid, _ := strconv.Atoi(attr.PageID) |
|
switch pid { |
|
case model.PageMain: |
|
attr.PageID = "主页" |
|
case model.PageJP: |
|
attr.PageID = "番剧" |
|
case model.PageMovie: |
|
attr.PageID = "电影" |
|
case model.PageDocumentary: |
|
attr.PageID = "纪录片" |
|
case model.PageCN: |
|
attr.PageID = "国创" |
|
case model.PageSoapopera: |
|
attr.PageID = "电视剧" |
|
} |
|
t, _ := strconv.Atoi(attr.Type) |
|
switch t { |
|
case model.TypeSevenFocus: |
|
attr.Type = "首页七格焦点图" |
|
case model.TypeFiveFocus: |
|
attr.Type = "5格焦点" |
|
case model.TypeSixFocus: |
|
attr.Type = "6格焦点" |
|
case model.TypeVertListFirst: |
|
attr.Type = "竖图1列表" |
|
case model.TypeVertListSecond: |
|
attr.Type = "竖图2列表" |
|
case model.TypeHorizList: |
|
attr.Type = "横图列表" |
|
case model.TypeZhuiFan: |
|
attr.Type = "追番模块" |
|
} |
|
} |
|
return |
|
} |
|
|
|
//ModulesEditGet is used for get module with module id |
|
func (s *Service) ModulesEditGet(id uint64) (v *model.Modules, err error) { |
|
selectStr := []string{ |
|
"id", |
|
"title", |
|
"page_id", |
|
"type", |
|
"source", |
|
"flexible", |
|
"icon", |
|
"capacity", |
|
"more", |
|
"`order`", |
|
"moretype", |
|
"morepage", |
|
"src_type", |
|
} |
|
w := map[string]interface{}{ |
|
"id": id, |
|
"deleted": model.ModulesNotDelete, |
|
} |
|
v = &model.Modules{} |
|
if err = s.DB.Where(w).Select(selectStr).First(v).Error; err != nil { |
|
return |
|
} |
|
return |
|
} |
|
|
|
//ModulesEditPost is used for update module value |
|
func (s *Service) ModulesEditPost(id uint64, v *model.Modules) (err error) { |
|
var ( |
|
mod = &model.Modules{} |
|
) |
|
if mod, err = s.isModulesExists(v.PageID, v.Title); err != nil { |
|
return |
|
} |
|
if mod != nil && mod.ID != id { |
|
err = fmt.Errorf("当前模块下,标题已存在") |
|
return |
|
} |
|
return s.DB.Model(&model.Modules{}).Where("id = ?", id).Update(v).Error |
|
} |
|
|
|
//GetModPub is used for get publish status from MC |
|
func (s *Service) GetModPub(c *bm.Context, pageID string) (p model.ModPub, err error) { |
|
return s.dao.GetModPub(c, pageID) |
|
} |
|
|
|
//ModulesPublish is used for publish module or deleted modules |
|
func (s *Service) ModulesPublish(c *bm.Context, pageID string, state uint8, ids []int, deletedIds []int) (err error) { |
|
if len(ids) > 30 { |
|
err = fmt.Errorf("模块发布不能超过30个") |
|
return |
|
} |
|
tx := s.DB.Begin() |
|
for k, v := range ids { |
|
up := map[string]interface{}{ |
|
"order": k + 1, |
|
"valid": model.ModulesValid, |
|
} |
|
where := map[string]interface{}{ |
|
"id": v, |
|
"page_id": pageID, |
|
} |
|
if err = tx.Model(&model.Modules{}).Where(where).Update(up).Error; err != nil { |
|
tx.Rollback() |
|
return |
|
} |
|
} |
|
if len(deletedIds) > 0 { |
|
deletedUp := map[string]interface{}{ |
|
"deleted": model.ModulesDelete, |
|
} |
|
if err = s.DB.Model(&model.Modules{}).Where("id in (?)", deletedIds).Where("page_id=?", pageID). |
|
Update(deletedUp).Error; err != nil { |
|
tx.Rollback() |
|
return |
|
} |
|
} |
|
if err = s.SetPublish(c, pageID, state); err != nil { |
|
tx.Rollback() |
|
return |
|
} |
|
tx.Commit() |
|
return |
|
} |
|
|
|
//SetPublish is used for set publish status |
|
func (s *Service) SetPublish(c *bm.Context, pageID string, state uint8) (err error) { |
|
nowTime := time.Now() |
|
t := nowTime.Format("2006-01-02 15:04:05") |
|
p := model.ModPub{ |
|
Time: t, |
|
State: state, |
|
} |
|
return s.dao.SetModPub(c, pageID, p) |
|
} |
|
|
|
// TypeSupport distinguish whether the source is supported or not |
|
func (s *Service) TypeSupport(srcType int, source int) bool { |
|
if srcType == _TypePGC { |
|
_, ok := s.supCatMap.PgcMap[int32(source)] |
|
return ok |
|
} |
|
if srcType == _TypeUGC { |
|
_, ok := s.supCatMap.UgcMap[int32(source)] |
|
return ok |
|
} |
|
return false |
|
} |
|
|
|
// loadCats, reload pgc & ugc support cats |
|
func (s *Service) loadCats() { |
|
var ( |
|
pgcTypes = s.c.Cfg.SupportCat.PGCTypes |
|
ugcTypes = s.c.Cfg.SupportCat.UGCTypes |
|
newCats = []*model.ParentCat{} |
|
newCatsMap = &model.SupCats{ |
|
UgcMap: make(map[int32]int), |
|
PgcMap: make(map[int32]int), |
|
} |
|
) |
|
// load supporting pgc types |
|
if len(pgcTypes) > 0 { |
|
for _, v := range pgcTypes { |
|
newCats = append(newCats, &model.ParentCat{ |
|
ID: v, |
|
Name: s.pgcCatToName(int(v)), |
|
Type: _TypePGC, |
|
}) |
|
newCatsMap.PgcMap[v] = 1 |
|
} |
|
} |
|
// load support ugc first level types and their children |
|
if len(ugcTypes) > 0 { |
|
for _, v := range ugcTypes { |
|
newCatsMap.UgcMap[v] = 1 |
|
var ugcCat = &model.ParentCat{ |
|
ID: v, |
|
Type: _TypeUGC, |
|
} |
|
if tp, ok := s.ArcTypes[v]; ok { |
|
ugcCat.Name = tp.Name |
|
} |
|
for _, types := range s.ArcTypes { // gather children |
|
if types.Pid == v { |
|
ugcCat.Children = append(ugcCat.Children, &model.CommonCat{ |
|
ID: types.ID, |
|
Name: types.Name, |
|
PID: types.Pid, |
|
Type: _TypeUGC, |
|
}) |
|
newCatsMap.UgcMap[types.ID] = 1 |
|
} |
|
} |
|
newCats = append(newCats, ugcCat) |
|
} |
|
} |
|
if len(newCats) > 0 { |
|
s.SupCats = newCats |
|
s.supCatMap = newCatsMap |
|
} |
|
}
|
|
|