using ConsoleApp2.HostedServices.Abstractions; using ConsoleApp2.Options; using ConsoleApp2.Services; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace ConsoleApp2.HostedServices; public class MainHostedService : IHostedService { private readonly ILogger _logger; private readonly IInputService _input; private readonly ITransformService _transform; private readonly IOutputService _output; private readonly ProcessContext _context; private readonly Timer? _bigTableTimer=null; private readonly Timer? _smallTableTimer=null; public MainHostedService(ILogger logger, IInputService input, ITransformService transform, IOutputService output, ProcessContext context) { _logger = logger; _input = input; _transform = transform; _output = output; _context = context; } public Task StartAsync(CancellationToken cancellationToken) { var taskFun = (TasksOptions taskOp, DataRecordQueue producerQueue, DataRecordQueue consumerQueue, ProcessContext context,Timer? timer) => { Task.Factory.StartNew(async () => { try { await _input.ExecuteAsync(taskOp, producerQueue, context, cancellationToken); } catch (Exception ex) { _context.AddException(ex); _logger.LogError("Exception occurred on inputService:{Message},{StackTrace}", ex.Message, ex.StackTrace); } }); Task.Factory.StartNew(async () => { try { await _transform.ExecuteAsync(taskOp, producerQueue, consumerQueue, context, cancellationToken); } catch (Exception ex) { _context.AddException(ex); _logger.LogError("Exception occurred on transformService:{Message},{StackTrace}", ex.Message, ex.StackTrace); } }); Task.Factory.StartNew(() => { try { timer = new Timer((object? state) => { _output.ExecuteAsync(taskOp, consumerQueue, context, cancellationToken); },null, TimeSpan.Zero,TimeSpan.FromSeconds(0.5)); } catch (Exception ex) { _context.AddException(ex); _logger.LogError("Exception occurred on outputService:{Message},{StackTrace}", ex.Message, ex.StackTrace); } }); }; var bigTablesDic = new Dictionary { {"order",new TableInfo{SimulaRowCount=5019216 }}, {"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 = 20000, OutPutTaskCount = 2 } }; taskFun(bigTableOptions, new DataRecordQueue(), new DataRecordQueue(), bigTableContext,_bigTableTimer); var smallTablesDic = new Dictionary { {"machine",new TableInfo{SimulaRowCount=14655 }}, {"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,_smallTableTimer); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { throw new NotImplementedException(); } }