diff --git a/Tiobon.Core.Api/Controllers/Ghrh/Ghrh_ResumeController.cs b/Tiobon.Core.Api/Controllers/Ghrh/Ghrh_ResumeController.cs index 9e43c3a8..ecc3e7a0 100644 --- a/Tiobon.Core.Api/Controllers/Ghrh/Ghrh_ResumeController.cs +++ b/Tiobon.Core.Api/Controllers/Ghrh/Ghrh_ResumeController.cs @@ -519,5 +519,8 @@ public class Ghrh_ResumeController : BaseController SyncToStaff(long id) => await _service.SyncToStaff(id); + [HttpPost, Route("Shihua_OA")] + public async Task Shihua_OA_Sync(long id) => await _service.Shihua_OA_Sync(); + #endregion } \ No newline at end of file diff --git a/Tiobon.Core.Api/Tiobon.Core.Model.xml b/Tiobon.Core.Api/Tiobon.Core.Model.xml index d9793fb9..eb2352e2 100644 --- a/Tiobon.Core.Api/Tiobon.Core.Model.xml +++ b/Tiobon.Core.Api/Tiobon.Core.Model.xml @@ -25863,6 +25863,11 @@ Ghrz_Shihua_OA_Employment (Model) + + + 创建时间 + + EmploymentID @@ -27082,6 +27087,11 @@ 来源 + + + 证书名称 + + 培训证书规则(Dto.View) diff --git a/Tiobon.Core.Api/wwwroot/files/import/1871744379090243584/Ghre_Certificate.xlsx b/Tiobon.Core.Api/wwwroot/files/import/1871744379090243584/Ghre_Certificate.xlsx new file mode 100644 index 00000000..7064981b Binary files /dev/null and b/Tiobon.Core.Api/wwwroot/files/import/1871744379090243584/Ghre_Certificate.xlsx differ diff --git a/Tiobon.Core.Model/Models/Ghrz/Ghrz_Shihua_OA_Employment.cs b/Tiobon.Core.Model/Models/Ghrz/Ghrz_Shihua_OA_Employment.cs index aa9aae86..d051cc1f 100644 --- a/Tiobon.Core.Model/Models/Ghrz/Ghrz_Shihua_OA_Employment.cs +++ b/Tiobon.Core.Model/Models/Ghrz/Ghrz_Shihua_OA_Employment.cs @@ -21,9 +21,16 @@ namespace Tiobon.Core.Model.Models; /// Ghrz_Shihua_OA_Employment (Model) /// [SugarTable("Ghrz_Shihua_OA_Employment", "Ghrz_Shihua_OA_Employment"), Entity(TableCnName = "Ghrz_Shihua_OA_Employment", TableName = "Ghrz_Shihua_OA_Employment")] -public class Ghrz_Shihua_OA_Employment : BasePoco1 +public class Ghrz_Shihua_OA_Employment + //: BasePoco1 { + + /// + /// 创建时间 + /// + [Display(Name = "创建时间"), SugarColumn(IsOnlyIgnoreUpdate = true)] + public DateTime? CreateTime { get; set; } /// /// EmploymentID /// diff --git a/Tiobon.Core.Model/View/Ghre/Ghre_Certificate.Dto.View.cs b/Tiobon.Core.Model/View/Ghre/Ghre_Certificate.Dto.View.cs index 1f021db4..5486c488 100644 --- a/Tiobon.Core.Model/View/Ghre/Ghre_Certificate.Dto.View.cs +++ b/Tiobon.Core.Model/View/Ghre/Ghre_Certificate.Dto.View.cs @@ -123,7 +123,13 @@ public class Ghre_CertificateDto : Ghre_Certificate /// /// 来源 /// - public string CertificateTypeLabel { get; set; } - public string IsExpiredLabel { get; set; } + public string CertificateTypeLabel { get; set; } + public string IsExpiredLabel { get; set; } public string AwardDate1 { get; set; } + /// + /// 证书名称 + /// + public string CertificateName { get; set; } + + } \ No newline at end of file diff --git a/Tiobon.Core.Services/Ghre/Ghre_CertificateServices.cs b/Tiobon.Core.Services/Ghre/Ghre_CertificateServices.cs index 65ff94d1..2f6a30b8 100644 --- a/Tiobon.Core.Services/Ghre/Ghre_CertificateServices.cs +++ b/Tiobon.Core.Services/Ghre/Ghre_CertificateServices.cs @@ -79,4 +79,168 @@ public class Ghre_CertificateServices : BaseServices(filter.pageNum, total, filter.pageSize, entitys); } + + #region Excel导入 + + + public override async Task> 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_Certificate); + var fileName = entityType.GetEntityTableName() + ".xlsx"; + + + var physicsPath1 = physicsPath + path + fileName; + //if (dataSourceLists.Any()) + // physicsPath1 = physicsPath + path + newFileName; + var result = ServiceResult.OprateSuccess("人证对照表_" + DateTimeHelper.ConvertToSecondString1(DateTime.Now) + ".xlsx", physicsPath1); + return result; + } + public override async Task> ImportExcel(IFormFile file) + { + 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 fields = new List + { + "工号", + "姓名", + "证书名称", + "课程", + "颁发日期", + "证书有效期", + "备注" + }; + for (int i = 0; i < dt.Rows.Count; i++) + { + var comments = new List(); + + + bool isContinue = false; + + fields.ForEach(x => + { + if (!dt.Columns.Contains(x)) + { + comments.Add("未查询到【" + x + "】列!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + isContinue = true; + } + }); + + if (isContinue) + continue; + + var StaffNo = dt.Rows[i]["工号"].ToString(); + var StaffName = dt.Rows[i]["姓名"].ToString(); + var CertificateName = dt.Rows[i]["证书名称"].ToString(); + var CourseName = dt.Rows[i]["课程"].ToString(); + var AwardDate = dt.Rows[i]["颁发日期"].ToString(); + var ValidityPeriod = dt.Rows[i]["证书有效期"].ToString(); + + if (StaffNo.IsNullOrEmpty() && StaffName.IsNullOrEmpty()) + continue; + + var remarkSz = dt.Rows[i]["备注"].ToString(); + + var staff = await Db.Queryable().Where(x => x.StaffNo == StaffNo && x.StaffName == StaffName).FirstAsync(); + if (staff == null) + { + comments.Add($"未查询到搞员工,工号或姓名填写错误!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + var rule = await Db.Queryable().Where(x => x.CertificateName == CertificateName).FirstAsync(); + if (rule == null) + { + comments.Add($"无效的证书名称!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + var course = await Db.Queryable().Where(x => x.CourseName == CourseName).FirstAsync(); + if (course == null) + { + comments.Add($"无效的课程!"); + data.ErrorCount++; + dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + isExistError = true; + continue; + } + //if (await base.AnyAsync(x => x.CertificateRuleId == rule.Id && x.StaffId == ClassNo)) + //{ + // comments.Add($"系统已存在相同编号名称人证对照表数据!"); + // data.ErrorCount++; + // dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a)); + // isExistError = true; + // continue; + //} + + if (AwardDate.IsNullOrEmpty()) + AwardDate = DateTime.Now.ToString(); + var dict = new Dictionary + { + { "Id", SnowFlakeSingle.Instance.NextId() }, + { "CreateBy", App.User.ID }, + { "CreateTime", DateTime.Now }, + { "CertificateRuleId", rule.Id }, + { "StaffId", staff.StaffID }, + { "CourseId", course.Id }, + { "AwardDate", AwardDate }, + { "ValidityPeriod", ValidityPeriod }, + { "RemarkSz", remarkSz } + }; + try + { + await Db.Insertable(dict).AS("Ghre_Certificate").ExecuteCommandAsync(); + data.SuccessCount++; + //data.SuccessCount += list.Count; + } + 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 = errorFileName; + } + return ServiceResult.OprateSuccess("导入成功!", data); + } + #endregion } \ No newline at end of file diff --git a/Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs b/Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs index 25f833b8..e918d951 100644 --- a/Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs +++ b/Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs @@ -3,6 +3,7 @@ using DinkToPdf.Contracts; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Hosting; +using Microsoft.VisualBasic; using System.IO.Compression; using static Tiobon.Core.Model.Consts; @@ -352,7 +353,8 @@ public class Ghrh_ResumeServices : BaseServices().Where(x => x.CreateTime.Value.Date == DateTime.Now).ToListAsync(); + var list = await Db.Queryable().Where(x => x.CreateTime >= startDate && x.IsRead == 0).ToListAsync(); for (int i = 0; i < list.Count; i++) { @@ -3700,6 +3702,13 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 }; long id = await Db.Insertable(insert).ExecuteReturnSnowflakeIdAsync(); + #region 写入数据,并判断是否有错误 + var sql = $"SELECT ISNULL(MAX(id)+1,1) FROM Ghrh_OfferApplyOrder WHERE Id !='{id}'"; + var id1 = await Db.Ado.GetLongAsync(sql); + sql = $"UPDATE Ghrh_OfferApplyOrder SET Id={id1} WHERE Id ='{id}'"; + await Db.Ado.ExecuteCommandAsync(sql); + id = id1; + #endregion #region 处理薪资项目 var currencyId = await Db.Ado.GetIntAsync("SELECT top 1 CurrencyID FROM Ghrc_Currency where CurrencyNo='RMB'"); @@ -3708,10 +3717,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S02").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S02, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S02" }); } @@ -3720,10 +3731,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S03").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S03, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S03" }); } if (data.S04.IsNotEmptyOrNull()) @@ -3731,10 +3744,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S04").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S04, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S04" }); } if (data.S05.IsNotEmptyOrNull()) @@ -3742,10 +3757,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S05").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S05, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S05" }); } if (data.S06.IsNotEmptyOrNull()) @@ -3753,10 +3770,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S06").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S06, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S06" }); } if (data.S21.IsNotEmptyOrNull()) @@ -3764,10 +3783,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S21").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S21, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S21" }); } if (data.S22.IsNotEmptyOrNull()) @@ -3775,10 +3796,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S22").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S22, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S22" }); } if (data.S23.IsNotEmptyOrNull()) @@ -3786,10 +3809,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S23").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S23, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S23" }); } if (data.S66.IsNotEmptyOrNull()) @@ -3797,10 +3822,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S66").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S66, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S66" }); } if (data.S68.IsNotEmptyOrNull()) @@ -3808,10 +3835,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S68").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S68, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S68" }); } if (data.S70.IsNotEmptyOrNull()) @@ -3819,18 +3848,20 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 var salaryItemId = (await Db.Queryable().Where(x => x.SalaryItemNo == "S70").FirstAsync())?.SalaryItemID; items.Add(new Ghrh_OfferApplyOrderSalary() { + Id = SnowFlakeSingle.Instance.NextId(), OrderId = id, SalaryItemId = salaryItemId, Amount = data.S70, - CurrencyId = currencyId + CurrencyId = currencyId, + Reverse1 = "S70" }); } #endregion if (items.Any()) - await Db.Insertable(items).ExecuteReturnSnowflakeIdAsync(); + await Db.Insertable(items).ExecuteCommandAsync(); } } - catch (Exception) + catch (Exception E) { } @@ -4035,9 +4066,13 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 dict.Add("IsEnable", 1); #endregion + DateTime? inTime = null; + long? applyOrderId = null; var applyOrder = await Db.Queryable().Where(x => x.ResumeId == id).FirstAsync(); if (applyOrder != null) { + inTime = applyOrder.InDate; + applyOrderId = applyOrder.Id; dict.Add("DeptID", applyOrder.DeptId); dict.Add("TitleID", applyOrder.TitleId); dict.Add("JobID", applyOrder.JobId); @@ -4046,8 +4081,10 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 dict.Add("LegalCompanyID", applyOrder.CompanyId); dict.Add("Reverse8", applyOrder.ProbationMonths); dict.Add("ZoneID", applyOrder.ZoneId); - dict.Add("StaffType1", applyOrder.StaffType1); - dict.Add("StaffType2", applyOrder.StaffType); + var items = await GetParaList("StaffType1"); + dict.Add("StaffType1", items.Where(x => x.ParaDetailNo == applyOrder.StaffType1).FirstOrDefault()?.ParaDetailId); + items = await GetParaList("StaffType2"); + dict.Add("StaffType2", items.Where(x => x.ParaDetailNo == applyOrder.StaffType).FirstOrDefault()?.ParaDetailId); //dict.Add("Reverse8", applyOrder.ProbationMonths); } else @@ -4324,6 +4361,13 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 await Db.Insertable(attachments1).ExecuteReturnIdentityAsync(); } #endregion + + #region 薪资项目同步 + if(applyOrderId != null) + { + + } + #endregion } await Db.Ado.CommitTranAsync(); diff --git a/Tiobon.Core/Tiobon.Core.Model.xml b/Tiobon.Core/Tiobon.Core.Model.xml index d9793fb9..eb2352e2 100644 --- a/Tiobon.Core/Tiobon.Core.Model.xml +++ b/Tiobon.Core/Tiobon.Core.Model.xml @@ -25863,6 +25863,11 @@ Ghrz_Shihua_OA_Employment (Model) + + + 创建时间 + + EmploymentID @@ -27082,6 +27087,11 @@ 来源 + + + 证书名称 + + 培训证书规则(Dto.View)