/***獲取保理各個協議的入池金額**/
public BigDecimal getIncomeAmt(String uid, List<AssetsStatisticsDo> statisticsDoList) {
if (null == statisticsDoList || statisticsDoList.size() == 0) { return BigDecimal.ZERO; }
Map<String, SpecPlanExtDto> extMap = specPlanService.getSpecPlanExtMap(uid, new ArrayList<String>() {{
add(SpecPlanEnumClazz.SpecPlanExtCode.INCOME_POOL.getCode());
}});
String inPoolType = extMap.get(SpecPlanEnumClazz.SpecPlanExtCode.INCOME_POOL.getCode()).getKeyVal();
// 默認只有本金入池
BigDecimal rlt = statisticsDoList.stream().map((e) -> e.getPrincp()).reduce(BigDecimal.ZERO, BigDecimal::add);
if (!inPoolType.equals(SpecPlanEnumClazz.InComePoolEnum.OUT.getType())) {
List<SpecPlanExtDto> inPoolAmtTypes = specPlanService.listSpecPlanExt(uid, new ArrayList<String>() {{
add(SpecPlanEnumClazz.SpecPlanExtCode.IN_POOL_AMT_TYPE.getCode());
}});
log.info("資產過濾金額獲取,uid:{}獲取部分收益入池金額字段:{}", uid, JSONObject.toJSONString(inPoolAmtTypes));
rlt = getAmtFromIncome(inPoolAmtTypes, statisticsDoList);
}
log.info("資產過濾金額獲取,uid:{}獲取可過濾金額爲:{}", uid, rlt.toPlainString());
return rlt;
}
/**
* 獲取部分收益入池的金額用於過濾
*
* @param inPoolAmtTypes
* @param statistics
* @return
*/
private BigDecimal getAmtFromIncome(List<SpecPlanExtDto> inPoolAmtTypes, List<AssetsStatisticsDo> statistics) {
return statistics.stream().map((e) -> {
return inPoolAmtTypes.stream().map((type) -> {
Object tmp = getFieldVal(e, type.getKeyCode());
return tmp == null ? BigDecimal.ZERO : (BigDecimal) tmp;
}).reduce(e.getPrincp() == null ? BigDecimal.ZERO : e.getPrincp(), BigDecimal::add);
}).reduce(BigDecimal.ZERO, BigDecimal::add);
}
/**通過反射獲取統計表中對應的費用金額**/
private Object getFieldVal(Object o, String fieldName) {
try {
Field field = o.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Object rlt = field.get(o);
field.setAccessible(false);
return rlt;
} catch (ReflectiveOperationException e) {
return null;
}
}
ABS系統-保理結合Java8流+反射完成各個協議的還款結算金額的計算
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.