私はアパートを借りる会社のシステムを作成しています。すべての価格設定は、いくつかの期間に基づいています。たとえば、カテゴリ「ジュニア・メーカー」のアパートは、価格帯があります。期間に基づく価格計算アルゴリズム
30.05.2016 - 31.01.2017: 3000 EUR
01.02.2017 - Infinity: 4000 EUR
追加などの期間もあります。他の期間に基づいて税、季節の価格(プラス/マイナスいくつかのパーセント値)、およびサービス料。だから、価格は、たとえば、頻繁に変えることができ:
誰かが例えば15日未満のためにアパートを借りたい場合は31.05.2016 - 30.06.2016 (3500EUR because of some seasonal price period)
01.07-31.08.2016 (5000EUR other seasonal price period)
01.09.2016 - 31.01.2017 (3000 EUR)
01.02.2017 - 4000 EUR.
もあり、追加料金が15%は言うことができます - このすべては、動的に設定されています。
ここでは問題は私たちのページにあるので、ユーザーは価格に基づいてアパートを見つけることができます。例えば、いくつかのユーザーは3000から4000ユーロの間で価格が変化し、マンションを6ヶ月間賃貸するアパートのみを探したいと思っています。私が言ったように、価格はその期間に例えば5回変わることができるので、私は平均価格を計算しようとしています。指定された期間をすべて組み込むためにこのアルゴリズムをどのように実装すればよいか考えてください。たとえば、可能なレコードが500個あると仮定し、これを動的に計算するとパフォーマンスの問題が発生する可能性があります。 、 dateFrom:
private RentPriceAggregatedPeriodsDto prepareRentPriceAggregator(Long buildingId, Long categoryId, LocalDate dateFrom, LocalDate dateTo, Integer duration) {
List<CategoryPricePeriod> pricePeriods = categoryPricePeriodRepository.findCategoryPricePeriods(buildingId, categoryId, dateFrom, dateTo);
List<SeasonalPricePeriod> seasonalPricePeriods = seasonalPricePeriodRepository.findSeasonalPricePeriods(buildingId, categoryId, dateFrom, dateTo);
List<LastMinuteRatePeriod> lastMinuteRatePeriods = lastMinuteRatePeriodRepository.findLastMinuteRatePeriods(buildingId, categoryId, dateFrom, dateTo);
List<TaxesDefinitionPeriodDto> taxesDefinition = taxesDefinitionService.findTaxPeriodsForBuildingAndCategory(buildingId, categoryId, TaxTypeCode.VAT,
dateFrom, dateTo);
Optional<SurchargePolicy> surcharge = surchargePolicyRepository.findForDurationAndRentalObjectCategoryIds(categoryId, buildingId, duration);
return new RentPriceAggregatedPeriodsDto(pricePeriods, seasonalPricePeriods, lastMinuteRatePeriods, taxesDefinition, surcharge);
}
私はユニークな価格帯のリストを作成し、すべてのそれらの期間に基づいて:ここで
UPDATE
は一つの建物のための1つのアパートのカテゴリに関連する期間を取るためにいくつかのコードですdateTo、通貨、値 これらの手順の後、私は1つのカテゴリの一意の価格のリストを持っています。それから私は、それらのユニークな価格帯のそれぞれに何日の予約があるかを計算し、それを乗算し、ラウンド+税金を掛けて、それを合計して予約の最終価格を得る必要があります。これらのステップをもう一度実行すると、500回(複数のビルディングで複数のカテゴリ)と言うことができます。
明示的には述べられていませんが、アパートメントあたりの期間は重複せず、その組合は負の無限大から正の無限大までの期間をカバーすると仮定できますか? – Codor
@Codorはいアパートあたりの各価格期間はユニークです。毎日有効な価格は1つだけですが、顧客の予約全体には複数の可能な価格があります。 – jgr