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

支付成功保存订单
5.3.1 后端代码
(1)修改 pinyougou-seckill-interface 的 SeckillOrderService.java,定义方法
[mw_shl_code=applescript,true]/**
  * 支付成功保存订单
  * @param userId
  * @param orderId
*/
public void saveOrderFromRedisToDb(String userId,Long orderId,String transactionId); [/mw_shl_code]

(2)在 pinyougou-seckill-service 的 SeckillOrderServiceImpl.java 实现该方法
[mw_shl_code=applescript,true]@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 中清除
}
[/mw_shl_code]

(3)修改 pinyougou-seckill-web 的 PayController.java,增加查询的方法
[mw_shl_code=applescript,true]/**
  * 查询支付状态
  * @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; [/mw_shl_code]

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


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