存管系统小结(改造):

2023-10-27 21:59
文章标签 系统 小结 改造 存管

本文主要是介绍存管系统小结(改造):,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.全资管理财系统存管接入:

    1.总体思路:

        业务系统现已实现标准版(公司结算系统),存管版(民泰银行存管)两种模式的存管系统,系统通过配置文件的形式识别当前的交易模式。----代码在一个分支中开发,实现多配置切换。

    2.功能页面:

        功能页面影响主要有

            2.1. 功能菜单不同,例如标准版有些菜单有,存管有些没有

            2.2. 页面元素不同,比如有些按钮在标准版可以展示,在存管中不展示

            2.3. 页面交互,数据项的控制不同,比如标准支持T+0,存管支持T+1

        对于第1,2两项:

            可通过两套菜单实现,前端只需识别当前的交易模式,并获取对应的菜单,交互图如下:

            104631_dYCU_3110937.png        

        对于第3:

        可采用模板页面的方式,将同一功能的差异化实现,分写到两个或多个模板页面中,加载页面时按需加载

104848_XQYV_3110937.png 

loadModal: function (selector, url, title, callback){$.ajax({"url" : "pages/"+url,method : "get","async" : false,success : function(html){$(selector).html(html);var _title = title ? title : $(selector + " .modal-title").html();$(selector + " .modal").modal({backdrop: 'static'}).find('.modal-title').html(_title);callback();}});},

 

    3.接口方案:

        目前系统中接口分三类:

            3.1 前端用户使用的接口(app端)

            3.2 后台管理系统所需的接口

            3.3 接收结算回调通知的接口    

    本次存管适配中,三类接口都将有所调整,考虑到兼容性,对于存管的适配,在接口前添加depository的标识

    例如:修改密码:

        标准版:POST mimosa/client/investor/baseaccount/editpaypwd

        存管版:POST mimosa/depository/client/investor/baseaccount/editpaypwd

 

    4.代码结构:

        在后台业务代码中,对需要差异化实现的功能,抽提出公共的接口,采用多实现类的方式来实现标准版和存管版的不同逻辑处理

        如下:

        105531_IXOT_3110937.png

        此实现类在实例化的时候,通过springboot的自动装配@Condition实现选择性实例化,如下:

#application.properties配置项
trade.mode=depository/*** Description:交易模式匹配器-存管版* @author ddyin* @date 2017/12/7*/
public class TradeModeDepositoryCondition implements Condition{@Overridepublic boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {return conditionContext.getEnvironment().getProperty("trade.mode").contains("depository");}
}/*** Description:交易模式匹配器-标准版** @author ddyin* @date 2017/12/7*/
public class TradeModeStandardCondition implements Condition{@Overridepublic boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {return conditionContext.getEnvironment().getProperty("trade.mode").contains("standard");}
}public interface UserInterface {public void say();
}/*** Description:用户服务-标准版实现** @author ddyin* @date 2017/12/7*/
@Service
@Conditional(value = TradeModeStandardCondition.class)
public class UserSettlementImpl implements UserInterface{@Overridepublic void say() {System.out.println("11111111");}
}/*** Description:用户服务-存管版实现** @author ddyin* @date 2017/12/7*/
@Service
@Conditional(value = TradeModeDepositoryCondition.class)
public class UserDepositoryImpl implements UserInterface{@Overridepublic void say() {System.out.println("2222222");}
}

            

    5.交互流程;

        由于对接存管后,交易密码的存储和校验需要跳转到存管系统页面来操作,且交易的提交需要传递密码校验通过后的密文。

        故,涉及交易密码的功能,在系统交互上会增加交互步骤,以申购为例,系统通讯图如下:

110431_tIur_3110937.png

 

            5.1 第三步申购信息的缓存,生成一个UUID作为key,请求参数作为value存入redis中

            5.2 第四步传递的callbackurl带上key,业务系统提供统一的密码交易通知接口

            5.3 第八步获取传回的key,从redis取请求参数(即请求参数存redis)

    6.功能设计:

        6.1 实名绑卡

            需要跳转存管页面的功能包含:

                实名绑卡,交易密码修改,交易密码重置,交易密码确认(跟随业务操作跳转)

            以下跳转是需要输入交易密码:

                充值,体现,申购,赎回,还款(发行人和融资人)

            以绑卡为例:

111729_QuBd_3110937.png

 

        以申购为例描述序列流程:

111815_8LQs_3110937.png

 

        6.2 标的的建立和标的的结标:

            在业务流程上通过埋点的方式调用存管接口,无设计上的变更。

                6.2.1 标的的建立----埋点在产品审核通过

                6.2.2 标的的结标----埋点在产品清算状态变更

        6.3 轧差:

            6.3.1 将活期和定期分开轧差处理

                活期轧差继续使用t_money_platform_publisher_offset以时间批次,产品维度进行轧差

                定期轧差继续使用t_money_platform_publisher_product_offset以产品编号维度轧差处理

            6.3.2 份额确认结算合并之份额确认结算---流程如下:

114009_cITn_3110937.png

            6.3.3 份额确认结算合并之份额确认不退款

114245_iXsc_3110937.png

 

    7.接口设计:

        7.1 实名绑卡:

请求路径:/mimosa/depository/client/investor/baseaccount/bindcardapply

            7.1.1 请求

参数

参数名称

类型

参数说明

是否可空

样例

realName

用户名

String(32)

 

非空

48293819282382

certificateNo

身份证号

String(32)

 

非空

410101199109091234

bankName

银行名称

String(32)

 

非空

中国银行

cardNo

银行卡号

String(32)

 

非空

234589987653456

phone

手机号

String(32)

 

非空

15029203949

bankBranchNo

开户行行号

String(32)

 

非空

 

bankBranchName

开户行名称

String(50)

 

非空

 

callbackUrl

页面回跳URL

String(1000)

 

非空

 
            7.1.2 响应

参数

参数名称

类型

参数说明

是否可空

样例

errorCode

错误码

String(32)

 

非空

 

errorMessage

错误描述

String(1000)

 

可空

 

redirectUrl

跳转URL

String(1000)

 

非空

http://ip/xxx.do

            

        7.2 修改交易密码:

请求路径:/mimosa/depository/client/investor/baseaccount/editpaypwd

            7.2.1 请求

参数

参数名称

类型

参数说明

是否可空

样例

callbackUrl

页面回跳URL

String(1000)

 

非空

 
            7.2.2 响应

参数

参数名称

类型

参数说明

是否可空

样例

errorCode

错误码

String(32)

 

非空

 

errorMessage

错误描述

String(1000)

 

可空

 

redirectUrl

跳转URL

String(1000)

 

非空

http://ip/xxx.do

        7.3 重置交易密码:

请求路径:/mimosa/depository/client/investor/baseaccount/forgetpaypwd

            7.3.1 请求

参数

参数名称

类型

参数说明

是否可空

样例

callbackUrl

页面回跳URL

String(1000)

 

非空

 
            7.3.2 响应

参数

参数名称

类型

参数说明

是否可空

样例

errorCode

错误码

String(32)

 

非空

 

errorMessage

错误描述

String(1000)

 

可空

 

redirectUrl

跳转URL

String(1000)

 

非空

http://ip/xxx.do

 

        7.4 申购:

请求路径:/mimosa/depository/client/tradeorder/invest

            7.4.1 请求

参数

参数名称

类型

参数说明

是否可空

样例

productOid

产品oid

String(32)

 

非空

3ef6a51a78e84cb588a78a478a74d008

moneyVolume

投资额度

String(32)

 

非空

3000

cid

渠道cId

String(32)

 

非空

123456

ckey

渠道ckey

String(32)

 

非空

123456

couponId

卡券OId

String(32)

 

非空

3ef6a51a78e84cb588a78a478a74d008

couponType

卡券类型

String(32)

 

非空

 

couponDeductibleAmount

卡券优惠金额

String(32)

 

非空

200

couponAmount

卡券金额

String(32)

 

非空

200

payAmouont

实际支付金额

String(32)

 

非空

2800

            7.4.2 响应

参数

参数名称

类型

参数说明

是否可空

样例

errorCode

错误码

String(32)

 

非空

 

errorMessage

错误描述

String(1000)

 

可空

 

redirectUrl

跳转URL

String(1000)

 

非空

http://ip/xxx.do

      

        7.5 赎回:

请求路径:/mimosa/depository/client/tradeorder/redeem

            7.5.1 请求

参数

参数名称

类型

参数说明

是否可空

样例

productOid

产品oid

String(32)

 

非空

3ef6a51a78e84cb588a78a478a74d008

orderAmount

赎回金额

String(32)

 

非空

3000

cid

渠道cid

String(32)

 

非空

123456

ckey

渠道ckey

String(32)

 

非空

123456

            7.5.2 响应

参数

参数名称

类型

参数说明

是否可空

样例

errorCode

错误码

String(32)

 

非空

 

errorMessage

错误描述

String(1000)

 

可空

 

redirectUrl

跳转URL

String(1000)

 

非空

http://ip/xxx.do

 

        7.6 接收存管跳转地址:

请求路径:/mimosa/depository/boot/callback     

            7.6.1 请求

参数

参数名称

类型

参数说明

是否可空

样例

tradeCode

交易编码

String(32)

 

非空

invest、redeem、deposit、withdraw

key

交易标识

String(32)

 

非空

1h843vgf3234jgffg3234332

            7.6.2 响应

                        HTML

        7.7 后台查询交易模式:

请求路径:GET /mimosa/boot/config/tradeMode

            7.7.1 请求

参数

参数名称

类型

参数说明

是否可空

样例

     
            7.7.2. 响应

参数

参数名称

类型

参数说明

是否可空

样例

errorCode

错误码

String(32)

 

非空

 

errorMessage

错误描述

String(1000)

 

可空

 

tradeMode

交易模式

String(32)

 

非空

standard标准版

depository存管版

        

 

二.存管兼容需求:(存管化需求)

    1.总原则:

        1.1 部署到存管方时,去除不适宜的部分,页面上不显示,具体查看上面文档内容

        1.2 App内充值仅开放:线下充值不在我们的app功能覆盖范围内

        1.3 mimosa后台给发行人充值仅开放:网银充值和线下入金确认,其中网银充值会有待核销金额问题,只影响发行人的可提现金额,普通个人投资者没有这个问题

        1.4 不支持T+0产品,不支持活转定,不支持续投,T+0可通过输入0来控制,活转定和续投只需app端没有入口即可

        1.5 mimosa后台添加的发行人是机构会员,app端注册的投资者天然是个人会员,机构会员不支持投资,个人会员不支持募资,在注册的时候,上传会员类型需要写死,包括绑卡走不同的流程

        1.6 平台子账号涉及的事件归属:

子账户类型

事件

投资冻结子账户

申购;

退款(募集失败);

放款;

充值补单;

还款冻结子账户

赎回;

清盘赎回;

还本付息;

现金分红;

还款;

充值补单;

收益子账户

提现(平台服务费);

转出;

充值补单;

红包子账户

申购(代金券);

退款(代金券);

转出;

充值补单;

佣金子账户

现金红包;

赎回(体验金收益);

还本付息(加息券收益);

返佣;

充值补单;

    2.平台页面更改:(仅存管部署,基线仍保留原有平台逻辑)

            场景:由于存管系统给平台子账户充值都是直接充值,而xx系统给基本账户充值,再转账给备付金;存管系统没有平台基本户,但有投资冻结户,还款冻结户

    3.轧差逻辑变更:(轧差逻辑和流程调整到基线,存管和基线由于账户设置不同,在登账事件上会有不同,面向存管时,登账时间需要单独一套)

 

 

 

 

三.理财前端适应存管需求改造方案:

        1.改造对应的原型:

https://pqdsox.axshare.com/#g=1&p=%E6%88%91%E7%9A%84__%E4%B8%89%E6%96%B9%E5%AD%98%E7%AE%A1_

        2.存管方案中,充值投资前需要开设存管账户,充值提现等交易资金结算通过第三方存管机构完成。

        3.存管开户流程,所需资料,对接方式需要根据三方存管要求进行配置,这里对接民泰银行

        开设民泰银行账户时,存管开户,绑定银行卡,设置交易密码一起完成,原有方案任务之前的准备中的认证绑卡修改为存管开户,平台投资操作流程如下:

094452_dNc4_3110937.png

 

投资者资金资产流转如下图:

095214_V3TM_3110937.png

 

4.存管需求对理财端前端的影响主要体现在:

    4.1 注册:

注册成功后的页面,准备投资按钮调整成跳转存管页面进行开户,引导注册成功用户进行开户操作。

 

    4.2 存管开户:

存管开户有两种对接方式:

        4.2.1 对接三方页面,直接跳转存管页面进行开户(民泰银行)。

        4.2.2 对接存管的数据接口,在平台页面提交开户所有资料。

民泰银行选择第一种对接方式,跳转民泰银行存管开户页面,开户提交后返回平台结果页,开户成功后引导用户充值和风险测评,失败则提示失败原因,并支持用户重复开户。

根据三方存管银行接口或者平台的特殊需求,存管开户分两套模板来适应不同的客户需求,一种是上传身份证照片,一种是不需要上传身份证照片。

            4.2.2.1 需上传身份证照片:存管开户时增加身份证上传页面显示,要求拍照上传身份证正反面照片,上传成功之后保存图片并进入绑卡页面,根据用户已上传身份证件OCR识别出的信息进行回显,姓名允许编辑身份证号不允许编辑

            4.2.2.2 无需上传身份证照片:存管开户时不显示身份证上传页面,身份认证与绑卡一步完成,允许手动输入或图像扫描两种形式录入身份证和银行卡信息,通过相机扫描身份证和银行卡信息时只识别提取信息,不保存图像。

 

    4.3 交易验证:    

        4.3.1 充值、提现、申购、赎回交易流程中,交易密码到三方存管页面进行输入,提交后返回平台页面,根据三方返回验证结果进行处理,验证通过后生成订单并根据订单处理结果则进入结果提示页,验证失败则不生成订单,增加验证失败提示页,并允许用户重新输入交易密码或重新发起交易。

        4.3.2充值不再需要校验短信验证码,取消短信验证码环节,提交充值之后直接跳转至三方存管页面输入交易密码,密码验证通过后充值订单提交成功。

 

    4.4 提现:

        提现提交成功页面,提现到账时间根据对接的第三方存管机构提现到账情况进行显示,如T+0时显示1个工作日内,T+1显示2个工作日内。

 

    4.5 设置:

        我的银行卡一栏显示修改为“存管账户”,未开通存管账户时,显示“去开通”,点击进入存管开户页面;已完成存管开户时,显示“已开通”,点击进入银行卡管理页面,银行卡管理页面显示与平台存管方案一样。

存管账户多卡绑定和解绑卡的需求与平台存管一致,银行卡在解除绑定之后不影响已开通的存管账户,如需投资引导用户至绑卡流程,要求重新绑卡,不需要再走投资前准备流程,充值和提现也一样。

交易密码一栏在未开通存管账户之前默认显示“去设置”,点击进入存管开户页面。存管账户开通之后显示“重置”,点击进入存管银行对应流程页。

 

    4.6 资产统计:

            存管方案中,投资订单的份额确认和结算合并处理,对于投资者来说不存在已份额确认未结算的情况,因此原方案中记录此阶段资金的“在途资金”去掉,赎回、退款、还本付息确认成功后直接增加投资者可用余额;

投资人提现由存管银行进行处理,无需平台审核,不存在提现冻结金额,因此原方案中的“提现冻结金额”去掉,提现提交成功之后直接扣减可用余额。

总资产=可用余额+持有活期+持有定期+申请中资产

 

存管方案APP原型变更:https://pqdsox.axshare.com

转载于:https://my.oschina.net/u/3110937/blog/1633277

这篇关于存管系统小结(改造):的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/288681

相关文章

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

python中getsizeof和asizeof的区别小结

《python中getsizeof和asizeof的区别小结》本文详细的介绍了getsizeof和asizeof的区别,这两个函数都用于获取对象的内存占用大小,它们来自不同的库,下面就来详细的介绍一下... 目录sys.getsizeof (python 内置)pympler.asizeof.asizeof

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资