using Tiobon.Core.IServices; using static Tiobon.Core.Model.Consts; namespace Tiobon.Core.Services; /// /// 面试工单 (服务) /// public class Ghrh_InterviewOrderServices : BaseServices, IGhrh_InterviewOrderServices { private readonly IBaseRepository _dal; private readonly IGhrh_InterviewRecordServices _ghrh_InterviewRecordServices; public Ghrh_InterviewOrderServices(ICaching caching, IGhrh_InterviewRecordServices ghrh_InterviewRecordServices, IBaseRepository dal) { this._dal = dal; base.BaseDal = dal; base._caching = caching; _ghrh_InterviewRecordServices = ghrh_InterviewRecordServices; } public override async Task Add(InsertGhrh_InterviewOrderInput entity) { var result = await base.Add(entity); if (entity.RequestId != null) await Db.Updateable() .SetColumns(it => it.RecommendCount == it.RecommendCount + 1) .Where(it => it.Id == entity.RequestId) .ExecuteCommandAsync(); return result; } public override async Task> QueryDto(Expression> whereExpression) { var data = await base.QueryDto(whereExpression); var ids = data.Select(x => x.Id).ToList(); var records = await _ghrh_InterviewRecordServices.Query(x => x.OrderId != null && ids.Contains(x.OrderId.Value)); data.ForEach(x => { var record = records.Where(o => x.Round == o.Round && o.OrderId == x.Id).FirstOrDefault(); if (record != null) { if (record.PlanInterviewTime1.IsNotEmptyOrNull()) x.OptionalInterviewTime += record.PlanInterviewTime1; if (record.PlanInterviewTime2.IsNotEmptyOrNull()) x.OptionalInterviewTime += "," + record.PlanInterviewTime2; if (record.PlanInterviewTime3.IsNotEmptyOrNull()) x.OptionalInterviewTime += "," + record.PlanInterviewTime3; x.InterviewTime = record.InterviewTime; x.InterviewAddress = record.InterviewAddress; } }); return data; } #region 查询 public override async Task> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true) { if (string.IsNullOrWhiteSpace(filter.orderBy)) filter.orderBy = "CreateTime1 DESC"; if (filter.pageSize == 0) filter.pageSize = 10000; Type entityType = typeof(Ghrh_InterviewOrder); var countSql = @$" SELECT COUNT(1) FROM {entityType.GetEntityTableName()}"; var sql1 = @$"DECLARE @langId INT = {filter.langId};"; var sql = @$" SELECT *, ISNULL ((SELECT CASE WHEN @langId = 1 THEN UserName ELSE UserEname END FROM Ghrs_User B WHERE B.UserId = A.CreateBy), '') CreateDataInfo, ISNULL ((SELECT CASE WHEN @langId = 1 THEN UserName ELSE UserEname END FROM Ghrs_User B WHERE B.UserId = A.UpdateBy), '') UpdateDataInfo, ISNULL(A.UpdateTime, A.CreateTime) CreateTime1 FROM {entityType.GetEntityTableName()} A"; string conditions = " WHERE 1=1 "; //if (IsEnable == true) // conditions += " AND IsEnable = 1"; //else if (IsEnable == false) // conditions += " AND IsEnable = 0"; if (!string.IsNullOrWhiteSpace(condition)) conditions += " AND " + condition; var properties = entityType.GetGenericProperties(); if (filter.jsonParam != null) foreach (JProperty jProperty in filter.jsonParam.Properties()) { var name = jProperty.Name; var value = jProperty.Value.ToString(); if (name == "page" || name == "pageSize" || !properties.Any(x => x.Name == name)) continue; if (!string.IsNullOrWhiteSpace(value)) conditions = DealConditions(conditions, name, value); } sql += conditions; countSql += conditions; int total = await Db.Ado.GetIntAsync(countSql); sql = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY " + filter.orderBy + ") NUM FROM (SELECT * FROM (" + sql + " "; sql += ") A ) B ) C"; sql += " WHERE NUM <= " + filter.pageNum * filter.pageSize + " AND NUM >" + (filter.pageNum - 1) * filter.pageSize; sql = sql1 + sql; var entitys = await Db.Ado.SqlQueryAsync(sql); var result = new ServicePageResult(filter.pageNum, total, filter.pageSize, entitys); var list = result.result.DT_TableDataT1; var resumeIds = list.Where(x => x.ResumeId != null).Select(x => x.ResumeId).ToList(); var requestIds = list.Where(x => x.RequestId != null).Select(x => x.RequestId).ToList(); var resumes = await Db.Queryable().Where(x => resumeIds.Contains(x.Id)).ToListAsync(); var requests = await Db.Queryable().Where(x => requestIds.Contains(x.Id)).ToListAsync(); var titleIds = resumes.Where(x => x.TitleId != null).Select(x => x.TitleId.Value).Distinct().ToList(); var titles = await Db.Queryable().Where(x => x.TitleID != null && titleIds.Contains(x.TitleID.Value)).ToListAsync(); var tagIds = new List(); resumes.ForEach(x => { if (x.Tags.IsNotEmptyOrNull()) tagIds.AddRange(JsonHelper.JsonToObj>(x.Tags)); }); tagIds = tagIds.Distinct().ToList(); var tags = await Db.Queryable().Where(x => tagIds.Contains(x.Id)).ToListAsync(); for (int i = 0; i < list.Count; i++) { var entity = list[i]; var resume = resumes.Where(x => x.Id == entity.ResumeId).FirstOrDefault(); if (resume != null) { entity.StaffName = resume.StaffName; entity.IdCardNo = resume.IdCardNo; entity.CertificateType = await GetParaLabel("D51", resume.CertificateType); entity.EduDegree = await GetParaLabel("EducationalBGLevel", resume.EduDegree); entity.Gender = await GetParaLabel("Gender", resume.Gender); if (resume.TitleId != null) entity.TitleName = titles.Where(o => o.TitleID == resume.TitleId).FirstOrDefault()?.TitleName; if (resume.Tags.IsNotEmptyOrNull()) { var tagIds1 = JsonHelper.JsonToObj>(resume.Tags); var TagList = tags.Where(o => tagIds1.Contains(o.Id)).Select(o => o.TagName).ToList(); entity.Tag = string.Join(",", TagList); } #region 计算年龄 if (resume.Birthday != null && resume.Birthday > DateTime.MinValue) { DateTime birthdate = (DateTime)resume.Birthday; DateTime now = DateTime.Now; int age = now.Year - birthdate.Year; if (now.Month < birthdate.Month || (now.Month == birthdate.Month && now.Day < birthdate.Day)) age--; entity.Age = age; } #endregion switch (entity.Status) { case "Fail": entity.StatusLabel = "不合适"; break; case "HasRecommended": entity.StatusLabel = "待预约"; break; case "Hire": entity.StatusLabel = "不合适"; break; default: entity.StatusLabel = "已约面"; break; } } if (entity.RequestId != null) { var request = requests.Where(x => x.Id == entity.RequestId).FirstOrDefault(); entity.RequestNo = request.RequestNo; } } return result; } #endregion }