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(); } }