using HuanMeng.DotNetCore.MultiTenant.Contract; using HuanMeng.DotNetCore.Processors; using HuanMeng.MiaoYu.Code.AppExtend; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http.Headers; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; namespace HuanMeng.MiaoYu.Code.Music { /// /// /// public class MusicService(IServiceProvider serviceProvider) : IHostedService, IDisposable { MusicProcessor? musicProcessor = null; public Task StartAsync(CancellationToken cancellationToken) { musicProcessor = new MusicProcessor(serviceProvider); musicProcessor.Run(); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { if (musicProcessor != null) { musicProcessor.Stop(); musicProcessor.Dispose(); } return Task.CompletedTask; } public void Dispose() { musicProcessor?.Dispose(); } } public class MusicProcessor(IServiceProvider serviceProvider) : ThreadProcessor { protected override async void Proc_Do() { while (true) { foreach (var item in AppConfigurationExtend.AppConfigs.Values) { try { using var service = serviceProvider.CreateScope(); var _serviceProvider = service.ServiceProvider; var temantInfo = _serviceProvider.GetService(); var t = item.ToITenantInfo(); DAO dao = new DAO(_serviceProvider, t); var list = dao.daoDbMiaoYu.context.M_Songs.Where(it => it.State == 0).ToList(); if (list.Count > 0) { var httpFactory = serviceProvider.GetRequiredService(); foreach (var songs in list) { var httpClient = httpFactory.CreateClient(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Add("authorization", "Bearer hk-ylg6c31000042000fef54b80aec96b39e83b36f6e551440b"); var url = $"https://api.openai-hk.com/suno/feed/{songs.SpecialId}"; var response = await httpClient.GetAsync(url); if (response == null || !response.IsSuccessStatusCode) { //throw new Exception("创建音乐失败"); songs.State = -1; dao.daoDbMiaoYu.context.SaveChanges(); continue; } var responseContent = await response.Content.ReadAsStringAsync(); if (string.IsNullOrEmpty(responseContent)) { songs.State = -1; dao.daoDbMiaoYu.context.SaveChanges(); continue; } var obj = JsonConvert.DeserializeObject(responseContent); //status var status = obj?.SelectToken("[0].status")?.ToString(); if (status == "complete") { songs.MusicAddress = obj?.SelectToken("[0].audio_url")?.ToString() ?? ""; songs.CoverImage = obj?.SelectToken("[0].image_url")?.ToString() ?? ""; songs.ImageLargeUrl = obj?.SelectToken("[0].image_large_url")?.ToString() ?? ""; songs.Lyrics = obj?.SelectToken("[0].metadata.prompt")?.ToString() ?? ""; var duration = obj?.SelectToken("[0].metadata.duration")?.ToString() ?? ""; if (!string.IsNullOrEmpty(duration)) { if (decimal.TryParse(duration, out var d)) { songs.Duration = TimeOnly.FromTimeSpan(new TimeSpan(0, 0, (int)d)); } } songs.State = 1; var songInfo = await dao.daoDbMiaoYu.context.M_SongInfo.Where(it => it.Id == songs.SongInfoId).FirstOrDefaultAsync(); if (songInfo != null) { if (songInfo.Status == "正在生成") { songInfo.Status = "已完成"; } } dao.daoDbMiaoYu.context.SaveChanges(); } } } } catch (Exception ex) { } } Thread.Sleep(1000 * 5); } } } }