美文网首页
SSM框架学习日记(9)——订单模块

SSM框架学习日记(9)——订单模块

作者: 糯米团子_大芒果 | 来源:发表于2018-09-01 09:58 被阅读0次

订单模块

订单几大模块,创建,查询,取消,完成,总的来说都是增删改查,逻辑较为简单,注意的点还是在于避免横向越权和纵向越权

创建订单

先从购物车中拿到数据,后计算所有的总价生成订单号,再插入order表,然后把订单表子项批量插入orderItem表,然后清楚购物车,减少库存,把详情返回给前端
订单号的生成很重要也有一套要求,以后再讲,先暂且用时间加随机数生成
要把orderItemList插入表中,需要用到Mybatis的批量插入
在orderItemMapper里新增一个方法

void batchInsert(@Param("orderItemList") List<OrderItem> orderItemList);

然后去xml文件里写实现,用foreach循环插入

  <select id="batchInsert" parameterType="list">
    insert into mmall_order_item (id, order_no, user_id,
      product_id, product_name, product_image,
      current_unit_price, quantity, total_price,
      create_time, update_time)
    values
    <foreach collection="orderItemList" index="index" item="item" separator=",">
      (
      #{item.id},#{item.orderNo},#{item.userId},#{item.productId},#{item.productName},#{item.productImage},#{item.currentUnitPrice},#{item.quantity},#{item.totalPrice},now(),now()
      )
    </foreach>
  </select>

在返回给前端的数据肯定会进行一些修饰改变,去掉不需要的部分,所有又要新建几个Vo,并且组装填充数据返回给前端,
没什么特别要注意的,详见代码吧

取消订单

取消订单的话要注意验证用户和订单是否一致,已付款的订单就无法取消了,以后再写对接支付宝的退款,service如下

    public ServerResponse<String> cancel(Integer userId,Long orderNo){
        Order order  = orderMapper.selectByUserIdAndOrderNo(userId,orderNo);
        if(order == null){
            return ServerResponse.createByErrorMessage("该用户此订单不存在");
        }
        if(order.getStatus() != Const.OrderStatusEnum.NO_PAY.getCode()){
            return ServerResponse.createByErrorMessage("已付款,无法取消订单");
        }
        Order updateOrder = new Order();
        updateOrder.setId(order.getId());
        updateOrder.setStatus(Const.OrderStatusEnum.CANCELED.getCode());

        int row = orderMapper.updateByPrimaryKeySelective(updateOrder);
        if(row > 0){
            return ServerResponse.createBySuccess();
        }
        return ServerResponse.createByError();
    }

查看购物车中选中的商品

也就是拿出选中的商品并且组装一个适合返回给前端的Vo

    public ServerResponse getOrderCartProduct(Integer userId){
        OrderProductVo orderProductVo = new OrderProductVo();
        //从购物车中获取数据

        List<Cart> cartList = cartMapper.selectCheckedCartByUserId(userId);
        ServerResponse serverResponse =  this.getCartOrderItem(userId,cartList);
        if(!serverResponse.isSuccess()){
            return serverResponse;
        }
        List<OrderItem> orderItemList =( List<OrderItem> ) serverResponse.getData();

        List<OrderItemVo> orderItemVoList = Lists.newArrayList();

        BigDecimal payment = new BigDecimal("0");
        for(OrderItem orderItem : orderItemList){
            payment = BigDecimalUtil.add(payment.doubleValue(),orderItem.getTotalPrice().doubleValue());
            orderItemVoList.add(assembleOrderItemVo(orderItem));
        }
        orderProductVo.setProductTotalPrice(payment);
        orderProductVo.setOrderItemVoList(orderItemVoList);
        orderProductVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix"));
        return ServerResponse.createBySuccess(orderProductVo);
    }

用户查看订单详情

简单的查询数据而已,详见代码,项目代码在最后给出


项目地址:https://gitee.com/KamisamaXX/mmall

相关文章

网友评论

      本文标题:SSM框架学习日记(9)——订单模块

      本文链接:https://www.haomeiwen.com/subject/doreiftx.html