using Azure.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Furion.Schedule; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; namespace FlexJobApi.Core { public class ResourceHttpJob( IRepository rep, ResourceHttpUtils resourceHttpUtils ) : IJob { private readonly IRepository rep = rep; private readonly ResourceHttpUtils resourceHttpUtils = resourceHttpUtils; public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { var jobDetail = context.JobDetail; // 解析 HTTP 请求参数,键名称为类名 var command = Schedular.Deserialize(jobDetail.GetProperty(nameof(ResourceHttpJob))); var resource = await rep .Where(it => it.Id == command.ResourceId) .Select(it => new Resource { ServiceName = it.ServiceName, Route = it.Route, Method = it.Method }) .FirstOrDefaultAsync(); if (resource == null) throw Oops.Oh(EnumErrorCodeType.s404, "该资源"); context.Result = await resourceHttpUtils.SendHttpAsync(resource, command.Body, new SystemUserResourceHttpProvider()); } } }