修改
This commit is contained in:
@@ -36,12 +36,16 @@ public class TransformService : ITransformService
|
||||
public async Task ExecuteAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation("***** Data transform service started, thread id: {ThreadId} *****", Environment.CurrentManagedThreadId);
|
||||
while (!_context.IsInputCompleted || _producerQueue.Count > 0)
|
||||
while ((!_context.IsInputCompleted || _producerQueue.Count > 0))
|
||||
{
|
||||
if (_context.GetExceptions().Count > 0)
|
||||
{
|
||||
_logger.LogInformation("***** Csv transform service is canceled *****");
|
||||
return;
|
||||
}
|
||||
// var dbOptions = _options.Value.DatabaseFilter(record);
|
||||
if (!_producerQueue.TryDequeue(out var record)) continue;
|
||||
record.Database = _options.Value.DatabaseFilter?.Invoke(record);
|
||||
|
||||
|
||||
for (var i = 0; i < record.Fields.Length; i++)
|
||||
{
|
||||
var field = record[i];
|
||||
@@ -56,20 +60,41 @@ public class TransformService : ITransformService
|
||||
|
||||
switch (_options.Value.GetColumnType(record.TableName, record.Headers[i]))
|
||||
{
|
||||
case ColumnType.Blob or ColumnType.Text:
|
||||
field = string.IsNullOrEmpty(field) ? "''" : $"0x{field}";
|
||||
case ColumnType.Text:
|
||||
|
||||
field = string.IsNullOrEmpty(field) ? "''" : _options.Value.TransformBinary?.Invoke(field) ?? field; ;
|
||||
break;
|
||||
case ColumnType.Blob:
|
||||
field = string.IsNullOrEmpty(field) ? "NULL" : $"0x{field}";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Escape:
|
||||
Escape:
|
||||
record[i] = field;
|
||||
}
|
||||
|
||||
// TODO: 数据处理/过滤/复制
|
||||
|
||||
//过滤不要的record
|
||||
if (_options.Value.RecordFilter?.Invoke(record) == false) continue;
|
||||
record.Database = _options.Value.DatabaseFilter?.Invoke(record);
|
||||
//修改record
|
||||
_options.Value.RecordModify?.Invoke(record);
|
||||
//替换record
|
||||
var replaceRecord = _options.Value.RecordReplace?.Invoke(record);
|
||||
if (replaceRecord != null)
|
||||
{
|
||||
record = replaceRecord;
|
||||
}
|
||||
_consumerQueue.Enqueue(record);
|
||||
//数据增加
|
||||
var addRecords=_options.Value.RecordAdd?.Invoke(record);
|
||||
if(addRecords != null)
|
||||
{
|
||||
foreach(var rc in addRecords)
|
||||
{
|
||||
_consumerQueue.Enqueue(rc);
|
||||
}
|
||||
}
|
||||
_context.AddTransform();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user