コード例 #1
0
        public Task Execute(IJobExecutionContext context)
        {
            var jobData         = QuartzScheduler.GetJobDataConfiguration <MunicipalityCodeJobDataConfiguration>(context.JobDetail);
            var serviceProvider = context.Scheduler.Context.Get(QuartzScheduler.SERVICE_PROVIDER) as IServiceProvider;

            ExecuteInternal(unitOfWork =>
            {
                var content = Download(jobData.Url, GetKapaConfiguration(context)); // roughly 300k
                var downloadedMunicipalityCodes = Parse(content);

                var existingMunicipalityCodes = unitOfWork.CreateRepository <IMunicipalityRepository>()
                                                .All()
                                                .Include(a => a.MunicipalityNames).ThenInclude(b => b.Localization)
                                                .ToList();

                // add new postal codes and update existing
                var vmToEntity = serviceProvider.GetRequiredService <ITranslationViewModel>();
                vmToEntity.TranslateAll <VmJsonMunicipality, Municipality>(downloadedMunicipalityCodes, unitOfWork);

                // invalidate not exist postal codes
                var municipalityCodesToInvalidate = existingMunicipalityCodes.Where(em => !downloadedMunicipalityCodes.Select(a => a.MunicipalityCode).Contains(em.Code)).ToList();
                municipalityCodesToInvalidate.ForEach(m => m.IsValid = false);

                unitOfWork.Save(SaveMode.AllowAnonymous, userName: context.JobDetail.Key.Name);
            }, context);
            return(Task.CompletedTask);
        }
コード例 #2
0
        public Task Execute(IJobExecutionContext context)
        {
            var serviceProvider = context.Scheduler.Context.Get(QuartzScheduler.SERVICE_PROVIDER) as IServiceProvider;
            var jobData         = QuartzScheduler.GetJobDataConfiguration <FintoDataJobDataConfiguration>(context.JobDetail);

            ExecuteInternal(() =>
            {
                var settings     = FintoJobExtension.GetSettings(jobData.DownloadType);
                var typeSettings = FintoJobExtension.SetDownloadDefinition(settings, jobData.DownloadType);

                var downloadFintoTask = new DownloadFintoDataTask();
                downloadFintoTask.DownloadData(settings).Wait();
                if (typeSettings.MergeTo == null)
                {
                    return;
                }

                var service = serviceProvider.GetService <ISeedingService>();
                service?.SeedOntologyTerms(typeSettings.MergeTo, context.JobDetail.Key.Name);
            }, context);
            return(Task.CompletedTask);
        }
コード例 #3
0
        public Task Execute(IJobExecutionContext context)
        {
            var jobData         = QuartzScheduler.GetJobDataConfiguration <AreaCodeJobDataConfiguration>(context.JobDetail);
            var serviceProvider = context.Scheduler.Context.Get(QuartzScheduler.SERVICE_PROVIDER) as IServiceProvider;

            var typesCache = serviceProvider.GetRequiredService <ITypesCache>();
            var areaTypeId = typesCache.Get <AreaType>(AreaType.ToString());

            ExecuteInternal(unitOfWork =>
            {
                var kapaConfiguration = GetKapaConfiguration(context);
                var content           = Download(jobData.Url, kapaConfiguration);
                var downloadedAreas   = Parse(content).ToList();

                var existingAreas = unitOfWork.CreateRepository <IAreaRepository>()
                                    .All()
                                    .Where(a => a.AreaTypeId == areaTypeId /* && a.IsValid*/)
                                    .Include(a => a.AreaNames).ThenInclude(b => b.Localization)
                                    .Include(a => a.AreaMunicipalities).ThenInclude(m => m.Municipality)
                                    .ToList();

                var vmToEntity = serviceProvider.GetRequiredService <ITranslationViewModel>();

                // get municipalities from repository
                var municipalities = unitOfWork.CreateRepository <IMunicipalityRepository>().All().ToDictionary(m => m.Code, m => m.Id);

                var missingAreaCodes = downloadedAreas.Where(pc => !existingAreas.Select(epc => epc.Code).Contains(pc.Code)).ToList();
                if (missingAreaCodes.Any())
                {
                    // add missing municipalities
                    missingAreaCodes.ForEach(mpc =>
                    {
                        mpc.Municipalities = GetRegionMunicipalities(jobData.MunicipalityUrl, kapaConfiguration, mpc.Code);
                        mpc.Municipalities.ForEach(m =>
                        {
                            mpc.AreaTypeId     = areaTypeId;
                            var municipalityId = municipalities.ContainsKey(m) ? municipalities[m] : (Guid?)null;
                            if (municipalityId == null)
                            {
                                throw new Exception($"Municipality of code: {m} doesn't exist.");
                            }
                            mpc.AreaMunicipalities.Add(new VmJsonAreaMunicipality {
                                MunicipalityId = municipalityId.Value
                            });
                        });
                    });

                    var rep    = unitOfWork.CreateRepository <IAreaRepository>();
                    var toSave = vmToEntity.TranslateAll <VmJsonArea, Area>(missingAreaCodes, unitOfWork);
                    toSave.ForEach(a =>
                    {
                        a.IsValid = true;
                        rep.Add(a);
                    });
                }

                // invalidate not exist areas
                var downloadedAreaCodes = downloadedAreas.Select(a => a.Code).ToList();
                var areasToInvalidate   = existingAreas.Where(ea => !downloadedAreaCodes.Contains(ea.Code));
                areasToInvalidate.ForEach(a => a.IsValid = false);

                // validate existing areas
                var areasToValidate = existingAreas.Where(ea => !ea.IsValid && downloadedAreaCodes.Contains(ea.Code)).ToList();
                areasToValidate.ForEach(a => a.IsValid = true);

                // handle names
                var nameRep    = unitOfWork.CreateRepository <IAreaNameRepository>();
                var namesToAdd = HandleCodeNames(unitOfWork, nameRep, existingAreas.Where(pc => pc.IsValid), downloadedAreas.OfType <IJsonCodeNamesItem>().ToList());
                namesToAdd.ForEach(nta =>
                {
                    var itemName = vmToEntity.Translate <VmJsonName, AreaName>(nta, unitOfWork);
                    if (!nta.OwnerReferenceId.HasValue)
                    {
                        return;
                    }
                    itemName.AreaId = nta.OwnerReferenceId.Value;
                    nameRep.Add(itemName);
                });

                // handle municipalities
                var areaMunicipalityRep = unitOfWork.CreateRepository <IAreaMunicipalityRepository>();
                existingAreas.ForEach(ea =>
                {
                    var existingMunicipalities   = ea.AreaMunicipalities.ToList();
                    var downloadedMunicipalities = ParseMunicipalities(Download(ParseKapaConfigurationForMunicipality(jobData.MunicipalityUrl, kapaConfiguration, ea.Code)));

                    // municipalities to delete
                    var municipalitiesToDelete = existingMunicipalities.Where(em => !downloadedMunicipalities.Contains(em.Municipality?.Code));
                    municipalitiesToDelete.ForEach(am =>
                    {
                        areaMunicipalityRep.Remove(am);
                    });

                    // municipalities to add
                    var municipalitiesToAdd = downloadedMunicipalities.Where(dm => !existingMunicipalities.Select(m => m.Municipality?.Code).Contains(dm));
                    municipalitiesToAdd.ForEach(m =>
                    {
                        if (!municipalities.ContainsKey(m))
                        {
                            return;
                        }
                        areaMunicipalityRep.Add(new AreaMunicipality
                        {
                            AreaId         = ea.Id,
                            MunicipalityId = municipalities[m]
                        });
                    });
                });

                // save
                unitOfWork.Save(SaveMode.AllowAnonymous, userName: context.JobDetail.Key.Name);
            }, context);
            return(Task.CompletedTask);
        }