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 System; using System.IO; using System.Linq.Expressions; using System.Threading.Tasks; using TaskManager.Controllers; using TaskManager.Entity; using TaskManager.EntityFramework; using TaskManager.EntityFramework.Repository; namespace TaskManager.Controllers { //[ApiController] //[Route("[controller]")] [AllowAnonymous] public class TaskConifgureController : ControllerBase { private readonly JobDbContext _context; private readonly IServiceProvider _builder; private readonly IConfiguration _configuration; private readonly IRepository _repository; public TaskConifgureController(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository repository) { _builder = builder; _context = context; _configuration = configuration; _repository = repository; } 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 }; } /// /// 请除所有任务 /// /// [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 controller = _builder.GetRequiredService(); await controller.ExecuteAsync(url, path, taskName); } public async Task Export([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"); } /// /// 执行铁定任务 /// /// /// [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"); } 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; } } } [HttpGet] public async Task>> GetAll() { return await _repository.GetAllAsync() as List; } [HttpGet("{id}")] public async Task> GetById(int id) { var entity = await _repository.GetByIdAsync(id); if (entity == null) return NotFound(); return entity; } [HttpPost] public async Task> Create(TaskConifgure entity) { entity.CreationTime = DateTime.Now; var createdEntity = await _repository.AddAsync(entity); return new JsonResult(new { Code = 200, Message = "创建成功!" }); } [HttpPut("{id}")] public async Task Update(TaskConifgure entity) { var _first = await _repository.GetByIdAsync(entity.UId); if (_first == null) { return new JsonResult(new { Code = 400, Message = "修改失败!" }); } await _repository.UpdateAsync(entity); return new JsonResult(new { Code = 200, Message = "修改成功!" }); } [HttpDelete("{id}")] public async Task Delete(int id) { await _repository.DeleteAsync(id); return new JsonResult(new { Code = 200, Message = "删除成功!" }); ; } [HttpGet] public async Task>> GetPaged( [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(filter, pagingParams); return Ok(pagedResult); } // 使用 Hangfire 注册定时任务 // Console.WriteLine($"已注册定时任务: {task.TaskName}, Cron: {task.Corn}"); } }