Java电商项目面试--订单模块

本文探讨了电商项目面试中订单模块的关键技术,包括安全漏洞解决方案、订单号生成策略以及常量和枚举的设计。强调了常量接口的分组概念,枚举的键值对使用,以及订单号应具备的无重复性、日期标识和长度适中等特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试:订单模块技术要点
技术要点:
1、安全漏洞解决方案
2、订单号生成规则
3、强大的常量、枚举设计

一、前台创建订单
Controller层:

//创建订单
@RequestMapping("create.do")
@ResponseBody
public ServerResponse create(HttpSession session, Integer shippingId){
    User user = (User)session.getAttribute(Const.CURRENT_USER);
    if(user ==null)
        return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
    return iOrderService.createOrder(user.getId(),shippingId);
}

Service层:

//创建订单
public  ServerResponse createOrder(Integer userId,Integer shippingId){
    //从购物车中获取已经被勾选的商品
    List<Cart> cartList = cartMapper.selectCheckedCartByUserId(userId);
    //校验并封装一下
    ServerResponse serverResponse = this.getCartOrderItem(userId,cartList);
    if(!serverResponse.isSuccess())
        return serverResponse;
    List<OrderItem> orderItemList = (List<OrderItem>)serverResponse.getData();
    //计算这个订单的总价
    BigDecimal payment = this.getOrderTotalPrice(orderItemList);
    //生成订单
    Order order = this.assembleOrder(userId,shippingId,payment);
    if(order == null)
        return ServerResponse.createByErrorMessage("生成订单错误");
    if(CollectionUtils.isEmpty(orderItemList))
        return ServerResponse.createByErrorMessage("购物车为空");
    //每一项都生成订单号
    for(OrderItem orderItem : orderItemList)
        //设置订单号
        orderItem.setOrderNo(order.getOrderNo());

    //mybatis 批量插入
    orderItemMapper.batchInsert(orderItemList);
    //生成成功,我们要减少我们产品的库存
    this.reduceProductStock(orderItemList);
    //清空一下购物车
    this.cleanCart(cartList);
    //返回给前端数据
    OrderVo orderVo = assembleOrderVo(order,orderItemList);
    return ServerResponse.createBySuccess(orderVo);
}
//校验并且封装一下
private ServerResponse getCartOrderItem(Integer userId,List<Cart> cartList){
    List<OrderItem> orderItemList = Lists.newArrayList();
    //购物车中已经勾选的商品是空的
    if(CollectionUtils.isEmpty(cartList))
        return ServerResponse.createByErrorMessage("购物车为空");
    /*********校验购物车的数据,包括产品的状态和数量********/
    for(Cart cartItem : cartList){
        OrderItem orderItem = new OrderItem();
        //查出商品
        Product product = productMapper.selectByPrimaryKey(cartItem.getProductId());
        //查看产品销售状态
        if(Const
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北极星小王子

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值