通用Excel模板下载(依据表单明细列自动生成,包含下拉值)

master
xiaochanghai 5 months ago
parent f6bc1af902
commit ad4286710d
  1. 13
      Tiobon.Core.Api/Controllers/CommonController.cs
  2. 7
      Tiobon.Core.Api/Tiobon.Core.xml
  3. 34
      Tiobon.Core.DataAccess/ReportHelper.cs
  4. 4
      Tiobon.Core.IServices/ICommonServices.cs
  5. 31
      Tiobon.Core.Services/BASE/BaseServices.cs
  6. 63
      Tiobon.Core.Services/CommonServices.cs

@ -91,19 +91,6 @@ public class CommonController : BaseApiController
}
#endregion
#region 下载导入模板Excel
/// <summary>
/// 下载导入模板Excel
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost, Route("DownImportTemplate")]
public async Task<ServiceResult<QueryExportReturn>> DownImportTemplateAsync([FromBody] QueryExport param)
{
return await _commonServices.DownImportTemplateAsync(param);
}
#endregion
#region Excel导入
/// <summary>
/// Excel导入

@ -281,13 +281,6 @@
<param name="param"></param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.CommonController.DownImportTemplateAsync(Tiobon.Core.Common.QueryExport)">
<summary>
下载导入模板Excel
</summary>
<param name="param"></param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Controllers.CommonController.ImportExcelAsync(Microsoft.AspNetCore.Http.IFormFile,System.String,System.Int32,System.Int32)">
<summary>
Excel导入

@ -16,6 +16,7 @@ using System.Text;
using System.Threading.Tasks;
using Tiobon.Core.Common;
using Tiobon.Core.Common.Extensions;
using Tiobon.Core.Common.Helper;
using Tiobon.Core.Model.Models;
namespace Tiobon.Core.DataAccess;
@ -107,19 +108,24 @@ public static class ReportHelper
#endregion
public static async Task<string> ImportTemplate(ISqlSugarClient Db, List<QueryExportColumn> tableColumn, DataTable dt, string menuName)
public static string ImportTemplate(ISqlSugarClient Db, List<QueryExportColumn> tableColumn, DataTable dt, string menuName)
{
//生成表格
try
{
tableColumn.Insert(0, new QueryExportColumn()
{
field = "SerialNumber",
label = "序号"
});
//生成文件至文件服务器
var fid = SnowFlakeSingle.Instance.NextId();
var filepath = $"{$"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}import{Path.DirectorySeparatorChar}{fid}{Path.DirectorySeparatorChar}"}";
var filepath = $"{$"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}ExcelTemplate{Path.DirectorySeparatorChar}{menuName}{Path.DirectorySeparatorChar}"}";
if (!Directory.Exists(filepath))
Directory.CreateDirectory(filepath);
var fname = $"{menuName}.xlsx";
var fname = $"{menuName}_{DateTimeHelper.ConvertToSecondString1(DateTime.Now)}.xlsx";
var sheetName = "导入数据";
IWorkbook workbook = new XSSFWorkbook();
@ -243,17 +249,17 @@ public static class ReportHelper
var dataSourceLists = GetDataSourceLists(Db, field, dataSource);
var fields = new List<string>()
{
"InOrOut",
"ResumeType",
"ImportanceDegree",
"YearHumanId",
"TitleId"
};
//var fields = new List<string>()
//{
// "InOrOut",
// "ResumeType",
// "ImportanceDegree",
// "YearHumanId",
// "TitleId"
//};
try
{
if (dataSourceLists.Any() && fields.Contains(field))
if (dataSourceLists.Any())
{
//设置数据源的值
IDataValidationConstraint dvConstraint1 = sheet.GetDataValidationHelper().CreateExplicitListConstraint(dataSourceLists.Where(x => x.name.IsNotEmptyOrNull()).Select(x => x.name).ToArray());
@ -362,7 +368,7 @@ public static class ReportHelper
}
}
for (int rowNum = 2; rowNum <= sheet.LastRowNum; rowNum++)
for (int rowNum = 1; rowNum <= sheet.LastRowNum; rowNum++)
{
IRow currentRow = sheet.GetRow(rowNum);

@ -26,9 +26,7 @@ public interface ICommonServices : IBaseServices<RootEntityTkey<int>>
Task<ServiceResult<CommonSelect>> GetSelectAsync(string type, string keyWords);
Task<ServiceResult<QueryExportReturn>> ExportExcelAsync(QueryExport param);
Task<ServiceResult<QueryExportReturn>> DownImportTemplateAsync(QueryExport param);
Task<ServiceResult<QueryExportReturn>> ExportExcelAsync(QueryExport param);
Task<ServiceResult<QueryExportReturn>> ImportExcelAsync(IFormFile file, string menuName, int langId, int userId);

@ -961,13 +961,8 @@ public class BaseServices<TEntity, TEntityDto, TInsertDto, TEditDto> : IBaseServ
return ServiceResult<ExcelData>.OprateSuccess("导入成功!");
}
public virtual async Task<ServiceResult<string>> DownloadExcel(string menuName)
public async Task<List<QueryExportColumn>> QueryExportColumn(string menuName)
{
var tableNmae = string.Empty;
Type entityType = typeof(TEntity);
var sql = $@"SELECT Row_Number ()
OVER (ORDER BY CONVERT (INT, rowNum), CONVERT (INT, colNum))
sortNum,
@ -994,24 +989,22 @@ public class BaseServices<TEntity, TEntityDto, TInsertDto, TEditDto> : IBaseServ
AND elementType ! = 'FileUpload'
AND dataType ! = ''";
var columns = await Db.Ado.SqlQueryAsync<QueryExportColumn>(sql);
return await Db.Ado.SqlQueryAsync<QueryExportColumn>(sql);
}
public virtual async Task<ServiceResult<string>> DownloadExcel(string menuName)
{
var tableNmae = string.Empty;
Type entityType = typeof(TEntity);
var columns = await QueryExportColumn(menuName);
var dt = await Db.Ado.GetDataTableAsync("SELECT TOP 1 * FROM " + entityType.GetEntityTableName() + " WHERE IsEnable=1");
var MenuName = await Db.Ado.GetStringAsync($"SELECT MenuName FROM Ghrs_Menu WHERE MenuNo = '{menuName}'");
//columns = columns.WhereIF(param.exportSet.ExFields.Any(), x => param.exportSet.ExFields.Contains(x.field)).ToList();
var path = await ReportHelper.ImportTemplate(Db, columns, dt, menuName);
//var physicsPath = $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot";
//var path = $"{$"{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}ExcelTemplate{Path.DirectorySeparatorChar}"}";
//if (!Directory.Exists(physicsPath + path))
// Directory.CreateDirectory(physicsPath + path);
//Type entityType = typeof(TEntity);
//var fileName = entityType.GetEntityTableName() + ".xlsx";
//var result = ServiceResult<string>.OprateSuccess(fileName, physicsPath + path + fileName);
var path = ReportHelper.ImportTemplate(Db, columns, dt, menuName);
var result = ServiceResult<string>.OprateSuccess($"{MenuName}_{DateTimeHelper.ConvertToSecondString1(DateTime.Now)}.xlsx", path);
return result;
}
@ -1427,7 +1420,7 @@ ORDER BY SortNo ASC";
default:
break;
}
return conditions;
}
public string DealConditions1(string conditions, string name, string value)

@ -2336,68 +2336,7 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
return new ServiceResult<QueryExportReturn>() { Success = true, Message = "查询成功", Data = result, };
}
#endregion
#region Excel导入模板
/// <summary>
/// Excel导入模板
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
public async Task<ServiceResult<QueryExportReturn>> DownImportTemplateAsync(QueryExport param)
{
var result = new QueryExportReturn();
var tableNmae = string.Empty;
var menuName = string.Empty;
string sql = "select QueryProcedure, EditProcedure, IUDProcedure, MenuName from Ghrs_Menu where MenuNo='{0}'";
sql = string.Format(sql, param.menuName);
var dt = await Db.Ado.GetDataTableAsync(sql);
if (dt.Rows.Count > 0)
{
string queryProcedure = dt.Rows[0]["QueryProcedure"].ToString();
menuName = dt.Rows[0]["MenuName"].ToString();
string[] aaa = queryProcedure.Split('/');
tableNmae = aaa[1];
}
sql = $@"SELECT Row_Number ()
OVER (ORDER BY CONVERT (INT, rowNum), CONVERT (INT, colNum))
sortNum,
field,
[dbo].[FLangKeyToValue] (mkey, 1, label)
label,
dbo.FS_GetdataSourceBySet
(dataSource, APIDataSourceType, Ghrs_PageSettingEdit.APIDataSourceID)
dataSource,
required,
dataType,
CONVERT (NVARCHAR (1000), '')
commentText -- StaffWith
,
elementType
+ CASE WHEN multipleSelect = 'true' THEN '_multiple' ELSE '' END
elementType --
FROM Ghrs_PageSettingEdit
WHERE IsEnable = 1
AND elementType NOT IN ('FnKey', 'PageGroup')
AND pageNo = 'F_Training_Course'
--and editable = 'true'
AND defaultHidden ! = 'true'
AND elementType ! = 'FileUpload'
AND dataType ! = ''";
var columns = await Db.Ado.SqlQueryAsync<QueryExportColumn>(sql);
columns = columns.WhereIF(param.exportSet.ExFields.Any(), x => param.exportSet.ExFields.Contains(x.field)).ToList();
dt = await Db.Ado.GetDataTableAsync("SELECT * FROM " + tableNmae + " WHERE IsEnable=1");
await ReportHelper.ImportTemplate(Db, columns, dt, menuName);
return new ServiceResult<QueryExportReturn>() { Success = true, Message = "查询成功", Data = result, };
}
#endregion
#endregion
#region Excel数据导入

Loading…
Cancel
Save