JAVA实操项目:转账接口设计

国内新闻 浏览(1313)

前锋JAVA发展学院我想昨天分享

image.php?url=0Mt0h22BaA

在项目中,通常会支付相关业务,并且付款肯定会有转移操作。转移被认为是一个相对重要的部分。该界面的设计能力也大致反映了一个人的水平。

尝试在java中编写传输接口。主要业务参数包括转账,转账,转账,完成账户转账和转账。该服务必须确保在处理资金时不转移账户余额。将透支,金额准确计算。

设计

首先,系统中通常没有那么多参数。通常,请求参数将具有一些公共信息,例如请求源(请求ip和系统),请求序列号,请求时间和其他信息。一些非法请求在网关上被截获。

如果有返回结果,它通常包含处理结果,响应时间,处理状态,并且通常会返回原始请求信息。

查看是否存在强一致性要求,如果没有强一致性要求,是否及时返回结果。根据要求,如果你不需要实时返回结果,你可以不断在后端重试,知道有最终结果,并且有一个强烈的一致性要求,你需要做一些特殊的处理,如果不保证最终的一致性。

幂等设计,唯一的请求序列号只能对应一次付款,防止重复扣除

它可能涉及其他一些远程服务,做一些操作,这里我们需要与其他系统协商处理,当然这个界面的输入也应该说是会调用这个系统的人

标题说应该判断余额,并且应该在内部判断用户的资金是否足够。从数据库级别来看,用户余额不能小于0.通过BigDecimal准确计算金额。

编写代码时注意一些规范

内部注意一些限制,无论账户是否合法

代码

我的代码中没有幂等性。也许代码有一些其他问题,如果你没有考虑过它们,欢迎指出

打包我。爱喝。演示;

导入组织。弹簧框架。交易。注解。事务;

导入组织。弹簧框架。 UTIL。 StringUtils的;

导入java。数学。 BigDecimal的;

导入java.util.HashMap;

公共课第一个问题{

Private String checkAmoutis足够RemoteService=可以验证用户余额是否足够的远程服务;

//我直接在这里编写接口,所以我没有定义类的名称。如有必要,我还可以定义类的名称。

//因为它不是界面,所以我先将方法留空。

无效转移(

字符串来源帐户,

String destAccout,

String amout

){

//假设我们可以获得传出帐户的余额(sourceAccout)

//源可以是:远程调用服务,直接从数据库获取,简而言之,您可以获得当前帐户的余额

//1.首先检查参数,这是否合法?

//如果有异常,请定义处理异常的位置

checkParam(sourceAccount,destAccout,amout);

//您还可以检查帐户是否存在

//2.验证已转移帐户的余额是否足够。在此步骤中,查看我们是否有权限,

//如果我们无权获取用户的余额信息,我们需要致电授权部门进行判断

//我假设我们无权了解用户的余额,我们需要判断

//调用远程参数,此输入需要与其他系统协商

HashMapmap=new HashMap;

Map.put(帐户,sourceAccount);

Map.put(量,大写金额);

结果result=callRemoteService(checkAmoutisEnoughRemoteService,map);

//处理结果(

//要确定用户余额是否足够,我不会写出判断逻辑

//3.转移帐户,代码可在此处运行,用户帐户正常,余额正常

//至于风险控制,用户是否有安全风险,请参阅要求和其他系统

//在这里查看是否有全局事务要控制,如果数据的一致性非常高,那么就可以进行全局事务控制

//如果数据的一致性不高,那么我们可以先做,然后重写计划任务,或者使用异步通知。

//甚至可以锁定

doTransfer(sourceAccount,destAccout,大写金额);

//转到此步骤并假设钱已经改变。看看您是否想要通知其他业务系统。

sendNotifytoOthers;

}

私人空间sendNotifytoOthers {

}