From 6bfbbc623a595caaeb03de206fef28e2aa0acad4 Mon Sep 17 00:00:00 2001
From: wuxw7 <wuxw7@asiainfo.com>
Date: 星期六, 26 五月 2018 17:01:34 +0800
Subject: [PATCH] 加入 接口透传功能
---
CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 170 insertions(+), 0 deletions(-)
diff --git a/CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java b/CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
index 9afb662..eef7768 100644
--- a/CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
+++ b/CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
@@ -21,6 +21,8 @@
import com.java110.service.smo.IQueryServiceSMO;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
@@ -41,6 +43,9 @@
@Autowired
private RestTemplate restTemplate;
+
+ @Autowired
+ private RestTemplate restTemplateNoLoadBalanced;
@Autowired
private IQueryServiceSMO queryServiceSMOImpl;
@@ -133,6 +138,93 @@
}
+ }
+
+ /**
+ * 閫忎紶澶勭悊
+ * @param reqJson
+ * @param headers
+ * @return
+ * @throws SMOException
+ */
+ @Override
+ public String serviceTransfer(String reqJson, Map<String, String> headers) throws SMOException {
+ DataFlow dataFlow = null;
+
+ String responseData = null;
+
+ String resJson = "";
+
+ try {
+ reqJson = decrypt(reqJson,headers);
+ //1.0 鍒涘缓鏁版嵁娴�
+ dataFlow = DataFlowFactory.newInstance(DataFlow.class).builderTransfer(reqJson, headers);
+ //2.0 鍔犺浇閰嶇疆淇℃伅
+ initConfigData(dataFlow);
+ //3.0 鏍¢獙 APPID鏄惁鏈夋潈闄愭搷浣渟erviceCode
+ judgeAuthority(dataFlow);
+ //4.0 璋冪敤瑙勫垯鏍¢獙
+ ruleValidate(dataFlow);
+ //5.0 淇濆瓨璁㈠崟鍜屼笟鍔¢」 c_orders c_order_attrs c_business c_business_attrs
+ //saveOrdersAndBusiness(dataFlow);
+ //6.0 璋冪敤涓嬫父绯荤粺
+ transferInvokeBusinessSystem(dataFlow);
+
+ responseData = DataTransactionFactory.createCommonResData(dataFlow);
+
+ } catch (DecryptException e){ //瑙e瘑寮傚父
+ responseData = DataTransactionFactory.createOrderResponseJson(ResponseConstant.NO_TRANSACTION_ID,
+ e.getResult().getCode(), e.getMessage()).toJSONString();
+ } catch (RuleException e) {
+ responseData = DataTransactionFactory.createOrderResponseJson(dataFlow.getTransactionId(),
+ e.getResult().getCode(), e.getMessage()).toJSONString();
+ } catch (NoAuthorityException e) {
+ responseData = DataTransactionFactory.createOrderResponseJson(dataFlow.getTransactionId(),
+ e.getResult().getCode(), e.getMessage()).toJSONString();
+ } catch (InitConfigDataException e){
+ responseData = DataTransactionFactory.createOrderResponseJson(dataFlow.getTransactionId(),
+ e.getResult().getCode(), e.getMessage()).toJSONString();
+ }catch (Exception e) {
+ logger.error("鍐呴儴寮傚父浜嗭細",e);
+ responseData = DataTransactionFactory.createOrderResponseJson(dataFlow == null
+ ? ResponseConstant.NO_TRANSACTION_ID
+ : dataFlow.getTransactionId(),
+ ResponseConstant.RESULT_CODE_INNER_ERROR, "鍐呴儴寮傚父浜嗭細" + e.getMessage() + e.getLocalizedMessage()).toJSONString();
+ } finally {
+ if(dataFlow != null) {
+ //杩欓噷璁板綍鏃ュ織
+ Date endDate = DateUtil.getCurrentDate();
+
+ dataFlow.setEndDate(endDate);
+ dataFlow.setResData(responseData);
+ //娣诲姞鑰楁椂
+ DataFlowFactory.addCostTime(dataFlow, "service", "涓氬姟澶勭悊鎬昏�楁椂", dataFlow.getStartDate(), dataFlow.getEndDate());
+
+ //杩欓噷淇濆瓨鑰楁椂锛屼互鍙婃棩蹇�
+ saveLogMessage(dataFlow.getReqJson(), dataFlow.getResJson());
+
+ //淇濆瓨鑰楁椂
+ saveCostTimeLogMessage(dataFlow);
+
+ //缁勮杩斿洖澶翠俊鎭�
+ putResponseHeader(dataFlow,headers);
+
+ //澶勭悊杩斿洖鎶ユ枃閴存潈
+ AuthenticationFactory.putSign(dataFlow, headers);
+ }
+ resJson = encrypt(responseData,headers);
+ return resJson;
+
+ }
+ }
+
+ /**
+ * 鎶掑啓杩斿洖澶翠俊鎭�
+ * @param dataFlow
+ */
+ private void putResponseHeader(DataFlow dataFlow,Map<String,String> headers) {
+ headers.put("responseTime", DateUtil.getDefaultFormateTimeString(new Date()));
+ headers.put("transactionId",dataFlow.getTransactionId());
}
/**
@@ -375,6 +467,40 @@
DataFlowFactory.addCostTime(dataFlow, "invokeBusinessSystem", "璋冪敤涓嬫父绯荤粺鑰楁椂", startDate);
}
+
+
+ /**
+ * 6.0 璋冪敤涓嬫父绯荤粺
+ *
+ * @param dataFlow
+ * @throws BusinessException
+ */
+ private void transferInvokeBusinessSystem(DataFlow dataFlow) throws BusinessException {
+ Date startDate = DateUtil.getCurrentDate();
+ /* if(MappingCache.getValue(MappingConstant.KEY_NO_INVOKE_BUSINESS_SYSTEM) != null
+ &&MappingCache.getValue(MappingConstant.KEY_NO_INVOKE_BUSINESS_SYSTEM).contains(dataFlow.getOrderTypeCd())){
+ //涓嶇敤璋冪敤 涓嬫父绯荤粺鐨勯厤缃�(涓�鑸笉瀛樺湪杩欑鎯呭喌锛岃繖閲屼富瑕佹槸鍦ㄦ病鏈変笅娓哥郴缁熺殑鎯呭喌涓嬫祴璇曚腑蹇冩湇鍔$敤)
+ DataFlowFactory.addCostTime(dataFlow, "invokeBusinessSystem", "璋冪敤涓嬫父绯荤粺鑰楁椂", startDate);
+ dataFlow.setResponseBusinessJson(DataTransactionFactory.createCommonResponseJson(dataFlow.getTransactionId(),
+ ResponseConstant.RESULT_CODE_SUCCESS, "鎴愬姛",null));
+ return ;
+ }*/
+
+ //6.1 鍏堝鐞嗗悓姝ユ柟寮忕殑鏈嶅姟锛屾瘡涓�鍚屾鍚庡彂甯冧簨浠跺箍鎾�
+ AppService service = DataFlowFactory.getService(dataFlow,dataFlow.getCurrentBusiness().getServiceCode());
+
+
+ String responseJson = doTransferRequestBusinessSystem(dataFlow, service, dataFlow.getCurrentBusiness().getTransferData());
+
+ dataFlow.setResData(responseJson);
+
+ DataFlowFactory.addCostTime(dataFlow,dataFlow.getCurrentBusiness().getServiceCode(), "璋冪敤"+dataFlow.getCurrentBusiness().getServiceCode()+"鑰楁椂", startDate);
+ saveLogMessage(dataFlow.getCurrentBusiness().getTransferData(),dataFlow.getResData());
+
+
+ DataFlowFactory.addCostTime(dataFlow, "invokeBusinessSystem", "璋冪敤涓嬫父绯荤粺鑰楁椂", startDate);
+ }
+
@@ -925,6 +1051,24 @@
return responseJson;
}
+ private String doTransferRequestBusinessSystem(DataFlow dataFlow, AppService service, String reqData) {
+ String responseMessage;
+ if(service.getMethod() == null || "".equals(service.getMethod())) {//post鏂瑰紡
+ //http://user-service/test/sayHello
+ HttpHeaders header = new HttpHeaders();
+ for(String key : dataFlow.getHeaders().keySet()){
+ header.add(key,dataFlow.getHeaders().get(key));
+ }
+ HttpEntity<String> httpEntity = new HttpEntity<String>(reqData, header);
+ responseMessage = restTemplateNoLoadBalanced.postForObject(service.getUrl(),httpEntity,String.class);
+ }else{//webservice鏂瑰紡
+ responseMessage = (String) WebServiceAxisClient.callWebService(service.getUrl(),service.getMethod(),
+ new Object[]{dataFlow.getRequestBusinessJson().toJSONString()},
+ service.getTimeOut());
+ }
+ return responseMessage;
+ }
+
/**
* 鏁版嵁淇濆瓨鍒癇usinessTable 涓�
* @param dataFlow
@@ -1010,6 +1154,24 @@
}
/**
+ * 淇濆瓨鏃ュ織淇℃伅
+ * @param requestJson
+ */
+ private void saveLogMessage(String requestJson,String responseJson){
+
+ try{
+ if(MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_LOG_ON_OFF))){
+ JSONObject log = new JSONObject();
+ log.put("request",requestJson);
+ log.put("response",responseJson);
+ KafkaFactory.sendKafkaMessage(KafkaConstant.TOPIC_LOG_NAME,"",log.toJSONString());
+ }
+ }catch (Exception e){
+ logger.error("鎶ラ敊鏃ュ織鍑洪敊浜嗭紝",e);
+ }
+ }
+
+ /**
* 淇濆瓨鑰楁椂淇℃伅
* @param dataFlow
*/
@@ -1071,4 +1233,12 @@
public void setQueryServiceSMOImpl(IQueryServiceSMO queryServiceSMOImpl) {
this.queryServiceSMOImpl = queryServiceSMOImpl;
}
+
+ public RestTemplate getRestTemplateNoLoadBalanced() {
+ return restTemplateNoLoadBalanced;
+ }
+
+ public void setRestTemplateNoLoadBalanced(RestTemplate restTemplateNoLoadBalanced) {
+ this.restTemplateNoLoadBalanced = restTemplateNoLoadBalanced;
+ }
}
--
Gitblit v1.8.0