From 35700e8cd5f2b25b672a9d62c170bc3f49a6ef1d Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期五, 05 二月 2021 17:01:03 +0800
Subject: [PATCH] 加入问卷 标题

---
 java110-core/src/main/java/com/java110/core/factory/Java110TransactionalFactory.java |   88 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 3 deletions(-)

diff --git a/java110-core/src/main/java/com/java110/core/factory/Java110TransactionalFactory.java b/java110-core/src/main/java/com/java110/core/factory/Java110TransactionalFactory.java
index d49dcc9..c220c19 100644
--- a/java110-core/src/main/java/com/java110/core/factory/Java110TransactionalFactory.java
+++ b/java110-core/src/main/java/com/java110/core/factory/Java110TransactionalFactory.java
@@ -44,12 +44,25 @@
      */
     private static final String FALLBACK_O_ID = URL_API + "/fallBackOId";
 
+    /**
+     * 鍥為��浜嬪姟ID
+     */
+    private static final String FINISH_O_ID = URL_API + "/finishOId";
+
 
     //鍏ㄥ眬浜嬪姟ID
     public static final String O_ID = "O-ID";
 
     //褰撳墠鏈嶅姟ID
     public static final String SERVICE_ID = "SERVICE-ID";
+
+    //鏈嶅姟瑙掕壊 鍒涘缓浜嬪姟鑰� 杩樻槸 瑙傚療鑰�
+    public static final String SERVICE_ROLE = "SERVICE-ROLE";
+
+    //鍒涘缓鑰�
+    public static final String ROLE_CREATE = "creator";
+
+    public static final String ROLE_OBSERVER = "observer";
 
     private static ThreadLocal<Map<String, String>> threadLocal = new ThreadLocal<Map<String, String>>() {
         @Override
@@ -78,9 +91,28 @@
         //鍏ㄥ眬浜嬪姟寮�鍚��
         if (StringUtils.isEmpty(orderDto.getoId())) {
             createOId(orderDto);
+            put(SERVICE_ROLE, ROLE_CREATE);
+        } else {
+            put(SERVICE_ROLE, ROLE_OBSERVER);//瑙傚療鑰�
         }
-        String oId = get(O_ID);
-        return oId;
+        //灏嗕簨鍔D 瀛樻斁璧锋潵
+        put(O_ID, orderDto.getoId());
+        return orderDto.getoId();
+    }
+
+    /**
+     * 娓呯悊浜嬪姟
+     */
+    public static void clearOId() {
+        //娓呯悊浜嬪姟
+        if(!StringUtil.isEmpty(getOId())) {
+            remove(O_ID);
+        }
+        //娓呯悊瑙掕壊
+        if(!StringUtil.isEmpty(getServiceRole())) {
+            remove(SERVICE_ROLE);
+        }
+
     }
 
     /**
@@ -90,6 +122,17 @@
      */
     public static String getOId() {
         String oId = get(O_ID);
+        return oId;
+    }
+
+
+    /**
+     * 鑾峰彇浜嬪姟ID
+     *
+     * @return
+     */
+    public static String getServiceRole() {
+        String oId = get(SERVICE_ROLE);
         return oId;
     }
 
@@ -129,8 +172,9 @@
      * 澶勭悊澶辫触锛屽洖閫�浜嬪姟
      */
     public static void fallbackOId() {
+
         String oId = getOId();
-        if (StringUtil.isEmpty(oId)) {
+        if (StringUtil.isEmpty(oId) || ROLE_OBSERVER.equals(getServiceRole())) {
             //褰撳墠娌℃湁寮�鍚簨鍔℃棤闇�鍥為��
             logger.debug("褰撳墠娌℃湁寮�鍚簨鍔℃棤闇�鍥為��");
             return;
@@ -162,4 +206,42 @@
         }
 
     }
+
+    /**
+     * 澶勭悊澶辫触锛屽洖閫�浜嬪姟
+     */
+    public static void finishOId() {
+        String oId = getOId();
+        if (StringUtil.isEmpty(oId) || ROLE_OBSERVER.equals(getServiceRole())) {
+            //褰撳墠娌℃湁寮�鍚簨鍔℃棤闇�鍥為��
+            logger.debug("褰撳墠娌℃湁寮�鍚簨鍔℃棤闇�鍥為��");
+            return;
+        }
+        OrderDto orderDto = new OrderDto();
+        orderDto.setoId(oId);
+        RestTemplate restTemplate = ApplicationContextFactory.getBean("restTemplate", RestTemplate.class);
+        HttpHeaders header = new HttpHeaders();
+        HttpEntity<String> httpEntity = new HttpEntity<String>(JSONObject.toJSONString(orderDto), header);
+        ResponseEntity<String> responseEntity = null;
+        try {
+            responseEntity = restTemplate.exchange(FINISH_O_ID, HttpMethod.POST, httpEntity, String.class);
+        } catch (HttpStatusCodeException e) { //杩欓噷spring 妗嗘灦 鍦�4XX 鎴� 5XX 鏃舵姏鍑� HttpServerErrorException 寮傚父锛岄渶瑕侀噸鏂板皝瑁呬竴涓�
+            responseEntity = new ResponseEntity<String>(e.getResponseBodyAsString(), e.getStatusCode());
+        } catch (Exception e) {
+            responseEntity = new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        } finally {
+            logger.debug("瀹屾垚浜嬪姟 璇锋眰鍦板潃涓�,{} 璇锋眰璁㈠崟鏈嶅姟淇℃伅锛寋},璁㈠崟鏈嶅姟杩斿洖淇℃伅锛寋}", FINISH_O_ID, httpEntity, responseEntity);
+        }
+
+        if (responseEntity.getStatusCode() == HttpStatus.NOT_FOUND) {
+            //褰撳墠娌℃湁寮�鍚簨鍔℃棤闇�鍥為��
+            logger.debug("褰撳墠娌℃湁寮�鍚簨鍔℃棤闇�澶勭悊");
+            return;
+        }
+
+        if (responseEntity.getStatusCode() == HttpStatus.BAD_REQUEST) {
+            throw new IllegalArgumentException("瀹屾垚浜嬪姟澶辫触" + responseEntity.getBody());
+        }
+
+    }
 }

--
Gitblit v1.8.0