public async Task <bool> UpdateJob(Jobs.Model.Job job)
        {
            if (job == null)
            {
                throw new ArgumentNullException();
            }

            using (IJobQueueDataContext context = _contextFactory())
            {
                Job entity = await context.Job.SingleOrDefaultAsync(x => x.JobId == job.JobId);

                if (entity == null)
                {
                    throw new ArgumentException($"Job id {job.JobId} does not exist");
                }

                bool statusChanged = entity.Status != (short)job.Status;

                JobConverter.Convert(job, entity);
                entity.DateTimeUpdatedUtc = _dateTimeProvider.GetNowUtc();
                context.Entry(entity).Property("RowVersion").OriginalValue = job.RowVersion == null ? null : Convert.FromBase64String(job.RowVersion);
                context.Entry(entity).State = EntityState.Modified;

                if (job.Status == JobStatusType.Ready)
                {
                    context.JobSubmission.Add(new JobSubmission()
                    {
                        DateTimeUtc = _dateTimeProvider.GetNowUtc(),
                        JobId       = job.JobId
                    });
                }

                try
                {
                    await context.SaveChangesAsync();

                    if (statusChanged)
                    {
                        await SendEmailNotification(job);
                    }

                    return(true);
                }
                catch (DbUpdateConcurrencyException exception)
                {
                    throw new Exception(
                              "Save failed. Job details have been changed. Reload the job object and try save again");
                }
            }
        }
コード例 #2
0
        public async Task <long> AddJob(FileUploadJob job)
        {
            if (job == null)
            {
                throw new ArgumentNullException();
            }

            using (var context = _contextFactory())
            {
                var entity = new Job
                {
                    DateTimeSubmittedUtc = _dateTimeProvider.GetNowUtc(),
                    JobType            = (short)job.JobType,
                    Priority           = job.Priority,
                    Status             = (short)job.Status,
                    SubmittedBy        = job.SubmittedBy,
                    NotifyEmail        = job.NotifyEmail,
                    CrossLoadingStatus = (await IsCrossLoadingEnabled(job.JobType)) ? (short)JobStatusType.Ready : (short?)null
                };

                var metaEntity = new FileUploadJobMetaData()
                {
                    FileName         = job.FileName,
                    FileSize         = job.FileSize,
                    IsFirstStage     = true,
                    StorageReference = job.StorageReference,
                    Job            = entity,
                    CollectionName = job.CollectionName,
                    PeriodNumber   = job.PeriodNumber,
                    Ukprn          = job.Ukprn,
                    TermsAccepted  = job.TermsAccepted,
                    CollectionYear = job.CollectionYear
                };
                context.Job.Add(entity);
                context.FileUploadJobMetaData.Add(metaEntity);
                await context.SaveChangesAsync();

                //send email on create for esf and eas
                if (job.JobType != JobType.IlrSubmission)
                {
                    await SendEmailNotification(entity.JobId);
                }

                return(entity.JobId);
            }
        }
        public async Task <long> AddJob(Jobs.Model.Job job)
        {
            if (job == null)
            {
                throw new ArgumentNullException();
            }

            using (IJobQueueDataContext context = _contextFactory())
            {
                var entity = new Job
                {
                    DateTimeSubmittedUtc = _dateTimeProvider.GetNowUtc(),
                    JobType            = (short)job.JobType,
                    Priority           = job.Priority,
                    Status             = (short)job.Status,
                    SubmittedBy        = job.SubmittedBy,
                    NotifyEmail        = job.NotifyEmail,
                    CrossLoadingStatus = (await IsCrossLoadingEnabled(job.JobType)) ? (short)JobStatusType.Ready : (short?)null
                };
                context.Job.Add(entity);
                context.SaveChanges();
                return(entity.JobId);
            }
        }