/// <summary>
        /// 下载简历
        /// </summary>
        /// <param name="host"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        private static bool DownloadResume(string host, ResumeComplete data)
        {
            var dataResult = new DataResult();

            MessageSubjectEnum messageSubjectEnum = 0;

            if (data.MatchPlatform == (short)MatchPlatform.FenJianLi)
            {
                messageSubjectEnum = MessageSubjectEnum.FenJianLi;

                dataResult = Platform.FenJianLi.DownloadResumeSpider.DownloadResume(data, host);
            }

            if (data.MatchPlatform == (short)MatchPlatform.ZhaoPinGou)
            {
                messageSubjectEnum = MessageSubjectEnum.ZhaoPinGou;

                dataResult = Platform.ZhaoPinGou.DownloadResumeSpider.DownloadResume(data, host);
            }

            if (dataResult == null)
            {
                return(false);
            }

            if (!dataResult.IsSuccess)
            {
                switch (dataResult.Code)
                {
                case ResultCodeEnum.ProxyDisable:

                    LogFactory.Info($"Host:{host} 代理失效!", messageSubjectEnum);

                    return(false);

                case ResultCodeEnum.NoUsers:

                    LogFactory.Info($"Host:{host} 对应的Host没有可用用户用于下载简历!{dataResult.ErrorMsg}", messageSubjectEnum);

                    return(false);

                case ResultCodeEnum.WebNoConnection:

                    LogFactory.Warn("网站无法建立链接!", MessageSubjectEnum.FenJianLi);

                    return(true);

                default:

                    LogFactory.Warn($"下载简历异常!异常消息:{dataResult.ErrorMsg} ", messageSubjectEnum);

                    return(false);
                }
            }

            LogFactory.Info($"简历补全成功!ResumeId:{data.ResumeId}", messageSubjectEnum);

            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// 招聘狗旧库过滤
        /// </summary>
        /// <param name="resume"></param>
        /// <returns></returns>
        private static bool Filer(ResumeComplete resume)
        {
            var resumes = new List <ResumeComplete>();

            resumes.Add(resume);

            resumes = ResumeFiler.ZhaoPinGou(resumes); // 过滤已有的招聘狗简历

            if (!resumes.Any())
            {
                return(true);
            }

            return(false);
        }
Esempio n. 3
0
        public static DataResult DownloadResume(ResumeComplete data, string host)
        {
            var dataResult = new DataResult <string>();

            dataResult.IsSuccess = false;

            CookieContainer cookie;

Next:

            var result = GetUser(userDictionary, host, false, 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;

            if (string.IsNullOrWhiteSpace(user.FolderCode))
            {
                dataResult = GetFolderId(cookie, host);

                if (!dataResult.IsSuccess)
                {
                    return(dataResult);
                }

                user.FolderCode = dataResult.Data;
            }

            var unLockResult = UnLockResume(cookie, user, data.MatchResumeId, host, user.FolderCode);

            using (var db = new ResumeMatchDBEntities())
            {
                var resumeEntity = db.ResumeComplete.FirstOrDefault(f => f.Id == data.Id);

                if (resumeEntity == null)
                {
                    LogFactory.Warn($"找不到简历!Id:{data.Id}", MessageSubjectEnum.FenJianLi);

                    return(dataResult);
                }

                var userEntity = db.User.FirstOrDefault(f => f.Id == user.Id);

                if (userEntity == null)
                {
                    LogFactory.Warn($"找不到用户!用户:{user.Email}", MessageSubjectEnum.FenJianLi);

                    db.TransactionSaveChanges();

                    return(dataResult);
                }

                userEntity.FolderCode = user.FolderCode;

                if (!unLockResult.IsSuccess)
                {
                    resumeEntity.Status = 5;

                    if (unLockResult.Code == ResultCodeEnum.NoDownloadNumber)
                    {
                        user.DownloadNumber = 0;

                        userEntity.DownloadNumber = 0;

                        resumeEntity.Status = 2;

                        user.LastLoginTime = DateTime.UtcNow;

                        userEntity.LastLoginTime = DateTime.UtcNow;

                        db.TransactionSaveChanges();

                        goto Next;
                    }

                    db.TransactionSaveChanges();

                    return(unLockResult);
                }

                resumeEntity.DownloadTime = DateTime.UtcNow;

                resumeEntity.Status = 4;

                resumeEntity.UserId = user.Id;

                user.DownloadNumber--;

                if (user.DownloadNumber == 0)
                {
                    userEntity.LastLoginTime = DateTime.UtcNow;
                }

                userEntity.DownloadNumber = user.DownloadNumber;

                var id = data.MatchResumeId.Substring(0, data.MatchResumeId.IndexOf("/", StringComparison.Ordinal));

                dataResult = ResumeDetailSpider(id, cookie, host);

                if (!dataResult.IsSuccess)
                {
                    resumeEntity.Status = 7;

                    dataResult.ErrorMsg = "获取简历详情异常!";

                    dataResult.IsSuccess = false;

                    db.TransactionSaveChanges();

                    return(dataResult);
                }

                var jObject = JsonConvert.DeserializeObject(dataResult.Data) as JObject;

                if (jObject == null)
                {
                    resumeEntity.Status = 7;

                    dataResult.ErrorMsg = "简历反序列化异常!";

                    dataResult.IsSuccess = false;

                    SaveFile(id, dataResult.Data, user.Email);

                    db.TransactionSaveChanges();

                    return(dataResult);
                }

                var email = (string)jObject["contact"]?["email"];

                var cellphone = (string)jObject["contact"]?["mobile"];

                if (cellphone == null)
                {
                    resumeEntity.Status = 7;

                    LogFactory.Warn($"补全简历异常!电话为空,ResumeId:{data.ResumeId}", MessageSubjectEnum.FenJianLi);

                    SaveFile(id, dataResult.Data, user.Email);

                    db.TransactionSaveChanges();

                    dataResult.IsSuccess = false;

                    return(dataResult);
                }

                resumeEntity.PostBackStatus = 2;

                resumeEntity.Status = 6;

                var matchedResult = new List <ResumeMatchResult>
                {
                    new ResumeMatchResult
                    {
                        ResumeNumber = data.ResumeNumber,
                        Cellphone    = cellphone,
                        Email        = email,
                        Status       = 2
                    }
                };

                SaveFile(id, dataResult.Data, user.Email);

                if (ApiBase.PostResumes(matchedResult))
                {
                    resumeEntity.PostBackStatus = 1;
                }

                resumeEntity.Email = email;

                resumeEntity.Cellphone = cellphone;

                db.TransactionSaveChanges();

                dataResult.IsSuccess = true;
            }

            return(dataResult);
        }
Esempio n. 4
0
        public static DataResult DownloadResume(ResumeComplete data, string host)
        {
            if (Filer(data))
            {
                return(new DataResult());
            }

            var dataResult = new DataResult <string>();

            dataResult.IsSuccess = false;

            CookieContainer cookie;

Next:

            var result = GetUser(userDictionary, host, false, MatchPlatform.ZhaoPinGou, Login, out cookie);

            if (!result.IsSuccess)
            {
                dataResult.IsSuccess = false;

                dataResult.Code = result.Code;

                dataResult.ErrorMsg = result.ErrorMsg;

                return(dataResult);
            }

            var user = result.Data;

            var userToken = cookie.GetCookies(new Uri("http://qiye.zhaopingou.com/"))["hrkeepToken"];

            if (string.IsNullOrWhiteSpace(user.FolderCode))
            {
                dataResult = GetFolderId(cookie, user, userToken?.Value, data.MatchResumeId, host);

                if (!dataResult.IsSuccess)
                {
                    return(dataResult);
                }

                user.FolderCode = dataResult.Data;
            }

            var unLockResult = UnLockResume(cookie, user, userToken?.Value, data.MatchResumeId, host, user.FolderCode);

            using (var db = new ResumeMatchDBEntities())
            {
                var resumeEntity = db.ResumeComplete.FirstOrDefault(f => f.Id == data.Id);

                if (resumeEntity == null)
                {
                    LogFactory.Warn($"找不到简历!Id:{data.Id}", MessageSubjectEnum.ZhaoPinGou);

                    return(dataResult);
                }

                var userEntity = db.User.FirstOrDefault(f => f.Id == user.Id);

                if (userEntity == null)
                {
                    LogFactory.Warn($"找不到用户!用户:{user.Email}", MessageSubjectEnum.ZhaoPinGou);

                    db.TransactionSaveChanges();

                    return(dataResult);
                }

                userEntity.FolderCode = user.FolderCode;

                if (!unLockResult.IsSuccess)
                {
                    resumeEntity.Status = 5;

                    if (unLockResult.Code == ResultCodeEnum.NoDownloadNumber)
                    {
                        var userTemp = user;

                        var users = userDictionary.Keys.Where(f => f.Email == userTemp.Email);

                        foreach (var item in users)
                        {
                            userDictionary.TryRemove(item, out cookie);
                        }

                        user.DownloadNumber = 0;

                        userEntity.DownloadNumber = 0;

                        resumeEntity.Status = 2;

                        user.LastLoginTime = DateTime.UtcNow;

                        userEntity.LastLoginTime = DateTime.UtcNow;

                        db.TransactionSaveChanges();

                        goto Next;
                    }

                    db.TransactionSaveChanges();

                    return(unLockResult);
                }

                resumeEntity.DownloadTime = DateTime.UtcNow;

                resumeEntity.Status = 4;

                resumeEntity.UserId = user.Id;

                user.DownloadNumber--;

                if (user.DownloadNumber == 0)
                {
                    userEntity.LastLoginTime = DateTime.UtcNow;
                }

                userEntity.DownloadNumber = user.DownloadNumber;

                dataResult = ResumeDetailSpider(data.MatchResumeId, cookie, host, userToken?.Value);

                if (!dataResult.IsSuccess)
                {
                    resumeEntity.Status = 7;

                    db.TransactionSaveChanges();

                    return(dataResult);
                }

                var resumeHtml = dataResult.Data;

                var cellphone = Regex.IsMatch(resumeHtml, "(?s)电话:</label>(\\d+)</p>") ? Regex.Match(resumeHtml, "(?s)电话:</label>(\\d+)</p>").Result("$1") : null;

                if (cellphone == null)
                {
                    resumeEntity.Status = 7;

                    LogFactory.Warn($"补全简历异常!电话为空,ResumeId:{data.ResumeId}", MessageSubjectEnum.ZhaoPinGou);

                    db.TransactionSaveChanges();

                    return(dataResult);
                }

                var email = Regex.IsMatch(resumeHtml, "(?s)邮箱:</label>(.+?)</p>") ? Regex.Match(resumeHtml, "(?s)邮箱:</label>(.+?)</p>").Result("$1") : null;

                var name = Regex.IsMatch(resumeHtml, "(?s)'resumeb-head-top'><h2>(.+?)</h2><p>") ? Regex.Match(resumeHtml, "(?s)'resumeb-head-top'><h2>(.+?)</h2><p>").Result("$1") : null;

                resumeEntity.PostBackStatus = 2;

                resumeEntity.Status = 6;

                if (resumeEntity.Name.Trim() == name?.Trim())
                {
                    var matchedResult = new List <ResumeMatchResult>();

                    matchedResult.Add(new ResumeMatchResult
                    {
                        ResumeNumber = data.ResumeNumber,
                        Cellphone    = cellphone,
                        Email        = email,
                        Status       = 2
                    });

                    if (ApiBase.PostResumes(matchedResult))
                    {
                        resumeEntity.PostBackStatus = 1;
                    }
                }
                else
                {
                    LogFactory.Warn($"姓名校验异常!库中简历姓名:{resumeEntity.Name},下载简历姓名:{name}");

                    resumeEntity.Name += $"_{name}";

                    resumeEntity.PostBackStatus = 0;

                    resumeEntity.Status = 8;
                }

                resumeEntity.Email = email;

                resumeEntity.Cellphone = cellphone;

                db.TransactionSaveChanges();

                dataResult.IsSuccess = true;
            }

            return(dataResult);
        }