private void SaveCacheByOss(KeyValuePair <KeyValuePair <int, string>, dynamic> tempData)
        {
            var resumeData = tempData.Value;

            var resumeDetail = JsonConvert.DeserializeObject(resumeData.detialJSonStr.ToString());

            var resumeId = resumeData.resumeId != null ? (int)resumeData.resumeId : resumeDetail.ResumeId != null ? (int)resumeDetail.ResumeId : 0;

            var resumeNumber = ((string)resumeData.resumeNo).Substring(0, 10);

            var model = new ResumeMatchResult
            {
                Cellphone    = null,
                Email        = null,
                ModifyTime   = BaseFanctory.GetTime((string)resumeDetail.DateModified).ToUniversalTime(),
                Name         = (string)resumeData.userDetials.userName,
                ResumeId     = resumeId,
                ResumeNumber = resumeNumber,
                UserExtId    = resumeDetail.UserMasterExtId.ToString(),
                UserId       = (int)resumeData.userDetials.userMasterId,
                Path         = $@"{savePath}\{resumeId}.json",
                CompanyId    = tempData.Key.Key,
                CreateTime   = BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime()
            };

            uploadOssActionBlock.Post(new KeyValuePair <string, dynamic>($@"{savePath}\{resumeId}.json", tempData.Value));

            this.SaveResumeInfo(model);
        }
Ejemplo n.º 2
0
        private void btn_Start_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(this.tbx_CopyNumber.Text))
            {
                Program.SetLog(this.tbx_Logger, "请输入拷贝份数!");

                return;
            }

            int copyNumber;

            if (!int.TryParse(this.tbx_CopyNumber.Text, out copyNumber))
            {
                Program.SetLog(this.tbx_Logger, "拷贝份数必须是数字!");

                return;
            }

            if (string.IsNullOrWhiteSpace(this.tbx_FromFolderPath.Text))
            {
                var folderBrowserDialog = new FolderBrowserDialog();

                if (folderBrowserDialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                this.tbx_FromFolderPath.Text = folderBrowserDialog.SelectedPath;
            }

            this.RunAsync(() =>
            {
                for (var i = 0; i < copyNumber; i++)
                {
                    BaseFanctory.CopyDir(this.tbx_FromFolderPath.Text, $"{this.tbx_FromFolderPath.Text}_{i + 1:000}");

                    this.AsyncSetLog(this.tbx_Logger, $"拷贝成功!第 {i + 1} 份");
                }

                this.AsyncSetLog(this.tbx_Logger, "拷贝完成!");
            });
        }
        /// <summary>
        /// 导入外部Josn
        /// </summary>
        private static void ImportResume()
        {
            var importCount = 0;

            while (true)
            {
                try
                {
                    var filePaths = Directory.GetFiles(importFilePath);

                    if (filePaths.Length == 0)
                    {
                        Thread.Sleep(10 * 1000);

                        continue;
                    }

                    Console.WriteLine($"{DateTime.Now} > {filePaths.Length} Need Import ! ");

                    foreach (var filePath in filePaths)
                    {
                        try
                        {
                            var jsonObj = JsonConvert.DeserializeObject <dynamic>(File.ReadAllText(filePath));

                            var resumeData = jsonObj.data == null ? jsonObj : jsonObj.data;

                            var resumeDetail = JsonConvert.DeserializeObject(resumeData.detialJSonStr.ToString());

                            var resumeId = resumeData.resumeId != null ? (int)resumeData.resumeId : resumeDetail.ResumeId != null ? (int)resumeDetail.ResumeId : 0;

                            var cellphone = resumeData.userDetials.mobilePhone.ToString();

                            if (string.IsNullOrEmpty(cellphone))
                            {
                                var path = importFailPath + Path.GetFileName(filePath);

                                if (File.Exists(path))
                                {
                                    File.Delete(path);
                                }

                                File.Move(filePath, path);

                                continue;
                            }

                            var resumeNumber = ((string)resumeData.resumeNo).Substring(0, 10);

                            var userId = (int)resumeData.userDetials.userMasterId;

                            var refreshTime = BaseFanctory.GetTime((string)resumeDetail.DateLastReleased).ToUniversalTime();

                            using (var db = new MangningXssDBEntities())
                            {
                                var resume = db.ZhaopinResume.FirstOrDefault(f => f.Id == resumeId);

                                var isNeedUpload = true;

                                var sourceFlag = -1;

                                var isUpload = false;

                                if (resume != null)
                                {
                                    sourceFlag = resume.Flag;
                                }

                                if (!(resume?.RefreshTime != null && resume.RefreshTime.Value.Date >= refreshTime.Date) || resume?.Flag < 8)
                                {
                                    if (resume != null)
                                    {
                                        resume.RandomNumber = resumeNumber;
                                        resume.RefreshTime  = refreshTime;
                                        resume.UpdateTime   = DateTime.UtcNow;
                                        if (string.IsNullOrEmpty(resume.UserExtId))
                                        {
                                            resume.UserExtId = resumeDetail.UserMasterExtId?.ToString();
                                        }
                                        if (resumeData.Flag != null && (int)resumeData.Flag < 0)
                                        {
                                            if (resume.Flag >= 8 || mangningOssClient.DoesObjectExist(mangningBucketName, $"Zhaopin/Resume/{resume.Id}") || mangningOssClient.DoesObjectExist(mangningBucketName, $"WatchResume/{resume.Id}"))
                                            {
                                                isNeedUpload = false;
                                            }
                                        }

                                        resume.Flag = 0xE;
                                    }
                                    else
                                    {
                                        resume = new ZhaopinResume
                                        {
                                            Id             = resumeId,
                                            RandomNumber   = resumeNumber,
                                            UserId         = userId,
                                            RefreshTime    = refreshTime,
                                            UpdateTime     = DateTime.UtcNow,
                                            UserExtId      = resumeDetail.UserMasterExtId.ToString(),
                                            DeliveryNumber = null,
                                            Source         = "Import",
                                            Flag           = 0xE
                                        };

                                        db.ZhaopinResume.Add(resume);
                                    }

                                    var user = db.ZhaopinUser.FirstOrDefault(f => f.Id == userId);

                                    if (user != null)
                                    {
                                        if (!user.Source.Contains("MANUAL"))
                                        {
                                            user.ModifyTime = BaseFanctory.GetTime((string)resumeDetail.DateModified).ToUniversalTime();
                                            user.CreateTime = resumeData.Flag != null && (int)resumeData.Flag < 0 ? user.CreateTime : BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime();
                                            user.Cellphone  = resumeData.userDetials.mobilePhone.ToString();
                                            user.Email      = resumeData.userDetials.email.ToString();
                                            user.Name       = resumeData.userDetials.userName.ToString();
                                            user.UpdateTime = DateTime.UtcNow;
                                            user.Username   = resumeData.userDetials.email.ToString();
                                        }
                                    }
                                    else
                                    {
                                        user = new ZhaopinUser
                                        {
                                            Id         = userId,
                                            Source     = "Import",
                                            ModifyTime = BaseFanctory.GetTime((string)resumeDetail.DateModified).ToUniversalTime(),
                                            CreateTime = BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime(),
                                            Cellphone  = resumeData.userDetials.mobilePhone.ToString(),
                                            Email      = resumeData.userDetials.email.ToString(),
                                            Name       = resumeData.userDetials.userName.ToString(),
                                            UpdateTime = DateTime.UtcNow,
                                            Username   = resumeData.userDetials.email.ToString()
                                        };

                                        db.ZhaopinUser.Add(user);
                                    }

                                    if (isNeedUpload)
                                    {
                                        isUpload = true;

                                        var resumeContent = JsonConvert.SerializeObject(resumeData);

                                        using (var jsonStream = new MemoryStream(GZip.Compress(Encoding.UTF8.GetBytes(resumeContent))))
                                        {
                                            mangningOssClient.PutObject(mangningBucketName, $"Zhaopin/Resume/{resume.Id}", jsonStream);
                                        }
                                    }

                                    db.SaveChanges();
                                }

                                File.Delete(filePath);

                                Console.WriteLine($"{DateTime.Now} > Improt success ! ResumeId = {resumeId}, SourceFlag = {sourceFlag}, IsUpload = {isUpload}, Count = {++importCount}.");
                            }
                        }
                        catch (Exception ex)
                        {
                            var path = importFailPath + Path.GetFileName(filePath);

                            if (File.Exists(path))
                            {
                                File.Delete(path);
                            }

                            File.Move(filePath, path);

                            Trace.WriteLine($"{DateTime.Now} > Import Error Message = {ex.Message}, Path = {path}.");
                        }
                    }
                }
                catch (Exception ex)
                {
                    Trace.TraceError(ex.ToString());
                }
            }
        }
Ejemplo n.º 4
0
        public void MatchZhaopin()
        {
            var resumeQueue = new ConcurrentQueue <OldResumeSummary>();

            var cookieQueue = new ConcurrentQueue <QueueParam>();

            var todayString = DateTime.Today.ToString("yyyy-MM-dd");

            using (var db = new MangningXssDBEntities())
            {
                var companyArr = db.ZhaoPinCompany.Where(w => w.Source.Contains("MANUAL")).Select(s => s.Id).ToArray();

                var paramArr = db.ZhaopinStaff.Where(w => companyArr.Any(a => a == w.CompanyId) && !string.IsNullOrEmpty(w.Cookie)).Select(s => new { s.CompanyId, s.Cookie }).ToArray();

                foreach (var param in paramArr)
                {
                    var task = db.ZhaopinResumeMatchLimit.FirstOrDefault(f => f.CompanyId == param.CompanyId);

                    if (task == null)
                    {
                        continue;
                    }

                    var todayTask = db.ZhaopinResumeMatchStatistic.FirstOrDefault(f => f.CompanyId == param.CompanyId && f.Date == todayString);

                    if (todayTask == null)
                    {
                        todayTask = new ZhaopinResumeMatchStatistic
                        {
                            Date         = todayString,
                            CompanyId    = param.CompanyId,
                            MatchedCount = 0,
                            SearchCount  = 0,
                            WatchCount   = 0
                        };

                        db.ZhaopinResumeMatchStatistic.Add(todayTask);

                        db.SaveChanges();
                    }

                    if (todayTask.SearchCount == task.DailySearchCount || todayTask.WatchCount == task.DailyWatchCount)
                    {
                        continue;
                    }

                    cookieQueue.Enqueue(new QueueParam
                    {
                        CompanyId       = param.CompanyId,
                        Cookie          = param.Cookie,
                        DailySeachCount = task.DailySearchCount,
                        DailyWatchCount = task.DailyWatchCount,
                        MatchCount      = todayTask.MatchedCount,
                        SeachCount      = todayTask.SearchCount,
                        WatchCount      = todayTask.WatchCount + todayTask.MatchedCount
                    });
                }
            }


            Task.Run(() =>
            {
                while (true)
                {
                    if (resumeQueue.Count < 10)
                    {
                        using (var db = new ResumeMatchDBEntities())
                        {
                            var resumeList = db.OldResumeSummary.Where(w => w.ResumeId.Length == 10 && !w.IsMatched && w.Status == 0).Take(1000).ToList();

                            resumeList.ForEach(f =>
                            {
                                resumeQueue.Enqueue(f);
                            });
                        }
                    }

                    Thread.Sleep(TimeSpan.FromSeconds(1));
                }
            });

            for (var j = 0; j < 16; j++)
            {
                Task.Run(() =>
                {
                    using (var db = new ResumeMatchDBEntities())
                    {
                        while (true)
                        {
                            #region 匹配

                            OldResumeSummary resume;

                            if (!resumeQueue.TryDequeue(out resume))
                            {
                                continue;
                            }

                            var startNum = 0;

                            var resumeTemp = resume;

                            resume = db.OldResumeSummary.FirstOrDefault(f => f.Id == resumeTemp.Id);

                            QueueParam cookie;

                            if (!cookieQueue.TryDequeue(out cookie))
                            {
                                return;
                            }

                            try
                            {
                                using (var xdb = new MangningXssDBEntities())
                                {
                                    var filePath = $@"E:\Data\智联招聘\{resume.Template}\{resume.ResumeId}.{Path.GetFileNameWithoutExtension(resume.Template)}";

                                    if (!File.Exists(filePath))
                                    {
                                        LogFactory.Warn($"指定路径不存在!ResumeNumber=>{resume.ResumeId} Path=>{filePath}");

                                        resume.Status = 1;

                                        resume.MatchTime = DateTime.Now;

                                        db.SaveChanges();

                                        continue;
                                    }

                                    var sourceCode = File.ReadAllText(filePath);

                                    //var sourceCode = string.Empty;

                                    var genderMatch = Regex.Match(sourceCode, "(男|女)");

                                    var gender = string.Empty;

                                    if (genderMatch.Success)
                                    {
                                        gender = genderMatch.Value == "男" ? "1" : "2";
                                    }

                                    var matchs = Regex.Matches(sourceCode, "[\u4e00-\u9fa5]{4,11}有限公司[\u4e00-\u9fa5]{0,6}");

                                    var companys = new List <string>();

                                    if (matchs.Count == 0)
                                    {
                                        if (cookie.SeachCount - cookie.WatchCount < 50)
                                        {
                                            Console.WriteLine($"该简历未匹配到公司!ResumeNumber=> {resume.ResumeId}");

                                            resume.Status = 1;

                                            resume.MatchTime = DateTime.Now;

                                            db.SaveChanges();

                                            cookieQueue.Enqueue(cookie);

                                            continue;
                                        }

                                        companys.Add(string.Empty);
                                    }

                                    for (var i = 0; i < matchs.Count; i++)
                                    {
                                        if (i == 2)
                                        {
                                            break;
                                        }

                                        companys.Add(matchs[i].Value);
                                    }

                                    var isMatched = true;

                                    var age = string.Empty;

                                    for (var i = 0; i < companys.Count; i++)
                                    {
                                        var companyName = companys[i];

                                        var statistic = xdb.ZhaopinResumeMatchStatistic.FirstOrDefault(f => f.Date == todayString && f.CompanyId == cookie.CompanyId);

                                        if (statistic == null)
                                        {
                                            continue;
                                        }

                                        var cookieContainer = cookie.Cookie.Serialize(".zhaopin.com");

                                        var start = string.IsNullOrEmpty(companyName) ? startNum * 100 : 0;

                                        var paramDictionary = new Dictionary <string, string>
                                        {
                                            { "keywords", "的" },
                                            { "startNum", $"{start}" },
                                            { "rowsCount", "100" },
                                            { "sortColumnName", "sortUpDate" },
                                            { "sortColumn", "sortUpDate desc" },
                                            { "onlyHasImg", "false" },
                                            { "anyKeyWord", "false" },
                                            { "sex", gender },
                                            { "companyName", companyName },
                                            { "onlyLastWork", "false" },
                                            { "ageStart", age },
                                            { "ageEnd", age }
                                        };

                                        var requestResult = HttpClientFactory.RequestForString("https://ihr.zhaopin.com/resumesearch/search.do", HttpMethod.Post, paramDictionary, cookieContainer);

                                        if (!requestResult.IsSuccess)
                                        {
                                            isMatched = false;

                                            break;
                                        }

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

                                        if (jObject["code"] != null)
                                        {
                                            LogFactory.Warn($"CompanyId => {cookie.CompanyId} 搜索异常 异常信息:{(string)jObject["message"]}");

                                            isMatched = false;

                                            return;
                                        }

                                        statistic.SearchCount += 1;

                                        ++cookie.SeachCount;

                                        Console.WriteLine($"CompanyId => {cookie.CompanyId} 搜索公司=> {companyName} 性别=> {genderMatch.Value} 今日请求次数:{cookie.SeachCount} ");

                                        xdb.SaveChanges();

                                        var matchResumes = (JArray)jObject?["results"];

                                        if (matchResumes == null)
                                        {
                                            continue;
                                        }

                                        if (matchResumes.Count == 0)
                                        {
                                            continue;
                                        }

                                        var matchResume = matchResumes.FirstOrDefault(a => ((string)a["number"]).Substring(0, 10) == resume.ResumeId);

                                        var resumes = matchResumes.Where(w => DateTime.Parse((string)w["modifyDate"]) > DateTime.Today.AddDays(-2));

                                        foreach (var item in resumes)
                                        {
                                            var wcount = matchResume == null ? cookie.WatchCount : cookie.WatchCount + 1;

                                            if (cookie.SeachCount <= wcount)
                                            {
                                                break;
                                            }

                                            var number = ((string)item["number"]).Substring(0, 10);

                                            if (xdb.ZhaopinResume.Any(a => a.RandomNumber == number))
                                            {
                                                continue;
                                            }

                                            lock (lockObj)
                                            {
                                                if (xdb.ZhaopinWatchedResume.Any(a => a.ResumeNumber == number))
                                                {
                                                    continue;
                                                }

                                                requestResult = HttpClientFactory.RequestForString($"http://ihr.zhaopin.com/resumesearch/getresumedetial.do?resumeNo={(string)item["id"]}_1&resumeSource=1&key=&{(string)item["valResumeTimeStr"]}", HttpMethod.Get, null, cookieContainer);

                                                if (requestResult.IsSuccess)
                                                {
                                                    var resumeData = JsonConvert.DeserializeObject <dynamic>(requestResult.Data).data;

                                                    var resumeDetail = JsonConvert.DeserializeObject(resumeData.detialJSonStr.ToString());

                                                    var resumeid = resumeData.resumeId != null ? (int)resumeData.resumeId : resumeDetail.ResumeId != null ? (int)resumeDetail.ResumeId : 0;

                                                    statistic.WatchCount += 1;

                                                    Console.WriteLine($"CompanyId => {cookie.CompanyId} 查看简历成功!查看简历份数:{++cookie.WatchCount} ResumeNumber => {number}");

                                                    xdb.ZhaopinWatchedResume.Add(new ZhaopinWatchedResume
                                                    {
                                                        Id           = resumeid,
                                                        ResumeNumber = number,
                                                        CompanyId    = cookie.CompanyId,
                                                        WatchTime    = DateTime.UtcNow
                                                    });

                                                    xdb.SaveChanges();
                                                }
                                            }
                                        }

                                        if (cookie.SeachCount - cookie.WatchCount > 50 && string.IsNullOrEmpty(companyName) && matchResume == null)
                                        {
                                            i--;

                                            if (startNum == 40)
                                            {
                                                if (string.IsNullOrEmpty(age))
                                                {
                                                    age = "18";
                                                }
                                                else
                                                {
                                                    age = (Convert.ToInt32(age) + 1).ToString();
                                                }

                                                startNum = 0;
                                            }
                                            else
                                            {
                                                startNum++;
                                            }

                                            continue;
                                        }

                                        if (matchResume == null)
                                        {
                                            continue;
                                        }

                                        var resumeNo = (string)matchResume["id"] + "_1";

                                        var resumeNumber = ((string)matchResume["number"]).Substring(0, 10);

                                        if (xdb.ZhaopinResume.Any(a => a.RandomNumber == resumeNumber))
                                        {
                                            continue;
                                        }

                                        var valResumeTimeStr = (string)matchResume["valResumeTimeStr"];

                                        requestResult = HttpClientFactory.RequestForString($"http://ihr.zhaopin.com/resumesearch/getresumedetial.do?resumeNo={resumeNo}&resumeSource=1&key=&{valResumeTimeStr}", HttpMethod.Get, null, cookieContainer);

                                        if (!requestResult.IsSuccess)
                                        {
                                            continue;
                                        }

                                        ++cookie.WatchCount;

                                        var resumeJson = JsonConvert.DeserializeObject <dynamic>(requestResult.Data).data;

                                        var detail = JsonConvert.DeserializeObject(resumeJson.detialJSonStr.ToString());

                                        var resumeId = resumeJson.resumeId != null ? (int)resumeJson.resumeId : detail.ResumeId != null ? (int)detail.ResumeId : 0;

                                        if (xdb.ZhaopinMatchedResume.Any(a => a.Id == resumeId))
                                        {
                                            statistic.MatchedCount += 1;

                                            LogFactory.Warn($"匹配到重复简历!ResumeId=>{resumeId} ResumeNumber=>{resumeNumber}");

                                            continue;
                                        }

                                        if (resumeId == 0)
                                        {
                                            LogFactory.Warn($"CompanyId => {cookie.CompanyId} 解析异常!ResumeId 为空, ResumeNumber:{resumeNumber}");

                                            continue;
                                        }

                                        var userId = (int)resumeJson.userDetials.userMasterId;

                                        var user = xdb.ZhaopinUser.FirstOrDefault(f => f.Id == userId);

                                        if (user != null)
                                        {
                                            if (!user.Source.Contains("MANUAL"))
                                            {
                                                user.Id         = userId;
                                                user.Source     = "XSS";
                                                user.ModifyTime = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime();
                                                user.CreateTime = BaseFanctory.GetTime((string)detail.DateCreated).ToUniversalTime();
                                                user.Cellphone  = resume.Cellphone;
                                                user.Email      = resume.Email;
                                                user.Name       = resumeJson.userDetials.userName.ToString();
                                                user.UpdateTime = DateTime.UtcNow;
                                                user.Username   = resumeJson.userDetials.email.ToString();
                                            }
                                        }
                                        else
                                        {
                                            xdb.ZhaopinUser.Add(new ZhaopinUser
                                            {
                                                Id         = userId,
                                                Source     = "XSS",
                                                ModifyTime = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime(),
                                                CreateTime = BaseFanctory.GetTime((string)detail.DateCreated).ToUniversalTime(),
                                                Cellphone  = resume.Cellphone,
                                                Email      = resume.Email,
                                                Name       = resumeJson.userDetials.userName.ToString(),
                                                UpdateTime = DateTime.UtcNow
                                            });
                                        }

                                        var resumeEntity = xdb.ZhaopinResume.FirstOrDefault(f => f.Id == resumeId);

                                        if (resumeEntity == null)
                                        {
                                            xdb.ZhaopinResume.Add(new ZhaopinResume
                                            {
                                                Id             = resumeId,
                                                RandomNumber   = resumeNumber,
                                                UserId         = userId,
                                                RefreshTime    = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime(),
                                                UpdateTime     = DateTime.UtcNow,
                                                UserExtId      = detail.UserMasterExtId.ToString(),
                                                DeliveryNumber = resumeEntity?.DeliveryNumber,
                                                Source         = resumeEntity == null ? "XSS" : resumeEntity.Source
                                            });
                                        }
                                        else
                                        {
                                            resumeEntity.RandomNumber   = resumeNumber;
                                            resumeEntity.UserId         = userId;
                                            resumeEntity.RefreshTime    = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime();
                                            resumeEntity.UpdateTime     = DateTime.UtcNow;
                                            resumeEntity.UserExtId      = detail.UserMasterExtId.ToString();
                                            resumeEntity.DeliveryNumber = resumeEntity?.DeliveryNumber;
                                            resumeEntity.Source         = resumeEntity == null ? "XSS" : resumeEntity.Source;
                                        }

                                        var path = $"{ConfigurationManager.AppSettings["Resume.SavePath"]}{DateTime.Now:yyyyMMdd}";

                                        if (!Directory.Exists(path))
                                        {
                                            Directory.CreateDirectory(path);
                                        }

                                        var resumePath = $@"{path}\{resumeId}.json";

                                        resumeJson.userDetials.email = resume.Email;

                                        resumeJson.userDetials.mobilePhone = resume.Cellphone;

                                        File.WriteAllText(resumePath, JsonConvert.SerializeObject(resumeJson));

                                        uploadOssActionBlock.Post(resumePath);

                                        statistic.MatchedCount += 1;

                                        Console.WriteLine($"CompanyId => {cookie.CompanyId} 搜索简历成功!匹配成功 {++cookie.MatchCount} 份, ResumeNumner=>{resumeNumber},ResumeId=>{resumeId}");

                                        xdb.ZhaopinMatchedResume.Add(new ZhaopinMatchedResume
                                        {
                                            Id        = resumeId,
                                            CompanyId = cookie.CompanyId,
                                            MatchTime = DateTime.UtcNow
                                        });

                                        xdb.SaveChanges();

                                        resume.IsMatched = true;

                                        break;
                                    }

                                    if (cookie.SeachCount < cookie.DailySeachCount)
                                    {
                                        cookieQueue.Enqueue(cookie);
                                    }

                                    if (isMatched)
                                    {
                                        resume.Status = 99;

                                        resume.MatchTime = DateTime.Now;
                                    }

                                    db.SaveChanges();
                                }
                            }
                            catch (Exception ex)
                            {
                                //while (true)
                                //{
                                //    if(ex.InnerException == null) break;

                                //    ex = ex.InnerException;
                                //}

                                if (cookie.SeachCount < cookie.DailySeachCount)
                                {
                                    cookieQueue.Enqueue(cookie);
                                }

                                LogFactory.Warn($"程序异常, 异常信息:{ex.Message} 堆栈:{ex.StackTrace}");
                            }

                            #endregion
                        }
                    }
                });
            }
        }
Ejemplo n.º 5
0
        private static DataResult <dynamic> Register(string host)
        {
            var cookie = new CookieContainer();

            var password = BaseFanctory.GetRandomTel();

            var userName = password + Global.Email.Substring(Global.Email.IndexOf("@", StringComparison.Ordinal));

            RequestFactory.QueryRequest("http://qiye.zhaopingou.com/signup", cookieContainer: cookie, host: host);

            var retryTimes = 2;

            var param = $"userName={userName}&password={password}&code=0000&type=2&invitationNumber=&clientNo=&userToken=&clientType=2";

            RequestFactory.QueryRequest("http://qiye.zhaopingou.com/zhaopingou_interface/register?timestamp=" + BaseFanctory.GetUnixTimestamp(), param, RequestEnum.POST, cookie, "http://qiye.zhaopingou.com/signup", host: host);

Retry:

            #region 获取验证码

            var loginRequest = (HttpWebRequest)WebRequest.Create("http://qiye.zhaopingou.com/zhaopingou_interface/verification_code");

            loginRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36";

            loginRequest.Accept = "image/webp,image/*,*/*;q=0.8"; // 图片类型

            loginRequest.Referer = "http://qiye.zhaopingou.com/signup";

            loginRequest.CookieContainer = cookie;

            if (Global.IsEnanbleProxy)
            {
                var index = host.IndexOf(":", StringComparison.Ordinal);

                loginRequest.Proxy = new WebProxy(host.Substring(0, index), Convert.ToInt32(host.Substring(index + 1)));
            }

            using (var imgresponse = loginRequest.GetResponse())
            {
                using (var imgreader = imgresponse.GetResponseStream())
                {
                    var writer = new FileStream("D:\\pic.jpg", FileMode.OpenOrCreate, FileAccess.Write);

                    var buff = new byte[512];

                    int read;

                    while (imgreader != null && (read = imgreader.Read(buff, 0, buff.Length)) > 0)
                    {
                        writer.Write(buff, 0, read);
                    }

                    writer.Close();

                    writer.Dispose();
                }
            }

            //var sr = new StreamReader("D:\\pic.jpg");

            //FenJianLiScheduling.cnf.pbx_checkNumber.Image = MediaTypeNames.Image.FromStream(sr.BaseStream);

            //string checkCode = Interaction.InputBox("请输入验证码!", "验证码");

            //sr.Close();

            //sr.Dispose();

            Console.WriteLine("请输入验证码:");

            var checkCode = Console.ReadLine();

            #endregion

            // 发送注册请求

            param = $"userName={userName}&password={password}&code={checkCode}&type=2&invitationNumber=&clientNo=&userToken=&clientType=2";

            var dataResult = RequestFactory.QueryRequest("http://qiye.zhaopingou.com/zhaopingou_interface/register?timestamp=" + BaseFanctory.GetUnixTimestamp(), param, RequestEnum.POST, cookie, "http://qiye.zhaopingou.com/signup", host: host);

            if (!dataResult.IsSuccess)
            {
                return(new DataResult <dynamic>(dataResult.ErrorMsg));
            }

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

            if (jObject == null || (int)jObject["errorCode"] != 1)
            {
                if (--retryTimes > 0)
                {
                    goto Retry;
                }

                throw new RequestException($"注册请求失败!响应数据:{dataResult.Data}");
            }

            var inviteCode = jObject["user"]["invitationCode"].ToString();

            LogFactory.Info($"注册成功!邮箱:{userName}", MessageSubjectEnum.ZhaoPinGou);

            var userToken = jObject["user"]["user_token"].ToString();

            param = $"email={userName}&emailType=1&clientNo=&userToken={userToken}&clientType=2";

            cookie.Add(new Cookie {
                Name = "zhaopingou_account", Value = userName, Domain = "qiye.zhaopingou.com"
            });

            cookie.Add(new Cookie {
                Name = "zhaopingou_login_callback", Value = "http%3A//qiye.zhaopingou.com/resume", Domain = "qiye.zhaopingou.com"
            });

            var cookieData = cookie.GetCookies(new Uri("http://qiye.zhaopingou.com/zhaopingou_interface"))["fanwenTime1"];

            if (cookieData != null)
            {
                cookieData.Expires = DateTime.Now.AddDays(-1);
            }

            dataResult = RequestFactory.QueryRequest("http://qiye.zhaopingou.com/zhaopingou_interface/Binding_email?timestamp=" + BaseFanctory.GetUnixTimestamp(), param, RequestEnum.POST, cookie, "http://qiye.zhaopingou.com/user/email/verification", host: host, accept: "multipart/form-data");

            // 发送激活邮件请求

            if (!dataResult.IsSuccess)
            {
                return(new DataResult <dynamic>(dataResult.ErrorMsg));
            }

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

            if (jObject == null || (int)jObject["errorCode"] != 1)
            {
                throw new RequestException($"发送激活邮件请求失败!响应数据:{dataResult.Data}");
            }

            LogFactory.Info($"发送激活邮件成功!邮箱:{userName}", MessageSubjectEnum.ZhaoPinGou);

            return(new DataResult <dynamic>(new { Email = userName, Password = password, InviteCode = inviteCode }));
        }
        /// <summary>
        /// 登录获取 Cookie
        /// </summary>
        /// <param name="email"></param>
        /// <param name="passWord"></param>
        /// <param name="host"></param>
        public static DataResult <CookieContainer> Login(string email, string passWord, string host)
        {
            var cookie = new CookieContainer();

            var result = new DataResult <CookieContainer>();

            var jumpsTimes = 0;

Jumps:

            var param = $"userName={email}&password={passWord}&code=&clientNo=&userToken=&clientType=2";

            var dataResult = RequestFactory.QueryRequest("http://qiye.zhaopingou.com/zhaopingou_interface/security_login?timestamp=" + BaseFanctory.GetUnixTimestamp(), param, RequestEnum.POST, cookie, host: host);

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

                result.ErrorMsg = $"用户登录异常!异常用户:{email}";

                return(result);
            }

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

            if (jObject != null)
            {
                if ((int)jObject["errorCode"] != 1)
                {
                    ++jumpsTimes;

                    if (jumpsTimes > 1)
                    {
                        if (((string)jObject["message"]).Contains("用户不存在"))
                        {
                            using (var db = new ResumeMatchDBEntities())
                            {
                                var user = db.User.FirstOrDefault(f => f.Email == email);

                                if (user != null)
                                {
                                    user.IsEnable = false;

                                    db.TransactionSaveChanges();
                                }
                            }
                        }

                        result.IsSuccess = false;

                        result.ErrorMsg = $"用户登录异常!异常用户:{email},异常信息:{(string)jObject["message"]}";

                        return(result);
                    }

                    goto Jumps;
                }

                cookie.Add(new Cookie {
                    Name = "hrkeepToken", Value = jObject["user"]?["user_token"].ToString(), Domain = ".zhaopingou.com"
                });

                cookie.Add(new Cookie {
                    Name = "zhaopingou_select_city", Value = "-1", Domain = ".zhaopingou.com"
                });

                result.Data = cookie;

                var retryCount = 0;

Retry:

                try
                {
                    RefreshFreeDownloadNumber(email, cookie, host);
                }
                catch (Exception ex)
                {
                    retryCount++;

                    if (retryCount < 2)
                    {
                        goto Retry;
                    }

                    LogFactory.Error($"刷新简历下载数异常!异常信息:{ex.Message} 堆栈信息:{ex.TargetSite}", MessageSubjectEnum.ZhaoPinGou);
                }


                return(result);
            }

            return(result);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 发送换绑手机验证码
        /// </summary>
        /// <param name="mobile"></param>
        /// <param name="picCode"></param>
        /// <returns></returns>
        public DataResult SendBindSms(string mobile, string picCode)
        {
            var sendResult = HttpClientFactory.RequestForString($"https://i.zhaopin.com/Login/LoginApi/SendBindSms?mobile={mobile}&businessType=C-Bind&piccode={picCode}&t={BaseFanctory.GetUnixTimestamp()}", HttpMethod.Get, cookieContainer: cookieContainer, referer: "https://i.zhaopin.com/ResumeCenter/AccountSet/Index?tab=2");

            if (!sendResult.IsSuccess)
            {
                return(new DataResult("发送验证码失败!" + sendResult.ErrorMsg));
            }

            var result = JsonConvert.DeserializeObject <dynamic>(sendResult.Data);

            if (result.Code != 1)
            {
                return(new DataResult((string)result.Msg));
            }

            return(new DataResult());
        }
        public void Buquan()
        {
            var queue = new ConcurrentQueue <KeyValuePair <int, KeyValuePair <string, DateTime> > >();

            var index = 0;

            Task.Run(() =>
            {
                while (true)
                {
                    KeyValuePair <int, KeyValuePair <string, DateTime> > temp;

                    if (!queue.TryDequeue(out temp))
                    {
                        Thread.Sleep(10);

                        continue;
                    }

                    using (var db = new MangningXssDBEntities())
                    {
                        var resume = db.ZhaopinResume.FirstOrDefault(f => f.Id == temp.Key);

                        if (resume == null)
                        {
                            LogFactory.Warn($"找不到简历 ResumeId =>{temp.Key}");

                            continue;
                        }

                        var user = db.ZhaopinUser.FirstOrDefault(f => f.Id == resume.UserId);

                        if (user == null)
                        {
                            LogFactory.Warn($"找不到用户  ResumeId =>{temp.Key} UserId =>{resume.UserId}");

                            continue;
                        }

                        if (string.IsNullOrEmpty(temp.Value.Key) && string.IsNullOrEmpty(user.Cellphone))
                        {
                            db.ZhaopinResume.Remove(resume);

                            db.ZhaopinUser.Remove(user);

                            Console.WriteLine($"删除成功!ResumeId=>{temp.Key} {++index}/{buquanTotal}");
                        }
                        else
                        {
                            resume.UserExtId = temp.Value.Key;

                            user.CreateTime = temp.Value.Value;

                            Console.WriteLine($"补全成功!{++index}/{buquanTotal}");
                        }

                        db.SaveChanges();
                    }
                }
            });

            using (var db = new MangningXssDBEntities())
            {
                var idArray = db.ZhaopinResume.Where(w => w.Source == "Watch").Select(s => s.Id).ToArray();

                buquanTotal = idArray.Length;

                foreach (var businessId in idArray)
                {
                    try
                    {
                        var streamContent = newOss.GetObject(newBucket, $"WatchResume/{businessId}").Content;

                        using (var stream = new MemoryStream())
                        {
                            var bytes = new byte[1024];

                            int len;

                            while ((len = streamContent.Read(bytes, 0, bytes.Length)) > 0)
                            {
                                stream.Write(bytes, 0, len);
                            }

                            var jsonContent = Encoding.UTF8.GetString(GZip.Decompress(stream.ToArray()));

                            var resumeData = JsonConvert.DeserializeObject <dynamic>(jsonContent);

                            var resumeDetail = JsonConvert.DeserializeObject <dynamic>((string)resumeData.detialJSonStr);

                            var createDate = BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime();

                            var extId = resumeDetail.UserMasterExtId.ToString();

                            queue.Enqueue(new KeyValuePair <int, KeyValuePair <string, DateTime> >(businessId, new KeyValuePair <string, DateTime>(extId, createDate)));
                        }
                    }
                    catch (Exception ex)
                    {
                        LogFactory.Warn($"Oss 获取简历异常! ResumeId => {businessId} 异常原因 => {ex.Message}");

                        queue.Enqueue(new KeyValuePair <int, KeyValuePair <string, DateTime> >(businessId, new KeyValuePair <string, DateTime>("", DateTime.Now)));
                    }
                }
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 获取已解锁的简历详情
        /// </summary>
        /// <param name="resumeId"></param>
        /// <param name="cookie"></param>
        /// <param name="host"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        private static DataResult <string> ResumeDetailSpider(string resumeId, CookieContainer cookie, string host, string token)
        {
            var jumpsTimes = 0;

Jumps:

            var param = $"resumeHtmlId={resumeId}&keyStr=&keyPositionName=&tradeId=&postionStr=&jobId=0&clientNo=&userToken={token}&clientType=2";

            var dataResult = RequestFactory.QueryRequest("http://qiye.zhaopingou.com/zhaopingou_interface/zpg_find_resume_html_details?timestamp=" + BaseFanctory.GetUnixTimestamp(), param, RequestEnum.POST, cookie, "http://qiye.zhaopingou.com/resume/detail?resumeId=" + resumeId, host: host);

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

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

            if (jObject != null)
            {
                if ((int)jObject["errorCode"] != 1)
                {
                    ++jumpsTimes;

                    LogFactory.Warn($"获取简历详情异常!异常信息:{(string)jObject["message"]}", MessageSubjectEnum.ZhaoPinGou);

                    if (jumpsTimes > 1)
                    {
                        return(new DataResult <string>());
                    }

                    goto Jumps;
                }

                dataResult.Data = (string)jObject["jsonHtml"];

                return(dataResult);
            }

            return(new DataResult <string>());
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 搜索旧库
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public static List <ResumeMatchResult> SearchOldLibrary(IEnumerable <dynamic> list)
        {
            var resumeList = new List <ResumeMatchResult>();

            using (var db = new ResumeMatchDBEntities())
            {
                foreach (var item in list)
                {
                    var resumeNumber = ((string)item.ResumeNumber).Substring(0, 10);

                    var resume = db.OldResumeSummary.FirstOrDefault(w => w.ResumeId == resumeNumber);

                    if (resume == null)
                    {
                        continue;
                    }

                    resume.MatchTime = DateTime.Now;

                    resume.IsMatched = true;

                    resumeList.Add(new ResumeMatchResult
                    {
                        Cellphone    = resume.Cellphone,
                        Email        = resume.Email,
                        ResumeNumber = item.ResumeNumber,
                        Status       = 2
                    });

                    using (var xdb = new MangningXssDBEntities())
                    {
                        var filePath = "X:" + ((string)item.SavePath).Replace("/", "\\");

                        if (!File.Exists(filePath))
                        {
                            LogFactory.Warn($"找不到文件路径:{filePath}, ResumeNumber:{resumeNumber}");

                            continue;
                        }

                        var resumeJson = JsonConvert.DeserializeObject <dynamic>(File.ReadAllText(filePath));

                        var detail = JsonConvert.DeserializeObject(resumeJson.detialJSonStr.ToString());

                        var resumeId = resumeJson.resumeId != null ? (int)resumeJson.resumeId : detail.ResumeId != null ? (int)detail.ResumeId : 0;

                        if (resumeId == 0)
                        {
                            LogFactory.Warn($"解析异常!ResumeId 为空, ResumeNumber:{resumeNumber}");

                            continue;
                        }

                        var userId = (int)resumeJson.userDetials.userMasterId;

                        var user = xdb.ZhaopinUser.FirstOrDefault(f => f.Id == userId);

                        if (user != null)
                        {
                            if (!user.Source.Contains("MANUAL"))
                            {
                                user.Id         = userId;
                                user.Source     = "XSS";
                                user.ModifyTime = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime();
                                user.CreateTime = BaseFanctory.GetTime((string)detail.DateCreated).ToUniversalTime();
                                user.Cellphone  = resume.Cellphone;
                                user.Email      = resume.Email;
                                user.Name       = resumeJson.userDetials.userName.ToString();
                                user.UpdateTime = DateTime.UtcNow;
                                user.Username   = resumeJson.userDetials.email.ToString();
                            }
                        }
                        else
                        {
                            xdb.ZhaopinUser.AddOrUpdate(a => a.Id, new ZhaopinUser
                            {
                                Id         = userId,
                                Source     = "XSS",
                                ModifyTime = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime(),
                                CreateTime = BaseFanctory.GetTime((string)detail.DateCreated).ToUniversalTime(),
                                Cellphone  = resume.Cellphone,
                                Email      = resume.Email,
                                Name       = resumeJson.userDetials.userName.ToString(),
                                UpdateTime = DateTime.UtcNow,
                                Username   = resumeJson.userDetials.email.ToString()
                            });
                        }

                        var resumeEntity = xdb.ZhaopinResume.FirstOrDefault(f => f.Id == resumeId);

                        if (resumeEntity == null)
                        {
                            xdb.ZhaopinResume.Add(new ZhaopinResume
                            {
                                Id             = resumeId,
                                RandomNumber   = resumeNumber,
                                UserId         = userId,
                                RefreshTime    = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime(),
                                UpdateTime     = DateTime.UtcNow,
                                UserExtId      = detail.UserMasterExtId.ToString(),
                                DeliveryNumber = null,
                                Source         = "XSS"
                            });
                        }
                        else
                        {
                            resumeEntity.Id             = resumeId;
                            resumeEntity.RandomNumber   = resumeNumber;
                            resumeEntity.UserId         = userId;
                            resumeEntity.RefreshTime    = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime();
                            resumeEntity.UpdateTime     = DateTime.UtcNow;
                            resumeEntity.UserExtId      = detail.UserMasterExtId.ToString();
                            resumeEntity.DeliveryNumber = resumeEntity.DeliveryNumber;
                            resumeEntity.Source         = resumeEntity.Source;
                        }

                        xdb.SaveChanges();

                        var path = $"{ConfigurationManager.AppSettings["Resume.SavePath"]}{DateTime.Now:yyyyMMdd}";

                        if (!Directory.Exists(path))
                        {
                            Directory.CreateDirectory(path);
                        }

                        var resumePath = $@"{path}\{resumeId}.json";

                        File.WriteAllText(resumePath, JsonConvert.SerializeObject(resumeJson));

                        uploadOssActionBlock.Post(resumePath);
                    }
                }

                db.TransactionSaveChanges();
            }

            return(resumeList);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 上传智联 Josn 格式简历
        /// </summary>
        /// <param name="json"></param>
        /// <param name="jsonResumeId"></param>
        /// <returns></returns>
        public DataResult UploadZhaopinResume(string json, int jsonResumeId)
        {
            try
            {
                var resumeData = JsonConvert.DeserializeObject <dynamic>(json);

                var resumeDetail = JsonConvert.DeserializeObject(resumeData.detialJSonStr.ToString());

                var refreshTime = BaseFanctory.GetTime((string)resumeDetail.DateLastReleased).ToUniversalTime();

                resumeData.detialJSonStr = resumeDetail;

                var resumeNumber = ((string)resumeData.resumeNo).Substring(0, 10);

                var userId = (int)resumeData.userDetials.userMasterId;

                var resumeId = resumeData.resumeId != null ? (int)resumeData.resumeId : resumeDetail.ResumeId != null ? (int)resumeDetail.ResumeId : 0;

                using (var db = new MangningXssDBEntities())
                {
                    var resume = db.ZhaopinResume.FirstOrDefault(f => f.Id == resumeId);

                    if (!(resume?.RefreshTime != null && resume.RefreshTime.Value.Date >= refreshTime.Date))
                    {
                        if (resume != null)
                        {
                            resume.RandomNumber = resumeNumber;
                            resume.RefreshTime  = refreshTime;
                            resume.UpdateTime   = DateTime.UtcNow;
                            if (string.IsNullOrEmpty(resume.UserExtId))
                            {
                                resume.UserExtId = resumeDetail.UserMasterExtId.ToString();
                            }
                            resume.Source = !resume.Source.Contains("Download") ? resume.Source += ",Download" : resume.Source;
                            resume.Flag   = 0xE;
                        }
                        else
                        {
                            resume = new ZhaopinResume
                            {
                                Id             = resumeId,
                                RandomNumber   = resumeNumber,
                                UserId         = userId,
                                RefreshTime    = refreshTime,
                                UpdateTime     = DateTime.UtcNow,
                                UserExtId      = resumeDetail.UserMasterExtId.ToString(),
                                DeliveryNumber = null,
                                Source         = "Download",
                                Flag           = 0xE
                            };

                            db.ZhaopinResume.Add(resume);
                        }

                        var user = db.ZhaopinUser.FirstOrDefault(f => f.Id == userId);

                        if (user != null)
                        {
                            if (!user.Source.Contains("MANUAL"))
                            {
                                user.ModifyTime = BaseFanctory.GetTime((string)resumeDetail.DateModified).ToUniversalTime();
                                user.CreateTime = BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime();
                                user.Cellphone  = resumeData.userDetials.mobilePhone.ToString();
                                user.Email      = resumeData.userDetials.email.ToString();
                                user.Name       = resumeData.userDetials.userName.ToString();
                                user.UpdateTime = DateTime.UtcNow;
                                user.Username   = resumeData.userDetials.email.ToString();
                            }
                        }
                        else
                        {
                            user = new ZhaopinUser
                            {
                                Id         = userId,
                                Source     = "Download",
                                ModifyTime = BaseFanctory.GetTime((string)resumeDetail.DateModified).ToUniversalTime(),
                                CreateTime = BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime(),
                                Cellphone  = resumeData.userDetials.mobilePhone.ToString(),
                                Email      = resumeData.userDetials.email.ToString(),
                                Name       = resumeData.userDetials.userName.ToString(),
                                UpdateTime = DateTime.UtcNow,
                                Username   = resumeData.userDetials.email.ToString()
                            };

                            db.ZhaopinUser.Add(user);
                        }

                        var resumeContent = JsonConvert.SerializeObject(resumeData);

                        using (var jsonStream = new MemoryStream(GZip.Compress(Encoding.UTF8.GetBytes(resumeContent))))
                        {
                            mangningOssClient.PutObject(mangningBucketName, $"Zhaopin/Resume/{resumeId}", jsonStream);
                        }

                        var resumePath = $"{uploadFilePath}{resumeId}.json";

                        File.WriteAllText(resumePath, JsonConvert.SerializeObject(resumeData));

                        db.SaveChanges();
                    }
                }

                return(new DataResult());
            }
            catch (Exception ex)
            {
                LogFactory.Warn($"简历上传异常!异常信息:{ex.Message}, Json:{json}");

                return(new DataResult {
                    ErrorMsg = $"Josn 格式异常,resumeNo:{jsonResumeId},{ex.Message}", IsSuccess = false
                });
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 获取匹配到的简历ID
        /// </summary>
        /// <param name="keywords"></param>
        /// <param name="degress"></param>
        /// <param name="introduction"></param>
        /// <param name="cookie"></param>
        /// <param name="token"></param>
        /// <param name="name"></param>
        /// <param name="pageIndex"></param>
        /// <param name="user"></param>
        /// <param name="gender"></param>
        /// <returns></returns>
        private static DataResult <string> GetResumeId(string keywords, int gender, int degress, string introduction, CookieContainer cookie, User user, string token, string name, int pageIndex = 0)
        {
            var jumpsTimes = 0;

Jumps:

            var param = $"pageSize={pageIndex}&pageNo=25&keyStr={keywords}&keyStrPostion=&postionStr=&startDegrees={degress}&endDegress={degress}&startAge=0&endAge=0&gender={gender}&region=&timeType=-1&startWorkYear=-1&endWorkYear=-1&beginTime=&endTime=&isMember=0&hopeAdressStr=&cityId=-1&updateTime=&tradeId=&clientNo=&userToken={token}&clientType=2";

            var referer = $"http://qiye.zhaopingou.com/resume?key={keywords}&beginDegreesType={degress}&endDegreesType={degress}&gender={gender}";

            var dataResult = RequestFactory.QueryRequest("http://qiye.zhaopingou.com/zhaopingou_interface/find_warehouse_by_position_new?timestamp=" + BaseFanctory.GetUnixTimestamp(), param, RequestEnum.POST, cookie, referer, host: user.Host);

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

            if (string.IsNullOrWhiteSpace(dataResult.Data))
            {
                goto Jumps;
            }

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

            if (jObject != null)
            {
                if ((int)jObject["errorCode"] != 1)
                {
                    ++jumpsTimes;

                    LogFactory.Warn($"搜索简历异常!异常信息:{(string)jObject["message"]}", MessageSubjectEnum.ZhaoPinGou);

                    if (jumpsTimes > 3)
                    {
                        return(new DataResult <string>());
                    }

                    goto Jumps;
                }

                if ((int)jObject["total"] == 0)
                {
                    return(new DataResult <string>());
                }

                var totalSize = Math.Ceiling((double)jObject["total"] / 25);

                var jArray = jObject["warehouseList"] as JArray;

                var resumeIdArray = jArray?.Where(w => !string.IsNullOrEmpty((string)w["name"]) && ((string)w["name"]).Substring(0, 1) == name.Substring(0, 1)).Select(s => (string)s["resumeHtmlId"]).ToArray();

                if (string.IsNullOrWhiteSpace(introduction))
                {
                    return(new DataResult <string>());
                }

                dataResult = MatchResumes(resumeIdArray, introduction, cookie, user.Host, token, keywords);

                if (!dataResult.IsSuccess)
                {
                    if (dataResult.Code == ResultCodeEnum.ProxyDisable)
                    {
                        return(dataResult);
                    }

                    return(new DataResult <string>());
                }

                if (!string.IsNullOrWhiteSpace(dataResult.Data))
                {
                    return(dataResult);
                }

                if (pageIndex + 1 < totalSize && pageIndex < 1)
                {
                    return(GetResumeId(keywords, gender, degress, introduction, cookie, user, token, name, ++pageIndex));
                }
            }

            return(new DataResult <string>());
        }
Ejemplo n.º 13
0
        private static DataResult <dynamic> Register(string host, string inviteCode)
        {
            var cookie = new CookieContainer();

            if (!string.IsNullOrWhiteSpace(inviteCode))
            {
                cookie.Add(new Cookie {
                    Name = "vid", Value = inviteCode, Domain = "www.fenjianli.com"
                });
            }

            // GET 注册页面

            var dataResult = RequestFactory.QueryRequest("http://www.fenjianli.com/register/toRegisterByEmail.htm", cookieContainer: cookie, host: host);

            if (!dataResult.IsSuccess)
            {
                return(new DataResult <dynamic>(dataResult.ErrorMsg));
            }

            var id = Regex.Match(dataResult.Data, "validate-id.+?\"(\\d+)").Result("$1");

            if (id == null)
            {
                throw new RequestException("获取注册 ID 失败,失败原因:请求异常,导致解析HTML出错,源码:" + dataResult.Data);
            }

            var password = BaseFanctory.GetRandomTel();

            var username = password + Global.Email.Substring(Global.Email.IndexOf("@", StringComparison.Ordinal));

            #region 获取验证码

            var imgUrl = "http://www.fenjianli.com/register/getCheckCode.htm?" + new Random().NextDouble(); // 随机化图片验证码

            var loginRequest = (HttpWebRequest)WebRequest.Create(imgUrl);

            loginRequest.Accept = "image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5"; // 图片类型

            loginRequest.CookieContainer = cookie;

            if (Global.IsEnanbleProxy)
            {
                var index = host.IndexOf(":", StringComparison.Ordinal);

                loginRequest.Proxy = new WebProxy(host.Substring(0, index), Convert.ToInt32(host.Substring(index + 1)));
            }

            using (var imgresponse = loginRequest.GetResponse())
            {
                using (var imgreader = imgresponse.GetResponseStream())
                {
                    var writer = new FileStream("D:\\pic.jpg", FileMode.OpenOrCreate, FileAccess.Write);

                    var buff = new byte[512];

                    int read;

                    while (imgreader != null && (read = imgreader.Read(buff, 0, buff.Length)) > 0)
                    {
                        writer.Write(buff, 0, read);
                    }

                    writer.Close();

                    writer.Dispose();
                }
            }

            //var sr = new StreamReader("D:\\pic.jpg");

            //FenJianLiScheduling.cnf.pbx_checkNumber.Image = MediaTypeNames.Image.FromStream(sr.BaseStream);

            //string checkCode = Interaction.InputBox("请输入验证码!", "验证码");

            //sr.Close();

            //sr.Dispose();

            Console.WriteLine("请输入验证码:");

            var checkCode = Console.ReadLine();

            #endregion

            var param = $"id={id}&regType=email&username={username}&password={password}&confirmPassword={password}&checkCode={checkCode}&agree=1&_random={new Random().NextDouble()}";

            // 发送注册请求

            dataResult = RequestFactory.QueryRequest("http://www.fenjianli.com/register/register.htm", param, RequestEnum.POST, cookie, host: host);

            if (!dataResult.IsSuccess)
            {
                return(new DataResult <dynamic>(dataResult.ErrorMsg));
            }

            if (!dataResult.Data.Contains("成功"))
            {
                throw new RequestException($"注册请求失败!响应数据:{dataResult.Data}");
            }

            LogFactory.Info($"注册成功!邮箱:{username}", MessageSubjectEnum.FenJianLi);

            param = $"id={id}&checkSource={username}&_random={new Random().NextDouble()}";

            dataResult = RequestFactory.QueryRequest("http://www.fenjianli.com/register/sendCheckEmail.htm", param, RequestEnum.POST, cookie, host: host);

            // 发送激活邮件请求

            if (!dataResult.IsSuccess)
            {
                return(new DataResult <dynamic>(dataResult.ErrorMsg));
            }

            if (!dataResult.Data.Contains("成功"))
            {
                throw new RequestException($"发送激活邮件请求失败!响应数据:{dataResult.Data}");
            }

            return(new DataResult <dynamic>(new { Email = username, Password = password }));
        }
        /// <summary>
        /// 處理簡歷列表
        /// </summary>
        /// <param name="resumes"></param>
        /// <param name="unhandled"></param>
        /// <param name="staff"></param>
        /// <param name="isWhile"></param>
        /// <param name="cookieContainer"></param>
        /// <param name="isNewSystem"></param>
        private static void HandleResumes(dynamic resumes, ref int unhandled, ZhaopinStaff staff, ref bool isWhile, CookieContainer cookieContainer, bool isNewSystem)
        {
            var stopwatch = new Stopwatch();

            var time = 0;

            foreach (var item in resumes)
            {
                #region Handle resume

                try
                {
                    if (IsDownload((long)item.id, staff.CompanyId))
                    {
                        if (++time > 30)
                        {
                            break;
                        }

                        continue;
                    }

                    time = 0;

                    stopwatch.Restart();

                    #region Save resume and Upload

                    var requestResult = RequestFactory.QueryRequest($"http://ihr.zhaopin.com/resumesearch/getresumedetial.do?resumeNo={item.id}_{item.jobNumber}_{item.number}_1_1&resumeSource=3", cookieContainer: cookieContainer);

                    if (!requestResult.IsSuccess)
                    {
                        Trace.TraceWarning(requestResult.ErrorMsg);

                        continue;
                    }

                    var content = JsonConvert.DeserializeObject <dynamic>(requestResult.Data);

                    if ((int)content.code == 6001) // 登录过期
                    {
                        using (var db = new MangningXssDBEntities())
                        {
                            var zhaopinStaff = db.ZhaopinStaff.FirstOrDefault(f => f.Id == staff.Id);

                            if (zhaopinStaff != null)
                            {
                                zhaopinStaff.Cookie = null;

                                db.SaveChanges();

                                dictionary.TryUpdate(staff.Id, true, true);
                            }
                        }

                        Trace.WriteLine($"{DateTime.Now} > Loging Timeout ! Username = {staff.Username}, Message = {content.message}.");

                        isWhile = false;

                        break;
                    }

                    if ((int)content.code != 1)
                    {
                        Trace.WriteLine($"{DateTime.Now} > Get Resume Detail Error ! Username = {staff.Username}, Message = {content.message}.");

                        continue;
                    }

                    var resumeData = content.data;

                    var resumeDetail = JsonConvert.DeserializeObject(resumeData.detialJSonStr.ToString());

                    var refreshTime = BaseFanctory.GetTime((string)resumeDetail.DateLastReleased).ToUniversalTime();

                    resumeData.detialJSonStr = resumeDetail;

                    var resumeNumber = ((string)resumeData.resumeNo).Substring(0, 10);

                    var userId = (int)resumeData.userDetials.userMasterId;

                    var resumeId = resumeData.resumeId != null ? (int)resumeData.resumeId : resumeDetail.ResumeId != null ? (int)resumeDetail.ResumeId : 0;

                    var status = "Handle";

                    using (var db = new MangningXssDBEntities())
                    {
                        var resume = db.ZhaopinResume.FirstOrDefault(f => f.Id == resumeId);

                        if (!(resume?.RefreshTime != null && resume.RefreshTime.Value.Date >= refreshTime.Date))
                        {
                            if (resume != null)
                            {
                                resume.RandomNumber = resumeNumber;
                                resume.RefreshTime  = refreshTime;
                                resume.UpdateTime   = DateTime.UtcNow;
                                if (string.IsNullOrEmpty(resume.UserExtId))
                                {
                                    resume.UserExtId = resumeDetail.UserMasterExtId.ToString();
                                }
                                resume.Source = !resume.Source.Contains("Deliver") ? resume.Source += ",Deliver" : resume.Source;
                                resume.Flag   = 0xE;
                            }
                            else
                            {
                                resume = new ZhaopinResume
                                {
                                    Id             = resumeId,
                                    RandomNumber   = resumeNumber,
                                    UserId         = userId,
                                    RefreshTime    = refreshTime,
                                    UpdateTime     = DateTime.UtcNow,
                                    UserExtId      = resumeDetail.UserMasterExtId.ToString(),
                                    DeliveryNumber = null,
                                    Source         = "Deliver",
                                    Flag           = 0xE
                                };

                                db.ZhaopinResume.Add(resume);
                            }

                            var user = db.ZhaopinUser.FirstOrDefault(f => f.Id == userId);

                            if (user != null)
                            {
                                if (!user.Source.Contains("MANUAL"))
                                {
                                    user.ModifyTime = BaseFanctory.GetTime((string)resumeDetail.DateModified).ToUniversalTime();
                                    user.CreateTime = BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime();
                                    user.Cellphone  = resumeData.userDetials.mobilePhone.ToString();
                                    user.Email      = resumeData.userDetials.email.ToString();
                                    user.Name       = resumeData.userDetials.userName.ToString();
                                    user.UpdateTime = DateTime.UtcNow;
                                    user.Username   = resumeData.userDetials.email.ToString();
                                }
                            }
                            else
                            {
                                user = new ZhaopinUser
                                {
                                    Id         = userId,
                                    Source     = "Deliver",
                                    ModifyTime = BaseFanctory.GetTime((string)resumeDetail.DateModified).ToUniversalTime(),
                                    CreateTime = BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime(),
                                    Cellphone  = resumeData.userDetials.mobilePhone.ToString(),
                                    Email      = resumeData.userDetials.email.ToString(),
                                    Name       = resumeData.userDetials.userName.ToString(),
                                    UpdateTime = DateTime.UtcNow,
                                    Username   = resumeData.userDetials.email.ToString()
                                };

                                db.ZhaopinUser.Add(user);
                            }

                            var resumeContent = JsonConvert.SerializeObject(resumeData);

                            using (var jsonStream = new MemoryStream(GZip.Compress(Encoding.UTF8.GetBytes(resumeContent))))
                            {
                                mangningOssClient.PutObject(mangningBucketName, $"Zhaopin/Resume/{resumeId}", jsonStream);
                            }

                            var resumePath = $"{uploadFilePath}{resumeId}.json";

                            File.WriteAllText(resumePath, JsonConvert.SerializeObject(resumeData));
                        }
                        else
                        {
                            status = "NoHandle";
                        }

                        db.ZhaopinDeliveryLog.Add(new ZhaopinDeliveryLog
                        {
                            CompanyId  = staff.CompanyId,
                            DeliveryId = (long)item.id
                        });

                        db.ZhaopinDelivery.Add(new ZhaopinDelivery
                        {
                            CompanyId    = staff.CompanyId,
                            Id           = (long)item.id,
                            CreateTime   = DateTime.UtcNow,
                            ResumeId     = resumeId,
                            ResumeNumber = resumeData.resumeNo.ToString(),
                            JobNumber    = resumeData.jobNo.ToString(),
                            JobName      = resumeData.jobName.ToString()
                        });

                        db.SaveChanges();
                    }

                    #endregion

                    stopwatch.Stop();

                    var elapsed = stopwatch.ElapsedMilliseconds;

                    Interlocked.Increment(ref count);

                    var version = isNewSystem ? "NewSystem" : "5.5";

                    Console.WriteLine($"{DateTime.Now} > {version} {count} {status} {staff.Username}:Unhandled = {--unhandled}, RId = {resumeId}, Elapsed = {elapsed} ms.");

                    Thread.Sleep(interval);
                }
                catch (Exception ex)
                {
                    Trace.TraceError(ex.ToString());
                }

                #endregion
            }
        }
Ejemplo n.º 15
0
        private void DownJob()
        {
            if (string.IsNullOrEmpty(this.tbx_Cookie.Text))
            {
                this.AsyncSetLog(this.tbx_Log, "请录入 Cookie !");

                return;
            }

            jobDictionary.Clear();

            cookieContainer = this.tbx_Cookie.Text.Serialize(".zhaopin.com");

            var request = RequestFactory.QueryRequest("https://ihr.zhaopin.com/home/getUserinfo.do", cookieContainer: cookieContainer, requestType: RequestEnum.POST);

            var jsonObj = JsonConvert.DeserializeObject <dynamic>(request.Data);

            try
            {
                this.Invoke((MethodInvoker) delegate
                {
                    lbl_CompanyName.Text = jsonObj.companyname.ToString();
                });
            }
            catch (Exception)
            {
                this.AsyncSetLog(this.tbx_Log, $"{JsonConvert.SerializeObject(jsonObj)}");

                return;
            }

            token = this.tbx_Cookie.Text.Substring(this.tbx_Cookie.Text.IndexOf("at=", StringComparison.Ordinal) + 3, 32);

            var pageIndex = 1;

            var pageCount = 0;

            do
            {
                var url = $"https://ihr.zhaopin.com/api/job/list.do?access_token={token}&jobTitle=&status=30&reviewtype=0%2C20&pageIndex={pageIndex}&pageSize=10&jobStyle=0&isJudgerefreshing=1&_={BaseFanctory.GetUnixTimestamp()}246";

                var requestResult = HttpClientFactory.RequestForString(url, HttpMethod.Get, null, cookieContainer, "https://ihr.zhaopin.com/job/");

                if (!requestResult.IsSuccess)
                {
                    this.AsyncSetLog(this.tbx_Log, requestResult.ErrorMsg);

                    return;
                }

                Thread.Sleep(time);

                var result = JsonConvert.DeserializeObject <dynamic>(requestResult.Data);

                if (result == null)
                {
                    this.AsyncSetLog(this.tbx_Log, "返回信息序列化异常!返回结果:" + requestResult.Data);

                    return;
                }

                if ((int)result.code != 200)
                {
                    this.AsyncSetLog(this.tbx_Log, (string)result.message);

                    return;
                }

                if (pageCount == 0)
                {
                    pageCount = (int)result.data.pager.pagecount;
                }

                foreach (var item in result.data.list)
                {
                    if (jobDictionary.ContainsKey($"{(string)item.jobTitle}_{(string)item.cityName}"))
                    {
                        this.AsyncSetLog(this.tbx_Log, $"职位名称重复!跳过该职位,重复职位:{(string)item.jobTitle}_{(string)item.cityName}");

                        continue;
                    }

                    jobDictionary.Add($"{(string)item.jobTitle}_{(string)item.cityName}", (string)item.jobNumber);
                }

                this.AsyncSetLog(this.tbx_Log, "获取职位成功!职位数:" + jobDictionary.Count);
            }while (++pageIndex <= pageCount);

            this.AsyncSetLog(this.tbx_Log, "开始刷新职位!职位数:" + jobDictionary.Count);

            var dictionary = new Dictionary <string, string>
            {
                { "jobNumber", string.Join(",", jobDictionary.Values) }
            };

            var jobDownlineResult = HttpClientFactory.RequestForString("http://ihr.zhaopin.com/job/jobdownline.do?access_token=" + token, HttpMethod.Post, dictionary, cookieContainer, "http://ihr.zhaopin.com/job/");

            if (!jobDownlineResult.IsSuccess)
            {
                this.AsyncSetLog(this.tbx_Log, jobDownlineResult.ErrorMsg);

                return;
            }

            Thread.Sleep(time);

            var jobDownline = JsonConvert.DeserializeObject <dynamic>(jobDownlineResult.Data);

            if (jobDownline == null)
            {
                this.AsyncSetLog(this.tbx_Log, "返回信息序列化异常!返回结果:" + jobDownlineResult.Data);

                return;
            }

            if ((int)jobDownline.code != 200)
            {
                this.AsyncSetLog(this.tbx_Log, (string)jobDownline.message);

                return;
            }

            this.AsyncSetLog(this.tbx_Log, "职位下线成功!下线职位数:" + jobDictionary.Count);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// 获取下载文件夹ID
        /// </summary>
        /// <param name="cookie"></param>
        /// <param name="user"></param>
        /// <param name="token"></param>
        /// <param name="resumeId"></param>
        /// <param name="host"></param>
        /// <returns></returns>
        private static DataResult <string> GetFolderId(CookieContainer cookie, User user, string token, string resumeId, string host)
        {
            var jumpsTimes = 0;

Jumps:

            var param = $"type=1&keyStr=&clientNo=&userToken={token}&clientType=2";

            var dataResult = RequestFactory.QueryRequest("http://qiye.zhaopingou.com/zhaopingou_interface/get_candidate_folder_list?timestamp=" + BaseFanctory.GetUnixTimestamp(), param, RequestEnum.POST, cookie, "Referer: http://qiye.zhaopingou.com/resume/detail?resumeId=" + resumeId, host: host);

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

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

            if (jObject != null)
            {
                if ((int)jObject["errorCode"] != 1)
                {
                    ++jumpsTimes;

                    LogFactory.Warn($"获取文件夹异常!异常用户:{user.Email} 异常信息:{(string)jObject["message"]}", MessageSubjectEnum.ZhaoPinGou);

                    if (jumpsTimes > 3)
                    {
                        return(new DataResult <string>());
                    }

                    goto Jumps;
                }

                var jArray = jObject["dataList"] as JArray;

                if (jArray != null)
                {
                    dataResult.Data = jArray[0]["id"].ToString();

                    return(dataResult);
                }
            }

            return(new DataResult <string>());
        }
Ejemplo n.º 17
0
        private static DataResult UnLockResume(CookieContainer cookie, User user, string token, string resumeId, string host, string folderId)
        {
            var dataResult = new DataResult();

            dataResult.IsSuccess = false;

            var jumpsTimes = 0;

Jumps:

            var param = $"htmlCode={resumeId}&mFolderId={folderId}&notes=&clientNo=&userToken={token}&clientType=2";

            var result = RequestFactory.QueryRequest("http://qiye.zhaopingou.com/zhaopingou_interface/zpg_charge_example_unlock_new?timestamp=" + BaseFanctory.GetUnixTimestamp(), param, RequestEnum.POST, cookie, "Referer: http://qiye.zhaopingou.com/resume/detail?resumeId=" + resumeId, host: host);

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

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

            if (jObject != null)
            {
                if (((string)jObject["message"]).Contains("未阅读过"))
                {
                    var readResult = ResumeDetailSpider(resumeId, cookie, host, token);

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

                    goto Jumps;
                }

                if (((string)jObject["message"]).Contains("余额不足"))
                {
                    dataResult.Code = ResultCodeEnum.NoDownloadNumber;

                    return(dataResult);
                }

                if ((int)jObject["errorCode"] != 1 && (int)jObject["errorCode"] != 4)
                {
                    ++jumpsTimes;

                    LogFactory.Warn($"解锁简历失败!用户:{user.Email} 异常信息:{(string)jObject["message"]}", MessageSubjectEnum.ZhaoPinGou);

                    if (jumpsTimes > 1)
                    {
                        dataResult.ErrorMsg = $"解锁简历失败!用户:{user.Email} 异常信息:{(string)jObject["message"]}";

                        return(dataResult);
                    }

                    goto Jumps;
                }

                dataResult.IsSuccess = true;
            }

            return(dataResult);
        }
        /// <summary>
        /// 處理簡歷列表
        /// </summary>
        /// <param name="resumes"></param>
        /// <param name="unhandled"></param>
        /// <param name="staff"></param>
        /// <param name="isWhile"></param>
        /// <param name="cookieContainer"></param>
        private static void HandleResumes(dynamic resumes, int unhandled, ZhaopinStaff staff, ref bool isWhile, CookieContainer cookieContainer)
        {
            var stopwatch = new Stopwatch();

            foreach (var item in resumes)
            {
                #region Handle resume

                try
                {
                    stopwatch.Restart();

                    #region Save resume and Upload

                    var requestResult = RequestFactory.QueryRequest($"http://ihr.zhaopin.com/resumesearch/getresumedetial.do?resumeNo={item.id}_{item.jobNumber}_{item.number}_1_1&resumeSource=3", cookieContainer: cookieContainer);

                    if (!requestResult.IsSuccess)
                    {
                        Trace.TraceWarning(requestResult.ErrorMsg);

                        continue;
                    }

                    var content = JsonConvert.DeserializeObject <dynamic>(requestResult.Data);

                    if ((int)content.code == 6001) // 登录过期
                    {
                        using (var db = new MangningXssDBEntities())
                        {
                            var zhaopinStaff = db.ZhaopinStaff.FirstOrDefault(f => f.Id == staff.Id);

                            if (zhaopinStaff != null)
                            {
                                zhaopinStaff.Cookie = null;

                                db.SaveChanges();

                                dictionary.TryRemove(staff.Id, out companyId);
                            }
                        }

                        Trace.WriteLine($"{DateTime.Now} > Loging Timeout ! Username = {staff.Username}, Message = {content.message}.");

                        isWhile = false;

                        break;
                    }

                    if ((int)content.code != 1)
                    {
                        Trace.WriteLine($"{DateTime.Now} > Get Resume Detail Error ! Username = {staff.Username}, Message = {content.message}.");

                        continue;
                    }

                    var resumeData = content.data;

                    var resumeDetail = JsonConvert.DeserializeObject(resumeData.detialJSonStr.ToString());

                    var refreshTime = BaseFanctory.GetTime((string)resumeDetail.DateLastReleased).ToUniversalTime();

                    resumeData.detialJSonStr = resumeDetail;

                    var resumeNumber = ((string)resumeData.resumeNo).Substring(0, 10);

                    var userId = (int)resumeData.userDetials.userMasterId;

                    var resumeId = resumeData.resumeId != null ? (int)resumeData.resumeId : resumeDetail.ResumeId != null ? (int)resumeDetail.ResumeId : 0;

                    var status = "Handle";

                    using (var db = new MangningXssDBEntities())
                    {
                        var resume = db.ZhaopinResume.FirstOrDefault(f => f.Id == resumeId);

                        if (!(resume?.RefreshTime != null && resume.RefreshTime.Value.Date >= refreshTime.Date))
                        {
                            if (resume != null)
                            {
                                resume.RandomNumber = resumeNumber;
                                resume.RefreshTime  = refreshTime;
                                resume.UpdateTime   = DateTime.UtcNow;
                                if (string.IsNullOrEmpty(resume.UserExtId))
                                {
                                    resume.UserExtId = resumeDetail.UserMasterExtId.ToString();
                                }
                                resume.Source = !resume.Source.Contains("Deliver") ? resume.Source += ",Deliver" : resume.Source;
                                resume.Flag   = 0xE;
                            }
                            else
                            {
                                resume = new ZhaopinResume
                                {
                                    Id             = resumeId,
                                    RandomNumber   = resumeNumber,
                                    UserId         = userId,
                                    RefreshTime    = refreshTime,
                                    UpdateTime     = DateTime.UtcNow,
                                    UserExtId      = resumeDetail.UserMasterExtId.ToString(),
                                    DeliveryNumber = null,
                                    Source         = "Deliver",
                                    Flag           = 0xE
                                };

                                db.ZhaopinResume.Add(resume);
                            }

                            var user = db.ZhaopinUser.FirstOrDefault(f => f.Id == userId);

                            if (user != null)
                            {
                                if (!user.Source.Contains("MANUAL"))
                                {
                                    user.ModifyTime = BaseFanctory.GetTime((string)resumeDetail.DateModified).ToUniversalTime();
                                    user.CreateTime = BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime();
                                    user.Cellphone  = resumeData.userDetials.mobilePhone.ToString();
                                    user.Email      = resumeData.userDetials.email.ToString();
                                    user.Name       = resumeData.userDetials.userName.ToString();
                                    user.UpdateTime = DateTime.UtcNow;
                                    user.Username   = resumeData.userDetials.email.ToString();
                                }
                            }
                            else
                            {
                                user = new ZhaopinUser
                                {
                                    Id         = userId,
                                    Source     = "Deliver",
                                    ModifyTime = BaseFanctory.GetTime((string)resumeDetail.DateModified).ToUniversalTime(),
                                    CreateTime = BaseFanctory.GetTime((string)resumeDetail.DateCreated).ToUniversalTime(),
                                    Cellphone  = resumeData.userDetials.mobilePhone.ToString(),
                                    Email      = resumeData.userDetials.email.ToString(),
                                    Name       = resumeData.userDetials.userName.ToString(),
                                    UpdateTime = DateTime.UtcNow,
                                    Username   = resumeData.userDetials.email.ToString()
                                };

                                db.ZhaopinUser.Add(user);
                            }

                            var resumeContent = JsonConvert.SerializeObject(resumeData);

                            using (var jsonStream = new MemoryStream(GZip.Compress(Encoding.UTF8.GetBytes(resumeContent))))
                            {
                                mangningOssClient.PutObject(mangningBucketName, $"Zhaopin/Resume/{resumeId}", jsonStream);
                            }

                            var resumePath = $"{uploadFilePath}{resumeId}.json";

                            File.WriteAllText(resumePath, JsonConvert.SerializeObject(resumeData));

                            db.SaveChanges();
                        }
                        else
                        {
                            status = "NoHandle";
                        }
                    }

                    #endregion

                    Thread.Sleep(3000);

                    #region SignResume

                    var data = HttpUtility.UrlEncode(JsonConvert.SerializeObject(new
                    {
                        signTag    = "noSuit",
                        resumeList = new List <dynamic>
                        {
                            new
                            {
                                resumeNo     = $"{item.jobNumber}_{item.number}_{item.version}_1",
                                resumenumber = item.number,
                                item.version,
                                lanType      = 1,
                                jobname      = ((string)resumeData?.jobName)?.Replace("\"", "\\\"").Replace("\\", "\\\\"),
                                jobno        = item.jobNumber,
                                resumesource = item.resumeSource,
                                resumeJobId  = item.id,
                                resumerName  = ((string)item?.userName).Replace("\r", "").Replace("\n", "").Replace("\"", "\\\""),
                                resumejlName = ((string)item?.name).Replace("\r", "").Replace("\n", "").Replace("\"", "\\'").Replace("\\", "\\\\"),
                                resumerId    = item.userId
                            }
                        },
                        mark = ""
                    }));

                    requestResult = RequestFactory.QueryRequest("https://ihr.zhaopin.com/resumemanage/resumesignstate.do", $"data={data}", RequestEnum.POST, cookieContainer);

                    if (!requestResult.IsSuccess)
                    {
                        Trace.TraceWarning(requestResult.ErrorMsg);

                        continue;
                    }

                    content = JsonConvert.DeserializeObject <dynamic>(requestResult.Data);

                    if ((int)content.code == 6001) // 登录过期
                    {
                        using (var db = new MangningXssDBEntities())
                        {
                            var zhaopinStaff = db.ZhaopinStaff.FirstOrDefault(f => f.Id == staff.Id);

                            if (zhaopinStaff != null)
                            {
                                zhaopinStaff.Cookie = null;

                                db.SaveChanges();

                                dictionary.TryRemove(staff.Id, out companyId);
                            }
                        }

                        Trace.WriteLine($"{DateTime.Now} > Loging Timeout ! Username = {staff.Username}, Message = {content.message}.");

                        isWhile = false;

                        break;
                    }

                    if ((int)content.code != 1)
                    {
                        Trace.WriteLine($"{DateTime.Now} > Sign Resume Error ! Username = {staff.Username}, Message = {content.message}, ResumeId = {resumeId}.");

                        continue;
                    }

                    #endregion

                    stopwatch.Stop();

                    var elapsed = stopwatch.ElapsedMilliseconds;

                    Interlocked.Increment(ref count);

                    Console.WriteLine($"{DateTime.Now} > {count} {status} {staff.Username}:Unhandled = {--unhandled}, RId = {resumeId}, Elapsed = {elapsed} ms.");
                }
                catch (Exception ex)
                {
                    Trace.TraceError(ex.ToString());
                }

                #endregion
            }
        }
Ejemplo n.º 19
0
        private static DataResult <dynamic> Register(string host, string inviteCode)
        {
            var cookie = new CookieContainer();

            var password = BaseFanctory.GetRandomTel();

            var username = password + Global.Email.Substring(Global.Email.IndexOf("@", StringComparison.Ordinal));

            #region 获取验证码

            const string imgUrl = "http://www.jianlika.com/Verify/index.html?788608415904618"; // 随机化图片验证码

            var loginRequest = (HttpWebRequest)WebRequest.Create(imgUrl);

            loginRequest.Accept = "image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5"; // 图片类型

            loginRequest.CookieContainer = cookie;

            if (Global.IsEnanbleProxy)
            {
                var index = host.IndexOf(":", StringComparison.Ordinal);

                loginRequest.Proxy = new WebProxy(host.Substring(0, index), Convert.ToInt32(host.Substring(index + 1)));
            }

            using (var imgresponse = loginRequest.GetResponse())
            {
                using (var imgreader = imgresponse.GetResponseStream())
                {
                    var writer = new FileStream("D:\\pic.jpg", FileMode.OpenOrCreate, FileAccess.Write);

                    var buff = new byte[512];

                    int read;

                    while (imgreader != null && (read = imgreader.Read(buff, 0, buff.Length)) > 0)
                    {
                        writer.Write(buff, 0, read);
                    }

                    writer.Close();

                    writer.Dispose();
                }
            }

            //var sr = new StreamReader("D:\\pic.jpg");

            //FenJianLiScheduling.cnf.pbx_checkNumber.Image = MediaTypeNames.Image.FromStream(sr.BaseStream);

            //string checkCode = Interaction.InputBox("请输入验证码!", "验证码");

            //sr.Close();

            //sr.Dispose();

            Console.WriteLine("请输入验证码:");

            var checkCode = Console.ReadLine();

            #endregion

            var param = $"email={username}&pwd={password}&repwd={password}&verifycode={checkCode}&invitecode={inviteCode}&agree=on";

            // 发送注册请求

            var dataResult = RequestFactory.QueryRequest("http://www.jianlika.com/Signup/email.html", param, RequestEnum.POST, cookie, host: host);

            if (!dataResult.IsSuccess)
            {
                return(new DataResult <dynamic>(dataResult.ErrorMsg));
            }

            if (!dataResult.Data.Contains("邮件已发送至"))
            {
                throw new RequestException($"注册请求失败!响应数据:{dataResult.Data}");
            }

            LogFactory.Info($"注册成功!邮箱:{username}", MessageSubjectEnum.JianLiKa);

            return(new DataResult <dynamic>(new { Email = username, Password = password }));
        }
Ejemplo n.º 20
0
        /// <summary>
        /// 下载简历
        /// </summary>
        /// <param name="cookieContainer"></param>
        /// <param name="pageIndex"></param>
        /// <param name="orderFlag"></param>
        /// <param name="companyId"></param>
        /// <param name="function"></param>
        /// <param name="token"></param>
        public void DownloadResumes(CookieContainer cookieContainer, int pageIndex, string orderFlag, int companyId, Func <CookieContainer, int, int, string, string, DataResult <string> > function, string token)
        {
            var cacheDictionary = new Dictionary <long, Tuple <string, string, DateTime> >();

            while (true)
            {
                if (pageIndex < 0)
                {
                    break;
                }

                var num = 1;

                if (pageIndex == 0)
                {
                    num = 0;
                }

                var requestResult = function(cookieContainer, pageIndex * 90 - num, 90 + num, orderFlag, token);

                if (!requestResult.IsSuccess)
                {
                    break;
                }

                var content = JsonConvert.DeserializeObject <dynamic>(requestResult.Data);

                if ((int)content.code != 1)
                {
                    LogFactory.Warn($"简历信息下载异常!message:{content.message} companyId:{companyId}");

                    return;
                }

                var count = orderFlag == "recycle" ? (int)content.data.numFound : (int)content.data[orderFlag].numFound;

                if (count == 0)
                {
                    break;
                }

                var pageNumber = (int)Math.Ceiling(count / 90.0);

                var summaries = orderFlag == "recycle" ? content.data.results : content.data[orderFlag].results;

                var size = summaries.Count;

                if (size == 0 || IsDownloadByDeliveryId((long)summaries[0].id, orderFlag))
                {
                    pageIndex -= 1;

                    continue;
                }

                if (!IsDownloadByDeliveryId((long)summaries[size - 1].id, orderFlag) && pageNumber - 1 > pageIndex && size > (pageIndex + 1) * 90)
                {
                    pageIndex += 1;

                    continue;
                }

                cacheDictionary.Add((long)summaries[0].id, new Tuple <string, string, DateTime>((string)summaries[0].jobNumber, (string)summaries[0].number, BaseFanctory.GetTime((string)summaries[0].refreshTime)));

                downQueue.Enqueue(new Tuple <CookieContainer, string, string, DateTime, string, long, int, Tuple <string> >(cookieContainer, (string)summaries[0].jobNumber, (string)summaries[0].number, BaseFanctory.GetTime((string)summaries[0].refreshTime).ToUniversalTime(), orderFlag, (long)summaries[0].id, companyId, new Tuple <string>(token)));

                for (var i = 1; i < size; i++)
                {
                    if (IsDownloadByDeliveryId((long)summaries[i].id, orderFlag))
                    {
                        break;
                    }

                    cacheDictionary.Add((long)summaries[i].id, new Tuple <string, string, DateTime>((string)summaries[i].jobNumber, (string)summaries[i].number, BaseFanctory.GetTime((string)summaries[i].refreshTime)));

                    downQueue.Enqueue(new Tuple <CookieContainer, string, string, DateTime, string, long, int, Tuple <string> >(cookieContainer, (string)summaries[i].jobNumber, (string)summaries[i].number, BaseFanctory.GetTime((string)summaries[i].refreshTime).ToUniversalTime(), orderFlag, (long)summaries[i].id, companyId, new Tuple <string>(token)));
                }

                cacheDictionary = cacheDictionary.Reverse().ToDictionary(k => k.Key, v => v.Value);

                pageIndex -= 1;

                break;
            }

            while (true)
            {
                if (pageIndex < 0)
                {
                    break;
                }

                var num = 1;

                if (pageIndex == 0)
                {
                    num = 0;
                }

                var requestResult = GetResumes(cookieContainer, pageIndex * 90 - num, 90 + num, orderFlag, token);

                if (!requestResult.IsSuccess)
                {
                    break;
                }

                var content = JsonConvert.DeserializeObject <dynamic>(requestResult.Data);

                if ((int)content.code != 1)
                {
                    LogFactory.Warn($"简历信息下载异常!message:{content.message} companyId:{companyId}");

                    return;
                }

                var count = orderFlag == "recycle" ? (int)content.data.numFound : (int)content.data[orderFlag].numFound;

                if (count == 0)
                {
                    break;
                }

                var summaries = orderFlag == "recycle" ? content.data.results : content.data[orderFlag].results;

                var size = summaries.Count;

                if (size == 0 || cacheDictionary.ContainsKey((long)summaries[0].id))
                {
                    pageIndex -= 1;

                    continue;
                }

                if (!cacheDictionary.ContainsKey((long)summaries[size - 1].id) && size > (pageIndex + 1) * 90)
                {
                    pageIndex += 1;

                    continue;
                }

                for (var i = size - 1; i > -1; i--)
                {
                    if (cacheDictionary.ContainsKey((long)summaries[i].id))
                    {
                        continue;
                    }

                    if (IsDownloadByDeliveryId((long)summaries[i].id, orderFlag))
                    {
                        cacheDictionary.Add((long)summaries[i].id, new Tuple <string, string, DateTime>((string)summaries[i].jobNumber, (string)summaries[i].number, BaseFanctory.GetTime((string)summaries[i].refreshTime)));

                        continue;
                    }

                    cacheDictionary.Add((long)summaries[i].id, new Tuple <string, string, DateTime>((string)summaries[i].jobNumber, (string)summaries[i].number, BaseFanctory.GetTime((string)summaries[i].refreshTime)));

                    downQueue.Enqueue(new Tuple <CookieContainer, string, string, DateTime, string, long, int, Tuple <string> >(cookieContainer, (string)summaries[i].jobNumber, (string)summaries[i].number, BaseFanctory.GetTime((string)summaries[i].refreshTime).ToUniversalTime(), orderFlag, (long)summaries[i].id, companyId, new Tuple <string>(token)));
                }

                --pageIndex;
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        /// 设置简历保密
        /// </summary>
        /// <param name="extendedId"></param>
        /// <param name="resumeId"></param>
        /// <returns></returns>
        public DataResult SetResumePrivate(string extendedId, string resumeId)
        {
            var responseResult = HttpClientFactory.RequestForString($"https://i.zhaopin.com/ResumeCenter/MyCenter/SetOpenStatus?Resume_ID={resumeId}&Ext_ID={extendedId}&Version_Number=1&Language_ID=1&level=1&t={BaseFanctory.GetUnixTimestamp()}784", HttpMethod.Get, cookieContainer: cookieContainer);

            if (responseResult.IsSuccess && responseResult.Data.Contains("修改成功"))
            {
                return(responseResult);
            }

            return(new DataResult("设置保密失败!" + responseResult.ErrorMsg));
        }
Ejemplo n.º 22
0
        /// <summary>
        /// 下载
        /// </summary>
        /// <param name="cookieContainer"></param>
        /// <param name="jobNumber"></param>
        /// <param name="number"></param>
        /// <param name="refreshTime"></param>
        /// <param name="orderFlag"></param>
        /// <param name="deliveryId"></param>
        /// <param name="companyId"></param>
        /// <param name="token"></param>
        private static void Down(CookieContainer cookieContainer, string jobNumber, string number, DateTime refreshTime, string orderFlag, long deliveryId, int companyId, string token)
        {
            var resumeId = 0;

            var url = orderFlag == "recycle" ? $"http://ihr.zhaopin.com/resumesearch/getresumedetial.do?access_token={token}&resumeJobId={deliveryId}" : $"http://ihr.zhaopin.com/resumesearch/getresumedetial.do?resumeNo={deliveryId}_{jobNumber}_{number}_1_1&resumeSource=3";

            try
            {
                var requestResult = RequestFactory.QueryRequest(url, cookieContainer: cookieContainer);

                if (!requestResult.IsSuccess)
                {
                    LogFactory.Warn($"简历信息下载异常!异常信息:{requestResult.ErrorMsg},CompanyId:{companyId},jobNumber:{jobNumber}, ResumeNumber:{number} ");

                    return;
                }

                var resume = JsonConvert.DeserializeObject <dynamic>(requestResult.Data);

                if ((int)resume.code != 1)
                {
                    LogFactory.Warn($"简历信息下载异常!message:{resume.message},CompanyId:{companyId},jobNumber:{jobNumber}, ResumeNumber:{number} ");

                    if ((int)resume.code == 6001)
                    {
                        while (true)
                        {
                            Tuple <CookieContainer, string, string, DateTime, string, long, int, Tuple <string> > param;

                            if (!downQueue.TryDequeue(out param))
                            {
                                break;
                            }

                            if (param.Item7 != companyId)
                            {
                                downQueue.Enqueue(param);
                            }
                        }

                        return; // 登录过期
                    }

                    return;
                }

                Thread.Sleep(1000);

                if (resume.data == null)
                {
                    return;
                }

                var detail = JsonConvert.DeserializeObject(resume.data.detialJSonStr.ToString());

                resume.data.detialJSonStr = detail;

                var path = $"{ConfigurationManager.AppSettings["Resume.SavePath"]}";

                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                resumeId = (int)resume.data.resumeId;

                using (var db = new MangningXssDBEntities())
                {
                    if (db.ZhaopinDelivery.Any(a => a.Id == deliveryId))
                    {
                        Console.WriteLine($"DeliveryId:{deliveryId} 已下载过!");

                        return;
                    }

                    db.ZhaopinDelivery.Add(new ZhaopinDelivery
                    {
                        CompanyId    = companyId,
                        Id           = deliveryId,
                        ResumeId     = resumeId,
                        JobNumber    = jobNumber,
                        ResumeNumber = number
                    });

                    if (!db.ZhaopinDeliveryLog.Any(a => a.DeliveryId == deliveryId))
                    {
                        db.ZhaopinDeliveryLog.Add(new ZhaopinDeliveryLog
                        {
                            DeliveryId = deliveryId,
                            CompanyId  = companyId
                        });
                    }

                    db.TransactionSaveChanges();

                    if (db.ZhaopinResume.Any(a => a.Id == resumeId && a.RefreshTime >= refreshTime && a.Flag != 2))
                    {
                        var resumeNumber = number.Substring(0, 10);

                        Console.WriteLine($"简历已下载过!ResumeNumber:{resumeNumber}");

                        return;
                    }
                }

                if (!resumeDic.TryAdd(resumeId, resumeId))
                {
                    return;
                }

                var resumePath = $@"{path}\{resumeId}.json";

                File.WriteAllText(resumePath, JsonConvert.SerializeObject(resume.data));

                uploadOssActionBlock.Post(resumePath);

                var userId = (int)resume.data.userDetials.userMasterId;

                using (var db = new MangningXssDBEntities())
                {
                    var user = db.ZhaopinUser.FirstOrDefault(f => f.Id == userId);

                    if (user != null)
                    {
                        if (!user.Source.Contains("MANUAL"))
                        {
                            user.Id         = userId;
                            user.Source     = "XSS";
                            user.ModifyTime = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime();
                            user.CreateTime = BaseFanctory.GetTime((string)detail.DateCreated).ToUniversalTime();
                            user.Cellphone  = resume.data.userDetials.mobilePhone.ToString();
                            user.Email      = resume.data.userDetials.email.ToString();
                            user.Name       = resume.data.userDetials.userName.ToString();
                            user.UpdateTime = DateTime.UtcNow;
                            user.Username   = resume.data.userDetials.email.ToString();
                        }
                    }
                    else
                    {
                        db.ZhaopinUser.AddOrUpdate(a => a.Id, new ZhaopinUser
                        {
                            Id         = userId,
                            Source     = "XSS",
                            ModifyTime = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime(),
                            CreateTime = BaseFanctory.GetTime((string)detail.DateCreated).ToUniversalTime(),
                            Cellphone  = resume.data.userDetials.mobilePhone.ToString(),
                            Email      = resume.data.userDetials.email.ToString(),
                            Name       = resume.data.userDetials.userName.ToString(),
                            UpdateTime = DateTime.UtcNow,
                            Username   = resume.data.userDetials.email.ToString()
                        });
                    }

                    var resumeEntity = db.ZhaopinResume.FirstOrDefault(f => f.Id == resumeId);

                    var userExdId = Regex.IsMatch(detail.UserMasterExtId.ToString(), @"^J[MRSL]\d{9}$") ? detail.UserMasterExtId.ToString() : string.Empty;

                    if (resumeEntity == null)
                    {
                        db.ZhaopinResume.Add(new ZhaopinResume
                        {
                            Id             = resumeId,
                            RandomNumber   = number.Substring(0, 10),
                            UserId         = userId,
                            RefreshTime    = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime(),
                            UpdateTime     = DateTime.UtcNow,
                            UserExtId      = userExdId,
                            DeliveryNumber = null,
                            Source         = "XSS,Deliver",
                            Flag           = 0xE
                        });
                    }
                    else
                    {
                        resumeEntity.RandomNumber = number.Substring(0, 10);
                        resumeEntity.UserId       = userId;
                        resumeEntity.RefreshTime  = BaseFanctory.GetTime((string)detail.DateModified).ToUniversalTime();
                        resumeEntity.UpdateTime   = DateTime.UtcNow;
                        if (string.IsNullOrEmpty(resumeEntity.UserExtId))
                        {
                            resumeEntity.UserExtId = userExdId;
                        }
                        resumeEntity.DeliveryNumber = resumeEntity.DeliveryNumber;
                        resumeEntity.Source         = !resumeEntity.Source.Contains("Deliver") ? resumeEntity.Source += ",Deliver" : resumeEntity.Source;
                        resumeEntity.Flag           = 0xE;
                        if (resumeEntity.IncludeTime == null)
                        {
                            resumeEntity.IncludeTime = DateTime.UtcNow;
                        }
                    }

                    db.SaveChanges();
                }

                Interlocked.Increment(ref downloadCount);

                resumeDic.TryRemove(resumeId, out resumeId);

                Console.WriteLine($"下载成功!{downloadCount}/{downQueue.Count} CId:{companyId} RId:{resumeId} DId:{deliveryId} orderFlag:{orderFlag} oss:{uploadOssActionBlock.InputCount}");
            }
            catch (Exception ex)
            {
                while (true)
                {
                    if (ex.InnerException == null)
                    {
                        break;
                    }

                    ex = ex.InnerException;
                }

                LogFactory.Warn($"下载简历异常!异常信息:{ex.Message} 堆栈:{ex.StackTrace} CompanyId:{companyId},ResumeId:{resumeId}, orderFlag:{orderFlag}");
            }
        }
Ejemplo n.º 23
0
        /// <summary>
        /// 换绑手机号
        /// </summary>
        /// <param name="verifyCode"></param>
        /// <param name="oldMoblie"></param>
        /// <param name="newMobile"></param>
        /// <returns></returns>
        public DataResult ChangeMobile(string verifyCode, string oldMoblie, string newMobile)
        {
            var dictionary = new Dictionary <string, string>
            {
                { "verifyCode", verifyCode },
                { "oldMoblie", oldMoblie.Remove(3, 4).Insert(3, "****") },
                { "newMobile", newMobile }
            };

            var changeResult = HttpClientFactory.RequestForString($"https://i.zhaopin.com/usermaster/UsermasterManage/ChangeMobile?t={BaseFanctory.GetUnixTimestamp()}784", HttpMethod.Post, dictionary, cookieContainer, "https://i.zhaopin.com/ResumeCenter/AccountSet/Index?tab=2");

            if (!changeResult.IsSuccess)
            {
                return(new DataResult("修改绑定手机失败!" + changeResult.ErrorMsg));
            }

            try
            {
                var result = JsonConvert.DeserializeObject <dynamic>(changeResult.Data);

                if (result.Code != 0)
                {
                    return(new DataResult((string)result.Msg));
                }
            }
            catch (Exception)
            {
                throw new Exception(changeResult.Data);
            }

            return(new DataResult());
        }
        /// <summary>
        /// 刷新简历下载数
        /// </summary>
        /// <param name="email"></param>
        /// <param name="cookie"></param>
        /// <param name="host"></param>
        private static void RefreshFreeDownloadNumber(string email, CookieContainer cookie, string host)
        {
            var userToken = cookie.GetCookies(new Uri("http://qiye.zhaopingou.com/"))["hrkeepToken"];

            var param = $"isAjax=1&clientNo=&userToken={userToken?.Value}&clientType=2";

            var dataResult = RequestFactory.QueryRequest("http://qiye.zhaopingou.com/zhaopingou_interface/user_information?timestamp=" + BaseFanctory.GetUnixTimestamp(), param, RequestEnum.POST, cookie, host: host);

            if (!dataResult.IsSuccess)
            {
                LogFactory.Warn($"用户登录刷新下载数异常!异常用户:{email}", MessageSubjectEnum.ZhaoPinGou);

                return;
            }

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

            if (jObject != null)
            {
                if ((int)jObject["errorCode"] != 1)
                {
                    LogFactory.Warn($"用户登录异常!异常用户:{email},异常信息:{(string)jObject["message"]}", MessageSubjectEnum.ZhaoPinGou);

                    return;
                }

                using (var db = new ResumeMatchDBEntities())
                {
                    var user = db.User.FirstOrDefault(f => f.Email == email);

                    if (user == null)
                    {
                        return;
                    }

                    var count = (int)jObject["memberEvents"]?["free_count"];

                    user.DownloadNumber = count;

                    db.TransactionSaveChanges();
                }
            }
        }