From 05683f2b2bdbdbe21cf17ad523c21ab338bd1c54 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期二, 19 七月 2022 21:49:55 +0800
Subject: [PATCH] 优化添加设备 功能
---
springboot/src/main/java/com/java110/boot/smo/impl/ApiServiceSMOImpl.java | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 156 insertions(+), 4 deletions(-)
diff --git a/springboot/src/main/java/com/java110/boot/smo/impl/ApiServiceSMOImpl.java b/springboot/src/main/java/com/java110/boot/smo/impl/ApiServiceSMOImpl.java
index e5736cd..0cebfaf 100644
--- a/springboot/src/main/java/com/java110/boot/smo/impl/ApiServiceSMOImpl.java
+++ b/springboot/src/main/java/com/java110/boot/smo/impl/ApiServiceSMOImpl.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.aliyuncs.utils.StringUtils;
import com.java110.boot.smo.IApiServiceSMO;
import com.java110.core.client.RestTemplate;
import com.java110.core.context.ApiDataFlow;
@@ -13,6 +14,7 @@
import com.java110.core.log.LoggerFactory;
import com.java110.core.smo.ISaveTransactionLogSMO;
import com.java110.core.trace.Java110TraceLog;
+import com.java110.dto.order.OrderDto;
import com.java110.entity.center.AppRoute;
import com.java110.entity.center.AppService;
import com.java110.entity.center.DataFlowLinksCost;
@@ -29,9 +31,9 @@
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
import org.springframework.stereotype.Service;
+import org.springframework.web.client.HttpStatusCodeException;
import java.util.Date;
import java.util.List;
@@ -385,7 +387,8 @@
throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR,
"鏈嶅姟銆�" + appService.getServiceCode() + "銆戣皟鐢ㄦ柟寮忎笉瀵硅妫�鏌�,褰撳墠璇锋眰鏂瑰紡涓猴細" + httpMethod);
}
- dataFlow.setApiCurrentService(ServiceCodeConstant.SERVICE_CODE_SYSTEM_TRANSFER);
+ doTransfer(appService,dataFlow,dataFlow.getReqJson());
+ return;
} else if ("CMD".equals(appService.getIsInstance())) {
//濡傛灉鏄�忎紶绫� 璇锋眰鏂瑰紡蹇呴』涓庢帴鍙f彁渚涙柟璋冪敤鏂瑰紡涓�鑷�
String httpMethod = dataFlow.getRequestCurrentHeaders().get(CommonConstant.HTTP_METHOD);
@@ -393,7 +396,8 @@
throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR,
"鏈嶅姟銆�" + appService.getServiceCode() + "銆戣皟鐢ㄦ柟寮忎笉瀵硅妫�鏌�,褰撳墠璇锋眰鏂瑰紡涓猴細" + httpMethod);
}
- dataFlow.setApiCurrentService(ServiceCodeConstant.SERVICE_CODE_SYSTEM_CMD);
+ dealCmd(appService,dataFlow,dataFlow.getReqJson());
+ return ;
} else {
dataFlow.setApiCurrentService(dataFlow.getRequestHeaders().get(CommonConstant.HTTP_SERVICE));
}
@@ -401,6 +405,154 @@
DataFlowFactory.addCostTime(dataFlow, "invokeBusinessSystem", "璋冪敤涓嬫父绯荤粺鑰楁椂", startDate);
}
+ private void doTransfer(AppService appService, ApiDataFlow dataFlow, JSONObject reqJson) {
+
+ Map<String, String> reqHeader = dataFlow.getRequestCurrentHeaders();
+ HttpHeaders header = new HttpHeaders();
+ for (String key : dataFlow.getRequestCurrentHeaders().keySet()) {
+ header.add(key, reqHeader.get(key));
+ }
+ HttpEntity<String> httpEntity = new HttpEntity<String>(reqJson.toJSONString(), header);
+ String orgRequestUrl = dataFlow.getRequestHeaders().get("REQUEST_URL");
+
+ //String serviceCode = "/" + reqHeader.get(CommonConstant.HTTP_RESOURCE) + "/" + reqHeader.get(CommonConstant.HTTP_ACTION);
+ String serviceCode = appService.getServiceCode();
+ serviceCode = serviceCode.startsWith("/") ? serviceCode : ("/" + serviceCode);
+
+ String requestUrl = "http://127.0.0.1:8008" + serviceCode;
+
+ ResponseEntity responseEntity = null;
+ if (!StringUtil.isNullOrNone(orgRequestUrl)) {
+ String param = orgRequestUrl.contains("?") ? orgRequestUrl.substring(orgRequestUrl.indexOf("?") + 1, orgRequestUrl.length()) : "";
+ requestUrl += ("?" + param);
+ }
+ try {
+ if (CommonConstant.HTTP_METHOD_GET.equals(appService.getMethod())) {
+ responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.GET, httpEntity, String.class);
+ } else if (CommonConstant.HTTP_METHOD_PUT.equals(appService.getMethod())) {
+ responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.PUT, httpEntity, String.class);
+ } else if (CommonConstant.HTTP_METHOD_DELETE.equals(appService.getMethod())) {
+ responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.DELETE, httpEntity, String.class);
+ } else {
+ responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.POST, httpEntity, String.class);
+ }
+ HttpHeaders headers = responseEntity.getHeaders();
+ String oId = "-1";
+ if (headers.containsKey(OrderDto.O_ID)) {
+ oId = headers.get(OrderDto.O_ID).get(0);
+ }
+
+ //杩涘叆databus
+ if (!CommonConstant.HTTP_METHOD_GET.equals(appService.getMethod())) {
+
+ // dealDatabus(serviceCode, reqJson, oId);
+ }
+
+
+ } catch (HttpStatusCodeException e) { //杩欓噷spring 妗嗘灦 鍦�4XX 鎴� 5XX 鏃舵姏鍑� HttpServerErrorException 寮傚父锛岄渶瑕侀噸鏂板皝瑁呬竴涓�
+ logger.error("璇锋眰涓嬫父鏈嶅姟銆�" + requestUrl + "銆戝紓甯革紝鍙傛暟涓�" + httpEntity + e.getResponseBodyAsString(), e);
+ String body = e.getResponseBodyAsString();
+
+ if (StringUtil.isJsonObject(body)) {
+ JSONObject bodyObj = JSONObject.parseObject(body);
+ if (bodyObj.containsKey("message") && !StringUtil.isEmpty(bodyObj.getString("message"))) {
+ body = bodyObj.getString("message");
+ }
+ }
+ responseEntity = new ResponseEntity<String>(body, e.getStatusCode());
+ }
+
+ logger.debug("API 鏈嶅姟璋冪敤涓嬫父鏈嶅姟璇锋眰锛歿}锛岃繑鍥炰负锛歿}", httpEntity, responseEntity);
+
+ if (responseEntity.getStatusCode() != HttpStatus.OK) {
+ responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_ERROR, String.valueOf(responseEntity.getBody()));
+ dataFlow.setResponseEntity(responseEntity);
+
+ return;
+ }
+ if (StringUtils.isEmpty(responseEntity.getBody() + "")) {
+ responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "澶勭悊澶辫触");
+ dataFlow.setResponseEntity(responseEntity);
+ return;
+ }
+ JSONObject resParam = JSONObject.parseObject(responseEntity.getBody() + "");
+ if (resParam.containsKey("code") && resParam.containsKey("msg")) { // 璇存槑寰湇鍔¤繑鍥炵殑鏄� resultVo 瀵硅薄鐩存帴杩斿洖灏卞彲浠�
+ dataFlow.setResponseEntity(responseEntity);
+ return;
+ }
+ responseEntity = ResultVo.createResponseEntity(resParam);
+ dataFlow.setResponseEntity(responseEntity);
+ }
+
+ private void dealCmd(AppService appService,ApiDataFlow dataFlow,JSONObject reqJson) {
+ Map<String, String> reqHeader = dataFlow.getRequestCurrentHeaders();
+ HttpHeaders header = new HttpHeaders();
+ for (String key : dataFlow.getRequestCurrentHeaders().keySet()) {
+ header.add(key, reqHeader.get(key));
+ }
+ if (reqHeader.containsKey(CommonConstant.USER_ID)
+ && (!reqJson.containsKey("userId") || StringUtil.isEmpty(reqJson.getString("userId")))) {
+ reqJson.put("userId", reqHeader.get(CommonConstant.USER_ID));
+ }
+ if (reqHeader.containsKey(CommonConstant.USER_ID)
+ && (!reqJson.containsKey("loginUserId") || StringUtil.isEmpty(reqJson.getString("loginUserId")))) {
+ reqJson.put("loginUserId", reqHeader.get(CommonConstant.LOGIN_U_ID));
+ }
+ if (reqHeader.containsKey(CommonConstant.STORE_ID)
+ && (!reqJson.containsKey("storeId") || StringUtil.isEmpty(reqJson.getString("storeId")))) {
+ reqJson.put("storeId", reqHeader.get(CommonConstant.STORE_ID));
+ }
+ HttpEntity<String> httpEntity = new HttpEntity<String>(reqJson.toJSONString(), header);
+ String orgRequestUrl = dataFlow.getRequestHeaders().get("REQUEST_URL");
+
+ String serviceCode = appService.getServiceCode();
+
+ serviceCode = serviceCode.startsWith("/") ? serviceCode : ("/" + serviceCode);
+
+ String requestUrl = "http://127.0.0.1:8008/cmd" + serviceCode;
+ //
+ ResponseEntity responseEntity = null;
+ if (!StringUtil.isNullOrNone(orgRequestUrl)) {
+ String param = orgRequestUrl.contains("?") ? orgRequestUrl.substring(orgRequestUrl.indexOf("?") + 1, orgRequestUrl.length()) : "";
+ requestUrl += ("?" + param);
+ }
+ try {
+ responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.POST, httpEntity, String.class);
+ HttpHeaders headers = responseEntity.getHeaders();
+ String oId = "-1";
+ if (headers.containsKey(OrderDto.O_ID)) {
+ oId = headers.get(OrderDto.O_ID).get(0);
+ }
+
+ } catch (HttpStatusCodeException e) { //杩欓噷spring 妗嗘灦 鍦�4XX 鎴� 5XX 鏃舵姏鍑� HttpServerErrorException 寮傚父锛岄渶瑕侀噸鏂板皝瑁呬竴涓�
+ logger.error("璇锋眰涓嬫父鏈嶅姟銆�" + requestUrl + "銆戝紓甯革紝鍙傛暟涓�" + httpEntity + e.getResponseBodyAsString(), e);
+ String body = e.getResponseBodyAsString();
+
+ if (StringUtil.isJsonObject(body)) {
+ JSONObject bodyObj = JSONObject.parseObject(body);
+ if (bodyObj.containsKey("message") && !StringUtil.isEmpty(bodyObj.getString("message"))) {
+ body = bodyObj.getString("message");
+ }
+ }
+ responseEntity = new ResponseEntity<String>(body, e.getStatusCode());
+ }
+
+ logger.debug("API 鏈嶅姟璋冪敤涓嬫父鏈嶅姟璇锋眰锛歿}锛岃繑鍥炰负锛歿}", httpEntity, responseEntity);
+
+ if (responseEntity.getStatusCode() != HttpStatus.OK) {
+ responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_ERROR, String.valueOf(responseEntity.getBody()));
+ dataFlow.setResponseEntity(responseEntity);
+
+ return;
+ }
+ if (StringUtils.isEmpty(responseEntity.getBody() + "")) {
+ responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "澶勭悊澶辫触");
+ dataFlow.setResponseEntity(responseEntity);
+ return;
+ }
+ dataFlow.setResponseEntity(responseEntity);
+ }
+
/**
* 淇濆瓨鏃ュ織淇℃伅
--
Gitblit v1.8.0