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.
85 lines
3.0 KiB
85 lines
3.0 KiB
using SqlSugar; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Text; |
|
using System.Linq; |
|
using System.Reflection; |
|
namespace ReZero.SuperAPI.Items |
|
{ |
|
public class Grid : IResultService |
|
{ |
|
ResultModel? _result; |
|
public object GetResult(object data, ResultModel result) |
|
{ |
|
_result = result; |
|
var dataModelOutPut = ((DataModelOutPut?)result.OutPutData); |
|
IEnumerable<ResultGridColumn> columns = GetGridColumn(dataModelOutPut); |
|
ResultPage page = GetPage(dataModelOutPut); |
|
if (data is IEnumerable<object> dataList) |
|
{ |
|
data = TransformData(dataList, columns); |
|
} |
|
return new ResultPageGrid |
|
{ |
|
Data = data, |
|
Columns = columns, |
|
Page = page |
|
}; |
|
} |
|
|
|
private static ResultPage GetPage(DataModelOutPut? dataModelOutPut) |
|
{ |
|
return new ResultPage |
|
{ |
|
PageNumber = dataModelOutPut!.Page!.PageNumber, |
|
PageSize = dataModelOutPut.Page.PageSize, |
|
TotalCount = dataModelOutPut.Page.TotalCount!.Value, |
|
TotalPage = dataModelOutPut.Page.TotalPage |
|
}; |
|
} |
|
|
|
private static IEnumerable<ResultGridColumn> GetGridColumn(DataModelOutPut? dataModelOutPut) |
|
{ |
|
return dataModelOutPut!.Columns!.Select(it => new ResultGridColumn |
|
{ |
|
PropertyName = it.PropertyName, |
|
ColumnDescription = it.Description |
|
}); |
|
} |
|
private IEnumerable<object> TransformData(IEnumerable<object> dataList, IEnumerable<ResultGridColumn> columns) |
|
{ |
|
var newData = new List<object>(); |
|
ResultColumnService resultColumnService = new ResultColumnService(); |
|
foreach (var item in dataList) |
|
{ |
|
var newItem = new System.Dynamic.ExpandoObject() as IDictionary<string, Object>; |
|
|
|
foreach (var column in columns) |
|
{ |
|
var propertyValue = GetPropertyValue(item, column.PropertyName!); |
|
if (IsConvertColumn(column)) |
|
{ |
|
var resultColumnModel = _result?.ResultColumnModels?.First(it => it.PropertyName == column.PropertyName); |
|
propertyValue = resultColumnService.GetValue(propertyValue, resultColumnModel); ; |
|
} |
|
newItem[column.PropertyName!] = propertyValue; |
|
} |
|
|
|
newData.Add(newItem); |
|
} |
|
|
|
return newData; |
|
} |
|
|
|
private bool IsConvertColumn(ResultGridColumn column) |
|
{ |
|
return _result?.ResultColumnModels?.Any(it => it.PropertyName == column.PropertyName) == true; |
|
} |
|
|
|
private static object GetPropertyValue(object obj, string propertyName) |
|
{ |
|
PropertyInfo propertyInfo = obj.GetType().GetProperty(propertyName); |
|
return propertyInfo?.GetValue(obj); |
|
} |
|
} |
|
}
|
|
|