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

订单模块

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

创建订单

先从购物车中拿到数据,后计算所有的总价生成订单号,再插入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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容