A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

支付成功保存订单
5.3.1 后端代码
(1)修改 pinyougou-seckill-interface 的 SeckillOrderService.java,定义方法
[AppleScript] 纯文本查看 复制代码
/** 
  * 支付成功保存订单 
  * @param userId 
  * @param orderId 
*/ 
public void saveOrderFromRedisToDb(String userId,Long orderId,String transactionId); 

(2)在 pinyougou-seckill-service 的 SeckillOrderServiceImpl.java 实现该方法
[AppleScript] 纯文本查看 复制代码
@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,增加查询的方法
[AppleScript] 纯文本查看 复制代码
/** 
  * 查询支付状态 
  * @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; 

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


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马