[AI] fix: 修复短剧剧集重复显示

两处原因,分别处理:

1. contentsync 只按 _id 水位线插新增,源库事后打上的 isDelete 传不过来,
   源站删掉的重复集在目标库一直留着。每轮同步后补扫一次 media /
   media_content / video_info,把源库的软删除标记同步过去,并按
   web/service/mediacontentser 的同一口径重算父级 currentEpisode /
   freeEpisode。只做「源库删了→目标也删」一个方向,不与本地下架保护冲突。

2. 各站 skd 的媒资库同步会为同一集(mediaId+hashId 相同)另插一条自己的 _id,
   与 contentsync 带过来的源库那条并存。媒资库那条在 SaleCoin=0 时
   listenPermission=2,本该收费的集可以白看。插入时若发现本地已有同一集,
   把本地那条 isActive:false 下架;并新增 skd 配置开关
   switch.mediaSyncDisabled,非源站可直接关掉这条同步链。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-29 20:18:36 +08:00
co-authored by Claude Opus 5
parent 3dcf6930d6
commit acb9a34520
5 changed files with 799 additions and 8 deletions
+12 -8
View File
@@ -93,14 +93,18 @@ func start() {
RunPendingSyncIMUsers()
})
// 同步acg订阅的动漫
_, _ = statCron.AddFunc("0 0/30 * * * ?", func() { //每30分钟执行一次
ms := mediaService.NewMediaSync(skdg.Redis, mediaCenter.NewMediaCenterService(mediaCenter.Config{
Url: skdg.Conf.MediaResourcesCfg.UploadMediaUrl,
ProId: skdg.Conf.MediaResourcesCfg.ProId,
Secret: skdg.Conf.MediaResourcesCfg.AppSecret,
}))
ms.SyncAll("系统")
})
if skdg.Conf.Switch.MediaSyncDisabled {
log.Info("【ACG同步任务】已按配置关闭(switch.mediaSyncDisabled),内容改由 contentsync 从源站同步")
} else {
_, _ = statCron.AddFunc("0 0/30 * * * ?", func() { //每30分钟执行一次
ms := mediaService.NewMediaSync(skdg.Redis, mediaCenter.NewMediaCenterService(mediaCenter.Config{
Url: skdg.Conf.MediaResourcesCfg.UploadMediaUrl,
ProId: skdg.Conf.MediaResourcesCfg.ProId,
Secret: skdg.Conf.MediaResourcesCfg.AppSecret,
}))
ms.SyncAll("系统")
})
}
common.Go(func() {
err := aiService.NewAiService(
aiService.AppId(int(commod.KFK_APPID)),
+9
View File
@@ -79,6 +79,15 @@ type GlobalConfig struct {
} `json:"url"`
Switch struct {
NotifyExpire bool `json:"notifyExpire"`
// MediaSyncDisabled 关掉 skd 每 30 分钟的媒资库同步。
//
// 本站内容由 scripts/contentsync 从源站整体同步过来,源站自己会跑媒资库
// 同步;本站再跑一遍会为同一集(mediaId+hashId 相同)另插一条自己的 _id,
// 剧集列表就出现「1 1 2 2」,而且媒资库那条在 SaleCoin=0 时
// listenPermission=2(免费),等于本该收费的集可以白看。
//
// 留空/false 表示照旧开启——源站必须保持开启,否则新剧集无从进库。
MediaSyncDisabled bool `json:"mediaSyncDisabled"`
} `json:"switch"`
StartDate string `json:"startDate"`
MediaResourcesCfg struct {