From b497ff41e47f4ebe69b86f13f6972f34f33f4884 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期二, 01 六月 2021 09:35:46 +0800
Subject: [PATCH] Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity

---
 service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java |  120 ++++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 100 insertions(+), 20 deletions(-)

diff --git a/service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java b/service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java
old mode 100644
new mode 100755
index 023dcf7..caea3c9
--- a/service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java
+++ b/service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java
@@ -3,6 +3,18 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.api.smo.IApiServiceSMO;
+import com.java110.core.smo.ISaveTransactionLogSMO;
+import com.java110.core.client.RestTemplate;
+import com.java110.core.context.ApiDataFlow;
+import com.java110.core.context.DataFlow;
+import com.java110.core.event.service.api.ServiceDataFlowEventPublishing;
+import com.java110.core.factory.AuthenticationFactory;
+import com.java110.core.factory.DataFlowFactory;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.entity.center.AppRoute;
+import com.java110.entity.center.AppService;
+import com.java110.entity.center.DataFlowLinksCost;
+import com.java110.po.transactionLog.TransactionLogPo;
 import com.java110.utils.cache.AppRouteCache;
 import com.java110.utils.cache.MappingCache;
 import com.java110.utils.constant.CommonConstant;
@@ -20,16 +32,6 @@
 import com.java110.utils.log.LoggerEngine;
 import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
-import com.java110.core.client.RestTemplate;
-import com.java110.core.context.ApiDataFlow;
-import com.java110.core.context.DataFlow;
-import com.java110.core.factory.AuthenticationFactory;
-import com.java110.core.factory.DataFlowFactory;
-import com.java110.core.factory.GenerateCodeFactory;
-import com.java110.entity.center.AppRoute;
-import com.java110.entity.center.AppService;
-import com.java110.entity.center.DataFlowLinksCost;
-import com.java110.core.event.service.api.ServiceDataFlowEventPublishing;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -59,6 +61,9 @@
     @Autowired
     private RestTemplate outRestTemplate;
 
+    @Autowired
+    private ISaveTransactionLogSMO saveTransactionLogSMOImpl;
+
 
     /**
      * 鏈嶅姟璋冨害
@@ -73,7 +78,7 @@
 
         ApiDataFlow dataFlow = null;
 
-        //JSONObject responseJson = null;
+        Date startDate = DateUtil.getCurrentDate();
 
         ResponseEntity<String> responseEntity = null;
 
@@ -112,15 +117,10 @@
             responseEntity = new ResponseEntity<String>("鍐呴儴寮傚父锛�" + e.getMessage() + e.getLocalizedMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
 
         } finally {
+            Date endDate = DateUtil.getCurrentDate();
             if (dataFlow != null) {
                 //杩欓噷璁板綍鏃ュ織
-                Date endDate = DateUtil.getCurrentDate();
-
                 dataFlow.setEndDate(endDate);
-                //娣诲姞鑰楁椂
-                //DataFlowFactory.addCostTime(dataFlow, "service", "涓氬姟澶勭悊鎬昏�楁椂", dataFlow.getStartDate(), dataFlow.getEndDate());
-                //淇濆瓨鑰楁椂
-                //saveCostTimeLogMessage(dataFlow);
                 //澶勭悊杩斿洖鎶ユ枃閴存潈
                 //AuthenticationFactory.putSign(dataFlow);
             }
@@ -128,11 +128,83 @@
                 //resJson = encrypt(responseJson.toJSONString(),headers);
                 responseEntity = new ResponseEntity<String>(resJson, HttpStatus.OK);
             }
-            //杩欓噷淇濆瓨鑰楁椂锛屼互鍙婃棩蹇�
-            return responseEntity;
 
+            //娣诲姞鑰楁椂
+            saveLog(dataFlow, startDate, endDate, reqJson, responseEntity);
+            //杩欓噷淇濆瓨鑰楁椂锛屼互鍙婃棩蹇�
+        }
+        return responseEntity;
+    }
+
+    /**
+     * 鏃ュ織璁板綍
+     *
+     * @param dataFlow
+     * @param startDate
+     * @param endDate
+     */
+    private void saveLog(ApiDataFlow dataFlow, Date startDate, Date endDate, String reqJson, ResponseEntity<String> responseEntity) {
+
+        if (dataFlow == null) {
+            return;
         }
 
+        String serviceCode = dataFlow.getRequestHeaders().get(CommonConstant.HTTP_SERVICE);
+
+        String logServiceCode = MappingCache.getValue(MappingCache.LOG_SERVICE_CODE);
+
+        //鏃ュ織鏌ヨ涓嶈褰�
+        if ("/transactionLog/queryTransactionLog".equals(serviceCode)
+                || "/transactionLog/queryTransactionLogMessage".equals(serviceCode)
+                || "file.getFile".equals(serviceCode)
+                || "file.getFileByObjId".equals(serviceCode)
+                || "/machine/heartbeat".equals(serviceCode) // 蹇冭烦涔熶笉璁板綍
+        ) {
+            return;
+        }
+
+        if (StringUtil.isEmpty(logServiceCode)) {
+            return;
+        }
+        if (logServiceCode.contains("|")) {
+            String[] logServiceCodes = logServiceCode.split("|");
+
+            for (String lServiceCode : logServiceCodes) {
+                if (serviceCode.equals(lServiceCode.trim())) {
+                    doSaveLog(dataFlow, startDate, endDate, serviceCode, reqJson, responseEntity);
+                    return;
+                }
+            }
+        }
+
+        if ("all".equals(logServiceCode.trim().toLowerCase())) {
+            doSaveLog(dataFlow, startDate, endDate, serviceCode, reqJson, responseEntity);
+            return;
+        }
+
+        if (serviceCode.equals(logServiceCode.trim())) {
+            doSaveLog(dataFlow, startDate, endDate, serviceCode, reqJson, responseEntity);
+        }
+    }
+
+
+    private void doSaveLog(ApiDataFlow dataFlow, Date startDate, Date endDate, String serviceCode, String reqJson, ResponseEntity<String> responseEntity) {
+
+        TransactionLogPo transactionLogPo = new TransactionLogPo();
+        transactionLogPo.setAppId(dataFlow.getAppId());
+        transactionLogPo.setCostTime((endDate.getTime() - startDate.getTime()) + "");
+        transactionLogPo.setIp("");
+        transactionLogPo.setServiceCode(serviceCode);
+        transactionLogPo.setSrcIp(dataFlow.getRequestHeaders().get(CommonConstant.HTTP_SRC_IP));
+        transactionLogPo.setState(responseEntity.getStatusCode() != HttpStatus.OK ? "F" : "S");
+        transactionLogPo.setTimestamp(dataFlow.getRequestTime());
+        transactionLogPo.setUserId(dataFlow.getUserId());
+        transactionLogPo.setTransactionId(dataFlow.getTransactionId());
+        transactionLogPo.setRequestHeader(dataFlow.getRequestHeaders() != null ? dataFlow.getRequestHeaders().toString() : "");
+        transactionLogPo.setResponseHeader(responseEntity.getHeaders().toSingleValueMap().toString());
+        transactionLogPo.setRequestMessage(reqJson);
+        transactionLogPo.setResponseMessage(responseEntity.getBody());
+        saveTransactionLogSMOImpl.saveLog(transactionLogPo);
     }
 
 
@@ -244,7 +316,7 @@
         if (!StringUtil.isNullOrNone(dataFlow.getAppRoutes().get(0).getSecurityCode())) {
             String sign = AuthenticationFactory.apiDataFlowMd5(dataFlow);
             if (!sign.equals(dataFlow.getReqSign().toLowerCase())) {
-                throw new NoAuthorityException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR, "绛惧悕澶辫触"+sign);
+                throw new NoAuthorityException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR, "绛惧悕澶辫触");
             }
         }
 
@@ -309,6 +381,14 @@
                         "鏈嶅姟銆�" + appService.getServiceCode() + "銆戣皟鐢ㄦ柟寮忎笉瀵硅妫�鏌�,褰撳墠璇锋眰鏂瑰紡涓猴細" + httpMethod);
             }
             dataFlow.setApiCurrentService(ServiceCodeConstant.SERVICE_CODE_DO_SERVICE_TRANSFER);
+        } else if ("T".equals(appService.getIsInstance())) {
+            //濡傛灉鏄�忎紶绫� 璇锋眰鏂瑰紡蹇呴』涓庢帴鍙f彁渚涙柟璋冪敤鏂瑰紡涓�鑷�
+            String httpMethod = dataFlow.getRequestCurrentHeaders().get(CommonConstant.HTTP_METHOD);
+            if (!appService.getMethod().equals(httpMethod)) {
+                throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR,
+                        "鏈嶅姟銆�" + appService.getServiceCode() + "銆戣皟鐢ㄦ柟寮忎笉瀵硅妫�鏌�,褰撳墠璇锋眰鏂瑰紡涓猴細" + httpMethod);
+            }
+            dataFlow.setApiCurrentService(ServiceCodeConstant.SERVICE_CODE_SYSTEM_TRANSFER);
         } else {
             dataFlow.setApiCurrentService(dataFlow.getRequestHeaders().get(CommonConstant.HTTP_SERVICE));
         }

--
Gitblit v1.8.0