通用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. 2
      Tiobon.Core.IServices/ICommonServices.cs
  5. 29
      Tiobon.Core.Services/BASE/BaseServices.cs
  6. 61
      Tiobon.Core.Services/CommonServices.cs

@ -91,19 +91,6 @@ public class CommonController : BaseApiController
} }
#endregion #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导入 #region Excel导入
/// <summary> /// <summary>
/// Excel导入 /// Excel导入

@ -281,13 +281,6 @@
<param name="param"></param> <param name="param"></param>
<returns></returns> <returns></returns>
</member> </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)"> <member name="M:Tiobon.Core.Controllers.CommonController.ImportExcelAsync(Microsoft.AspNetCore.Http.IFormFile,System.String,System.Int32,System.Int32)">
<summary> <summary>
Excel导入 Excel导入

@ -16,6 +16,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Tiobon.Core.Common; using Tiobon.Core.Common;
using Tiobon.Core.Common.Extensions; using Tiobon.Core.Common.Extensions;
using Tiobon.Core.Common.Helper;
using Tiobon.Core.Model.Models; using Tiobon.Core.Model.Models;
namespace Tiobon.Core.DataAccess; namespace Tiobon.Core.DataAccess;
@ -107,19 +108,24 @@ public static class ReportHelper
#endregion #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 try
{ {
tableColumn.Insert(0, new QueryExportColumn()
{
field = "SerialNumber",
label = "序号"
});
//生成文件至文件服务器 //生成文件至文件服务器
var fid = SnowFlakeSingle.Instance.NextId(); 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)) if (!Directory.Exists(filepath))
Directory.CreateDirectory(filepath); Directory.CreateDirectory(filepath);
var fname = $"{menuName}.xlsx";
var fname = $"{menuName}_{DateTimeHelper.ConvertToSecondString1(DateTime.Now)}.xlsx";
var sheetName = "导入数据"; var sheetName = "导入数据";
IWorkbook workbook = new XSSFWorkbook(); IWorkbook workbook = new XSSFWorkbook();
@ -243,17 +249,17 @@ public static class ReportHelper
var dataSourceLists = GetDataSourceLists(Db, field, dataSource); var dataSourceLists = GetDataSourceLists(Db, field, dataSource);
var fields = new List<string>() //var fields = new List<string>()
{ //{
"InOrOut", // "InOrOut",
"ResumeType", // "ResumeType",
"ImportanceDegree", // "ImportanceDegree",
"YearHumanId", // "YearHumanId",
"TitleId" // "TitleId"
}; //};
try 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()); 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); IRow currentRow = sheet.GetRow(rowNum);

@ -28,8 +28,6 @@ public interface ICommonServices : IBaseServices<RootEntityTkey<int>>
Task<ServiceResult<QueryExportReturn>> ExportExcelAsync(QueryExport param); Task<ServiceResult<QueryExportReturn>> ExportExcelAsync(QueryExport param);
Task<ServiceResult<QueryExportReturn>> DownImportTemplateAsync(QueryExport param);
Task<ServiceResult<QueryExportReturn>> ImportExcelAsync(IFormFile file, string menuName, int langId, int userId); Task<ServiceResult<QueryExportReturn>> ImportExcelAsync(IFormFile file, string menuName, int langId, int userId);
Task<ServiceResult<FlowReturn>> GetFlowInfoAsync(FlowParam param); Task<ServiceResult<FlowReturn>> GetFlowInfoAsync(FlowParam param);

@ -961,13 +961,8 @@ public class BaseServices<TEntity, TEntityDto, TInsertDto, TEditDto> : IBaseServ
return ServiceResult<ExcelData>.OprateSuccess("导入成功!"); 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 () var sql = $@"SELECT Row_Number ()
OVER (ORDER BY CONVERT (INT, rowNum), CONVERT (INT, colNum)) OVER (ORDER BY CONVERT (INT, rowNum), CONVERT (INT, colNum))
sortNum, sortNum,
@ -994,24 +989,22 @@ public class BaseServices<TEntity, TEntityDto, TInsertDto, TEditDto> : IBaseServ
AND elementType ! = 'FileUpload' AND elementType ! = 'FileUpload'
AND dataType ! = ''"; 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 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}'"); 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(); //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 path = 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 result = ServiceResult<string>.OprateSuccess($"{MenuName}_{DateTimeHelper.ConvertToSecondString1(DateTime.Now)}.xlsx", path); var result = ServiceResult<string>.OprateSuccess($"{MenuName}_{DateTimeHelper.ConvertToSecondString1(DateTime.Now)}.xlsx", path);
return result; return result;
} }

@ -2338,67 +2338,6 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
} }
#endregion #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
#region Excel数据导入 #region Excel数据导入
public async Task<ServiceResult<QueryExportReturn>> ImportExcelAsync(IFormFile file, string menuName, int langId, int userId) public async Task<ServiceResult<QueryExportReturn>> ImportExcelAsync(IFormFile file, string menuName, int langId, int userId)

Loading…
Cancel
Save