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