125 lines
5.8 KiB
C#
125 lines
5.8 KiB
C#
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<MainHostedService> 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<string, TableInfo>
|
|
{
|
|
{"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<string, TableInfo>
|
|
{
|
|
{"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();
|
|
}
|
|
|
|
|
|
} |