Files
Web_BLVLOG_Server_Mvc_Prod/BLW_Log/Program.cs

216 lines
8.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Buffers;
using System.Data;
using System.IO.Pipelines;
using System.Runtime.CompilerServices;
using System.Text;
using BLW_Log.Controllers;
using BLW_Log.Models;
using BLW_Log.Push;
using BLW_Log.services;
using Common;
using Commonlib;
using DAL.PGModels;
using IronPython.Hosting;
using LiteDB;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Microsoft.Scripting.Ast;
using Microsoft.Scripting.Hosting;
using NLog;
using NLog.Extensions.Logging;
using NLog.Web;
using Quartz;
using static IronPython.Modules.PythonCsvModule;
namespace BLW_Log
{
public class A
{
public string IP { get; set; }
}
public class Program
{
public static void Main(string[] args)
{
//var N = DateTime.Now.ToString("yyyy-MM-dd#HH:mm:ss:fff");
var builder = WebApplication.CreateBuilder(args);
//builder.Services.AddSingleton<MyMemoryCache>();
builder.Services.AddMemoryCache();
//AddDbContext默认已经将DbContext注册为Scoped生命周期再次显式注册会导致冲突
builder.Services.AddDbContext<PostgresContext>(options =>
{
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"));
});
//builder.Services.AddScoped<PostgresContext>();
//builder.Services.AddSingleton<TaskQueue>();
builder.Services.AddHostedService<PanelSelectionClass>();
// Add services to the container.
builder.Services.AddControllersWithViews();
//builder.Logging.AddNLog();
builder.Services.AddCors(options =>
{
options.AddPolicy(name: "KuaYu",
policy =>
{
policy
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
builder.Services.AddAuthorization();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(option =>
{
string DefaultKey = "hQ%]d?V4W.fbbQ@6M^S2hE392xr~9:%?'0_D}8JI.36R3Q@b5&e906Z]02Yn0ZadSer4kH4,7z0j8a7.C?nGD6Z8dusY8P7Ur2z@h8:2y_25MY>wS7ih:Vd2}3#Z~nhP";
var sec = Encoding.UTF8.GetBytes(builder.Configuration["JWT:SecretKey"] ?? DefaultKey);
option.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["JwT:Issuer"],
ValidAudience = builder.Configuration["JwT:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(sec)
};
option.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var token = context.Request.Headers["token"].FirstOrDefault();
if (string.IsNullOrEmpty(token))
{
// 如果没有找到 token 头部,则继续检查 Authorization 头部
token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();
}
// 如果找到了 token则将其设置到 HttpContext 中
if (!string.IsNullOrEmpty(token))
{
context.Token = token;
}
return Task.CompletedTask;
}
};
});
string ttt1 = builder.Configuration["ExcelGenerater"].ToString();
string[] ssk1 = ttt1.Split(',');
int h = int.Parse(ssk1[0]);
int m = int.Parse(ssk1[1]);
int s = int.Parse(ssk1[2]);
builder.Services.AddQuartz(q =>
{
//var jobKey = new JobKey("SendEmailJob");
//q.AddJob<DelLogJob>(opts => opts.WithIdentity(jobKey));
//q.AddTrigger(opts => opts
// .ForJob(jobKey)
// .WithIdentity("SendEmailJob-trigger")
// .WithCalendarIntervalSchedule(x =>
// {
// x.WithIntervalInMinutes(30).Build();
// })
//);
var jobKey1 = new JobKey("ExcelGenerateJob");
q.AddJob<MyExcel>(opts => opts.WithIdentity(jobKey1));
q.AddTrigger(opts => opts
.ForJob(jobKey1)
.WithIdentity("ExcelGenerateJob-trigger")
.StartAt(DateBuilder.TodayAt(h, m, s))
.WithCalendarIntervalSchedule(x => x
.WithIntervalInDays(1)
.InTimeZone(TimeZoneInfo.Local))
);
//q.AddTrigger(opts => opts
// .ForJob(jobKey1)
// .WithIdentity("ExcelGenerateJob-trigger")
// .WithCronSchedule("0 0 17 * * ?", (schedule) =>
// {
// schedule.WithMisfireHandlingInstructionDoNothing().InTimeZone(TimeZoneInfo.Local);
// }) // 每天17:00
//);
var jobKey2 = new JobKey("ScanExcel");
q.AddJob<ExcelScan>(opts => opts.WithIdentity(jobKey2));
q.AddTrigger(opts => opts
.ForJob(jobKey2)
.WithIdentity("ExcelScan-trigger")
.WithCalendarIntervalSchedule(x =>
{
x.WithIntervalInSeconds(30).Build();
})
);
var jobKey3 = new JobKey("DeleteFile");
q.AddJob<ExcelScan>(opts => opts.WithIdentity(jobKey3));
q.AddTrigger(opts => opts
.ForJob(jobKey3)
.WithIdentity("DeleteFile-trigger")
.WithCronSchedule("0 0 1 * * ?", (schedule) =>
{
schedule.WithMisfireHandlingInstructionDoNothing().InTimeZone(TimeZoneInfo.Local);
}) // 每天17:00
);
});
builder.Services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);
builder.Services.AddSignalR();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseCors("KuaYu");
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<DataPush>("/blw/datapush");
});
// 配置静态文件服务添加CDR文件的MIME类型
app.UseStaticFiles(new StaticFileOptions
{
ServeUnknownFileTypes = true, // 允许服务未知文件类型
DefaultContentType = "application/octet-stream",
OnPrepareResponse = context =>
{
// 如果是CDR文件设置下载头
if (context.File.Name.EndsWith(".cdr") || context.File.Name.EndsWith(".png"))
{
context.Context.Response.Headers.Append("Content-Disposition", "attachment");
}
}
});
StaticData.GetWebAPIMethod();
StaticData.GetGetLoginData();
app.Run();
}
}
}