品优购-支付日志 5.1 需求分析 我们现在系统还有两个问题需要解决: (1)系统中无法查询到支付记录 (2)支付后订单状态没有改变 我们现在就来解决这两个问题。 实现思路: (1)在用户下订单时,判断如果为微信支付,就想支付日志表添加一条记录,信息包括支 付总金额、订单 ID(多个)、用户 ID 、下单时间等信息,支付状态为 0(未支付) (2)生成的支付日志对象放入 redis 中,以用户 ID 作为 key,这样在生成支付二维码时就可 以从 redis 中提取支付日志对象中的金额和订单号。 (3)当用户支付成功后,修改支付日志的支付状态为 1(已支付),并记录微信传递给我 们的交易流水号。根据订单 ID(多个)修改订单的状态为 2(已付款)。 表结构分析 tb_paylog 支付日志表 插入日志记录 修改 pinyougou-order-service 工程 OrderServiceImpl.java 的 add 方法。 内容:判断如果支付方式为微信支付,向数据库插入支付日志记录,并放入 redis 存储

@Autowired 
 private TbPayLogMapper payLogMapper; 
 /**
  * 增加 
  */
 public void add(TbOrder order) {
  List<Cart> cartList = (List<Cart>) 
    redisTemplate.boundHashOps("cartList").get( order.getUserId() ); 
  List<String> orderIdList=new ArrayList();//订单 ID 列表 
  double total_money=0;//总金额 (元) 
  for(Cart cart:cartList){
   long orderId = idWorker.nextId(); 
              ......    
   orderIdList.add(orderId+"");//添加到订单列表  
   total_money+=money;//累加到总金额  
  }
  if("1".equals(order.getPaymentType())){//如果是微信支付   
   TbPayLog payLog=new TbPayLog(); 
   String outTradeNo=  idWorker.nextId()+"";//支付订单号 
   payLog.setOutTradeNo(outTradeNo);//支付订单号 
   payLog.setCreateTime(new Date());//创建时间 
   //订单号列表,逗号分隔 
   String ids=orderIdList.toString().replace("[", "").replace("]",
"").replace(" ", ""); 
payLog.setOrderList(ids);//订单号列表,逗号分隔 
   payLog.setPayType("1");//支付类型 
   payLog.setTotalFee( (long)(total_money*100 ) );//总金额(分)
   payLog.setTradeState("0");//支付状态 
   payLog.setUserId(order.getUserId());//用户 ID    
   payLogMapper.insert(payLog);//插入到支付日志表    
   redisTemplate.boundHashOps("payLog").put(order.getUserId(), payLog);//
放入缓存    
  }  
  redisTemplate.boundHashOps("cartList").delete(order.getUserId());   
 }