/// <summary> /// execute task /// </summary> public static void ExecuteTask(Tasks task) { try { AssistProcessor assist = new AssistProcessor(); Assist serviceAssist = new Assist(); string planState = serviceAssist.CheckSubscriptionPlanAvailability(task.UserId); if (planState != "OK") { serviceAssist.AddErrorToDocuments(task.Id, planState); //update task serviceAssist.UpdateTaskState(task.Id, 4); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); return; } string url = serviceAssist.GetSettingValueByName("ApiUrl"); string json = task.ProfileContent; string error = ""; string response = assist.MakeOcr(url, json, ref error); if (string.IsNullOrEmpty(response)) { LogHelper.AddLog(error); serviceAssist.AddErrorToDocuments(task.Id, error); serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); serviceAssist.UpdateTaskState(task.Id, 4); return; } OcrResponseModel model = new OcrResponseModel(); serviceAssist.UpdateTaskReponseContent(task.Id, response); model = JsonConvert.DeserializeObject <OcrResponseModel>(response); if (model.Status.Equals("Submitted")) { serviceAssist.UpdateTaskState(task.Id, 2); serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 2); } else { string errorText = ""; foreach (var ocrError in model.Errors) { errorText += ocrError.ErrorName + ": " + ocrError.ErrorMessage; } serviceAssist.AddErrorToDocuments(task.Id, errorText); serviceAssist.UpdateTaskState(task.Id, 4); serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); } } catch (Exception exception) { string innerException = exception.InnerException == null ? "" : exception.InnerException.Message; string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; LogHelper.AddLog("Error in method: " + methodName + "; Exception: " + exception.Message + " Innner Exception: " + innerException); } }
/// <summary> /// execute task /// </summary> public static void ExecuteTask(Tasks task) { try { AssistProcessor assist = new AssistProcessor(); Assist serviceAssist = new Assist(); FileInfo fileInfo = null; Documents document = serviceAssist.GetToDocumentByTaskId(task.Id); var settings = SettingsTasksUnionHelper.GetSettingsByTaskId(task.Id); string mainPath = serviceAssist.GetSettingValueByName("MainPath"); string resultFolder = serviceAssist.GetSettingValueByName("ResultFolder"); string jobPattern = serviceAssist.GetSettingValueByName("ApiUrlJobState"); string uploadFolder = serviceAssist.GetSettingValueByName("UploadFolder"); string downloadPath = Path.Combine(mainPath, resultFolder); //string uploadPath = Path.Combine(mainPath, uploadFolder); string planState = serviceAssist.CheckSubscriptionPlanAvailability(task.UserId); if (planState != "OK") { serviceAssist.AddErrorToDocuments(task.Id, planState); //update task serviceAssist.UpdateTaskState(task.Id, 4); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); return; } string url = serviceAssist.GetSettingValueByName("ApiUrl"); string json = task.ProfileContent; string error = ""; string response = assist.MakeOcr(url, json, ref error); if (string.IsNullOrEmpty(response)) { /// Error! Put to exc. ftp LogHelper.AddLog(error); serviceAssist.AddErrorToDocuments(task.Id, error); serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); serviceAssist.UpdateTaskState(task.Id, 4); if (settings != null) { string filePath = Path.Combine(mainPath, document.Path); fileInfo = new FileInfo(filePath); var exceptionSettings = FlexiCapture.Cloud.FTPService .Helpers.TasksHelpers.FTPHelper .GetFtpExceptionSettings(settings.Id); var ftpConvSetting = FlexiCapture.Cloud. ServiceAssist.DBHelpers.FtpConversionSettingsHelper .GetSettingsByUserId(settings.UserId); string pathToPut = ftpConvSetting.MirrorInput ? settings.Path : exceptionSettings.Path; FTPHelper.PutFileOnFtpServer(fileInfo, document.OriginalFileName, exceptionSettings, pathToPut); } return; } OcrResponseModel model = new OcrResponseModel(); serviceAssist.UpdateTaskReponseContent(task.Id, response); model = JsonConvert.DeserializeObject <OcrResponseModel>(response); if (model.Status.Equals("Submitted")) { serviceAssist.UpdateTaskState(task.Id, 2); serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 2); } else { // Error! string errorText = ""; foreach (var ocrError in model.Errors) { errorText += ocrError.ErrorName + ": " + ocrError.ErrorMessage; } serviceAssist.AddErrorToDocuments(task.Id, errorText); serviceAssist.UpdateTaskState(task.Id, 4); serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); if (settings != null) { string filePath = Path.Combine(mainPath, document.Path); fileInfo = new FileInfo(filePath); var exceptionSettings = FlexiCapture.Cloud.FTPService .Helpers.TasksHelpers.FTPHelper .GetFtpExceptionSettings(settings.Id); var ftpConvSetting = FlexiCapture.Cloud. ServiceAssist.DBHelpers.FtpConversionSettingsHelper .GetSettingsByUserId(settings.UserId); string pathToPut = ftpConvSetting.MirrorInput ? settings.Path : exceptionSettings.Path; FTPHelper.PutFileOnFtpServer(fileInfo, document.OriginalFileName, exceptionSettings, pathToPut); } } } catch (Exception exception) { string innerException = exception.InnerException == null ? "" : exception.InnerException.Message; string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; LogHelper.AddLog("Error in method: " + methodName + "; Exception: " + exception.Message + " Innner Exception: " + innerException); } }
/// <summary> /// check task /// </summary> public static void CheckStateTask(Tasks task) { try { AssistProcessor assist = new AssistProcessor(); Assist serviceAssist = new Assist(); OcrResponseModel model = new OcrResponseModel(); model = JsonConvert.DeserializeObject <OcrResponseModel>(task.ResponseContent); FileInfo fileInfo = null; Documents document = serviceAssist.GetToDocumentByTaskId(task.Id); var settings = SettingsTasksUnionHelper.GetSettingsByTaskId(task.Id); string mainPath = serviceAssist.GetSettingValueByName("MainPath"); string resultFolder = serviceAssist.GetSettingValueByName("ResultFolder"); string jobPattern = serviceAssist.GetSettingValueByName("ApiUrlJobState"); string uploadFolder = serviceAssist.GetSettingValueByName("UploadFolder"); string downloadPath = Path.Combine(mainPath, resultFolder); string uploadPath = Path.Combine(mainPath, uploadFolder); string jobStatus = assist.GetJobStatus(model.JobUrl); model = JsonConvert.DeserializeObject <OcrResponseModel>(jobStatus); if (model.Status.Equals("Finished")) { string planState = serviceAssist.CheckSubscriptionPlan(task.UserId, model.Statistics.PagesArea); if (planState != "OK") { // Error! serviceAssist.AddErrorToDocuments(task.Id, planState); //update task serviceAssist.UpdateTaskState(task.Id, 4); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); if (settings != null) { string filePath = Path.Combine(uploadPath, document.Path); fileInfo = new FileInfo(filePath); var exceptionSettings = FlexiCapture.Cloud.FTPService .Helpers.TasksHelpers.FTPHelper .GetFtpExceptionSettings(settings.Id); var ftpConvSetting = FlexiCapture.Cloud. ServiceAssist.DBHelpers.FtpConversionSettingsHelper .GetSettingsByUserId(settings.UserId); string pathToPut = ftpConvSetting.MirrorInput ? settings.Path : exceptionSettings.Path; FTPHelper.PutFileOnFtpServer(fileInfo, document.OriginalFileName, exceptionSettings, pathToPut); } return; } foreach (var file in model.Download) { string jobId = model.JobUrl.Replace(jobPattern, string.Empty); if (document == null) { serviceAssist.UpdateTaskState(task.Id, 4); return; } string originalName = Path.GetFileNameWithoutExtension(document.OriginalFileName); string fileExt = serviceAssist.GetToFileExtension(file.OutputFormat); Guid g = Guid.NewGuid(); string newName = g.ToString() + fileExt; originalName = originalName + fileExt; string filePath = Path.Combine(downloadPath, newName); fileInfo = new FileInfo(filePath); string error = ""; assist.DownloadFile(file.Uri, filePath, ref error); if (!File.Exists(filePath)) { LogHelper.AddLog(error); serviceAssist.AddErrorToDocuments(task.Id, error); //update task serviceAssist.UpdateTaskState(task.Id, 4); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); return; } //add document serviceAssist.AddResultDocument(task.Id, g, originalName, newName, filePath); if (settings != null) { var outputSettings = FlexiCapture.Cloud.FTPService .Helpers.TasksHelpers.FTPHelper .GetFtpOutputSettings(settings.Id); var ftpConvSetting = FlexiCapture.Cloud. ServiceAssist.DBHelpers.FtpConversionSettingsHelper .GetSettingsByUserId(settings.UserId); string pathToPut = ftpConvSetting.MirrorInput ? settings.Path : outputSettings.Path; FTPHelper.PutFileOnFtpServer(fileInfo, originalName, outputSettings, pathToPut); } } //update task serviceAssist.UpdateTaskState(task.Id, 3); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 3); // add statistics serviceAssist.AddStatisctics(task.Id, model.Statistics); } else if (model.Status.Equals("Processing")) { } else if (!model.Status.Equals("Submitted")) { // Error! LogHelper.AddLog("Error in JobStatus: " + jobStatus); string errorText = ""; foreach (var ocrError in model.Errors) { errorText += ocrError.ErrorName + ": " + ocrError.ErrorMessage; } serviceAssist.AddErrorToDocuments(task.Id, errorText); //update task serviceAssist.UpdateTaskState(task.Id, 4); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); if (settings != null) { string filePath = Path.Combine(uploadPath, document.Path); fileInfo = new FileInfo(filePath); var exceptionSettings = FlexiCapture.Cloud.FTPService .Helpers.TasksHelpers.FTPHelper .GetFtpExceptionSettings(settings.Id); var ftpConvSetting = FlexiCapture.Cloud. ServiceAssist.DBHelpers.FtpConversionSettingsHelper .GetSettingsByUserId(settings.UserId); string pathToPut = ftpConvSetting.MirrorInput ? settings.Path : exceptionSettings.Path; FTPHelper.PutFileOnFtpServer(fileInfo, document.OriginalFileName, exceptionSettings, pathToPut); } } } catch (Exception exception) { string innerException = exception.InnerException == null ? "" : exception.InnerException.Message; string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; LogHelper.AddLog("Error in method: " + methodName + "; Exception: " + exception.Message + " Innner Exception: " + innerException); } }
/// <summary> /// make processing /// </summary> public static void MakeProcessing() { try { int serviceId = 4;// email attachment service id //getting available file extentions Assist assist = new Assist(); Assist serviceAssist = new Assist(); string serverPath = serviceAssist.GetSettingValueByName("MainPath"); string uploadFolder = serviceAssist.GetSettingValueByName("UploadFolder"); string uploadUrl = Path.Combine(serverPath, uploadFolder); List <string> extentions = assist.GetToAvailableFileExtensions(); // getting IMAP setttings string path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "data/settings.xml"); if (File.Exists(path)) { ServiceSettingsModel settingsModel; XmlSerializer formatter = new XmlSerializer(typeof(ServiceSettingsModel)); ServiceSettingsModel model = new ServiceSettingsModel(); using (FileStream fs = new FileStream(path, FileMode.Open)) { settingsModel = formatter.Deserialize(fs) as ServiceSettingsModel; } //check tasks List <Tasks> notExecutedTasks = assist.GetToNotExecutedTasks(serviceId); //upload files foreach (var notExecutedTask in notExecutedTasks) { OcrRequestModel requestModel = JsonConvert.DeserializeObject <OcrRequestModel>(notExecutedTask.ProfileContent); if (requestModel.InputFiles != null && requestModel.InputFiles.Count > 0) { string extension = Path.GetExtension(requestModel.InputFiles[0].Name); if (extension != null && extension != ".zip" && extension != ".rar" && extension != ".7z") { TaskHelper.ExecuteTask(notExecutedTask); } } } //check statuses List <Tasks> processedTasks = assist.GetToProcessedTasks(serviceId); //download files foreach (var processedTask in processedTasks) { TaskHelper.CheckStateTask(processedTask); } EmailHelper.CreateTasksFromEmails(settingsModel, assist, extentions, uploadUrl, uploadFolder, serviceId); } else { throw new FileNotFoundException("File not found in " + path); } //update states } catch (Exception exception) { string innerException = exception.InnerException == null ? "" : exception.InnerException.Message; string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; LogHelper.AddLog("Error in method: " + methodName + "; Exception: " + exception.Message + " Innner Exception: " + innerException); } }
/// <summary> /// make processing /// </summary> public static void MakeProcessing() { try { int serviceId = 3; ServiceAssist.Assist assist = new Assist(); List <string> extensions = assist.GetToAvailableFileExtensions(); List <FtpWebResponse> responses = new List <FtpWebResponse>(); string pathToDownload = assist.GetSettingValueByName("MainPath"); string resultFolder = assist.GetSettingValueByName("ResultFolder"); FlexiCapture.Cloud.FTPService.Helpers.TasksHelpers.FTPHelper.GetFtpInputSettings().ForEach(x => { if (x.Enabled) { var response = FlexiCapture.Cloud.FTPService. Helpers.TasksHelpers.FTPHelper.TryLoginToFtp(x.Host, x.UserName, PasswordHelper.Crypt.DecryptString(x.Password), x.Path, x.UserId, x.ServiceType); var ftpConversionSettings = FlexiCapture.Cloud.FTPService.Helpers.TasksHelpers. FTPHelper.GetFtpConersionSettings(x.UserId); List <Tuple <string, string> > addedFilesInResponse; if (response != null) { assist.UserProfile = assist.GetUserProfile(x.UserId, 3); addedFilesInResponse = FlexiCapture.Cloud.FTPService.Helpers. TasksHelpers.FTPHelper.ExtractFiles(response, x); addedFilesInResponse.ForEach(af => { if (CheckExtensions(extensions, af.Item2)) { var newNameGuid = Guid.NewGuid(); var uploadName = newNameGuid + af.Item2; var localName = Path.Combine(Path.Combine("data", "uploads"), uploadName); string originalFileName = af.Item1; var filePathOld = Path.Combine(assist.GetSettingValueByName("MainPath"), "data", "uploads", af.Item1); var filePathNew = Path.Combine(assist.GetSettingValueByName("MainPath"), "data", "uploads", newNameGuid.ToString() + af.Item2); //add task to db var taskId = assist.AddTask(assist.UserProfile.UserId, serviceId); if (FlexiCapture.Cloud.ServiceAssist.DBHelpers.FTPSettingsHelper.CheckOutputExceptionSettings(x.Id)) { SettingsTasksUnionHelper.AddNewItem(taskId, x.Id); } var md5 = assist.GetMD5HashFromFile(filePathOld); //add document var fileInfo = new FileInfo(filePathOld); var documentId = assist.AddDocument(taskId, fileInfo, originalFileName, newNameGuid, uploadName, localName, md5, 1, ftpConversionSettings.AddProcessed); //if (x.ServiceType == 2) // assist.ConnectTaskAndFtpSetting(taskId, x.Id); // var fileUploadStatus = System.IO.File.Move(filePathOld, filePathNew); if (File.Exists(filePathOld)) { File.Delete(filePathOld); } assist.Documents = assist.GetDocumentsByTaskId(taskId); string content = assist.ConvertProfileToRequestModel(assist.Documents, assist.UserProfile); assist.UpdateTaskProfile(taskId, content); if (x.DeleteFile) { if (File.Exists(filePathNew)) { File.Delete(filePathNew); } } } }); } } }); //responses.ForEach(x => //{ // //assist.AddTask() //}); //check tasks List <Tasks> notExecutedTasks = assist.GetToNotExecutedTasks(serviceId); //upload files foreach (var notExecutedTask in notExecutedTasks) { OcrRequestModel requestModel = JsonConvert.DeserializeObject <OcrRequestModel>(notExecutedTask.ProfileContent); if (requestModel.InputFiles != null && requestModel.InputFiles.Count > 0) { string extension = Path.GetExtension(requestModel.InputFiles[0].Name); if (extension != null && extension != ".zip" && extension != ".rar" && extension != ".7z") { //////////// TaskHelper.ExecuteTask(notExecutedTask); } } } //check statuses List <Tasks> processedTasks = assist.GetToProcessedTasks(serviceId); //download files foreach (var processedTask in processedTasks) { //////////// TaskHelper.CheckStateTask(processedTask); //FTPHelper.PutFileOnFtpServer(fInfo, processedTask); } //update states } catch (Exception exception) { string innerException = exception.InnerException == null ? "" : exception.InnerException.Message; string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; LogHelper.AddLog("Error in method: " + methodName + "; Exception: " + exception.Message + " Innner Exception: " + innerException); } }
/// <summary> /// check task /// </summary> public static void CheckStateTask(Tasks task) { try { AssistProcessor assist = new AssistProcessor(); Assist serviceAssist = new Assist(); OcrResponseModel model = new OcrResponseModel(); model = JsonConvert.DeserializeObject <OcrResponseModel>(task.ResponseContent); serviceAssist.EmailSettings = serviceAssist.GetToEmailConversionSettings(task.UserId); if (serviceAssist.EmailSettings == null || serviceAssist.EmailSettings.ResponseSettings == null) { return; } string jobStatus = assist.GetJobStatus(model.JobUrl); model = JsonConvert.DeserializeObject <OcrResponseModel>(jobStatus); if (model.Status.Equals("Finished")) { string planState = serviceAssist.CheckSubscriptionPlan(task.UserId, model.Statistics.PagesArea); if (planState != "OK") { serviceAssist.AddErrorToDocuments(task.Id, planState); //update task serviceAssist.UpdateTaskState(task.Id, 4); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); return; } List <Tuple <int, string> > downloadIds = new List <Tuple <int, string> >(); List <Tuple <string, string> > attachmentsLinks = new List <Tuple <string, string> >(); string pathToDownload = serviceAssist.GetSettingValueByName("MainPath"); string resultFolder = serviceAssist.GetSettingValueByName("ResultFolder"); string jobPattern = serviceAssist.GetSettingValueByName("ApiUrlJobState"); string downloadPath = Path.Combine(pathToDownload, resultFolder); foreach (var file in model.Download) { string jobId = model.JobUrl.Replace(jobPattern, string.Empty); Documents document = serviceAssist.GetToDocumentByTaskId(task.Id); if (document == null) { serviceAssist.UpdateTaskState(task.Id, 4); return; } string originalName = Path.GetFileNameWithoutExtension(document.OriginalFileName); string fileExt = serviceAssist.GetToFileExtension(file.OutputFormat); Guid g = Guid.NewGuid(); string newName = g.ToString() + fileExt; originalName = originalName + fileExt; string filePath = Path.Combine(downloadPath, newName); string error = ""; assist.DownloadFile(file.Uri, filePath, ref error); if (!File.Exists(filePath)) { LogHelper.AddLog(error); serviceAssist.AddErrorToDocuments(task.Id, error); //update task serviceAssist.UpdateTaskState(task.Id, 4); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); return; } //add document int resultDocumentId = serviceAssist.AddResultDocument(task.Id, g, originalName, newName, filePath); if (serviceAssist.EmailSettings.ResponseSettings.AddAttachment) { attachmentsLinks.Add(new Tuple <string, string>(filePath, originalName)); } if (serviceAssist.EmailSettings.ResponseSettings.AddLink) { downloadIds.Add(new Tuple <int, string>(resultDocumentId, originalName)); } } if (serviceAssist.EmailSettings.ResponseSettings.SendReply) { string text = "DataCapture.Cloud received a conversion request form this e-mail address. Here is your conversion result:"; serviceAssist.SendEmailResponse(task.UserId, downloadIds, attachmentsLinks, serviceAssist.EmailSettings.ResponseSettings.CCResponse? serviceAssist.EmailSettings.ResponseSettings.Addresses:"", text); } //update task serviceAssist.UpdateTaskState(task.Id, 3); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 3); // add statistics serviceAssist.AddStatisctics(task.Id, model.Statistics); } else if (model.Status.Equals("Processing")) { } else if (!model.Status.Equals("Submitted")) { LogHelper.AddLog("Error in JobStatus: " + jobStatus); string errorText = ""; foreach (var ocrError in model.Errors) { errorText += ocrError.ErrorName + ": " + ocrError.ErrorMessage; } serviceAssist.AddErrorToDocuments(task.Id, errorText); //update task serviceAssist.UpdateTaskState(task.Id, 4); //update documents serviceAssist.UpdateDocumentStatesByTaskId(task.Id, 4); if (serviceAssist.EmailSettings.ResponseSettings.SendReply) { serviceAssist.SendEmailResponseFail(task.UserId, "DataCapture.Cloud received a conversion request form this e - mail address. Error occured while processing request.", ""); } } } catch (Exception exception) { string innerException = exception.InnerException == null ? "" : exception.InnerException.Message; string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; LogHelper.AddLog("Error in method: " + methodName + "; Exception: " + exception.Message + " Innner Exception: " + innerException); } }