黑马程序员技术交流社区

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

作者: 谷粒姐姐    时间: 2018-10-31 14:34
标题: 【郑州校区】Java之品优购课程讲义_day18(9)
品优购-支付日志
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());   
}









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