StudentApplyController.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package com.qmth.exam.reserve.controller.student;
  2. import com.qmth.boot.api.annotation.Aac;
  3. import com.qmth.boot.api.constant.ApiConstant;
  4. import com.qmth.boot.api.exception.DefaultExceptionEnum;
  5. import com.qmth.boot.core.rateLimit.entity.RateLimitRule;
  6. import com.qmth.boot.core.rateLimit.service.RateLimitService;
  7. import com.qmth.exam.reserve.bean.Constants;
  8. import com.qmth.exam.reserve.bean.RichTextBean;
  9. import com.qmth.exam.reserve.bean.apply.ApplyTimePeriodResult;
  10. import com.qmth.exam.reserve.bean.apply.ApplyVO;
  11. import com.qmth.exam.reserve.bean.apply.TicketInfo;
  12. import com.qmth.exam.reserve.config.SysProperty;
  13. import com.qmth.exam.reserve.controller.BaseController;
  14. import com.qmth.exam.reserve.service.ExamReserveService;
  15. import io.swagger.annotations.Api;
  16. import io.swagger.annotations.ApiOperation;
  17. import io.swagger.annotations.ApiParam;
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.web.bind.annotation.PostMapping;
  22. import org.springframework.web.bind.annotation.RequestMapping;
  23. import org.springframework.web.bind.annotation.RequestParam;
  24. import org.springframework.web.bind.annotation.RestController;
  25. import java.util.List;
  26. @RestController("stuApplyController")
  27. @Api(tags = "【考生端】考生预约相关接口")
  28. @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/student")
  29. @Aac(strict = false, auth = true)
  30. public class StudentApplyController extends BaseController {
  31. private static final Logger log = LoggerFactory.getLogger(StudentApplyController.class);
  32. @Autowired
  33. private ExamReserveService examReserveService;
  34. @Autowired
  35. private RateLimitService rateLimitService;
  36. @Autowired
  37. private SysProperty sysProperty;
  38. @ApiOperation(value = "保存考生预约结果")
  39. @PostMapping(value = "/apply/save")
  40. public void save(@ApiParam("考点ID") @RequestParam Long examSiteId,
  41. @ApiParam("预约时段ID") @RequestParam Long timePeriodId) {
  42. RateLimitRule limitRule = RateLimitRule.parse(sysProperty.getApiLimitExpression());
  43. if (!rateLimitService.getRateLimiter("apply_save", null, limitRule).acquire()) {
  44. throw DefaultExceptionEnum.RATE_LIMITED.exception(Constants.REQUEST_API_BUSY);
  45. }
  46. examReserveService.saveStudentApply(curLoginStudent(), examSiteId, timePeriodId);
  47. }
  48. @ApiOperation(value = "取消考生预约结果")
  49. @PostMapping(value = "/apply/cancel")
  50. public void cancel(@ApiParam("考点ID") @RequestParam Long examSiteId,
  51. @ApiParam("预约时段ID") @RequestParam Long timePeriodId) {
  52. RateLimitRule limitRule = RateLimitRule.parse(sysProperty.getApiLimitExpression());
  53. if (!rateLimitService.getRateLimiter("apply_cancel", null, limitRule).acquire()) {
  54. throw DefaultExceptionEnum.RATE_LIMITED.exception(Constants.REQUEST_API_BUSY);
  55. }
  56. examReserveService.cancelStudentApply(curLoginStudent(), examSiteId, timePeriodId);
  57. }
  58. @ApiOperation(value = "获取考生预约结果列表(个人中心)")
  59. @PostMapping(value = "/apply/list")
  60. public List<ApplyVO> list(@ApiParam("是否已取消预约") @RequestParam(required = false) Boolean cancel) {
  61. RateLimitRule limitRule = RateLimitRule.parse(sysProperty.getApiLimitExpression());
  62. if (!rateLimitService.getRateLimiter("apply_list", null, limitRule).acquire()) {
  63. throw DefaultExceptionEnum.RATE_LIMITED.exception(Constants.REQUEST_API_BUSY);
  64. }
  65. return examReserveService.getStudentApplyList(curLoginStudent(), cancel);
  66. }
  67. @ApiOperation(value = "获取考生当前进行中的预约列表(首页)")
  68. @PostMapping(value = "/apply/list/for/current")
  69. public List<ApplyVO> listForCurrent() {
  70. RateLimitRule limitRule = RateLimitRule.parse(sysProperty.getApiLimitExpression());
  71. if (!rateLimitService.getRateLimiter("apply_list", null, limitRule).acquire()) {
  72. throw DefaultExceptionEnum.RATE_LIMITED.exception(Constants.REQUEST_API_BUSY);
  73. }
  74. return examReserveService.getStudentApplyListForCurrent(curLoginStudent());
  75. }
  76. @ApiOperation(value = "获取考生预约-电子准考证")
  77. @PostMapping(value = "/apply/ticket")
  78. public TicketInfo ticket(@ApiParam("考点ID") @RequestParam Long examSiteId,
  79. @ApiParam("预约时段ID") @RequestParam Long timePeriodId) {
  80. return examReserveService.getApplyTicket(curLoginStudent().getId(), examSiteId, timePeriodId);
  81. }
  82. @ApiOperation(value = "获取考试须知")
  83. @PostMapping(value = "/exam/notice")
  84. public RichTextBean examNotice(@ApiParam("预约任务ID") @RequestParam Long applyTaskId) {
  85. return examReserveService.getExamNotice(applyTaskId);
  86. }
  87. @ApiOperation(value = "获取考场引导")
  88. @PostMapping(value = "/exam/site/guide")
  89. public RichTextBean examSiteGuide(@ApiParam("考点ID") @RequestParam Long examSiteId) {
  90. return examReserveService.getExamSiteGuide(examSiteId);
  91. }
  92. @ApiOperation(value = "获取可预约的“日期”列表", notes = "日期格式:yyyyMMdd")
  93. @PostMapping(value = "/apply/date/list")
  94. public List<String> dateList(@ApiParam("考点ID") @RequestParam Long examSiteId) {
  95. return examReserveService.getApplyDateList(curLoginStudent(), examSiteId);
  96. }
  97. @ApiOperation(value = "获取可预约的“时段”列表")
  98. @PostMapping(value = "/apply/time/period/list")
  99. public ApplyTimePeriodResult timePeriodList(@ApiParam("考点ID") @RequestParam Long examSiteId,
  100. @ApiParam("预约日期:yyyyMMdd") @RequestParam String date) {
  101. RateLimitRule limitRule = RateLimitRule.parse(sysProperty.getApiLimitExpression());
  102. if (!rateLimitService.getRateLimiter("apply_time_list", null, limitRule).acquire()) {
  103. throw DefaultExceptionEnum.RATE_LIMITED.exception(Constants.REQUEST_API_BUSY);
  104. }
  105. return examReserveService.getApplyTimePeriodList(curLoginStudent(), examSiteId, date);
  106. }
  107. }