Java之品优购课程讲义_day18(11)

修改订单状态 
5.5.1 服务接口层

在 pinyougou-order-interface 的 OrderService.java 新增方法定义 

/**
  * 修改订单状态 
  * @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. 清除缓存中的支付日志对象
     
@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。在微信支付接口有成功返回状态时,调用修 改状态的方法

/**

查询支付状态
@param out_trade_no
@returnbr/>*/
@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; 
}
  •  

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值