From 3d019610083e00f67dc460217f4bed03dc069c39 Mon Sep 17 00:00:00 2001
From: wuxw7 <wuxw7@asiainfo.com>
Date: 星期四, 07 六月 2018 15:13:49 +0800
Subject: [PATCH] 生成ID统一走codeService

---
 java110-common/src/main/java/com/java110/common/util/SequenceUtil.java |  149 +++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 137 insertions(+), 12 deletions(-)

diff --git a/java110-common/src/main/java/com/java110/common/util/SequenceUtil.java b/java110-common/src/main/java/com/java110/common/util/SequenceUtil.java
index 0d1ce57..77ba1c4 100644
--- a/java110-common/src/main/java/com/java110/common/util/SequenceUtil.java
+++ b/java110-common/src/main/java/com/java110/common/util/SequenceUtil.java
@@ -1,8 +1,20 @@
 package com.java110.common.util;
 
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.cache.MappingCache;
+import com.java110.common.constant.MappingConstant;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.exception.GenerateCodeException;
+import com.java110.common.exception.ResponseErrorException;
+import com.java110.common.factory.ApplicationContextFactory;
+import org.springframework.web.client.RestTemplate;
+
+import java.rmi.NoSuchObjectException;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
@@ -16,9 +28,26 @@
     private static final Lock LOCK = new ReentrantLock();
     private static short lastCount = 1;
     private static int count = 0;
-    private static DateFormat dateFormatDay = new SimpleDateFormat("yyyyMMdd");
-    private static DateFormat dateFormatMinute = new SimpleDateFormat("yyyyMMddhhmmss");
     private static final String first = "10";
+
+    /**
+     *
+     * 鍙湁鍦ㄤ笉璋冪敤鏈嶅姟鐢熸垚ID鏃舵湁鐢�
+     */
+    private static Map<String,String> prefixMap = null;
+    static {
+        prefixMap = new HashMap<String,String>();
+        //10+yyyymmdd+鍏綅搴忓垪
+        prefixMap.put("oId","10");
+        //锛�20+yyyymmdd+鍏綅搴忓垪锛�
+        prefixMap.put("bId","20");
+        //锛�11+yyyymmdd+鍏綅搴忓垪锛�
+        prefixMap.put("attrId","11");
+        prefixMap.put("transactionId","1000001");
+        prefixMap.put("pageTransactionId","1000002");
+        prefixMap.put("dataFlowId","2000");
+        prefixMap.put("userId","3000");
+    }
 
     private static String PLATFORM_CODE = "0001";
 
@@ -49,26 +78,122 @@
 
         //浠庡唴瀛樹腑鑾峰彇骞冲彴闅忔満鐮�
 
-        return first + PLATFORM_CODE + dateFormatDay.format(new Date()) + nextId();
+        return prefixMap.get("transactionId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId();
     }
 
     /**
-     * 鍒涘缓鑳藉姏骞冲彴浜や簰 娴佹按
-     * SVC90005
+     * 鑾峰彇浜ゆ槗娴佹按ID
      *
-     * 90001 20170314094355 10000018
      * @return
      */
-    public static String getSVC90005TransactionId(){
-        return "90001"+ dateFormatMinute.format(new Date()) +"99" + nextId();
+    public static String getPageTransactionId() {
+
+        //浠庡唴瀛樹腑鑾峰彇骞冲彴闅忔満鐮�
+
+        return prefixMap.get("pageTransactionId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId();
     }
 
+    public static String getOId() throws GenerateCodeException{
+        if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){
+            return prefixMap.get("oId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%08d");
+        }
+        return getCode(prefixMap.get("oId"));
+    }
+
+
     /**
-     * 6004050001201703141105137879
-     * dateFormatMinute
+     * 鏌ヨCode
+     * @param prefix
+     * @return
+     * @throws GenerateCodeException
+     */
+    private static String getCode(String prefix) throws GenerateCodeException{
+        //璋冪敤鏈嶅姟
+        String code = "-1";
+        try {
+            String responseMessage = restTemplate().postForObject(MappingCache.getValue(MappingConstant.KEY_CODE_PATH),
+                    createCodeRequestJson(getTransactionId(),prefix,prefix).toJSONString(), String.class);
+
+            Assert.jsonObjectHaveKey(responseMessage, "code", "缂栫爜鐢熸垚绯荤粺 杩斿洖鎶ユ枃閿欒" + responseMessage);
+
+            JSONObject resJson = JSONObject.parseObject(responseMessage);
+
+            if (!ResponseConstant.RESULT_CODE_SUCCESS.equals(resJson.getString("code"))) {
+                throw new ResponseErrorException(resJson.getString("code"), "鐢熸垚oId缂栫爜澶辫触 "
+                        + resJson.getString("message"));
+            }
+            code = resJson.getString("id");
+        }catch (Exception e){
+            throw new GenerateCodeException(ResponseConstant.RESULT_CODE_ERROR,e.getMessage());
+        }
+        finally {
+            return code;
+        }
+
+    }
+
+    public static String getBId()  throws GenerateCodeException{
+        if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){
+            return prefixMap.get("bId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%08d");
+        }
+        //璋冪敤鏈嶅姟
+        return getCode(prefixMap.get("bId"));
+    }
+
+    public static String getAttrId()  throws GenerateCodeException{
+        if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){
+            return prefixMap.get("attrId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%08d");
+        }
+        //璋冪敤鏈嶅姟
+        return getCode(prefixMap.get("attrId"));
+    }
+
+    public static String getDataFlowId()  throws GenerateCodeException{
+        if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){
+            return prefixMap.get("dataFlowId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%08d");
+        }
+
+        return getCode(prefixMap.get("dataFlowId"));
+
+    }
+
+    public static String getUserId()  throws GenerateCodeException{
+        if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){
+            return prefixMap.get("userId") + nextId("%08d");
+        }
+        //璋冪敤鏈嶅姟
+        return getCode(prefixMap.get("userId"));
+    }
+
+
+    /**
+     * 鑾峰彇restTemplate
+     * @return
+     * @throws NoSuchObjectException
+     */
+    private static RestTemplate restTemplate() throws NoSuchObjectException{
+
+       Object bean = ApplicationContextFactory.getBean("restTemplate");
+
+       if(bean == null){
+           throw new NoSuchObjectException("娌℃湁鎵惧埌restTemplate瀵硅薄锛岃鏍稿疄");
+       }
+
+       return (RestTemplate) bean;
+    }
+
+
+    /**
+     * ID鐢熸垚璇锋眰鎶ユ枃
+     * @param transactionId
      * @return
      */
-    public static String getInvokeSAOPTransactionId(){
-        return "6004050001"+dateFormatMinute.format(new Date())+nextId("%04d");
+    private static JSONObject createCodeRequestJson(String transactionId, String prefix, String name){
+        JSONObject paramOut = JSONObject.parseObject("{}");
+        paramOut.put("transactionId",transactionId);
+        paramOut.put("prefix",prefix);
+        paramOut.put("name",name);
+        paramOut.put("requestTime",DateUtil.getNowDefault());
+        return paramOut;
     }
 }

--
Gitblit v1.8.0