using ConsoleApp2.HostedServices.Abstractions; using ConsoleApp2.Options; using ConsoleApp2.Services; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace ConsoleApp2.HostedServices; public class MainHostedService : BackgroundService { private readonly ILogger _logger; private readonly IInputService _input; private readonly ITransformService _transform; private readonly IOutputService _output; private readonly ProcessContext _context; public MainHostedService(ILogger logger, IInputService input, ITransformService transform, IOutputService output, ProcessContext context) { _logger = logger; _input = input; _transform = transform; _output = output; _context = context; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var taskFun = (TasksOptions taskOp, DataRecordQueue producerQueue, DataRecordQueue consumerQueue, ProcessContext context) => { var inputTask = Task.Factory.StartNew(async () => { try { await _input.ExecuteAsync(taskOp, producerQueue, context, stoppingToken); } catch (Exception ex) { _context.AddException(ex); _logger.LogError("Exception occurred on inputService:{Message},{StackTrace}", ex.Message, ex.StackTrace); } }); var transformTask = Task.Factory.StartNew(async () => { try { await _transform.ExecuteAsync(taskOp, producerQueue, consumerQueue, context, stoppingToken); } catch (Exception ex) { _context.AddException(ex); _logger.LogError("Exception occurred on transformService:{Message},{StackTrace}", ex.Message, ex.StackTrace); } }); var outputTask = Task.Factory.StartNew(async () => { try { await _output.ExecuteAsync(taskOp, consumerQueue, context,stoppingToken); } catch (Exception ex) { _context.AddException(ex); _logger.LogError("Exception occurred on outputService:{Message},{StackTrace}", ex.Message, ex.StackTrace); } }); }; var bigTablesDic = new Dictionary { {"order_block_plan",new TableInfo{SimulaRowCount=2725553 }},//CreateTime < 202301的删除 {"order_block_plan_result",new TableInfo{SimulaRowCount=1174096 }}, {"order_box_block",new TableInfo{SimulaRowCount=29755672 }}, {"order_item",new TableInfo{SimulaRowCount=1345520079 }}, {"simple_plan_order",new TableInfo{SimulaRowCount=351470 }},//CreateTime < 202301的删除 }; var bigTableContext = new ProcessContext(); var bigTableOptions = new TasksOptions { TableInfoConfig = bigTablesDic, OutPutOptions = new OutPutOptions { FlushCount = 10000, OutPutTaskCount = 2 } }; //taskFun(bigTableOptions,new DataRecordQueue(), new DataRecordQueue(), bigTableContext); var smallTablesDic = new Dictionary { //{"machine",new TableInfo{SimulaRowCount=14655 }}, //{"order",new TableInfo{SimulaRowCount=5019216 }}, //{"order_data_block",new TableInfo{SimulaRowCount=731800334 }}, //{"order_data_goods",new TableInfo{SimulaRowCount=25803671 }}, //{"order_data_parts",new TableInfo{SimulaRowCount=468517543 }}, //{"order_module",new TableInfo{SimulaRowCount=103325385 }}, //{"order_module_extra",new TableInfo{SimulaRowCount=54361321 }}, //{"order_module_item",new TableInfo{SimulaRowCount=69173339 }}, //{"order_package",new TableInfo{SimulaRowCount=16196195 }}, {"order_process",new TableInfo{SimulaRowCount=3892685 }},//orderNo < 202301的 {"order_process_step",new TableInfo{SimulaRowCount=8050349 }},//orderNo < 202301的删除 {"order_process_step_item",new TableInfo{SimulaRowCount=14538058 }},//orderNo < 202301的删除 //{"order_scrap_board",new TableInfo{SimulaRowCount=123998 }}, //{"process_group",new TableInfo{SimulaRowCount=1253 }}, //{"process_info",new TableInfo{SimulaRowCount=7839 }}, //{"process_item_exp",new TableInfo{SimulaRowCount=28 }}, //{"process_schdule_capacity",new TableInfo{SimulaRowCount=39736 }}, //{"process_step_efficiency",new TableInfo{SimulaRowCount=8 }}, //{"report_template",new TableInfo{SimulaRowCount=7337 }}, //{"simple_package",new TableInfo{SimulaRowCount=130436 }},//orderNo < 202301的删除 //{"sys_config",new TableInfo{SimulaRowCount=2296 }}, //{"work_calendar",new TableInfo{SimulaRowCount=11 }}, //{"work_shift",new TableInfo{SimulaRowCount=59 }}, //{"work_time",new TableInfo{SimulaRowCount=62 }}, }; var smallTableContext = new ProcessContext(); taskFun(new TasksOptions { TableInfoConfig = smallTablesDic, OutPutOptions = new OutPutOptions { FlushCount = 20000, OutPutTaskCount = 4 } }, new DataRecordQueue(), new DataRecordQueue(), smallTableContext); } }