From 39b91f5de5fbff7cb60bbe65e3dd7f0ea2ff8b39 Mon Sep 17 00:00:00 2001 From: xiaochanghai Date: Thu, 23 Jan 2025 10:49:09 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=A2=E8=AF=95=E5=AE=98/HR=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=20-=20=E5=8F=91OFFER=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ReportController.cs | 20 +++++ Tiobon.Core.Api/Tiobon.Core.xml | 14 +++ Tiobon.Core.IServices/IReportServices.cs | 2 + Tiobon.Core.Services/ReportServices.cs | 85 +++++++++++++++++++ 4 files changed, 121 insertions(+) diff --git a/Tiobon.Core.Api/Controllers/ReportController.cs b/Tiobon.Core.Api/Controllers/ReportController.cs index 000a8a6f..d378c8d1 100644 --- a/Tiobon.Core.Api/Controllers/ReportController.cs +++ b/Tiobon.Core.Api/Controllers/ReportController.cs @@ -58,4 +58,24 @@ public class ReportController : BaseController> QueryInterviewPassRate(int langId) => await _service.QueryInterviewPassRate(langId); #endregion + + #region 面试官-发OFFER率 + /// + /// 面试官-简历筛选通过率 + /// + /// langId + /// + [HttpPost("QueryESSSendOfferRate/{langId}")] + public async Task> QueryESSSendOfferRate(int langId) => await _service.QuerySendOfferRate(langId, App.User.StaffId); + #endregion + + #region HR推荐-发OFFER率 + /// + /// HR推荐-简历筛选通过率 + /// + /// langId + /// + [HttpPost("QuerySendOfferRate/{langId}")] + public async Task> QuerySendOfferRate(int langId) => await _service.QuerySendOfferRate(langId); + #endregion } \ No newline at end of file diff --git a/Tiobon.Core.Api/Tiobon.Core.xml b/Tiobon.Core.Api/Tiobon.Core.xml index 0b2072c7..7c38ced3 100644 --- a/Tiobon.Core.Api/Tiobon.Core.xml +++ b/Tiobon.Core.Api/Tiobon.Core.xml @@ -611,6 +611,20 @@ langId + + + 面试官-简历筛选通过率 + + langId + + + + + HR推荐-简历筛选通过率 + + langId + + 分页获取 diff --git a/Tiobon.Core.IServices/IReportServices.cs b/Tiobon.Core.IServices/IReportServices.cs index 672054f4..a8d48b37 100644 --- a/Tiobon.Core.IServices/IReportServices.cs +++ b/Tiobon.Core.IServices/IReportServices.cs @@ -15,4 +15,6 @@ public interface IReportServices : IBaseServices> QueryESSResumeScreenPassRate(int langId = 1); Task> QueryInterviewPassRate(int langId = 1, int? staffId = null); + + Task> QuerySendOfferRate(int langId = 1, int? staffId = null); } diff --git a/Tiobon.Core.Services/ReportServices.cs b/Tiobon.Core.Services/ReportServices.cs index 7aa3c6cd..11b512f9 100644 --- a/Tiobon.Core.Services/ReportServices.cs +++ b/Tiobon.Core.Services/ReportServices.cs @@ -217,4 +217,89 @@ public partial class ReportServices : BaseServices.OprateSuccess("获取成功", data); } #endregion + + #region 面试官/HR推荐 - 发OFFER率 + /// + /// 面试官/HR推荐 - 发OFFER率:已发offer人数 / 面试通过人数 × 100% + /// + /// + /// + public async Task> QuerySendOfferRate(int langId = 1, int? staffId = null) + { + + dynamic data = new ExpandoObject(); + var series = new JArray(); + var XAxis = new List(); + var date = DateTime.Now.AddMonths(-11); + var data1 = new List(); + var data2 = new List(); + var data3 = new List(); + + var startDate = DateTime.Now.AddMonths(-11); + var endDate = DateTime.Now.AddMonths(1); + + startDate = new DateTime(startDate.Year, startDate.Month, 1); + endDate = new DateTime(endDate.Year, endDate.Month, 1); + + var orderIds = await Db.Queryable() + .WhereIF(staffId != null, x => x.StaffId == staffId) + .Where(x => x.CreateTime >= startDate && x.CreateTime < endDate) + .Select(x => x.OrderId) + .Distinct() + .ToListAsync(); + + var orders = await Db.Queryable().Where(x => + orderIds.Contains(x.Id) && + x.Status == DIC_INTERVIEW_ORDER_STATUS.HasSendOffer || + x.Status == DIC_INTERVIEW_ORDER_STATUS.HasOffer).ToListAsync(); + for (int i = 1; i <= 12; i++) + { + var date1 = DateTimeHelper.ConvertToMonthString(date); + XAxis.Add(date1); + + var group = orders + .Where(x => x.RecommendTime != null && x.RecommendTime.Value.Date.Month == date.Month && x.RecommendTime.Value.Date.Year == date.Year && x.IsPass == true) + .ToList(); + + var count = group.Count; + var count1 = group.Where(x => x.IsPass == true).Count(); + var count2 = count - count1; + data1.Add(count); + data2.Add(count2); + decimal count3 = 0; + if (count2 > 0 && count > 0) + count3 = ((decimal)count2 / count) * 100; + data3.Add(StringHelper.TrimDecimal(count3, 2)); + date = date.AddMonths(1); + } + + var item = new JObject + { + new JProperty("color", "rgba(43, 165, 177, 1)"), + new JProperty("data", data1), + new JProperty("name", await QueryLangValue("F_ResumeMaintenance_0235", "面试通过人数")), + }; + series.Add(item); + + item = new JObject + { + new JProperty("color", "rgba(255, 152, 18, 1)"), + new JProperty("data", data2), + new JProperty("name", await QueryLangValue("F_ResumeMaintenance_0236", "已发offer人数")), + }; + series.Add(item); + + item = new JObject + { + new JProperty("color", "rgba(255, 147, 0, 1)"), + new JProperty("data", data3), + new JProperty("name", await QueryLangValue("F_ResumeMaintenance_0237", "已发OFFER率")), + }; + series.Add(item); + + data.XAxis = XAxis; + data.series = series; + return ServiceResult.OprateSuccess("获取成功", data); + } + #endregion }