Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 5
0
        /// <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();
            }
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
        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);
        }