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.
284 lines
14 KiB
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
|
|
} |