Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx

上传人:b****4 文档编号:6496756 上传时间:2023-05-06 格式:DOCX 页数:11 大小:91.69KB
下载 相关 举报
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第1页
第1页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第2页
第2页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第3页
第3页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第4页
第4页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第5页
第5页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第6页
第6页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第7页
第7页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第8页
第8页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第9页
第9页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第10页
第10页 / 共11页
Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx

《Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx》由会员分享,可在线阅读,更多相关《Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx(11页珍藏版)》请在冰点文库上搜索。

Mifos小额信贷管理系统平台软件架构文档Word文件下载.docx

COSM/OpenMF正式更名Mifos倡议和接收美国税法条款501c3。

2.3.项目相关

项目URL

下载

下载统计Downloadstats

●金融体系集成到一个ATM/POS/卡服务网络,客户可以使用

●金融体系可能与移动支付运营商集成和支持移动货币服务客户(现在/未来小额信贷)。

●一个金融体系可能使用的第三方代理销售其他银行/金融体系的产品/服务

如上面的图表所示,各利益相关者利用业务应用程序执行特定客户或金融体系相关操作。

这些业务应用程序中包含的功能可以以任何方式捆绑打包。

在图中,几个应用程序可以组合成一个应用程序或任何一块代表一个应用程序可以根据需要进一步分解。

该平台是管理信息系统的核心引擎。

它隐藏了很多存在的复杂的金融体系中的管理信息系统所需的业务和技术领域背后的一个相对简单的API。

这个API,使应用程序开发人员按金融体系他们需要的那样进行创新和开发一般或定制的应用程序。

3.功能概览

作为平台的所有功能都通过一个API,该API文档是最好的地方来查看该平台是做什么的详细分解。

看到网上API文档。

https:

//demo.openmf.org/api-docs/apiLive.htm

通过更高的级别上我们看到的功能分为以下几类:

●基础构件

¡

规范

扩展数据表

报表

●用户管理

用户

角色

权限

●机构模型

机构

职员

货币

●产品配置

手续费

贷款产品

存款产品

●客户资料

了解你的客户

●投资组合管理

贷款账户

存款帐户

顾客/团体

●总帐账户管理

会计科目表

总帐

4.技术

∙Java7:

∙JAX-RS1.0:

usingJersey(1.17.x)

∙JSONusingGoogleGSON

∙SpringI/OPlatform:

http:

//spring.io/platform

oSpringFramework

oSpringSecurity

oSpringData(JPA)backedbyHibernate

∙MySQL:

4.1.主要的技术

4.1.1.RESTfulAPI

该平台通过practically-RESTfulAPI公开其所有功能,通信使用JSON。

我们使用术语practically-RESTful为了使其清楚我们不是去依从完整的REST,但仍然保持重要的基于REST的属性:

●无状态:

平台维护没有会话或基于会话的状态。

这样做的结果是轻松扩展能力水平。

●面向资源:

API是集中在一组资源通过使用HTTP的词汇和约定例如GET、PUT、POST、DELETE,HTTP状态代码。

以达到为客户端提供一个简单的和一致的API。

看到网上API文档的更多细节。

4.1.2.多租户技术

mifos平台开发支持多租户设计的核心。

这意味着它是易于使用的软件即服务(SaaS)的平台型产品,因为它是为本地安装。

平台使用一个方法隔离金融体系数据库/数据/模式(见单独的数据库和共享数据库,单独的模式

4.1.3.可扩展

同时每个租户将有一组核心表,表平台可以扩展以不同的方式为每个租户通过使用数据表的功能。

4.1.4.读写分离

我们分离写命令(修改数据)和查询(读取数据)。

为什么?

有很多原因选择这种方法,目前不是一个尝试全面的CQRS。

目前的主要优点是:

●状态改变命令持续提供审计的状态改变。

●用于支持maker-checker的一般方法。

●状态改变命令使用面向对象模式(因此ORM),而查询可以保持为数据模式。

4.1.5.四眼原则

也称为四眼原则。

使应用程序能够支持maker-checker风格工作流过程。

命令,通过验证将被持久化。

Maker-checker在细粒度级别可以启用/禁用任何状态变化的API。

4.1.6.良好的权限控制

细粒度的权限与每个API。

管理员有细粒度的控制权什么角色或用户访问权。

5.代码打包

意图是使平台代码以垂直切分的方式(而不是层)打包。

源代码在这里mifosng-provider/src/main/java/org/mifosplatform

org.mifosplatform.

∙accounting

∙useradministration

∙infrastructure

∙portfolio

ocharge

oclient

ofund

oloanaccount

在每一个垂直部分是一些常见的包装结构:

org.mifosplatform.useradministration.

∙api-XXXApiResource.java-RESTapi实现文件

∙handler-XXXCommandHandler.java-具体处理程序调用

∙service-包含读+写服务功能区

∙domain-OO概念功能区域

∙data-数据区域的概念

∙serialization-为功能区域转换APIJSON

6.设计概览

注意:

通过实现平台的代码来处理命令处理程序同时支持maker-checker和授权检查目前有点复杂的,一个领域类针对性进行清理,让新平台的开发人员更容易入门。

同时以下内容用于解释其工作原理。

考虑上图所示的例子为用户资源。

1.查询:

GET/用户

2.HTTPSAPI:

retrieveAll方法org.mifosplatform.useradministration.api.UsersApiResource调用

3.UsersApiResource.retrieveAll:

检查用户访问该资源的权限数据

4.UsersApiResource.retrieveAll:

使用'

readservice'

来获取所有用户数据('

执行简单的SQL使用JDBC查询数据库)

5.UsersApiResource.retrieveAll:

返回的数据转换成JSON响应

命令:

POST/users(注:

数据在请求body中)

HTTPSAPI:

create方法在org.mifosplatform.useradministration.api.UsersApiResource中被调用

@POST

@Consumes({MediaType.APPLICATION_JSON})

@Produces({MediaType.APPLICATION_JSON})

publicStringcreate(finalStringapiRequestBodyAsJson){

finalCommandWrappercommandRequest=newCommandWrapperBuilder()//

.createUser()//

.withJson(apiRequestBodyAsJson)//

.build();

finalCommandProcessingResultresult=mandsSourceWritePlatformService.logCommandSource(commandRequest);

returnthis.toApiJsonSerializer.serialize(result);

}

描述:

创建一个CommandWrapper对象表示这个createuser命令和JSON请求主体。

交给PortfolioCommandSourceWritePlatformService.logCommandSource进行处理。

@Override

publicCommandProcessingResultlogCommandSource(finalCommandWrapperwrapper){

booleanisApprovedByChecker=false;

//checkifisupdateofownaccountdetails

if(wrapper.isUpdateOfOwnUserDetails(this.context.authenticatedUser().getId())){

//thenallowthisoperationtoproceed.

//makercheckerdoesntmeananythinghere.

isApprovedByChecker=true;

//settotrueincasepermissionshave

//beenmaker-checkerenabledby

//accident.

}else{

//ifnotuserchangingtheirowndetails-checkuserhas

//permissiontoperformspecifictask.

this.context.authenticatedUser().validateHasPermissionTo(wrapper.getTaskPermissionName());

}

validateIsUpdateAllowed();

finalStringjson=wrapper.getJson();

CommandProcessingResultresult=null;

try{

finalJsonElementparsedCommand=this.fromApiJsonHelper.parse(json);

finalJsonCommandcommand=JsonCommand.from(json,parsedCommand,this.fromApiJsonHelper,wrapper.getEntityName(),

wrapper.getEntityId(),wrapper.getSubentityId(),wrapper.getGroupId(),wrapper.getClientId(),wrapper.getLoanId(),

wrapper.getSavingsId(),wrapper.getCodeId(),wrapper.getSupportedEntityType(),wrapper.getSupportedEntityId(),

wrapper.getTransactionId(),wrapper.getHref(),wrapper.getProductId());

result=this.processAndLogCommandService.processAndLogCommand(wrapper,command,isApprovedByChecker);

}catch(finalRollbackTransactionAsCommandIsNotApprovedByCheckerExceptione){

result=this.processAndLogCommandService.logCommand(e.getCommandSourceResult());

returnresult;

检查用户允许此操作。

如果好,)解析json请求的身体,b)创建一个JsonCommand对象包装命令细节,c)使用CommandProcessingService处理命令。

    

如果出现RollbackTransactionAsCommandIsNotApprovedByCheckerException。

最初的事务将被打掉,我们只有日志条目的命令审计表中设置其状态为“等待”。

@Transactional

publicCommandProcessingResultprocessAndLogCommand(finalCommandWrapperwrapper,finalJsonCommandcommand,finalbooleanisApprovedByChecker){

finalbooleanrollbackTransaction=this.configurationDomainService.isMakerCheckerEnabledForTask(wrapper.taskPermissionName())

&

&

!

isApprovedByChecker;

finalNewCommandSourceHandlerhandler=findCommandHandler(wrapper);

finalCommandProcessingResultresult=handler.processCommand(command);

finalAppUsermaker=this.context.authenticatedUser();

CommandSourcecommandSourceResult=null;

if(mandId()!

=null){

commandSourceResult=mandSourceRepository.findOne(mandId());

commandSourceResult.markAsChecked(maker,DateTime.now());

commandSourceResult=CommandSource.fullEntryFrom(wrapper,command,maker);

commandSourceResult.updateResourceId(result.resourceId());

commandSourceResult.updateForAudit(result.getOfficeId(),result.getGroupId(),result.getClientId(),result.getLoanId(),

result.getSavingsId(),result.getProductId());

StringchangesOnlyJson=null;

if(result.hasChanges()){

changesOnlyJson=this.toApiJsonSerializer.serializeResult(result.getChanges());

commandSourceResult.updateJsonTo(changesOnlyJson);

if(!

result.hasChanges()&

wrapper.isUpdateOperation()&

wrapper.isUpdateDatatable()){

commandSourceResult.updateJsonTo(null);

if(commandSourceResult.hasJson()){

mandSourceRepository.save(commandSourceResult);

if(rollbackTransaction){thrownewRollbackTransactionAsCommandIsNotApprovedByCheckerException(commandSourceResult);

1.检查如果maker-checker配置支持这一行动。

如果是的,这不是一个“检查”批准的命令——回滚。

最后我们回滚为了测试如果命令将“域验证”需要提交数据库进行全面检查。

2.findCommandHandler——找到正确的Hanlder处理此命令。

3.过程命令使用处理程序(在事务作用域)。

4.CommandSource对象创建/更新日志“m_portfolio_command_source”表的所有细节。

5.在更新场景中,我们看看那里真的任何更改/更新。

如果是只存储在审计日志JSON的变化。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2