public IServiceProvider ConfigureServices(IServiceCollection services)
{
.....
services.AddFlash(flash =>
{
//注入分布式唯一ID生成器
flash.AddUniqueIdGenerator(option =>
{
option.CenterId = int.Parse(Configuration["CenterId"]);
option.UseStaticWorkIdCreateStrategy(int.Parse(Configuration["WorkId"]));
});
});
....
return services;
}
public class SystemRepository : ISystemRepository
{
long uid = 0;
public readonly IUniqueIdGenerator _uniqueIdGenerator;
public SystemRepository(IUniqueIdGenerator uniqueIdGenerator)
{
this._uniqueIdGenerator = uniqueIdGenerator;
}
public long GetUid()
{
return _uniqueIdGenerator.NewId();
}
}
class Program
{
static void Main(string[] args)
{
string value1 = "0";
//字符串转换相关操作
Console.WriteLine(value1.Tolong(0));
Console.WriteLine(value1.ToFloat());
Console.WriteLine(value1.ToDecimal());
Console.WriteLine(value1.ToBoolean());
object value2 = "1";
Console.WriteLine(value2.ToString().Tolong(0));
Console.WriteLine(value2.ToFloat());
Console.WriteLine(value2.ToDecimal());
Console.WriteLine(value2.ToBoolean());
Console.ReadKey();
}
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
.....
services.AddFlash(flash =>
{
//添加消息队列总线
flash.AddRabbitMQ(rabbitmq =>
{
rabbitmq.WithEndPoint(hostContext.Configuration["RabbitMQ:HostName"] ?? "localhost", int.Parse(hostContext.Configuration["RabbitMQ:Port"] ?? "5672"))
.WithAuth(hostContext.Configuration["RabbitMQ:UserName"] ?? "guest", hostContext.Configuration["RabbitMQ:Password"] ?? "guest")
.WithExchange(hostContext.Configuration["RabbitMQ:VirtualHost"] ?? "/")
.WithSender(int.Parse(hostContext.Configuration["RabbitMQ:SenderMaxConnections"] ?? "10"), int.Parse(hostContext.Configuration["RabbitMQ:SenderAcquireRetryAttempts"] ?? "3"))
.WithReceiver(
ReceiverMaxConnections: int.Parse(hostContext.Configuration["RabbitMQ:ReceiverMaxConnections"] ?? "5"),
ReveiverMaxDegreeOfParallelism: int.Parse(hostContext.Configuration["RabbitMQ:ReveiverMaxDegreeOfParallelism"] ?? "5"),
ReceiverAcquireRetryAttempts: int.Parse(hostContext.Configuration["RabbitMQ:ReceiverAcquireRetryAttempts"] ?? "3"));
});
});
....
return services;
}
internal class ServiceContainerFactory : IServiceProviderFactory<ContainerBuilder>
{
private readonly ContainerBuilder containerBuilder;
public ServiceContainerFactory(
ContainerBuilder containerBuilder)
{
this.containerBuilder = containerBuilder;
}
public ContainerBuilder CreateBuilder(IServiceCollection services)
{
containerBuilder.Populate(services);
return containerBuilder;
}
public IServiceProvider CreateServiceProvider(ContainerBuilder containerBuilder)
{
var container = containerBuilder.Build();
var sp = new AutofacServiceProvider(container);
sp.UseRabbitMQ(rabbitmq =>
{
//注册订阅处理逻辑
rabbitmq.Register<Application.Events.FaceAnalysisEvent, Application.Events.FaceAnalysisEventHandler>(queueName: typeof(Application.Events.FaceAnalysisEventHandler).FullName);
rabbitmq.Register<Application.Events.FaceAnalysisNoticeEvent, Application.Events.FaceAnalysisNoticeEventHandler>(queueName: typeof(Application.Events.FaceAnalysisNoticeEventHandler).FullName);
});
return sp;
}
}
//注入组件
public IServiceProvider ConfigureServices(IServiceCollection services)
{
.....
services.AddFlash(flash =>
{
//添加Office组件
flash.AddOffice(
setting => { },
action =>
{
action.UseNpoi();
}
);
});
....
return services;
}
//Office组件使用
public void TestWriteExcel()
{
var tool = ServiceProvider.GetService<IOfficeTools>();
var headerColumns = new List<ExcelHeaderColumn>();
headerColumns.Add(ExcelHeaderColumn.Create("序号", nameof(StudentInfo.Id)));
headerColumns.Add(ExcelHeaderColumn.Create("姓名", nameof(StudentInfo.Name)));
headerColumns.Add(ExcelHeaderColumn.Create("年龄", nameof(StudentInfo.Age)));
headerColumns.Add(ExcelHeaderColumn.Create("平均收入", nameof(StudentInfo.Monery), "[Green]0.00;[Red]-0.00"));
headerColumns.Add(ExcelHeaderColumn.Create("日期", nameof(StudentInfo.Date), "yyyy-MM-dd"));
headerColumns.Add(ExcelHeaderColumn.Create("枚举", nameof(StudentInfo.Enum)));
headerColumns.Add(ExcelHeaderColumn.Create("是否启用", nameof(StudentInfo.IsEnable)));
var dataSource = new List<StudentInfo>();
var randon = new Random((int)TimeSpan.TicksPerSecond);
for (int i = 1; i <= 1000; i++)
{
dataSource.Add(new StudentInfo { Id = Guid.NewGuid(), Name = $"姓名{i}", Age = 11, Date = DateTime.Now, Monery = 100000 - randon.NextDouble() * 1000000, Enum = TestEnum.TT, IsEnable = false });
}
var buffer = tool.WriteExcel(dataSource, headerColumns);
Assert.IsNotNull(buffer);
File.WriteAllBytes(Path.Combine(AppContext.BaseDirectory, "excel", DateTime.Now.ToFileTime().ToString() + ".xls"), buffer);
var datas = tool.ReadExcel<StudentInfo>(buffer, headerColumns);
Assert.IsNotNull(datas);
}
public void TestWriteExcelByMultipleSheet()
{
var tool = ServiceProvider.GetService<IOfficeTools>();
var headerColumns1 = ExcelHeaderColumn.Create<StudentInfo>();
var headerColumns2 = new List<ExcelHeaderColumn>();
headerColumns2.Add(ExcelHeaderColumn.Create("Sheet2-序号", nameof(StudentInfo.Id)));
headerColumns2.Add(ExcelHeaderColumn.Create("Sheet2-姓名", nameof(StudentInfo.Name)));
headerColumns2.Add(ExcelHeaderColumn.Create("Sheet2-年龄", nameof(StudentInfo.Age)));
headerColumns2.Add(ExcelHeaderColumn.Create("Sheet2-平均收入", nameof(StudentInfo.Monery), "[Green]0.00;[Red]-0.00"));
headerColumns2.Add(ExcelHeaderColumn.Create("Sheet2-日期", nameof(StudentInfo.Date), "yyyy-MM-dd"));
headerColumns2.Add(ExcelHeaderColumn.Create("Sheet2-枚举", nameof(StudentInfo.Enum)));
headerColumns2.Add(ExcelHeaderColumn.Create("Sheet2-是否启用", nameof(StudentInfo.IsEnable)));
var headerColumns3 = new List<ExcelHeaderColumn>();
headerColumns3.Add(ExcelHeaderColumn.Create("Sheet2-序号", nameof(StudentInfo.Id)));
headerColumns3.Add(ExcelHeaderColumn.Create("Sheet2-姓名", nameof(StudentInfo.Name)));
headerColumns3.Add(ExcelHeaderColumn.Create("Sheet2-年龄", nameof(StudentInfo.Age)));
headerColumns3.Add(ExcelHeaderColumn.Create("Sheet2-平均收入", nameof(StudentInfo.Monery), "[Green]0.00;[Red]-0.00"));
headerColumns3.Add(ExcelHeaderColumn.Create("Sheet2-日期", nameof(StudentInfo.Date), "yyyy-MM-dd"));
headerColumns3.Add(ExcelHeaderColumn.Create("Sheet2-枚举", nameof(StudentInfo.Enum)));
headerColumns3.Add(ExcelHeaderColumn.Create("Sheet2-是否启用", nameof(StudentInfo.IsEnable)));
var dataSource = new List<StudentInfo>();
var randon = new Random((int)TimeSpan.TicksPerSecond);
for (int i = 1; i <= 10000; i++)
{
dataSource.Add(new StudentInfo { Id = Guid.NewGuid(), Name = $"姓名{i}", Age = 11, Date = DateTime.Now, Monery = 100000 - randon.NextDouble() * 1000000, Enum = TestEnum.TT, IsEnable = false });
}
dataSource.Add(new StudentInfo { Id = Guid.NewGuid(), Name = null, Age = 11, Date = DateTime.Now, Monery = 100000 - randon.NextDouble() * 1000000, Enum = TestEnum.TT, IsEnable = false });
var buffer = tool.WriteExcelMultipleSheet(
SheetInfo.Create("Sheet1", dataSource, headerColumns1),
SheetInfo.Create("Sheet2", dataSource, headerColumns2),
SheetInfo.Create("Sheet3", dataSource, headerColumns3));
Assert.IsNotNull(buffer);
var fileName = DateTime.Now.ToFileTime().ToString() + ".xls";
File.WriteAllBytes(Path.Combine(AppContext.BaseDirectory, "excel", fileName), buffer);
var datas = tool.ReadExcel<StudentInfo>(buffer, "Sheet2", headerColumns2);
Assert.IsNotNull(datas);
var emailService = ServiceProvider.GetService<IEmailService>();
Assert.IsNotNull(emailService);
//emailService.Send("XXXX@163.com", "邮箱发送测试", "邮箱发送测试", AttachmentInfo.Create(fileName, new MemoryStream(buffer)), System.Text.Encoding.UTF8);
//emailService.Send("XXXX@163.com", "邮箱发送测试", "邮箱发送测试Path", AttachmentInfo.Create(Path.Combine(AppContext.BaseDirectory, "excel", fileName)), System.Text.Encoding.UTF8);
emailService.Send("XXXX@163.com", "邮箱发送测试", "邮箱发送测试Path", AttachmentInfo.Create(Path.Combine(AppContext.BaseDirectory, "excel", fileName), Path.Combine(AppContext.BaseDirectory, "excel", fileName)), System.Text.Encoding.UTF8);
}
public class StudentInfo
{
[ExcelHeader("", "序号")]
public Guid Id { get; set; }
[ExcelHeader(nameof(Id), "姓名")]
public string Name { get; set; }
[ExcelHeader("", "年龄")]
public int Age { get; set; }
[ExcelHeader(nameof(Age), "平均收入", "[Green]0.00;[Red]-0.00")]
public double Monery { get; set; }
[ExcelHeader(nameof(Monery), "日期", "yyyy-MM-dd")]
public DateTime Date { get; set; }
[ExcelHeader(nameof(Date), "枚举")]
public TestEnum Enum { get; set; }
[ExcelHeader(nameof(Enum), "是否启用")]
public bool IsEnable { get; set; }
}
public enum TestEnum
{
All,
TT
}
//注入组件
public IServiceProvider ConfigureServices(IServiceCollection services)
{
.....
services.AddFlash(flash =>
{
//添加Email组件
flash.AddMailKit(Configuration.GetSection("Email").Get<EmailConfig>());
});
....
return services;
}
//Office组件使用
public void TestSendEmail()
{
var tool = ServiceProvider.GetService<IEmailService>();
Assert.IsNotNull(tool);
tool.Send("XXXX@163.com", "邮箱发送测试", "邮箱发送测试", System.Text.Encoding.UTF8);
}