BaseService查询接口分页条件过滤修改

master
xiaochanghai 1 year ago
parent e0d50ef9ad
commit dd90b381ca
  1. 6
      Tiobon.Core.Api/Controllers/Base/BaseController.cs
  2. 30
      Tiobon.Core.Api/Controllers/Ghre/Ghre_QuestionController.cs
  3. 18
      Tiobon.Core.Api/Tiobon.Core.xml
  4. 62
      Tiobon.Core.Common/Attribute/QueryFilter.cs
  5. 3
      Tiobon.Core.IServices/BASE/IBaseServices.cs
  6. 35
      Tiobon.Core.Repository/BASE/BaseRepository.cs
  7. 2
      Tiobon.Core.Repository/BASE/IBaseRepository.cs
  8. 7
      Tiobon.Core.Services/BASE/BaseServices.cs
  9. 18
      Tiobon.Core/Tiobon.Core.xml

@ -30,12 +30,12 @@ public class BaseController<IServiceBase, TEntity, TEntityDto, TInsertDto, TEdit
/// <summary> /// <summary>
/// 根据条件查询数据 /// 根据条件查询数据
/// </summary> /// </summary>
/// <param name="filter">条件</param> /// <param name="body">条件</param>
/// <returns></returns> /// <returns></returns>
[HttpPost, Route("Query")] [HttpPost, Route("Query")]
public virtual async Task<ServicePageResult<TEntityDto>> QueryByFilter([FromFilter] QueryFilter filter) public virtual async Task<ServicePageResult<TEntityDto>> QueryByFilter([FromBody] QueryBody body)
{ {
var data = (await InvokeServiceAsync("QueryFilterPage", [filter])) as ServicePageResult<TEntityDto>; var data = (await InvokeServiceAsync("QueryFilterPage", [body])) as ServicePageResult<TEntityDto>;
return data; return data;
} }

@ -16,36 +16,6 @@ public class Ghre_QuestionController : BaseController<IGhre_QuestionServices, Gh
} }
#region 基础接口 #region 基础接口
#region 查询
/// <summary>
/// 根据条件查询数据
/// </summary>
/// <param name="filter">条件</param>
/// <returns></returns>
[HttpPost, Route("Query")]
public override async Task<ServicePageResult<Ghre_QuestionDto>> QueryByFilter([FromFilter] QueryFilter filter)
{
var data = await _service.QueryFilterPage(filter);
return data;
}
/// <summary>
/// 根据Id查询数据
/// </summary>
/// <param name="Id">主键ID</param>
/// <returns></returns>
[HttpPost("Query/{Id}")]
public override async Task<ServiceResult<Ghre_QuestionDto>> QueryById(long Id)
{
var entity = await _service.QueryById(Id);
if (entity == null)
return Failed<Ghre_QuestionDto>("获取失败");
else
return Success(entity, "获取成功");
}
#endregion
#region 新增 #region 新增
/// <summary> /// <summary>
/// 新增数据 /// 新增数据

@ -79,11 +79,11 @@
初始化 (注入) 初始化 (注入)
</summary> </summary>
</member> </member>
<member name="M:Tiobon.Core.Controllers.BaseController`5.QueryByFilter(Tiobon.Core.Common.QueryFilter)"> <member name="M:Tiobon.Core.Controllers.BaseController`5.QueryByFilter(Tiobon.Core.Common.QueryBody)">
<summary> <summary>
根据条件查询数据 根据条件查询数据
</summary> </summary>
<param name="filter">条件</param> <param name="body">条件</param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Tiobon.Core.Controllers.BaseController`5.QueryById(System.Int64)"> <member name="M:Tiobon.Core.Controllers.BaseController`5.QueryById(System.Int64)">
@ -525,20 +525,6 @@
题目(Controller) 题目(Controller)
</summary> </summary>
</member> </member>
<member name="M:Tiobon.Core.Api.Controllers.Ghre_QuestionController.QueryByFilter(Tiobon.Core.Common.QueryFilter)">
<summary>
根据条件查询数据
</summary>
<param name="filter">条件</param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Api.Controllers.Ghre_QuestionController.QueryById(System.Int64)">
<summary>
根据Id查询数据
</summary>
<param name="Id">主键ID</param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Api.Controllers.Ghre_QuestionController.Insert(Tiobon.Core.Model.Models.InsertGhre_QuestionInput)"> <member name="M:Tiobon.Core.Api.Controllers.Ghre_QuestionController.Insert(Tiobon.Core.Model.Models.InsertGhre_QuestionInput)">
<summary> <summary>
新增数据 新增数据

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Newtonsoft.Json.Linq;
namespace Tiobon.Core.Common; namespace Tiobon.Core.Common;
@ -58,4 +59,65 @@ public class QueryFilter
Sorting = string.Empty, Sorting = string.Empty,
Conditions = string.Empty Conditions = string.Empty
}; };
}
/// <summary>
/// 动态查询条件
/// </summary>
public class QueryBody
{
private int _pageNum;
/// <summary>
/// 起始位置(e.g. 0)
/// </summary>
[Required]
public int pageNum
{
get { return _pageNum; }
set
{
//前端默认从分页显示默认1开始,所以后端需要-1
if (value >= 1)
value -= 1;
_pageNum = value;
}
}
/// <summary>
/// 每页数量(e.g. 10)
/// </summary>
[Required]
public int pageSize { get; set; }
private JObject _jsonParam;
/// <summary>
/// 查询条件( 例如:id = 1 and name = 小明)
/// </summary>
public JObject jsonParam
{
get { return _jsonParam; }
set
{
_jsonParam = value;
}
}
/// <summary>
/// 排序条件表达式(e.g. LoginName ASC,Name DESC)
/// </summary>
public string Sorting { get; set; }
/// <summary>
/// 缺省值
/// </summary>
public static QueryBody Default => new QueryBody
{
pageNum = 1,
pageSize = 100000,
Sorting = string.Empty,
jsonParam = default
};
}
public class JsonParam
{
public string columnValue { get; set; }
public string operationKey { get; set; }
} }

@ -1,5 +1,6 @@
using System.Data; using System.Data;
using System.Linq.Expressions; using System.Linq.Expressions;
using Microsoft.AspNetCore.Mvc;
using SqlSugar; using SqlSugar;
using Tiobon.Core.Common; using Tiobon.Core.Common;
using Tiobon.Core.Model; using Tiobon.Core.Model;
@ -139,7 +140,7 @@ namespace Tiobon.Core.IServices.BASE
Task<PageModel<TEntity>> QueryPage(Expression<Func<TEntity, bool>> whereExpression, int pageIndex = 1, int pageSize = 20, string orderByFields = null); Task<PageModel<TEntity>> QueryPage(Expression<Func<TEntity, bool>> whereExpression, int pageIndex = 1, int pageSize = 20, string orderByFields = null);
Task<ServicePageResult<TEntityDto>> QueryFilterPage([FromFilter] QueryFilter filter); Task<ServicePageResult<TEntityDto>> QueryFilterPage([FromBody] QueryBody body);
Task<List<TResult>> QueryMuch<T, T2, T3, TResult>( Task<List<TResult>> QueryMuch<T, T2, T3, TResult>(
Expression<Func<T, T2, T3, object[]>> joinExpression, Expression<Func<T, T2, T3, object[]>> joinExpression,

@ -1,6 +1,8 @@
using System.Data; using System.Data;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Reflection; using System.Reflection;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar; using SqlSugar;
using Tiobon.Core.Common; using Tiobon.Core.Common;
using Tiobon.Core.Common.DB; using Tiobon.Core.Common.DB;
@ -465,19 +467,42 @@ namespace Tiobon.Core.Repository.Base
/// <param name="pageSize">页大小</param> /// <param name="pageSize">页大小</param>
/// <param name="orderByFields">排序字段,如name asc,age desc</param> /// <param name="orderByFields">排序字段,如name asc,age desc</param>
/// <returns></returns> /// <returns></returns>
public async Task<ServicePageResult<TEntity>> QueryFilterPage([FromFilter] QueryFilter filter) public async Task<ServicePageResult<TEntity>> QueryFilterPage(QueryBody filter)
{ {
RefAsync<int> totalCount = 0; RefAsync<int> totalCount = 0;
var query = _db.Queryable<TEntity>(); var query = _db.Queryable<TEntity>();
if (!filter.Conditions.IsNullOrEmpty())
query = query.Where(filter.Conditions);
string conditions = "1=1";
foreach (JProperty jProperty in filter.jsonParam.Properties())
{
var name = jProperty.Name;
var value = jProperty.Value.ToString();
if (!string.IsNullOrWhiteSpace(value))
{
var jsonParam = JsonConvert.DeserializeObject<JsonParam>(value);
switch (jsonParam.operationKey)
{
case "Include":
conditions += $" AND {name} ='{jsonParam.columnValue}'";
break;
case "NotInclude":
conditions += $" AND {name} !='{jsonParam.columnValue}'";
break;
default:
break;
}
}
}
query = query.Where(conditions);
var list = await query var list = await query
.OrderByIF(!string.IsNullOrEmpty(filter.Sorting), filter.Sorting) .OrderByIF(!string.IsNullOrEmpty(filter.Sorting), filter.Sorting)
.ToPageListAsync(filter.PageIndex, filter.PageSize, totalCount); .ToPageListAsync(filter.pageNum, filter.pageSize, totalCount);
return new ServicePageResult<TEntity>(filter.PageIndex, totalCount, filter.PageSize, list); return new ServicePageResult<TEntity>(filter.pageNum, totalCount, filter.pageSize, list);
} }

@ -183,7 +183,7 @@ namespace Tiobon.Core.IRepository.Base
/// <param name="pageSize"></param> /// <param name="pageSize"></param>
/// <param name="orderByFields"></param> /// <param name="orderByFields"></param>
/// <returns></returns> /// <returns></returns>
Task<ServicePageResult<TEntity>> QueryFilterPage([FromFilter] QueryFilter filter); Task<ServicePageResult<TEntity>> QueryFilterPage(QueryBody filter);
/// <summary> /// <summary>
/// 三表联查 /// 三表联查

@ -3,6 +3,7 @@ using System.Linq.Expressions;
using System.Reflection; using System.Reflection;
using AgileObjects.AgileMapper; using AgileObjects.AgileMapper;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SqlSugar; using SqlSugar;
using Tiobon.Core.Common; using Tiobon.Core.Common;
using Tiobon.Core.Common.DB.Dapper; using Tiobon.Core.Common.DB.Dapper;
@ -781,11 +782,11 @@ public class BaseServices<TEntity, TEntityDto, TInsertDto, TEditDto> : IBaseServ
return await BaseDal.QueryPage(whereExpression, pageIndex, pageSize, orderByFileds); return await BaseDal.QueryPage(whereExpression, pageIndex, pageSize, orderByFileds);
} }
public async Task<ServicePageResult<TEntityDto>> QueryFilterPage([FromFilter] QueryFilter filter) public async Task<ServicePageResult<TEntityDto>> QueryFilterPage(QueryBody body)
{ {
var data = await BaseDal.QueryFilterPage(filter); var data = await BaseDal.QueryFilterPage(body);
return new ServicePageResult<TEntityDto>(filter.PageIndex, data.result.DT_TablePageInfoT1.TotalCount, filter.PageSize, Mapper.Map(data.result.DT_TableDataT1).ToANew<List<TEntityDto>>()); return new ServicePageResult<TEntityDto>(body.pageNum, data.result.DT_TablePageInfoT1.TotalCount, body.pageSize, Mapper.Map(data.result.DT_TableDataT1).ToANew<List<TEntityDto>>());
} }

@ -79,11 +79,11 @@
初始化 (注入) 初始化 (注入)
</summary> </summary>
</member> </member>
<member name="M:Tiobon.Core.Controllers.BaseController`5.QueryByFilter(Tiobon.Core.Common.QueryFilter)"> <member name="M:Tiobon.Core.Controllers.BaseController`5.QueryByFilter(Tiobon.Core.Common.QueryBody)">
<summary> <summary>
根据条件查询数据 根据条件查询数据
</summary> </summary>
<param name="filter">条件</param> <param name="body">条件</param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Tiobon.Core.Controllers.BaseController`5.QueryById(System.Int64)"> <member name="M:Tiobon.Core.Controllers.BaseController`5.QueryById(System.Int64)">
@ -525,20 +525,6 @@
题目(Controller) 题目(Controller)
</summary> </summary>
</member> </member>
<member name="M:Tiobon.Core.Api.Controllers.Ghre_QuestionController.QueryByFilter(Tiobon.Core.Common.QueryFilter)">
<summary>
根据条件查询数据
</summary>
<param name="filter">条件</param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Api.Controllers.Ghre_QuestionController.QueryById(System.Int64)">
<summary>
根据Id查询数据
</summary>
<param name="Id">主键ID</param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Api.Controllers.Ghre_QuestionController.Insert(Tiobon.Core.Model.Models.InsertGhre_QuestionInput)"> <member name="M:Tiobon.Core.Api.Controllers.Ghre_QuestionController.Insert(Tiobon.Core.Model.Models.InsertGhre_QuestionInput)">
<summary> <summary>
新增数据 新增数据

Loading…
Cancel
Save