简历查看页面接口开发

master
xiaochanghai 6 months ago
parent 3c7651dd8a
commit 5e06b257d5
  1. 953
      Model/Tiobon.Web.pdm
  2. 2
      Tiobon.Core.Api/Controllers/Authorize/AuthorizeController.cs
  3. 35
      Tiobon.Core.Api/Tiobon.Core.Model.xml
  4. 13
      Tiobon.Core.Model/Base/Ghrh/Ghrh_InterviewLog.Dto.Base.cs
  5. 4
      Tiobon.Core.Model/Consts.cs
  6. 13
      Tiobon.Core.Model/Models/Ghrh/Ghrh_InterviewLog.cs
  7. 87
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs
  8. 35
      Tiobon.Core/Tiobon.Core.Model.xml

File diff suppressed because it is too large Load Diff

@ -283,7 +283,7 @@ public class AuthorizeController : BaseApiController
{
//如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色
var claims = new List<Claim> {
new Claim(ClaimTypes.Name, user.FirstOrDefault().UserId.ToString()),
new Claim(ClaimTypes.Name, user.FirstOrDefault().UserName.ToString()),
new Claim(JwtRegisteredClaimNames.Jti, user.FirstOrDefault().UserId.ToString()),
new Claim("TenantId", "0"),
new Claim(JwtRegisteredClaimNames.Iat, DateTime.Now.DateToTimeStamp()),

@ -7395,6 +7395,21 @@
面试记录ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLogBase.ResumeId">
<summary>
简历ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLogBase.UserId">
<summary>
用户ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLogBase.UserName">
<summary>
用户名
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLogBase.Source">
<summary>
来源
@ -20871,6 +20886,21 @@
面试记录ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLog.ResumeId">
<summary>
简历ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLog.UserId">
<summary>
用户ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLog.UserName">
<summary>
用户名
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLog.Source">
<summary>
来源
@ -28557,6 +28587,11 @@
待面试
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_INTERVIEW_ORDER_STATUS.SystemCancelInterview">
<summary>
面试取消(系统)
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_INTERVIEW_ORDER_STATUS.HasInterview">
<summary>
已面试

@ -6,7 +6,7 @@
*
* Ver
*
*V0.01 2024/12/13 14:03:44 SimonHsiao
*V0.01 2024/12/13 14:18:56 SimonHsiao
*
* Copyright(c) 2024 Tiobon Corporation. All Rights Reserved.
*
@ -38,6 +38,17 @@ public class Ghrh_InterviewLogBase
/// </summary>
public long? ResumeId { get; set; }
/// <summary>
/// 用户ID
/// </summary>
public long? UserId { get; set; }
/// <summary>
/// 用户名
/// </summary>
[Display(Name = "UserName"), Description("用户名"), MaxLength(64, ErrorMessage = "用户名 不能超过 64 个字符")]
public string UserName { get; set; }
/// <summary>
/// 来源
/// </summary>

@ -356,6 +356,10 @@ public class Consts
/// </summary>
public const string WaitInterview = "WaitInterview";
/// <summary>
/// 面试取消(系统)
/// </summary>
public const string SystemCancelInterview = "SystemCancelInterview";
/// <summary>
/// 已面试
/// </summary>
public const string HasInterview = "HasInterview";

@ -6,7 +6,7 @@
*
* Ver
*
*V0.01 2024/12/13 14:03:44 SimonHsiao
*V0.01 2024/12/13 14:18:56 SimonHsiao
*
* Copyright(c) 2024 Tiobon Corporation. All Rights Reserved.
*
@ -39,6 +39,17 @@ public class Ghrh_InterviewLog : BasePoco
/// </summary>
public long? ResumeId { get; set; }
/// <summary>
/// 用户ID
/// </summary>
public long? UserId { get; set; }
/// <summary>
/// 用户名
/// </summary>
[Display(Name = "UserName"), Description("用户名"), MaxLength(64, ErrorMessage = "用户名 不能超过 64 个字符")]
public string UserName { get; set; }
/// <summary>
/// 来源
/// </summary>

@ -1621,8 +1621,22 @@ END";
await Update(entity, ["Status"]);
#region 日志
var usser = await GetUser();
await LogRecord(orderId, $"用户【{usser?.UserName ?? App.User.ID.ToString()}】向【{string.Join(",", interviewer.Select(o => o.StaffName))}】推荐了简历!", id, null, "Recommended");
await LogRecord(orderId, $"向【{string.Join(",", interviewer.Select(o => o.StaffName))}】推荐了简历,推荐理由:{recommend.RecommendRemark ?? ""}", id, null, "Recommended", true);
#endregion
#region 处理附件
if (recommend.Attachments != null && recommend.Attachments.Any())
for (int i = 0; i < recommend.Attachments.Count; i++)
{
await Db.Updateable<Ghrs_Attachment>()
.SetColumns(it => new Ghrs_Attachment()
{
TableName = orderId.ObjToString(),
UpdateTime = DateTime.Now
})
.Where(it => it.RelativePath == recommend.Attachments[i].RelativePath)
.ExecuteCommandAsync();
}
#endregion
}
@ -1657,10 +1671,8 @@ END";
if (records[i].FirstViewTime.IsNullOrEmpty())
await SendMessage([records[i].StaffId.Value], "简历提醒", "您有个简历推荐,请及时查看!", "/M_ESS_Recruit/F_ESS_Candidate");
}
#region 日志
var usser = await GetUser();
await LogRecord(order.Id, $"用户【{usser?.UserName ?? App.User.ID.ToString()}】向【{string.Join(",", interviewer.Select(o => o.StaffName))}】发送简历推荐提醒!", id, null, "RemindHasRecommend");
await LogRecord(order.Id, $"向【{string.Join(",", interviewer.Select(o => o.StaffName))}】发送简历推荐提醒!", id, null, "RemindHasRecommend");
#endregion
}
}
@ -1721,6 +1733,8 @@ END";
time = DateTimeHelper.ConvertToMiniuteString(time1[0]) + "~" + DateTimeHelper.ConvertToOnlyHourMinuteString(time1[1]);
}
form.Times[i] = time;
if (i == 0)
records.ForEach(record => record.PlanInterviewTime1 = time);
else if (i == 1)
@ -1738,9 +1752,9 @@ END";
await _ghrh_InterviewRecordServices.Update(records[0], ["PlanInterviewTime1", "PlanInterviewTime2", "PlanInterviewTime3", "Status"]);
#region 日志
var usser = await GetUser();
await LogRecord(order.Id, $"用户【{usser?.UserName ?? App.User.ID.ToString()}】预约面试,面试时间:{string.Join("", form.Times)}", id, null, "SubscribeInterview");
await LogRecord(order.Id, $"预约面试,面试时间:{string.Join("", form.Times)},约面反馈:{order.AppointmentFeedback ?? ""}", id, null, "SubscribeInterview");
#endregion
await UpdateResumeStatus(entity, DIC_INTERVIEW_ORDER_STATUS.WaitAppointment);
}
@ -1790,7 +1804,7 @@ END";
await _ghrh_InterviewRecordServices.Update(records, ["InterviewTime", "InterviewBeginTime", "InterviewEndTime", "Status", "UpdateTime", "UpdateBy"]);
await _ghrh_InterviewOrderServices.Update(order, ["InterviewStepName", "UpdateTime", "UpdateBy"]);
await LogRecord(order.Id, $"安排面试,面试时间:{body.Time}");
await LogRecord(order.Id, $"安排面试,面试时间:{body.Time},面试地点:{body.InterviewAddress},面试备注:{body.Remark ?? ""}", id, records[0].Id, "ScheduleInterview", true);
entity.Status = DIC_INTERVIEW_ORDER_STATUS.WaitInterview;
await Update(entity, ["Status", "UpdateTime", "UpdateBy"]);
@ -1798,9 +1812,22 @@ END";
for (int i = 0; i < records.Count; i++)
{
await SendMessage([records[i].StaffId.Value], "面试提醒", $"您有个简历待面试,面试时间:{body.Time},请及时查看!", "/M_ESS_Recruit/F_ESS_Interview");
}
#region 处理附件
if (body.Attachments != null && body.Attachments.Any())
for (int i = 0; i < body.Attachments.Count; i++)
{
await Db.Updateable<Ghrs_Attachment>()
.SetColumns(it => new Ghrs_Attachment()
{
TableName = records[0].Id.ObjToString(),
UpdateTime = DateTime.Now
})
.Where(it => it.RelativePath == body.Attachments[i].RelativePath)
.ExecuteCommandAsync();
}
#endregion
}
return ServiceResult.OprateSuccess();
@ -1995,8 +2022,18 @@ END";
await _ghrh_InterviewOrderServices.Update(order, ["Status", "Round"]);
await Db.Updateable<Ghrh_InterviewRecord>()
.SetColumns(it => new Ghrh_InterviewRecord()
{
Status = DIC_INTERVIEW_ORDER_STATUS.SystemCancelInterview,
UpdateTime = DateTime.Now
})
.Where(it => it.Status == DIC_INTERVIEW_ORDER_STATUS.WaitInterview && it.OrderId == order.Id)
.ExecuteCommandAsync();
for (int i = 0; i < input.InterviewStaffs.Count; i++)
{
await _ghrh_InterviewRecordServices.Add(new InsertGhrh_InterviewRecordInput()
{
OrderId = order.Id,
@ -2009,8 +2046,12 @@ END";
Status = DIC_INTERVIEW_ORDER_STATUS.WaitInterview
});
}
var interviewIds = input.InterviewStaffs.Where(o => o.StaffId != null)
.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))}】发起一个新一轮面试,面试时间:{input.Time}", id, null, "ReScheduleInterview");
await LogRecord(order.Id, $"发起一个新的面试,面试时间:{input.Time}");
entity.Status = DIC_INTERVIEW_ORDER_STATUS.WaitInterview;
await Update(entity, ["Status"]);
@ -2040,6 +2081,11 @@ END";
Status = DIC_INTERVIEW_ORDER_STATUS.HasRecommended,
StaffId = input.InterviewStaffs[i].StaffId,
});
var interviewIds = input.InterviewStaffs.Where(o => o.StaffId != null)
.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))}】发起一个新的面试,面试时间:{input.Time}", id, null, "ReRecommended");
if (input.InterviewStaffs.IsNotEmptyOrNull())
await SendMessage(input.InterviewStaffs.Select(x => x.StaffId.Value).ToList(), "简历提醒", "您有个新的推荐简历,请及时查看!", "/M_ESS_Recruit/F_ESS_Candidate");
@ -3031,7 +3077,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 AND C.Status = A.Status";
obj.Add(new JProperty("Score" + (i + 1), assessDetail.AssessContent.ObjToInt()));
else
obj.Add(new JProperty("Score" + (i + 1), null));
if (record.StaffId == staffId)
if (record.StaffId == staffId && record.Round == order.Round)
obj.Add(new JProperty("CanEdit" + (i + 1), true));
else
obj.Add(new JProperty("CanEdit" + (i + 1), false));
@ -3041,8 +3087,6 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 AND C.Status = A.Status";
result.Body = body;
#endregion
#region Header
var printHeader = new JArray();
@ -3172,10 +3216,10 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 AND C.Status = A.Status";
if (assessDetail != null)
obj.Add(new JProperty("Score" + (i + 1), assessDetail.AssessContent.ObjToInt()));
obj.Add(new JProperty("Score" + (i + 1), assessDetail.AssessContent.ObjToInt() == 1 ? "通过" : "不通过"));
else
obj.Add(new JProperty("Score" + (i + 1), null));
if (record.StaffId == staffId)
if (record.StaffId == staffId && record.Round == order.Round)
obj.Add(new JProperty("CanEdit" + (i + 1), true));
else
obj.Add(new JProperty("CanEdit" + (i + 1), false));
@ -3288,11 +3332,10 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 AND C.Status = A.Status";
await UpdateResumeStatus(entity, Status);
await LogRecord(order.Id, $"提交了面试评估,轮数:{order.Round},是否通过:{(isPass == true ? "" : "")},内容:{evaluateContent}!");
await LogRecord(order.Id, $"提交了面试评估,轮数:{order.Round},是否通过:{(isPass == true ? "" : "")},内容:{evaluateContent}!");
await LogRecord(order.Id, $"提交了面试评估,轮数:{order.Round},是否通过:{(isPass == true ? "" : "")},内容:{evaluateContent}!", id, null, "AssessInterview");
}
else
await LogRecord(order.Id, $"暂存了面试评估,轮数:{order.Round},是否通过:{(isPass == true ? "" : "")},内容:{evaluateContent}!");
await LogRecord(order.Id, $"暂存了面试评估,轮数:{order.Round},是否通过:{(isPass == true ? "" : "")},内容:{evaluateContent}!", id, null, "AssessInterview");
return ServiceResult.OprateSuccess();
}
@ -3474,16 +3517,18 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 AND C.Status = A.Status";
/// <param name="orderId">面试单ID</param>
/// <param name="content">内容</param>
/// <returns></returns>
public async Task LogRecord(long orderId, string content, long? resumeId = null, long? recordId = null, string source = null)
public async Task LogRecord(long orderId, string content, long? resumeId = null, long? recordId = null, string source = null, bool? hasAttachment = null)
{
var usser = await GetUser();
await _ghrh_InterviewLogServices.Add(new InsertGhrh_InterviewLogInput()
{
InterviewOrderId = orderId,
InterviewRecordId = recordId,
ResumeId = resumeId,
Source = source,
RemarkSz = $"用户【{usser?.UserName ?? App.User.ID.ToString()}】" + content
UserId = App.User.ID,
UserName = App.User.Name,
RemarkSz = content,
ReverseI1 = hasAttachment == true ? 1 : 0// 是否有附件
});
}
public async Task UpdateResumeStatus(Ghrh_Resume entity, string Status)

@ -7395,6 +7395,21 @@
面试记录ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLogBase.ResumeId">
<summary>
简历ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLogBase.UserId">
<summary>
用户ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLogBase.UserName">
<summary>
用户名
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLogBase.Source">
<summary>
来源
@ -20871,6 +20886,21 @@
面试记录ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLog.ResumeId">
<summary>
简历ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLog.UserId">
<summary>
用户ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLog.UserName">
<summary>
用户名
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_InterviewLog.Source">
<summary>
来源
@ -28557,6 +28587,11 @@
待面试
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_INTERVIEW_ORDER_STATUS.SystemCancelInterview">
<summary>
面试取消(系统)
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_INTERVIEW_ORDER_STATUS.HasInterview">
<summary>
已面试

Loading…
Cancel
Save