黑马程序员技术交流社区

标题: 【郑州校区】Java之品优购课程讲义_day18(11) [打印本页]

作者: 谷粒姐姐    时间: 2018-10-31 14:36
标题: 【郑州校区】Java之品优购课程讲义_day18(11)
修改订单状态
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;
}

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







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2