订单服务实现详解

一、接口设计

请求URL:/order/product

请求方式:post

请求类型:JSON

参数说明:

{"user_id":4573,"products":
    [{"id":11206,"productID":3,
    "productName":"小米CC9 Pro",
    "productImg":"public/imgs/phone/Mi-CC9.png",
    "price":2599,"num":3,
    "maxNum":10,
    "check":true}]}

参数为一个userId,以及一个CartVo

所以定义OrderParam 

@Data
public class OrderParam implements Serializable {
    public static final Long serialVersionUID=1L;
    @JsonProperty("user_id")
    private Integer userId;
    private List<CartVo> products;
}

另外 由于需要把传入的OrderParam转成相应的product和Order

定义Order实体类

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
@TableName("orders")
public class Order implements Serializable {
    public static final Long serialVersionUID=1L;
    @TableId(type = IdType.AUTO)
    private Integer id;
    @JsonProperty("order_id")
    private Long    orderId; //订单编号,选择使用时间戳
    @JsonProperty("user_id")
    private Integer userId;
    @JsonProperty("product_id")
    private Integer productId;
    @JsonProperty("product_num")
    private Integer productNum;
    @JsonProperty("product_price")
    private Double  productPrice;
    @JsonProperty("order_time")
    private Long    orderTime;
}

定义OrderToProduct类

@Data
public class OrderToProduct implements Serializable {

    public static final Long serialVersionUID = 1L;

    private Integer productId;
    private Integer num;
}

二、实现类

controller和service省略,注意这里使用的是MybatisPlus 通过Service接口实现相关的操作,附代码。

@RestController
@RequestMapping("order")
public class OrderController {
    @Autowired
    private OrderService orderService;
    @PostMapping("save")
    public R save(@RequestBody OrderParam orderParam){
        return orderService.save(orderParam);
    }
}

public interface OrderService extends IService<Order> {

    R save(OrderParam orderParam);
}

然后编写实现类

1.首先准备数据

定义三个list集合,分别存储购物车id集合cartIds,订单转成商品的实体类集合orderToProducts,订单集合list。

获取传入的订单参数的userId,然后定义orderId获取当前时间

然后遍历参数中的CartVo集合,用cartIds接收每个购物车数据的id;

定义CartToProduct获取cartVo中的商品id和数量

将前者加入集合OrderToProducts

然后定义订单对象获取每个Cartvo对象的信息,生成订单加入list集合。

最后发送购物车服务消息和商品服务消息

代码如下:

    @Transactional
    @Override
    public R save(OrderParam orderParam) {
        //准备数据
        List<Integer> cartIds=new ArrayList<>();
        List<OrderToProduct> orderToProducts=new ArrayList<>();
        List<Order> list=new ArrayList<>();
        //生成数据
        Integer userId=orderParam.getUserId();
        long orderId=System.currentTimeMillis();

        for (CartVo cartVo : orderParam.getProducts()) {
            cartIds.add(cartVo.getId());//保存删除购物车的id
           OrderToProduct orderToProduct=new OrderToProduct();
           orderToProduct.setNum(cartVo.getNum());
           orderToProduct.setProductId(cartVo.getProductID());
            orderToProducts.add(orderToProduct);//商品服务修改的数据

            Order order=new Order();
            order.setOrderId(orderId);
            order.setOrderTime(orderId);
            order.setUserId(userId);
            order.setProductId(cartVo.getProductID());
            order.setProductNum(cartVo.getNum());
            order.setProductPrice(cartVo.getPrice());
            list.add(order);
        }
         rabbitTemplate.convertAndSend("topic.ex","clear.cart",cartIds);
        //发送商品服务消息
        rabbitTemplate.convertAndSend("topic.ex","sub.number",cartIds);
        return R.ok("订单保存成功!");

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值