You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

690 lines
29 KiB

2 weeks ago
using System;
using System.Data;
using System.IO;
using System.Linq.Expressions;
using System.Security.Policy;
using System.Threading.Tasks;
using Hangfire;
3 weeks ago
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Authorization;
3 weeks ago
using Microsoft.AspNetCore.Mvc;
//using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
6 days ago
using Microsoft.VisualBasic;
3 weeks ago
using TaskManager.Controllers;
using TaskManager.Entity;
using TaskManager.EntityFramework;
3 weeks ago
using TaskManager.EntityFramework.Repository;
2 weeks ago
using Wood.Service.Controllers;
3 weeks ago
namespace TaskManager.Controllers
{
//[ApiController]
//[Route("[controller]")]
1 week ago
/// <summary>
1 week ago
/// 定时任务设置服务
1 week ago
/// </summary>
3 weeks ago
[AllowAnonymous]
2 weeks ago
public class TaskConifgureController :NormalBaseController<TaskConifgure>
3 weeks ago
{
2 weeks ago
public TaskConifgureController(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<TaskConifgure> repository) : base(context, builder, configuration, repository)
3 weeks ago
{
}
3 weeks ago
2 weeks ago
3 weeks ago
/// <summary>
/// 请除所有任务
/// </summary>
/// <returns></returns>
[HttpPost(Name = "ClearAllTask")]
public async Task ClearAllTask()
{
var tasks = await _context.TaskConifgure.ToListAsync();
foreach (var item in tasks)
{
RecurringJob.RemoveIfExists(item.TaskName);
}
}
/// <summary>
/// 执行铁定任务
/// </summary>
/// <param name="taskName"></param>
/// <returns></returns>
3 weeks ago
[NonAction]
3 weeks ago
public async Task ExecuteTask(string taskName)
{
3 weeks ago
var first = await _context.TaskConifgure.FirstOrDefaultAsync(p => p.TaskName == taskName);
3 weeks ago
var url = first.Url;
var path = first.Api;
2 weeks ago
var client = first.Client;
5 days ago
var pagesize = first.PageSize;
3 weeks ago
var controller = _builder.GetRequiredService<SupplierProPlaningService>();
5 days ago
await controller.ExecuteAsync(url, path, taskName,client,pagesize);
3 weeks ago
3 weeks ago
}
4 days ago
3 weeks ago
6 days ago
/// <summary>
/// 设置任务是否自动执行
/// </summary>
[HttpGet]
public async Task<ActionResult> SetIsAuto(long uid, bool isauto)
{
try
{
var task = _context.TaskConifgure.FirstOrDefault(p => p.UId == uid);
if (isauto == true)
{
task.IsAuto = true;
var url = task.Url;
var path = task.Api;
var client = task.Client;
await AddOrUpdateTask(task);
int result=_context.SaveChanges();
return new JsonResult("200", $"{task.TaskName}设置为自动执行!");
}
else
{
task.IsAuto = false;
var url = task.Url;
var path = task.Api;
var client = task.Client;
await RemoveTask(task);
int result = _context.SaveChanges();
return new JsonResult("200", $"{task.TaskName}设置为手动执行!");
}
}
catch (Exception ex) {
return new JsonResult("200", $"执行报错!");
}
}
3 weeks ago
3 weeks ago
/// <summary>
/// 刷新任务
/// </summary>
/// <returns></returns>
3 weeks ago
public async Task RefreshTaskConfig()
{
3 weeks ago
4 days ago
//RecurringJob.AddOrUpdate<LogBackgroundService>(
// "日志定时任务",
// x => x.ExecuteAsync(),
// "*/10 * * * * *",
// TimeZoneInfo.Local
// );
3 weeks ago
// 从数据库加载所有任务配置
var tasks = _context.TaskConifgure.Where(p => p.IsAuto == true && !string.IsNullOrEmpty(p.Corn)
&& !string.IsNullOrEmpty(p.Api) && !string.IsNullOrEmpty(p.Url)).ToList();
3 weeks ago
var delTasks = _context.TaskConifgure.Where(p => p.IsAuto == false || string.IsNullOrEmpty(p.Corn)
3 weeks ago
|| string.IsNullOrEmpty(p.Api) || string.IsNullOrEmpty(p.Url)
).ToList();
foreach (var task in tasks)
{
6 days ago
await AddOrUpdateTask(task);
}
foreach (var task in delTasks)
{
await RemoveTask(task);
}
}
private async Task AddOrUpdateTask(TaskConifgure task)
{
3 weeks ago
var url = task.Url;
var path = task.Api;
2 weeks ago
var client = task.Client;
5 days ago
var pagesize = task.PageSize;
3 weeks ago
switch (task.TaskName)
{
case "来料检验数据":
RecurringJob.AddOrUpdate<SupplierProMaterialStockService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "排产数据":
RecurringJob.AddOrUpdate<CherySupplierProSchedulingService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "供应商基础信息":
RecurringJob.AddOrUpdate<CherySupplierInfoService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "人员资质信息":
RecurringJob.AddOrUpdate<CherySupplierEmployeeService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "BOM主数据":
RecurringJob.AddOrUpdate<CherySupplierBomService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "过程控制项质量数据":
RecurringJob.AddOrUpdate<CherySupplierProCpsService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "生产过程数据":
RecurringJob.AddOrUpdate<CherySupplierProDataService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "产品一次合格率":
RecurringJob.AddOrUpdate<CherySupplierProFirstPassyieldService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "工位一次合格率":
RecurringJob.AddOrUpdate<CherySupplierProStationFirstPassyieldService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "缺陷业务数据":
RecurringJob.AddOrUpdate<CherySupplierProFlawService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "环境业务数据":
RecurringJob.AddOrUpdate<CherySupplierProEnvironmentService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "设备OEE达成率":
RecurringJob.AddOrUpdate<CherySupplierProOeeAchievementRateService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "OEE时间明细":
RecurringJob.AddOrUpdate<CherySupplierProOeeTimeDetailsService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "物料主数据":
RecurringJob.AddOrUpdate<CherySupplierProMaterialDataService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "附件类数据":
RecurringJob.AddOrUpdate<CherySupplierProAttachmentDataService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "工艺装备":
RecurringJob.AddOrUpdate<CherySupplierProProcessEquipmentService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
case "工艺":
RecurringJob.AddOrUpdate<CherySupplierProProcessService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
task.Corn,
TimeZoneInfo.Local
);
break;
3 weeks ago
case "整车月度生产计划1":
RecurringJob.AddOrUpdate<SupplierProPlaningService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "M+6月物料需求计划1":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierMrpMonthService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "整车月度生产计划2":
RecurringJob.AddOrUpdate<SupplierProPlaningService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "M+6月物料需求计划2":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierMrpMonthService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "日物料需求计划":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierMrpDataService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "计划协议":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierSaWeekService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "采购订单":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierPoService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "过焊装未过总装":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierPorHSCHEDULService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "过涂装未过总装":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierProTSCHEDULService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "排序供货":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierProCSCHEDULService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "看板配送单":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierDelStateService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "退货单":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierReturnService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "奇瑞RDC共享库存":
RecurringJob.AddOrUpdate<SupplierInvDataService>(
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "日MRP状态监控":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierMrpDataService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "日MRP预警推移":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierMrpWarningService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "M+6月物料需求计划风险确认":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierConMmrpService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "日物料需求计划风险确认":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierConDateService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "采购订单风险确认":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierConPoService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "供应商共享库存-上午":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierSinvDataService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
case "供应商共享库存-晚上":
2 weeks ago
RecurringJob.AddOrUpdate<CherySupplierSinvDataService>(
3 weeks ago
task.TaskName,
5 days ago
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
3 weeks ago
task.Corn,
TimeZoneInfo.Local
);
break;
}
6 days ago
}
private async Task RemoveTask(TaskConifgure task)
{
3 weeks ago
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;
3 weeks ago
3 weeks ago
}
6 days ago
3 weeks ago
}
3 weeks ago
2 weeks ago
6 days ago
2 weeks ago
[HttpGet]
public async Task<FileStreamResult> Exportextend([FromQuery] int pageNumber = 1,
[FromQuery] int pageSize = 10,
[FromQuery] string sortBy = "",
[FromQuery] bool isAscending = true,
[FromQuery] Dictionary<string, string> filters = null)
{
var pagingParams = new PagingParams
{
PageNumber = pageNumber,
PageSize = pageSize,
SortBy = sortBy,
IsAscending = isAscending,
Filters = filters
};
// 可以在这里构建表达式树过滤条件
//Expression<Func<T, bool>> filter = null;
var pagedResult = await _repository.GetPagedAsync(null, pagingParams);
return await ExportFile(pagedResult.Data, Guid.NewGuid().ToString() + ".xlsx");
}
protected async Task<FileStreamResult> ExportFile<T>(ICollection<T> dtos, string fileName) where T : class, new()
{
var excelExporter = HttpContext.RequestServices.GetRequiredService<IExcelExporter>();
var res = await excelExporter.ExportAsByteArray(dtos);
return new FileStreamResult(new MemoryStream(res), "application/octet-stream") { FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "_" + fileName };
}
3 weeks ago
// 使用 Hangfire 注册定时任务
// Console.WriteLine($"已注册定时任务: {task.TaskName}, Cron: {task.Corn}");
3 weeks ago
}
3 weeks ago
}
3 weeks ago