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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

修改订单状态
5.5.1 服务接口层
在 pinyougou-order-interface 的 OrderService.java 新增方法定义
[AppleScript] 纯文本查看 复制代码
/** 
  * 修改订单状态 
  * @param out_trade_no 支付订单号 
  * @param transaction_id 微信返回的交易流水号 
  */ 
 public void updateOrderStatus(String out_trade_no,String transaction_id); 

服务实现层
在 pinyougou-order-service 工程 OrderServiceImpl.java 实现该方法.
这个方法主要做三件事:
1. 修改支付日志状态
2. 修改关联的订单的状态
3. 清除缓存中的支付日志对象
[AppleScript] 纯文本查看 复制代码
@Override 
public void updateOrderStatus(String out_trade_no, String transaction_id) { 
  //1.修改支付日志状态 
  TbPayLog payLog = payLogMapper.selectByPrimaryKey(out_trade_no); 
  payLog.setPayTime(new Date()); 
  payLog.setTradeState("1");//已支付 
  payLog.setTransactionId(transaction_id);//交易号 
  payLogMapper.updateByPrimaryKey(payLog);   
  //2.修改订单状态 
  String orderList = payLog.getOrderList();//获取订单号列表 
  String[] orderIds = orderList.split(",");//获取订单号数组 
   
  for(String orderId:orderIds){ 
   TbOrder order = 
orderMapper.selectByPrimaryKey( Long.parseLong(orderId) ); 
   if(order!=null){ 
    order.setStatus("2");//已付款 
    orderMapper.updateByPrimaryKey(order); 
   }    
  } 
  //清除 redis 缓存数据   
  redisTemplate.boundHashOps("payLog").delete(payLog.getUserId()); 
 } 

控制层
修改 pinyougou-cart-web 的 PayController.java。在微信支付接口有成功返回状态时,调用修 改状态的方法
[AppleScript] 纯文本查看 复制代码
/** 
  * 查询支付状态 
  * @param out_trade_no 
  * @return 
  */ 
 @RequestMapping("/queryPayStatus") 
 public Result queryPayStatus(String out_trade_no){ 
  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, "支付成功"); 
    //修改订单状态 
    orderService.updateOrderStatus(out_trade_no, 
map.get("transaction_id")); 
break; 
   }    
   try { 
    Thread.sleep(3000);//间隔三秒 
   } catch (InterruptedException e) { 
    e.printStackTrace(); 
   }  
   //为了不让循环无休止地运行,我们定义一个循环变量,如果这个变量超过了这个值则退
出循环,设置时间为 5 分钟 
       ......    
  } 
  return result; 
 }

支付日志显示(学员实现)
需求:在运营商后台中,显示支付日志列表,实现按日期、状态、用户进行查询。
学员实现。


0 个回复

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