Java之品优购课程讲义_day19(8)

支付成功保存订单
5.3.1 后端代码
(1)修改 pinyougou-seckill-interface 的 SeckillOrderService.java,定义方法

/**
  * 支付成功保存订单 
  * @param userId 
  * @param orderId 
*/
public void saveOrderFromRedisToDb(String userId,Long orderId,String transactionId);

(2)在 pinyougou-seckill-service 的 SeckillOrderServiceImpl.java 实现该方法 

@Override 
 public void saveOrderFromRedisToDb(String userId, Long orderId, String 
transactionId) {
  System.out.println("saveOrderFromRedisToDb:"+userId); 
  //根据用户 ID 查询日志 
  TbSeckillOrder seckillOrder = (TbSeckillOrder)
redisTemplate.boundHashOps("seckillOrder").get(userId); 
  if(seckillOrder==null){
   throw new RuntimeException("订单不存在"); 
  }
  //如果与传递过来的订单号不符 
  if(seckillOrder.getId().longValue()!=orderId.longValue()){
   throw new RuntimeException("订单不相符"); 
  }  
  seckillOrder.setTransactionId(transactionId);//交易流水号 
  seckillOrder.setPayTime(new Date());//支付时间 
  seckillOrder.setStatus("1");//状态 
  seckillOrderMapper.insert(seckillOrder);//保存到数据库 
  redisTemplate.boundHashOps("seckillOrder").delete(userId);//从 redis 中清除 
 }

(3)修改 pinyougou-seckill-web 的 PayController.java,增加查询的方法 

/**
  * 查询支付状态 
  * @param out_trade_no 
  * @return
  */
 @RequestMapping("/queryPayStatus")
 public Result queryPayStatus(String out_trade_no){
  //获取当前用户   
  String 
userId=SecurityContextHolder.getContext().getAuthentication().getName(); 
  Result result=null;   
  int x=0;   
  while(true){
   //调用查询接口 
   Map<String,String> map = weixinPayService.queryPayStatus(out_trade_no); 
   if(map==null){//出错    
    result=new  Result(false, "支付出错"); 
    break; 
   }   
   if(map.get("trade_state").equals("SUCCESS")){//如果成功     
    result=new  Result(true, "支付成功");     
    seckillOrderService.saveOrderFromRedisToDb(userId,
Long.valueOf(out_trade_no), map.get("transaction_id")); 
    break;

}   
  try {
   Thread.sleep(3000);//间隔三秒 
  } catch (InterruptedException e) {
   e.printStackTrace(); 
  } 
  x++;//设置超时时间为 5 分钟 
  if(x>100){
   result=new  Result(false, "二维码超时"); 
   break; 
  }   
 }
 return result; 
}

猜你喜欢

转载自blog.51cto.com/13517854/2312280