|
|
using DocumentFormat.OpenXml.Office2010.Excel;
|
|
|
using Infrastructure;
|
|
|
using Infrastructure.Helpers;
|
|
|
using Infrastructure.Helpers.Excel;
|
|
|
using Infrastructure.Helpers.Excel.Model;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using OpenAuth.App.CodeTable;
|
|
|
using OpenAuth.App.CodeTable.Response;
|
|
|
using OpenAuth.App.Import;
|
|
|
using OpenAuth.App.Import.Response;
|
|
|
using OpenAuth.Repository.Domain;
|
|
|
using System.Data;
|
|
|
using System.Linq;
|
|
|
|
|
|
namespace OpenAuth.WebApi.Controllers
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 日 期: 2024-06-18
|
|
|
/// 描 述: excel导入接口
|
|
|
/// </summary>
|
|
|
[Route("api/[controller]/[action]")]
|
|
|
[ApiController]
|
|
|
public class ImportController : ControllerBase
|
|
|
{
|
|
|
private readonly ImportApp _app;
|
|
|
public ImportController(ImportApp app)
|
|
|
{
|
|
|
_app = app;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 获取导入的分页数据
|
|
|
/// </summary>
|
|
|
/// <param name="keyWord">查询关键字</param>
|
|
|
/// <param name="moduleId">菜单id</param>
|
|
|
/// <param name="page"></param>
|
|
|
/// <param name="limit"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet]
|
|
|
public async Task<Response<PageInfo<List<ExcelImport>>>> LoadExcelImportPage(string keyWord, string moduleId, int page, int limit)
|
|
|
{
|
|
|
return await _app.LoadExcelImportPage(keyWord, moduleId, page, limit);
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 获取表单数据
|
|
|
/// </summary>
|
|
|
/// <param name="id">主键</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet]
|
|
|
public async Task<Response<ExcelImportDto>> GetForms(string id)
|
|
|
{
|
|
|
var result = new Response<ExcelImportDto>();
|
|
|
try
|
|
|
{
|
|
|
result.Result = new ExcelImportDto();
|
|
|
result.Result.Entity = await _app.GetEntity(id);
|
|
|
result.Result.List = await _app.GetFieldList(id);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
result.Code = 500;
|
|
|
result.Message = ex.Message;
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 获取导入配置列表根据模块ID
|
|
|
/// </summary>
|
|
|
/// <param name="moduleId">功能模块主键</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet]
|
|
|
public async Task<Response<List<ExcelImport>>> GetModuleList(string moduleId)
|
|
|
{
|
|
|
var result = new Response<List<ExcelImport>>();
|
|
|
try
|
|
|
{
|
|
|
result.Result = await _app.GetModuleList(moduleId);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
result.Code = 500;
|
|
|
result.Message = ex.Message;
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 删除数据
|
|
|
/// </summary>
|
|
|
/// <param name="id">主键</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost]
|
|
|
public async Task<Response<bool>> Delete(string id)
|
|
|
{
|
|
|
var result = new Response<bool>();
|
|
|
try
|
|
|
{
|
|
|
result = await _app.DeleteEntity(id);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
result.Code = 500;
|
|
|
result.Message = ex.InnerException?.Message ?? ex.Message;
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 新增
|
|
|
/// </summary>
|
|
|
///<param name="dto">数据</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost]
|
|
|
public async Task<Response<bool>> AddExcelImport(ExcelImportDto dto)
|
|
|
{
|
|
|
var result = new Response<bool>();
|
|
|
try
|
|
|
{
|
|
|
result = await _app.SaveEntity(string.Empty, dto.Entity, dto.List);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
result.Code = 500;
|
|
|
result.Message = ex.InnerException?.Message ?? ex.Message;
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 更新数据
|
|
|
/// </summary>
|
|
|
///<param name="dto">数据</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost]
|
|
|
public async Task<Response<bool>> UpdateExcelImport(string id, ExcelImportDto dto)
|
|
|
{
|
|
|
var result = new Response<bool>();
|
|
|
try
|
|
|
{
|
|
|
result = await _app.SaveEntity(id, dto.Entity, dto.List);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
result.Code = 500;
|
|
|
result.Message = ex.InnerException?.Message ?? ex.Message;
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
#region 扩展方法
|
|
|
/// <summary>
|
|
|
/// 下载文件
|
|
|
/// </summary>
|
|
|
/// <param name="keyValue">文件id</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet]
|
|
|
public async Task<FileStreamResult> DownSchemeFile(string id)
|
|
|
{
|
|
|
var templateInfo = await _app.GetEntity(id);
|
|
|
var fileds = await _app.GetFieldList(id);
|
|
|
|
|
|
//设置导出格式
|
|
|
ExcelConfig excelconfig = new ExcelConfig();
|
|
|
excelconfig.FileName = templateInfo.Name + ".xls";
|
|
|
excelconfig.IsAllSizeColumn = true;
|
|
|
excelconfig.ColumnEntity = new List<ColumnModel>();
|
|
|
//表头
|
|
|
DataTable dt = new DataTable();
|
|
|
foreach (var col in fileds)
|
|
|
{
|
|
|
if (col.RelationType != 1 && col.RelationType != 4 && col.RelationType != 5 && col.RelationType != 6 && col.RelationType != 7)
|
|
|
{
|
|
|
excelconfig.ColumnEntity.Add(new ColumnModel()
|
|
|
{
|
|
|
Column = col.Name,
|
|
|
ExcelColumn = col.ColName,
|
|
|
Alignment = "center",
|
|
|
});
|
|
|
dt.Columns.Add(col.Name, typeof(string));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return File(ExcelHelper.ExportMemoryStream(dt, excelconfig), "application/ms-excel", excelconfig.FileName);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// excel文件导入(通用)
|
|
|
/// </summary>
|
|
|
/// <param name="templateId">模板Id</param>
|
|
|
/// <param name="fileId">文件主键</param>
|
|
|
/// <param name="chunks">分片数</param>
|
|
|
/// <param name="ext">文件扩展名</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost]
|
|
|
public async Task<Response<bool>> ExecuteImportExcel(string templateId, string path)
|
|
|
{
|
|
|
var result = new Response<bool>();
|
|
|
try
|
|
|
{
|
|
|
// 获取excel文件数据(暂时只支持但sheet导入,后续升级)
|
|
|
DataTable dt = ExcelHelper.ExcelImport(path);
|
|
|
var res2 = await _app.ImportTable(templateId, dt);
|
|
|
var data = new
|
|
|
{
|
|
|
Success = res2.snum,
|
|
|
Fail = res2.fnum,
|
|
|
data = res2.elist
|
|
|
};
|
|
|
result.Result = true;
|
|
|
return result;
|
|
|
}
|
|
|
catch (Exception ex) { }
|
|
|
{
|
|
|
result.Result = false;
|
|
|
result.Message = "导入数据失败!";
|
|
|
return result;
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
}
|
|
|
}
|