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.
880 lines
37 KiB
880 lines
37 KiB
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 Microsoft.VisualBasic;
|
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;
|
|
using SqlSugar;
|
|
using System;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Linq.Expressions;
|
|
using System.Security.Policy;
|
|
using System.Threading.Tasks;
|
|
using TaskManager.Controllers;
|
|
using TaskManager.Entity;
|
|
using TaskManager.EntityFramework;
|
|
using TaskManager.EntityFramework.Repository;
|
|
using Wood.Service.Controllers;
|
|
|
|
namespace TaskManager.Controllers
|
|
{
|
|
//[ApiController]
|
|
//[Route("[controller]")]
|
|
/// <summary>
|
|
/// 定时任务设置服务
|
|
/// </summary>
|
|
[AllowAnonymous]
|
|
public class TaskConifgureController :NormalBaseController<TaskConifgure>
|
|
{
|
|
public TaskConifgureController(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<TaskConifgure> repository) : base(context, builder, configuration, repository)
|
|
{
|
|
}
|
|
|
|
|
|
/// <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>
|
|
[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 pagesize = first.PageSize;
|
|
var controller = _builder.GetRequiredService<SupplierProPlaningService>();
|
|
|
|
await controller.ExecuteAsync(url, path, taskName,client,pagesize);
|
|
|
|
|
|
}
|
|
|
|
|
|
[HttpGet]
|
|
public virtual async Task<IActionResult> CustomInvokeAsync(string taskName, string client)
|
|
{
|
|
|
|
|
|
|
|
var taskcount = _context.TaskSub.Count(p => p.TaskName == taskName && p.WriteState == false);
|
|
if (taskcount>0)
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
code = 400,
|
|
message = "请勿重复执行任务,或上次提交任务发生错误未完成"
|
|
});
|
|
}
|
|
var taskfirst=_context.TaskConifgure.FirstOrDefault(p => p.TaskName == taskName && p.Client == client);
|
|
if (taskfirst == null || taskfirst.IsAuto == true)
|
|
{
|
|
return new JsonResult(new
|
|
{
|
|
code = 400,
|
|
message = $"任务设置为自动执行或接口设置表不在{taskName}设置"
|
|
});
|
|
|
|
}
|
|
|
|
TaskSub sub = new TaskSub();
|
|
sub.Subscriber = "Cherry";
|
|
var taskId = Guid.NewGuid();
|
|
var task = new TaskSub();
|
|
task.TaskId = taskId;
|
|
task.TaskName = taskfirst.TaskName+"_手工执行";
|
|
task.Subscriber = "Chery";
|
|
task.TableName =taskfirst.TableName;
|
|
task.DataCount = 1;
|
|
task.Domain = "安通林";
|
|
task.Site = "安通林";
|
|
task.FailedCount = 0;
|
|
task.CreateTime = DateTime.Now;
|
|
task.CreateUser = "admin";
|
|
task.CreationTime = DateTime.Now;
|
|
task.SyncedPageCount = 0;
|
|
task.ReadState = true;
|
|
|
|
_context.TaskSub.Add(task);
|
|
_context.SaveChanges();
|
|
await Task.Delay(TimeSpan.FromSeconds(2));
|
|
|
|
|
|
switch (taskName)
|
|
{
|
|
case "来料检验数据":
|
|
BackgroundJob.Schedule<SupplierProMaterialStockService>(
|
|
//"materialstock",
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "排产数据":
|
|
BackgroundJob.Schedule<CherySupplierProSchedulingService>(
|
|
//"scheduling",
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "供应商基础信息":
|
|
BackgroundJob.Schedule<CherySupplierInfoService>(
|
|
//"info",
|
|
x => x.CustomInvokeAsync(taskName, client),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "人员资质信息":
|
|
BackgroundJob.Schedule<CherySupplierEmployeeService>(
|
|
//"employee",
|
|
x => x.CustomInvokeAsync(taskName, client),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "BOM主数据":
|
|
BackgroundJob.Schedule<CherySupplierBomService>(
|
|
//"bom",
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "过程控制项质量数据":
|
|
BackgroundJob.Schedule<CherySupplierProCpsService>(
|
|
//"cps",
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "生产过程数据":
|
|
BackgroundJob.Schedule<CherySupplierProDataService>(
|
|
//"data",
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "产品一次合格率":
|
|
BackgroundJob.Schedule<CherySupplierProFirstPassyieldService>(
|
|
// "firstpassyield",
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "工位一次合格率":
|
|
BackgroundJob.Schedule<CherySupplierProStationFirstPassyieldService>(
|
|
//"stationfirstpassyield",
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "缺陷业务数据":
|
|
BackgroundJob.Schedule<CherySupplierProFlawService>(
|
|
//"flaw",
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "环境业务数据":
|
|
BackgroundJob.Schedule<CherySupplierProEnvironmentService>(
|
|
//"environment",
|
|
x => x.CustomInvokeAsync(taskName, client),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "设备OEE达成率":
|
|
BackgroundJob.Schedule<CherySupplierProOeeAchievementRateService>(
|
|
//"oeeachievementrate",
|
|
x => x.CustomInvokeAsync(taskName, client),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "OEE时间明细":
|
|
BackgroundJob.Schedule<CherySupplierProOeeTimeDetailsService>(
|
|
//"oeetimedetails",
|
|
x => x.CustomInvokeAsync(taskName, client),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "物料主数据":
|
|
BackgroundJob.Schedule<CherySupplierProMaterialDataService>(
|
|
//"maaterialdata", // 注意:这里可能存在拼写错误,原始代码中也有
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "附件类数据":
|
|
BackgroundJob.Schedule<CherySupplierProAttachmentDataService>(
|
|
// "attachmentdata",
|
|
x => x.CustomInvokeAsync(taskName, client),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "工艺装备":
|
|
BackgroundJob.Schedule<CherySupplierProProcessEquipmentService>(
|
|
//"processequipment",
|
|
x => x.CustomInvokeAsync(taskName, client),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
case "工艺":
|
|
BackgroundJob.Schedule<CherySupplierProProcessService>(
|
|
// "process",
|
|
x => x.CustomInvokeAsync(taskName, client, taskId),
|
|
TimeSpan.FromSeconds(10)
|
|
);
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return new JsonResult(new
|
|
{
|
|
code = 200,
|
|
message = "创建任务成功!"
|
|
});
|
|
|
|
|
|
|
|
//await SyncTaskSubTable(TaskName, Client);
|
|
}
|
|
|
|
|
|
/// <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(new { Code = 200, Message = $"{task.TaskName}设置为自动执行!" }); ;
|
|
//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(new { Code = 200, Message = $"{task.TaskName}设置为手动执行!" }); ;
|
|
//return new JsonResult("200", $"{task.TaskName}设置为手动执行!");
|
|
|
|
}
|
|
}
|
|
catch (Exception ex) {
|
|
|
|
return new JsonResult(new { Code = 400, Message = $"执行报错!" }); ;
|
|
// return new JsonResult("200", $"执行报错!");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 刷新任务
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task RefreshTaskConfig()
|
|
{
|
|
|
|
|
|
//RecurringJob.AddOrUpdate<LogBackgroundService>(
|
|
// "日志定时任务",
|
|
// x => x.ExecuteAsync(),
|
|
// "*/10 * * * * *",
|
|
// TimeZoneInfo.Local
|
|
// );
|
|
|
|
// 从数据库加载所有任务配置
|
|
|
|
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)
|
|
{
|
|
await AddOrUpdateTask(task);
|
|
|
|
|
|
|
|
}
|
|
foreach (var task in delTasks)
|
|
{
|
|
|
|
await RemoveTask(task);
|
|
}
|
|
|
|
}
|
|
private async Task AddOrUpdateTask(TaskConifgure task)
|
|
{
|
|
|
|
var url = task.Url;
|
|
var path = task.Api;
|
|
var client = task.Client;
|
|
var pagesize = task.PageSize;
|
|
|
|
switch (task.TaskName)
|
|
{
|
|
case "来料检验数据":
|
|
RecurringJob.AddOrUpdate<SupplierProMaterialStockService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "排产数据":
|
|
RecurringJob.AddOrUpdate<CherySupplierProSchedulingService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "供应商基础信息":
|
|
RecurringJob.AddOrUpdate<CherySupplierInfoService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "人员资质信息":
|
|
RecurringJob.AddOrUpdate<CherySupplierEmployeeService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "BOM主数据":
|
|
RecurringJob.AddOrUpdate<CherySupplierBomService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "过程控制项质量数据":
|
|
RecurringJob.AddOrUpdate<CherySupplierProCpsService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "生产过程数据":
|
|
RecurringJob.AddOrUpdate<CherySupplierProDataService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "产品一次合格率":
|
|
RecurringJob.AddOrUpdate<CherySupplierProFirstPassyieldService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "工位一次合格率":
|
|
RecurringJob.AddOrUpdate<CherySupplierProStationFirstPassyieldService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "缺陷业务数据":
|
|
RecurringJob.AddOrUpdate<CherySupplierProFlawService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "环境业务数据":
|
|
RecurringJob.AddOrUpdate<CherySupplierProEnvironmentService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "设备OEE达成率":
|
|
RecurringJob.AddOrUpdate<CherySupplierProOeeAchievementRateService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "OEE时间明细":
|
|
RecurringJob.AddOrUpdate<CherySupplierProOeeTimeDetailsService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "物料主数据":
|
|
RecurringJob.AddOrUpdate<CherySupplierProMaterialDataService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "附件类数据":
|
|
RecurringJob.AddOrUpdate<CherySupplierProAttachmentDataService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "工艺装备":
|
|
RecurringJob.AddOrUpdate<CherySupplierProProcessEquipmentService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "工艺":
|
|
RecurringJob.AddOrUpdate<CherySupplierProProcessService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
|
|
case "整车月度生产计划1":
|
|
RecurringJob.AddOrUpdate<SupplierProPlaningService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "M+6月物料需求计划1":
|
|
RecurringJob.AddOrUpdate<CherySupplierMrpMonthService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "整车月度生产计划2":
|
|
RecurringJob.AddOrUpdate<SupplierProPlaningService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "M+6月物料需求计划2":
|
|
RecurringJob.AddOrUpdate<CherySupplierMrpMonthService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "日物料需求计划":
|
|
RecurringJob.AddOrUpdate<CherySupplierMrpDataService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "计划协议":
|
|
RecurringJob.AddOrUpdate<CherySupplierSaWeekService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "采购订单":
|
|
RecurringJob.AddOrUpdate<CherySupplierPoService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "过焊装未过总装":
|
|
RecurringJob.AddOrUpdate<CherySupplierPorHSCHEDULService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "过涂装未过总装":
|
|
RecurringJob.AddOrUpdate<CherySupplierProTSCHEDULService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
// new RecurringJobOptions() { MisfireHandling = MisfireHandlingOptions.FireOnce}
|
|
);
|
|
break;
|
|
case "排序供货":
|
|
RecurringJob.AddOrUpdate<CherySupplierProCSCHEDULService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "看板配送单":
|
|
RecurringJob.AddOrUpdate<CherySupplierDelStateService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "退货单":
|
|
RecurringJob.AddOrUpdate<CherySupplierReturnService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "奇瑞RDC共享库存":
|
|
RecurringJob.AddOrUpdate<SupplierInvDataService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "日MRP状态监控":
|
|
RecurringJob.AddOrUpdate<CherySupplierMrpDataService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "日MRP预警推移":
|
|
RecurringJob.AddOrUpdate<CherySupplierMrpWarningService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "M+6月物料需求计划风险确认":
|
|
RecurringJob.AddOrUpdate<CherySupplierConMmrpService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "日物料需求计划风险确认":
|
|
RecurringJob.AddOrUpdate<CherySupplierConDateService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "采购订单风险确认":
|
|
RecurringJob.AddOrUpdate<CherySupplierConPoService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "供应商共享库存-上午":
|
|
|
|
RecurringJob.AddOrUpdate<CherySupplierSinvDataService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
case "供应商共享库存-晚上":
|
|
RecurringJob.AddOrUpdate<CherySupplierSinvDataService>(
|
|
task.TaskName,
|
|
x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client,pagesize),
|
|
task.Corn,
|
|
TimeZoneInfo.Local
|
|
);
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
private async Task RemoveTask(TaskConifgure task)
|
|
{
|
|
|
|
|
|
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<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 };
|
|
}
|
|
|
|
|
|
|
|
|
|
// 使用 Hangfire 注册定时任务
|
|
// Console.WriteLine($"已注册定时任务: {task.TaskName}, Cron: {task.Corn}");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|