你的位置:首页 > Java教程

[Java教程]信贷业务(Ali)


1、信贷业务视角

  信贷业务主要有两个视角,借款人和出资机构。借款人关心借多少钱,还多少钱,多少利息;机构关心信贷资产风险,收益。

  领域模型上两个视角分开:个人--->账单、机构--->资产。出资机构可以多样化(机构对接)。多一个机构(多一种类型的对接)。账单--机构资产--机构对接。借记账务,贷记账务,资产账务,资信调查,信贷管理。

2、一达通·流水贷

  一达通·流水贷业务:面向使用一达通出口基础服务的客户,以出口额度积累授信额度的无抵押、免担保、纯信用贷款服务,该服务由**联合多家银行共同推出。下面流向图是业务的基本流程。

3、代码中减少if...else...的使用

在我们的代码中有很多是基于类型的不同而有不同的处理逻辑,最典型的,不同枚举类型的转换:

public static CreditSource convertCreditSource(Short quotaSource) {    if (quotaSource == null) {      return null;    }    if (StringUtils.equals(QuotaSourceEnum.CMBSX.getValue(), quotaSource.toString())) {      return CreditSource.bank_cmb;    }    if (StringUtils.equals(QuotaSourceEnum.SUNSHINESX.getValue(), quotaSource.toString())) {      return CreditSource.ecreditbao_sun;    }    if (StringUtils.equals(QuotaSourceEnum.CMBCREDITLOANSX.getValue(), quotaSource.toString())) {      return CreditSource.creditloan_cmb;    }    if (StringUtils.equals(QuotaSourceEnum.CREDITBUY_BUYERSX.getValue(), quotaSource.toString())) {      return CreditSource.creditbuy_buyer;    }    if (StringUtil.equals(QuotaSourceEnum.CREDITBUY_SELLERSX.getValue(), quotaSource.toString())) {      return CreditSource.creditbuy_seller;    }    return null;  }

如果可以将这段代码修改成如下方式,会不会看起来更简洁一些?

  public static CreditSource convertCreditSource(Short quotaSource) {    if (quotaSource == null) {      return null;    }    return QuotaSourceEnum.parse(quotaSource.toString()).getCreditSource();  }

要实现这种修改,即我们需要改造如下QuotaSourceEnum枚举类:

  public enum QuotaSourceEnum {    /** 保证金授信来源 **/    BZJSX("1"),    /** 即时到账下的行业授信 **/    INSTANT_HYSX("2"),    /** 账期交易下的行业授信 **/    ZHANGQI_HYSX("3"),    /** 关系授信 **/    GXSX("4"),    /** 协议授信 **/    XYSX("5"),    /** 招行授信 **/    CMBSX("6"),    /** 阳光授信 **/    SUNSHINESX("7"),    /** 招行贷款 **/    CMBCREDITLOANSX("8"),    /** 买家赊购买家授信 **/    CREDITBUY_BUYERSX("9"),    /** 买家赊购卖家授信 **/    CREDITBUY_SELLERSX("10");    String value;    QuotaSourceEnum(String value){      this.value = value;    }    public String getValue() {      return value;    }    public void setValue(String value) {      this.value = value;    }    public static QuotaSourceEnum parse(String value) {      if (StringUtils.isBlank(value)) {        return null;      }      for (QuotaSourceEnum quotaSource : QuotaSourceEnum.values()) {        if (value.equals(quotaSource.value)) {          return quotaSource;        }      }      return null;    }  }

修改成:

public enum QuotaSourceEnum {  /** 保证金授信来源 **/  BZJSX("1", null),  /** 即时到账下的行业授信 **/  INSTANT_HYSX("2", null),  /** 账期交易下的行业授信 **/  ZHANGQI_HYSX("3", null),  /** 关系授信 **/  GXSX("4", null),  /** 协议授信 **/  XYSX("5", null),  /** 招行授信 **/  CMBSX("6", CreditSource.bank_cmb),  /** 阳光授信 **/  SUNSHINESX("7", CreditSource.ecreditbao_sun),  /** 招行贷款 **/  CMBCREDITLOANSX("8", CreditSource.creditloan_cmb),  /** 买家赊购买家授信 **/  CREDITBUY_BUYERSX("9", CreditSource.creditbuy_buyer),  /** 买家赊购卖家授信 **/  CREDITBUY_SELLERSX("10", CreditSource.creditbuy_seller);   final String value;  final CreditSource creditSource;   QuotaSourceEnum(String value, CreditSource creditSource){    this.value = value;    this.creditSource = creditSource;  }....}

个人感觉使用Map的方式比这种if-else要简洁一些。还有字符串的比较,统一使用:

StringUtils.equals(str1, str2);StringUtils.equalsIgnoreCase(str1, str2);

4、