背景
现行系统下银行SA的学校要做绑卡、提现限制,规定只能提现到当前银行下的银行卡
系统目前需要限制使用什么银行卡便要改一次代码,十分不便,且日后若要取消限制也需对代码进行一次迭代,耗时耗力
为尽可能少的修改代码,现需要将银行作为配置项单独抽离出代码,需要限制使用什么银行卡时便配置什么银行,这样以后可以做到在不改变代码的前提下实现限制的功能
方案
个性化约束方案
描述:
个性化约束方案是针对全量约束方案做的修改,采用“通道+银行”的模式,也就是单一通道,单一钱包单独进行配置
优缺点:
优: 配置方式比较灵活,可以支持单独修改而不影响其它部分;
缺: 由于每条通道每个钱包都是单独配置的,所以会存在多个单独的配置,维护起来比较麻烦配置规则:
- 每一条通道或钱包单独创建一条记录,数据库存储:SA
- 多个银行以逗号分隔,例如 民生银行,江西银行,平安银行
- 取配置中心的字符串,将其转化为字符串数组,遍历数组,与sa名称进行匹配,匹配成功则进行页面约束
- 前端获取后端约束的标识,对开户行进行限制,提交时再次进行验证
数据库设计
create table contract_sa_limit
(
id bigint auto_increment comment '主键' primary key,
type int(4) not null comment '类型: 10: 通道进件 20: 钱包提现',
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)',
buss_name varchar(20) not null comment '通道或钱包名称',
sa_name varchar(100) not null comment '限制sa(以逗号做分割)',
public_account_bank varchar(100) default '' not null comment '对公账户限制银行(以逗号做分隔符)',
other_account_bank varchar(100) default '' not null comment '对私账户限制银行(以逗号做分隔符)'
)
comment '银行SA绑定卡限制表' charset = utf8mb4;
功能设计分析
功能描述
- 目前系统中存在对民生银行SA和江西银行SA做的约束,规则如下:
- JZB进件通道(其它结算账户):对江西银行进行了约束,当sa为江西银行时,不能选择非江西银行的开户支行(未对民生银行进行约束)
- ZFT进件通道(入账到银行卡对公或法人):对民生银行和江西银行进行了约束
- JZB钱包(绑卡和提现):对民生银行和江西银行进行了约束,当sa为民生或江西银行时,绑卡或提现时不能选择非非民生或非江西银行卡
特殊约束:
- 历史原因:民生村镇银行可以当做民生银行用。即:如果关键字是民生银行,银行卡匹配要支持 民生银行 ,民生村镇银行。这个业务采用代码写死方案。