SiRdCrdController.java 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package thyyxxk.webserver.controller.medicalinsurance;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.web.bind.annotation.*;
  4. import thyyxxk.webserver.config.auth.PassToken;
  5. import thyyxxk.webserver.config.exception.ExceptionEnum;
  6. import thyyxxk.webserver.constants.Capacity;
  7. import thyyxxk.webserver.entity.ResultVo;
  8. import thyyxxk.webserver.entity.medicalinsurance.inpatient.RdCrdRslt;
  9. import thyyxxk.webserver.utils.ResultVoUtil;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. import java.util.concurrent.TimeUnit;
  13. /**
  14. * @description: 读卡
  15. * @author: DingJie
  16. * @create: 2021/8/1910:15
  17. */
  18. @Slf4j
  19. @RestController
  20. @RequestMapping("/siReadCard")
  21. public class SiRdCrdController {
  22. private final Map<String, RdCrdRslt> map = new HashMap<>(Capacity.DEFAULT);
  23. @GetMapping("/request")
  24. public ResultVo<RdCrdRslt> request(@RequestParam("prm") String prm) throws Exception {
  25. log.info("读卡请求:{}", prm);
  26. String patNo = prm.split("_")[1];
  27. int count = 0;
  28. RdCrdRslt rslt = null;
  29. while (null == rslt && count < 40) {
  30. TimeUnit.MILLISECONDS.sleep(1500);
  31. rslt = map.remove(patNo);
  32. count++;
  33. }
  34. if (null == rslt) {
  35. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "读卡失败。");
  36. }
  37. if (rslt.getCode() != 0) {
  38. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, rslt.getMessage());
  39. }
  40. return ResultVoUtil.success(rslt);
  41. }
  42. @PassToken
  43. @PostMapping("/callback")
  44. public String callback(@RequestBody RdCrdRslt rslt) {
  45. log.info("读卡返回:{}", rslt);
  46. map.put(rslt.getPatNo(), rslt);
  47. return "回调成功。";
  48. }
  49. }