From 5c05e6465b0a0dd2391075b83bd8f55d9687a52e Mon Sep 17 00:00:00 2001 From: jianzhichu Date: Mon, 8 Dec 2025 16:46:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=BC=E5=87=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=8F=8A=E6=89=8B=E5=8A=A8=E6=B7=BB=E5=8A=A0=E7=9A=84?= =?UTF-8?q?=E5=85=B3=E6=B3=A8=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controllers/ConfigController.cs | 99 +++++-- Program.cs | 2 +- .../PublishProfiles/FolderProfile.pubxml.user | 2 +- app/src/pages/set/AppSet.vue | 256 +++++++++++++++--- app/src/store/coreapi.ts | 18 ++ appsettings.json | 6 +- dto/AppConfigImportDto.cs | 12 + service/DouyinCommonService.cs | 2 +- service/DouyinFollowService.cs | 51 ++++ 9 files changed, 387 insertions(+), 61 deletions(-) create mode 100644 dto/AppConfigImportDto.cs diff --git a/Controllers/ConfigController.cs b/Controllers/ConfigController.cs index 1bc49ed..87366ad 100644 --- a/Controllers/ConfigController.cs +++ b/Controllers/ConfigController.cs @@ -8,6 +8,8 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Quartz.Util; +using System.Text; +using System.Text.Json; using System.Xml.Linq; using static Dm.net.buffer.ByteArrayBuffer; @@ -33,8 +35,55 @@ namespace dy.net.Controllers } + /// + /// 导出配置 + /// + /// + [HttpGet("exportConf")] + public async Task ExportConf() + { + + // 1. 组装导出数据 + var dto = new AppConfigImportDto() + { + follows = await douyinFollowService.GetHandFollows(), + conf = commonService.GetConfig() + }; + + return Ok(new { code = 0, data = dto }); + + } + /// + /// 导入配置 + /// + /// + /// + [HttpPost("importConf")] + public async Task ImportConf(AppConfigImportDto dto) + { + if (dto == null) + return BadRequest("json数据为空"); + + var follows = dto.follows; + if (follows != null && follows.Count > 0) + { + var add = await douyinFollowService.AddHandFollows(follows); + if (add) + Serilog.Log.Debug("关注列表导入成功"); + } + + var conf = dto.conf; + if (conf != null) + { + var update = await commonService.UpdateConfig(conf); + if (update) + Serilog.Log.Debug("配置导入成功"); + } + + return Ok(new {code=0,data=true}); + } /// /// 分页查询 /// @@ -50,9 +99,9 @@ namespace dy.net.Controllers data = new { data = list, - total=totalCount, - pageIndex= dto.PageIndex, - pageSize= dto.PageSize + total = totalCount, + pageIndex = dto.PageIndex, + pageSize = dto.PageSize } } ); @@ -66,7 +115,7 @@ namespace dy.net.Controllers [HttpGet("list")] public async Task GetAllList() { - var follows= await douyinFollowService.GetGroupByCookieAsync(); + var follows = await douyinFollowService.GetGroupByCookieAsync(); return Ok(new { code = 0, data = follows }); } /// @@ -75,14 +124,14 @@ namespace dy.net.Controllers [HttpPost("add")] public async Task AddAsync([FromBody] DouyinCookie dyUserCookies) { - + var result = await dyCookieService.Add(dyUserCookies); if (result) { await ReStartJob(); return Ok(new { code = 0 }); } - return BadRequest(new { code=-1, message = "添加失败" }); + return BadRequest(new { code = -1, message = "添加失败" }); } /// @@ -94,7 +143,7 @@ namespace dy.net.Controllers if (dyUserCookies.Id == "0") { - dyUserCookies.Id=IdGener.GetLong().ToString(); + dyUserCookies.Id = IdGener.GetLong().ToString(); var result = await dyCookieService.Add(dyUserCookies); if (result) { @@ -103,7 +152,8 @@ namespace dy.net.Controllers } return BadRequest(new { code = -1, message = "添加失败" }); } - else { + else + { var result = await dyCookieService.UpdateAsync(dyUserCookies); if (result) { @@ -112,7 +162,7 @@ namespace dy.net.Controllers } return BadRequest(new { code = -1, message = "更新失败" }); } - + } /// @@ -121,8 +171,9 @@ namespace dy.net.Controllers [HttpGet("delete")] public async Task DeleteAsync(string id) { - var count = await dyCookieService.DeleteByIdsAsync(new List { id}); - if (count > 0) { + var count = await dyCookieService.DeleteByIdsAsync(new List { id }); + if (count > 0) + { await ReStartJob(); } return Ok(new { code = 0, deletedCount = count }); @@ -131,7 +182,7 @@ namespace dy.net.Controllers [HttpGet("GetConfig")] public IActionResult GetConfig() { - var data = commonService.GetConfig(); + var data = commonService.GetConfig(); return Ok(new { code = 0, data = data }); } @@ -139,7 +190,8 @@ namespace dy.net.Controllers public async Task UpdateConfig(AppConfig config) { var data = await commonService.UpdateConfig(config); - if (data) { + if (data) + { await ReStartJob(); } return Ok(new { code = 0, data = data }); @@ -153,17 +205,18 @@ namespace dy.net.Controllers //[Authorize] public async Task ExecuteJobNow() { - var config = commonService.GetConfig(); - if (config!=null) - await quartzJobService.InitOrReStartAllJobs(config.Cron.ToString()); - return Ok(new { code = 0 , error = "" }); + var config = commonService.GetConfig(); + if (config != null) + await quartzJobService.InitOrReStartAllJobs(config.Cron.ToString()); + return Ok(new { code = 0, error = "" }); } - private async Task ReStartJob() { - var config= commonService.GetConfig(); - if (config!=null) - quartzJobService.InitOrReStartAllJobs(config.Cron.ToString()); + private async Task ReStartJob() + { + var config = commonService.GetConfig(); + if (config != null) + quartzJobService.InitOrReStartAllJobs(config.Cron.ToString()); //避免前端等待 } /// @@ -173,13 +226,13 @@ namespace dy.net.Controllers [HttpGet("mytag")] public async Task GetMyTag() { - return Ok(new { code = 0, data =Appsettings.Get("tagName") }); + return Ok(new { code = 0, data = Appsettings.Get("tagName") }); } [HttpGet("checktag")] public async Task CheckTag() { - var data =await DouyinHttpHelper.GetTenImage(Appsettings.Get("tagName")); + var data = await DouyinHttpHelper.GetTenImage(Appsettings.Get("tagName")); if (data.IsSuccessStatusCode) { var content = await data.Content.ReadAsStringAsync(); diff --git a/Program.cs b/Program.cs index bc4a4d3..d036a9d 100644 --- a/Program.cs +++ b/Program.cs @@ -197,7 +197,7 @@ ____/ _|_)_____/ _| _| \_|\____| // òƷͬ״̬Ϊδͬ commonService.UpdateAllCookieSyncedToZero(); - //if (!isDevelopment) + if (!isDevelopment) { // ʱ var quartzJobService = services.GetRequiredService(); diff --git a/Properties/PublishProfiles/FolderProfile.pubxml.user b/Properties/PublishProfiles/FolderProfile.pubxml.user index 5dd7b1e..59b77b1 100644 --- a/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121. <_PublishTargetUrl>E:\code\dysync\bin\Release\net6.0\publish\ - True|2025-12-08T04:40:19.2430740Z||;True|2025-12-08T12:02:30.6005542+08:00||;True|2025-12-08T11:34:29.6673185+08:00||;False|2025-12-08T11:30:56.2857042+08:00||;True|2025-12-08T10:52:43.7427594+08:00||;True|2025-12-08T07:05:03.2845531+08:00||;True|2025-12-07T23:02:10.0037815+08:00||;True|2025-12-07T22:48:25.7859648+08:00||;True|2025-12-07T20:49:13.6683281+08:00||;True|2025-12-07T08:47:30.1236366+08:00||;True|2025-12-06T13:14:32.4410202+08:00||;True|2025-12-06T13:07:29.7182102+08:00||;True|2025-12-06T13:05:46.2855366+08:00||;False|2025-12-06T13:05:40.3550904+08:00||;True|2025-12-06T13:03:47.8773880+08:00||;True|2025-12-06T13:03:28.9521030+08:00||;True|2025-12-05T23:11:51.5026151+08:00||;True|2025-12-05T12:46:26.1415079+08:00||;False|2025-12-05T12:46:19.1274332+08:00||;True|2025-12-05T09:04:36.7111717+08:00||;True|2025-12-05T08:22:51.7343317+08:00||;True|2025-12-05T08:20:32.0383739+08:00||;True|2025-12-04T21:58:29.4112766+08:00||;True|2025-12-04T21:58:10.0382218+08:00||;True|2025-12-04T21:57:55.3894059+08:00||;True|2025-12-04T21:10:38.8943797+08:00||;True|2025-12-04T21:09:31.5024569+08:00||;True|2025-12-04T08:22:47.9617427+08:00||;False|2025-12-04T08:22:41.3759733+08:00||;True|2025-12-04T08:14:02.2478893+08:00||;True|2025-12-04T07:57:00.2208139+08:00||;True|2025-12-03T23:58:13.3693303+08:00||;True|2025-12-03T23:57:40.4257893+08:00||;True|2025-12-03T23:56:38.8717769+08:00||;True|2025-12-03T23:56:24.0663568+08:00||;False|2025-12-03T23:55:36.1902974+08:00||;True|2025-12-03T23:51:30.6688504+08:00||;True|2025-12-03T23:34:17.1648971+08:00||;False|2025-12-03T23:34:07.7649161+08:00||;True|2025-12-03T22:32:56.2435003+08:00||;True|2025-12-03T22:27:45.6059666+08:00||;True|2025-12-03T15:55:28.0186597+08:00||;False|2025-12-03T15:54:17.5032724+08:00||;True|2025-12-03T15:53:10.2273509+08:00||;True|2025-12-02T22:11:37.4645042+08:00||;False|2025-12-02T22:10:47.1320259+08:00||;True|2025-12-02T14:39:58.8932130+08:00||;True|2025-12-02T14:36:37.1529072+08:00||;True|2025-12-02T12:58:22.0951548+08:00||;True|2025-12-02T09:30:33.7066474+08:00||;True|2025-12-02T09:30:14.5481844+08:00||;True|2025-12-02T09:30:00.3123364+08:00||;False|2025-12-02T09:29:54.4615520+08:00||;True|2025-12-02T09:13:01.7995414+08:00||;False|2025-12-02T09:12:55.8360281+08:00||;True|2025-12-02T09:12:31.0156791+08:00||;True|2025-12-02T08:55:11.3773395+08:00||;True|2025-12-02T08:53:21.3927713+08:00||;False|2025-12-02T08:48:55.8638037+08:00||;True|2025-12-02T07:29:25.2192447+08:00||;False|2025-12-02T07:29:10.2504665+08:00||;True|2025-12-02T07:28:29.0769286+08:00||;True|2025-12-01T21:53:07.6474834+08:00||;True|2025-12-01T21:44:28.1674315+08:00||;True|2025-12-01T21:18:47.2119609+08:00||;True|2025-12-01T20:51:19.9948301+08:00||;True|2025-12-01T20:50:36.9904697+08:00||;True|2025-12-01T20:44:10.1695142+08:00||;True|2025-12-01T19:27:58.0479456+08:00||;True|2025-12-01T19:16:02.2288214+08:00||;False|2025-12-01T19:15:56.0372115+08:00||;True|2025-12-01T19:15:16.4854821+08:00||;False|2025-12-01T19:15:06.7001019+08:00||;True|2025-12-01T17:10:38.9739466+08:00||;False|2025-12-01T17:10:18.8928139+08:00||;True|2025-12-01T17:03:59.3171589+08:00||;True|2025-12-01T17:03:12.5681656+08:00||;True|2025-12-01T16:42:51.4415025+08:00||;True|2025-12-01T01:29:59.6975567+08:00||;True|2025-12-01T01:29:45.1898652+08:00||;False|2025-12-01T01:29:33.1787721+08:00||;True|2025-12-01T01:27:33.1297605+08:00||;True|2025-12-01T01:27:27.3976862+08:00||;False|2025-12-01T01:27:20.5193052+08:00||;True|2025-12-01T01:11:11.0210582+08:00||;True|2025-12-01T01:04:04.3307782+08:00||;True|2025-12-01T00:55:49.8018864+08:00||;True|2025-12-01T00:27:25.1323561+08:00||;True|2025-11-30T23:58:20.7284116+08:00||;True|2025-11-30T23:57:58.3027622+08:00||;True|2025-11-30T23:57:43.0829614+08:00||;False|2025-11-30T23:57:33.5606716+08:00||;True|2025-11-30T23:54:29.6203368+08:00||;True|2025-11-30T23:54:27.5383120+08:00||;False|2025-11-30T23:54:17.0823982+08:00||;True|2025-11-30T22:41:11.4538820+08:00||;True|2025-11-30T22:38:19.7064566+08:00||;True|2025-11-30T22:37:35.2889186+08:00||;True|2025-11-30T21:42:31.1408314+08:00||;True|2025-11-30T21:42:19.5385333+08:00||; + True|2025-12-08T08:43:45.2425324Z||;False|2025-12-08T16:42:23.0308163+08:00||;True|2025-12-08T16:41:52.4103868+08:00||;True|2025-12-08T16:41:49.8972006+08:00||;False|2025-12-08T16:41:39.5343442+08:00||;True|2025-12-08T12:40:19.2430740+08:00||;True|2025-12-08T12:02:30.6005542+08:00||;True|2025-12-08T11:34:29.6673185+08:00||;False|2025-12-08T11:30:56.2857042+08:00||;True|2025-12-08T10:52:43.7427594+08:00||;True|2025-12-08T07:05:03.2845531+08:00||;True|2025-12-07T23:02:10.0037815+08:00||;True|2025-12-07T22:48:25.7859648+08:00||;True|2025-12-07T20:49:13.6683281+08:00||;True|2025-12-07T08:47:30.1236366+08:00||;True|2025-12-06T13:14:32.4410202+08:00||;True|2025-12-06T13:07:29.7182102+08:00||;True|2025-12-06T13:05:46.2855366+08:00||;False|2025-12-06T13:05:40.3550904+08:00||;True|2025-12-06T13:03:47.8773880+08:00||;True|2025-12-06T13:03:28.9521030+08:00||;True|2025-12-05T23:11:51.5026151+08:00||;True|2025-12-05T12:46:26.1415079+08:00||;False|2025-12-05T12:46:19.1274332+08:00||;True|2025-12-05T09:04:36.7111717+08:00||;True|2025-12-05T08:22:51.7343317+08:00||;True|2025-12-05T08:20:32.0383739+08:00||;True|2025-12-04T21:58:29.4112766+08:00||;True|2025-12-04T21:58:10.0382218+08:00||;True|2025-12-04T21:57:55.3894059+08:00||;True|2025-12-04T21:10:38.8943797+08:00||;True|2025-12-04T21:09:31.5024569+08:00||;True|2025-12-04T08:22:47.9617427+08:00||;False|2025-12-04T08:22:41.3759733+08:00||;True|2025-12-04T08:14:02.2478893+08:00||;True|2025-12-04T07:57:00.2208139+08:00||;True|2025-12-03T23:58:13.3693303+08:00||;True|2025-12-03T23:57:40.4257893+08:00||;True|2025-12-03T23:56:38.8717769+08:00||;True|2025-12-03T23:56:24.0663568+08:00||;False|2025-12-03T23:55:36.1902974+08:00||;True|2025-12-03T23:51:30.6688504+08:00||;True|2025-12-03T23:34:17.1648971+08:00||;False|2025-12-03T23:34:07.7649161+08:00||;True|2025-12-03T22:32:56.2435003+08:00||;True|2025-12-03T22:27:45.6059666+08:00||;True|2025-12-03T15:55:28.0186597+08:00||;False|2025-12-03T15:54:17.5032724+08:00||;True|2025-12-03T15:53:10.2273509+08:00||;True|2025-12-02T22:11:37.4645042+08:00||;False|2025-12-02T22:10:47.1320259+08:00||;True|2025-12-02T14:39:58.8932130+08:00||;True|2025-12-02T14:36:37.1529072+08:00||;True|2025-12-02T12:58:22.0951548+08:00||;True|2025-12-02T09:30:33.7066474+08:00||;True|2025-12-02T09:30:14.5481844+08:00||;True|2025-12-02T09:30:00.3123364+08:00||;False|2025-12-02T09:29:54.4615520+08:00||;True|2025-12-02T09:13:01.7995414+08:00||;False|2025-12-02T09:12:55.8360281+08:00||;True|2025-12-02T09:12:31.0156791+08:00||;True|2025-12-02T08:55:11.3773395+08:00||;True|2025-12-02T08:53:21.3927713+08:00||;False|2025-12-02T08:48:55.8638037+08:00||;True|2025-12-02T07:29:25.2192447+08:00||;False|2025-12-02T07:29:10.2504665+08:00||;True|2025-12-02T07:28:29.0769286+08:00||;True|2025-12-01T21:53:07.6474834+08:00||;True|2025-12-01T21:44:28.1674315+08:00||;True|2025-12-01T21:18:47.2119609+08:00||;True|2025-12-01T20:51:19.9948301+08:00||;True|2025-12-01T20:50:36.9904697+08:00||;True|2025-12-01T20:44:10.1695142+08:00||;True|2025-12-01T19:27:58.0479456+08:00||;True|2025-12-01T19:16:02.2288214+08:00||;False|2025-12-01T19:15:56.0372115+08:00||;True|2025-12-01T19:15:16.4854821+08:00||;False|2025-12-01T19:15:06.7001019+08:00||;True|2025-12-01T17:10:38.9739466+08:00||;False|2025-12-01T17:10:18.8928139+08:00||;True|2025-12-01T17:03:59.3171589+08:00||;True|2025-12-01T17:03:12.5681656+08:00||;True|2025-12-01T16:42:51.4415025+08:00||;True|2025-12-01T01:29:59.6975567+08:00||;True|2025-12-01T01:29:45.1898652+08:00||;False|2025-12-01T01:29:33.1787721+08:00||;True|2025-12-01T01:27:33.1297605+08:00||;True|2025-12-01T01:27:27.3976862+08:00||;False|2025-12-01T01:27:20.5193052+08:00||;True|2025-12-01T01:11:11.0210582+08:00||;True|2025-12-01T01:04:04.3307782+08:00||;True|2025-12-01T00:55:49.8018864+08:00||;True|2025-12-01T00:27:25.1323561+08:00||;True|2025-11-30T23:58:20.7284116+08:00||;True|2025-11-30T23:57:58.3027622+08:00||;True|2025-11-30T23:57:43.0829614+08:00||;False|2025-11-30T23:57:33.5606716+08:00||;True|2025-11-30T23:54:29.6203368+08:00||;True|2025-11-30T23:54:27.5383120+08:00||;False|2025-11-30T23:54:17.0823982+08:00||; diff --git a/app/src/pages/set/AppSet.vue b/app/src/pages/set/AppSet.vue index a70ef5b..bc0a164 100644 --- a/app/src/pages/set/AppSet.vue +++ b/app/src/pages/set/AppSet.vue @@ -1,23 +1,24 @@ \ No newline at end of file diff --git a/app/src/store/coreapi.ts b/app/src/store/coreapi.ts index ed71a8c..52b247a 100644 --- a/app/src/store/coreapi.ts +++ b/app/src/store/coreapi.ts @@ -220,7 +220,25 @@ export const useApiStore = defineStore('coreapi', () => { }); } + //导出配置 + async function ExportConf() { + return http.request>('/api/config/exportConf', 'get').then(r => { + return r.data; + }).finally(() => { + + }); + } + //导入配置 + async function ImportConf(param: object) { + return http.request>('/api/config/importConf', 'post_json', param).then(r => { + return r.data; + }).finally(() => { + + }); + } return { + ExportConf, + ImportConf, GetDeleteViedos, DelFollow, AddFollow, diff --git a/appsettings.json b/appsettings.json index adcf3b9..97796ea 100644 --- a/appsettings.json +++ b/appsettings.json @@ -1,7 +1,7 @@ { "dbconn": "", - //"tagName": "arm_1.8.4", - //"tagName": "dev_1.2.4", - "tagName": "beta_1.8.4", + //"tagName": "arm_1.8.5", + //"tagName": "dev_1.8.5", + "tagName": "beta_1.8.5", "dbtype": "Sqlite" } \ No newline at end of file diff --git a/dto/AppConfigImportDto.cs b/dto/AppConfigImportDto.cs new file mode 100644 index 0000000..faacab5 --- /dev/null +++ b/dto/AppConfigImportDto.cs @@ -0,0 +1,12 @@ +using dy.net.model; + +namespace dy.net.dto +{ + public class AppConfigImportDto + { + + public List follows { get; set; } + + public AppConfig conf { get; set; } + } +} diff --git a/service/DouyinCommonService.cs b/service/DouyinCommonService.cs index 9404676..fb61947 100644 --- a/service/DouyinCommonService.cs +++ b/service/DouyinCommonService.cs @@ -47,7 +47,7 @@ namespace dy.net.service Id = IdGener.GetLong().ToString(), Cron = 30, BatchCount = 18, - LogKeepDay = 10, + LogKeepDay = 7, UperSaveTogether = false,//博主视频:true-->每个视频单独一个文件夹 false-->所有视频放在同一个文件夹 UperUseViedoTitle = false,//博主视频:true-->使用视频标题作为文件名 false-->使用视频id作为文件名 DownImageVideo = true,//默认下载图文视频 diff --git a/service/DouyinFollowService.cs b/service/DouyinFollowService.cs index 64935e0..d669752 100644 --- a/service/DouyinFollowService.cs +++ b/service/DouyinFollowService.cs @@ -51,6 +51,57 @@ namespace dy.net.service { return await _followRepository.GetPagedAsync(dto); } + + /// + /// 获取所有手动添加的非关注者 + /// + /// + public async Task> GetHandFollows() + { + return await _followRepository.GetListAsync(x=>x.IsNoFollowed); + } + /// + /// 导入非关注 + /// + /// + /// + public async Task AddHandFollows(List douyinFolloweds) + { + if (douyinFolloweds == null || !douyinFolloweds.Any()) return false; + + var ids = douyinFolloweds.Select(x => x.Id).Distinct().ToList(); + var existingFolloweds = await _followRepository.GetListAsync(x => ids.Contains(x.Id)); + + var toAddList = douyinFolloweds + .Where(x => !existingFolloweds.Any(e => e.Id == x.Id)) + .ToList(); + + // 批量更新:先整理需要更新的实体 + var toUpdateEntities = new List(); + foreach (var updateItem in douyinFolloweds) + { + var existingItem = existingFolloweds.FirstOrDefault(e => e.Id == updateItem.Id); + if (existingItem != null) + { + toUpdateEntities.Add(updateItem); + } + } + + int operateCount = 0; + // 批量新增 + if (toAddList.Any()) + { + operateCount += await _followRepository.InsertRangeAsync(toAddList); + } + // 批量更新 + if (toUpdateEntities.Any()) + { + await _followRepository.UpdateRangeAsync(toUpdateEntities); + operateCount += toUpdateEntities.Count; + } + + return operateCount > 0; + } /// /// ///