虚拟电商-话费充值业务(一)话费充值业务梳理

本系列主要介绍话费充值相关业务以及开发。

一、话费充值业务梳理

1.1.话费充值业务流程

电商首页全部商品分类下选择话费充值,来到充值信息填写页面,填写手机号并且选择充值金额,提交。此时会产生充值订单
并且来到支付确认页面,此时选择支付方式完成充值。充值成功后就可以查看我们的订单。

下图是整个话费充值的业务流程:

在这里插入图片描述

首先选择话费充值,填写好充值信息之后点击提交订单。这个时候就会去创建一个充值的订单 。接下来就为订单完成支付,这是要对接支付系统。完成支付后大家要注意的是,此时的订单状态不是充值成功的 状态,而只是充值处理中的状态。订单状态什么时候修改为充值成功呢?

这个应该等到第三方的充值平台 帮我们完成充值之后 ,回调我们的系统。这个时候我们才将 订单状态修改为充值成功的这么一个状态。所以支付完成订单状态是充值处理中的状态。支付完成后应该通知供应商对接模块去和供应商对接,通知的方式我们采用异步的方式通知。供应商对接模块接收到支付成功通知消息之后,就要和供应商对接 ,也就是去调用供应商平台也就是第三方充值平台的充值接口。

调用第三方充值平台的充值接口之后,第三方充值平台供应商就会帮我们去完成充值。如果他帮我们完成充值之后,就会回调我们的系统,我们在进行订单状态的修改。

当然如果这个过程中产生了异常,有很多种情况,比如说我们的平台在供应商平台余额不足了。如果余额不足了供应商接口的平台就不让我们调用了。这个时候会有一个业务逻辑:供应商轮转的业务逻辑。有可能我们平台合作的供应商不止一家,在这家余额不足不让我们调用他的接口,我们还可以轮转到下一家平台。

第二种逻辑:如果我们在调用供应商接口的时候产生了延迟,也就是说产生了网络故障。网络故障之后我们会添加一个延迟任务,比如果一分钟后重试。除此之外,我们调用第三方平台的接口的时候 ,如果它给我们返回充值失败,也可以做一个充值失败之后,一分钟之后的重试任务。当然重试任务不可能一直的重试下去,我们会做一个重试次数的阈值的设定值。如果超过阈值,则判定订单是失败的。这是业务逻辑的介绍。

二、充吧工程模块介绍

充吧工程模块介绍及调用关系
项目模块介绍:
在这里插入图片描述

chongba_recharge_web:话费服务工程,包含了页面,生成订单mock,支付mock,

chongba_recharge_trade:订单追踪模块mock,只包含操作订单的Mapper和订单实体

chongba_recharge_mock:供应商模块mock,模拟供应商系统

chongba_recharge_supplier:对接供应商下单模块 ,负责和各个供应商对接

服务之间的调用关系为:

在这里插入图片描述

虚拟业务最大技术特点和对接过程中由于网络,双方系统各种问题,会有延迟,重试,及最后订单同步成功失败等一些列问题,所以充吧项目在话费充值业务这块主要实现了

1:接收充值成功的消息然后去和供应商对接

2:对接失败进行重试,并且限制了重试次数

3:平台余额不足进行供应商的轮转

4:网络异常进行重试

5:对接成功后修改订单状态

三、充吧mock模块准备

3.1.工程导入

步骤1:资料/话费服务模块导入,将该目录下的三个工程模块拷贝到当前项目父工程模块下,

步骤2:在chongba_parent的pom文件中找到,在其中添加两个模块,配置如下

<module>chongba_recharge_trade</module>
<module>chongba_recharge_web</module>
<module>chongba_recharge_mock</module>

步骤3:刷新父工程,使用maven的清理命令清理父工程

步骤4:执行订单数据库脚本,创建订单数据库及表

DROP database if exists `chongba_order_trade`;
CREATE DATABASE `chongba_order_trade` DEFAULT CHARACTER SET utf8;
USE `chongba_order_trade`;
CREATE TABLE `order_trade` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '相当于流水号',
  `gmt_create` datetime DEFAULT NULL,
  `gmt_modified` datetime DEFAULT NULL,
  `order_status` tinyint(3) DEFAULT NULL COMMENT ' 1创建 处理中 2 成功 3 失败 9 未确认',
  `user_id` bigint(20) DEFAULT NULL COMMENT '下游用户ID',
  `category_id` tinyint(3) DEFAULT NULL COMMENT '商品类别(1充值,2兑换)',
  `brand_id` varchar(50) DEFAULT NULL COMMENT '商品编号',
  `sales_price` decimal(11,2) DEFAULT NULL COMMENT '销售价格',
  `face_price` double(20,0) DEFAULT NULL COMMENT '面值',
  `cost_price` double(11,0) DEFAULT NULL COMMENT '成本价',
  `mobile` char(11) DEFAULT NULL COMMENT '手机',
  `trade_no` bigint(20) DEFAULT NULL COMMENT '交易订单',
  `order_no` varchar(100) DEFAULT NULL COMMENT '订单号',
  `order_time` datetime DEFAULT NULL COMMENT '订单时间',
  PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

四、充吧话费web工程介绍

充吧话费web工程介绍和业务逻辑实现:

步骤1:查看配置文件,找到启动类:WebApplication并启动,访问:http://localhost:191/

步骤2:访问首先到达首页

@RequestMapping(value = "/")
public ModelAndView index() {
    ModelAndView view =new ModelAndView("index");
    return view;
}

步骤3:首页点击:充值,来到选择充值信息页面:recharge.html,页面上点击提交执行javascript代码进行前端手机号校验,校验通过后发送请求创建订单

var href="/crtorder?mobile="+phone+"&pamt="+$("#price").html()+"&factPrice="+factPrice+"&brandId=789&categoryId=111";

携带参数进行订单的生成,这里关于品牌,分类等相关信息直接是写成了固定的,

步骤4:在chongba_recharge_web工程中的OrderController中有方法createRechargeOrder模拟订单的创建,真实情况是需要对接订单系统生成订单,接收订单系统(服务)返回的订单信息。

/**
     * 充值操作(充值订单)
     * @param RechargeRequest 订单请求信息
     * @return
     */
@RequestMapping(value = "/crtorder")
public ModelAndView createRechargeOrder(RechargeRequest orRequest) {
    Result<RechargeResponse> result = null;
    ModelAndView view = null;
    try {
        //对接订单系统
        result = orderProcessService.recharge(orRequest);
    } catch (Exception e) {
        e.printStackTrace();
        view =new ModelAndView("recharge");
    }
    if(result.getCode()==200) {
        //成功
        view =new ModelAndView("pay");
        view.addObject("result",result);
    }else {
        //失败
        view =new ModelAndView("recharge");
    }
    return view;
}

步骤5:订单创建成功后,跳转到:pay.html,并显示订单相关数据比如订单号,在pay.html页面中,选择支付方式,点击立即支付要完成支付,在我们chongba_recharge_web模块中的OrderController中模拟了一个对接支付的方法:payorder,支付成功后通知与供应商对接的模块chongba_recharge_supplier进行对接供应商下单操作

<script th:inline="javascript">
    var orderNo = [[${result.data.orderNo}]];
function pay(){
    var href="/payorder?orderNo="+orderNo;
    $("#paybutton").attr('href', href);
    return true;
}
</script>
/**
* 选择订单支付方式
* @return
*/
@RequestMapping(value = "/payorder")
public ModelAndView payorder(String orderNo) {
    OrderTrade orderTrade = null;
    try {
        //根据订单号查询待支付订单
        orderTrade = orderProcessService.queryOrderByNo(orderNo);
        // 调用支付服务完成支付,接收支付结果//支付后通知供应商对接模块----异步通知
        RechargeRequest request =new RechargeRequest();
        request.setOrderNo(orderNo);
        request.setMobile(orderTrade.getMobile());
        request.setPamt(orderTrade.getSalesPrice());
​
        rocketMQTemplate.convertAndSend("pay", request);
    } catch (Exception e) {
        ModelAndView view =new ModelAndView("payfail");
        return view;
    }
    ModelAndView view =new ModelAndView("paysuccess");
    view.addObject("orderTrade", orderTrade);
    return view;
}

通知对接供应商下单模块chongba_recharge_supplier我们使用的是异步通知的方式,使用rocketMQ,进行系统解耦和。

我们充吧项目的核心业务就从对接供应商下单模块chongba_recharge_supplier接收异步通知开始!,由chongba_recharge_supplier模块去对接第三方的供应商系统!

五、充吧供应商模块介绍

充吧项目供应商对接模块chongba_recharge_supplier就是用于与其他外部供应商系统做对接的,但是由于一系列问题我们并未与真实的第三方话费供应商系统取得商业合作,因此我们只能模拟一个外部的供应商系统模块是:chongba_recharge_mock

1:打开chongba_recharge_mock模块,查看配置,与其他配置不一样的是配置了一个回调地址:notify-url

其作用就是用于第三方系统的回调,充吧系统调用第三方供应商系统进行充值下单,第三方供应商系统下单后进行话费充值,充值成功后回调我们系统进行订单状态等的修改

2:模拟了两个供应商:MockJisuRechargeController,MockJuheRechargeController,在实际的企业业务中一般都会接多个供应商,这样当某一供应商系统调不通或者我们系统在对方平台余额不足时还可以轮转到下一个供应商,保证业务不会中断。

3:MockJuheRechargeController中模拟了聚合平台系统,模拟了一种我们系统在聚合平台余额不足的情况,是为了说明充吧系统的轮转业务

4:MockJisuRechargeController中模拟了极速平台系统,模拟了一种正常充值成功的情况

5:在BaseController中的rechargeNotify方法模拟的是充值成功后回调充吧系统进行订单状态的修改等相关操作

充吧系统模拟的供应商:

聚合:https://www.juhe.cn/docs/api/id/85

内容概要:本文档《ccnp_300-430.pdf》涵盖了与Cisco无线网络配置相关的多个选择题及其答案解析。文档详细探讨了FlexConnect AP在不同模式下的行为、AP模式和子模式的选择、客户端特征配置、图像传输优化、Cisco OEAP配置、QoS设置、多播配置、安全措施(如入侵保护、恶意AP检测)、位置服务配置以及BYOD策略实施等内容。文档不仅提供了具体的配置命令和选项,还解释了每种配置背后的逻辑和技术原理。 适合人群:具备定网络基础知识,特别是对Cisco无线网络设备有定了解的技术人员,包括但不限于网络管理员、无线网络工程师和CCNP认证考生。 使用场景及目标: ① 为无线网络工程师提供实际操作指导,确保在不同场景下正确配置Cisco无线设备; ② 帮助CCNP认证考生复习并掌握相关知识点; ③ 协助IT管理员解决日常无线网络管理中的常见问题,如连接不稳定、性能不佳或安全性问题; ④ 支持企业IT部门制定和实施BYOD策略,确保员工个人设备接入公司网络的安全性和效率。 阅读建议:由于文档内容较为专业且技术性强,建议读者首先熟悉Cisco无线网络的基本概念和术语。在阅读过程中,应结合具体的工作环境和需求进行理解,并尝试将所学知识应用到实际工作中。对于不熟悉的术语或配置命令,可以通过查阅官方文档或在线资源进步学习。此外,通过模拟环境练习配置也是巩固知识的有效方法。
内容概要:本文详细介绍了如何利用C语言在Simulink环境中构建逆变器的重复控制系统,旨在将逆变器的总谐波畸变率(THD)降低至0.47%。文中首先展示了核心的C语言结构体和函数,如RepetitiveController结构体用于封装延迟存储器、零相位滤波器和低通滤波器,repetitive_control函数则实现了核心算法。接着,文章解释了离散化处理的方法,包括主电路和控制部分的不同步长运行机制,以及多速率仿真的应用。此外,还讨论了陷波器的具体实现及其参数调整,强调了双线性变换在滤波器设计中的重要性。最后,文章提到了代码的高效移植性,指出通过这种方式可以在仿真阶段就为后续的实际硬件部署做好准备,大大减少了调试时间和复杂度。 适合人群:从事电力电子领域的工程师和技术人员,尤其是对逆变器控制和信号处理有定了解的人群。 使用场景及目标:适用于需要精确控制逆变器输出质量的应用场合,如光伏逆变器、UPS电源等。主要目标是通过高效的算法设计和优化,确保逆变器输出的THD达到极低水平,同时提高代码的可移植性和易维护性。 其他说明:本文不仅提供了详细的理论背景和技术细节,还分享了许多实践经验,如环形缓冲区的使用、陷波器的参数选择等,对于理解和实施逆变器控制具有很高的参考价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值