You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Tiobon.Web.Core/Tiobon.Core.Services/Ghrh/Ghrh_InterviewOrderServices.cs

200 lines
8.5 KiB

using Tiobon.Core.IServices;
using static Tiobon.Core.Model.Consts;
namespace Tiobon.Core.Services;
/// <summary>
/// 面试工单 (服务)
/// </summary>
public class Ghrh_InterviewOrderServices : BaseServices<Ghrh_InterviewOrder, Ghrh_InterviewOrderDto, InsertGhrh_InterviewOrderInput, EditGhrh_InterviewOrderInput>, IGhrh_InterviewOrderServices
{
private readonly IBaseRepository<Ghrh_InterviewOrder> _dal;
private readonly IGhrh_InterviewRecordServices _ghrh_InterviewRecordServices;
public Ghrh_InterviewOrderServices(ICaching caching,
IGhrh_InterviewRecordServices ghrh_InterviewRecordServices,
IBaseRepository<Ghrh_InterviewOrder> dal)
{
this._dal = dal;
base.BaseDal = dal;
base._caching = caching;
_ghrh_InterviewRecordServices = ghrh_InterviewRecordServices;
}
public override async Task<long> Add(InsertGhrh_InterviewOrderInput entity)
{
var result = await base.Add(entity);
if (entity.RequestId != null)
await Db.Updateable<Ghrh_HumanRequest>()
.SetColumns(it => it.RecommendCount == it.RecommendCount + 1)
.Where(it => it.Id == entity.RequestId)
.ExecuteCommandAsync();
return result;
}
public override async Task<List<Ghrh_InterviewOrderDto>> QueryDto(Expression<Func<Ghrh_InterviewOrder, bool>> 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<ServicePageResult<Ghrh_InterviewOrderDto>> 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<Ghrh_InterviewOrderDto>(sql);
var result = new ServicePageResult<Ghrh_InterviewOrderDto>(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<Ghrh_Resume>().Where(x => resumeIds.Contains(x.Id)).ToListAsync();
var requests = await Db.Queryable<Ghrh_HumanRequest>().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<Ghra_Title>().Where(x => x.TitleID != null && titleIds.Contains(x.TitleID.Value)).ToListAsync();
var tagIds = new List<long>();
resumes.ForEach(x =>
{
if (x.Tags.IsNotEmptyOrNull())
tagIds.AddRange(JsonHelper.JsonToObj<List<long>>(x.Tags));
});
tagIds = tagIds.Distinct().ToList();
var tags = await Db.Queryable<Ghrh_ResumeTag>().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<List<long>>(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
}