ABS系统-保理结合Java8流+反射完成各个协议的还款结算金额的计算

/***获取保理各个协议的入池金额**/
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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值