Files
dysync/service/CommonService.cs
yuming b328e82eb2 feat: 视频预览/数据看板/下载配置 三项业务功能
- 新增视频预览:VideoPlayer 组件、VideoController/DyCollectVideoService/Repository、VideoPageRequestDTO 对应后端改动
- 新增数据看板:workplace/statics.vue、RecordTable、相关 store/http/axios 改动
- 新增下载配置:DownloadConfigService、ConfigController、AppSet.vue、AppConfig
- 其他:DyHttpClientService / 同步 Job(Collect, Favorit) / Cookie 表 / CommonService / ServiceExtension 的配套调整
- 仓库卫生:.gitignore 追加 feiniu 过滤;运维脚本归档到 docs/scripts/
2026-04-25 00:22:33 +08:00

184 lines
6.0 KiB
C#

using ClockSnowFlake;
using dy.net.dto;
using dy.net.model;
using SqlSugar;
using System.Reflection;
using System.Threading.Tasks;
namespace dy.net.service
{
public class CommonService
{
private readonly ISqlSugarClient sqlSugarClient;
public CommonService(ISqlSugarClient sqlSugarClient)
{
this.sqlSugarClient = sqlSugarClient;
}
public AppConfig GetConfig()
{
return sqlSugarClient.Queryable<AppConfig>().First();
}
public AppConfig InitConfig()
{
var conf = GetConfig();
if (conf != null)
return conf;
else
{
AppConfig config = new AppConfig
{
Id = IdGener.GetLong().ToString(),
Cron = "30",
BatchCount = 10
};
sqlSugarClient.Insertable<AppConfig>(config).ExecuteCommand();
return config;
}
}
public async Task<bool> UpdateConfig(AppConfig config)
{
var cc = await sqlSugarClient.Queryable<AppConfig>().FirstAsync(x => x.Id == config.Id);
if (cc == null)
return false;
else
{
cc.Cron = config.Cron;
cc.BatchCount = config.BatchCount;
// 更新下载配置
cc.EnableAutoDownload = config.EnableAutoDownload;
cc.DownloadDaysRange = config.DownloadDaysRange;
cc.AuthorWhitelist = config.AuthorWhitelist;
cc.AuthorBlacklist = config.AuthorBlacklist;
cc.DownloadFavorite = config.DownloadFavorite;
cc.DownloadCollect = config.DownloadCollect;
}
var update = await sqlSugarClient.Updateable<AppConfig>(cc).ExecuteCommandAsync();
return update > 0;
}
/// <summary>
/// 兼容旧版将之前同步了的我收藏的数据进行更新
/// </summary>
public void UpdateCollectViedoType()
{
var collectViedos = sqlSugarClient.Queryable<DyCollectVideo>().Where(x => string.IsNullOrWhiteSpace(x.ViedoType)).ToList();
if (collectViedos.Any())
{
collectViedos.ForEach(x =>
{
x.ViedoType = "2";
});
sqlSugarClient.Updateable(collectViedos).ExecuteCommand();
}
}
/// <summary>
/// 重置所有Cookie的同步状态为0
/// </summary>
/// <returns></returns>
public bool UpdateAllCookieSyncedToZero()
{
//var sql = "update dy_cookie set CollHasSyncd=0,FavHasSyncd=0,UperSyncd=0";
// sqlSugarClient.Ado.ExecuteCommand(sql) > 0;
var cookies = sqlSugarClient.Queryable<DyUserCookies>().ToList();
foreach (var cookie in cookies)
{
cookie.CollHasSyncd = 0;
cookie.FavHasSyncd = 0;
cookie.UperSyncd = 0;
var upers = cookie.UpSecUserIds;
if (!string.IsNullOrWhiteSpace(upers))
{
var uperList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DyUpSecUserIdDto>>(upers);
if (uperList != null && uperList.Count > 0)
{
foreach (var uper in uperList)
{
uper.syncAll = false;
}
}
var newUpers = Newtonsoft.Json.JsonConvert.SerializeObject(uperList);
cookie.UpSecUserIds = newUpers;
}
}
return sqlSugarClient.Updateable(cookies).ExecuteCommand() > 0;
}
#region 测试创建数据库
///// <summary>
///// 创建SQLite数据库连接字符串
///// </summary>
//private string CreateSqliteDBConn()
//{
// var dbFolder = Path.Combine(Environment.CurrentDirectory, "db");
// Directory.CreateDirectory(dbFolder); // 不存在则创建,无需判断
// var dbPath = Path.Combine(dbFolder, "dy.sqlite");
// if (!File.Exists(dbPath))
// {
// using (File.Create(dbPath)) { } // 使用using确保文件流关闭
// }
// return $"DataSource={dbPath}";
//}
///// <summary>
///// 初始化数据库
///// </summary>
//public ISqlSugarClient InitDataBase(DbType dbType, string connString)
//{
// // 处理SQLite连接字符串
// if (dbType == DbType.Sqlite)
// {
// connString = CreateSqliteDBConn();
// }
// if (string.IsNullOrWhiteSpace(connString))
// {
// return null;
// }
// return new SqlSugarClient(new ConnectionConfig
// {
// ConnectionString = connString,
// InitKeyType = InitKeyType.Attribute,
// DbType = dbType,
// IsAutoCloseConnection = true
// }, db =>
// {
// // 日志配置
// db.Aop.OnLogExecuting = (sql, pars) => Serilog.Log.Debug(sql);
// db.Aop.OnError = e =>
// {
// Serilog.Log.Error(e.Message);
// Serilog.Log.Error(e.Sql);
// };
// // 创建数据库和表
// db.DbMaintenance.CreateDatabase();
// var modelTypes = Assembly.GetExecutingAssembly()
// .GetTypes()
// .Where(t => t.Namespace?.StartsWith("dy.net.model") ?? false)
// .ToArray();
// db.CodeFirst.InitTables(modelTypes);
// });
//}
#endregion
}
}