招聘模块多语

master
xiaochanghai 6 months ago
parent e49734298d
commit 61188d5873
  1. 16
      Model/Tiobon.Web.pdm
  2. 9
      Tiobon.Core.Common/HttpContextUser/AspNetUser.cs
  3. 1
      Tiobon.Core.Common/HttpContextUser/IUser.cs
  4. 22
      Tiobon.Core.Services/BASE/BaseServices.cs
  5. 10
      Tiobon.Core.Services/CommonServices.cs
  6. 293
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs
  7. 8
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeTemplateServices.cs
  8. 4
      Tiobon.Core.Services/Ghrs/Ghrs_LangKeyServices.cs

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?PowerDesigner AppLocale="UTF16" ID="{C294868A-C3F3-41AD-98CC-78B6D4E0CC40}" Label="" LastModificationDate="1735535593" Name="Tiobon" Objects="2781" Symbols="104" Target="Microsoft SQL Server 2008" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="15.0.0.2613"?>
<?PowerDesigner AppLocale="UTF16" ID="{C294868A-C3F3-41AD-98CC-78B6D4E0CC40}" Label="" LastModificationDate="1735897045" Name="Tiobon" Objects="2780" Symbols="104" Target="Microsoft SQL Server 2008" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="15.0.0.2613"?>
<!-- do not edit this file -->
<Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
@ -10350,7 +10350,7 @@ Shadow=0</a:DisplayPreferences>
<o:ReferenceSymbol Id="o70">
<a:CreationDate>1727335554</a:CreationDate>
<a:ModificationDate>1727335611</a:ModificationDate>
<a:Rect>((-51600,11212), (-40800,12683))</a:Rect>
<a:Rect>((-51600,11212), (-40800,12733))</a:Rect>
<a:ListOfPoints>((-51600,11437),(-40800,11437))</a:ListOfPoints>
<a:CornerStyle>2</a:CornerStyle>
<a:ArrowStyle>1</a:ArrowStyle>
@ -16591,10 +16591,10 @@ LABL 0 Arial Unicode MS,8,N</a:FontList>
<a:Code>IsView</a:Code>
<a:CreationDate>1723167557</a:CreationDate>
<a:Creator>Administrator</a:Creator>
<a:ModificationDate>1723168036</a:ModificationDate>
<a:ModificationDate>1735897045</a:ModificationDate>
<a:Modifier>Administrator</a:Modifier>
<a:Comment>是否查看试卷</a:Comment>
<a:DefaultValue>false</a:DefaultValue>
<a:DefaultValue>&#39;false&#39;</a:DefaultValue>
<a:DataType>bit</a:DataType>
</o:Column>
<o:Column Id="o524">
@ -24471,11 +24471,10 @@ LABL 0 Arial Unicode MS,8,N</a:FontList>
<a:Code>RequestData</a:Code>
<a:CreationDate>1720666491</a:CreationDate>
<a:Creator>Administrator</a:Creator>
<a:ModificationDate>1720666529</a:ModificationDate>
<a:ModificationDate>1735896392</a:ModificationDate>
<a:Modifier>Administrator</a:Modifier>
<a:Comment>请求内容</a:Comment>
<a:DataType>nvarchar(5000)</a:DataType>
<a:Length>5000</a:Length>
<a:DataType>nvarchar(max) </a:DataType>
</o:Column>
<o:Column Id="o1126">
<a:ObjectID>23C2A295-B36E-4B12-9CFE-0D1B5EEEF89A</a:ObjectID>
@ -44372,9 +44371,10 @@ Ghra_staff_InsureBase
<a:Code>CompanyId</a:Code>
<a:CreationDate>1733497709</a:CreationDate>
<a:Creator>Administrator</a:Creator>
<a:ModificationDate>1733497934</a:ModificationDate>
<a:ModificationDate>1735806307</a:ModificationDate>
<a:Modifier>Administrator</a:Modifier>
<a:Comment>公司ID</a:Comment>
<a:DataType>int</a:DataType>
</o:Column>
<o:Column Id="o2665">
<a:ObjectID>002686EB-7F37-4EE2-AE9D-BBE8CDA645A4</a:ObjectID>

@ -165,4 +165,13 @@ public class AspNetUser : IUser
{
return GetClaimValueByType("StaffId").FirstOrDefault().ObjToInt();
}
public int? GetLangId()
{
var langId = _accessor.HttpContext?.Request?.Headers["Langid"].ObjToInt();
if (langId.IsNullOrEmpty())
return 1;
return langId;
}
}

@ -22,4 +22,5 @@ public interface IUser
List<string> GetUserInfoFromToken(string ClaimType, string token);
ServiceResult<string> MessageModel { get; set; }
int? GetLangId();
}

@ -21,6 +21,7 @@ public class BaseServices<TEntity, TEntityDto, TInsertDto, TEditDto> : IBaseServ
public IBaseRepository<TEntity> BaseDal { get; set; } //通过在子类的构造函数中注入,这里是基类,不用构造函数
public ISqlSugarClient Db => BaseDal.Db;
public int? LangId => App.User.GetLangId();
/// <summary>
/// 根据ID查询实体数据是否存在
@ -2106,13 +2107,32 @@ ORDER BY SortNo ASC";
#endregion
#region 获取多语
public async Task<string> QueryLangValue(string key, int langId, string defaultValue)
public async Task<string> QueryLangValue(string key, int? langId, string defaultValue)
{
string sql = $"select [dbo].[FLangKeyToValue]('{key}',{langId},null)";
string value = await Db.Ado.GetStringAsync(sql);
if (value.IsNullOrEmpty()) value = defaultValue;
return value;
}
public async Task<string> QueryLangValue(string key, string defaultValue)
{
return await QueryLangValue(key, LangId, defaultValue);
}
public async Task<string> QueryLangValue(string key, string defaultValue, object arg0)
{
var value = await QueryLangValue(key, LangId, defaultValue);
return string.Format(value, arg0);
}
public async Task<string> QueryLangValue(string key, string defaultValue, object arg0, object arg1)
{
var value = await QueryLangValue(key, LangId, defaultValue);
return string.Format(value, arg0, arg1);
}
public async Task<string> QueryLangValue(string key, string defaultValue, object arg0, object arg1, object arg2)
{
var value = await QueryLangValue(key, LangId, defaultValue);
return string.Format(value, arg0, arg1, arg2);
}
#endregion
#endregion

@ -1845,11 +1845,11 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
List<int> reorderedNumbers = new();
var sort = result.JM_TableColumnT1.TableColumn.Where(x => x.field == "M1").SingleOrDefault()?.SortNo ?? 5;
var name1 = await QueryLangValue("F_ResumeMaintenance_0216", "预算编制数");
result.JM_TableColumnT1.TableColumn?.ForEach(x =>
{
if (months.Where(o => o == x.label).Any())
x.GroupName = "预算编制数";
x.GroupName = name1;
if (x.field == "Year")
x.searchColumnDefaultValue = curentYear;
@ -4234,12 +4234,16 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
}
#region 获取多语
public async Task<string> QueryLangValue(string key, int langId, string defaultValue)
public async Task<string> QueryLangValue(string key, int? langId, string defaultValue)
{
string sql = $"select [dbo].[FLangKeyToValue]('{key}',{langId},null)";
string value = await Db.Ado.GetStringAsync(sql);
if (value.IsNullOrEmpty()) value = defaultValue;
return value;
}
public async Task<string> QueryLangValue(string key, string defaultValue)
{
return await QueryLangValue(key, App.User.GetLangId(), defaultValue);
}
#endregion
}

@ -1,12 +1,9 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Hosting;
using NPOI.SS.Formula.Functions;
using System.IO.Compression;
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using static NPOI.POIFS.Crypt.CryptoFunctions;
using static System.Runtime.InteropServices.JavaScript.JSType;
using static Tiobon.Core.Model.Consts;
namespace Tiobon.Core.Services;
@ -783,7 +780,7 @@ ORDER BY A.SortNo ASC";
var resume = await QuerySingle(x => x.Mobile == input.Mobile);
if (resume != null && resume.Status == DIC_INTERVIEW_ORDER_STATUS.Blacklist)
return ServiceResult<dynamic>.OprateFailed("无法登录!");
return ServiceResult<dynamic>.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0146", "无法登录!"));
if (resume == null)
id = await base.Add(new InsertGhrh_ResumeInput()
@ -795,7 +792,7 @@ ORDER BY A.SortNo ASC";
else
{
if (resume.IdCardNo.IsNotEmptyOrNull() && input.IdCardNo.IsNullOrEmpty())
return ServiceResult<dynamic>.OprateFailed("请输入身份证号码后六位!");
return ServiceResult<dynamic>.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0147", "请输入身份证号码后六位!"));
if (resume.IdCardNo.IsNotEmptyOrNull() && input.IdCardNo.IsNotEmptyOrNull())
resume = await QuerySingle(x => x.Mobile == input.Mobile && x.IdCardNo.Contains(input.IdCardNo));
@ -1272,8 +1269,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
if (resume.Base.IdCardNo.IsNotEmptyOrNull())
if (await base.AnyAsync(x => x.Id != id && x.IdCardNo == resume.Base.IdCardNo))
return ServiceResult.OprateFailed($"证件号码【{resume.Base.IdCardNo}】已在系统中存在,请确认填写是否正确");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0148", "证件号码【{0}】已在系统中存在,请确认填写是否正确!", resume.Base.IdCardNo));
resume.Base.ApplicationStatus = status;
resume.Base.ApplicationTime = DateTime.Now;
@ -1384,8 +1380,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
{
dynamic Data = new ExpandoObject();
var entity = await QueryById(id);
if (entity is null) throw new Exception("无效的ID!");
if (entity is null) throw new Exception(await QueryLangValue("F_ResumeMaintenance_0149", langId, "无效的ID!"));
decimal completionDegree = 0;
var groups = await Db.Ado.SqlQueryAsync<ResumeFormColumn>("select GroupName tabName, GroupType type from Ghrh_ResumeInfoGroup where IsEnable=1 and GroupType !='Photo' and GroupType !='Attachment'");
@ -1629,15 +1624,15 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
if (recommend.RequestId.IsNullOrEmpty())
{
if (recommend.DeptId.IsNullOrEmpty() || recommend.TitleId.IsNullOrEmpty())
return ServiceResult.OprateFailed("请先选择部门或岗位!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0150", "请先选择部门或岗位!"));
}
if (recommend.InterviewStaffs.IsNullOrEmpty())
return ServiceResult.OprateFailed("请先选择面试者!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0151", "请先选择面试者!"));
recommend.InterviewStaffs = recommend.InterviewStaffs.Where(x => x.StaffId != null).ToList();
if (!recommend.InterviewStaffs.Any())
return ServiceResult.OprateFailed("至少选择一名面试者!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0152", "至少选择一名面试者!"));
recommend.InterviewStaffs = recommend.InterviewStaffs.Where(x => x.StaffId != null).Distinct().ToList();
@ -1707,14 +1702,15 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
Email = recommend.InterviewStaffs[i].Email,
IsPrimary = i == 0 ? true : false,
});
await SendMessage(recommend.InterviewStaffs.Select(x => x.StaffId.Value).ToList(), "简历提醒", "您有个简历推荐,请及时查看!", "/M_ESS_Recruit/F_ESS_Candidate");
await SendMessage(recommend.InterviewStaffs.Select(x => x.StaffId.Value).ToList(), await QueryLangValue("F_ResumeMaintenance_0153", "简历提醒"), await QueryLangValue("F_ResumeMaintenance_0154", "您有个简历推荐,请及时查看!"), "/M_ESS_Recruit/F_ESS_Candidate");
var entity = await base.QueryById(id);
entity.Status = DIC_INTERVIEW_ORDER_STATUS.HasRecommended;
await Update(entity, ["Status"]);
#region 日志
await LogRecord(orderId, $"向【{string.Join("", interviewer.Select(o => o.StaffName))}】推荐了简历,推荐理由:{recommend.RecommendRemark ?? ""}", id, null, "Recommended", true);
string content = await QueryLangValue("F_ResumeMaintenance_0155", "向【{0}】推荐了简历,推荐理由:{1}", string.Join("、", interviewer.Select(o => o.StaffName)), recommend.RecommendRemark ?? "无");
await LogRecord(orderId, content, id, null, "Recommended", true);
#endregion
#region 处理附件
@ -1745,10 +1741,10 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
var id = ids[0];
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.HasRecommended)
return ServiceResult.OprateFailed("非【已推荐】状态下简历不可发送提醒!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0156", "非【已推荐】状态下简历不可发送提醒!"));
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
if (order != null)
@ -1762,10 +1758,11 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
for (int i = 0; i < records.Count; i++)
{
if (records[i].FirstViewTime.IsNullOrEmpty())
await SendMessage([records[i].StaffId.Value], "简历提醒", "您有个简历推荐,请及时查看!", "/M_ESS_Recruit/F_ESS_Candidate");
await SendMessage([records[i].StaffId.Value], await QueryLangValue("F_ResumeMaintenance_0153", "简历提醒"), await QueryLangValue("F_ResumeMaintenance_0154", "您有个简历推荐,请及时查看!"), "/M_ESS_Recruit/F_ESS_Candidate");
}
#region 日志
await LogRecord(order.Id, $"向【{string.Join(",", interviewer.Select(o => o.StaffName))}】发送简历推荐提醒!", id, null, "RemindHasRecommend");
string content = await QueryLangValue("F_ResumeMaintenance_0157", "向【{0}】发送简历推荐提醒!", string.Join("、", interviewer.Select(o => o.StaffName)));
await LogRecord(order.Id, content, id, null, "RemindHasRecommend");
#endregion
}
}
@ -1779,15 +1776,16 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
{
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
//if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.HasRecommended)
// return ServiceResult.OprateFailed("【已推荐】状态下才能约面!");
string content = await QueryLangValue("F_ResumeMaintenance_0158", "传入时间【{0}】无效,请检查格式!");
form.Times.ForEach(x =>
{
if (x.IndexOf("~") < 0)
throw new Exception($"传入时间【{x}】无效,请检查格式!");
throw new Exception(string.Format(content, x));
var array = x.Split('~');
try
{
@ -1796,7 +1794,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
}
catch (Exception)
{
throw new Exception($"传入时间【{x}】无效,请检查格式!");
throw new Exception(string.Format(content, x));
}
});
@ -1846,10 +1844,17 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
#region 日志
if (!isChangeInterviewTime)
await LogRecord(order.Id, $"预约面试,面试时间:{string.Join("", form.Times)},约面反馈:{order.AppointmentFeedback ?? ""}", id, null, "SubscribeInterview");
{
string content1 = await QueryLangValue("F_ResumeMaintenance_0159", "预约面试,面试时间:{0},约面反馈:{1}", string.Join("、", form.Times), order.AppointmentFeedback ?? "无");
await LogRecord(order.Id, content1, id, null, "SubscribeInterview");
}
else
await LogRecord(order.Id, $"修改面试时间,面试时间:{string.Join("", form.Times)},备注:{(form.Remark ?? "")}", id, null, "ChangeInterviewDate");
{
string content1 = await QueryLangValue("F_ResumeMaintenance_0160", "修改面试时间,面试时间:{0},备注:{1}", string.Join("、", form.Times), form.Remark ?? "无");
await LogRecord(order.Id, content1, id, null, "ChangeInterviewDate");
}
#endregion
if (!isChangeInterviewTime)
@ -1867,13 +1872,14 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
{
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
//if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.WaitAppointment)
// return ServiceResult.OprateFailed("【待预约】状态下才能安排面试!");
string content = await QueryLangValue("F_ResumeMaintenance_0158", "传入时间【{0}】无效,请检查格式!");
if (body.Time.IndexOf("~") < 0)
throw new Exception($"传入时间【{body.Time}】无效,请检查格式!");
throw new Exception(string.Format(content, body.Time));
var array = body.Time.Split('~');
try
{
@ -1882,7 +1888,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
}
catch (Exception)
{
throw new Exception($"传入时间【{body.Time}】无效,请检查格式!");
throw new Exception(string.Format(content, body.Time));
}
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
if (order != null)
@ -1905,14 +1911,16 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
await _ghrh_InterviewRecordServices.Update(records, ["InterviewTime", "InterviewBeginTime", "InterviewEndTime", "Status", "InterviewStepName", "RemarkSz", "InterviewAddress", "UpdateTime", "UpdateBy"]);
await _ghrh_InterviewOrderServices.Update(order, ["InterviewStepName", "UpdateTime", "UpdateBy"]);
await LogRecord(order.Id, $"安排面试,面试时间:{body.Time},面试地点:{body.InterviewAddress},面试备注:{body.Remark ?? ""}", id, records[0].Id, "ScheduleInterview", true);
string content1 = await QueryLangValue("F_ResumeMaintenance_0161", "安排面试,面试时间:{0},面试地点:{1},面试备注:{2}", body.Time, body.InterviewAddress, body.Remark ?? "无");
await LogRecord(order.Id, content1, id, records[0].Id, "ScheduleInterview", true);
entity.Status = DIC_INTERVIEW_ORDER_STATUS.WaitInterview;
await Update(entity, ["Status", "UpdateTime", "UpdateBy"]);
content1 = await QueryLangValue("F_ResumeMaintenance_0163", "您有个简历待面试,面试时间:{0},请及时查看!", body.Time);
for (int i = 0; i < records.Count; i++)
{
await SendMessage([records[i].StaffId.Value], "面试提醒", $"您有个简历待面试,面试时间:{body.Time},请及时查看!", "/M_ESS_Recruit/F_ESS_Interview");
await SendMessage([records[i].StaffId.Value], await QueryLangValue("F_ResumeMaintenance_0162", "面试提醒"), content1, "/M_ESS_Recruit/F_ESS_Interview");
}
#region 处理附件
@ -1940,15 +1948,16 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
{
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.HasRecommended)
return ServiceResult.OprateFailed("【已推荐】状态下才能约面!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0164", "【已推荐】状态下才能约面!"));
string content = await QueryLangValue("F_ResumeMaintenance_0158", "传入时间【{0}】无效,请检查格式!");
form.Times.ForEach(x =>
{
if (x.IndexOf("~") < 0)
throw new Exception($"传入时间【{x}】无效,请检查格式!");
throw new Exception(string.Format(content, x));
var array = x.Split('~');
try
{
@ -1957,7 +1966,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
}
catch (Exception)
{
throw new Exception($"传入时间【{x}】无效,请检查格式!");
throw new Exception(string.Format(content, x));
}
});
@ -2004,7 +2013,8 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
await _ghrh_InterviewRecordServices.Update(records[0], ["PlanInterviewTime1", "PlanInterviewTime2", "PlanInterviewTime3", "Status"]);
await LogRecord(order.Id, $"修改面试时间,面试时间:{string.Join("", form.Times)},备注:{(form.Remark ?? "")}");
string content1 = await QueryLangValue("F_ResumeMaintenance_0165", "修改面试时间,面试时间:{0},备注:{1}", string.Join("、", form.Times), form.Remark ?? "无");
await LogRecord(order.Id, content1);
await UpdateResumeStatus(entity, DIC_INTERVIEW_ORDER_STATUS.HasChangeDate);
}
@ -2018,13 +2028,18 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
{
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.WaitInterview)
return ServiceResult.OprateFailed("【待面试】状态下才能变更面试时间!");
{
string content1 = await QueryLangValue("F_ResumeMaintenance_0166", "【待面试】状态下才能变更面试时间!");
return ServiceResult.OprateFailed("");
}
string content = await QueryLangValue("F_ResumeMaintenance_0158", "传入时间【{0}】无效,请检查格式!");
if (time.IndexOf("~") < 0)
throw new Exception($"传入时间【{time}】无效,请检查格式!");
throw new Exception(string.Format(content, time));
var array = time.Split('~');
try
{
@ -2033,7 +2048,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
}
catch (Exception)
{
throw new Exception($"传入时间【{time}】无效,请检查格式!");
throw new Exception(string.Format(content, time));
}
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
if (order != null)
@ -2055,9 +2070,10 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
//if (record.ReceiverIds.IsNotEmptyOrNull())
//{
// var staffs = JsonHelper.JsonToObj<List<ResumeRecommendFormStaff>>(record.ReceiverIds);
// await SendMessage(staffs.Select(x => x.StaffId).ToList(), "简历提醒", "您有个简历【待面试】,请及时查看面试时间!");
// await SendMessage(staffs.Select(x => x.StaffId).ToList(), await QueryLangValue("F_ResumeMaintenance_0153", "简历提醒"), "您有个简历【待面试】,请及时查看面试时间!");
//}
await LogRecord(order.Id, $"变更面试时间,面试时间:{time}");
string content1 = await QueryLangValue("F_ResumeMaintenance_0167", "变更面试时间,面试时间:{0}", time);
await LogRecord(order.Id, content1);
entity.Status = DIC_INTERVIEW_ORDER_STATUS.WaitInterview;
await Update(entity, ["Status"]);
@ -2075,22 +2091,28 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
var id = ids[m];
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.WaitInterview)
return ServiceResult.OprateFailed("非【待面试】状态下简历不可发送提醒!");
{
string content1 = await QueryLangValue("F_ResumeMaintenance_0168", "非【待面试】状态下简历不可发送提醒!");
return ServiceResult.OprateFailed(content1);
}
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
if (order != null)
{
var records = await _ghrh_InterviewRecordServices.Query(x => x.Round == order.Round && x.OrderId == order.Id);
string content1 = await QueryLangValue("F_ResumeMaintenance_0169", "您有个简历【待面试】,请及时查看面试时间!");
for (int i = 0; i < records.Count; i++)
{
if (records[i].FirstViewTime.IsNotEmptyOrNull())
await SendMessage([records[i].StaffId.Value], "简历提醒", "您有个简历【待面试】,请及时查看面试时间!", "/M_ESS_Recruit/F_ESS_Interview");
await SendMessage([records[i].StaffId.Value], await QueryLangValue("F_ResumeMaintenance_0153", "简历提醒"), content1, "/M_ESS_Recruit/F_ESS_Interview");
}
await LogRecord(order.Id, $"发送待面试提醒", id, null, "RemindWaitInterview");
content1 = await QueryLangValue("F_ResumeMaintenance_0170", "发送待面试提醒");
await LogRecord(order.Id, $"", id, null, "RemindWaitInterview");
}
}
@ -2102,22 +2124,23 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
public async Task<ServiceResult> RescheduleInterview(long id, ResumeRescheduleInterviewForm input, string type)
{
if (input.InterviewStaffs is null)
return ServiceResult.OprateFailed("面试不能为空!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0152", "至少选择一名面试者!"));
input.InterviewStaffs = input.InterviewStaffs.Where(x => x.StaffId != null).Distinct().ToList();
if (!input.InterviewStaffs.Any())
return ServiceResult.OprateFailed("至少选择一名面试者!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0152", "至少选择一名面试者!"));
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
if (type == "Reschedule")
{
//if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.WaitInterview)
// return ServiceResult.OprateFailed("【待】状态下才能安排面试!");
string content = await QueryLangValue("F_ResumeMaintenance_0158", "传入时间【{0}】无效,请检查格式!");
if (input.Time.IndexOf("~") < 0)
throw new Exception($"传入时间【{input.Time}】无效,请检查格式!");
throw new Exception(string.Format(content, input.Time));
var array = input.Time.Split('~');
try
{
@ -2128,7 +2151,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
}
catch (Exception)
{
throw new Exception($"传入时间【{input.Time}】无效,请检查格式!");
throw new Exception(string.Format(content, input.Time));
}
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
@ -2143,7 +2166,8 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
records[j].Status = DIC_INTERVIEW_ORDER_STATUS.HasInterview;
var staff = await Db.Queryable<Ghra_Staff>().Where(x => x.StaffID == records[j].StaffId).FirstAsync();
await LogRecord(order.Id, $"因发起一个新面试,【{staff?.StaffName}({staff?.StaffNo})】未及时提交评估,自动转入【已面试】!", id, records[j].Id, "TransferWaitSendOffer");
content = await QueryLangValue("F_ResumeMaintenance_0171", "因发起一个新面试,【{0}】未及时提交评估,自动转入【已面试】!", $"{staff?.StaffName}({staff?.StaffNo})");
await LogRecord(order.Id, content, id, records[j].Id, "TransferWaitSendOffer");
}
await _ghrh_InterviewRecordServices.Update(records, ["Status", "UpdateTime", "UpdateBy"]);
}
@ -2194,13 +2218,14 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
});
}
await LogRecord(orderId, $"向【{string.Join("", interviewer.Select(o => o.StaffName + $"{o.StaffNo}"))}】发起一个新的面试,面试时间:{input.Time}", id, null, "ReRecommended");
content = await QueryLangValue("F_ResumeMaintenance_0172", "向【{0}】发起一个新的面试,面试时间:{0}", string.Join("、", interviewer.Select(o => o.StaffName + $"({o.StaffNo})")), input.Time);
await LogRecord(orderId, content, id, null, "ReRecommended");
entity.Status = DIC_INTERVIEW_ORDER_STATUS.WaitInterview;
await Update(entity, ["Status", "UpdateTime", "UpdateBy"]);
if (input.InterviewStaffs.IsNotEmptyOrNull())
await SendMessage(input.InterviewStaffs.Select(x => x.StaffId.Value).ToList(), "简历提醒", "您有个新的邀约面试,请及时查看!", "/M_ESS_Recruit/F_ESS_Interview");
await SendMessage(input.InterviewStaffs.Select(x => x.StaffId.Value).ToList(), await QueryLangValue("F_ResumeMaintenance_0153", "简历提醒"), await QueryLangValue("F_ResumeMaintenance_0173", "您有个新的邀约面试,请及时查看!"), "/M_ESS_Recruit/F_ESS_Interview");
}
else
{
@ -2217,7 +2242,8 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
records[j].Status = DIC_INTERVIEW_ORDER_STATUS.HasInterview;
var staff = await Db.Queryable<Ghra_Staff>().Where(x => x.StaffID == records[j].StaffId).FirstAsync();
await LogRecord(order.Id, $"因发起一个新一轮面试,【{staff?.StaffName}({staff?.StaffNo})】未及时提交评估,自动转入【已面试】!", id, records[j].Id, "TransferWaitSendOffer");
var content = await QueryLangValue("F_ResumeMaintenance_0171", "因发起一个新一轮面试,【{staff?.StaffName}({staff?.StaffNo})】未及时提交评估,自动转入【已面试】!", $"{staff?.StaffName}({staff?.StaffNo})");
await LogRecord(order.Id, content, id, records[j].Id, "TransferWaitSendOffer");
}
await _ghrh_InterviewRecordServices.Update(records, ["Status", "UpdateTime", "UpdateBy"]);
}
@ -2243,10 +2269,11 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
var interviewIds = input.InterviewStaffs.Select(o => o.StaffId.Value).ToList();
var interviewer = await Db.Queryable<Ghra_Staff>().Where(o => interviewIds.Contains(o.StaffID)).ToListAsync();
await LogRecord(order.Id, $"向【{string.Join("", interviewer.Select(o => o.StaffName + $"{o.StaffNo}"))}】发起一个新一轮面试,面试时间:{input.Time}", id, null, "ReScheduleInterview");
var content1 = await QueryLangValue("F_ResumeMaintenance_0174", "向【{0}】发起一个新一轮面试,面试时间:{1}", string.Join("、", interviewer.Select(o => o.StaffName + $"({o.StaffNo})")), input.Time);
await LogRecord(order.Id, content1, id, null, "ReScheduleInterview");
if (input.InterviewStaffs.IsNotEmptyOrNull())
await SendMessage(input.InterviewStaffs.Select(x => x.StaffId.Value).ToList(), "简历提醒", "您有个新的推荐简历,请及时查看!", "/M_ESS_Recruit/F_ESS_Candidate");
await SendMessage(input.InterviewStaffs.Select(x => x.StaffId.Value).ToList(), await QueryLangValue("F_ResumeMaintenance_0153", "简历提醒"), await QueryLangValue("F_ResumeMaintenance_0175", "您有个新的推荐简历,请及时查看!"), "/M_ESS_Recruit/F_ESS_Candidate");
}
}
return ServiceResult.OprateSuccess();
@ -2258,7 +2285,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
{
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
var record = await _ghrh_InterviewRecordServices.QuerySingle(x => x.Round == order.Round && x.OrderId == order.Id);
@ -2272,7 +2299,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
await _ghrh_InterviewRecordServices.Add(insertRecord);
}
await LogRecord(order.Id, "变更状态为:变更面试官!");
await LogRecord(order.Id, await QueryLangValue("F_ResumeMaintenance_0176", "变更面试官!"));
return ServiceResult.OprateSuccess();
}
#endregion
@ -2282,13 +2309,13 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
{
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
var content = (await _ghrh_TemplateServices.Preview(id, templateId, extFields)).Data;
var offerFileUrl = await GenerateOffer(entity, content);
await UpdateResumeStatus(entity, DIC_INTERVIEW_ORDER_STATUS.HasSendOffer);
var content1 = await QueryLangValue("F_ResumeMaintenance_0177", "变更状态为:已发offer!");
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
if (order != null)
{
@ -2305,7 +2332,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
Reverse1 = offerFileUrl,
UserId = App.User.ID,
UserName = App.User.Name,
RemarkSz = $"变更状态为:已发offer!",
RemarkSz = content1
});
}
else
@ -2319,7 +2346,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
Reverse1 = offerFileUrl,
UserId = App.User.ID,
UserName = App.User.Name,
RemarkSz = $"变更状态为:已发offer!",
RemarkSz = content1
});
return ServiceResult.OprateSuccess();
}
@ -2328,10 +2355,10 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
{
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
if (entity.Email.IsNullOrEmpty())
return ServiceResult.OprateFailed("简历中尚未设置邮箱,暂不可发送!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0178", "简历中尚未设置邮箱,暂不可发送!"));
await UpdateResumeStatus(entity, DIC_INTERVIEW_ORDER_STATUS.HasSendOffer);
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
@ -2361,7 +2388,8 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
#region 生成Offer PDf
entity.OfferFileUrl = await GenerateOffer(entity, content);
await Update(entity, ["OfferFileUrl"]);
var ontent1 = await QueryLangValue("F_ResumeMaintenance_0179", "给【{0}】发送Offer!");
ontent1 = string.Format(ontent1, entity.StaffName);
await _ghrh_InterviewLogServices.Add(new InsertGhrh_InterviewLogInput()
{
InterviewOrderId = order.Id,
@ -2372,7 +2400,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
Reverse1 = entity.OfferFileUrl,
UserId = App.User.ID,
UserName = App.User.Name,
RemarkSz = $"给【{entity.StaffName}】发送Offer!",
RemarkSz = ontent1,
});
#endregion
@ -2440,10 +2468,12 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
var id = ids[i];
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.HasSendOffer)
return ServiceResult.OprateFailed("非【已发offer】状态下简历不可发送提醒!");
{
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0180", "非【已发offer】状态下简历不可发送提醒!"));
}
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
if (order != null)
@ -2454,9 +2484,9 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
//{
// var staffs = JsonHelper.JsonToObj<List<ResumeRecommendFormStaff>>(record.ReceiverIds);
//}
await SendMessage([record.StaffId.Value], "简历提醒", "您有个简历【待面试】,请及时查看面试时间!");
await SendMessage([record.StaffId.Value], await QueryLangValue("F_ResumeMaintenance_0153", "简历提醒"), await QueryLangValue("F_ResumeMaintenance_0181", "您有个简历【待面试】,请及时查看面试时间!"));
await LogRecord(order.Id, "发送待已发offer提醒!");
await LogRecord(order.Id, await QueryLangValue("F_ResumeMaintenance_0182", "发送待已发offer提醒!"));
}
}
@ -2473,8 +2503,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
var id = ids[i];
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
//if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.HasSendOffer)
// return ServiceResult.OprateFailed("非【已发offer】状态下简历不可发送提醒!");
@ -2501,7 +2530,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
await Update(entity, ["Status"]);
await _ghrh_InterviewOrderServices.Update(order, ["Status"]);
//await _ghrh_InterviewRecordServices.Update(records, ["Status"]);
await LogRecord(order.Id, isOffer == true ? "标记为已报到!" : "标记为未报到!", id, null, "CheckIn");
await LogRecord(order.Id, isOffer == true ? await QueryLangValue("F_ResumeMaintenance_0183", "标记为已报到!") : await QueryLangValue("F_ResumeMaintenance_0184", "标记为未报到!"), id, null, "CheckIn");
}
else
{
@ -2539,8 +2568,9 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
record.InterviewResult = "不合适";
record.FilterFeedback = input.Content;
});
var content = await QueryLangValue("F_ResumeMaintenance_0185", "变更状态为:不合适,不合适原因:{0}", input.Content ?? "无");
await _ghrh_InterviewRecordServices.Update(records, ["Status", "InterviewResult", "FilterFeedback", "UpdateTime"]);
await LogRecord(order.Id, $"变更状态为:不合适,不合适原因:{input.Content ?? ""}", id, null, "Fail");
await LogRecord(order.Id, content, id, null, "Fail");
}
return ServiceResult.OprateSuccess();
}
@ -2551,8 +2581,7 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
{
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
@ -2565,7 +2594,8 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
order.Status = DIC_INTERVIEW_ORDER_STATUS.Cancel;
await _ghrh_InterviewOrderServices.Update(order, ["Status", "UpdateTime"]);
await LogRecord(order.Id, $"取消面试,取消原因:{record.CancelReason ?? ""}", id, null, "Cancel");
var content = await QueryLangValue("F_ResumeMaintenance_0186", "取消面试,取消原因:{0}", record.CancelReason ?? "无");
await LogRecord(order.Id, content, id, null, "Cancel");
await UpdateResumeStatus(entity, DIC_INTERVIEW_ORDER_STATUS.Cancel);
@ -2581,13 +2611,13 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
var id = ids[i];
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
//if (entity.Status != DIC_INTERVIEW_ORDER_STATUS.HasInterview || entity.Status != DIC_INTERVIEW_ORDER_STATUS.WaitRecommended)
// return ServiceResult.OprateFailed("只有在【已面试】、【待推荐】状态下,才能转入待发Offer!");
if (await Db.Queryable<Ghrh_OfferApplyOrder>().AnyAsync(x => x.WorkState == 0 && x.ResumeId == id))
return ServiceResult.OprateFailed("当前简历录用审批处于审批中,不可转入待发Offer!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0187", "当前简历录用审批处于审批中,不可转入待发Offer!"));
await UpdateResumeStatus(entity, DIC_INTERVIEW_ORDER_STATUS.WaitSendOffer);
@ -2620,11 +2650,11 @@ A.DataType, A.ColumnType, A.IsRequired, A.DataSourceType, A.DataSource, A.DataSo
records[j].Status = DIC_INTERVIEW_ORDER_STATUS.HasInterview;
var staff = await Db.Queryable<Ghra_Staff>().Where(x => x.StaffID == records[j].StaffId).FirstAsync();
await LogRecord(order.Id, $"因状态转入待发Offer,【{staff?.StaffName}({staff?.StaffNo})】未及时提交评估,自动转入【已面试】!", id, records[j].Id, "TransferWaitSendOffer");
await LogRecord(order.Id, await QueryLangValue("F_ResumeMaintenance_0188", "因状态转入待发Offer,【0】未及时提交评估,自动转入【已面试】!", $"{staff?.StaffName}({staff?.StaffNo})"), id, records[j].Id, "TransferWaitSendOffer");
}
await _ghrh_InterviewRecordServices.Update(records, ["Status", "UpdateTime", "UpdateBy"]);
await LogRecord(order.Id, "转入待发Offer!", id, null, "TransferWaitSendOffer");
await LogRecord(order.Id, await QueryLangValue("F_ResumeMaintenance_0189", "转入待发Offer!"), id, null, "TransferWaitSendOffer");
}
}
@ -3230,13 +3260,13 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult<dynamic>.OprateFailed("无效的简历ID!");
return ServiceResult<dynamic>.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
var order = new Ghrh_InterviewOrder();
if (orderId is null)
{
order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
if (order == null)
return ServiceResult<dynamic>.OprateFailed("无效的简历ID!");
return ServiceResult<dynamic>.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
orderId = order.Id;
}
@ -3552,11 +3582,11 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
status = 0;
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
if (order == null)
return ServiceResult.OprateFailed("无效的简历ID!");
return ServiceResult.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
//【简历库-录用-已发offer】配置按钮
var config = await Db.Queryable<Ghrh_Config>().Where(x => x.ConfigCode == "ESS_Recruit_Assess_Mode").FirstAsync();
@ -3614,7 +3644,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
if (records[j].Round == order.Round && assessConfigId.ObjToString() == "EvaluateContent")
{
evaluateContent = assessContent;
records[j].InterviewResult = isPass == records[j].IsPass == false ? "面试不通过" : "面试通过";
records[j].InterviewResult = isPass == records[j].IsPass == false ? await QueryLangValue("F_ResumeMaintenance_0190", "面试不通过") : await QueryLangValue("F_ResumeMaintenance_0191", "面试通过");
records[j].InterviewResultRemark = evaluateContent;
}
records[j].AssessTime = DateTime.Now;
@ -3639,7 +3669,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
if (assessMode != "OR" && source == "ess")
Status = DIC_INTERVIEW_ORDER_STATUS.WaitInterview;
string InterviewResult = isPass == false ? "面试不通过" : "面试通过";
string InterviewResult = isPass == false ? await QueryLangValue("F_ResumeMaintenance_0190", "面试不通过") : await QueryLangValue("F_ResumeMaintenance_0191", "面试通过");
if (entity.Status == DIC_INTERVIEW_ORDER_STATUS.WaitInterview)
{
@ -3672,16 +3702,45 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
await UpdateResumeStatus(entity, Status);
if (source == "ess")
await LogRecord(order.Id, $"提交了面试评估,轮数:{order.Round},是否通过:{(isPass == true ? "" : "")},内容:{evaluateContent}!", id, null, "AssessInterview");
{
var content = await QueryLangValue("F_ResumeMaintenance_0194",
"提交了面试评估,轮数:{0},是否通过:{1},内容:{2}!",
order.Round,
isPass == true ? await QueryLangValue("F_ResumeMaintenance_0194", "通过") : await QueryLangValue("F_ResumeMaintenance_0193", "不通过"),
evaluateContent);
await LogRecord(order.Id, content, id, null, "AssessInterview");
}
else
await LogRecord(order.Id, $"【后台】提交了面试评估,轮数:{order.Round},是否通过:{(isPass == true ? "" : "")},内容:{evaluateContent}!", id, null, "AssessInterview");
{
var content = await QueryLangValue("F_ResumeMaintenance_0194",
"【后台】提交了面试评估,轮数:{0},是否通过:{1},内容:{2}!",
order.Round,
isPass == true ? await QueryLangValue("F_ResumeMaintenance_0195", "通过") : await QueryLangValue("F_ResumeMaintenance_0193", "不通过"),
evaluateContent);
await LogRecord(order.Id, content, id, null, "AssessInterview");
}
}
else
{
if (source == "ess")
await LogRecord(order.Id, $"暂存了面试评估,轮数:{order.Round},是否通过:{(isPass == true ? "" : "")},内容:{evaluateContent}!", id, null, "TempAssessInterview");
{
var content = await QueryLangValue("F_ResumeMaintenance_0194",
"暂存了面试评估,轮数:{0},是否通过:{1},内容:{2}!",
order.Round,
isPass == true ? await QueryLangValue("F_ResumeMaintenance_0196", "通过") : await QueryLangValue("F_ResumeMaintenance_0193", "不通过"),
evaluateContent);
await LogRecord(order.Id, content, id, null, "TempAssessInterview");
}
else
await LogRecord(order.Id, $"【后台】暂存了面试评估,轮数:{order.Round},是否通过:{(isPass == true ? "" : "")},内容:{evaluateContent}!", id, null, "TempAssessInterview");
{
var content = await QueryLangValue("F_ResumeMaintenance_0194",
"【后台】暂存了面试评估,轮数:{0},是否通过:{1},内容:{2}!",
order.Round,
isPass == true ? await QueryLangValue("F_ResumeMaintenance_0197", "通过") : await QueryLangValue("F_ResumeMaintenance_0193", "不通过"),
evaluateContent);
await LogRecord(order.Id, content, id, null, "TempAssessInterview");
}
}
return ServiceResult.OprateSuccess();
@ -3991,7 +4050,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
{
var entity = await base.QueryById(id);
if (entity == null)
return ServiceResult<string>.OprateFailed("无效的简历ID!");
return ServiceResult<string>.OprateFailed(await QueryLangValue("F_ResumeMaintenance_0149", "无效的简历ID!"));
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
var content = (await _ghrh_TemplateServices.Preview(id, templateId, extFields)).Data;
@ -4009,7 +4068,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
Reverse1 = entity.OfferFileUrl,
UserId = App.User.ID,
UserName = App.User.Name,
RemarkSz = $"下载Offer!",
RemarkSz = await QueryLangValue("F_ResumeMaintenance_0198", "下载Offer!"),
});
#endregion
@ -4241,6 +4300,8 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
var Detail = new JObject { };
var item = new JObject { };
string peopleText = await QueryLangValue("F_ResumeMaintenance_0199", "人");
if (menuName == "F_ESS_RecruitmentBoard")
{
@ -4256,7 +4317,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
Detail = new JObject
{
new JProperty("Count", group.Where(x=>x.Status=="HasRecommended").FirstOrDefault()?.Count??0),
new JProperty("Unit","人"),
new JProperty("Unit", peopleText),
new JProperty("MenuName","F_ESS_Candidate"),
new JProperty("TabKey","HasRecommended"),
};
@ -4270,7 +4331,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112701"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "待筛选"),
new JProperty("Title",await QueryLangValue("F_ResumeMaintenance_0200", "待筛选")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4280,7 +4341,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
Detail = new JObject
{
new JProperty("Count", group.Where(x=>x.Status=="WaitAppointment").FirstOrDefault()?.Count??0),
new JProperty("Unit","人"),
new JProperty("Unit",peopleText),
new JProperty("MenuName","F_ESS_Candidate"),
new JProperty("TabKey","WaitAppointment"),
};
@ -4294,7 +4355,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112702"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "待预约"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0201", "待预约")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4304,7 +4365,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
Detail = new JObject
{
new JProperty("Count", group.Where(x=>x.Status=="WaitInterview").FirstOrDefault()?.Count??0),
new JProperty("Unit","人"),
new JProperty("Unit",peopleText),
new JProperty("MenuName","F_ESS_Candidate"),
new JProperty("TabKey","WaitInterview"),
};
@ -4318,7 +4379,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112703"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "待面试"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0202", "待面试")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4329,7 +4390,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
Detail = new JObject
{
new JProperty("Count", sum),
new JProperty("Unit","人"),
new JProperty("Unit",peopleText),
new JProperty("MenuName","F_ESS_Candidate"),
new JProperty("TabKey","HasInterview"),
};
@ -4343,7 +4404,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112704"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "已面试"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0203", "已面试")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4358,7 +4419,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
}).ToListAsync();
Detail = new JObject {
new JProperty("Count", group1.Where(x=>x.Status=="HasOffer").FirstOrDefault()?.Count??0),
new JProperty("Unit","人"),
new JProperty("Unit",peopleText),
new JProperty("MenuName","F_ESS_Candidate"),
new JProperty("TabKey","HasOffer"),
};
@ -4372,7 +4433,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112705"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "已录用"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0204", "已录用")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4391,7 +4452,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
Detail = new JObject
{
new JProperty("Count", group.Where(x=>x.Status=="HasRecommended").FirstOrDefault()?.Count??0),
new JProperty("Unit","人"),
new JProperty("Unit",peopleText),
new JProperty("MenuName","F_ResumeMaintenance"),
new JProperty("TabKey","HasRecommended"),
};
@ -4405,7 +4466,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112701"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "已推荐"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0205", "已推荐")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4415,7 +4476,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
Detail = new JObject
{
new JProperty("Count", group.Where(x=>x.Status=="WaitAppointment").FirstOrDefault()?.Count??0),
new JProperty("Unit","人"),
new JProperty("Unit", peopleText),
new JProperty("MenuName","F_ResumeMaintenance"),
new JProperty("TabKey","WaitAppointment"),
};
@ -4429,7 +4490,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112702"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "待预约"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0206", "待预约")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4439,7 +4500,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
Detail = new JObject
{
new JProperty("Count", group.Where(x=>x.Status=="WaitInterview").FirstOrDefault()?.Count??0),
new JProperty("Unit","人"),
new JProperty("Unit",peopleText),
new JProperty("MenuName","F_ResumeMaintenance"),
new JProperty("TabKey","WaitInterview"),
};
@ -4453,7 +4514,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112703"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "待面试"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0202", "待面试")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4464,7 +4525,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
Detail = new JObject
{
new JProperty("Count", sum),
new JProperty("Unit","人"),
new JProperty("Unit",peopleText),
new JProperty("MenuName","F_ResumeMaintenance"),
new JProperty("TabKey","HasInterview"),
};
@ -4478,7 +4539,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112704"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "已面试"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0203", "已面试")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4487,7 +4548,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
#region 已报到
Detail = new JObject {
new JProperty("Count", group.Where(x=>x.Status=="HasOffer").FirstOrDefault()?.Count??0),
new JProperty("Unit","人"),
new JProperty("Unit",peopleText),
new JProperty("MenuName","F_ResumeMaintenance"),
new JProperty("TabKey","HasOffer"),
};
@ -4501,7 +4562,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112705"),
new JProperty("CardType", "RecruitmentCountCard"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "已报到"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0207", "已报到")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4522,7 +4583,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112706"),
new JProperty("CardType", "RecruitStatisticsChart"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "招聘统计"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0208", "招聘统计")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4542,7 +4603,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
new JProperty("Id", "112707"),
new JProperty("CardType", "AverageTimeConsumption"),
new JProperty("IsStatic", "0"),
new JProperty("Title", "招聘平均耗费时长"),
new JProperty("Title", await QueryLangValue("F_ResumeMaintenance_0209", "招聘平均耗费时长")),
new JProperty("Detail",Detail),
};
columns.Add(item);
@ -4592,7 +4653,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
{
new JProperty("color", "rgba(84, 112, 198, 1)"),
new JProperty("data", data1),
new JProperty("name", "面试人数"),
new JProperty("name", await QueryLangValue("F_ResumeMaintenance_0210", "面试人数")),
};
series.Add(item);
@ -4600,7 +4661,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
{
new JProperty("color", "rgba(145, 204, 117, 1)"),
new JProperty("data", data2),
new JProperty("name", "录用人数"),
new JProperty("name", await QueryLangValue("F_ResumeMaintenance_0211", "录用人数")),
};
series.Add(item);
@ -4608,7 +4669,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
{
new JProperty("color", "rgba(255, 147, 0, 1)"),
new JProperty("data", data3),
new JProperty("name", "面试成功率"),
new JProperty("name", await QueryLangValue("F_ResumeMaintenance_0212", "面试成功率")),
};
series.Add(item);

@ -64,7 +64,7 @@ public class Ghrh_ResumeTemplateServices : BaseServices<Ghrh_ResumeTemplate, Ghr
var sql = @$"DECLARE
@jsonParam NVARCHAR (MAX), -- Json字符串
@ID BIGINT = {filter.id}, -- ID
@langId INT, --
@langId INT= {LangId}, --
@userId INT, -- 使
@MenuName NVARCHAR (100) -- Insert Update Copy Query
@ -88,7 +88,7 @@ BEGIN
FROM (SELECT a.ID,
a.ID ResumeTemplateInfoGroupID,
b.ID ResumeInfoGroupID,
b.GroupName ResumeInfoGroupName,
[dbo].[FLangKeyToValue](b.MKey,@langId,b.GroupName) ResumeInfoGroupName,
b.GroupType,
b.TableName,
b.TablePKIDName,
@ -129,7 +129,7 @@ BEGIN
THEN
isnull
(
(SELECT pp.ResumeInfoColumnName,
(SELECT [dbo].[FLangKeyToValue](pp.MKey,@langId,pp.ResumeInfoColumnName) ResumeInfoColumnName,
pp.Id ResumeInfoColumnId,
pp.IsSingleColumn,
pp.DataType,
@ -159,7 +159,7 @@ BEGIN
THEN
isnull
(
(SELECT pp.ResumeInfoColumnName,
(SELECT [dbo].[FLangKeyToValue](pp.MKey,@langId,pp.ResumeInfoColumnName) ResumeInfoColumnName,
pp.Id ResumeInfoColumnId,
pp.IsSingleColumn,
pp.DataType,

@ -17,11 +17,11 @@ public class Ghrs_LangKeyServices : BaseServices<Ghrs_LangKey, Ghrs_LangKeyDto,
{
var entity =await base.QuerySingle(9801);
for (int i = 146; i < 201; i++)
for (int i = 1; i < 51; i++)
{
entity.CreateTime = DateTime.Now;
entity.UpdateTime = null;
entity.LangKey = "F_ResumeMaintenance_" + i.ToString().PadLeft(4, '0'); ;
entity.LangKey = "M_ManReqMainten_" + i.ToString().PadLeft(4, '0'); ;
await Db.Insertable(entity).ExecuteReturnIdentityAsync();
}

Loading…
Cancel
Save