我正在爲租賃公寓的公司創建系統。所有定價設置都基於某些時段。例如,在分類「少年工作室」公寓有價格時期:基於期間的價格計算算法
30.05.2016 - 31.01.2017: 3000 EUR
01.02.2017 - Infinity: 4000 EUR
也有類似的附加階段:基於其他時期的稅收,季節性的價格(正/負百分比值)和服務費。所以價格往往有所不同,例如:
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天就有額外的費用可以說15% - 這一切都是建立動態。
現在問題出現在我們的頁面上,我們應該讓用戶根據他們的價格找到公寓。例如,某些用戶希望只找到價格介於3000 - 4000歐元之間的公寓,並租用公寓6個月。正如我所說的價格可以在這些時期例如改變5次,所以我期待計算一個平均價格。你有沒有想法如何實現這個算法來合併所有指定的時期。我們假設可能有例如500個可能的記錄,所以動態計算這可能會導致性能問題。
UPDATE
下面是一些代碼,以與一個公寓類爲一個建設週期:
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);
}
基於所有這些時間我準備獨特的價格週期的名單: dateFrom, dateTo,貨幣,價值 經過這些步驟後,我有一個類別的獨特價格列表。然後,我需要計算在這些獨特價格週期中每個預訂有多少天,然後乘以它,也許是整數+乘以稅,然後求和以得到預訂的最終價格。現在重新運行這些步驟可以說500次(多個建築物中的多個類別)。
雖然沒有明確說明,我們可以假設每個公寓的週期不重疊,它們的聯合覆蓋了從負無窮到正無窮的時間跨度? – Codor
@Codor是每個公寓的每個價格期間都是獨一無二的。所以對於每一天只有一個有效的價格,但對於整個客戶預訂有多個可能的價格。 – jgr