public override Thread Create() { return(new Thread(() => { try { ProgramTasksThread.InitDataByXML(); for (var i = 0; i < 4; i++) { Task.Run(() => UploadResume()); } for (var i = 0; i < 8; i++) { Task.Run(() => PortfolioResume()); } Task.Run(() => ImportResume()); Task.Run(() => HandleOldDomResume()); GetResumes(); } catch (Exception ex) { Trace.TraceError(ex.ToString()); } }) { IsBackground = true }); }
/// <summary> /// 上传简历 /// </summary> private static void UploadResume() { var serializer = new Serialization.Template.Zhaopin.Json.v1.Serializer(); var stopwatch = new Stopwatch(); while (true) { string path; if (!uploadQueue.TryDequeue(out path)) { Thread.Sleep(100); continue; } Interlocked.Increment(ref totalUpload); try { stopwatch.Restart(); var resumeId = Convert.ToInt32(Path.GetFileNameWithoutExtension(path)); var content = File.ReadAllText(path); var jsonObj = JsonConvert.DeserializeObject <dynamic>(content); dynamic formatterResume; try { if (jsonObj.Flag != null && jsonObj.Flag < 0) { formatterResume = Format.Convert_V0(Format.ConvertTo_Dtl_V5(content)); } else { var serializationResume = serializer.Deserialize(content); formatterResume = Formatter.Template.Zhaopin.Json.v1.Formatter.Format(serializationResume); } } catch (Exception ex) { var filePath = $"{ConfigurationManager.AppSettings["File.FailPath"]}{Path.GetFileName(path)}"; if (File.Exists(filePath)) { File.Delete(filePath); } File.Move(path, filePath); Trace.TraceError(ex.ToString()); using (var db = new MangningXssDBEntities()) { var resume = db.ZhaopinResume.FirstOrDefault(f => f.Id == resumeId); if (resume != null) { resume.Flag = 0xA; } db.SaveChanges(); } continue; } string tag; while (true) { var data = JsonConvert.SerializeObject(new { formatterResume.Reference.Id, formatterResume.Reference.Source }); var response = PrepareUploadResume(data); if (response.Code.ToString() != "0") { FinishUploadResume(data); Trace.WriteLine($"{DateTime.Now} > PrepareUploadResume failed ! Data = {data}, Response = {JsonConvert.SerializeObject(response)}"); continue; } var badoucaiResumeJson = JsonConvert.SerializeObject(formatterResume); response = UploadResume(badoucaiResumeJson); var returnCode = (string)response.Code; using (var db = new MangningXssDBEntities()) { tag = response.Reference?.Tag.ToString(); db.ZhaopinResumeUploadLog.Add(new ZhaopinResumeUploadLog { ResumeId = resumeId, ReturnCode = returnCode, Tag = tag, UploadTime = DateTime.Now }); FinishUploadResume(data); var resume = db.ZhaopinResume.FirstOrDefault(f => f.Id == resumeId); if (resume != null) { resume.Flag = 0xF; } if (jsonObj.Flag != null && jsonObj.Flag < 0) { resume.Flag = 0xB; } if (returnCode != "0") { Trace.WriteLine($"{DateTime.Now} > UploadResume failed !ResumeId = {resumeId}, Response = {JsonConvert.SerializeObject(response)}."); tag = "NULL"; db.SaveChanges(); var filePath = $"{ConfigurationManager.AppSettings["File.UploadFailPath"]}{Path.GetFileName(path)}"; if (File.Exists(filePath)) { File.Delete(filePath); } File.Move(path, filePath); break; } if (tag == "C" || tag == "U" || tag == "N") { using (var stream = new MemoryStream(GZip.Compress(Encoding.UTF8.GetBytes(badoucaiResumeJson)))) { var id = response.Reference.ResumeId.ToString(); badoucaiOssClient.PutObject(badoucaiBucketName, $"Badoucai/{id}", stream); } ProgramTasksThread.HandleResume(content, resumeId); // 更新 Resume 表的信息 } File.Delete(path); db.SaveChanges(); Interlocked.Increment(ref successUpload); } break; } stopwatch.Stop(); Console.WriteLine($"{DateTime.Now} > ResumeId = {resumeId}, Tag = {tag}, {successUpload}/{totalUpload} = {Math.Round(successUpload / (double)totalUpload, 3) * 100}%, Elapsed = {stopwatch.ElapsedMilliseconds} ms."); } catch (Exception ex) { Trace.TraceError(ex.ToString()); } } }