简历库导入导出

master
xiaochanghai 6 months ago
parent e260e261eb
commit 4ddbacb327
  1. 3
      Tiobon.Core.Model/View/Ghrh/Ghrh_ResumeEduBG.Dto.View.cs
  2. 1
      Tiobon.Core.Model/View/Ghrh/Ghrh_ResumeHome.Dto.View.cs
  3. 1
      Tiobon.Core.Model/View/Ghrh/Ghrh_ResumeLicence.Dto.View.cs
  4. 1
      Tiobon.Core.Model/View/Ghrh/Ghrh_ResumeTraining.Dto.View.cs
  5. 1
      Tiobon.Core.Model/View/Ghrh/Ghrh_ResumeWorkExp.Dto.View.cs
  6. 2
      Tiobon.Core.Services/CommonServices.cs
  7. 283
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeEduBGServices.cs
  8. 283
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeHomeServices.cs
  9. 281
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeLicenceServices.cs
  10. 3
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs
  11. 286
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeTrainingServices.cs
  12. 283
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeWorkExpServices.cs
  13. 295
      Tiobon.Core/Tiobon.Core.Model.xml
  14. 5
      Tiobon.Core/Tiobon.Core.xml

@ -39,7 +39,8 @@ public class Ghrh_ResumeEduBGDto : Ghrh_ResumeEduBG
public string EndDate1 { get; set; } public string EndDate1 { get; set; }
public string IsGraduateLabel { get; set; } public string IsGraduateLabel { get; set; }
public string StaffName { get; set; }
public List<ResumeAttachment> AttachmentIDs { get; set; } public List<ResumeAttachment> AttachmentIDs { get; set; }
} }

@ -44,6 +44,7 @@ public class Ghrh_ResumeHomeDto : Ghrh_ResumeHome
/// 关系 /// 关系
/// </summary> /// </summary>
public string RelationTypeLabel { get; set; } public string RelationTypeLabel { get; set; }
public string StaffName { get; set; }

@ -43,5 +43,6 @@ public class Ghrh_ResumeLicenceDto : Ghrh_ResumeLicence
/// 失效日 /// 失效日
/// </summary> /// </summary>
public string EndDate1 { get; set; } public string EndDate1 { get; set; }
public string StaffName { get; set; }
} }

@ -48,4 +48,5 @@ public class Ghrh_ResumeTrainingDto : Ghrh_ResumeTraining
/// 合格 /// 合格
/// </summary> /// </summary>
public string IsPassLabel { get; set; } public string IsPassLabel { get; set; }
public string StaffName { get; set; }
} }

@ -40,4 +40,5 @@ public class Ghrh_ResumeWorkExpDto : Ghrh_ResumeWorkExp
public List<ResumeAttachment> AttachmentIDs { get; set; } public List<ResumeAttachment> AttachmentIDs { get; set; }
public string StaffName { get; set; }
} }

@ -812,6 +812,8 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
if (x.multipleSearchValue == "true") if (x.multipleSearchValue == "true")
x.searchColumnDefaultValue = new List<string>(); x.searchColumnDefaultValue = new List<string>();
if (x.isPrimaryKey == "false")
x.isPrimaryKey = null;
}); });
Db.Ado.CommitTran(); Db.Ado.CommitTran();

@ -32,15 +32,49 @@ public class Ghrh_ResumeEduBGServices : BaseServices<Ghrh_ResumeEduBG, Ghrh_Resu
AttachmentName = o.AttachmentName, AttachmentName = o.AttachmentName,
RemarkSz = o.RemarkSz RemarkSz = o.RemarkSz
}).ToList(); }).ToList();
await SetLabel(x);
});
return data;
}
#region 字典映射、全称、单位转换等
/// <summary>
/// 字典映射、全称、单位转换等
/// </summary>
/// <param name="view"></param>
private async Task SetLabel(Ghrh_ResumeEduBGDto x)
{
if (x != null)
{
if (x.IsGraduate != null) if (x.IsGraduate != null)
x.IsGraduateLabel = x.IsGraduate == true ? "是" : "否"; x.IsGraduateLabel = x.IsGraduate == true ? "是" : "否";
x.DegreeLevelLabel = await GetParaLabel("EducationalBGLevel", x.DegreeLevel); x.DegreeLevelLabel = await GetParaLabel("EducationalBGLevel", x.DegreeLevel);
x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate); x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate);
x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate); x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate);
}
}
#endregion
#region 查询
public override async Task<ServicePageResult<Ghrh_ResumeEduBGDto>> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true)
{
var result = await base.QueryFilterPage(filter, condition, IsEnable);
var list = result.result.DT_TableDataT1;
var resumeIds = list.Where(x => x.ResumeId != null).Select(x => x.ResumeId.Value).ToList();
var resumes = await Db.Queryable<Ghrh_Resume>().Where(x => resumeIds.Contains(x.Id)).ToListAsync();
list.ForEach(async x =>
{
await SetLabel(x);
x.StaffName = resumes.Where(o => x.ResumeId == o.Id).FirstOrDefault()?.StaffName;
}); });
return data;
return result;
} }
#endregion
public override async Task<List<long>> Add(List<InsertGhrh_ResumeEduBGInput> listEntity) public override async Task<List<long>> Add(List<InsertGhrh_ResumeEduBGInput> listEntity)
{ {
var result = new List<long>(); var result = new List<long>();
@ -59,4 +93,251 @@ public class Ghrh_ResumeEduBGServices : BaseServices<Ghrh_ResumeEduBG, Ghrh_Resu
} }
return result; return result;
} }
public async Task<List<ResumeFormColumn1>> QueryResumeFormColumn(long resumeTemplateID = 0)
{
resumeTemplateID = await Db.Ado.GetLongAsync("select top 1 Id from Ghrh_ResumeTemplate where IsEnable=1 and IsPublish=1");
var sql = @$"DECLARE @ResumeTemplateID BIGINT = {resumeTemplateID}
SELECT A.ColumnName, A.ResumeInfoColumnName ColumnNameDesc, D.GroupType, A.MapTableName, A.MapColumnName,
A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSourceID
FROM Ghrh_ResumeInfoColumn A
LEFT JOIN Ghrh_ResumeTemplateInfoGroupColumn B
ON B.ResumeInfoColumnID = A.ID
AND B.IsDisplay = 1
AND B.IsEnable = 1
AND A.IsEnable = 1
JOIN Ghrh_ResumeTemplateInfoGroup C
ON B.ResumeTemplateInfoGroupID = C.Id
JOIN Ghrh_ResumeInfoGroup D
ON C.ResumeInfoGroupId = D.ID AND D.IsEnable = 1
WHERE C.ResumeTemplateID = @ResumeTemplateID
AND D.GroupType = 'Education' and b.StaffInfoColumnNo !='AttachmentIDs'
ORDER BY D.GroupType, b.SortNo";
return await Db.Ado.SqlQueryAsync<ResumeFormColumn1>(sql);
}
#region Excel导入
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(Ghre_Teacher);
DataTable dt = new DataTable("TempTable");
var formColumns = await QueryResumeFormColumn();
string fileName = path + SnowFlakeSingle.instance.getID() + ".xlsx";
dt.Columns.Add("姓名", typeof(string));
formColumns
.ToList()
.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
dt.Columns.Add(x.ColumnNameDesc, typeof(string));
});
var dr = dt.NewRow();
dt.Rows.Add(dr);
NPOIHelper.ExportExcel(dt, null, "教育背景", physicsPath + fileName);
var physicsPath1 = physicsPath + fileName;
//if (dataSourceLists.Any())
// physicsPath1 = physicsPath + path + newFileName;
var result = ServiceResult<string>.OprateSuccess("教育背景_" + DateTimeHelper.ConvertToSecondString1(DateTime.Now) + ".xlsx", physicsPath1);
return result;
}
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;
var dt = NPOIHelper.ImportExcel(filepath, "教育背景");
if (dt.Columns["Comments"] == null)
dt.Columns.Add("Comments", typeof(string));
var formColumns = await QueryResumeFormColumn();
for (int i = 0; i < dt.Rows.Count; i++)
{
var comments = new List<string>();
bool isContinue = false;
var dict = new Dictionary<string, object>
{
{ "Id", SnowFlakeSingle.Instance.NextId() },
{ "CreateBy", App.User.ID },
{ "CreateTime", DateTime.Now },
{ "UpdateTime", DateTime.Now }
};
if (!dt.Columns.Contains("姓名"))
{
comments.Add("未查询到【姓名】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
formColumns.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
{
comments.Add("未查询到【" + x.ColumnNameDesc + "】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
});
if (isContinue)
continue;
for (int j = 0; j < formColumns.Count; j++)
{
var column = formColumns[j];
var value = dt.Rows[i][column.ColumnNameDesc].ToString();
if (column.IsRequired == true && value.IsNullOrEmpty())
{
comments.Add(column.ColumnNameDesc + "不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
if (column.DataSourceType.IsNullOrEmpty())
{
if (column.DataType == "int" || column.DataType == "decimal")
{
try
{
Convert.ToInt64(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的数字类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
else if (column.DataType == "date")
{
try
{
Convert.ToDateTime(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的日期类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
}
if (value.IsNotEmptyOrNull())
{
if (column.ColumnType == "Switch")
value = value == "是" ? "true" : "false";
if (column.DataSource.IsNotEmptyOrNull() && column.DataSourceType.IsNotEmptyOrNull())
{
if (column.DataSourceType == "CommonList")
{
var commonSql = await Db.Queryable<Ghrs_ListCommonSql>().Where(x => x.ListCommonSqlId == column.DataSource.ObjToInt()).FirstAsync();
if (commonSql != null)
{
string sql = @$"SELECT [value]
FROM ({commonSql.SelectSql}) A
WHERE label = '{value}'";
sql = sql.Replace("{@LangID}", "1");
var id2 = await Db.Ado.GetLongAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else if (column.DataSourceType == "ParaDetailNo")
{
var sql = @$"SELECT ParaDetailNo
FROM Ghrs_ParaDetail
WHERE ParaMasterId IN (SELECT ParaMasterId
FROM Ghrs_ParaMaster
WHERE ParaMasterId = {column.DataSource.ObjToInt()})
AND IsEnable = 1
AND ParaDetailName = '{value}'";
var id2 = await Db.Ado.GetStringAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else
dict.Add(column.ColumnName, value);
}
}
var StaffName = dt.Rows[i]["姓名"].ToString();
var resume = await Db.Queryable<Ghrh_Resume>().Where(x => x.StaffName == StaffName || x.StaffEname == StaffName).FirstAsync();
if (resume is null)
{
comments.Add("未查询到【" + StaffName + "】相关数据!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
else dict.Add("ResumeId", resume.Id);
if (isExistError)
continue;
try
{
await Db.Insertable(dict).AS("Ghrh_ResumeEduBG").ExecuteCommandAsync();
data.SuccessCount++;
}
catch (Exception E)
{
comments.Add(E.Message);
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "教育背景", physicsPath + errorFileName);
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}
#endregion
} }

@ -21,8 +21,7 @@ public class Ghrh_ResumeHomeServices : BaseServices<Ghrh_ResumeHome, Ghrh_Resume
data.ForEach(async x => data.ForEach(async x =>
{ {
x.GenderLabel = await GetParaLabel("Gender", x.Gender); await SetLabel(x);
x.RelationTypeLabel = await GetParaLabel("SocialRelationType", x.RelationType);
x.AttachmentIDs = attachments x.AttachmentIDs = attachments
.Where(o => o.TableName == x.Id.ToString()) .Where(o => o.TableName == x.Id.ToString())
.Select(o => new ResumeAttachment() .Select(o => new ResumeAttachment()
@ -56,4 +55,284 @@ public class Ghrh_ResumeHomeServices : BaseServices<Ghrh_ResumeHome, Ghrh_Resume
} }
return result; return result;
} }
#region 字典映射、全称、单位转换等
/// <summary>
/// 字典映射、全称、单位转换等
/// </summary>
/// <param name="view"></param>
private async Task SetLabel(Ghrh_ResumeHomeDto x)
{
if (x != null)
{
x.GenderLabel = await GetParaLabel("Gender", x.Gender);
x.RelationTypeLabel = await GetParaLabel("SocialRelationType", x.RelationType);
}
}
#endregion
#region 查询
public override async Task<ServicePageResult<Ghrh_ResumeHomeDto>> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true)
{
var result = await base.QueryFilterPage(filter, condition, IsEnable);
var list = result.result.DT_TableDataT1;
var resumeIds = list.Where(x => x.ResumeId != null).Select(x => x.ResumeId.Value).ToList();
var resumes = await Db.Queryable<Ghrh_Resume>().Where(x => resumeIds.Contains(x.Id)).ToListAsync();
list.ForEach(async x =>
{
await SetLabel(x);
x.StaffName = resumes.Where(o => x.ResumeId == o.Id).FirstOrDefault()?.StaffName;
});
return result;
}
#endregion
#region Excel导入
public async Task<List<ResumeFormColumn1>> QueryResumeFormColumn(long resumeTemplateID = 0)
{
resumeTemplateID = await Db.Ado.GetLongAsync("select top 1 Id from Ghrh_ResumeTemplate where IsEnable=1 and IsPublish=1");
var sql = @$"DECLARE @ResumeTemplateID BIGINT = {resumeTemplateID}
SELECT A.ColumnName, A.ResumeInfoColumnName ColumnNameDesc, D.GroupType, A.MapTableName, A.MapColumnName,
A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSourceID
FROM Ghrh_ResumeInfoColumn A
LEFT JOIN Ghrh_ResumeTemplateInfoGroupColumn B
ON B.ResumeInfoColumnID = A.ID
AND B.IsDisplay = 1
AND B.IsEnable = 1
AND A.IsEnable = 1
JOIN Ghrh_ResumeTemplateInfoGroup C
ON B.ResumeTemplateInfoGroupID = C.Id
JOIN Ghrh_ResumeInfoGroup D
ON C.ResumeInfoGroupId = D.ID AND D.IsEnable = 1
WHERE C.ResumeTemplateID = @ResumeTemplateID
AND D.GroupType = 'Family' and b.StaffInfoColumnNo !='AttachmentIDs'
ORDER BY D.GroupType, b.SortNo";
return await Db.Ado.SqlQueryAsync<ResumeFormColumn1>(sql);
}
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);
DataTable dt = new DataTable("TempTable");
var formColumns = await QueryResumeFormColumn();
string fileName = path + SnowFlakeSingle.instance.getID() + ".xlsx";
dt.Columns.Add("姓名", typeof(string));
formColumns
.ToList()
.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
dt.Columns.Add(x.ColumnNameDesc, typeof(string));
});
var dr = dt.NewRow();
dt.Rows.Add(dr);
NPOIHelper.ExportExcel(dt, null, "社会关系", physicsPath + fileName);
var physicsPath1 = physicsPath + fileName;
//if (dataSourceLists.Any())
// physicsPath1 = physicsPath + path + newFileName;
var result = ServiceResult<string>.OprateSuccess("社会关系_" + DateTimeHelper.ConvertToSecondString1(DateTime.Now) + ".xlsx", physicsPath1);
return result;
}
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;
var dt = NPOIHelper.ImportExcel(filepath, "社会关系");
if (dt.Columns["Comments"] == null)
dt.Columns.Add("Comments", typeof(string));
var formColumns = await QueryResumeFormColumn();
for (int i = 0; i < dt.Rows.Count; i++)
{
var comments = new List<string>();
bool isContinue = false;
var dict = new Dictionary<string, object>
{
{ "Id", SnowFlakeSingle.Instance.NextId() },
{ "CreateBy", App.User.ID },
{ "CreateTime", DateTime.Now },
{ "UpdateTime", DateTime.Now }
};
if (!dt.Columns.Contains("姓名"))
{
comments.Add("未查询到【姓名】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
formColumns.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
{
comments.Add("未查询到【" + x.ColumnNameDesc + "】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
});
if (isContinue)
continue;
for (int j = 0; j < formColumns.Count; j++)
{
var column = formColumns[j];
var value = dt.Rows[i][column.ColumnNameDesc].ToString();
if (column.IsRequired == true && value.IsNullOrEmpty())
{
comments.Add(column.ColumnNameDesc + "不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
if (column.DataSourceType.IsNullOrEmpty())
{
if (column.DataType == "int" || column.DataType == "decimal")
{
try
{
Convert.ToInt64(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的数字类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
else if (column.DataType == "date")
{
try
{
Convert.ToDateTime(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的日期类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
}
if (value.IsNotEmptyOrNull())
{
if (column.ColumnType == "Switch")
value = value == "是" ? "true" : "false";
if (column.DataSource.IsNotEmptyOrNull() && column.DataSourceType.IsNotEmptyOrNull())
{
if (column.DataSourceType == "CommonList")
{
var commonSql = await Db.Queryable<Ghrs_ListCommonSql>().Where(x => x.ListCommonSqlId == column.DataSource.ObjToInt()).FirstAsync();
if (commonSql != null)
{
string sql = @$"SELECT [value]
FROM ({commonSql.SelectSql}) A
WHERE label = '{value}'";
sql = sql.Replace("{@LangID}", "1");
var id2 = await Db.Ado.GetLongAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else if (column.DataSourceType == "ParaDetailNo")
{
var sql = @$"SELECT ParaDetailNo
FROM Ghrs_ParaDetail
WHERE ParaMasterId IN (SELECT ParaMasterId
FROM Ghrs_ParaMaster
WHERE ParaMasterId = {column.DataSource.ObjToInt()})
AND IsEnable = 1
AND ParaDetailName = '{value}'";
var id2 = await Db.Ado.GetStringAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else
dict.Add(column.ColumnName, value);
}
}
var StaffName = dt.Rows[i]["姓名"].ToString();
var resume = await Db.Queryable<Ghrh_Resume>().Where(x => x.StaffName == StaffName || x.StaffEname == StaffName).FirstAsync();
if (resume is null)
{
comments.Add("未查询到【" + StaffName + "】相关数据!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
else dict.Add("ResumeId", resume.Id);
if (isExistError)
continue;
try
{
await Db.Insertable(dict).AS("Ghrh_ResumeHome").ExecuteCommandAsync();
data.SuccessCount++;
}
catch (Exception E)
{
comments.Add(E.Message);
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "社会关系", physicsPath + errorFileName);
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}
#endregion
} }

@ -19,8 +19,9 @@ public class Ghrh_ResumeLicenceServices : BaseServices<Ghrh_ResumeLicence, Ghrh_
var ids = data.Select(x => x.Id.ToString()).ToList(); var ids = data.Select(x => x.Id.ToString()).ToList();
var attachments = await Db.Queryable<Ghrs_Attachment>().Where(x => ids.Contains(x.TableName)).ToListAsync(); var attachments = await Db.Queryable<Ghrs_Attachment>().Where(x => ids.Contains(x.TableName)).ToListAsync();
data.ForEach(x => data.ForEach(async x =>
{ {
await SetLabel(x);
x.AttachmentIDs = attachments x.AttachmentIDs = attachments
.Where(o => o.TableName == x.Id.ToString()) .Where(o => o.TableName == x.Id.ToString())
.Select(o => new ResumeAttachment() .Select(o => new ResumeAttachment()
@ -32,8 +33,6 @@ public class Ghrh_ResumeLicenceServices : BaseServices<Ghrh_ResumeLicence, Ghrh_
AttachmentName = o.AttachmentName, AttachmentName = o.AttachmentName,
RemarkSz = o.RemarkSz RemarkSz = o.RemarkSz
}).ToList(); }).ToList();
x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate);
x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate);
}); });
return data; return data;
@ -56,4 +55,280 @@ public class Ghrh_ResumeLicenceServices : BaseServices<Ghrh_ResumeLicence, Ghrh_
} }
return result; return result;
} }
#region 字典映射、全称、单位转换等
/// <summary>
/// 字典映射、全称、单位转换等
/// </summary>
/// <param name="view"></param>
private async Task SetLabel(Ghrh_ResumeLicenceDto x)
{
if (x != null)
{
x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate);
x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate);
}
}
#endregion
#region 查询
public override async Task<ServicePageResult<Ghrh_ResumeLicenceDto>> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true)
{
var result = await base.QueryFilterPage(filter, condition, IsEnable);
var list = result.result.DT_TableDataT1;
var resumeIds = list.Where(x => x.ResumeId != null).Select(x => x.ResumeId.Value).ToList();
var resumes = await Db.Queryable<Ghrh_Resume>().Where(x => resumeIds.Contains(x.Id)).ToListAsync();
list.ForEach(async x =>
{
await SetLabel(x);
x.StaffName = resumes.Where(o => x.ResumeId == o.Id).FirstOrDefault()?.StaffName;
});
return result;
}
#endregion
#region Excel导入
public async Task<List<ResumeFormColumn1>> QueryResumeFormColumn(long resumeTemplateID = 0)
{
resumeTemplateID = await Db.Ado.GetLongAsync("select top 1 Id from Ghrh_ResumeTemplate where IsEnable=1 and IsPublish=1");
var sql = @$"DECLARE @ResumeTemplateID BIGINT = {resumeTemplateID}
SELECT A.ColumnName, A.ResumeInfoColumnName ColumnNameDesc, D.GroupType, A.MapTableName, A.MapColumnName,
A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSourceID
FROM Ghrh_ResumeInfoColumn A
LEFT JOIN Ghrh_ResumeTemplateInfoGroupColumn B
ON B.ResumeInfoColumnID = A.ID
AND B.IsDisplay = 1
AND B.IsEnable = 1
AND A.IsEnable = 1
JOIN Ghrh_ResumeTemplateInfoGroup C
ON B.ResumeTemplateInfoGroupID = C.Id
JOIN Ghrh_ResumeInfoGroup D
ON C.ResumeInfoGroupId = D.ID AND D.IsEnable = 1
WHERE C.ResumeTemplateID = @ResumeTemplateID
AND D.GroupType = 'Licence' and b.StaffInfoColumnNo !='AttachmentIDs'
ORDER BY D.GroupType, b.SortNo";
return await Db.Ado.SqlQueryAsync<ResumeFormColumn1>(sql);
}
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);
DataTable dt = new DataTable("TempTable");
var formColumns = await QueryResumeFormColumn();
string fileName = path + SnowFlakeSingle.instance.getID() + ".xlsx";
dt.Columns.Add("姓名", typeof(string));
formColumns
.ToList()
.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
dt.Columns.Add(x.ColumnNameDesc, typeof(string));
});
var dr = dt.NewRow();
dt.Rows.Add(dr);
NPOIHelper.ExportExcel(dt, null, "证件", physicsPath + fileName);
var physicsPath1 = physicsPath + fileName;
//if (dataSourceLists.Any())
// physicsPath1 = physicsPath + path + newFileName;
var result = ServiceResult<string>.OprateSuccess("证件_" + DateTimeHelper.ConvertToSecondString1(DateTime.Now) + ".xlsx", physicsPath1);
return result;
}
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;
var dt = NPOIHelper.ImportExcel(filepath, "证件");
if (dt.Columns["Comments"] == null)
dt.Columns.Add("Comments", typeof(string));
var formColumns = await QueryResumeFormColumn();
for (int i = 0; i < dt.Rows.Count; i++)
{
var comments = new List<string>();
bool isContinue = false;
var dict = new Dictionary<string, object>
{
{ "Id", SnowFlakeSingle.Instance.NextId() },
{ "CreateBy", App.User.ID },
{ "CreateTime", DateTime.Now },
{ "UpdateTime", DateTime.Now }
};
if (!dt.Columns.Contains("姓名"))
{
comments.Add("未查询到【姓名】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
formColumns.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
{
comments.Add("未查询到【" + x.ColumnNameDesc + "】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
});
if (isContinue)
continue;
for (int j = 0; j < formColumns.Count; j++)
{
var column = formColumns[j];
var value = dt.Rows[i][column.ColumnNameDesc].ToString();
if (column.IsRequired == true && value.IsNullOrEmpty())
{
comments.Add(column.ColumnNameDesc + "不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
if (column.DataSourceType.IsNullOrEmpty())
{
if (column.DataType == "int" || column.DataType == "decimal")
{
try
{
Convert.ToInt64(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的数字类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
else if (column.DataType == "date")
{
try
{
Convert.ToDateTime(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的日期类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
}
if (value.IsNotEmptyOrNull())
{
if (column.ColumnType == "Switch")
value = value == "是" ? "true" : "false";
if (column.DataSource.IsNotEmptyOrNull() && column.DataSourceType.IsNotEmptyOrNull())
{
if (column.DataSourceType == "CommonList")
{
var commonSql = await Db.Queryable<Ghrs_ListCommonSql>().Where(x => x.ListCommonSqlId == column.DataSource.ObjToInt()).FirstAsync();
if (commonSql != null)
{
string sql = @$"SELECT [value]
FROM ({commonSql.SelectSql}) A
WHERE label = '{value}'";
sql = sql.Replace("{@LangID}", "1");
var id2 = await Db.Ado.GetLongAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else if (column.DataSourceType == "ParaDetailNo")
{
var sql = @$"SELECT ParaDetailNo
FROM Ghrs_ParaDetail
WHERE ParaMasterId IN (SELECT ParaMasterId
FROM Ghrs_ParaMaster
WHERE ParaMasterId = {column.DataSource.ObjToInt()})
AND IsEnable = 1
AND ParaDetailName = '{value}'";
var id2 = await Db.Ado.GetStringAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else
dict.Add(column.ColumnName, value);
}
}
var StaffName = dt.Rows[i]["姓名"].ToString();
var resume = await Db.Queryable<Ghrh_Resume>().Where(x => x.StaffName == StaffName || x.StaffEname == StaffName).FirstAsync();
if (resume is null)
{
comments.Add("未查询到【" + StaffName + "】相关数据!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
else dict.Add("ResumeId", resume.Id);
if (isExistError)
continue;
try
{
await Db.Insertable(dict).AS("Ghrh_ResumeLicence").ExecuteCommandAsync();
data.SuccessCount++;
}
catch (Exception E)
{
comments.Add(E.Message);
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "证件", physicsPath + errorFileName);
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}
#endregion
} }

@ -1,5 +1,4 @@
using Amazon.Runtime.Internal.Transform; using DinkToPdf;
using DinkToPdf;
using DinkToPdf.Contracts; using DinkToPdf.Contracts;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;

@ -19,12 +19,9 @@ public class Ghrh_ResumeTrainingServices : BaseServices<Ghrh_ResumeTraining, Ghr
var ids = data.Select(x => x.Id.ToString()).ToList(); var ids = data.Select(x => x.Id.ToString()).ToList();
var attachments = await Db.Queryable<Ghrs_Attachment>().Where(x => ids.Contains(x.TableName)).ToListAsync(); var attachments = await Db.Queryable<Ghrs_Attachment>().Where(x => ids.Contains(x.TableName)).ToListAsync();
data.ForEach(x => data.ForEach(async x =>
{ {
x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate); await SetLabel(x);
x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate);
if (x.IsPass != null)
x.IsPassLabel = x.IsPass == true ? "是" : "否";
x.AttachmentIDs = attachments x.AttachmentIDs = attachments
.Where(o => o.TableName == x.Id.ToString()) .Where(o => o.TableName == x.Id.ToString())
.Select(o => new ResumeAttachment() .Select(o => new ResumeAttachment()
@ -40,6 +37,41 @@ public class Ghrh_ResumeTrainingServices : BaseServices<Ghrh_ResumeTraining, Ghr
return data; return data;
} }
#region 字典映射、全称、单位转换等
/// <summary>
/// 字典映射、全称、单位转换等
/// </summary>
/// <param name="view"></param>
private async Task SetLabel(Ghrh_ResumeTrainingDto x)
{
if (x != null)
{
x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate);
x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate);
if (x.IsPass != null)
x.IsPassLabel = x.IsPass == true ? "是" : "否";
}
}
#endregion
#region 查询
public override async Task<ServicePageResult<Ghrh_ResumeTrainingDto>> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true)
{
var result = await base.QueryFilterPage(filter, condition, IsEnable);
var list = result.result.DT_TableDataT1;
var resumeIds = list.Where(x => x.ResumeId != null).Select(x => x.ResumeId.Value).ToList();
var resumes = await Db.Queryable<Ghrh_Resume>().Where(x => resumeIds.Contains(x.Id)).ToListAsync();
list.ForEach(async x =>
{
await SetLabel(x);
x.StaffName = resumes.Where(o => x.ResumeId == o.Id).FirstOrDefault()?.StaffName;
});
return result;
}
#endregion
public override async Task<List<long>> Add(List<InsertGhrh_ResumeTrainingInput> listEntity) public override async Task<List<long>> Add(List<InsertGhrh_ResumeTrainingInput> listEntity)
{ {
var result = new List<long>(); var result = new List<long>();
@ -58,4 +90,248 @@ public class Ghrh_ResumeTrainingServices : BaseServices<Ghrh_ResumeTraining, Ghr
} }
return result; return result;
} }
#region Excel导入
public async Task<List<ResumeFormColumn1>> QueryResumeFormColumn(long resumeTemplateID = 0)
{
resumeTemplateID = await Db.Ado.GetLongAsync("select top 1 Id from Ghrh_ResumeTemplate where IsEnable=1 and IsPublish=1");
var sql = @$"DECLARE @ResumeTemplateID BIGINT = {resumeTemplateID}
SELECT A.ColumnName, A.ResumeInfoColumnName ColumnNameDesc, D.GroupType, A.MapTableName, A.MapColumnName,
A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSourceID
FROM Ghrh_ResumeInfoColumn A
LEFT JOIN Ghrh_ResumeTemplateInfoGroupColumn B
ON B.ResumeInfoColumnID = A.ID
AND B.IsDisplay = 1
AND B.IsEnable = 1
AND A.IsEnable = 1
JOIN Ghrh_ResumeTemplateInfoGroup C
ON B.ResumeTemplateInfoGroupID = C.Id
JOIN Ghrh_ResumeInfoGroup D
ON C.ResumeInfoGroupId = D.ID AND D.IsEnable = 1
WHERE C.ResumeTemplateID = @ResumeTemplateID
AND D.GroupType = 'Training' and b.StaffInfoColumnNo !='AttachmentIDs'
ORDER BY D.GroupType, b.SortNo";
return await Db.Ado.SqlQueryAsync<ResumeFormColumn1>(sql);
}
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);
DataTable dt = new DataTable("TempTable");
var formColumns = await QueryResumeFormColumn();
string fileName = path + SnowFlakeSingle.instance.getID() + ".xlsx";
dt.Columns.Add("姓名", typeof(string));
formColumns
.ToList()
.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
dt.Columns.Add(x.ColumnNameDesc, typeof(string));
});
var dr = dt.NewRow();
dt.Rows.Add(dr);
NPOIHelper.ExportExcel(dt, null, "培训记录", physicsPath + fileName);
var physicsPath1 = physicsPath + fileName;
//if (dataSourceLists.Any())
// physicsPath1 = physicsPath + path + newFileName;
var result = ServiceResult<string>.OprateSuccess("培训记录_" + DateTimeHelper.ConvertToSecondString1(DateTime.Now) + ".xlsx", physicsPath1);
return result;
}
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;
var dt = NPOIHelper.ImportExcel(filepath, "培训记录");
if (dt.Columns["Comments"] == null)
dt.Columns.Add("Comments", typeof(string));
var formColumns = await QueryResumeFormColumn();
for (int i = 0; i < dt.Rows.Count; i++)
{
var comments = new List<string>();
bool isContinue = false;
var dict = new Dictionary<string, object>
{
{ "Id", SnowFlakeSingle.Instance.NextId() },
{ "CreateBy", App.User.ID },
{ "CreateTime", DateTime.Now },
{ "UpdateTime", DateTime.Now }
};
if (!dt.Columns.Contains("姓名"))
{
comments.Add("未查询到【姓名】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
formColumns.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
{
comments.Add("未查询到【" + x.ColumnNameDesc + "】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
});
if (isContinue)
continue;
for (int j = 0; j < formColumns.Count; j++)
{
var column = formColumns[j];
var value = dt.Rows[i][column.ColumnNameDesc].ToString();
if (column.IsRequired == true && value.IsNullOrEmpty())
{
comments.Add(column.ColumnNameDesc + "不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
if (column.DataSourceType.IsNullOrEmpty())
{
if (column.DataType == "int" || column.DataType == "decimal")
{
try
{
Convert.ToInt64(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的数字类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
else if (column.DataType == "date")
{
try
{
Convert.ToDateTime(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的日期类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
}
if (value.IsNotEmptyOrNull())
{
if (column.ColumnType == "Switch")
value = value == "是" ? "true" : "false";
if (column.DataSource.IsNotEmptyOrNull() && column.DataSourceType.IsNotEmptyOrNull())
{
if (column.DataSourceType == "CommonList")
{
var commonSql = await Db.Queryable<Ghrs_ListCommonSql>().Where(x => x.ListCommonSqlId == column.DataSource.ObjToInt()).FirstAsync();
if (commonSql != null)
{
string sql = @$"SELECT [value]
FROM ({commonSql.SelectSql}) A
WHERE label = '{value}'";
sql = sql.Replace("{@LangID}", "1");
var id2 = await Db.Ado.GetLongAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else if (column.DataSourceType == "ParaDetailNo")
{
var sql = @$"SELECT ParaDetailNo
FROM Ghrs_ParaDetail
WHERE ParaMasterId IN (SELECT ParaMasterId
FROM Ghrs_ParaMaster
WHERE ParaMasterId = {column.DataSource.ObjToInt()})
AND IsEnable = 1
AND ParaDetailName = '{value}'";
var id2 = await Db.Ado.GetStringAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else
dict.Add(column.ColumnName, value);
}
}
var StaffName = dt.Rows[i]["姓名"].ToString();
var resume = await Db.Queryable<Ghrh_Resume>().Where(x => x.StaffName == StaffName || x.StaffEname == StaffName).FirstAsync();
if (resume is null)
{
comments.Add("未查询到【" + StaffName + "】相关数据!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
else dict.Add("ResumeId", resume.Id);
if (isExistError)
continue;
try
{
await Db.Insertable(dict).AS("Ghrh_ResumeTraining").ExecuteCommandAsync();
data.SuccessCount++;
}
catch (Exception E)
{
comments.Add(E.Message);
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "培训记录", physicsPath + errorFileName);
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}
#endregion
} }

@ -19,8 +19,9 @@ public class Ghrh_ResumeWorkExpServices : BaseServices<Ghrh_ResumeWorkExp, Ghrh_
var ids = data.Select(x => x.Id.ToString()).ToList(); var ids = data.Select(x => x.Id.ToString()).ToList();
var attachments = await Db.Queryable<Ghrs_Attachment>().Where(x => ids.Contains(x.TableName)).ToListAsync(); var attachments = await Db.Queryable<Ghrs_Attachment>().Where(x => ids.Contains(x.TableName)).ToListAsync();
data.ForEach(x => data.ForEach(async x =>
{ {
await SetLabel(x);
x.AttachmentIDs = attachments x.AttachmentIDs = attachments
.Where(o => o.TableName == x.Id.ToString()) .Where(o => o.TableName == x.Id.ToString())
.Select(o => new ResumeAttachment() .Select(o => new ResumeAttachment()
@ -32,8 +33,6 @@ public class Ghrh_ResumeWorkExpServices : BaseServices<Ghrh_ResumeWorkExp, Ghrh_
AttachmentName = o.AttachmentName, AttachmentName = o.AttachmentName,
RemarkSz = o.RemarkSz RemarkSz = o.RemarkSz
}).ToList(); }).ToList();
x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate);
x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate);
}); });
return data; return data;
@ -56,4 +55,282 @@ public class Ghrh_ResumeWorkExpServices : BaseServices<Ghrh_ResumeWorkExp, Ghrh_
} }
return result; return result;
} }
#region 字典映射、全称、单位转换等
/// <summary>
/// 字典映射、全称、单位转换等
/// </summary>
/// <param name="view"></param>
private async Task SetLabel(Ghrh_ResumeWorkExpDto x)
{
if (x != null)
{
x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate);
x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate);
}
}
#endregion
#region 查询
public override async Task<ServicePageResult<Ghrh_ResumeWorkExpDto>> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true)
{
var result = await base.QueryFilterPage(filter, condition, IsEnable);
var list = result.result.DT_TableDataT1;
var resumeIds = list.Where(x => x.ResumeId != null).Select(x => x.ResumeId.Value).ToList();
var resumes = await Db.Queryable<Ghrh_Resume>().Where(x => resumeIds.Contains(x.Id)).ToListAsync();
list.ForEach(async x =>
{
await SetLabel(x);
x.StaffName = resumes.Where(o => x.ResumeId == o.Id).FirstOrDefault()?.StaffName;
});
return result;
}
#endregion
#region Excel导入
public async Task<List<ResumeFormColumn1>> QueryResumeFormColumn(long resumeTemplateID = 0)
{
resumeTemplateID = await Db.Ado.GetLongAsync("select top 1 Id from Ghrh_ResumeTemplate where IsEnable=1 and IsPublish=1");
var sql = @$"DECLARE @ResumeTemplateID BIGINT = {resumeTemplateID}
SELECT A.ColumnName, A.ResumeInfoColumnName ColumnNameDesc, D.GroupType, A.MapTableName, A.MapColumnName,
A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSourceID
FROM Ghrh_ResumeInfoColumn A
LEFT JOIN Ghrh_ResumeTemplateInfoGroupColumn B
ON B.ResumeInfoColumnID = A.ID
AND B.IsDisplay = 1
AND B.IsEnable = 1
AND A.IsEnable = 1
JOIN Ghrh_ResumeTemplateInfoGroup C
ON B.ResumeTemplateInfoGroupID = C.Id
JOIN Ghrh_ResumeInfoGroup D
ON C.ResumeInfoGroupId = D.ID AND D.IsEnable = 1
WHERE C.ResumeTemplateID = @ResumeTemplateID
AND D.GroupType = 'WorkExp' and b.StaffInfoColumnNo !='AttachmentIDs'
ORDER BY D.GroupType, b.SortNo";
return await Db.Ado.SqlQueryAsync<ResumeFormColumn1>(sql);
}
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);
DataTable dt = new DataTable("TempTable");
var formColumns = await QueryResumeFormColumn();
string fileName = path + SnowFlakeSingle.instance.getID() + ".xlsx";
dt.Columns.Add("姓名", typeof(string));
formColumns
.ToList()
.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
dt.Columns.Add(x.ColumnNameDesc, typeof(string));
});
var dr = dt.NewRow();
dt.Rows.Add(dr);
NPOIHelper.ExportExcel(dt, null, "工作经历", physicsPath + fileName);
var physicsPath1 = physicsPath + fileName;
//if (dataSourceLists.Any())
// physicsPath1 = physicsPath + path + newFileName;
var result = ServiceResult<string>.OprateSuccess("工作经历_" + DateTimeHelper.ConvertToSecondString1(DateTime.Now) + ".xlsx", physicsPath1);
return result;
}
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;
var dt = NPOIHelper.ImportExcel(filepath, "工作经历");
if (dt.Columns["Comments"] == null)
dt.Columns.Add("Comments", typeof(string));
var formColumns = await QueryResumeFormColumn();
for (int i = 0; i < dt.Rows.Count; i++)
{
var comments = new List<string>();
bool isContinue = false;
var dict = new Dictionary<string, object>
{
{ "Id", SnowFlakeSingle.Instance.NextId() },
{ "CreateBy", App.User.ID },
{ "CreateTime", DateTime.Now },
{ "UpdateTime", DateTime.Now }
};
if (!dt.Columns.Contains("姓名"))
{
comments.Add("未查询到【姓名】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
formColumns.ForEach(x =>
{
if (!dt.Columns.Contains(x.ColumnNameDesc))
{
comments.Add("未查询到【" + x.ColumnNameDesc + "】列!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
});
if (isContinue)
continue;
for (int j = 0; j < formColumns.Count; j++)
{
var column = formColumns[j];
var value = dt.Rows[i][column.ColumnNameDesc].ToString();
if (column.IsRequired == true && value.IsNullOrEmpty())
{
comments.Add(column.ColumnNameDesc + "不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
if (column.DataSourceType.IsNullOrEmpty())
{
if (column.DataType == "int" || column.DataType == "decimal")
{
try
{
Convert.ToInt64(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的数字类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
else if (column.DataType == "date")
{
try
{
Convert.ToDateTime(value);
}
catch (Exception)
{
comments.Add(column.ColumnNameDesc + "无效的日期类型!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
}
if (value.IsNotEmptyOrNull())
{
if (column.ColumnType == "Switch")
value = value == "是" ? "true" : "false";
if (column.DataSource.IsNotEmptyOrNull() && column.DataSourceType.IsNotEmptyOrNull())
{
if (column.DataSourceType == "CommonList")
{
var commonSql = await Db.Queryable<Ghrs_ListCommonSql>().Where(x => x.ListCommonSqlId == column.DataSource.ObjToInt()).FirstAsync();
if (commonSql != null)
{
string sql = @$"SELECT [value]
FROM ({commonSql.SelectSql}) A
WHERE label = '{value}'";
sql = sql.Replace("{@LangID}", "1");
var id2 = await Db.Ado.GetLongAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else if (column.DataSourceType == "ParaDetailNo")
{
var sql = @$"SELECT ParaDetailNo
FROM Ghrs_ParaDetail
WHERE ParaMasterId IN (SELECT ParaMasterId
FROM Ghrs_ParaMaster
WHERE ParaMasterId = {column.DataSource.ObjToInt()})
AND IsEnable = 1
AND ParaDetailName = '{value}'";
var id2 = await Db.Ado.GetStringAsync(sql);
dict.Add(column.ColumnName, id2);
}
}
else
dict.Add(column.ColumnName, value);
}
}
var StaffName = dt.Rows[i]["姓名"].ToString();
var resume = await Db.Queryable<Ghrh_Resume>().Where(x => x.StaffName == StaffName || x.StaffEname == StaffName).FirstAsync();
if (resume is null)
{
comments.Add("未查询到【" + StaffName + "】相关数据!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
isContinue = true;
}
else dict.Add("ResumeId", resume.Id);
if (isExistError)
continue;
try
{
await Db.Insertable(dict).AS("Ghrh_ResumeWorkExp").ExecuteCommandAsync();
data.SuccessCount++;
}
catch (Exception E)
{
comments.Add(E.Message);
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
}
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "工作经历", physicsPath + errorFileName);
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}
#endregion
} }

@ -11368,6 +11368,136 @@
TableID TableID
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase">
<summary>
Ghrs_ListCommonSql (Dto.Base)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.ListCommonSqlId">
<summary>
ListCommonSqlId
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.ListCommonSqlNo">
<summary>
ListCommonSqlNo
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.ListCommonSqlName">
<summary>
ListCommonSqlName
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.ListCommonSqlType">
<summary>
ListCommonSqlType
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.ListCommonSqlType2">
<summary>
ListCommonSqlType2
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.ListComment">
<summary>
ListComment
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.SelectSql">
<summary>
SelectSql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.JsonTitle">
<summary>
JsonTitle
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.WhereSql">
<summary>
WhereSql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.OrderBySql">
<summary>
OrderBySql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.SqlTopCountSql">
<summary>
SqlTopCountSql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.SqlGetIDSql">
<summary>
SqlGetIDSql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.RemarkSz">
<summary>
RemarkSz
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.SortNo">
<summary>
SortNo
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.IsDefault">
<summary>
IsDefault
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.Reverse1">
<summary>
Reverse1
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.Reverse2">
<summary>
Reverse2
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.Reverse3">
<summary>
Reverse3
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.Reverse4">
<summary>
Reverse4
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.Reverse5">
<summary>
Reverse5
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.Reverse6">
<summary>
Reverse6
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.Reverse7">
<summary>
Reverse7
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.Reverse8">
<summary>
Reverse8
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.Reverse9">
<summary>
Reverse9
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlBase.SqlIDToName">
<summary>
SqlIDToName
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghrs_MailOutboxBase"> <member name="T:Tiobon.Core.Model.Models.Ghrs_MailOutboxBase">
<summary> <summary>
Ghrs_MailOutbox (Dto.Base) Ghrs_MailOutbox (Dto.Base)
@ -12272,6 +12402,11 @@
学历编号 学历编号
</summary> </summary>
</member> </member>
<member name="P:Tiobon.Core.Model.Models.Ghrz_Shihua_OA_EmploymentBase.LegalCompanyNo">
<summary>
LegalCompanyNo
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrz_Shihua_OA_EmploymentBase.PeriodMasterNo"> <member name="P:Tiobon.Core.Model.Models.Ghrz_Shihua_OA_EmploymentBase.PeriodMasterNo">
<summary> <summary>
计薪类别编号 计薪类别编号
@ -12857,6 +12992,11 @@
Ghrs_LangKey (Dto.EditInput) Ghrs_LangKey (Dto.EditInput)
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Models.EditGhrs_ListCommonSqlInput">
<summary>
Ghrs_ListCommonSql (Dto.EditInput)
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.EditGhrs_MailOutboxInput"> <member name="T:Tiobon.Core.Model.Models.EditGhrs_MailOutboxInput">
<summary> <summary>
Ghrs_MailOutbox (Dto.EditInput) Ghrs_MailOutbox (Dto.EditInput)
@ -13327,6 +13467,11 @@
Ghrs_LangKey (Dto.InsertInput) Ghrs_LangKey (Dto.InsertInput)
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Models.InsertGhrs_ListCommonSqlInput">
<summary>
Ghrs_ListCommonSql (Dto.InsertInput)
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.InsertGhrs_MailOutboxInput"> <member name="T:Tiobon.Core.Model.Models.InsertGhrs_MailOutboxInput">
<summary> <summary>
Ghrs_MailOutbox (Dto.InsertInput) Ghrs_MailOutbox (Dto.InsertInput)
@ -25034,6 +25179,136 @@
TableID TableID
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Models.Ghrs_ListCommonSql">
<summary>
Ghrs_ListCommonSql (Model)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.ListCommonSqlId">
<summary>
ListCommonSqlId
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.ListCommonSqlNo">
<summary>
ListCommonSqlNo
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.ListCommonSqlName">
<summary>
ListCommonSqlName
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.ListCommonSqlType">
<summary>
ListCommonSqlType
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.ListCommonSqlType2">
<summary>
ListCommonSqlType2
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.ListComment">
<summary>
ListComment
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.SelectSql">
<summary>
SelectSql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.JsonTitle">
<summary>
JsonTitle
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.WhereSql">
<summary>
WhereSql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.OrderBySql">
<summary>
OrderBySql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.SqlTopCountSql">
<summary>
SqlTopCountSql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.SqlGetIDSql">
<summary>
SqlGetIDSql
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.RemarkSz">
<summary>
RemarkSz
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.SortNo">
<summary>
SortNo
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.IsDefault">
<summary>
IsDefault
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.Reverse1">
<summary>
Reverse1
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.Reverse2">
<summary>
Reverse2
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.Reverse3">
<summary>
Reverse3
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.Reverse4">
<summary>
Reverse4
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.Reverse5">
<summary>
Reverse5
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.Reverse6">
<summary>
Reverse6
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.Reverse7">
<summary>
Reverse7
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.Reverse8">
<summary>
Reverse8
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.Reverse9">
<summary>
Reverse9
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSql.SqlIDToName">
<summary>
SqlIDToName
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghrs_MailOutbox"> <member name="T:Tiobon.Core.Model.Models.Ghrs_MailOutbox">
<summary> <summary>
Ghrs_MailOutbox (Model) Ghrs_MailOutbox (Model)
@ -25943,6 +26218,11 @@
学历编号 学历编号
</summary> </summary>
</member> </member>
<member name="P:Tiobon.Core.Model.Models.Ghrz_Shihua_OA_Employment.LegalCompanyNo">
<summary>
LegalCompanyNo
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrz_Shihua_OA_Employment.PeriodMasterNo"> <member name="P:Tiobon.Core.Model.Models.Ghrz_Shihua_OA_Employment.PeriodMasterNo">
<summary> <summary>
计薪类别编号 计薪类别编号
@ -28807,6 +29087,21 @@
修改信息 修改信息
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlDto">
<summary>
Ghrs_ListCommonSql(Dto.View1)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlDto.CreateDataInfo">
<summary>
创建信息
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrs_ListCommonSqlDto.UpdateDataInfo">
<summary>
修改信息
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghrs_MailOutboxDto"> <member name="T:Tiobon.Core.Model.Models.Ghrs_MailOutboxDto">
<summary> <summary>
Ghrs_MailOutbox(Dto.View1) Ghrs_MailOutbox(Dto.View1)

@ -1829,6 +1829,11 @@
Ghrs_LangKey(Controller) Ghrs_LangKey(Controller)
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Api.Controllers.Ghrs_ListCommonSqlController">
<summary>
Ghrs_ListCommonSql(Controller)
</summary>
</member>
<member name="T:Tiobon.Core.Api.Controllers.Ghrs_MailOutboxController"> <member name="T:Tiobon.Core.Api.Controllers.Ghrs_MailOutboxController">
<summary> <summary>
Ghrs_MailOutbox(Controller) Ghrs_MailOutbox(Controller)

Loading…
Cancel
Save