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_ResumeServices.cs

284 lines
14 KiB

using AgileObjects.AgileMapper;
using Newtonsoft.Json.Linq;
using SqlSugar;
using System.Linq.Expressions;
using Tiobon.Core.Common;
using Tiobon.Core.Common.Caches;
using Tiobon.Core.Common.Extensions;
using Tiobon.Core.Common.Helper;
using Tiobon.Core.IRepository.Base;
using Tiobon.Core.IServices;
using Tiobon.Core.Model;
using Tiobon.Core.Model.Models;
using Tiobon.Core.Model.ViewModels.Extend;
using Tiobon.Core.Services.BASE;
namespace Tiobon.Core.Services;
/// <summary>
/// 个人简历 (服务)
/// </summary>
public class Ghrh_ResumeServices : BaseServices<Ghrh_Resume, Ghrh_ResumeDto, InsertGhrh_ResumeInput, EditGhrh_ResumeInput>, IGhrh_ResumeServices
{
private readonly IBaseRepository<Ghrh_Resume> _dal;
private readonly IGhrh_ResumeEduBGServices _ghre_ResumeEduBGServices;
private readonly IGhrh_ResumeWorkExpServices _ghre_ResumeWorkExpServices;
private readonly IGhrh_ResumeTagServices _ghre_ResumeTagServices;
public Ghrh_ResumeServices(ICaching caching,
IBaseRepository<Ghrh_Resume> dal,
IGhrh_ResumeEduBGServices ghre_ResumeEduBGServices,
IGhrh_ResumeTagServices ghre_ResumeTagServices,
IGhrh_ResumeWorkExpServices ghre_ResumeWorkExpServices)
{
this._dal = dal;
base.BaseDal = dal;
base._caching = caching;
_ghre_ResumeEduBGServices = ghre_ResumeEduBGServices;
_ghre_ResumeTagServices = ghre_ResumeTagServices;
_ghre_ResumeWorkExpServices = ghre_ResumeWorkExpServices;
}
public override async Task<ServicePageResult<Ghrh_ResumeDto>> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true)
{
var query = Db.Queryable<Ghrh_Resume>();
#region 处理查询条件
//Expression<Func<Ghrh_Resume, bool>> whereExpression = new Expression<Func<Ghrh_Resume, bool>>();
var whereExpression = Expressionable.Create<Ghrh_Resume>();
foreach (JProperty jProperty in filter.jsonParam.Properties())
{
var name = jProperty.Name;
var value = jProperty.Value.ToString();
if (name == "page" || name == "pageSize")
continue;
if (value.IsNotEmptyOrNull())
{
var jsonParam = JsonHelper.JsonToObj<JsonParam>(value);
switch (name)
{
case "WaitRecommend":
if (jsonParam.columnValue.ObjToInt() == 1)
whereExpression.And(x => x.IsRecommend != true);
break;
case "HasRecommend":
if (jsonParam.columnValue.ObjToInt() == 1)
whereExpression.And(x => x.IsRecommend == true);
break;
case "SalaryPeriod":
case "Education":
case "ApplyStatus":
case "Gender":
//if (jsonParam.columnValue.IsNotEmptyOrNull())
//{
// var ids1 = JsonHelper.JsonToObj<List<string>>(jsonParam.columnValue.ToString());
// if (!ids1.Any(x => x == "NoFliter"))
// whereExpression.And(x => ids1.Contains(x.Education));
//}
if (jsonParam.columnValue != null)
{
var ids1 = JsonHelper.JsonToObj<List<string>>(jsonParam.columnValue.ToString());
if (!ids1.Any(x => x == "NoFliter"))
condition += $" AND {name} IN ({string.Join(",", ids1.Select(id => "'" + id + "'"))})";
}
break;
case "WorkYears":
case "Age":
if (jsonParam.columnValue.IsNotEmptyOrNull())
{
var ids1 = JsonHelper.JsonToObj<List<string>>(jsonParam.columnValue.ToString());
if (!ids1.Any(x => x == "NoFliter"))
{
var i = 0;
condition += " AND (";
ids1.ForEach(x =>
{
var arr = x.Split(['-']);
if (i == 0)
condition += $"({name} >= {arr[0]} AND {name} <={arr[1]})";
else
condition += $" OR ({name} >= {arr[0]} AND {name} <={arr[1]})";
i++;
});
condition += ")";
}
}
break;
case "Tags":
if (jsonParam.columnValue.IsNotEmptyOrNull())
{
var ids1 = JsonHelper.JsonToObj<List<string>>(jsonParam.columnValue.ToString());
if (!ids1.Any(x => x == "NoFliter"))
{
var i = 0;
condition += " AND (";
ids1.ForEach(x =>
{
var arr = x.Split(['-']);
if (i == 0)
condition += $"({name} like '%{x}%')";
else
condition += $" OR ({name} like '%{x}%')";
i++;
});
condition += ")";
}
}
break;
case "Keywords":
if (jsonParam.columnValue.IsNotEmptyOrNull())
whereExpression.And(x => (x.StaffName.Contains(jsonParam.columnValue.ToString()) ||
x.StaffEname.Contains(jsonParam.columnValue.ToString()) ||
x.Tags.Contains(jsonParam.columnValue.ToString()) ||
x.RemarkSz.Contains(jsonParam.columnValue.ToString()) ||
x.School.Contains(jsonParam.columnValue.ToString())));
break;
default:
break;
}
}
}
#endregion
RefAsync<int> total = 0;
var entitys = await query
.WhereIF(condition.IsNotEmptyOrNull(), condition)
.Where(whereExpression.ToExpression())
.ToPageListAsync(filter.pageNum, filter.pageSize, total);
var result = new ServicePageResult<Ghrh_ResumeDto>(filter.pageNum, total, filter.pageSize, Mapper.Map(entitys).ToANew<List<Ghrh_ResumeDto>>());
var list = result.result.DT_TableDataT1;
var ids = list.Select(x => x.Id).ToList();
var titleIds = list.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 eduBGs = await _ghre_ResumeEduBGServices.QueryDto(x => x.ResumeId != null && ids.Contains(x.ResumeId.Value));
var workExps = await _ghre_ResumeWorkExpServices.QueryDto(x => x.ResumeId != null && ids.Contains(x.ResumeId.Value));
eduBGs.ForEach(async x =>
{
x.DegreeLevelLabel = await GetParaLabel("EducationalBGLevel", x.DegreeLevel);
x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate);
x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate);
});
workExps.ForEach(x =>
{
x.BeginDate1 = DateTimeHelper.ConvertToDayString(x.BeginDate);
x.EndDate1 = DateTimeHelper.ConvertToDayString(x.EndDate);
});
var tagIds = new List<long>();
list.ForEach(x =>
{
if (x.Tags.IsNotEmptyOrNull())
tagIds.AddRange(JsonHelper.JsonToObj<List<long>>(x.Tags));
});
tagIds = tagIds.Distinct().ToList();
var tags = await _ghre_ResumeTagServices.QueryDto(x => tagIds.Contains(x.Id));
list.ForEach(async x =>
{
if (x.TitleId != null) x.TitleName = titles.Where(o => o.TitleID == x.TitleId).FirstOrDefault()?.TitleName;
x.GenderLabel = await GetParaLabel("Gender", x.Gender);
x.EducationLabel = await GetParaLabel("EducationalBGLevel", x.Education);
x.NationLabel = await GetParaLabel("A02", x.Nation);
x.MaritalStatusLabel = await GetParaLabel("A03", x.MaritalStatus);
x.PoliticStatusLabel = await GetParaLabel("A04", x.PoliticStatus);
x.UrgentRelationLabel = await GetParaLabel("SocialRelationType", x.UrgentRelation);
x.EduBG = eduBGs.Where(o => x.Id == o.ResumeId).ToList();
x.WorkExp = workExps.Where(o => x.Id == o.ResumeId).ToList();
if (x.Tags.IsNotEmptyOrNull())
{
var tagIds1 = JsonHelper.JsonToObj<List<long>>(x.Tags);
x.TagList = tags.Where(o => tagIds1.Contains(o.Id)).Select(o => o.TagName).ToList();
}
});
return result;
}
#region 获取简历Tabs接口
public ServiceResult<List<ResumeViewTab>> QueryViewTab()
{
string str = "[\r\n\t{\r\n\t\t\"MenuName\": \"F_ResumeMaintenance_All\",\r\n\t\t\"TabName\": \"简历库\",\r\n\t\t\"QueryUrl\": \"/api/Ghrh_Resume/QueryList/All\",\r\n\t\t\"Count\": 0,\r\n\t\t\"Items\": [\r\n\t\t\t{\r\n\t\t\t\t\"ItemName\": \"待推荐\",\r\n\t\t\t\t\"Key\": \"WaitRecommend\",\r\n\t\t\t\t\"Count\": 0\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t\"ItemName\": \"已推荐\",\r\n\t\t\t\t\"Key\": \"HasRecommend\",\r\n\t\t\t\t\"Count\": 0\r\n\t\t\t}\r\n\t\t]\r\n\t},\r\n\t{\r\n\t\t\"MenuName\": \"F_ResumeMaintenance_Process\",\r\n\t\t\"TabName\": \"面试过程\",\r\n\t\t\"QueryUrl\": \"/api/Ghrh_Resume/QueryList/Process\",\r\n\t\t\"Count\": 0\r\n\t},\r\n\t{\r\n\t\t\"MenuName\": \"F_ResumeMaintenance_Hire\",\r\n\t\t\"TabName\": \"录用\",\r\n\t\t\"QueryUrl\": \"/api/Ghrh_Resume/QueryList/Hire\",\r\n\t\t\"Count\": 0\r\n\t},\r\n\t{\r\n\t\t\"MenuName\": \"F_ResumeMaintenance_Talent_Pool\",\r\n\t\t\"TabName\": \"人才库\",\r\n\t\t\"QueryUrl\": \"/api/Ghrh_Resume/QueryList/Talent_Pool\",\r\n\t\t\"Count\": 0\r\n\t},\r\n\t{\r\n\t\t\"MenuName\": \"F_ResumeMaintenance_Recycled\",\r\n\t\t\"TabName\": \"回收站\",\r\n\t\t\"QueryUrl\": \"/api/Ghrh_Resume/QueryList/Recycled\",\r\n\t\t\"Count\": 0\r\n\t},\r\n\t{\r\n\t\t\"MenuName\": \"F_ResumeMaintenance_Blacklist\",\r\n\t\t\"TabName\": \"黑名单\",\r\n\t\t\"QueryUrl\": \"/api/Ghrh_Resume/QueryList/Blacklist\",\r\n\t\t\"Count\": 0\r\n\t}\r\n]";
var tabs = JsonHelper.JsonToObj<List<ResumeViewTab>>(str);
return ServiceResult<List<ResumeViewTab>>.OprateSuccess("查询成功!", tabs);
}
#endregion
#region 获取查询条件
public async Task<ServiceResult<List<ResumeCondition>>> QueryConditions()
{
string str = "[\r\n\t{\r\n\t\t\"Key\": \"Education\",\r\n\t\t\"Name\": \"学历要求\",\r\n\t\t\"ParaMasterNo\": \"EducationalBGLevel\"\r\n\t},\r\n\t{\r\n\t\t\"Key\": \"WorkYears\",\r\n\t\t\"Name\": \"经验要求\",\r\n\t\t\"ParaMasterNo\": \"ResumeWorkYears\"\r\n\t},\r\n\t{\r\n\t\t\"Key\": \"Age\",\r\n\t\t\"Name\": \"年龄要求\",\r\n\t\t\"ParaMasterNo\": \"AgePeriodSetup\"\r\n\t},\r\n\t{\r\n\t\t\"Key\": \"Gender\",\r\n\t\t\"Name\": \"性 别\",\r\n\t\t\"ParaMasterNo\": \"Gender\"\r\n\t},\r\n\t{\r\n\t\t\"Key\": \"SalaryPeriod\",\r\n\t\t\"Name\": \"薪资区间\",\r\n\t\t\"ParaMasterNo\": \"SalaryPeriodSetup\"\r\n\t},\r\n\t{\r\n\t\t\"Key\": \"ApplyStatus\",\r\n\t\t\"Name\": \"求职状态\",\r\n\t\t\"ParaMasterNo\": \"ResumeApplyStatus\"\r\n\t},\r\n\t{\r\n\t\t\"Key\": \"Tags\",\r\n\t\t\"Name\": \"标签\",\r\n\t\t\"ParaMasterNo\": \"ResumeTag\"\r\n\t}\r\n]";
var tabs = JsonHelper.JsonToObj<List<ResumeCondition>>(str);
tabs.ForEach(async x =>
{
var items = await GetParaList(x.ParaMasterNo);
if (x.Key == "Tags")
items.Insert(0, new Ghrs_ParaDetail() { ParaDetailNo = "NoFliter", ParaDetailName = "未打标签" });
else
items.Insert(0, new Ghrs_ParaDetail() { ParaDetailNo = "NoFliter", ParaDetailName = "不限" });
x.Items = items.ToDictionary(item => item.ParaDetailNo, item => item.ParaDetailName);
});
return ServiceResult<List<ResumeCondition>>.OprateSuccess("查询成功!", tabs);
}
#endregion
#region 处理是否推荐
public async Task<ServiceResult> SwitchIsRecommend(List<long> ids, bool isRecommend)
{
await Db.Updateable<Ghrh_Resume>()
.SetColumns(it => new Ghrh_Resume()
{
IsRecommend = isRecommend,
UpdateBy = App.User.ID,
UpdateTime = DateTime.Now,
})
.Where(it => ids.Contains(it.Id)).ExecuteCommandAsync();
return ServiceResult.OprateSuccess();
}
#endregion
#region 修改状态
public async Task<bool> UpdateStatus(List<long> ids, string status)
{
var result = await Db.Updateable<Ghrh_Resume>()
.SetColumns(it => new Ghrh_Resume()
{
Status = status,
UpdateBy = App.User.ID,
UpdateTime = DateTime.Now,
})
.Where(it => ids.Contains(it.Id)).ExecuteCommandAsync();
return result > 0 ? true : false;
}
#endregion
#region 添加标签
public async Task<bool> MarkTags(List<long> ids, List<long> tags)
{
var tag = JsonHelper.ObjToJson(tags);
var result = await Db.Updateable<Ghrh_Resume>()
.SetColumns(it => new Ghrh_Resume()
{
Tags = tag,
UpdateBy = App.User.ID,
UpdateTime = DateTime.Now,
})
.Where(it => ids.Contains(it.Id))
.ExecuteCommandAsync();
return result > 0 ? true : false;
}
#endregion
}