// Path: jms-client/src/main/java/me/chanjar/jms/client/command/MiaoShaCommandService.java
// public interface MiaoShaCommandService {
// 
//   String doRequest(RequestDto requestDto);
// 
//   ResponseDto getResponse(String requestId);
// 
// }
// 
// Path: jms-msg/src/main/java/me/chanjar/jms/msg/RequestDto.java
// public class RequestDto extends MessageDto {
// 
//   private static final long serialVersionUID = 5515305970509119810L;
//   /**
//    * 商品ID
//    */
//   private final Long itemId;
// 
//   /**
//    * 用户ID
//    */
//   private final String userId;
// 
//   public RequestDto(Long itemId, String userId) {
//     super();
//     this.itemId = itemId;
//     this.userId = userId;
//   }
// 
//   public Long getItemId() {
//     return itemId;
//   }
// 
//   public String getUserId() {
//     return userId;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     RequestDto that = (RequestDto) o;
// 
//     if (itemId != null ? !itemId.equals(that.itemId) : that.itemId != null) return false;
//     return userId != null ? userId.equals(that.userId) : that.userId == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = itemId != null ? itemId.hashCode() : 0;
//     result = 31 * result + (userId != null ? userId.hashCode() : 0);
//     return result;
//   }
// 
//   @Override
//   public String toString() {
//     return new ToStringBuilder(this)
//         .append("id", id)
//         .append("itemId", itemId)
//         .append("userId", userId)
//         .toString();
//   }
// }
// 
// Path: jms-msg/src/main/java/me/chanjar/jms/msg/ResponseDto.java
// public class ResponseDto extends MessageDto {
// 
//   private static final long serialVersionUID = -4690648814874030736L;
//   /**
//    * 关联的RequestDto的id
//    */
//   private final String requestId;
// 
//   /**
//    * 错误消息
//    */
//   protected String errorMessage;
// 
//   /**
//    * 是否成功处理请求
//    */
//   protected boolean success;
// 
//   public ResponseDto(String requestId) {
//     super();
//     this.requestId = requestId;
//   }
// 
//   public String getRequestId() {
//     return requestId;
//   }
// 
//   public String getErrorMessage() {
//     return errorMessage;
//   }
// 
//   public void setErrorMessage(String errorMessage) {
//     this.errorMessage = errorMessage;
//   }
// 
//   public boolean isSuccess() {
//     return success;
//   }
// 
//   public void setSuccess(boolean success) {
//     this.success = success;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     ResponseDto that = (ResponseDto) o;
// 
//     if (success != that.success) return false;
//     if (requestId != null ? !requestId.equals(that.requestId) : that.requestId != null) return false;
//     return errorMessage != null ? errorMessage.equals(that.errorMessage) : that.errorMessage == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = requestId != null ? requestId.hashCode() : 0;
//     result = 31 * result + (errorMessage != null ? errorMessage.hashCode() : 0);
//     result = 31 * result + (success ? 1 : 0);
//     return result;
//   }
// }


import me.chanjar.jms.client.command.MiaoShaCommandService;
import me.chanjar.jms.msg.RequestDto;
import me.chanjar.jms.msg.ResponseDto;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
package me.chanjar;


/**
 * 秒杀Rest Controller
 */
@RestController
public class MiaoshaRestController {

  private MiaoShaCommandService miaoshaCommandService;

  /**
   * 下单
   *
   * @param itemId
   * @return
   */
  @RequestMapping(value = "/order", method = RequestMethod.POST)
  public RequestDto order(@RequestParam("itemId") Long itemId) {

    RequestDto requestDto = new RequestDto(itemId, getUser());
    miaoshaCommandService.doRequest(requestDto);
    return requestDto;

  }

  /**
   * 获得下单结果
   *
   * @param requestId
   * @return
   */
  @RequestMapping(value = "/order-result", method = RequestMethod.GET)
  public ResponseDto getOrderResult(@RequestParam("requestId") String requestId) {

    return miaoshaCommandService.getResponse(requestId);

  }

  @Autowired
// Path: jms-client/src/main/java/me/chanjar/jms/client/command/MiaoShaCommandService.java
// public interface MiaoShaCommandService {
// 
//   String doRequest(RequestDto requestDto);
// 
//   ResponseDto getResponse(String requestId);
// 
// }
// 
// Path: jms-msg/src/main/java/me/chanjar/jms/msg/RequestDto.java
// public class RequestDto extends MessageDto {
// 
//   private static final long serialVersionUID = 5515305970509119810L;
//   /**
//    * 商品ID
//    */
//   private final Long itemId;
// 
//   /**
//    * 用户ID
//    */
//   private final String userId;
// 
//   public RequestDto(Long itemId, String userId) {
//     super();
//     this.itemId = itemId;
//     this.userId = userId;
//   }
// 
//   public Long getItemId() {
//     return itemId;
//   }
// 
//   public String getUserId() {
//     return userId;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     RequestDto that = (RequestDto) o;
// 
//     if (itemId != null ? !itemId.equals(that.itemId) : that.itemId != null) return false;
//     return userId != null ? userId.equals(that.userId) : that.userId == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = itemId != null ? itemId.hashCode() : 0;
//     result = 31 * result + (userId != null ? userId.hashCode() : 0);
//     return result;
//   }
// 
//   @Override
//   public String toString() {
//     return new ToStringBuilder(this)
//         .append("id", id)
//         .append("itemId", itemId)
//         .append("userId", userId)
//         .toString();
//   }
// }
// 
// Path: jms-msg/src/main/java/me/chanjar/jms/msg/ResponseDto.java
// public class ResponseDto extends MessageDto {
// 
//   private static final long serialVersionUID = -4690648814874030736L;
//   /**
//    * 关联的RequestDto的id
//    */
//   private final String requestId;
// 
//   /**
//    * 错误消息
//    */
//   protected String errorMessage;
// 
//   /**
//    * 是否成功处理请求
//    */
//   protected boolean success;
// 
//   public ResponseDto(String requestId) {
//     super();
//     this.requestId = requestId;
//   }
// 
//   public String getRequestId() {
//     return requestId;
//   }
// 
//   public String getErrorMessage() {
//     return errorMessage;
//   }
// 
//   public void setErrorMessage(String errorMessage) {
//     this.errorMessage = errorMessage;
//   }
// 
//   public boolean isSuccess() {
//     return success;
//   }
// 
//   public void setSuccess(boolean success) {
//     this.success = success;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     ResponseDto that = (ResponseDto) o;
// 
//     if (success != that.success) return false;
//     if (requestId != null ? !requestId.equals(that.requestId) : that.requestId != null) return false;
//     return errorMessage != null ? errorMessage.equals(that.errorMessage) : that.errorMessage == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = requestId != null ? requestId.hashCode() : 0;
//     result = 31 * result + (errorMessage != null ? errorMessage.hashCode() : 0);
//     result = 31 * result + (success ? 1 : 0);
//     return result;
//   }
// }


// Path: web/src/main/java/me/chanjar/MiaoshaRestController.java
import me.chanjar.jms.client.command.MiaoShaCommandService;
import me.chanjar.jms.msg.RequestDto;
import me.chanjar.jms.msg.ResponseDto;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

package me.chanjar;


/**
 * 秒杀Rest Controller
 */
@RestController
public class MiaoshaRestController {

  private MiaoShaCommandService miaoshaCommandService;

  /**
   * 下单
   *
   * @param itemId
   * @return
   */
  @RequestMapping(value = "/order", method = RequestMethod.POST)
  public RequestDto order(@RequestParam("itemId") Long itemId) {

    RequestDto requestDto = new RequestDto(itemId, getUser());
    miaoshaCommandService.doRequest(requestDto);
    return requestDto;

  }

  /**
   * 获得下单结果
   *
   * @param requestId
   * @return
   */
  @RequestMapping(value = "/order-result", method = RequestMethod.GET)
  public ResponseDto getOrderResult(@RequestParam("requestId") String requestId) {

    return miaoshaCommandService.getResponse(requestId);

  }

  @Autowired
  public void setMiaoshaCommandService(MiaoShaCommandService miaoshaCommandService) {