private static void WriteLogsAboutJobAndClient(JobMeta job, Client client, bool canBePrinted) { _logger.Information($"Client: {client.Email}, balance: {client.Balance}"); _logger.Information($"Job guid: {job.Guid}"); _logger.Information($"Balance required: {(job.Copies * job.CountOfPages) * 2m}"); _logger.Information($"Has ability to be printed: {canBePrinted}"); }
private static void Subscriber(JobMeta job) { _logger.Verbose("job is here: " + job.DocumentName); if (CanContinueWithJob(job) == false) { return; } _jobs.Add(job.Guid); WriteLogs(job); CanchelIfNotValidJob(job); if (_client == null) { LaunchAuthGui().Wait(); _client = Auth.GetClient(); } //ToDo убрать то, что ниже _client.Balance = 0; var usrBalanceAllowPrinting = ClientValidator.CanContinuePrinting(_client, job); WriteLogsAboutJobAndClient(job, _client, usrBalanceAllowPrinting); if (!usrBalanceAllowPrinting) { _logger.Information("Job will be canceled"); job._job.Cancel(); return; } RunPrintJob(job); _jobs.Remove(job.Guid); //RemoveJobIfPaused(job, isPaused); }
private static bool CanContinueWithJob(JobMeta job) { var isPaused = job._job.IsSpooling && job._job.IsPrinting == false && job._job.IsPaused == true; var alreadyProcessedJob = _jobs.Contains(job.Guid) == true; return(isPaused && alreadyProcessedJob == false); }
public bool SaveJobEnv(JobMeta jobParams) { var allJobsEnv = ReadAllJobEnv(); allJobsEnv.RemoveAll(x => x.JobId.Equals(jobParams.JobId) && x.JobName.Equals(jobParams.JobName)); allJobsEnv.Add(jobParams); return(__Save(allJobsEnv)); }
private static void WriteLogs(JobMeta job) { _logger.Information($"***********************************************"); _logger.Information($"File to print: {job.DocumentName}"); _logger.Information($"Job state: {job._job.JobStatus.ToString()}"); _logger.Information($"Amount of pages: {job.CountOfPages}"); _logger.Information( $"Amount of copies: {job._job.HostingPrintQueue.CurrentJobSettings.CurrentPrintTicket.CopyCount}"); }
private static void CanchelIfNotValidJob(JobMeta job) { var jobIsValid = _validator.ApplyChecks(job); if (jobIsValid == false) { job.CancelJob(); } }
public async Task <IActionResult> Update(int id, [FromBody] JobMeta jobMeta) { var result = await _jobService.Update(CurrentUser.TenantId, id, jobMeta); if (result.Code <= 0) { return(BadRequest(result)); } return(Ok(result)); }
/// <summary> /// 开启job /// </summary> /// <param name="jobParam">job执行参数</param> /// <param name="onceJob">是否执行计划外的任务</param> /// <returns></returns> public bool StartJob(JobMeta jobParam, bool onceJob = false) { try { var triggerKey = onceJob ? UtilsFunc.GenTriggerKey(jobParam.JobName) : GetTriggerKey(); var trigger = GenTrigger(triggerKey, jobParam.StartTime, jobParam.Interval, jobParam.CronExpression, onceJob); if (trigger == null) { JobLogHelper.Error( $"创建{jobParam.JobName}的trigger失败,参数为{onceJob},{jobParam.StartTime},{jobParam.Interval},{jobParam.CronExpression}", null, nameof(StartJob)); return(false); } var jobkey = onceJob ? UtilsFunc.GenJobKey(jobParam.JobName) : GetJobKey(); var job = JobBuilder.Create <T>() .WithIdentity(jobkey) .Build(); job.SetJobName(jobParam.JobName); job.SetJobCode(jobParam.JobCode); job.SetOnceJobFlag(onceJob); job.SetDepJobs(jobParam.DepJobs); job.SetJobRunParams(jobParam.RunParams); job.SetAutoClose(jobParam.AutoClose); job.SetIsDoNotice(jobParam.IsDoNotice); ScheduleModConfig.Instance.DefaultScheduler.ScheduleJob(job, trigger); var jobListener = new LT(); if (onceJob) { jobListener.SetName(UtilsFunc.GenListenerName(jobParam.JobName)); } ScheduleModConfig.Instance.DefaultScheduler.ListenerManager.AddJobListener(jobListener, KeyMatcher <JobKey> .KeyEquals(jobkey)); ScheduleModConfig.Instance.DefaultScheduler.ListenerManager.AddTriggerListener(jobListener, KeyMatcher <TriggerKey> .KeyEquals(triggerKey)); if (jobParam.State == JobStateEnum.Pause) { ScheduleModConfig.Instance.DefaultScheduler.PauseJob(jobkey); } return(true); } catch (Exception ex) { JobLogHelper.Error(ex.Message, ex, nameof(StartJob)); return(false); } }
private static void RemoveJobIfPaused(JobMeta job, bool isPaused) { if (isPaused) { _jobs.Remove(job.Guid); try { job._job.Cancel(); } catch (Exception ex) { _logger.Error(ex, "Не удалось удалить задание печати"); } } }
private static void Subscriber(JobMeta job) { var isPaused = job._job.IsSpooling == false && job._job.IsPaused == true; var alreadyProcessedJob = _jobs.Contains(job.Guid) == true; if (isPaused && !alreadyProcessedJob) { _jobs.Add(job.Guid); //ToDo одно задание сюда попадает множество раз. Для предотвращения кроме имени документа нужно генерировать уникальный хэш } else { Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine($"Process aborted: {job._job.JobStatus}"); Console.ForegroundColor = ConsoleColor.White; return; } WriteLogs(job); var jobIsValid = _validator.ApplyChecks(job); if (jobIsValid == false) { job.CancelJob(); } Client client = Auth.GetClient(); var canBePrinted = ClientValidator.CanContinuePrinting(client, job); if (canBePrinted) { RunPrintJob(job._job); } else { job._job.Cancel(); } WriteLogsAboutJobAndClient(job, client, canBePrinted); // RemoveJobIfPaused(job, isPaused); }
//Todo если этот сервис отключается, то удаляем все задания печати. private static void RunPrintJob(JobMeta jobJob) { try { _logger.Information("Everething ok, a print was started"); jobJob.Resume(); _clientToBack.SendPrintedDocumentsToBackend(_client.Token, new PrintedDocument(jobJob.DocumentName, jobJob.CountOfPages)); _logger.Debug("Send about printed doc to backend"); } catch (Exception ex) { _logger.Error(ex, "Кажется не удалось возобновить задачу."); } _logger.Debug("___"); }
public bool ApplyChecks(JobMeta job) { bool isValidExtension = CheckExtensions(job.DocumentName); return isValidExtension; }
/// <summary> /// 序列化 /// </summary> /// <param name="jobMeta"></param> /// <returns></returns> public static string JobMetaToString(JobMeta jobMeta) { return(jobMeta.ToJsonStr()); }
public static bool CanContinuePrinting(Client client, JobMeta job) => client.Balance >= job.Copies * job.CountOfPages;