电商第二十天:
    回顾:

    1. 异步回调 非常重要!
      工作流程!
    1. 2. 支付成功之后的后续业务处理!
    2. 3. 拆单业务分析!

    重点:

    1. 实现拆单
    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.    促销!
                    咱不实现    供 > 求