package com.alatus.mall.cart.web;
import com.alatus.mall.cart.service.CartService;
import com.alatus.mall.cart.vo.Cart;
import com.alatus.mall.cart.vo.CartItem;
import com.alatus.mall.cart.vo.UserInfoTo;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.util.concurrent.ExecutionException;
@Controller
public class CartController {
@Autowired
private CartService cartService;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private AmqpAdmin amqpAdmin;
@GetMapping("/sendMessage")
public void sendMessage(){
UserInfoTo userInfoTo = new UserInfoTo(1L,"2323");
rabbitTemplate.convertAndSend("helloWorld","hello","哈哈哈哈哈哈哈哈哈");
rabbitTemplate.convertAndSend("helloWorld","hello",userInfoTo);
}
@GetMapping("/cart.html")
public String cartListPage(Model model) throws ExecutionException, InterruptedException {
Cart cart = cartService.getCart();
model.addAttribute("cart",cart);
return "cartList";
}
@GetMapping("/deleteItem")
public String deleteItem(@RequestParam("skuId")Long skuId){
cartService.deleteItem(skuId);
return "redirect:http://cart.alatusmall.com/cart.html";
}
@GetMapping("/createExchange")
public void createExchange() throws InterruptedException {
// 声明交换机
DirectExchange directExchange = new DirectExchange("helloWorld",true,false);
amqpAdmin.declareExchange(directExchange);
// 队列不能有排他性,要都能连接到这个队列才是正确的
Queue helloJava = new Queue("helloJava", true, false,false);
amqpAdmin.declareQueue(helloJava);
Thread.sleep(2000);
Binding binding = new Binding("helloJava", Binding.DestinationType.QUEUE,"helloWorld","hello",null);
amqpAdmin.declareBinding(binding);
}
@GetMapping("/countItem")
public String countItem(@RequestParam("skuId") Long skuId, @RequestParam("num") Integer num){
cartService.changeItemCount(skuId,num);
return "redirect:http://cart.alatusmall.com/cart.html";
}
@GetMapping("/addToCart")
public String addToCart(@RequestParam("skuId") Long skuId, @RequestParam("num") Integer num, RedirectAttributes model) throws ExecutionException, InterruptedException {
if(num > 0){
cartService.addToCart(skuId,num);
// RedirectAttributes的addAttribute会自动拼串,自动以参数的形式携带数据
// RedirectAttributes的addFlashAttribute()会保存在session里面,但是仅可以取一次值
model.addAttribute("skuId",skuId);
return "redirect:http://cart.alatusmall.com/addToCartSuccess.html";
}
return "redirect:http://cart.alatusmall.com/addToCartSuccess.html";
}
@GetMapping("/checkItem")
public String checkItem(@RequestParam("skuId")Long skuId,@RequestParam("check")Integer check){
cartService.checkItem(skuId,check);
return "redirect:http://cart.alatusmall.com/cart.html";
}
@GetMapping("/addToCartSuccess.html")
public String addToCartSuccessPage(@RequestParam("skuId")Long skuId,Model model){
CartItem cartItem = cartService.getCartItem(skuId);
model.addAttribute("item",cartItem);
return "success";
}
}
package com.alatus.mall.cart.web;
import com.alatus.mall.cart.service.CartService;
import com.alatus.mall.cart.vo.Cart;
import com.alatus.mall.cart.vo.CartItem;
import com.alatus.mall.cart.vo.UserInfoTo;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.util.concurrent.ExecutionException;
@Controller
public class CartController {
@Autowired
private CartService cartService;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private AmqpAdmin amqpAdmin;
@GetMapping("/sendMessage")
public void sendMessage(){
UserInfoTo userInfoTo = new UserInfoTo(1L,"2323");
rabbitTemplate.convertAndSend("helloWorld","hello","哈哈哈哈哈哈哈哈哈");
rabbitTemplate.convertAndSend("helloWorld","hello",userInfoTo);
}
@GetMapping("/cart.html")
public String cartListPage(Model model) throws ExecutionException, InterruptedException {
Cart cart = cartService.getCart();
model.addAttribute("cart",cart);
return "cartList";
}
@GetMapping("/deleteItem")
public String deleteItem(@RequestParam("skuId")Long skuId){
cartService.deleteItem(skuId);
return "redirect:http://cart.alatusmall.com/cart.html";
}
@GetMapping("/createExchange")
public void createExchange() throws InterruptedException {
// 声明交换机
DirectExchange directExchange = new DirectExchange("helloWorld",true,false);
amqpAdmin.declareExchange(directExchange);
// 队列不能有排他性,要都能连接到这个队列才是正确的
Queue helloJava = new Queue("helloJava", true, false,false);
amqpAdmin.declareQueue(helloJava);
Thread.sleep(2000);
Binding binding = new Binding("helloJava", Binding.DestinationType.QUEUE,"helloWorld","hello",null);
amqpAdmin.declareBinding(binding);
}
@GetMapping("/countItem")
public String countItem(@RequestParam("skuId") Long skuId, @RequestParam("num") Integer num){
cartService.changeItemCount(skuId,num);
return "redirect:http://cart.alatusmall.com/cart.html";
}
@GetMapping("/addToCart")
public String addToCart(@RequestParam("skuId") Long skuId, @RequestParam("num") Integer num, RedirectAttributes model) throws ExecutionException, InterruptedException {
if(num > 0){
cartService.addToCart(skuId,num);
// RedirectAttributes的addAttribute会自动拼串,自动以参数的形式携带数据
// RedirectAttributes的addFlashAttribute()会保存在session里面,但是仅可以取一次值
model.addAttribute("skuId",skuId);
return "redirect:http://cart.alatusmall.com/addToCartSuccess.html";
}
return "redirect:http://cart.alatusmall.com/addToCartSuccess.html";
}
@GetMapping("/checkItem")
public String checkItem(@RequestParam("skuId")Long skuId,@RequestParam("check")Integer check){
cartService.checkItem(skuId,check);
return "redirect:http://cart.alatusmall.com/cart.html";
}
@GetMapping("/addToCartSuccess.html")
public String addToCartSuccessPage(@RequestParam("skuId")Long skuId,Model model){
CartItem cartItem = cartService.getCartItem(skuId);
model.addAttribute("item",cartItem);
return "success";
}
}
package com.alatus.mall.cart.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class UserInfoTo {
private Long userId;
private String userKey;
}
package com.alatus.mall.cart.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class UserInfoTo {
private Long userId;
private String userKey;
}
package com.alatus.mall.cart.config;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
package com.alatus.mall.cart.config;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}