背景

  • 现行系统下银行SA的学校要做绑卡、提现限制,规定只能提现到当前银行下的银行卡

  • 系统目前需要限制使用什么银行卡便要改一次代码,十分不便,且日后若要取消限制也需对代码进行一次迭代,耗时耗力

  • 为尽可能少的修改代码,现需要将银行作为配置项单独抽离出代码,需要限制使用什么银行卡时便配置什么银行,这样以后可以做到在不改变代码的前提下实现限制的功能

    方案

    个性化约束方案

    单一通道,单一钱包约束,进件约束与提现约束共同设置

    描述:

    个性化约束方案是针对全量约束方案做的修改,采用“通道+银行”的模式,也就是单一通道,单一钱包单独进行配置

    优缺点:

    优: 配置方式比较灵活,可以支持单独修改而不影响其它部分;
    缺: 由于每条通道每个钱包都是单独配置的,所以会存在多个单独的配置,维护起来比较麻烦

    配置规则:

  1. 每一条通道或钱包单独创建一条记录,数据库存储:SA
  2. 多个银行以逗号分隔,例如 民生银行,江西银行,平安银行
  3. 取配置中心的字符串,将其转化为字符串数组,遍历数组,与sa名称进行匹配,匹配成功则进行页面约束
  4. 前端获取后端约束的标识,对开户行进行限制,提交时再次进行验证

    数据库设计

    1. create table contract_sa_limit
    2. (
    3. id bigint auto_increment comment '主键' primary key,
    4. type int(4) not null comment '类型: 10: 通道进件 20: 钱包提现',
    5. buss_key varchar(20) not null comment '通道标识(WX,CMBC,PINGAN,CMBCTOP,KBT,ALIPAY,UMB,PSBC,DGB,ABC,ABCBRIDGE,UMBALI,ALIFACE),钱包标识(jzb,umb,webank,zfbzbank,wxzbank)',
    6. buss_name varchar(20) not null comment '通道或钱包名称',
    7. sa_name varchar(100) not null comment '限制sa(以逗号做分割)',
    8. public_account_bank varchar(100) default '' not null comment '对公账户限制银行(以逗号做分隔符)',
    9. other_account_bank varchar(100) default '' not null comment '对私账户限制银行(以逗号做分隔符)'
    10. )
    11. comment '银行SA绑定卡限制表' charset = utf8mb4;

功能设计分析

功能描述

  1. 目前系统中存在对民生银行SA和江西银行SA做的约束,规则如下:
  • JZB进件通道(其它结算账户):对江西银行进行了约束,当sa为江西银行时,不能选择非江西银行的开户支行(未对民生银行进行约束)
  • ZFT进件通道(入账到银行卡对公或法人):对民生银行和江西银行进行了约束
  • JZB钱包(绑卡和提现):对民生银行和江西银行进行了约束,当sa为民生或江西银行时,绑卡或提现时不能选择非非民生或非江西银行卡

    特殊约束:

  1. 历史原因:民生村镇银行可以当做民生银行用。即:如果关键字是民生银行,银行卡匹配要支持 民生银行 ,民生村镇银行。这个业务采用代码写死方案。