diff --git a/IDIS_Server-SIM/Controllers/IDIS_QueryController.cs b/IDIS_Server-SIM/Controllers/IDIS_QueryController.cs new file mode 100644 index 0000000..eef398b --- /dev/null +++ b/IDIS_Server-SIM/Controllers/IDIS_QueryController.cs @@ -0,0 +1,105 @@ +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 _logger; + public IDIS_QueryController(IDIS_Statistics_MySQLBased statisticsService, ILogger logger, QueryService queryService, IDIS_Service_MySQLBased service) + { + _statisticsService = statisticsService; + _logger = logger; + _queryService = queryService; + _service = service; + } + /// + /// 查询当日的解析的标识 + /// + /// + [Route("/api/query/today")] + [HttpGet] + public async Task GetTodayQuery() + { + var result = await _statisticsService.GetTodayQuery(); + + return new IDIS_Response(result).ToActionResult(); + } + /// + /// 查询该标识的解析次数 + /// + /// 标识码,标识码为null则是查询所有表示的解析次数 + /// + [Route("/api/query/count")] + [HttpGet] + public async Task 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(); + } + } + /// + /// 查询所有标识的解析次数综合 + /// + /// + [HttpGet] + [Route(("/api/query/all_count"))] + public async Task GetQueryAllCount() + { + return new IDIS_Response(await _statisticsService.GetAllQueryCount()).ToActionResult(); + } + /// + /// 获取所有标识的数量 + /// + /// + [HttpGet] + [Route(("/api/all_count"))] + public IActionResult GetAllCount() + { + var count = _service.handles.Count(); + return new IDIS_Response(count).ToActionResult(); + } + /// + /// 通过标签查询标识 + /// + /// 标签,多个标签使用;分隔 + /// 是否仅查询今日的标识 + /// + [HttpGet] + [Route(("/api/query/by"))] + public async Task GetQueryByTag(string tags,bool today=false) + { + return new IDIS_Response(await _queryService.QueryByTag(today,tags.Split(";"))).ToActionResult(); + } + /// + /// 通过Tag获取解析记录 + /// + /// 标签,多个标签使用;分隔 + /// 是否仅查询今日的标识 + /// + [HttpGet] + [Route(("/api/queryRecords/by"))] + public async Task GetQueryRecordsByTag(string tags, bool today = false) + { + return new IDIS_Response(await _queryService.QueryRecordsByTag(today,tags.Split(";"))).ToActionResult(); + } +} \ No newline at end of file diff --git a/IDIS_Server-SIM/Controllers/IDIS_ServiceController.cs b/IDIS_Server-SIM/Controllers/IDIS_ServiceController.cs index fa656fe..6ce525e 100644 --- a/IDIS_Server-SIM/Controllers/IDIS_ServiceController.cs +++ b/IDIS_Server-SIM/Controllers/IDIS_ServiceController.cs @@ -15,15 +15,51 @@ public class IDIS_ServiceController:Controller { _service = service; } + /// + /// 获取服务器信息 + /// + /// 主机名称 [HttpGet] [Route("info")] public IActionResult Info() { - return new ContentResult - { - Content = Environment.MachineName - }; + return Ok(new IDIS_Response(Environment.MachineName)); } + /// + /// 一次解析所有标识 + /// + /// 所有标识的数组 + [HttpGet] + [Route("/identityv2/data/detail/all")] + public async Task QueryAll() + { + try + { + var result = await _service.ToArrayAsync(); + var response = new IDIS_Response(result); + var json = JsonConvert.SerializeObject(response); + //return Ok(JsonConvert.SerializeObject(response)); + return new ContentResult() + { + Content = json, + ContentType = "application/json", + StatusCode = 200 + }; + } + catch (Exception e) + { + return BadRequest(new IDIS_Response(e.Message,false) + { + Status = 2 + }); + } + } + + /// + /// 解析表示 + /// + /// 标识码 + /// [HttpGet] [Route("/identityv2/data/detail")] public async Task Query(string handle) @@ -49,14 +85,21 @@ public class IDIS_ServiceController:Controller }); } } - + /// + /// 查询标识是否存在 + /// + /// 标识码 + /// [HttpGet] [Route("isExist")] public async Task IsExist(string code) { return Ok(new IDIS_Response(await _service.IsExistAsync(code))); } - + /// + /// 注册标识 + /// + /// [HttpPost] [Route("/identityv2/data")] public async Task Register() @@ -78,12 +121,21 @@ public class IDIS_ServiceController:Controller } } + /// + /// 更新标识(目前不可用) + /// + /// [HttpGet] [Route("update")] public string Update() { return "err:0"; } + /// + /// 删除标识 + /// + /// 标识码 + /// [HttpGet] [Route("delete")] public async Task Delete (string code) diff --git a/IDIS_Server-SIM/Controllers/IDIS_StatisticsController.cs b/IDIS_Server-SIM/Controllers/IDIS_StatisticsController.cs deleted file mode 100644 index 4765659..0000000 --- a/IDIS_Server-SIM/Controllers/IDIS_StatisticsController.cs +++ /dev/null @@ -1,36 +0,0 @@ -using BITKit; -using IDIS; -using IDIS_Server_SIM.Extensions; -using IDIS.Models; -using IDIS.Services; -using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json; - -namespace IDIS_Server_SIM.Controllers; - -[ApiController] -public class IDIS_StatisticsController:Controller -{ - private readonly IDIS_Statistics_MySQLBased _service; - private readonly ILogger _logger; - public IDIS_StatisticsController(IDIS_Statistics_MySQLBased service, ILogger logger) - { - _service = service; - _logger = logger; - } - - [Route("/api/query/today")] - public async Task GetTodayQuery() - { - var result = await _service.GetTodayQuery(); - - return new IDIS_Response(result).ToActionResult(); - } - [Route("/api/query/count")] - public async Task GetQueryCount(string handle) - { - var result = await _service.GetQueryCount(handle); - - return new IDIS_Response(result).ToActionResult(); - } -} \ No newline at end of file diff --git a/IDIS_Server-SIM/Controllers/IDIS_TemplateController.cs b/IDIS_Server-SIM/Controllers/IDIS_TemplateController.cs index 9f69b71..cc62ccc 100644 --- a/IDIS_Server-SIM/Controllers/IDIS_TemplateController.cs +++ b/IDIS_Server-SIM/Controllers/IDIS_TemplateController.cs @@ -19,7 +19,12 @@ public class IDIS_TemplateController:Controller _service = service; _logger = logger; } - + /// + /// 查询标识模板 + /// + /// 前缀,例如88.123.99 + /// 版本,例如v0.0.1 + /// [Route("/snms/api/template/v1")] [HttpGet] public async Task Query(string prefix, string version) @@ -36,7 +41,10 @@ public class IDIS_TemplateController:Controller }); } } - + /// + /// 保存标识模板 + /// + /// [Route("/snms/api/template/v1")] [HttpPost] public async Task Save() diff --git a/IDIS_Server-SIM/Data/QueryService.cs b/IDIS_Server-SIM/Data/QueryService.cs new file mode 100644 index 0000000..20fc8db --- /dev/null +++ b/IDIS_Server-SIM/Data/QueryService.cs @@ -0,0 +1,63 @@ +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 values { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + var connectionString = BITKit.Data.Get("DefaultConnection"); + + optionsBuilder.UseMySQL(connectionString); + + optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll); + } + public async UniTask 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 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(); + + 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(); + } +} \ No newline at end of file diff --git a/IDIS_Server-SIM/Program.cs b/IDIS_Server-SIM/Program.cs index 3217d5c..eed7161 100644 --- a/IDIS_Server-SIM/Program.cs +++ b/IDIS_Server-SIM/Program.cs @@ -1,6 +1,7 @@ #pragma warning disable SYSLIB1045 using System.Text.RegularExpressions; using BITKit; +using IDIS_Server_SIM.Data; using IDIS.Services; await BITAppForNet.InitializeAsync("IDIS"); @@ -21,39 +22,47 @@ var cancellationTokenSource = new System.Threading.CancellationTokenSource(); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); +builder.Services.AddSwaggerGen(x => +{ + var currentDirectory = AppContext.BaseDirectory; + x.IncludeXmlComments(currentDirectory + "/IDIS_Server-SIM.xml",true); +}); builder.Services.AddTransient(); +builder.Services.AddTransient(); + builder.Services.AddTransient(); +builder.Services.AddTransient(); + builder.Services.AddTransient(); var app = builder.Build(); var logger = app.Services.GetRequiredService>(); -#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 +// #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.PreAddress = str!; @@ -61,10 +70,12 @@ var idis_Service = app.Services.GetRequiredService(); app.Services.GetRequiredService(); // Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) + +//if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); + } app.MapGet("/", () => "Hello World!"); diff --git a/ReadMe.md b/ReadMe.md index 09325e3..41fb9ea 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -8,12 +8,15 @@ - [x] 删除标识 - [x] 查询数据模板 - [x] 保存数据模板 + + ### 已支持的功能 - [x] 查询当日解析的标识 - [x] 查询标识所有解析记录 ## 食用指南 ### 基本功能 -1. 去寻找`标识解析附件1 SNMS-API-1.2.6.docx`这份文档 +1. 去寻找 +![https://docs.qq.com/document/DU09namRET25CZVZR](SNMS-API-1.2.6.docx)这份文档 2. 按照`已支持的功能`去操作 ### 统计功能 #### 查询当日解析的标识