/// <summary> /// 获取简历ID /// </summary> /// <param name="data"></param> /// <param name="cookie"></param> /// <returns></returns> private string GetResumeId(ResumeSearch data, CookieContainer cookie) { var keyWord = HttpUtility.UrlEncode(data.University); var companyName = HttpUtility.UrlEncode(data.LastCompany); if (!string.IsNullOrWhiteSpace(keyWord) || !string.IsNullOrWhiteSpace(companyName)) { return(GetResumeId(keyWord, companyName, data.Name, cookie)); } return(string.Empty); }
/// <summary> /// 获取简历ID /// </summary> /// <param name="data"></param> /// <param name="cookie"></param> /// <param name="user"></param> /// <returns></returns> private static DataResult <string> GetResumeId(ResumeSearch data, CookieContainer cookie, User user) { var keyWord = HttpUtility.UrlEncode(data.University); var companyName = HttpUtility.UrlEncode(data.LastCompany); if (!string.IsNullOrWhiteSpace(keyWord) || !string.IsNullOrWhiteSpace(companyName)) { return(GetResumeId(keyWord, companyName, data.Name, cookie, user)); } return(new DataResult <string>()); }
/// <summary> /// 拉取没有联系方式的简历 /// </summary> /// <returns></returns> private static List <ResumeSearch> PullResumes() { var resumesList = new List <ResumeSearch>(); togo: var requestStr = RequestFactory.QueryRequest(Global.PullResumesUrl); if (string.IsNullOrWhiteSpace(requestStr)) { return(resumesList); } var jObject = JsonConvert.DeserializeObject(requestStr) as JObject; var jArray = jObject["Resumes"] as JArray; if (jArray == null) { goto togo; } Global.TotalMatch += jArray.Count; foreach (var item in jArray) { var resume = new ResumeSearch(); resume.Name = item["Name"].ToString(); var worksArr = (JArray)item["Works"]; resume.LastCompany = worksArr.Count > 0 ? worksArr[0]["Company"].ToString() : ""; var educationsArr = (JArray)item["Educations"]; resume.University = educationsArr.Count > 0 ? educationsArr[0]["School"].ToString() : ""; resume.ResumeId = item["Reference"]?["Id"].ToString(); resume.ResumeNumber = ((JArray)(item["Reference"]?["Mapping"]))?[2]["Value"].ToString(); resume.UserMasterExtId = ((JArray)(item["Reference"]?["Mapping"]))?[1]["Value"].ToString(); resume.University = item["Educations"]?[0]?["School"].ToString(); resumesList.Add(resume); } return(resumesList); }
public static DataResult <string> GetResumeId(ResumeSearch data, string host) { var dataResult = new DataResult <string>(); CookieContainer cookie; var result = GetUser(userDictionary, host, true, MatchPlatform.FenJianLi, Login, out cookie); if (!result.IsSuccess) { dataResult.IsSuccess = false; dataResult.Code = result.Code; dataResult.ErrorMsg = result.ErrorMsg; return(dataResult); } var user = result.Data; dataResult = GetResumeId(data, cookie, user); using (var db = new ResumeMatchDBEntities()) { var resume = db.ResumeComplete.FirstOrDefault(f => f.ResumeId == data.ResumeId); if (resume != null) { resume.Host = host; resume.MatchPlatform = (short)MatchPlatform.FenJianLi; resume.MatchTime = DateTime.UtcNow; resume.UserId = user.Id; if (!string.IsNullOrWhiteSpace(dataResult.Data)) { resume.Status = 2; resume.MatchResumeId = dataResult.Data; } db.TransactionSaveChanges(); } } return(dataResult); }
/// <summary> /// 简历搜索 /// </summary> /// <param name="searchData"></param> /// <returns></returns> public DataResult <string> ResumeRepair(ResumeSearch searchData) { var dataRsult = new DataResult <string>(); try { EntityFramework.FenJianLi user = new EntityFramework.FenJianLi(); lock (lockObj) { while (!queue.TryDequeue(out user)) { using (var db = new EntityFramework.ResumeRepairDBEntities()) { var users = db.FenJianLi.Where(w => w.IsEnable).ToList(); users.ForEach(f => { queue.Enqueue(f); }); } } } var cookie = Login(user.Email, user.PassWord); // 设置 Cookie var resumeId = GetResumeId(searchData, cookie); if (string.IsNullOrWhiteSpace(resumeId)) { dataRsult.IsSuccess = false; } else { dataRsult.Data = resumeId; } return(dataRsult); } catch (Exception ex) { dataRsult.IsSuccess = false; dataRsult.ErrorMsg = $"程序异常,异常原因:{ex.Message},堆栈信息:{ex.StackTrace}"; return(dataRsult); } }
/// <summary> /// 匹配简历 /// </summary> /// <param name="data"></param> /// <param name="host"></param> /// <returns></returns> private static bool MatchResume(ResumeSearch data, string host) { var dataResult = Platform.ZhaoPinGou.SearchResumeSpider.GetResumeId(data, host); if (dataResult == null) { return(false); } if (!dataResult.IsSuccess) { switch (dataResult.Code) { case ResultCodeEnum.ProxyDisable: LogFactory.Info($"Host:{host} 代理失效!", MessageSubjectEnum.ZhaoPinGou); return(string.IsNullOrWhiteSpace(host) || host == "210.83.225.31:15839"); case ResultCodeEnum.RequestUpperLimit: LogFactory.Info($"Host:{host} 请求达到当日上限!", MessageSubjectEnum.ZhaoPinGou); return(string.IsNullOrWhiteSpace(host) || host == "210.83.225.31:15839"); case ResultCodeEnum.NoUsers: LogFactory.Info($"Host:{host} 对应的Host没有可用用户!", MessageSubjectEnum.ZhaoPinGou); return(string.IsNullOrWhiteSpace(host) || host == "210.83.225.31:15839"); case ResultCodeEnum.WebNoConnection: LogFactory.Warn("网站无法建立链接!", MessageSubjectEnum.ZhaoPinGou); break; default: LogFactory.Warn($"匹配结果返回异常!异常消息:{dataResult.ErrorMsg} ", MessageSubjectEnum.ZhaoPinGou); return(string.IsNullOrWhiteSpace(host) || host == "210.83.225.31:15839"); } } if (!string.IsNullOrWhiteSpace(dataResult.Data)) { LogFactory.Info($"匹配成功!简历ID:{data.ResumeId},姓名:{data.Name}", MessageSubjectEnum.ZhaoPinGou); return(true); } dataResult = Platform.FenJianLi.SearchResumeSpider.GetResumeId(data, host); if (dataResult == null) { return(false); } if (!dataResult.IsSuccess) { switch (dataResult.Code) { case ResultCodeEnum.ProxyDisable: LogFactory.Info($"Host:{host} 代理失效!", MessageSubjectEnum.FenJianLi); return(string.IsNullOrWhiteSpace(host) || host == "210.83.225.31:15839"); case ResultCodeEnum.RequestUpperLimit: LogFactory.Info($"Host:{host} 请求达到当日上限!", MessageSubjectEnum.FenJianLi); return(string.IsNullOrWhiteSpace(host) || host == "210.83.225.31:15839"); case ResultCodeEnum.NoUsers: LogFactory.Info($"Host:{host} 对应的Host没有可用用户!", MessageSubjectEnum.FenJianLi); return(string.IsNullOrWhiteSpace(host) || host == "210.83.225.31:15839"); case ResultCodeEnum.WebNoConnection: LogFactory.Warn("网站无法建立链接!", MessageSubjectEnum.FenJianLi); break; default: LogFactory.Warn($"匹配结果返回异常!异常消息:{dataResult.ErrorMsg} ", MessageSubjectEnum.FenJianLi); return(string.IsNullOrWhiteSpace(host) || host == "210.83.225.31:15839"); } } if (!string.IsNullOrWhiteSpace(dataResult.Data)) { LogFactory.Info($"匹配成功!简历ID:{data.ResumeId},姓名:{data.Name}", MessageSubjectEnum.FenJianLi); return(true); } using (var db = new ResumeMatchDBEntities()) { var resume = db.ResumeComplete.FirstOrDefault(f => f.ResumeId == data.ResumeId); if (resume != null) { resume.Status = 3; if (dataResult.Code == ResultCodeEnum.WebNoConnection) { resume.Status = 9; } LogFactory.Info($"匹配失败!简历ID:{resume.ResumeId},姓名:{resume.Name}"); db.TransactionSaveChanges(); } } return(true); }
/// <summary> /// 工作任务 /// </summary> /// <param name="i"></param> private static void Work(ResumeSearch i) { var dataResult = resumeSpider.ResumeRepair(i); // 纷简历平台 using (var db = new ResumeRepairDBEntities()) { if (dataResult.IsSuccess) { ContactInformationSpider.actionBlock.Post(dataResult.Data + "-" + i.ResumeNumber.Substring(0, 10)); var resume = db.ResumeRecord.FirstOrDefault(w => w.ResumePlatform == 1 && w.ResumeId == i.ResumeId); if (resume != null) { resume.Status = (int)ResumeRecordStatus.MatchSuccess; resume.MatchPlatform = 1; resume.MatchResumeId = dataResult.Data + "-" + i.ResumeNumber.Substring(0, 10); resume.MatchTime = DateTime.UtcNow; FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.tbx_ResumeRepair, $"匹配成功!平台:纷简历,简历ID:{i.ResumeId}"); Interlocked.Add(ref Global.TotalMatchSuccess, 1); } else { FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, $"记录简历匹配结果失败!简历ID:{i.ResumeId},结果:匹配成功!"); } } else { var resume = db.ResumeRecord.FirstOrDefault(w => w.ResumePlatform == 1 && w.ResumeId == i.ResumeId); if (resume != null) { resume.Status = (int)ResumeRecordStatus.MatchFailure; resume.MatchTime = DateTime.UtcNow; FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.tbx_ResumeRepair, $"匹配失败!平台:纷简历,简历ID:{i.ResumeId}"); } else { FenJianLiScheduling.ssf.SetText(FenJianLiScheduling.ssf.system_tbx_Exception, $"记录简历匹配结果失败!简历ID:{i.ResumeId},结果:匹配失败!"); } var requestParam = new List <ResumeMatchResult> { new ResumeMatchResult { ResumeNumber = i.ResumeNumber.Substring(0, 10), Status = 3 } }; var data = RequestFactory.QueryRequest(Global.PostResumesUrl, JsonConvert.SerializeObject(requestParam), RequestEnum.POST, contentType: "application/json"); resume.PostBackStatus = data.Contains("成功") ? (short)1 : (short)2; } db.SaveChanges(); } }
private static List <ResumeSearch> PullAllResumes() { var list = PullResumesByZeLin(); if (list != null) { return(list); } var resumesList = new List <ResumeSearch>(); Retry: var dataResult = RequestFactory.QueryRequest(Global.HostZhao + "/splider/Resume/GetResumeWithNoDeal?rowcount=100"); if (!dataResult.IsSuccess || string.IsNullOrWhiteSpace(dataResult.Data)) { goto Retry; } var jObject = JsonConvert.DeserializeObject(dataResult.Data) as JObject; if (jObject != null) { var jArray = jObject["Resumes"] as JArray; if (jArray == null) { goto Retry; } Global.TotalMatch += jArray.Count; foreach (var item in jArray) { var resume = new ResumeSearch(); resume.Name = item["Name"].ToString(); var worksArr = (JArray)item["Works"]; resume.LastCompany = worksArr.Count > 0 ? worksArr[0]["Company"].ToString() : ""; var educationsArr = (JArray)item["Educations"]; resume.University = educationsArr.Count > 0 ? educationsArr[0]["School"].ToString() : ""; resume.ResumeId = item["Reference"]?["Id"].ToString(); resume.ResumeNumber = ((JArray)item["Reference"]?["Mapping"])?[2]["Value"].ToString(); resume.UserMasterExtId = ((JArray)item["Reference"]?["Mapping"])?[1]["Value"].ToString(); resume.University = item["Educations"]?[0]?["School"].ToString(); resume.Gender = item["Gender"].ToString() == "男" ? (short)0 : item["Gender"].ToString() == "女" ? (short)1 : (short)-1; resume.Degree = item["Degree"].ToString(); resume.Introduction = item["Intention"]?["Evaluation"].ToString(); resumesList.Add(resume); } } if (resumesList.Count == 0) { goto Retry; } using (var db = new ResumeMatchDBEntities()) { var resumeIdArr = resumesList.Select(s => s.ResumeId).ToArray(); var resumes = db.ResumeComplete.Where(w => resumeIdArr.Any(a => a == w.ResumeId)).ToList(); var removeArr = resumes.Select(s => s.ResumeId).ToArray(); if (removeArr.Any()) { LogFactory.Warn("获取到重复简历!ResumeID:" + string.Join(",", removeArr)); } var idArr = resumes.Where(a => a.Status == 6 || a.Status == 2).Select(s => s.ResumeId).ToArray(); if (idArr.Length > 0) { LogFactory.Warn("过滤掉已有联系方式的重复简历!" + string.Join(",", idArr)); resumes.RemoveAll(r => idArr.Any(a => a == r.ResumeId)); resumesList.RemoveAll(r => idArr.Any(a => a == r.ResumeId)); } db.ResumeComplete.RemoveRange(resumes); db.TransactionSaveChanges(); db.ResumeComplete.AddRange(resumesList.Select(s => new ResumeComplete { CreateTime = DateTime.UtcNow, Gender = s.Gender, Introduction = s.Introduction, LastCompany = s.LastCompany, LibraryExist = 0, Name = s.Name, PostBackStatus = 0, ResumeId = s.ResumeId, ResumeNumber = s.ResumeNumber, ResumePlatform = 1, Status = 0, University = s.University, UserMasterExtId = s.UserMasterExtId, Degree = s.Degree, Weights = 0 })); db.TransactionSaveChanges(); } return(FilterExist(resumesList)); }
public static DataResult <string> GetResumeId(ResumeSearch data, string host) { var dataResult = new DataResult <string>(); CookieContainer cookie; var result = GetUser(userDictionary, host, true, MatchPlatform.JianLiKa, Login, out cookie); if (!result.IsSuccess) { dataResult.IsSuccess = false; dataResult.Code = result.Code; dataResult.ErrorMsg = result.ErrorMsg; return(dataResult); } var user = result.Data; var count = 0; var keyWord = string.Empty; if (!string.IsNullOrWhiteSpace(data.University)) { keyWord += data.University + " "; } ++count; if (count == 0) { return(new DataResult <string>()); } if (!string.IsNullOrWhiteSpace(data.Introduction)) { var strArr = jbs.Cut(data.Introduction.Replace("\r\n", "")).Where(w => w.Length > 1).ToArray(); keyWord += string.Join(" ", strArr.Skip(strArr.Length / 2 - 1).Take(3 - count)); } keyWord = HttpUtility.UrlEncode(keyWord)?.Replace("+", "%20"); var gender = data.Gender; var degress = MatchDegree(data.Degree); dataResult = GetResumeId(keyWord, data.LastCompany, gender, degress, data.Introduction, cookie, user); using (var db = new ResumeMatchDBEntities()) { var resume = db.ResumeComplete.FirstOrDefault(f => f.ResumeId == data.ResumeId); if (resume != null) { resume.Host = host; resume.MatchPlatform = (short)MatchPlatform.JianLiKa; resume.MatchTime = DateTime.UtcNow; resume.UserId = user.Id; if (!string.IsNullOrWhiteSpace(dataResult.Data)) { resume.Status = 2; resume.MatchResumeId = dataResult.Data; } db.TransactionSaveChanges(); } } return(dataResult); }