通用Excel导入处理

master
xiaochanghai 5 months ago
parent a28259bace
commit fa2508b790
  1. 3
      Tiobon.Core.Common/Attribute/QueryFilter.cs
  2. 31
      Tiobon.Core.Common/Helper/FileHelper.cs
  3. 17
      Tiobon.Core.Common/Helper/UtilHelper.cs
  4. 295
      Tiobon.Core.DataAccess/ReportHelper.cs
  5. 36
      Tiobon.Core.Services/BASE/BaseServices.cs
  6. 281
      Tiobon.Core.Services/Ghrh/Ghrh_HumanRequestServices.cs
  7. 7
      Tiobon.Core/Tiobon.Core.xml

@ -205,8 +205,9 @@ public class QueryExportColumn
public string elementType { get; set; }
public string commentText { get; set; }
public string dataSourceType { get; set; }
public int? dataSourceId { get; set; }
}
public class QueryExportReturn

@ -1,12 +1,10 @@
using System;
using System.IO;
using System.Linq;
using System.IO;
using System.Text;
namespace Tiobon.Core.Common.Helper
namespace Tiobon.Core.Common.Helper;
public class FileHelper : IDisposable
{
public class FileHelper : IDisposable
{
private bool _alreadyDispose = false;
@ -407,5 +405,26 @@ namespace Tiobon.Core.Common.Helper
}
}
#endregion
#region 获取文件根目录
/// <summary>
/// 获取文件根目录
/// </summary>
/// <returns></returns>
public static string GetPhysicsPath() => $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot";
#endregion
#region 创建文件夹
/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="path"></param>
public static void CreateDirectory(string path)
{
var physicsPath = GetPhysicsPath();
if (!Directory.Exists(physicsPath + path))
Directory.CreateDirectory(physicsPath + path);
}
#endregion
}

@ -1,12 +1,13 @@
using Newtonsoft.Json;
using SqlSugar;
namespace Tiobon.Core
namespace Tiobon.Core;
/// <summary>
///
/// </summary>
public static class UtilHelper
{
/// <summary>
///
/// </summary>
public static class UtilHelper
{
/// <summary>
///
/// </summary>
@ -330,5 +331,7 @@ namespace Tiobon.Core
{
return entity == null;
}
}
public static long GetSysId() => SnowFlakeSingle.instance.getID();
}

@ -1,6 +1,8 @@

using Microsoft.AspNetCore.Http;
using NPOI.HSSF.UserModel;
using NPOI.OpenXmlFormats.Spreadsheet;
using NPOI.POIFS.NIO;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
@ -107,6 +109,7 @@ public static class ReportHelper
}
#endregion
#region 生成导入模板
public static string ImportTemplate(ISqlSugarClient Db, List<QueryExportColumn> tableColumn, DataTable dt, string menuName)
{
@ -389,7 +392,6 @@ public static class ReportHelper
return default(string);
}
public static async Task<string> ImportTemplate1(ISqlSugarClient Db, List<QueryExportColumn> tableColumn, DataTable dt, string menuName)
{
@ -649,6 +651,297 @@ public static class ReportHelper
}
return default(string);
}
#endregion
#region Excel导入
#region 获取Excel导入文件地址
/// <summary>
/// 获取Excel导入文件地址
/// </summary>
/// <param name="file">Excel文件流</param>
/// <param name="menuName">菜单名称</param>
/// <returns>文件地址</returns>
public static async Task<(string, string)> GetImportFilePath(IFormFile file, string menuName)
{
var id = DateTimeHelper.ConvertToSecondString1(DateTime.Now);
var path = $"{$"{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}import{Path.DirectorySeparatorChar}{menuName}{Path.DirectorySeparatorChar}{id}{Path.DirectorySeparatorChar}"}";
FileHelper.CreateDirectory(path);
var filepath = path + file.FileName;
using (var stream = File.Create(FileHelper.GetPhysicsPath() + filepath))
{
await file.CopyToAsync(stream);
}
return (path, filepath);
}
#endregion
#region 读取 excel,默认第一行为标头
/// <summary>
/// 读取 excel,默认第一行为标头
/// </summary>
/// <param name="strFileName">excel 文档路径</param>
/// <returns></returns>
public static DataTable ReadImportExcel(string strFileName, string sheetName = "导入数据")
{
DataTable dt = new();
//HSSFWorkbook hssfworkbook;
IWorkbook hssfworkbook;
ISheet sheet;
using (FileStream file = new FileStream(FileHelper.GetPhysicsPath() + strFileName, FileMode.Open, FileAccess.Read))
{
//hssfworkbook = new HSSFWorkbook(file);
//hssfworkbook = new XSSFWorkbook(file);
hssfworkbook = NPOI.SS.UserModel.WorkbookFactory.Create(file);
}
if (hssfworkbook == null) throw new Exception("未能加载excel");
int sheetCount = hssfworkbook.NumberOfSheets;
if (sheetCount == 0) throw new Exception("未能加载excel");
if (string.IsNullOrEmpty(sheetName))
sheet = hssfworkbook.GetSheetAt(0);
else
{
int sheetIndex = hssfworkbook.GetSheetIndex(sheetName);
if (sheetIndex >= 0)
sheet = hssfworkbook.GetSheetAt(sheetIndex);
else
throw new Exception($"未能找到{sheetName}这个sheet页");
}
var rows = sheet.GetRowEnumerator();
var headerRow = sheet.GetRow(0);
int cellCount = headerRow.LastCellNum;
for (int j = 0; j < cellCount; j++)
{
var cell = headerRow.GetCell(j);
if (!string.IsNullOrWhiteSpace(cell.ToString()))
dt.Columns.Add(cell.ToString());
}
for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
{
var row = sheet.GetRow(i);
if (row is null)
continue;
var dataRow = dt.NewRow();
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (j < 0)
continue;
if (row.GetCell(j) != null)
{
DateTime dateV = DateTime.MinValue;
try
{
dataRow[j] = GetCellValue(row.GetCell(j));
//if (row.GetCell(j).IsDate())
//{
// dateV = row.GetCell(j).DateCellValue;
// dataRow[j] = DateTimeHelper.ConvertToSecondString(dateV);
//}
//else
//{
// dataRow[j] = row.GetCell(j).ToString();
//}
}
catch { }
//if (dateV == DateTime.MinValue)
//{
// dataRow[j] = row.GetCell(j).ToString();
//}
//else
//{
// dataRow[j] = DateTimeHelper.ConvertToSecondString(dateV);
//}
}
}
dt.Rows.Add(dataRow);
}
if (dt.Columns["Comments"] == null)
dt.Columns.Add("Comments", typeof(string));
return dt;
}
#endregion
#region 获取单元格类型
/// <summary>
/// 获取单元格类型
/// </summary>
/// <param name="cell"></param>
/// <returns></returns>
private static string GetCellValue(ICell cell)
{
if (cell == null)
return null;
switch (cell.CellType)
{
case CellType.Blank: //BLANK:
return null;
case CellType.Boolean: //BOOLEAN:
return Convert.ToString(cell.BooleanCellValue);
case CellType.Numeric: //NUMERIC:
if (DateUtil.IsCellDateFormatted(cell))
{
return DateTimeHelper.ConvertToSecondString(cell.DateCellValue);
}
else
{
return Convert.ToString(cell);
}
case CellType.String: //STRING:
return cell.StringCellValue;
case CellType.Error: //ERROR:
return Convert.ToString(cell.ErrorCellValue);
case CellType.Formula: //FORMULA:
default:
return "=" + cell.CellFormula;
}
}
#endregion
#region 获取excel导入初始化Dcit
/// <summary>
/// 获取excel导入初始化Dcit
/// </summary>
/// <returns></returns>
public static Dictionary<string, object> GetDefaultDict()
{
var dict = new Dictionary<string, object>
{
{ "Id", UtilHelper.GetSysId() },
{ "CreateBy", App.User.ID },
{ "CreateTime", DateTime.Now }
};
return dict;
}
#endregion
#region 数据验证
/// <summary>
/// 数据验证
/// </summary>
/// <param name="columns"></param>
/// <param name="dt"></param>
/// <returns></returns>
public static async Task<(List<Dictionary<string, object>>, int)> ValidImportExcel(ISqlSugarClient Db, List<QueryExportColumn> columns, DataTable dt)
{
bool result = false;
int ErrorCount = 0;
var dictList = new List<Dictionary<string, object>>();
for (int i = 0; i < dt.Rows.Count; i++)
{
var dict = GetDefaultDict();
var comments = new List<string>();
for (int j = 0; j < columns.Count; j++)
{
var x = columns[j];
if (!dt.Columns.Contains(x.label))
comments.Add("未查询到【" + x.label + "】列!");
else
{
var value = dt.Rows[i][x.label].ToString();
if (x.required == "true" && value.IsNullOrEmpty())
{
comments.Add(x.label + "不能为空!");
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
}
if (x.dataSourceType.IsNullOrEmpty() && value.IsNotEmptyOrNull())
{
if (x.dataType == "int" || x.dataType == "decimal")
{
try
{
Convert.ToDecimal(value);
}
catch (Exception)
{
comments.Add(x.label + "无效的数字类型!");
}
}
else if (x.dataType == "date")
{
try
{
Convert.ToDateTime(value);
}
catch (Exception)
{
comments.Add(x.label + "无效的日期类型!");
}
}
}
if (value.IsNotEmptyOrNull())
{
if (x.elementType == "Switch")
value = value == "是" ? "true" : "false";
if (x.dataSourceId.IsNotEmptyOrNull() && x.dataSourceType.IsNotEmptyOrNull() && !x.dataSource.StartsWith("OrgTreeWith")
&& !x.dataSource.StartsWith("StaffWith"))
{
if (x.dataSourceType == "CommonList")
{
var commonSql = await Db.Queryable<Ghrs_ListCommonSql>().Where(o => o.ListCommonSqlId == x.dataSourceId).FirstAsync();
if (commonSql != null)
{
string sql = @$"SELECT [value]
FROM ({commonSql.SelectSql}) A
WHERE label = '{value}'";
sql = sql.Replace("{@LangID}", "1");
sql = sql.Replace("{@UserID}", App.User.ID.ObjToString());
sql = sql.Replace("{@KeyWords}", null);
var id2 = await Db.Ado.GetLongAsync(sql);
dict.Add(x.field, id2);
}
}
else if (x.dataSourceType == "ParaDetailNo")
{
var sql = @$"SELECT ParaDetailNo
FROM Ghrs_ParaDetail
WHERE ParaMasterId IN (SELECT ParaMasterId
FROM Ghrs_ParaMaster
WHERE ParaMasterId = {x.dataSourceId.ObjToInt()})
AND IsEnable = 1
AND ParaDetailName = '{value}'";
var id2 = await Db.Ado.GetStringAsync(sql);
dict.Add(x.field, id2);
}
}
else if (x.dataSource == "OrgTreeWithoutPriv")
{
string sql = @$"SELECT DeptID FROM Ghro_Dept WHERE DeptName = '{value}' OR DeptNo = '{value}' OR DeptEname = '{value}'";
var id2 = await Db.Ado.GetLongAsync(sql);
dict.Add(x.field, id2);
}
else
dict.Add(x.field, value);
}
}
}
if (comments.Any())
{
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
ErrorCount++;
result = true;
continue;
}
else
dictList.Add(dict);
}
return (dictList, ErrorCount);
}
#endregion
#endregion
/// <summary>
/// Excel字段下拉
/// </summary>

@ -1,4 +1,6 @@
namespace Tiobon.Core.Services.BASE;
using System.IO;
namespace Tiobon.Core.Services.BASE;
/// <summary>
/// 增删改查基础服务
@ -952,14 +954,30 @@ public class BaseServices<TEntity, TEntityDto, TInsertDto, TEditDto> : IBaseServ
}
public async virtual Task<ServiceResult<ExcelData>> ImportExcel(IFormFile file, string menuName = null, long? MasterId = null)
{
//long id = SnowFlakeSingle.instance.getID();
//var physicsPath = $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot";
//var path = $"{$"{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}import{Path.DirectorySeparatorChar}{id}{Path.DirectorySeparatorChar}"}";
//if (!Directory.Exists(physicsPath + path))
// Directory.CreateDirectory(physicsPath + path);
var data = new ExcelData();
var (path, filepath) = await ReportHelper.GetImportFilePath(file, menuName);
var id1 = SnowFlakeSingle.instance.getID();
string errorFileName = path + SnowFlakeSingle.instance.getID() + FileHelper.GetPostfixStr(filepath);
var dt = ReportHelper.ReadImportExcel(filepath);
var columns = await QueryExportColumn(menuName);
var (dictList, errorCount) = await ReportHelper.ValidImportExcel(Db, columns, dt);
if (errorCount > 0)
{
NPOIHelper.ExportExcel(dt, null, "导入数据", FileHelper.GetPhysicsPath() + errorFileName);
data.filePath = "/Advanced" + errorFileName;
data.ErrorCount = errorCount;
}
else
{
Type entityType = typeof(TEntity);
await Db.Insertable(dictList).AS(entityType.GetEntityTableName()).ExecuteCommandAsync();
data.SuccessCount = dictList.Count;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!");
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}
public async Task<List<QueryExportColumn>> QueryExportColumn(string menuName)
{
@ -972,6 +990,8 @@ public class BaseServices<TEntity, TEntityDto, TInsertDto, TEditDto> : IBaseServ
dbo.FS_GetdataSourceBySet
(dataSource, APIDataSourceType, Ghrs_PageSettingEdit.APIDataSourceID)
dataSource,
APIDataSourceType
dataSourceType,
required,
dataType,
CONVERT (NVARCHAR (1000), '')
@ -979,7 +999,7 @@ public class BaseServices<TEntity, TEntityDto, TInsertDto, TEditDto> : IBaseServ
,
elementType
+ CASE WHEN multipleSelect = 'true' THEN '_multiple' ELSE '' END
elementType --
elementType, APIDataSourceID dataSourceId --
FROM Ghrs_PageSettingEdit
WHERE IsEnable = 1
AND elementType NOT IN ('FnKey', 'PageGroup')

@ -1,5 +1,4 @@
using NPOI.SS.UserModel;
using static Tiobon.Core.Model.Consts;
using static Tiobon.Core.Model.Consts;
namespace Tiobon.Core.Services;
@ -532,218 +531,68 @@ WHERE A.IsEnable = 1 AND A.Id = {entitys[i].YearHumanId}");
#endregion
//#region Excel导入
//public override async Task<ServiceResult<ExcelData>> ImportExcel(IFormFile file, string menuName = null, long? MasterId = null)
//{
// var data = new ExcelData();
// long id = SnowFlakeSingle.instance.getID();
// var physicsPath = $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot";
// var path = $"{$"{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}import{Path.DirectorySeparatorChar}{id}{Path.DirectorySeparatorChar}"}";
// if (!Directory.Exists(physicsPath + path))
// Directory.CreateDirectory(physicsPath + path);
// var filepath = physicsPath + path + file.FileName;
// using (var stream = File.Create(filepath))
// {
// await file.CopyToAsync(stream);
// }
// string extension = Path.GetExtension(filepath);
// bool isExistError = false;
// var id1 = SnowFlakeSingle.instance.getID();
// string errorFileName = path + SnowFlakeSingle.instance.getID() + extension;
// try
// {
// DataTable dt = NPOIHelper.ImportExcel(filepath, "年度人力配置");
// if (dt.Columns["Comments"] == null)
// dt.Columns.Add("Comments", typeof(string));
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// var comments = new List<string>();
// if (!dt.Columns.Contains("年度"))
// {
// comments.Add("未查询到【年度】列!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// if (!dt.Columns.Contains("部门"))
// {
// comments.Add("未查询到【部门】列!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// if (!dt.Columns.Contains("岗位"))
// {
// comments.Add("未查询到【岗位】列!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// if (!dt.Columns.Contains("职称"))
// {
// comments.Add("未查询到【职称】列!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// if (!dt.Columns.Contains("职等"))
// {
// comments.Add("未查询到【职等】列!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// for (int j = 1; j <= 12; j++)
// {
// if (!dt.Columns.Contains(j + "月"))
// {
// comments.Add($"未查询到【{j}月】列!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// }
// var year = dt.Rows[i]["年度"].ToString();
// var deptName = dt.Rows[i]["部门"].ToString();
// var titleName = dt.Rows[i]["岗位"].ToString();
// var jobName = dt.Rows[i]["职称"].ToString();
// var gradeName = dt.Rows[i]["职等"].ToString();
// var dept = await Db.Queryable<Ghro_Dept>().Where(x => x.DeptName == deptName).FirstAsync();
// if (dept == null)
// {
// comments.Add($"无效的部门名称!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// var title = await Db.Queryable<Ghra_Title>().Where(x => x.TitleName == titleName).FirstAsync();
// if (title == null)
// {
// comments.Add($"无效的岗位名称!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// var job = await Db.Queryable<Ghra_Job>().Where(x => x.JobName == jobName).FirstAsync();
// if (job == null)
// {
// comments.Add($"无效的职称名称!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// var grade = await Db.Queryable<Ghra_Grade>().Where(x => x.GradeName == gradeName).FirstAsync();
// if (grade == null)
// {
// comments.Add($"无效的职等名称!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// if (1 == 1)
// {
// var dict = new Dictionary<string, object>
// {
// { "Id", SnowFlakeSingle.Instance.NextId() },
// { "CreateBy", App.User.ID },
// { "CreateTime", DateTime.Now },
// { "WorkState", 1 },
// { "Year", year },
// { "DeptId", dept.DeptID },
// { "TitleId", title.TitleID },
// { "GradeId", grade.GradeID },
// { "JobId", job.JobID }
// };
// for (int j = 1; j <= 12; j++)
// dict.Add("M" + j, dt.Rows[i][j + "月"].ToString());
// await Db.Insertable(dict).AS("Ghrh_YearHumanSettings").ExecuteCommandAsync();
// if (comments.Any())
// {
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
// }
// else
// {
// data.SuccessCount++;
// }
// }
// else
// {
// dt.Rows[i]["Comments"] = "试题在系统中已存在!";
// data.ErrorCount++;
// isExistError = true;
// continue;
// }
// }
// if (isExistError)
// {
// NPOIHelper.ExportExcel(dt, null, "年度人力配置", physicsPath + errorFileName);
// data.filePath = "/Advanced" + errorFileName;
// }
// }
// catch (Exception)
// {
// }
// return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
//}
//public override async Task<ServiceResult<string>> DownloadExcel(string 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(Ghrh_YearHumanSettings);
// var fileName = entityType.GetEntityTableName() + ".xlsx";
// //physicsPath = physicsPath + path + fileName;
// IWorkbook hssfworkbook;
// ISheet sheet;
// using (FileStream file = new FileStream(physicsPath + path + fileName, FileMode.Open, FileAccess.Read))
// {
// //hssfworkbook = new HSSFWorkbook(file);
// //hssfworkbook = new XSSFWorkbook(file);
// hssfworkbook = WorkbookFactory.Create(file);
// }
// //ISheet sheet2 = hssfworkbook.CreateSheet("下拉数据");
// var newFileName = Guid.NewGuid() + ".xlsx";
// int listColIndex = 0;
// var physicsPath1 = physicsPath + path + fileName;
// //if (dataSourceLists.Any())
// // physicsPath1 = physicsPath + path + newFileName;
// var result = ServiceResult<string>.OprateSuccess("人力需求维护_" + DateTimeHelper.ConvertToSecondString1(DateTime.Now) + ".xlsx", physicsPath1);
// return result;
//}
//#endregion
#region Excel导入
public override async Task<ServiceResult<ExcelData>> ImportExcel(IFormFile file, string menuName = null, long? MasterId = null)
{
var data = new ExcelData();
var (path, filepath) = await ReportHelper.GetImportFilePath(file, menuName);
string errorFileName = path + SnowFlakeSingle.instance.getID() + FileHelper.GetPostfixStr(filepath);
var dt = ReportHelper.ReadImportExcel(filepath);
var columns = await QueryExportColumn(menuName);
var (dictList, errorCount) = await ReportHelper.ValidImportExcel(Db, columns, dt);
if (errorCount > 0)
{
NPOIHelper.ExportExcel(dt, null, "导入数据", FileHelper.GetPhysicsPath() + errorFileName);
data.filePath = "/Advanced" + errorFileName;
data.ErrorCount = errorCount;
}
else
{
for (int i = 0; i < dictList.Count; i++)
{
var dict = dictList[i];
if (menuName == "F_ManReqMainten")
dict.Add("Status", "Wait");
else
if (menuName == "F_ManReqMaintenTemporary")
dict.Add("Status", "Temporary");
if (dict.ContainsKey("Quality"))
{
await _ghrh_HumanRequestDetailServices.Add(new InsertGhrh_HumanRequestDetailInput()
{
RequestId = dict["Id"].ObjToLong(),
DetailName = dict["Quality"].ObjToString(),
Source = "Quality"
});
dict.Remove("Quality");
}
if (dict.ContainsKey("Experience"))
{
await _ghrh_HumanRequestDetailServices.Add(new InsertGhrh_HumanRequestDetailInput()
{
RequestId = dict["Id"].ObjToLong(),
DetailName = dict["Experience"].ObjToString(),
Source = "Experience"
});
dict.Remove("Experience");
}
await Db.Insertable(dict).AS("Ghrh_HumanRequest").ExecuteCommandAsync();
var sql = $"SELECT ISNULL(MAX(id)+1,1) FROM Ghrh_HumanRequest WHERE Id !='{dict["Id"]}'";
var id1 = await Db.Ado.GetLongAsync(sql);
sql = $"UPDATE Ghrh_HumanRequest SET Id={id1} WHERE Id ='{dict["Id"]}';" +
$"UPDATE Ghrh_HumanRequestDetail SET RequestId={id1} WHERE RequestId ='{dict["Id"]}';";
await Db.Ado.ExecuteCommandAsync(sql);
}
data.SuccessCount = dictList.Count;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}
#endregion
}

@ -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导入

Loading…
Cancel
Save