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 實現該方法.
這個方法主要做三件事:
- 修改支付日誌狀態
- 修改關聯的訂單的狀態
- 清除快取中的支付日誌物件
@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;
}
支付日誌顯示(學員實現)
需求:在運營商後臺中,顯示支付日誌列表,實現按日期、狀態、使用者進行查詢。
學員實現。