一、接口设计
请求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("订单保存成功!");