You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
4.6 KiB

using zzz.Common.Helper;
using zzz.Model;
using zzz.Repository;
using zzz.Services.Sys.Tests.Dtos;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Yitter.IdGenerator;
namespace zzz.Services
{
/// <summary>
/// 服务
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class BaseServices<TEntity> : IBaseServices<TEntity> where TEntity : class
{
/// <summary>
///
/// </summary>
public IBaseRepository<TEntity> _rep { get; set; }//通过在子类的构造函数中注入,这里是基类,不用构造函数
/// <summary>
/// 构造
/// </summary>
/// <param name="baseRepository"></param>
public BaseServices(IBaseRepository<TEntity> baseRepository)
{
_rep = baseRepository;
}
/// <summary>
/// 根据主键取数据
/// </summary>
/// <typeparam name="Tout"></typeparam>
/// <typeparam name="Tkey"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public async Task<Tout> GetOneById<Tout, Tkey>(Tkey key) where Tout : class, new()
{
Tout ret = new Tout();
var entity = await _rep.FirstOrDefaultByIdAsync(key);
if (entity != null)
{
ret = entity.MapTo<TEntity, Tout>();
}
return ret;
}
/// <summary>
/// 取分页数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="whereExpression"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="orderByFields"></param>
/// <returns></returns>
public async Task<PageModel<T>> GetPageList<T>(
Expression<Func<T, bool>> whereExpression,
int pageIndex = 1,
int pageSize = 20,
string orderByFields = null)
{
var where = whereExpression as Expression<Func<TEntity, bool>>;
var pageData = await _rep.QueryPageAsync(where, pageIndex, pageSize, orderByFields);
return pageData.ConvertTo<T>();
}
/// <summary>
/// 新增 实体
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<bool> AddOne(TEntity entity)
{
var ret = await _rep.InsertAsync(entity);
return ret > 0;
}
/// <summary>
/// 新增
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<bool> AddOne<TAddDto, Tkey>(TAddDto input)
where Tkey : IEquatable<Tkey>
//where TAdd : RootEntityTkey<Tkey>
{
var newEntity = input.MapTo<TAddDto, TEntity>();
//newEntity.Id = ConvertUtil2.ConvertType<Tkey>(YitIdHelper.NextId());
return await _rep.InsertAsync(newEntity) > 0;
}
/// <summary>
/// 编辑
/// </summary>
/// <param name="input"></param>
/// <param name="key"></param>
/// <returns></returns>
public async Task<bool> UpdOne<TUpdDto, Tkey>(TUpdDto input)
where Tkey : IEquatable<Tkey>
//where TUpd : RootEntityTkey<Tkey>
{
var ret = false;
//转换Update的ID和UpdateDatetime
var tar = input.MapTo<TUpdDto, KeyInputUpd<Tkey>>();
var dbEntity = await _rep.FirstOrDefaultByIdAsync(tar.Id);
if (dbEntity != null)
{
var updEntity = input.MapTo(dbEntity);
ret = await _rep.UpdateAsync(updEntity);
}
return ret;
}
/// <summary>
/// 删除
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<bool> DelOneSoft<TDel,Tkey>(KeyInputUpd<Tkey> input)
where Tkey : IEquatable<Tkey>
where TDel : RootEntityTkey<Tkey>
{
var ret = false;
var dbEntity = await _rep.FirstOrDefaultByIdAsync(input.Id);
if (dbEntity != null)
{
var delEntity = dbEntity as TDel;
if (delEntity != null)
{
delEntity.IsDeleted = true;
ret = await _rep.UpdateAsync(delEntity as TEntity);
}
}
return ret;
}
}
}