java枚举类统一封装:银行还款计算公式

之前在做还款相关的东西,发现还款没有固定的公式,故此参考了当前有的还款计算逻辑,整理除了一下计算公式。

目的:直接调用此枚举类的接口,并传入相关参数,即可计算出结果。亲测可用

注:目前没有涵盖所有的还款计算方式,可根据需求参考一下代码进行实现。

package com.yao.dd.enums;

import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;

/**
 * 还款金额计算:
 *
 * 应还本息
 * 应还罚息
 * 应还费用
 * 应还复利
 * 总应还
 *
 * 已还本息
 * 已还罚息
 * 已还费用
 * 应还复利
 * 总已还
 *
 * 待还本息
 * 待还罚息
 * 待还费用
 * 应还复利
 * 总待还
 */
@Slf4j
public enum RepayAmtOperationEnum {

    PLUS{
        @Override
        public BigDecimal principalInterest(BigDecimal x, BigDecimal y, BigDecimal z){
            x = x == null ? BigDecimal.ZERO : x;
            y = y == null ? BigDecimal.ZERO : y;
            z = z == null ? BigDecimal.ZERO : z;
            return x.add(y).add(z);
        }

        @Override
        public BigDecimal caclTotalDueAmt(BigDecimal a, BigDecimal b, BigDecimal c, BigDecimal d, BigDecimal e) {
            a = a == null ? BigDecimal.ZERO : a;
            b = b == null ? BigDecimal.ZERO : b;
            c = c == null ? BigDecimal.ZERO : c;
            d = d == null ? BigDecimal.ZERO : d;
            e = e == null ? BigDecimal.ZERO : e;
            return a.add(b).add(c).add(d).add(e);
        }

        @Override
        public BigDecimal caclTotalRepaidAmt(BigDecimal a, BigDecimal b, BigDecimal c, BigDecimal d, BigDecimal e) {
            a = a == null ? BigDecimal.ZERO : a;
            b = b == null ? BigDecimal.ZERO : b;
            c = c == null ? BigDecimal.ZERO : c;
            d = d == null ? BigDecimal.ZERO : d;
            e = e == null ? BigDecimal.ZERO : e;
            return a.add(b).add(c).add(d).add(e);
        }

        @Override
        public BigDecimal caclTotalStayAmt(BigDecimal x, BigDecimal y) {
            return null;
        }

    }
    ,
    MINUS{
        @Override
        public BigDecimal principalInterest(BigDecimal x, BigDecimal y, BigDecimal z){
            return null;
        }

        @Override
        public BigDecimal caclTotalDueAmt(BigDecimal a, BigDecimal b, BigDecimal c, BigDecimal d, BigDecimal e) {
            return null;
        }

        @Override
        public BigDecimal caclTotalRepaidAmt(BigDecimal a, BigDecimal b, BigDecimal c, BigDecimal d, BigDecimal e) {
            return null;
        }

        @Override
        public BigDecimal caclTotalStayAmt(BigDecimal x, BigDecimal y) {
            x = x == null ? BigDecimal.ZERO : x;
            y = y == null ? BigDecimal.ZERO : y;
            BigDecimal totalAmt = x.subtract(y);

            if(totalAmt.compareTo(BigDecimal.ZERO) < 0){
//                log.info("总待还金额小于0,默认赋值为0");
                System.out.println("总待还金额小于0,默认赋值为0");
                totalAmt = BigDecimal.ZERO;
            }
            return totalAmt;
        }

    };


    /**
     * TODO 本息:应还本息/待还本息
     * @param x     本金
     * @param y     利息
     * @param z     罚息
     * @return
     */
    public abstract BigDecimal principalInterest(BigDecimal x, BigDecimal y, BigDecimal z);


    /**
     * TODO 总应还=应还本金+应还利息+应还费用+应还罚息+应还复利
     * @param a     应还本金
     * @param b     应还利息
     * @param c     应还费用
     * @param d     应还罚息
     * @param e     应还复利
     * @return
     */
    public abstract BigDecimal caclTotalDueAmt(BigDecimal a, BigDecimal b, BigDecimal c, BigDecimal d, BigDecimal e);

    /**
     * TODO 总已还=已还本金+已还利息+已还费用+已还罚息+已还复利
     * @param a     已还本金
     * @param b     已还利息
     * @param c     已还费用
     * @param d     已还罚息
     * @param e     已还复利
     * @return
     */
    public abstract BigDecimal caclTotalRepaidAmt(BigDecimal a, BigDecimal b, BigDecimal c, BigDecimal d, BigDecimal e);

    /**
     * TODO 总待还=总应还-总已还
     * @param x     总应还
     * @param y     总已还
     * @return
     */
    public abstract BigDecimal caclTotalStayAmt(BigDecimal x, BigDecimal y);


    public static void main(String[] args) {
        System.out.println("应还本息/待还本息:"+RepayAmtOperationEnum.PLUS.principalInterest(new BigDecimal(100), new BigDecimal(10), new BigDecimal(10)));
        RepayAmtOperationEnum.MINUS.caclTotalStayAmt(null,new BigDecimal(10));
    }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码码再也不用担心我的学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值