最近在開發中遇到一種需求,對於活期賬戶進行計算利息的時候進行分段計算。
舉個列子
比如用戶先要查詢 20190101 到20190131這個時間的活期賬戶利息。如果你想直接一個sql搞定的話,你就太低估了客戶的難纏。由於活期賬戶的利率會隨着銀行活期的利率進行調整,也就是說在 查詢的時間段內可能會存在 多個利率的,這樣的話涉及到到分段計算的問題。
起初碰到這個問題,腦袋一陣頭大。在認真分析後,關機單點還是在時間上。
首先第一步從數據庫中獲取 當前賬戶有幾個有效的利率,每個利率會有生效日(獲取爲sql查詢功能,在這裏不在詳細描述)。得到一個list。
第二部也就是重點,將查詢時間與返回的list進行組合。具體代碼如下 其中 三個參數分別是:利率生效日,查詢開始日期,查詢結束日期
public List removeDateListDemo(List<String> mapBondTempValueDemo,Date strStartDate1,Date strEndDate1){
List<Date> queryDatePointList = new ArrayList();
Date tempStart=strStartDate;
Date tempEnd=strEndDate;
System.out.println(mapBondTempValue+"需要處理的查詢時間段");
queryDatePointList.add(tempStart);
queryDatePointList.add(tempEnd);
System.out.println(queryDatePointList+"組合前的查詢時間點List");
for(String bondTempIndex:mapBondTempValue){
//將ll變爲 Date類型
Date bondTempValue = DataFormat.parseDate(bondTempIndex,DataFormat.DT_YYYY_MM_DD);
if(bondTempValue.compareTo(tempStart)>0 && tempEnd.compareTo(bondTempValue)>0){
queryDatePointList.add(bondTempValue);
}
}
Collections.sort(queryDatePointList);
System.out.println(queryDatePointList+"組合後的查詢時間點List");
return queryDatePointList;
}
第三步:根據第二部返回的list的進行截斷計算,其中需要注意的是當循環到 list.length-1的時候結束,避免出現角標越界的錯誤,在這裏進行記錄,避免忘記