This commit is contained in:
CortexCore 2025-07-04 01:50:54 +08:00
parent fdf263a308
commit 7db625419c
18 changed files with 195 additions and 350 deletions

19
.gitattributes vendored Normal file
View File

@ -0,0 +1,19 @@
# Git - gitattributes Documentation
# https://git-scm.com/docs/gitattributes
# 禁用所有文件的换行符自动转换
* -text
# 机器生成的文件
# Unity *.meta 所有平台下换行符均为 LF
*.meta text eol=lf
# 人类编写的文件
# C# 代码
*.cs text eol=lf

View File

@ -0,0 +1,24 @@
using IDIS;
using IDIS_Server_SIM.Extensions;
using CAICT.IDIS.Service;
using Microsoft.AspNetCore.Mvc;
namespace CN.CAICT.IDIS.Controllers;
/// <summary>
/// 诊断控制器
/// </summary>
[ApiController]
public class IDIS_DiagnosisController:Controller
{
/// <summary>
/// 诊断,使用该接口确保应用运行中
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("/api/diagnosis")]
public string Diagnose()
{
return "OK";
}
}

View File

@ -1,11 +1,11 @@
using BITKit;
using IDIS;
using IDIS.Models;
using IDIS.Services;
using CAICT.IDIS;
using CAICT.IDIS.Service;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace IDIS_Server_SIM.Controllers;
namespace CN.CAICT.IDIS.Controllers;
[ApiController]
public class IDIS_ServiceController:Controller
@ -109,7 +109,7 @@ public class IDIS_ServiceController:Controller
using var reader = new StreamReader(Request.Body);
var json = await reader.ReadToEndAsync();
var data = JsonConvert.DeserializeObject<IDIS_Register_Data>(json)!;
await _service.RegisterAsync(data.Handle, data.TemplateVersion, data.Value);
await _service.RegisterIDISAsync(data.Handle, data.TemplateVersion, data.Value);
return Ok(new IDIS_Response());
}
catch (Exception e)

View File

@ -1,11 +1,11 @@
using BITKit;
using IDIS;
using IDIS.Models;
using IDIS.Services;
using CAICT.IDIS;
using CAICT.IDIS.Service;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace IDIS_Server_SIM.Controllers;
namespace CN.CAICT.IDIS.Controllers;
[ApiController]

View File

@ -1,105 +0,0 @@
using System.Data.Entity;
using BITKit;
using IDIS;
using IDIS_Server_SIM.Data;
using IDIS_Server_SIM.Extensions;
using IDIS.Models;
using IDIS.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
namespace IDIS_Server_SIM.Controllers;
[ApiController]
public class IDIS_QueryController:Controller
{
private readonly IDIS_Statistics_MySQLBased _statisticsService;
private readonly IDIS_Service_MySQLBased _service;
private readonly QueryService _queryService;
private readonly ILogger<IDIS_QueryController> _logger;
public IDIS_QueryController(IDIS_Statistics_MySQLBased statisticsService, ILogger<IDIS_QueryController> logger, QueryService queryService, IDIS_Service_MySQLBased service)
{
_statisticsService = statisticsService;
_logger = logger;
_queryService = queryService;
_service = service;
}
/// <summary>
/// 查询当日的解析的标识
/// </summary>
/// <returns></returns>
[Route("/api/query/today")]
[HttpGet]
public async Task<IActionResult> GetTodayQuery()
{
var result = await _statisticsService.GetTodayQuery();
return new IDIS_Response(result).ToActionResult();
}
/// <summary>
/// 查询该标识的解析次数
/// </summary>
/// <param name="handle">标识码,标识码为null则是查询所有表示的解析次数</param>
/// <returns></returns>
[Route("/api/query/count")]
[HttpGet]
public async Task<IActionResult> GetQueryCount(string handle=null)
{
if (string.IsNullOrEmpty(handle))
{
var result =await EntityFrameworkQueryableExtensions.ToArrayAsync(_statisticsService.queryCounter);
return new IDIS_Response(result).ToActionResult();
}
else
{
var result = await _statisticsService.GetQueryCount(handle);
return new IDIS_Response(result).ToActionResult();
}
}
/// <summary>
/// 查询所有标识的解析次数综合
/// </summary>
/// <returns></returns>
[HttpGet]
[Route(("/api/query/all_count"))]
public async Task<IActionResult> GetQueryAllCount()
{
return new IDIS_Response(await _statisticsService.GetAllQueryCount()).ToActionResult();
}
/// <summary>
/// 获取所有标识的数量
/// </summary>
/// <returns></returns>
[HttpGet]
[Route(("/api/all_count"))]
public IActionResult GetAllCount()
{
var count = _service.handles.Count();
return new IDIS_Response(count).ToActionResult();
}
/// <summary>
/// 通过标签查询标识
/// </summary>
/// <param name="tags">标签,多个标签使用;分隔</param>
/// <param name="today">是否仅查询今日的标识</param>
/// <returns></returns>
[HttpGet]
[Route(("/api/query/by"))]
public async Task<IActionResult> GetQueryByTag(string tags,bool today=false)
{
return new IDIS_Response(await _queryService.QueryByTag(today,tags.Split(";"))).ToActionResult();
}
/// <summary>
/// 通过Tag获取解析记录
/// </summary>
/// <param name="tags">标签,多个标签使用;分隔</param>
/// <param name="today">是否仅查询今日的标识</param>
/// <returns></returns>
[HttpGet]
[Route(("/api/queryRecords/by"))]
public async Task<IActionResult> GetQueryRecordsByTag(string tags, bool today = false)
{
return new IDIS_Response(await _queryService.QueryRecordsByTag(today,tags.Split(";"))).ToActionResult();
}
}

View File

@ -1,63 +0,0 @@
using Cysharp.Threading.Tasks;
using IDIS.Models;
using IDIS.Services;
using IDIS.Services.Models;
using Microsoft.EntityFrameworkCore;
namespace IDIS_Server_SIM.Data;
public class QueryService:DbContext
{
private readonly IDIS_Service _service;
private readonly IDIS_Statistics_MySQLBased _statistics;
public QueryService(IDIS_Service service, IDIS_Statistics_MySQLBased statistics)
{
_service = service;
_statistics = statistics;
}
private DbSet<IDIS_SQL_Data> values { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connectionString = BITKit.Data.Get<string>("DefaultConnection");
optionsBuilder.UseMySQL(connectionString);
optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll);
}
public async UniTask<IDIS_QueryRecord[]> QueryRecordsByTag(bool today=false,params string[] tags)
{
var handles = await QueryByTag(today,tags);
var record = (await _statistics.queryRecords.ToArrayAsync())
.Where(x => handles.Contains(x.Handle))
.OrderBy(x=>x.QueryTime)
.DistinctBy(x=>x.Handle);
return record.ToArray();
}
public async UniTask<string[]> QueryByTag(bool today = false,params string[] tags)
{
var tagRecords =
(await values.ToArrayAsync())
.Where(x => x.Type is "Tags" or "tags")
.DistinctBy(x=>x.Handle);
var list = new List<string>();
foreach (var x in tagRecords)
{
if (today)
{
if(x.CreateTime.Day != DateTime.Now.Day)
continue;
}
if(string.IsNullOrEmpty(x.Value))continue;
var currentTags = x.Value.Split(";");
if (tags.All(currentTags.Contains))
list.Add(x.Handle);
}
return list.ToArray();
}
}

View File

@ -1,89 +0,0 @@
#pragma warning disable SYSLIB1045
using System.Text.RegularExpressions;
using BITKit;
using IDIS_Server_SIM.Data;
using IDIS.Services;
await BITAppForNet.InitializeAsync("IDIS");
var config = Path.Combine(Environment.CurrentDirectory,"appsettings.json");
if (File.Exists(config))
{
var json = File.ReadAllText(config);
DataParser.Set(json);
}
var builder = WebApplication.CreateBuilder(args);
var cancellationTokenSource = new System.Threading.CancellationTokenSource();
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(x =>
{
var currentDirectory = AppContext.BaseDirectory;
x.IncludeXmlComments(currentDirectory + "/IDIS_Server-SIM.xml",true);
});
builder.Services.AddTransient<IDIS_Service, IDIS_Service_MySQLBased>();
builder.Services.AddTransient<IDIS_Service_MySQLBased>();
builder.Services.AddTransient<IDIS_Statistics_MySQLBased>();
builder.Services.AddTransient<QueryService>();
builder.Services.AddTransient<IDIS_TemplateService, IDIS_TemplateService_MySQLBased>();
var app = builder.Build();
var logger = app.Services.GetRequiredService<ILogger<Program>>();
// #region 输入二级节点地址
//
// logger.LogInformation("请输入二级节点地址,例如:88.123.99");
// string? str;
// while (true)
// {
// str = Console.ReadLine();
// if (string.IsNullOrEmpty(str))
// {
// str = "88.123.99";
// break;
// }
// const string pattern =@"^\d{1,3}\.\d{1,3}\.\d{1,3}$"; // 正则表达式模式
// if (Regex.IsMatch(str,pattern))
// {
// break;
// }
// logger.LogInformation("错误的地址格式,请按照正确格式输入,例如:88.123.99");
// }
// logger.LogInformation("输入的地址符合要求。");
//
// #endregion
var idis_Service = app.Services.GetRequiredService<IDIS_Service>();
//idis_Service.PreAddress = str!;
app.Services.GetRequiredService<IDIS_Statistics_MySQLBased>();
// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.MapGet("/", () => "Hello World!");
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

87
Program.cs Normal file
View File

@ -0,0 +1,87 @@
#pragma warning disable SYSLIB1045
using BITKit;
using BITKit.Net;
using CAICT.IDIS.Service;
using CN.CAICT.IDIS;
using IDIS.Model;
using Net.BITKit.Teleport;
using Newtonsoft.Json;
await BITAppForNet.InitializeAsync("CN.CAICT.IDIS");
var config = Path.Combine(Environment.CurrentDirectory,"appsettings.json");
if (File.Exists(config))
{
var json = File.ReadAllText(config);
DataParser.Set(json);
}
var builder = WebApplication.CreateBuilder(args);
var cancellationTokenSource = new System.Threading.CancellationTokenSource();
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(x =>
{
var currentDirectory = AppContext.BaseDirectory;
x.IncludeXmlComments(currentDirectory + "/CN.CAICT.IDIS.xml",true);
});
builder.Services.AddSingleton<NetProviderService>();
builder.Services.AddSingleton<INetServer, ENetServer>();
builder.Services.AddSingleton<INetProvider>(x => x.GetRequiredService<INetServer>().NetProvider);
builder.Services.AddTransient<IDIS_Service, IDIS_Service_SqlSugar>();
builder.Services.AddTransient<IDIS_EnterpriseService, IDIS_EnterpriseService_SqlSugar>();
builder.Services.AddTransient<IDIS_TemplateService, IDIS_TemplateService_Sugar>();
var app = builder.Build();
var server = app.Services.GetRequiredService<INetServer>();
server.StartServer(29755);
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.MapGet("/", () => "Hello World!");
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
new Thread(Tick).Start();
await app.RunAsync();
return;
void Tick()
{
app.Services.QueryComponents(out ILogger<INetServer> logger);
while (true)
{
try
{
server.NetProvider.Tick();
}
catch (Exception exception)
{
logger.LogCritical(exception,exception.Message);
}
Thread.Sleep(16);
}
}

View File

@ -1,40 +1,40 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:39555",
"sslPort": 44303
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false, "launchUrl": "swagger",
"applicationUrl": "http://localhost:5242;http://localhost:5243",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7254;http://localhost:5242",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:39555",
"sslPort": 44303
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false, "launchUrl": "swagger",
"applicationUrl": "http://localhost:5242;http://localhost:5243",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7254;http://localhost:5242",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@ -1,27 +0,0 @@
# IDIS Server Console
### IDIS 标识解析服务器控制台
指南版本`v0.2`
### 已支持的功能
- [x] 查询标识
- [x] 注册标识
- [x] 删除标识
- [x] 查询数据模板
- [x] 保存数据模板
### 已支持的功能
- [x] 查询当日解析的标识
- [x] 查询标识所有解析记录
## 食用指南
### 基本功能
1. 去寻找
![https://docs.qq.com/document/DU09namRET25CZVZR](SNMS-API-1.2.6.docx)这份文档
2. 按照`已支持的功能`去操作
### 统计功能
#### 查询当日解析的标识
![Clip_20240429_230249.png](ReadMe%2FClip_20240429_230249.png)
`Get:`http://localhost:5242/api/query/today
#### 查询单个标识所有的解析次数
![Clip_20240429_230509.png](ReadMe%2FClip_20240429_230509.png)
`Get:`http://localhost:5242/api/query/count?handle=88.101.6/xx004

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

View File

@ -1,8 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@ -1,11 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Urls": "http://+:5242",
"DefaultConnection":"server=server.bitfall.icu;port=3306;database=ifactory;uid=ifactory;password=JdBfKR2dxhm76Ss2",
"AllowedHosts": "*"
}
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Urls": "http://+:5242",
"AllowedHosts": "*"
}

BIN
img.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB