using Cksoft.Data; using Cksoft.Data.Repository; using DllEapEntity; using DllEapEntity.Dtos; using Microsoft.Extensions.Configuration; using MongoDB.Bson; using MongoDB.Driver; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace DllEapDal { public class EapLogDal { private readonly string dbConnStr = null; private MongoClient client = null; public EapLogDal(IConfiguration configuration) { dbConnStr = configuration["MongoDb"]; client = new MongoClient(dbConnStr); } /// /// 获取列表 /// /// /// /// /// /// /// public async Task> GetLogList(int skip, int length, string sort, string order, int? platform, string action, string message, DateTime? startTime, DateTime? endTime, string opeatorCode) { var db = client.GetDatabase("EapLog"); var collection = db.GetCollection("Logs"); FilterDefinitionBuilder filterDefinitionBuilder = Builders.Filter; var definitionFilters = new List>(); if (platform.HasValue) { var tmp = filterDefinitionBuilder.Eq("ApplicationId", platform); definitionFilters.Add(tmp); } if (!string.IsNullOrEmpty(action)) { var tmp = filterDefinitionBuilder.Regex("Action", new BsonRegularExpression( new Regex(action, RegexOptions.IgnoreCase))); definitionFilters.Add(tmp); } if (!string.IsNullOrEmpty(message)) { var tmp = filterDefinitionBuilder.Regex("Message", new BsonRegularExpression( new Regex(message, RegexOptions.IgnoreCase))); definitionFilters.Add(tmp); } if (startTime.HasValue) { var tmp = filterDefinitionBuilder.Gt("OperatingTime", (BsonDateTime)startTime); definitionFilters.Add(tmp); } if (endTime.HasValue) { var tmp = filterDefinitionBuilder.Lt("OperatingTime", (BsonDateTime)endTime); definitionFilters.Add(tmp); } if (!string.IsNullOrEmpty(opeatorCode)) { var tmp = filterDefinitionBuilder.Regex("Reccode", new BsonRegularExpression( new Regex(opeatorCode, RegexOptions.IgnoreCase))); definitionFilters.Add(tmp); } var filter = filterDefinitionBuilder.Where(t => true); if (definitionFilters.Count > 0) { filter = filterDefinitionBuilder.And(definitionFilters); } var datas = collection.Find(filter, new FindOptions() { AllowDiskUse = true }); var total = await collection.CountDocumentsAsync(filter); var sortbuilder = Builders.Sort; var sortExp = sortbuilder.Descending(sort); if (order == "asc") { sortExp = sortbuilder.Ascending(sort); } var logs = datas.Sort(sortExp).Skip(skip).Limit(length).ToList(); if (logs != null && logs.Count > 0) { logs.ForEach(item => { item.OperatingTime = item.OperatingTime; }); } return new LayuiModel { count = (int)total, data = logs }; } /// /// 获取日志详情 /// /// /// public async Task Get(string id) { var db = client.GetDatabase("EapLog"); var collection = db.GetCollection("Logs"); FilterDefinitionBuilder filterDefinitionBuilder = Builders.Filter; var idFilter = filterDefinitionBuilder.Eq("_id", BsonObjectId.Create(id)); var data = (await collection.FindAsync(idFilter)).FirstOrDefault(); using (IDatabase mysqlDb = DbFactory.Base("eapslave")) { string errorinfo = string.Empty; var staff = (await mysqlDb.FindListForConditionAsync($" and " + $"a.fcode='{data.Reccode}'", ref errorinfo)).FirstOrDefault(); data.RecName = staff?.FName; return data; } } } }