using Admin.NET.Core.Service;
using Admin.NET.Application.Const;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
using Magicodes.ExporterAndImporter.Core.Models;
using Furion.Logging;
namespace Admin.NET.Application;
///
/// 申请示例服务
///
[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
public class Dm_ApplyDemoService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
public Dm_ApplyDemoService(SqlSugarRepository rep)
{
_rep = rep;
}
///
/// 分页查询申请示例
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Page")]
public async Task> Page(Dm_ApplyDemoInput input)
{
ISugarQueryable query = Query(input).Select();
return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
}
///
/// 查询
///
///
///
private ISugarQueryable Query(Dm_ApplyDemoInput input)
{
var query = _rep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
u.ApplyNO.Contains(input.SearchKey.Trim())
|| u.Remark.Contains(input.SearchKey.Trim())
)
.WhereIF(input.OrgType > 0, u => u.OrgType == input.OrgType)
.WhereIF(!string.IsNullOrWhiteSpace(input.ApplyNO), u => u.ApplyNO.Contains(input.ApplyNO.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Remark), u => u.Remark.Contains(input.Remark.Trim()))
;
if (input.ApplicatDateRange != null && input.ApplicatDateRange.Count > 0)
{
DateTime? start = input.ApplicatDateRange[0];
query = query.WhereIF(start.HasValue, u => u.ApplicatDate > start);
if (input.ApplicatDateRange.Count > 1 && input.ApplicatDateRange[1].HasValue)
{
var end = input.ApplicatDateRange[1].Value.AddDays(1);
query = query.Where(u => u.ApplicatDate < end);
}
}
return query;
}
///
/// 导出查询数据
///
///
[HttpPost]
public async Task Export(Dm_ApplyDemoInput input)
{
//如果想速度更快,推荐使用存储过程查询导出;如果想自定义导出样式,推荐使用模板。
return await CommonUtil.ExportExcelData(Query(input));
}
///
/// 增加申请示例
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Add")]
public async Task Add(AddDm_ApplyDemoInput input)
{
var entity = input.Adapt();
await _rep.InsertAsync(entity);
return entity.Id;
}
///
/// 删除申请示例
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Delete")]
public async Task Delete(DeleteDm_ApplyDemoInput input)
{
var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
await _rep.FakeDeleteAsync(entity); //假删除
//await _rep.DeleteAsync(entity); //真删除
}
///
/// 更新申请示例
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Update")]
public async Task Update(UpdateDm_ApplyDemoInput input)
{
var entity = input.Adapt();
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
}
///
/// 获取申请示例
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "Detail")]
public async Task Detail([FromQuery] QueryByIdDm_ApplyDemoInput input)
{
return await _rep.GetFirstAsync(u => u.Id == input.Id);
}
///
/// 获取申请示例列表
///
///
///
[HttpGet]
[HttpPost]
[ApiDescriptionSettings(Name = "List")]
public async Task> List([FromQuery] Dm_ApplyDemoInput input)
{
ISugarQueryable query = Query(input).Select();
return await query.Select().ToListAsync();
}
///
/// 导入数据
///
/// Excel文件
///
[AllowAnonymous]
public async Task> Import([Required] IFormFile file)
{
if (file == null) throw Oops.Oh(ErrorCodeEnum.D8000);
var Importer = new Magicodes.ExporterAndImporter.Excel.ExcelImporter();
var importResult = await CommonUtil.ImportExcelData(file);
string message=string.Empty;
if (importResult != null)
{
//TODO 自定义校验
int errorCount = 0;
//导入数据转为对象实例
var ysLs = new List();
var ls = CommonUtil.ParseList(importResult, (source, target) =>
{
if (target.Id == 0)
{
return target;
}
else
{
_rep.Context.Updateable(target).IgnoreColumns(true).ExecuteCommand();
return null;
}
});
if (ls.Count > 0)
{
await _rep.Context.Insertable(ls).UseParameter().ExecuteCommandAsync();
}
_rep.Context.Ado.CommitTran();
message = $"导入总数:{importResult.Count},导入成功:{importResult.Count- errorCount},导入失败:{ errorCount}。";
}
var ret = new AdminResult()
{
Code = 200,
Type = "success",
Message = message,
Result = message
};
return ret;
}
}