using Hangfire; using Microsoft.AspNetCore.Mvc; //using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; using System.IO; using System.Threading.Tasks; using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; namespace TaskManager.Controllers { //[ApiController] //[Route("[controller]")] public class TaskConifgureController :ControllerBase { private readonly JobDbContext _context; private readonly IServiceProvider _builder; private readonly IConfiguration _configuration; public TaskConifgureController(JobDbContext context, IServiceProvider builder, IConfiguration configuration) { _builder = builder; _context = context; _configuration = configuration; } /// /// 请除所有任务 /// /// [HttpPost(Name = "ClearAllTask")] public async Task ClearAllTask() { var tasks = await _context.TaskConifgure.ToListAsync(); foreach (var item in tasks) { RecurringJob.RemoveIfExists(item.TaskName); } } /// /// 执行铁定任务 /// /// /// [HttpPost(Name = "ExecuteTask")] public async Task ExecuteTask(string taskName) { var first=await _context.TaskConifgure.FirstOrDefaultAsync(p => p.TaskName == taskName); var url = first.Url; var path = first.Api; var controller = _builder.GetRequiredService(); await controller.ExecuteAsync(url,path, taskName); } /// /// 执行铁定任务 /// /// /// [HttpGet(Name = "testTask")] public async Task testTask(string taskName) { var first = await _context.TaskConifgure.FirstOrDefaultAsync(p => p.TaskName == taskName); var url = first.Url; var path = first.Api; var controller = _builder.GetRequiredService(); await controller.TestAsync(url, path, taskName,"2025-04-21"); } public async Task RefreshTaskConfig() { // 从数据库加载所有任务配置 var tasks = _context.TaskConifgure.Where(p => p.IsAuto == true && !string.IsNullOrEmpty(p.Corn) && !string.IsNullOrEmpty(p.Api) && !string.IsNullOrEmpty(p.Url)).ToList(); var delTasks = _context.TaskConifgure.Where(p => p.IsAuto == false || string.IsNullOrEmpty(p.Corn) || string.IsNullOrEmpty(p.Api) || string.IsNullOrEmpty(p.Url) ).ToList(); foreach (var task in tasks) { var url = task.Url; var path = task.Api; switch (task.TaskName) { //case "来料检验数据": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url,path,task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "排产数据": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "供应商基础信息": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "人员资质信息": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "BOM主数据": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "过程控制项质量数据": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "生产过程数据": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "产品一次合格率": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "工位一次合格率": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "缺陷业务数据": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "环境业务数据": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "设备OEE达成率": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "OEE时间明细": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "物料主数据": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "工艺装备": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; //case "工艺": // RecurringJob.AddOrUpdate( // task.TaskName, // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), // task.Corn, // TimeZoneInfo.Local // ); // break; case "整车月度生产计划1": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "M+6月物料需求计划1": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "整车月度生产计划2": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "M+6月物料需求计划2": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "日物料需求计划": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "计划协议": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "采购订单": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "过焊装未过总装": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "过涂装未过总装": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "排序供货": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "看板配送单": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "退货单": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "奇瑞RDC共享库存": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "日MRP状态监控": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "日MRP预警推移": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "M+6月物料需求计划风险确认": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "日物料需求计划风险确认": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "采购订单风险确认": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "供应商共享库存-上午": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; case "供应商共享库存-晚上": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName), task.Corn, TimeZoneInfo.Local ); break; } } foreach (var task in delTasks) { switch (task.TaskName) { case "来料检验数据": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "排产数据": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "供应商基础信息": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "人员资质信息": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "BOM主数据": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "过程控制项质量数据": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "生产过程数据": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "产品一次合格率": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "工位一次合格率": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "缺陷业务数据": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "环境业务数据": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "设备OEE达成率": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "OEE时间明细": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "物料主数据": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "工艺装备": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "工艺": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "整车月度生产计划1": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "M+6月物料需求计划1": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "整车月度生产计划2": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "M+6月物料需求计划2": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "日物料需求计划": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "计划协议": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "采购订单": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "过焊装未过总装": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "过涂装未过总装": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "排序供货": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "看板配送单": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "退货单": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "奇瑞RDC共享库存": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "日MRP状态监控": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "日MRP预警推移": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "M+6月物料需求计划风险确认": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "日物料需求计划风险确认": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "采购订单风险确认": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "供应商共享库存-上午": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; case "供应商共享库存-晚上": // 移除指定的定时任务 RecurringJob.RemoveIfExists(task.TaskName); break; } } } // 使用 Hangfire 注册定时任务 // Console.WriteLine($"已注册定时任务: {task.TaskName}, Cron: {task.Corn}"); } }