EnvelopRestEndPoint.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package com.yihu.ehr.controller;
  2. import com.yihu.ehr.util.id.BizObject;
  3. import com.yihu.ehr.util.id.ObjectId;
  4. import com.yihu.ehr.util.rest.Envelop;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import java.util.ArrayList;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Random;
  10. /**
  11. * REST风格控控制器基类。此控制器用于对API进行校验,并处理平台根层级的业务,如API参数校验,错误及返回码设定等。
  12. * <p>
  13. * 根层级的校验,如果是正确的,直接返回HTTP代码200,若出错,则会将HTTP返回代码设置为1X或2X,并在HTTP响应体中包含响应的信息。
  14. * HTTP响应体格式为JSON。
  15. * + 成功:会根据各业务逻辑自行决定要返回的数据,各业务模块的返回结构不同。
  16. * + 失败:{"code":"错误代码", "message":"错误原因"}
  17. * </p>
  18. * @author zhiyong
  19. * @author Sand
  20. */
  21. public class EnvelopRestEndPoint extends BaseRestEndPoint {
  22. @Value("${deploy.region}")
  23. protected Short deployRegion = 3502;
  24. protected <T, J> Envelop<T, J> success(List<T> contents) {
  25. return success(contents, (J)new HashMap<>(0));
  26. }
  27. protected <T, J, _T> Envelop<_T, J> success(List<T> contents, Class<_T> targetContents) {
  28. List<_T> _contents = (List)convertToModels(contents, new ArrayList<>(contents.size()), targetContents, null);
  29. return success(_contents);
  30. }
  31. protected <T, J> Envelop<T, J> success(J obj) {
  32. return success(new ArrayList<T>(0), obj);
  33. }
  34. protected <T, J, _J> Envelop<T, _J> success(J obj, Class<_J> targetObj) {
  35. _J _obj = convertToModel(obj, targetObj);
  36. return success(_obj);
  37. }
  38. protected <T, J> Envelop<T, J> success(List<T> contents, J obj) {
  39. return success(contents, obj, contents.size(), 1, 15);
  40. }
  41. protected <T, J, _T, _J> Envelop<_T, _J> success(List<T> contents, J obj, Class<_T> targetContents, Class<_J> targetObj) {
  42. List<_T> _contents = (List)convertToModels(contents, new ArrayList<>(contents.size()), targetContents, null);
  43. _J _obj = convertToModel(obj, targetObj);
  44. return success(_contents, _obj);
  45. }
  46. protected <T, J> Envelop<T, J> success(List<T> contents, int totalCount, int currPage, int rows) {
  47. return success(contents, (J)new HashMap<>(0), totalCount, currPage, rows);
  48. }
  49. protected <T, J, _T> Envelop<_T, J> success(List<T> contents, int totalCount, int currPage, int rows, Class<_T> targetContents) {
  50. List<_T> _contents = (List)convertToModels(contents, new ArrayList<>(contents.size()), targetContents, null);
  51. return success(_contents, totalCount, currPage, rows);
  52. }
  53. protected <T, J> Envelop<T, J> success(List<T> contents, J obj, int totalCount, int currPage, int rows) {
  54. Envelop<T, J> envelop = new Envelop<>();
  55. envelop.setSuccessFlg(true);
  56. envelop.setTotalCount(totalCount);
  57. envelop.setCurrPage(currPage);
  58. envelop.setPageSize(rows);
  59. envelop.setDetailModelList(contents);
  60. envelop.setObj(obj);
  61. return envelop;
  62. }
  63. protected <T, J, _T, _J> Envelop<_T, _J> success(List<T> contents, J obj, int totalCount, int currPage, int pageSize, Class<_T> targetContents, Class<_J> targetObj) {
  64. List<_T> _contents = (List)convertToModels(contents, new ArrayList<>(contents.size()), targetContents, null);
  65. _J _obj = convertToModel(obj, targetObj);
  66. return success(_contents, _obj, totalCount, currPage, pageSize);
  67. }
  68. @Deprecated
  69. protected Envelop success(Object object, List list){
  70. Envelop envelop = new Envelop();
  71. envelop.setSuccessFlg(true);
  72. envelop.setObj(object);
  73. envelop.setDetailModelList(list);
  74. return envelop;
  75. }
  76. /**
  77. * 返回一个信封对象。信封对象的返回场景参见 Envelop.
  78. *
  79. * @param modelList
  80. * @param totalCount
  81. * @return
  82. */
  83. @Deprecated
  84. protected Envelop getResult(List modelList, int totalCount) {
  85. Envelop envelop = new Envelop();
  86. envelop.setSuccessFlg(true);
  87. envelop.setDetailModelList(modelList);
  88. envelop.setTotalCount(totalCount);
  89. return envelop;
  90. }
  91. @Deprecated
  92. protected Envelop getPageResult(List detailModelList, int totalCount, int currPage, int rows) {
  93. Envelop result = new Envelop();
  94. result.setSuccessFlg(true);
  95. result.setDetailModelList(detailModelList);
  96. result.setTotalCount(totalCount);
  97. result.setCurrPage(currPage);
  98. result.setPageSize(rows);
  99. if (result.getTotalCount() % result.getPageSize() > 0) {
  100. result.setTotalPage((result.getTotalCount() / result.getPageSize()) + 1);
  101. } else {
  102. result.setTotalPage(result.getTotalCount() / result.getPageSize());
  103. }
  104. return result;
  105. }
  106. protected <T, J> Envelop<T, J> failed(String errMsg){
  107. return failed(errMsg, -1);
  108. }
  109. protected <T, J> Envelop<T, J> failed(String errMsg, int errorCode){
  110. return failed(errMsg, errorCode, (J)new HashMap<>(0));
  111. }
  112. protected <T, J> Envelop<T, J> failed(String errMsg, J obj){
  113. return failed(errMsg, -1, obj);
  114. }
  115. protected <T, J> Envelop<T, J> failed(String errMsg, int errorCode, J obj){
  116. Envelop<T, J> envelop = new Envelop<>();
  117. envelop.setErrorMsg(errMsg);
  118. envelop.setErrorCode(errorCode);
  119. envelop.setObj(obj);
  120. return envelop;
  121. }
  122. /**
  123. * 获取obj ID
  124. * @param bizObject
  125. * @return
  126. */
  127. protected String getObjectId(BizObject bizObject){
  128. return new ObjectId(deployRegion, bizObject).toString();
  129. }
  130. /**
  131. * 获取指定长度的随机字符串
  132. * @param length
  133. * @return
  134. */
  135. protected String getRandomString(int length) {
  136. String str = "abcdefghijklmnopkrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  137. StringBuilder builder = new StringBuilder();
  138. Random random = new Random();
  139. for (int i = 0; i < length; i++) {
  140. int number = random.nextInt(str.length());
  141. builder.append(str.charAt(number));
  142. }
  143. return builder.toString();
  144. }
  145. }