| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- package com.java110.api.bmo;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.java110.core.context.DataFlowContext;
- import com.java110.core.factory.DataFlowFactory;
- import com.java110.entity.center.AppService;
- import com.java110.entity.order.Orders;
- import com.java110.event.service.api.ServiceDataFlowEvent;
- import com.java110.utils.constant.CommonConstant;
- import com.java110.utils.constant.ServiceCodeConstant;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.http.*;
- import org.springframework.web.client.HttpStatusCodeException;
- import org.springframework.web.client.RestTemplate;
- import java.util.Map;
- public class ApiBaseBMO implements IApiBaseBMO{
- protected static final int DEFAULT_ORDER = 1;
- //默认序列
- protected static final int DEFAULT_SEQ = 1;
- @Autowired
- private RestTemplate restTemplate;
- @Autowired
- private RestTemplate restTemplateNoLoadBalanced;
- /**
- * 调用下游服务
- *
- * @param event
- * @return
- */
- public ResponseEntity<String> callService(ServiceDataFlowEvent event) {
- DataFlowContext dataFlowContext = event.getDataFlowContext();
- AppService service = event.getAppService();
- return callService(dataFlowContext, service, dataFlowContext.getReqJson());
- }
- /**
- * 调用下游服务
- *
- * @param context
- * @param serviceCode 下游服务
- * @return
- */
- public ResponseEntity<String> callService(DataFlowContext context, String serviceCode,JSONArray businesses) {
- context.getRequestCurrentHeaders().put(CommonConstant.HTTP_ORDER_TYPE_CD, "D");
- JSONObject paramInObj = restToCenterProtocol(businesses, context.getRequestCurrentHeaders());
- return callService(context,serviceCode,paramInObj);
- }
- /**
- * 调用下游服务
- *
- * @param context
- * @param serviceCode 下游服务
- * @return
- */
- public ResponseEntity<String> callService(DataFlowContext context, String serviceCode,JSONObject paramInObj) {
- //将 rest header 信息传递到下层服务中去
- HttpHeaders header = new HttpHeaders();
- freshHttpHeader(header, context.getRequestCurrentHeaders());
- ResponseEntity responseEntity = null;
- AppService appService = DataFlowFactory.getService(context.getAppId(), serviceCode);
- if (appService == null) {
- responseEntity = new ResponseEntity<String>("当前没有权限访问" + ServiceCodeConstant.SERVICE_CODE_QUERY_STORE_USERS, HttpStatus.UNAUTHORIZED);
- context.setResponseEntity(responseEntity);
- return responseEntity;
- }
- return callService(context, appService, paramInObj);
- }
- /**
- * 调用下游服务
- *
- * @param context
- * @param appService 下游服务
- * @return
- */
- public ResponseEntity<String> callService(DataFlowContext context, AppService appService, Map paramIn) {
- context.getRequestCurrentHeaders().put(CommonConstant.HTTP_ORDER_TYPE_CD, "D");
- ResponseEntity responseEntity = null;
- if (paramIn == null || paramIn.isEmpty()) {
- paramIn = context.getReqJson();
- }
- RestTemplate tmpRestTemplate = appService.getServiceCode().startsWith("out.") ? restTemplateNoLoadBalanced : restTemplate;
- String serviceUrl = appService.getUrl();
- HttpEntity<String> httpEntity = null;
- HttpHeaders header = new HttpHeaders();
- for (String key : context.getRequestCurrentHeaders().keySet()) {
- if (CommonConstant.HTTP_SERVICE.toLowerCase().equals(key.toLowerCase())) {
- continue;
- }
- header.add(key, context.getRequestCurrentHeaders().get(key));
- }
- header.add(CommonConstant.HTTP_SERVICE.toLowerCase(), appService.getServiceCode());
- try {
- if (CommonConstant.HTTP_METHOD_GET.equals(appService.getMethod())) {
- serviceUrl += "?";
- for (Object key : paramIn.keySet()) {
- serviceUrl += (key + "=" + paramIn.get(key) + "&");
- }
- if (serviceUrl.endsWith("&")) {
- serviceUrl = serviceUrl.substring(0, serviceUrl.lastIndexOf("&"));
- }
- httpEntity = new HttpEntity<String>("", header);
- responseEntity = tmpRestTemplate.exchange(serviceUrl, HttpMethod.GET, httpEntity, String.class);
- } else if (CommonConstant.HTTP_METHOD_PUT.equals(appService.getMethod())) {
- httpEntity = new HttpEntity<String>(JSONObject.toJSONString(paramIn), header);
- responseEntity = tmpRestTemplate.exchange(serviceUrl, HttpMethod.PUT, httpEntity, String.class);
- } else if (CommonConstant.HTTP_METHOD_DELETE.equals(appService.getMethod())) {
- httpEntity = new HttpEntity<String>(JSONObject.toJSONString(paramIn), header);
- responseEntity = tmpRestTemplate.exchange(serviceUrl, HttpMethod.DELETE, httpEntity, String.class);
- } else {
- httpEntity = new HttpEntity<String>(JSONObject.toJSONString(paramIn), header);
- responseEntity = tmpRestTemplate.exchange(serviceUrl, HttpMethod.POST, httpEntity, String.class);
- }
- } catch (HttpStatusCodeException e) { //这里spring 框架 在4XX 或 5XX 时抛出 HttpServerErrorException 异常,需要重新封装一下
- responseEntity = new ResponseEntity<String>( e.getResponseBodyAsString(), e.getStatusCode());
- }
- return responseEntity;
- }
- /**
- * 将rest 协议转为 订单协议
- *
- * @param businesses 多个业务
- * @param headers 订单头信息
- * @return
- */
- public JSONObject restToCenterProtocol(JSONArray businesses, Map<String, String> headers) {
- JSONObject centerProtocol = JSONObject.parseObject("{\"orders\":{},\"business\":[]}");
- freshOrderProtocol(centerProtocol.getJSONObject("orders"), headers);
- centerProtocol.put("business", businesses);
- return centerProtocol;
- }
- /**
- * 将rest 协议转为 订单协议
- *
- * @param business
- * @return
- */
- public JSONObject restToCenterProtocol(JSONObject business, Map<String, String> headers) {
- JSONObject centerProtocol = JSONObject.parseObject("{\"orders\":{},\"business\":[]}");
- freshOrderProtocol(centerProtocol.getJSONObject("orders"), headers);
- centerProtocol.getJSONArray("business").add(business);
- return centerProtocol;
- }
- /**
- * 刷入order信息
- *
- * @param orders 订单信息
- * @param headers 头部信息
- */
- public void freshOrderProtocol(JSONObject orders, Map<String, String> headers) {
- for (String key : headers.keySet()) {
- if (CommonConstant.HTTP_APP_ID.equals(key)) {
- orders.put("appId", headers.get(key));
- }
- if (CommonConstant.HTTP_TRANSACTION_ID.equals(key)) {
- orders.put("transactionId", headers.get(key));
- }
- if (CommonConstant.HTTP_SIGN.equals(key)) {
- orders.put("sign", headers.get(key));
- }
- if (CommonConstant.HTTP_REQ_TIME.equals(key)) {
- orders.put("requestTime", headers.get(key));
- }
- if (CommonConstant.HTTP_ORDER_TYPE_CD.equals(key)) {
- orders.put("orderTypeCd", headers.get(key));
- }
- if (CommonConstant.HTTP_USER_ID.equals(key)) {
- orders.put("userId", headers.get(key));
- }
- if(CommonConstant.ORDER_PROCESS.equals(key)){
- orders.put("orderProcess", headers.get(CommonConstant.ORDER_PROCESS));
- }
- }
- }
- /**
- * 刷入order信息
- *
- * @param httpHeaders http 头信息
- * @param headers 头部信息
- */
- public void freshHttpHeader(HttpHeaders httpHeaders, Map<String, String> headers) {
- for (String key : headers.keySet()) {
- if (CommonConstant.HTTP_APP_ID.equals(key)) {
- httpHeaders.add("app_id", headers.get(key));
- }
- if (CommonConstant.HTTP_TRANSACTION_ID.equals(key)) {
- httpHeaders.add("transaction_id", headers.get(key));
- }
- if (CommonConstant.HTTP_REQ_TIME.equals(key)) {
- httpHeaders.add("req_time", headers.get(key));
- }
- if (CommonConstant.HTTP_USER_ID.equals(key)) {
- httpHeaders.add("user_id", headers.get(key));
- }
- }
- }
- }
|