jy-plc/Services/BaseService.cs

205 lines
6.2 KiB
C#

using LangGuan.Command.Model;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace LangGuan.Services
{
/// <summary>
/// baseservice
/// </summary>
/// <typeparam name="T"></typeparam>
public class BaseService<T> where T : BaseModel
{
private readonly IMongoCollection<T> _collection; //数据表操作对象
/// <summary>
/// 构造
/// </summary>
/// <param name="config"></param>
/// <param name="tableName"></param>
public BaseService(IConfiguration config, string tableName)
{
var client = new MongoClient(config.GetSection("MongoDBConn").Value); //获取链接字符串
var database = client.GetDatabase(config.GetSection("MongoDBSetting:DBName").Value);
_collection = database.GetCollection<T>(tableName);
}
/// <summary>
/// 获取所有
/// </summary>
/// <returns></returns>
public List<T> Get()
{
return _collection.Find(T => true).ToList();
}
/// <summary>
/// 获取单个
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public T Get(string id)
{
return _collection.Find<T>(T => T.Id == id).FirstOrDefault();
}
/// <summary>
/// 创建
/// </summary>
/// <param name="T"></param>
/// <returns></returns>
public T Create(T T)
{
_collection.InsertOne(T);
return T;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="id"></param>
/// <param name="TIn"></param>
public void Update(string id, T TIn)
{
_collection.ReplaceOne(T => T.Id == id, TIn);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="TIn"></param>
public void Remove(T TIn)
{
_collection.DeleteOne(T => T.Id == TIn.Id);
}
/// <summary>
/// 根据id删除
/// </summary>
/// <param name="id"></param>
public void Remove(string id)
{
_collection.DeleteOne(T => T.Id == id);
}
#region
/// <summary>
/// 取列表
/// </summary>
/// <returns></returns>
public async Task<List<T>> GetAsync()
{
return await _collection.Find(T => true).ToListAsync();
}
/// <summary>
/// 取单条
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<T> GetAsync(string id)
{
return await _collection.Find<T>(T => T.Id == id).FirstOrDefaultAsync();
}
/// <summary>
/// 新增
/// </summary>
/// <param name="T"></param>
/// <returns></returns>
public async Task<T> CreateAsync(T T)
{
await _collection.InsertOneAsync(T);
return T;
}
/// <summary>
/// 新增
/// </summary>
/// <param name="T"></param>
/// <returns></returns>
public async Task CreateManyAsync(IEnumerable<T> T)
{
await _collection.InsertManyAsync(T);
}
/// <summary>
/// 更新
/// </summary>
/// <param name="id"></param>
/// <param name="TIn"></param>
/// <returns></returns>
public async Task UpdateAsync(string id, T TIn)
{
await _collection.ReplaceOneAsync(T => T.Id == id, TIn);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task RemoveAsync(string id)
{
await _collection.DeleteOneAsync(T => T.Id == id);
}
#endregion
/// <summary>
/// 表达式取数据
/// </summary>
/// <param name="expression"></param>
/// <returns></returns>
public Task<IQueryable<T>> GetListWithExp(Expression<Func<T, bool>> expression)
{
// var temp = _collection.AsQueryable<T>().Where(expression).ToList();
return Task.FromResult(_collection.AsQueryable<T>().Where(expression));
}
/// <summary>
/// filter查找
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public async Task<List<T>> FindListByFilter(Expression<Func<T, bool>> filter)
{
FilterDefinition<T> filters = Builders<T>.Filter.Where(filter);
return await _collection.Find(filters).ToListAsync();
}
/// <summary>
/// filterdefinition
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public async Task<List<T>> FindListyFilter(FilterDefinition<T> filter)
{
return await _collection.Find(filter).ToListAsync();
}
/// <summary>
/// 是否存在
/// </summary>
/// <param name="expression"></param>
/// <returns></returns>
public Task<bool> Exist(Expression<Func<T, bool>> expression)
{
var result = _collection.AsQueryable().Where(expression).Any();
return Task.FromResult(result);
}
/// <summary>
/// 分页取数据
/// </summary>
/// <param name="req"></param>
/// <param name="exp"></param>
/// <returns></returns>
public async Task<ApiResult> GetPager(RqeustPaging req, Expression<Func<T, bool>> exp = null)
{
req.pageSize = req.pageSize == 0 ? 10 : req.pageSize;
var query = await GetListWithExp(exp);
var total = query.Count();
var items = query.OrderByDescending(s => s.CreateDateTime)
.Skip(req.pageSize * (req.current - 1)).Take(req.pageSize).ToList();
return new ApiResult()
{
code = 0,
data = new { total = total, items = items }
};
}
}
}