1 @RestController
2 @RequestMapping("/api/v1/order")
3 public class OrderController {
4
5
6 @Autowired(required = false)
7 private ProductOrderServiceImpl productOrderService;
8
9 @Autowired
10 private StringRedisTemplate redisTemplate;
11
12
13 @RequestMapping("/save")
14 @HystrixCommand(fallbackMethod="saveOrderFail")
15 public Object save(@RequestParam("user_id")int userId, @RequestParam("product_id") int productId, HttpServletRequest request){
16
17 Map<String, Object> data = new HashMap<>();
18 data.put("code", 0);
19 data.put("data", productOrderService.save(userId, productId));
20 return data;
21 }
22
23
24 //注意,方法签名一定要要和api方法一致
25 private Object saveOrderFail(int userId, int productId, HttpServletRequest request){
26
27
28 //监控报警
29 String saveOrderKye = "save-order";
30
31 String sendValue = redisTemplate.opsForValue().get(saveOrderKye);
32 final String ip = request.getRemoteAddr();
33 new Thread( ()->{
34 if (StringUtils.isBlank(sendValue)) {
35 System.out.println("紧急短信,用户下单失败,请离开查找原因,ip地址是="+ip);
36 //发送一个http请求,调用短信服务 TODO
37 redisTemplate.opsForValue().set(saveOrderKye, "save-order-fail", 20, TimeUnit.SECONDS);
38 }else{
39 System.out.println("已经发送过短信,20秒内不重复发送");
40 }
41
42 }).start();
43
44
45 Map<String, Object> msg = new HashMap<>();
46 msg.put("code", -1);
47 msg.put("msg", "抢购人数太多,您被挤出来了,稍等重试");
48 return msg;
49 }
50
51
52 }