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