电商第二十天:
回顾:
- 异步回调 非常重要!
工作流程!
2. 支付成功之后的后续业务处理!
3. 拆单业务分析!
重点:
- 实现拆单
2. 完善取消订单业务
3. 开秒杀
实现拆单功能:
由库存系统发起,订单实现业务!
http://localhost:8204/api/order/orderSplit 在订单中!
实现省略:
测试:
1. 将商品放入不同的仓库!
2. 注意使用内存穿透工具!
取消订单业务补充:
1. 在提交订单之后,有一个取消订单操作!
2. 看是否有交易记录 ,支付的交易也需要关闭!
在取消订单的业务中,发送消息给payment。
应该有交易记录,则关闭,没有需要关闭么? 不需要!
这个交易记录什么时候产生? 点击扫描支付!
暂无:
3. 关闭支付宝交易记录:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayTradeCloseRequest request = new AlipayTradeCloseRequest();
JSONObject bizContent = new JSONObject();
bizContent.put("trade_no", "2013112611001004680073956707");
request.setBizContent(bizContent.toString());
AlipayTradeCloseResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
测试:
case 1:
用户没有支付时,能否关闭交易记录?
a. 下了订单,没有点击扫码支付 orderInfo
b. 下了订单,点击了扫描支付 orderInfo paymentInfo
c. 下了订单,点击了扫描支付,没有扫描二维码 orderInfo paymentInfo
提示:交易不存在!
d. 下了订单,点击了扫描支付,扫描了二维码 orderInfo paymentInfo
提示:交易可以关闭!
case 2:
用户支付成功了,能否关闭交易记录?
提示:不支持此操作! 不能关闭交易!
总结:
只有扫了二维码,不付款的情况下才能关闭交易记录!
只有扫描了二维码,在支付宝中才有交易记录!
4. 你是如何知道,用户到底是扫了,还是没有扫?
调用api 接口查询交易记录!
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", "20150320010101001");
//bizContent.put("trade_no", "2014112611001004680073956707");
request.setBizContent(bizContent.toString());
AlipayTradeQueryResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
case 1:
下了订单,点击了扫描支付,没有扫描二维码
case 2:
下了订单,点击了扫描支付,扫描二维码
结论:
只有扫描了二维码,在支付宝中才有交易记录!
5. 完善取消订单业务!
需要关闭的表有 : orderInfo paymentInfo 关闭交易:支付宝!
细节一点:判断
粗暴一点:不用判断,统统关闭!
防止用户在过期时间的那一瞬间付款!
测试:
重启order,payment!
订单的过期时间为 1 天!
expireTime 1天;
1. 在还差1分钟过期的时候,点击支付生成二维码!
二维码有效期 10 分钟!
2. 问这样是否能支付成功?
a. 有可能支付成功! 但是订单,本地交易记录已被关闭!
二维码过期时间:可以定义为:订单过期时间!
b. 延迟过期订单的时候: 不太行!
先获取订单绝对超时间:
在发送消息的话,不太适合了! 消息重复发送了!
c. 订单的过期时间如果小于二维码的失效时间!
设置二维码的消失时间为订单的过期时间!
过期订单剩余 20
设置二维码: 10 分钟
有关于秒杀!
秒杀业务介绍:
1. 饥饿营销!
功能实现! 供 < 求
抢购!
限制: 库存, 时间, 购买数量
需要分析:
实现思路:
1. 先准备秒杀商品!
insert into mysql!
2. 夜晚:1点钟做一个定时任务! 创建一个秒杀模块监听消息 ! 将数据库中的商品,导入到缓存中!
service-task:
任务: 发送一个消息到队列!
service-activity
任务: 监听消息,并将数据导入到缓存! 将商品的秒杀数量放入缓存! 发布一个状态位!
状态位:skuId:0 ; 0 表示商品没有库存了。 skuId:1 表示可以秒杀!
既然有商品数量了,为什么还需要状态位?
秒杀可以集群部署! 同步商品的数量!
3. 展示秒杀首页列表!秒杀详情!
查询redis!
4. 点击立即抢购!
抢购的不商品!而是资格!
生成下单码! 验证,防止用户非法秒杀!
流程:
列表:
详情: 使用一种方式生成一个下单码:使用用户Id
开始秒杀:https://cart.jd.com/addToCart.html?rcd=1&pid=100021883418&pc=1&eb=1&rid=1641542509396&em=
5. 页面提示是否抢购信息!
定时器:每隔3秒钟查看一下用户秒杀的状态!
....
mq:排队!
6. 填写订单数据!
将秒杀数据插入到orderInfo!
7. 支付!
调用接口就可以了!
2. 促销!
咱不实现 供 > 求