Files
GoFilm/server/logic/FilmLogic.go
2023-12-23 22:32:52 +08:00

162 lines
4.6 KiB
Go

package logic
import (
"errors"
"fmt"
"server/model/system"
"server/plugin/common/conver"
"time"
)
/*
处理影片管理相关业务
*/
type FilmLogic struct {
}
var FL *FilmLogic
//----------------------------------------------------影片管理业务逻辑----------------------------------------------------
func (fl *FilmLogic) GetFilmPage(s system.SearchVo) []system.SearchInfo {
// 获取影片检索信息分页数据
sl := system.GetSearchPage(s)
//
return sl
}
// GetSearchOptions 获取影片检索的select的选项options
func (fl *FilmLogic) GetSearchOptions() map[string]any {
var options = make(map[string]any)
// 获取分类 options
tree := system.GetCategoryTree()
tree.Name = "全部分类"
options["class"] = conver.ConvertCategoryList(tree)
options["remarks"] = []map[string]string{{"Name": `全部`, "Value": ``}, {"Name": `完结`, "Value": `完结`}, {"Name": `未完结`, "Value": `未完结`}}
// 获取 剧情,地区,语言, 年份 组信息 (每个分类对应的检索信息并不相同)
var tagGroup = make(map[int64]map[string]any)
// 遍历一级分类获取对应的标签组信息
for _, t := range tree.Children {
option := system.GetSearchOptions(t.Id)
if len(option) > 0 {
tagGroup[t.Id] = system.GetSearchOptions(t.Id)
// 如果年份信息不存在则独立一份年份信息
if _, ok := options["year"]; !ok {
options["year"] = tagGroup[t.Id]["Year"]
}
}
}
options["tags"] = tagGroup
return options
}
// SaveFilmDetail 自定义上传保存影片信息
func (fl *FilmLogic) SaveFilmDetail(fd system.FilmDetailVo) error {
// 补全影片信息
now := time.Now()
fd.UpdateTime = now.Format(time.DateTime)
fd.AddTime = fd.UpdateTime
// 生成ID, 由于是自定义上传的影片, 避免和采集站点的影片冲突, 以当前时间时间戳作为ID
fd.Id = now.Unix()
// 生成影片详情信息
detail, err := conver.CovertFilmDetailVo(fd)
if err != nil || detail.PlayList == nil {
return errors.New("影片参数格式异常或缺少关键信息")
}
// 保存影片信息
return system.SaveDetail(detail)
}
//----------------------------------------------------影片分类业务逻辑----------------------------------------------------
// GetFilmClassTree 获取影片分类信息
func (fl *FilmLogic) GetFilmClassTree() system.CategoryTree {
// 获取原本的影片分类信息
return system.GetCategoryTree()
}
func (fl *FilmLogic) GetFilmClassById(id int64) *system.CategoryTree {
tree := system.GetCategoryTree()
for _, c := range tree.Children {
// 如果是一级分类, 则相等时直接返回
if c.Id == id {
return c
}
// 如果当前分类含有子分类, 则继续遍历匹配
if c.Children != nil {
for _, subC := range c.Children {
if subC.Id == id {
return subC
}
}
}
}
return nil
}
// UpdateClass 更新分类信息
func (fl *FilmLogic) UpdateClass(class system.CategoryTree) error {
// 遍历影片分类信息
tree := system.GetCategoryTree()
for _, c := range tree.Children {
// 如果是一级分类, 则相等时直接修改对应的name和show属性
if c.Id == class.Id {
if class.Name != "" {
c.Name = class.Name
}
c.Show = class.Show
if err := system.SaveCategoryTree(&tree); err != nil {
return fmt.Errorf("影片分类信息更新失败: %s", err.Error())
}
return nil
}
// 如果当前分类含有子分类, 则继续遍历匹配
if c.Children != nil {
for _, subC := range c.Children {
if subC.Id == class.Id {
if class.Name != "" {
subC.Name = class.Name
}
subC.Show = class.Show
if err := system.SaveCategoryTree(&tree); err != nil {
return fmt.Errorf("影片分类信息更新失败: %s", err.Error())
}
return nil
}
}
}
}
return errors.New("需要更新的分类信息不存在")
}
// DelClass 删除分类信息
func (fl *FilmLogic) DelClass(id int64) error {
tree := system.GetCategoryTree()
for i, c := range tree.Children {
// 如果是一级分类, 则相等时直接返回
if c.Id == id {
tree.Children = append(tree.Children[:i], tree.Children[i+1:]...)
if err := system.SaveCategoryTree(&tree); err != nil {
return fmt.Errorf("影片分类信息删除失败: %s", err.Error())
}
return nil
}
// 如果当前分类含有子分类, 则继续遍历匹配
if c.Children != nil {
for j, subC := range c.Children {
if subC.Id == id {
c.Children = append(c.Children[:j], c.Children[j+1:]...)
if err := system.SaveCategoryTree(&tree); err != nil {
return fmt.Errorf("影片分类信息删除失败: %s", err.Error())
}
return nil
}
}
}
}
return errors.New("需要删除的分类信息不存在")
}