RestApi.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. package com.java110.api.rest;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.java110.api.smo.IApiServiceSMO;
  4. import com.java110.core.base.controller.BaseController;
  5. import com.java110.core.log.LoggerFactory;
  6. import com.java110.doc.annotation.Java110ApiDoc;
  7. import com.java110.doc.annotation.Java110RequestMappingDoc;
  8. import com.java110.doc.annotation.Java110RequestMappingsDoc;
  9. import com.java110.intf.user.IUserInnerServiceSMO;
  10. import com.java110.utils.constant.CommonConstant;
  11. import com.java110.vo.ResultVo;
  12. import io.swagger.annotations.*;
  13. import org.slf4j.Logger;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.http.HttpStatus;
  16. import org.springframework.http.ResponseEntity;
  17. import org.springframework.web.bind.annotation.PathVariable;
  18. import org.springframework.web.bind.annotation.RequestBody;
  19. import org.springframework.web.bind.annotation.RequestMapping;
  20. import org.springframework.web.bind.annotation.RequestMethod;
  21. import org.springframework.web.bind.annotation.RestController;
  22. import javax.servlet.http.HttpServletRequest;
  23. import java.util.HashMap;
  24. import java.util.Map;
  25. /**
  26. * rest api
  27. * Created by wuxw on 2018/10/16.
  28. */
  29. @RestController
  30. @RequestMapping(path = "/api")
  31. @Api(value = "对外统一提供服务接口服务")
  32. @Java110ApiDoc(
  33. title = "HC小区管理系统api接口文档",
  34. description = "HC小区管理系统api接口文档",
  35. company="Java110工作室",
  36. version = "v1.4"
  37. )
  38. @Java110RequestMappingsDoc(
  39. mappingsDocs = {
  40. @Java110RequestMappingDoc(name="用户中心",resource = "userDoc",url="http://service-user",seq = 1),
  41. @Java110RequestMappingDoc(name="账户中心",resource = "acctDoc",url="http://service-acct",seq = 2),
  42. @Java110RequestMappingDoc(name="通用中心",resource = "commonDoc",url="http://service-common",seq = 3),
  43. @Java110RequestMappingDoc(name="小区中心",resource = "communityDoc",url="http://service-community",seq = 4),
  44. @Java110RequestMappingDoc(name="开发中心",resource = "devDoc",url="http://service-dev",seq = 5),
  45. @Java110RequestMappingDoc(name="费用中心",resource = "feeDoc",url="http://service-fee",seq = 6),
  46. @Java110RequestMappingDoc(name="定时任务",resource = "jobDoc",url="http://service-job",seq = 7),
  47. @Java110RequestMappingDoc(name="oa",resource = "oaDoc",url="http://service-oa",seq = 8),
  48. @Java110RequestMappingDoc(name="订单中心",resource = "orderDoc",url="http://service-order",seq = 9),
  49. @Java110RequestMappingDoc(name="报表中心",resource = "reportDoc",url="http://service-report",seq = 10),
  50. @Java110RequestMappingDoc(name="商户中心",resource = "storeDoc",url="http://service-store",seq = 11),
  51. }
  52. )
  53. public class RestApi extends BaseController {
  54. private static Logger logger = LoggerFactory.getLogger(RestApi.class);
  55. private static final String VERSION = "version";
  56. private static final String VERSION_2 = "2.0";
  57. @Autowired
  58. private IApiServiceSMO apiServiceSMOImpl;
  59. @Autowired
  60. private IUserInnerServiceSMO userInnerServiceSMOImpl;
  61. /**
  62. * 健康检查 服务
  63. *
  64. * @return
  65. */
  66. @RequestMapping(path = "/health", method = RequestMethod.GET)
  67. @ApiOperation(value = "服务健康检查", notes = "test: 返回 2XX 表示服务正常")
  68. public String health() {
  69. return "";
  70. }
  71. /**
  72. * 健康检查 服务
  73. *
  74. * @return
  75. */
  76. @RequestMapping(path = "/checkUserServiceVersion", method = RequestMethod.GET)
  77. @ApiOperation(value = "检查用服务版本", notes = "test: 返回 2XX 表示服务正常")
  78. public String checkUserServiceVersion() {
  79. return userInnerServiceSMOImpl.getUserServiceVersion("test");
  80. }
  81. /**
  82. * 资源请求 post方式
  83. *
  84. * @param service 请求接口方式
  85. * @param postInfo post内容
  86. * @param request 请求对象 查询头信息 url等信息
  87. * @return http status 200 成功 其他失败
  88. */
  89. @RequestMapping(path = "/{service:.+}", method = RequestMethod.POST)
  90. @ApiOperation(value = "资源post请求", notes = "test: 返回 2XX 表示服务正常")
  91. @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
  92. public ResponseEntity<String> servicePost(@PathVariable String service,
  93. @RequestBody String postInfo,
  94. HttpServletRequest request) {
  95. ResponseEntity<String> responseEntity = null;
  96. Map<String, String> headers = new HashMap<String, String>();
  97. try {
  98. this.getRequestInfo(request, headers);
  99. headers.put(CommonConstant.HTTP_SERVICE, service);
  100. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_POST);
  101. logger.debug("api:{} 请求报文为:{},header信息为:{}", service, postInfo, headers);
  102. responseEntity = apiServiceSMOImpl.service(postInfo, headers);
  103. } catch (Throwable e) {
  104. logger.error("请求post 方法[" + service + "]失败:" + postInfo, e);
  105. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  106. }
  107. logger.debug("api:{} 返回信息为:{}", service, responseEntity);
  108. if (responseEntity.getStatusCode() == HttpStatus.OK) {
  109. return responseEntity;
  110. }
  111. //当 接口版本号为2.0时 返回错误处理
  112. if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
  113. return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
  114. }
  115. return responseEntity;
  116. }
  117. /**
  118. * 资源请求 get方式
  119. *
  120. * @param service 请求接口方式
  121. * @param request 请求对象 查询头信息 url等信息
  122. * @return http status 200 成功 其他失败
  123. */
  124. @RequestMapping(path = "/{service:.+}", method = RequestMethod.GET)
  125. @ApiOperation(value = "资源get请求", notes = "test: 返回 2XX 表示服务正常")
  126. @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
  127. public ResponseEntity<String> serviceGet(@PathVariable String service,
  128. HttpServletRequest request) {
  129. ResponseEntity<String> responseEntity = null;
  130. Map<String, String> headers = new HashMap<String, String>();
  131. try {
  132. this.getRequestInfo(request, headers);
  133. headers.put(CommonConstant.HTTP_SERVICE, service);
  134. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_GET);
  135. logger.debug("api:{} 请求报文为:{},header信息为:{}", service, headers);
  136. responseEntity = apiServiceSMOImpl.service(JSONObject.toJSONString(getParameterStringMap(request)), headers);
  137. } catch (Throwable e) {
  138. logger.error("请求get 方法[" + service + "]失败:", e);
  139. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  140. }
  141. logger.debug("api:{} 返回信息为:{}", service, responseEntity);
  142. if (responseEntity.getStatusCode() == HttpStatus.OK) {
  143. return responseEntity;
  144. }
  145. //当 接口版本号为2.0时 返回错误处理
  146. if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
  147. return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
  148. }
  149. return responseEntity;
  150. }
  151. /**
  152. * 资源请求 put方式
  153. *
  154. * @param service 请求接口方式
  155. * @param postInfo 修改内容
  156. * @param request 请求对象 查询头信息 url等信息
  157. * @return http status 200 成功 其他失败
  158. */
  159. @RequestMapping(path = "/{service:.+}", method = RequestMethod.PUT)
  160. @ApiOperation(value = "资源put请求", notes = "test: 返回 2XX 表示服务正常")
  161. @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
  162. public ResponseEntity<String> servicePut(@PathVariable String service,
  163. @RequestBody String postInfo,
  164. HttpServletRequest request) {
  165. ResponseEntity<String> responseEntity = null;
  166. Map<String, String> headers = new HashMap<String, String>();
  167. try {
  168. this.getRequestInfo(request, headers);
  169. headers.put(CommonConstant.HTTP_SERVICE, service);
  170. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_PUT);
  171. logger.debug("api:{} 请求报文为:{},header信息为:{}", service, postInfo, headers);
  172. responseEntity = apiServiceSMOImpl.service(postInfo, headers);
  173. } catch (Throwable e) {
  174. logger.error("请求put 方法[" + service + "]失败:", e);
  175. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  176. }
  177. logger.debug("api:{} 返回信息为:{}", service, responseEntity);
  178. if (responseEntity.getStatusCode() == HttpStatus.OK) {
  179. return responseEntity;
  180. }
  181. //当 接口版本号为2.0时 返回错误处理
  182. if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
  183. return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
  184. }
  185. return responseEntity;
  186. }
  187. /**
  188. * 资源请求 delete方式
  189. *
  190. * @param service 请求接口方式
  191. * @param request 请求对象 查询头信息 url等信息
  192. * @return http status 200 成功 其他失败
  193. */
  194. @RequestMapping(path = "/{service:.+}", method = RequestMethod.DELETE)
  195. @ApiOperation(value = "资源delete请求", notes = "test: 返回 2XX 表示服务正常")
  196. @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
  197. public ResponseEntity<String> serviceDelete(@PathVariable String service,
  198. HttpServletRequest request) {
  199. ResponseEntity<String> responseEntity = null;
  200. Map<String, String> headers = new HashMap<String, String>();
  201. try {
  202. this.getRequestInfo(request, headers);
  203. headers.put(CommonConstant.HTTP_SERVICE, service);
  204. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_DELETE);
  205. logger.debug("api:{} 请求报文为:{},header信息为:{}", service, "", headers);
  206. responseEntity = apiServiceSMOImpl.service(JSONObject.toJSONString(getParameterStringMap(request)), headers);
  207. } catch (Throwable e) {
  208. logger.error("请求delete 方法[" + service + "]失败:", e);
  209. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  210. }
  211. logger.debug("api:{} 返回信息为:{}", service, responseEntity);
  212. if (responseEntity.getStatusCode() == HttpStatus.OK) {
  213. return responseEntity;
  214. }
  215. //当 接口版本号为2.0时 返回错误处理
  216. if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
  217. return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
  218. }
  219. return responseEntity;
  220. }
  221. /**
  222. * 获取请求信息
  223. *
  224. * @param request
  225. * @param headers
  226. * @throws RuntimeException
  227. */
  228. private void getRequestInfo(HttpServletRequest request, Map headers) throws Exception {
  229. try {
  230. super.initHeadParam(request, headers);
  231. super.initUrlParam(request, headers);
  232. } catch (Exception e) {
  233. logger.error("加载头信息失败", e);
  234. throw e;
  235. }
  236. }
  237. /**
  238. * 资源请求 post方式
  239. *
  240. * @param resource 请求接口方式
  241. * @param postInfo post内容
  242. * @param request 请求对象 查询头信息 url等信息
  243. * @return http status 200 成功 其他失败
  244. */
  245. @RequestMapping(path = "/{resource}/{action}", method = RequestMethod.POST)
  246. @ApiOperation(value = "资源post请求", notes = "test: 返回 2XX 表示服务正常")
  247. @ApiImplicitParam(paramType = "query", name = "subServicePost", value = "用户编号", required = true, dataType = "String")
  248. public ResponseEntity<String> subServicePost(
  249. @PathVariable String resource,
  250. @PathVariable String action,
  251. @RequestBody String postInfo,
  252. HttpServletRequest request) {
  253. ResponseEntity<String> responseEntity = null;
  254. Map<String, String> headers = new HashMap<String, String>();
  255. try {
  256. this.getRequestInfo(request, headers);
  257. headers.put(CommonConstant.HTTP_SERVICE, "/" + resource + "/" + action);
  258. headers.put(CommonConstant.HTTP_RESOURCE, resource);
  259. headers.put(CommonConstant.HTTP_ACTION, action);
  260. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_POST);
  261. logger.debug("api:{} 请求报文为:{},header信息为:{}", action, postInfo, headers);
  262. responseEntity = apiServiceSMOImpl.service(postInfo, headers);
  263. } catch (Throwable e) {
  264. logger.error("请求post 方法[" + action + "]失败:" + postInfo, e);
  265. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  266. }
  267. logger.debug("api:{} 返回信息为:{}", action, responseEntity);
  268. if (responseEntity.getStatusCode() == HttpStatus.OK) {
  269. return responseEntity;
  270. }
  271. //当 接口版本号为2.0时 返回错误处理
  272. if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
  273. return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
  274. }
  275. return responseEntity;
  276. }
  277. /**
  278. * 资源请求 get方式
  279. *
  280. * @param request 请求对象 查询头信息 url等信息
  281. * @return http status 200 成功 其他失败
  282. */
  283. @RequestMapping(path = "/{resource}/{action}", method = RequestMethod.GET)
  284. @ApiOperation(value = "资源get请求", notes = "test: 返回 2XX 表示服务正常")
  285. @ApiImplicitParam(paramType = "query", name = "subServiceGet", value = "用户编号", required = true, dataType = "String")
  286. public ResponseEntity<String> subServiceGet(
  287. @PathVariable String resource,
  288. @PathVariable String action,
  289. HttpServletRequest request) {
  290. ResponseEntity<String> responseEntity = null;
  291. Map<String, String> headers = new HashMap<String, String>();
  292. try {
  293. this.getRequestInfo(request, headers);
  294. headers.put(CommonConstant.HTTP_SERVICE, "/" + resource + "/" + action);
  295. headers.put(CommonConstant.HTTP_RESOURCE, resource);
  296. headers.put(CommonConstant.HTTP_ACTION, action);
  297. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_GET);
  298. logger.debug("api:{} 请求报文为:{},header信息为:{}", "", headers);
  299. responseEntity = apiServiceSMOImpl.service(JSONObject.toJSONString(getParameterStringMap(request)), headers);
  300. } catch (Throwable e) {
  301. logger.error("请求get 方法[" + action + "]失败:", e);
  302. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  303. }
  304. logger.debug("api:{} 返回信息为:{}", action, responseEntity);
  305. if (responseEntity.getStatusCode() == HttpStatus.OK) {
  306. return responseEntity;
  307. }
  308. //当 接口版本号为2.0时 返回错误处理
  309. if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
  310. return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
  311. }
  312. return responseEntity;
  313. }
  314. public IApiServiceSMO getApiServiceSMOImpl() {
  315. return apiServiceSMOImpl;
  316. }
  317. public void setApiServiceSMOImpl(IApiServiceSMO apiServiceSMOImpl) {
  318. this.apiServiceSMOImpl = apiServiceSMOImpl;
  319. }
  320. public IUserInnerServiceSMO getUserInnerServiceSMOImpl() {
  321. return userInnerServiceSMOImpl;
  322. }
  323. public void setUserInnerServiceSMOImpl(IUserInnerServiceSMO userInnerServiceSMOImpl) {
  324. this.userInnerServiceSMOImpl = userInnerServiceSMOImpl;
  325. }
  326. }