using System; using System.Data; using System.IO; using System.Linq.Expressions; using System.Security.Policy; using System.Threading.Tasks; using Hangfire; using Magicodes.ExporterAndImporter.Excel; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; //using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; using TaskManager.EntityFramework.Repository; using Wood.Service.Controllers; namespace TaskManager.Controllers { //[ApiController] //[Route("[controller]")] /// /// 任务设置服务 /// [AllowAnonymous] public class TaskConifgureController :NormalBaseController { public TaskConifgureController(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository) : base(context, builder, configuration, repository) { } /// /// 请除所有任务 /// /// [HttpPost(Name = "ClearAllTask")] public async Task ClearAllTask() { var tasks = await _context.TaskConifgure.ToListAsync(); foreach (var item in tasks) { RecurringJob.RemoveIfExists(item.TaskName); } } /// /// 执行铁定任务 /// /// /// [NonAction] 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 client = first.Client; var controller = _builder.GetRequiredService(); await controller.ExecuteAsync(url, path, taskName,client); } /// ///// ///// 执行铁定任务 ///// ///// ///// //[NonAction] //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"); //} //[NonAction] //public async Task TaskAllAsync(string date) //{ // var tasks = _context.TaskConifgure.Where(p => p.IsAuto == true && !string.IsNullOrEmpty(p.Corn) // && !string.IsNullOrEmpty(p.Api) && !string.IsNullOrEmpty(p.Url)).ToList(); // foreach (var task in tasks) // { // try // { // var url = task.Url; // var path = task.Api; // var taskname = task.TaskName; // switch (task.TaskName) // { // //case "整车月度生产计划1": // // // 添加的代码块 // // var controller1 = _builder.GetRequiredService(); // // await controller1.TestAsync(url, path, taskname, "2025-05-29"); // // break; // case "M+6月物料需求计划1": // // 添加的代码块 // var controller2 = _builder.GetRequiredService(); // await controller2.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "整车月度生产计划2": // // 添加的代码块 // var controller3 = _builder.GetRequiredService(); // await controller3.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "M+6月物料需求计划2": // // 添加的代码块 // var controller4 = _builder.GetRequiredService(); // await controller4.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "日物料需求计划": // // 添加的代码块 // var controller5 = _builder.GetRequiredService(); // await controller5.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "计划协议": // // 添加的代码块 // var controller6 = _builder.GetRequiredService(); // await controller6.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "采购订单": // // 添加的代码块 // var controller7 = _builder.GetRequiredService(); // await controller7.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "过焊装未过总装": // // 添加的代码块 // var controller8 = _builder.GetRequiredService(); // await controller8.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "过涂装未过总装": // // 添加的代码块 // var controller9 = _builder.GetRequiredService(); // await controller9.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "排序供货": // // 添加的代码块 // var controller10 = _builder.GetRequiredService(); // await controller10.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "看板配送单": // // 添加的代码块 // var controller11 = _builder.GetRequiredService(); // await controller11.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "退货单": // // 添加的代码块 // var controller12 = _builder.GetRequiredService(); // await controller12.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "奇瑞RDC共享库存": // // 添加的代码块 // var controller13 = _builder.GetRequiredService(); // await controller13.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "日MRP状态监控": // // 添加的代码块 // var controller14 = _builder.GetRequiredService(); // await controller14.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "日MRP预警推移": // // 添加的代码块 // var controller15 = _builder.GetRequiredService(); // await controller15.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "供应商共享库存-上午": // // 添加的代码块 // var controller19 = _builder.GetRequiredService(); // await controller19.TestAsync(url, path, taskname, "2025-05-29"); // break; // case "供应商共享库存-晚上": // // 添加的代码块 // var controller20 = _builder.GetRequiredService(); // await controller20.TestAsync(url, path, taskname, "2025-05-29"); // break; // } // } // catch // { // } // } //} /// /// 刷新任务 /// /// 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; var client = task.Client; 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,client), task.Corn, TimeZoneInfo.Local ); break; case "M+6月物料需求计划1": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "整车月度生产计划2": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "M+6月物料需求计划2": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "日物料需求计划": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "计划协议": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "采购订单": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "过焊装未过总装": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "过涂装未过总装": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "排序供货": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "看板配送单": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "退货单": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "奇瑞RDC共享库存": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "日MRP状态监控": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "日MRP预警推移": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "M+6月物料需求计划风险确认": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "日物料需求计划风险确认": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "采购订单风险确认": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "供应商共享库存-上午": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), task.Corn, TimeZoneInfo.Local ); break; case "供应商共享库存-晚上": RecurringJob.AddOrUpdate( task.TaskName, x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client), 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; } } } [HttpGet] public async Task Exportextend([FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 10, [FromQuery] string sortBy = "", [FromQuery] bool isAscending = true, [FromQuery] Dictionary filters = null) { var pagingParams = new PagingParams { PageNumber = pageNumber, PageSize = pageSize, SortBy = sortBy, IsAscending = isAscending, Filters = filters }; // 可以在这里构建表达式树过滤条件 //Expression> filter = null; var pagedResult = await _repository.GetPagedAsync(null, pagingParams); return await ExportFile(pagedResult.Data, Guid.NewGuid().ToString() + ".xlsx"); } protected async Task ExportFile(ICollection dtos, string fileName) where T : class, new() { var excelExporter = HttpContext.RequestServices.GetRequiredService(); var res = await excelExporter.ExportAsByteArray(dtos); return new FileStreamResult(new MemoryStream(res), "application/octet-stream") { FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "_" + fileName }; } // 使用 Hangfire 注册定时任务 // Console.WriteLine($"已注册定时任务: {task.TaskName}, Cron: {task.Corn}"); } }