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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

品优购-支付日志
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 存储
[AppleScript] 纯文本查看 复制代码
@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());   
 } 




0 个回复

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