diff --git a/client/src/style.css b/client/src/style.css index 0907d81..3cbe375 100644 --- a/client/src/style.css +++ b/client/src/style.css @@ -25,9 +25,10 @@ --bg-light: #ffffff; - --bg-dark: #21252b; + --active--text-color: #ffb22cd6; + --active--bg-color: #ffb22c0d; --text-color-primary: #ffffff; --content-text-color: #888888; diff --git a/client/src/views/index/FilmClassify.vue b/client/src/views/index/FilmClassify.vue index 865f016..5ff2c44 100644 --- a/client/src/views/index/FilmClassify.vue +++ b/client/src/views/index/FilmClassify.vue @@ -77,8 +77,8 @@ onMounted(() => { .c_nav { display: flex; justify-content: space-between; - padding: 6px; + border-bottom: 2px solid rgba(255, 255, 255, 0.1); } .c_nav_text { @@ -87,8 +87,14 @@ onMounted(() => { } .c_nav_more { - background: #25252b; - border-radius: 8px; + border-radius: 5px; + background: linear-gradient(#ffffff15, #ffffff1a); + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.c_nav_more:hover { + color: var(--active--text-color); + background-color: var(--active--bg-color); } .content > div { diff --git a/client/vite.config.ts b/client/vite.config.ts index 52b05c7..2dc16de 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -7,32 +7,32 @@ import {ElementPlusResolver} from "unplugin-vue-components/resolvers"; export default defineConfig({ // 本地测试环境 - // server: { - // host: '0.0.0.0', - // port: 3600, - // proxy: { - // "/api": { - // // target: `http://127.0.0.1:3601`, - // target: `http://113.44.5.201:3601`, - // changeOrigin: true, // 允许跨域 - // rewrite: path => path.replace(/^\/api/, '') - // } - // }, - // }, - - // nginx发布构建时使用此配置 server: { - host: 'localhost', + host: '0.0.0.0', port: 3600, proxy: { "/api": { - target: `http://localhost`, + target: `http://127.0.0.1:3601`, + // target: `http://113.44.5.201:3601`, changeOrigin: true, // 允许跨域 - rewrite: path => path.replace(/^\/api/,'') + rewrite: path => path.replace(/^\/api/, '') } }, }, + // nginx发布构建时使用此配置 + // server: { + // host: 'localhost', + // port: 3600, + // proxy: { + // "/api": { + // target: `http://localhost`, + // changeOrigin: true, // 允许跨域 + // rewrite: path => path.replace(/^\/api/,'') + // } + // }, + // }, + plugins: [ vue(), AutoImport({ diff --git a/server/config/DataConfig.go b/server/config/DataConfig.go index d6f06ee..4da2579 100644 --- a/server/config/DataConfig.go +++ b/server/config/DataConfig.go @@ -72,8 +72,10 @@ const ( // DefaultUpdateTime 每次采集最近 3 小时内更新的影片 DefaultUpdateTime = 3 - // FailureCollectKey 失败采集记录key - FailureCollectKey = "CollectRecord:Fail:%d" + // FailureAllCollectKey 失败采集记录-全量采集记录 + FailureAllCollectKey = "CollectRecord:Fail:%s" + // FailureUpdateCollectKey 失败采集记录-更新失败记录 + FailureUpdateCollectKey = "CollectRecord:Fail:%s" ) // -------------------------Web API相关redis key----------------------------------- @@ -85,10 +87,11 @@ const ( // -------------------------Database Connection Params----------------------------------- const ( // SearchTableName 存放检索信息的数据表名 - SearchTableName = "search" - UserTableName = "users" - UserIdInitialVal = 10000 - FileTableName = "files" + SearchTableName = "search" + UserTableName = "users" + UserIdInitialVal = 10000 + FileTableName = "files" + FailureRecordTableName = "failure_records" //mysql服务配置信息 root:root 设置mysql账户的用户名和密码 diff --git a/server/model/system/CollectRecord.go b/server/model/system/CollectRecord.go new file mode 100644 index 0000000..a721116 --- /dev/null +++ b/server/model/system/CollectRecord.go @@ -0,0 +1,76 @@ +package system + +import ( + "gorm.io/gorm" + "log" + "server/config" + "server/plugin/db" +) + +// FailureRecord 失败采集记录信息机构体 +type FailureRecord struct { + gorm.Model + OriginId string `json:"originId"` // 采集站唯一ID + Uri string `json:"uri"` // 采集源链接 + CollectType ResourceType `json:"collectType"` // 采集类型 + PageNumber int `json:"pageNumber"` // 页码 + Hour int `json:"hour"` // 采集参数 h 时长 + Cause string `json:"cause"` // 失败原因 + Status int `json:"status"` // 重试状态 +} + +// TableName 采集失败记录表表名 +func (fr FailureRecord) TableName() string { + return config.FailureRecordTableName +} + +// CreateFailureRecordTable 创建失效记录表 +func CreateFailureRecordTable() { + var fl = &FailureRecord{} + // 不存在则创建FailureRecord表 + if !db.Mdb.Migrator().HasTable(fl) { + if err := db.Mdb.AutoMigrate(fl); err != nil { + log.Println("Create Table failure_record failed:", err) + } + } +} + +// SaveFailureRecord 添加采集失效记录 +func SaveFailureRecord(fl FailureRecord) { + if err := db.Mdb.Create(&fl).Error; err != nil { + log.Println("Add failure record failed:", err) + } +} + +// FailureRecordList 获取所有的采集失效记录 +func FailureRecordList(page *Page) []FailureRecord { + var count int64 + db.Mdb.Model(&FailureRecord{}).Count(&count) + page.Total = int(count) + page.PageCount = int((page.Total + page.PageSize - 1) / page.PageSize) + // 获取分页查询的数据 + var list []FailureRecord + if err := db.Mdb.Limit(page.PageSize).Offset((page.Current - 1) * page.PageSize).Find(&list).Error; err != nil { + log.Println(err) + return nil + } + return list +} + +// FindRecordById 获取id对应的失效记录 +func FindRecordById(id uint) *FailureRecord { + var fr FailureRecord + fr.ID = id + // 通过ID查询对应的数据 + db.Mdb.First(fr) + return &fr +} + +// RetryRecord 修改重试采集成功的记录 +func RetryRecord(id uint, status int64) error { + // 查询id对应的失败记录 + fr := FindRecordById(id) + // 将本次更新成功的记录数据状态修改为成功 0 + return db.Mdb.Model(&FailureRecord{}).Where("update_at > ?", fr.UpdatedAt).Update("status", 0).Error + +} diff --git a/server/model/system/CollectSource.go b/server/model/system/CollectSource.go index 11413b4..9ac5478 100644 --- a/server/model/system/CollectSource.go +++ b/server/model/system/CollectSource.go @@ -9,7 +9,6 @@ import ( "server/config" "server/plugin/common/util" "server/plugin/db" - "time" ) /* @@ -72,16 +71,6 @@ type FilmSource struct { Interval int `json:"interval"` // 采集时间间隔 单位/ms } -// FailureCollect 失败采集记录信息机构体 -type FailureCollect struct { - Id string `json:"id"` // 采集站唯一ID - CollectType ResourceType `json:"collectType"` // 采集类型 - PageNumber int64 `json:"pageNumber"` // 页码 - //Hour int64 `json:"hour"` // 采集参数 h 时长 - Cause string `json:"cause"` // 失败原因 - Time int `json:"time"` // 采集失败时的时间 -} - // SaveCollectSourceList 保存采集站Api列表 func SaveCollectSourceList(list []FilmSource) error { var zl []redis.Z @@ -186,22 +175,3 @@ func ExistCollectSourceList() bool { return true } - -// CollectFailRecord 记录采集失败的相关参数信息 -func CollectFailRecord(fc FailureCollect) error { - // 将fc序列化为json格式进行存储 - m, _ := json.Marshal(fc) - // 获取当前的时间戳作为set集合的Score - z := redis.Z{Score: float64(time.Now().Unix()), Member: m} - return db.Rdb.ZAdd(db.Cxt, config.FailureCollectKey, z).Err() -} - -// GetCollectFailList 从失败采集记录中读取一部分记录 -func GetCollectFailList() []FailureCollect { - // 获取多条记录, 降低读取频率 or 多次单条读取 - - // 一次获取多条记录, 再次执行失败则重新进行记录 - - // 读取单条记录, 成功执行则进行记录清除, 否则对其进行保留 - return nil -} diff --git a/server/model/system/Search.go b/server/model/system/Search.go index 50f7532..04dc587 100644 --- a/server/model/system/Search.go +++ b/server/model/system/Search.go @@ -112,7 +112,7 @@ func SaveSearchTag(search SearchInfo) { // 获取redis中的searchMap key := fmt.Sprintf(config.SearchTitle, search.Pid) searchMap := db.Rdb.HGetAll(db.Cxt, key).Val() - // 是否存储对应分类的map, 如果不存在则缓存一份 + // 是否存在对应分类的map, 如果不存在则缓存一份 if len(searchMap) == 0 { searchMap = make(map[string]string) searchMap["Category"] = "类型" diff --git a/server/plugin/SystemInit/DatabaseInIt.go b/server/plugin/SystemInit/DatabaseInIt.go index bf491c8..01e9423 100644 --- a/server/plugin/SystemInit/DatabaseInIt.go +++ b/server/plugin/SystemInit/DatabaseInIt.go @@ -12,4 +12,6 @@ func TableInIt() { system.CreateSearchTable() // 创建图片信息管理表 system.CreateFileTable() + // 创建采集失效记录表 + system.CreateFailureRecordTable() } diff --git a/server/plugin/spider/Spider.go b/server/plugin/spider/Spider.go index f5d9c92..517d78c 100644 --- a/server/plugin/spider/Spider.go +++ b/server/plugin/spider/Spider.go @@ -139,6 +139,9 @@ func collectFilm(s *system.FilmSource, h, pg int) { // 执行采集方法 获取影片详情list list, err := spiderCore.GetFilmDetail(r) if err != nil || len(list) <= 0 { + // 添加采集失败记录 + fr := system.FailureRecord{OriginId: s.Id, Uri: s.Uri, CollectType: system.CollectVideo, PageNumber: pg, Hour: h, Cause: err.Error(), Status: 1} + system.SaveFailureRecord(fr) log.Println("GetMovieDetail Error: ", err) return }