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.

139 lines
6.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using VOL.Core.CacheManager;
using VOL.Core.Utilities;
using VOL.Entity.DomainModels;
using VOL.Entity.SystemModels;
namespace VOL.Core.BaseProvider
{
public interface IService<T> where T : BaseEntity
{
ICacheService CacheContext { get; }
Microsoft.AspNetCore.Http.HttpContext Context { get; }
/// <summary>
/// 查询
/// </summary>
/// <param name="pageData"></param>
/// <returns></returns>
PageGridData<T> GetPageData(PageDataOptions pageData);
object GetDetailPage(PageDataOptions pageData);
WebResponseContent Upload(List<IFormFile> files);
WebResponseContent DownLoadTemplate();
WebResponseContent Import(List<IFormFile> files);
/// <summary>
/// 导出
/// </summary>
/// <param name="pageData"></param>
/// <returns></returns>
WebResponseContent Export(PageDataOptions pageData);
/// <summary>
/// 新增
/// </summary>
/// <param name="saveDataModel">主表与子表的数据</param>
/// <returns></returns>
WebResponseContent Add(SaveModel saveDataModel);
/// <summary>
///
/// </summary>
/// <param name="entity">保存的实体</param>
/// <param name="validationEntity">是否对实体进行校验</param>
/// <returns></returns>
WebResponseContent AddEntity(T entity, bool validationEntity = true);
/// <summary>
///
/// </summary>
/// <typeparam name="TDetail"></typeparam>
/// <param name="entity">保存的实体</param>
/// <param name="list">保存的明细</param>
/// <param name="validationEntity">是否对实体进行校验</param>
/// <returns></returns>
WebResponseContent Add<TDetail>(T entity, List<TDetail> list = null, bool validationEntity = true) where TDetail : class;
/// <summary>
/// 编辑
/// </summary>
/// <param name="saveDataModel">主表与子表的数据</param>
/// <returns></returns>
WebResponseContent Update(SaveModel saveDataModel);
/// <summary>
/// 删除数据
/// </summary>
/// <param name="keys">删除的主键</param>
/// <param name="delList">是否删除对应明细(默认会删除明细)</param>
/// <returns></returns>
WebResponseContent Del(object[] keys, bool delList = true);
WebResponseContent Audit(object[] id, int? auditStatus, string auditReason);
(string, T, bool) ApiValidate(string bizContent, Expression<Func<T, object>> expression = null);
/// <summary>
///
/// </summary>
/// <typeparam name="TInput"></typeparam>
/// <param name="bizContent"></param>
/// <param name="expression">对指属性验证格式如x=>new { x.UserName,x.Value }</param>
/// <returns>(string,TInput, bool) string:返回验证消息,TInputbizContent序列化后的对象,bool:验证是否通过</returns>
(string, TInput, bool) ApiValidateInput<TInput>(string bizContent, Expression<Func<TInput, object>> expression);
/// <summary>
///
/// </summary>
/// <typeparam name="TInput"></typeparam>
/// <param name="bizContent"></param>
/// <param name="expression">对指属性验证格式如x=>new { x.UserName,x.Value }</param>
/// <param name="validateExpression">对指定的字段只做合法性判断比如长度是是否超长</param>
/// <returns>(string,TInput, bool) string:返回验证消息,TInputbizContent序列化后的对象,bool:验证是否通过</returns>
(string, TInput, bool) ApiValidateInput<TInput>(string bizContent, Expression<Func<TInput, object>> expression, Expression<Func<TInput, object>> validateExpression);
/// <summary>
/// 将数据源映射到新的数据中,List<TSource>映射到List<TResult>或TSource映射到TResult
/// 目前只支持Dictionary或实体类型
/// </summary>
/// <typeparam name="TSource"></typeparam>
/// <typeparam name="TResult"></typeparam>
/// <param name="source"></param>
/// <param name="resultExpression">只映射返回对象的指定字段</param>
/// <param name="sourceExpression">只映射数据源对象的指定字段</param>
/// 过滤条件表达式调用方式List表达式x => new { x[0].MenuName, x[0].Menu_Id}表示指定映射MenuName,Menu_Id字段
/// List<Sys_Menu> list = new List<Sys_Menu>();
/// list.MapToObject<List<Sys_Menu>, List<Sys_Menu>>(x => new { x[0].MenuName, x[0].Menu_Id}, null);
///
///过滤条件表达式调用方式实体表达式x => new { x.MenuName, x.Menu_Id}表示指定映射MenuName,Menu_Id字段
/// Sys_Menu sysMenu = new Sys_Menu();
/// sysMenu.MapToObject<Sys_Menu, Sys_Menu>(x => new { x.MenuName, x.Menu_Id}, null);
/// <returns></returns>
TResult MapToEntity<TSource, TResult>(TSource source, Expression<Func<TResult, object>> resultExpression,
Expression<Func<TSource, object>> sourceExpression = null) where TResult : class;
/// <summary>
/// 将一个实体的赋到另一个实体上,应用场景:
/// 两个实体a a1= new a();b b1= new b(); a1.P=b1.P; a1.Name=b1.Name;
/// </summary>
/// <typeparam name="TSource"></typeparam>
/// <typeparam name="TResult"></typeparam>
/// <param name="source"></param>
/// <param name="result"></param>
/// <param name="expression">指定对需要的字段赋值,格式x=>new {x.Name,x.P},返回的结果只会对Name与P赋值</param>
void MapValueToEntity<TSource, TResult>(TSource source, TResult result, Expression<Func<TResult, object>> expression = null) where TResult : class;
}
}