美文网首页
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