Przeglądaj źródła

2.0 from 处理 不支持字段中包含from

pms 2 lat temu
rodzic
commit
493cd51711

+ 12 - 0
.idea/dataSources.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="DataSourceManagerImpl" format="xml" multifile-model="true">
+    <data-source source="LOCAL" name="@192.168.3.189" uuid="1a86f6bd-4664-4d94-a8e5-fe31c0204bc3">
+      <driver-ref>mysql.8</driver-ref>
+      <synchronize>true</synchronize>
+      <jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
+      <jdbc-url>jdbc:mysql://192.168.3.189:3306</jdbc-url>
+      <working-dir>$ProjectFileDir$</working-dir>
+    </data-source>
+  </component>
+</project>

+ 15 - 0
.idea/deployment.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PublishConfigData" serverName="10.211.66.23/app" remoteFilesAllowedToDisappearOnAutoupload="false">
+    <serverData>
+      <paths name="10.211.66.23/app">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$/mainFactory" web="/" />
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+    </serverData>
+  </component>
+</project>

+ 8 - 0
.idea/sshConfigs.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="SshConfigs">
+    <configs>
+      <sshConfig authType="PASSWORD" host="10.211.66.23" id="5921dcbb-e2b3-4ac1-a451-2ae8f4089b98" port="22" nameFormat="DESCRIPTIVE" username="root" useOpenSSHConfig="true" />
+    </configs>
+  </component>
+</project>

+ 14 - 0
.idea/webServers.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="WebServers">
+    <option name="servers">
+      <webServer id="b9c5d0ae-68ec-42f4-9b5e-5090a4b1a5d6" name="10.211.66.23/app">
+        <fileTransfer rootFolder="/app" accessType="SFTP" host="10.211.66.23" port="22" sshConfigId="5921dcbb-e2b3-4ac1-a451-2ae8f4089b98" sshConfig="root@10.211.66.23:22 password">
+          <advancedOptions>
+            <advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" />
+          </advancedOptions>
+        </fileTransfer>
+      </webServer>
+    </option>
+  </component>
+</project>

+ 17 - 10
mainFactory/src/main/java/org/bfkj/MainFactoryApplication.java

@@ -11,7 +11,6 @@ import org.bfkj.utils.MapTools;
 import org.bfkj.utils.MyDbHelper;
 import org.bfkj.utils.ScheduleUtil;
 import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@@ -34,11 +33,14 @@ public class MainFactoryApplication implements InitializingBean {
     private final String INSERT_SQL = "INSERT INTO log_success ( success, location, logContent, createtime, serviceId, workId, event, iNDataContent, outDataContent, calculationLocation, dataObjectId) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
     private final String ERROR_SQL = "INSERT INTO log_error ( success, location, logContent, createtime, serviceId, workId, event, iNDataContent, outDataContent, calculationLocation, dataObjectId) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
 
-    @Autowired
     private RemoteDB remoteDB;
-    @Autowired
     private RemoteLogDB remoteLogDB;
 
+    public MainFactoryApplication(RemoteDB remoteDB, RemoteLogDB remoteLogDB) {
+        this.remoteDB = remoteDB;
+        this.remoteLogDB = remoteLogDB;
+    }
+
     /*服务初始化: 启动服务*/
     public static void main(String[] args) {
         String path = System.getProperty("user.dir"); //获取当前项目的路径
@@ -275,14 +277,19 @@ public class MainFactoryApplication implements InitializingBean {
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     public void afterPropertiesSet() {
-        Map<String,Object> mapDB = (Map<String, Object>) MapTools.strToObj( MapTools.objToJSONStr(remoteDB));
-        mapDB.put("driver-class-name",mapDB.get("driverClassName"));
-        AppConfig.REMOTE_DB_CONNECT = MapTools.objToJSONStr(mapDB);
+        try {
+            Map<String, Object> mapDB = (Map<String, Object>) MapTools.strToObj(MapTools.objToJSONStr(remoteDB));
+            mapDB.put("driver-class-name", mapDB.get("driverClassName"));
+            AppConfig.REMOTE_DB_CONNECT = MapTools.objToJSONStr(mapDB);
 
-        Map<String,Object> maplogDB = (Map<String, Object>) MapTools.strToObj(MapTools.objToJSONStr(remoteLogDB));
-        maplogDB.put("driver-class-name",maplogDB.get("driverClassName"));
-        AppConfig.REMOTE_DB_LOG_CONNECT = MapTools.objToJSONStr(maplogDB);
-        AppConfig.serviceURL =remoteDB.getServiceURL();
+            Map<String, Object> maplogDB = (Map<String, Object>) MapTools.strToObj(MapTools.objToJSONStr(remoteLogDB));
+            maplogDB.put("driver-class-name", maplogDB.get("driverClassName"));
+            AppConfig.REMOTE_DB_LOG_CONNECT = MapTools.objToJSONStr(maplogDB);
+            AppConfig.serviceURL = remoteDB.getServiceURL();
+        } catch (Exception e) {
+            System.out.println("配置文件中,连接数据库信息错误");
+        }
     }
 }

+ 10 - 9
mainFactory/src/main/java/org/bfkj/api/CommonApi.java

@@ -42,7 +42,6 @@ public class CommonApi {
             return errMap;
         }
         return authApplication.abnormalDataRecovery(params);
-
     }
 
     /**
@@ -51,7 +50,16 @@ public class CommonApi {
     @PostMapping("query")
     @ResponseBody
     public Object queryApi(@RequestHeader Map<String, String> token, @RequestBody Map<String, Object> params) {
-        Map<String, Object> stringObjectMap = commonInterface(token, params, "0");
+        Map<String, Object> stringObjectMap;
+        if (params.containsKey("id") && !params.containsKey("serviceId")) {
+            Map<String, Object> callBack = new HashMap<>();
+            callBack.put("serviceId", "200241");
+            callBack.put("dataContent", params);
+            callBack.put("event", "0");
+            stringObjectMap = commonInterface(token, callBack, "0");
+        } else {
+            stringObjectMap = commonInterface(token, params, "0");
+        }
         return stringObjectMap;
     }
 
@@ -85,13 +93,6 @@ public class CommonApi {
         return commonInterface(token, params, "3");
     }
 
-
-
-
-
-
-
-
     /**
      * 统一接收处理
      */

+ 27 - 9
mainFactory/src/main/java/org/bfkj/application/DataProcess.java

@@ -184,7 +184,7 @@ public class DataProcess {//数据处理对象
                             System.out.println("权限集成执行异常".concat(authExtendMapList.get("message").toString()));
                             return;
                         }
-                        Object nextRule =authExtendMapList.get("returnData") instanceof List<?> tempList && !tempList.isEmpty() && tempList.get(0) instanceof Map tempMap ? tempMap.get("nextRule"):null;  // t_user_group.up_user_groupid
+                        Object nextRule = authExtendMapList.get("returnData") instanceof List<?> tempList && !tempList.isEmpty() && tempList.get(0) instanceof Map tempMap ? tempMap.get("nextRule") : null;  // t_user_group.up_user_groupid
                         String tempRowAuth = rowAuthObj.toString();
                         String connect = tempRowAuth.startsWith("!") ? "!=" : "=";//如果首位是!代表不等于,否则代表等于
                         tempRowAuth = tempRowAuth.startsWith("!") ? tempRowAuth.substring(1) : tempRowAuth;//修订行权限表达式
@@ -237,9 +237,9 @@ public class DataProcess {//数据处理对象
         if ("-1".equals(queryAuthReturnList.get("code")) || ((List) queryAuthReturnList.get("returnData")).isEmpty()) {
             return returnData;
         }
-        ((List<Map<String,Object>>) queryAuthReturnList.get("returnData")).stream().filter(Objects::nonNull).forEach(authvalue -> {
+        ((List<Map<String, Object>>) queryAuthReturnList.get("returnData")).stream().filter(Objects::nonNull).forEach(authvalue -> {
             returnData.add(authvalue.get(columnName)); // 5
-            returnData.addAll(extendNextAuth(columnName,authvalue.get(columnName).toString(), nextRule));
+            returnData.addAll(extendNextAuth(columnName, authvalue.get(columnName).toString(), nextRule));
         });
         return returnData;
     }
@@ -381,7 +381,7 @@ public class DataProcess {//数据处理对象
     /*数据订阅:注意因前置导致算法未执行时,全量结果集的序号会存在问题*/
     private Object dataSubscription(List<Map<String, Object>> calcAllData, String paramRule, Map<String, Object> calculationLibrary) { // List.1.returnData.0
         try {
-            String[] itemRule = paramRule.split("\\.",-1);//订阅规则按.进行分割
+            String[] itemRule = paramRule.split("\\.", -1);//订阅规则按.进行分割
             String dataType = itemRule.length > 0 ? itemRule[0] : "List"; //首位是最终返回的数据类型
             dataType = dataType.endsWith("]") ? dataType.substring(0, dataType.indexOf("[")) : dataType;//订阅时需要把[]去掉,在调用脚本引擎时进行分解
             String dataLocation = itemRule.length > 1 ? itemRule[1] : ""; //数据位置:代表从哪个算法结果中进行取值
@@ -401,7 +401,7 @@ public class DataProcess {//数据处理对象
                     returnData = MapTools.strToObj(returnData.toString());//  1.  简单字符串 , 2. map字符串 3. List字符串
                 }
                 if (MapTools.isNumber(itemRule[index])) {//数字代表从当前参数中取第N位,如果当前参数并不是List应该返回全部不应该返回空
-                    //
+                    //pr
                     int tempIndex = Integer.parseInt(itemRule[index]);
                     returnData = returnData instanceof List<?> tempList && tempList.size() > tempIndex ? tempList.get(tempIndex) : returnData;
                 } else {//不是数字代表从当前参数中取对应的键,如果当前参数是List应该返回List中首个对应的键值
@@ -423,14 +423,32 @@ public class DataProcess {//数据处理对象
                     tempList.add(returnData);
                     returnData = tempList;
                 }
+                if ("Array".contains(dataType)){
+                    if (returnData instanceof List<?> tempList  && !tempList.isEmpty() ) {
+                        List<Object> tpList = new ArrayList<>();
+                        for (Object o : tempList) {
+                            if (o instanceof Map<?,?>){
+                                tpList.add(MapTools.objToJSONStr(o));
+                            }else  if (o instanceof String tpStr && tpStr.contains("=") && tpStr.contains("{") && tpStr.contains("}")){
+                                tpList.add(MapTools.objToJSONStr(MapTools.strToObj(tpStr)));
+                            }else {
+                                tpList.add(o);
+                            }
+                        }
+                        returnData = tpList;
+                    }
+                    if (returnData instanceof Map<?, ?> tpMap) {
+                        returnData = MapTools.objToJSONStr(tpMap);
+                    }
+                    if (returnData instanceof String tpStr && tpStr.contains("=") && tpStr.contains("{") && tpStr.contains("}")) {
+                        returnData = MapTools.objToJSONStr(MapTools.strToObj(tpStr));
+                    }
+                }
 //            if ("List".equals(dataType) && returnData instanceof List<?> && MapTools.isXMLList(returnData)) {//订阅是数组但是实际是XML字符串数组则自动转换为list<map>
 //                returnData = MapTools.XMLListToListMap(returnData);//减少JAVA的动态调用,目前主要就是航班报文,BSMBPM等订阅的是String,所以不会进入这里
 //            }
                 returnData = "Map".equals(dataType) && !(returnData instanceof Map<?, ?>) ? null//是不是不妥
-                        : ("String".equals(dataType) ? returnData.toString()
-                        : ("Boolean".equals(dataType) ? returnData.toString().equals("true")
-                        : ("JSONStr".equals(dataType) ? MapTools.objToJSONStr(returnData)
-                        : returnData)));
+                        : ("String".equals(dataType) ? returnData.toString() : ("Boolean".equals(dataType) ? returnData.toString().equals("true") : ("JSONStr".equals(dataType) ? MapTools.objToJSONStr(returnData) : returnData)));
             }
             return returnData;
         } catch (Exception e) {

+ 13 - 0
mainFactory/src/main/java/org/bfkj/config/AppConfig.java

@@ -1,5 +1,10 @@
 package org.bfkj.config;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+import java.text.SimpleDateFormat;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -11,6 +16,8 @@ public class AppConfig {
     public static String WORK_ID;
     public static Integer SERVICE_ERR_MAX = 3; //服务最大连续异常次数
 
+    public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
     public static HashMap<String, HashSet<Object>> event6Map = new HashMap<>();//用于事件6是否存在的内存检测
 
     public static HashMap<String, String> staticEvent = new HashMap<>() {{
@@ -27,4 +34,10 @@ public class AppConfig {
         put("2", "update 表名 set 值 ");
         put("3", "delete from 表名 ");
     }};
+
+    public static final ObjectMapper mapper = new ObjectMapper();
+    static {
+        mapper.registerModule(new JavaTimeModule());
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //关闭
+    }
 }

+ 10 - 2
mainFactory/src/main/java/org/bfkj/protocol/FtpHandler.java

@@ -44,14 +44,22 @@ public class FtpHandler {
 
     /**
      *
-     * @param fileList 组装好的文件名称
+     * @param inFileName 组装好的文件名称
      * @param connectConfig 连接fpt的连接信息
      * @return
      */
-    public Map<String, Object> readData(List<String>  fileList, String connectConfig) {
+    public Map<String, Object> readData(Object inFileName, String connectConfig) {
         Map<String, Object> connectConfigMaps = (Map<String, Object>) MapTools.strToObj(connectConfig);
         FTPClient ftp = null;
         try {
+            List<Object> fileList = new ArrayList<>();
+            if (inFileName instanceof  String tpStr){
+                fileList.addAll(Arrays.stream(tpStr.split(",")).toList());
+            }else {
+                if (inFileName instanceof List<?> tpList) {
+                    fileList.addAll(tpList);
+                }
+            }
             String basePath = Objects.toString(connectConfigMaps.get("basePath")); //根路径
             ftp = createFtpClient(connectConfigMaps);
             if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {

+ 8 - 1
mainFactory/src/main/java/org/bfkj/protocol/MyKafKa.java

@@ -56,7 +56,11 @@ public class MyKafKa {
         List<String> messageList = new ArrayList<>();
         if (records.count() > 0) {
             for (ConsumerRecord<String, Object> record : records.records(sourceObjectName)) {
-                messageList.add(record.value().toString());
+                String readValue = record.value().toString().trim();
+                if (MapTools.isBlank(readValue) || readValue.equals("{}")){
+                    continue;
+                }
+                messageList.add(readValue);
             }
         }
         isPool =false;
@@ -86,6 +90,9 @@ public class MyKafKa {
         List<Object> sendResult = new ArrayList<>();
         for (Object o : dataContent) {
             try {
+                if(o instanceof String && MapTools.isBlank(o.toString().trim()) ){
+                    continue;
+                }
                 sendResult.add(producer.send(new ProducerRecord<>(sourceObjectName, mapper.writeValueAsString(o))));
             } catch (Exception e) {
                 sendResult.add(producer.send(new ProducerRecord<>(sourceObjectName, o.toString())));

+ 0 - 89
mainFactory/src/main/java/org/bfkj/utils/AlgorithmTools.java

@@ -1,89 +0,0 @@
-package org.bfkj.utils;
-
-import org.dom4j.Attribute;
-import org.dom4j.Element;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 算法工具类
- */
-public class AlgorithmTools {
-
-    /**
-     * xml转map
-     *
-     * @param element
-     * @return
-     */
-    private static Map<String, Object> xmlToMap(Element element) {
-        String currentName = element.getName(); //当前节点名称
-        String currentValue = MapTools.getText(element.getTextTrim());// 当前节点值
-        Map<String, Object> attrMap = new HashMap<>(); //初始化一个当前节点的属性结构
-        List<Attribute> attributes = element.attributes();  //属性处理
-        attributes.forEach(childAttribute -> {
-            attrMap.put(childAttribute.getName(), childAttribute.getValue());//逐个添加属性值到属性结构
-        });
-        List<Element> childNodes = element.elements(); //获取当前节点的所有子节点
-        if (childNodes.isEmpty() && !attrMap.isEmpty()) {  //无子节点且当前节点存在属性则
-            attrMap.put(currentName, currentValue); //当前节点值添加到属性中
-        }
-        childNodes.forEach(childElement -> {
-            String childName = childElement.getName(); //获取子节点名称
-            if (attrMap.containsKey(childName)) { //已经存在相同子节点名称的值代表需要形成数组
-                Object oldValue = attrMap.get(childName); //获取已经存在的值
-                List<Object> newList = new ArrayList<>();
-                if (oldValue instanceof List) { //如果旧值已经是数组则
-                    newList = (List<Object>) oldValue; //强制转换为数组
-                } else {
-                    newList.add(oldValue); //转换为数组,旧值添加到数组中
-                }
-                newList.add(xmlToMap(childElement).get(childName));//添加子节点的数据,递归获取子节点的数据
-                attrMap.put(childName, newList);//添加到返回结构中;
-            } else {
-                attrMap.put(childName, xmlToMap(childElement).get(childName));//递归获取子节点的数据;
-            }
-        });
-        return new HashMap<>() {
-            {
-                put(currentName, attrMap.isEmpty() ? currentValue : attrMap);//添加当前节点的属性以及值(包括了子节点)
-            }
-        };
-    }
-
-    /**
-     * xml 转map 通用化
-     *
-     * @param xml
-     * @return
-     */
-    public static String CheckXML(String xml) {
-        String xmlStr = xml.substring(xml.contains("<") ? xml.indexOf("<") : 0, xml.lastIndexOf(">") > 0 ? xml.lastIndexOf(">") + 1 : xml.length());
-        xmlStr = (xmlStr.contains("<?xml") ? "" : "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n").concat(xmlStr);
-        return xmlStr;
-    }
-
-
-    /**
-     * 字段转换
-     * @param sourceList 需要映射字段
-     * @param translateName
-     * @return
-     */
-    public static List<Map<String, Object>> conversionField(List<Map<String, Object>> sourceList, Map<String, String> translateName) {
-        List<Map<String, Object>> dataList = new ArrayList<>();
-        sourceList.forEach(sourceMap -> {
-            Map<String, Object> temMap = new HashMap<>();
-            for (String key : sourceMap.keySet()) {
-                if (translateName.containsKey(key)) {
-                    temMap.put(translateName.get(key), sourceMap.get(key));
-                }
-            }
-            dataList.add(temMap);
-        });
-        return dataList;
-    }
-}

+ 47 - 10
mainFactory/src/main/java/org/bfkj/utils/DataFormat.java

@@ -435,7 +435,7 @@ public class DataFormat {
      * @param translateName           需要转义的名称
      * @return code message returnData
      */
-    public static Map<String, Object> customMadexmlToMap(String xml, boolean isTwoDimensionalization, List<String> noDiKaList, Map<String, String> translateName) {
+    public static Map<String, Object> customMadexmlToMap(String xml, boolean isTwoDimensionalization, Object noDiKaList, Map<String, String> translateName) {
         Map<String, Object> returnMap = xmlToMapFormat(xml); //  code ,message ,returenData
         if (returnMap.get("code").equals("-1")) return returnMap;
         if (isTwoDimensionalization) {
@@ -468,7 +468,7 @@ public class DataFormat {
     }
 
 
-    public static Map<String, Object> customMadeListxmlToMap(List<String> xmlList, boolean isTwoDimensionalization, List<String> noDiKaList, Map<String, String> translateName) {
+    public static Map<String, Object> customMadeListxmlToMap(List<String> xmlList, boolean isTwoDimensionalization, Object noDiKaList, Map<String, String> translateName) {
         if (Objects.isNull(xmlList) || xmlList.size() == 0) {
             return MapTools.processSuccess(null);
         }
@@ -534,6 +534,31 @@ public class DataFormat {
         }
     }
 
+    /**
+     * xml 转map 通用化
+     *
+     * @param xmlList
+     * @return
+     */
+    public static Map<String, Object> xmlToMapFormatObj(Object xmlList) {
+        try {
+            List<Map<String, Object>> rsList = new ArrayList<>();
+            if (xmlList instanceof List<?> tpList) {
+                for (Object o : tpList) {
+                    rsList.add(xmlToMapFormat(Objects.toString(o)));
+                }
+            } else {
+                rsList.add(xmlToMapFormat(Objects.toString(xmlList)));
+            }
+            return xmlList instanceof List<?> ? MapTools.processSuccess(rsList) : rsList.get(0);
+        } catch (Exception e) {
+            Map<String, Object> errMap = processFail("入参不是规则的xml");
+            errMap.put("souceData", xmlList);
+            return errMap;
+        }
+    }
+
+
     /**
      * map 二维化
      *
@@ -541,9 +566,13 @@ public class DataFormat {
      * @param noDiKaList 需要dika
      * @return
      */
-    public static Map<String, Object> twoDimensionalizationFormat(Map<String, Object> inMap, List<String> noDiKaList) {
+    public static Map<String, Object> twoDimensionalizationFormat(Map<String, Object> inMap, Object noDiKaList) {
         try {
-            List<Map<String, Object>> returnDataList = twoDimensionalization(inMap, "", noDiKaList); /*生命周期未添加*/
+            List<Map<String, Object>> returnDataList = new ArrayList<>();
+            Map<String, Object> toInMap = MapTools.clone(inMap);
+            if (Objects.nonNull(toInMap) && !toInMap.isEmpty()) {
+                returnDataList = twoDimensionalization(toInMap, "", noDiKaList); /*生命周期未添加*/
+            }
             return processSuccess(returnDataList);
         } catch (Exception e) {
             return processFail(LogUtils.getException(e));
@@ -668,7 +697,7 @@ public class DataFormat {
         return processSuccess(null);
     }
 
-    private static List<Map<String, Object>> twoDimensionalization(Map<String, Object> inMap, String keyName, List<String> noDiKaList) {
+    private static List<Map<String, Object>> twoDimensionalization(Map<String, Object> inMap, String keyName, Object noDiKaList) {
         //初始化一个返回数组List<map<string,object>> returnList
         List<Map<String, Object>> returnList = new ArrayList<>();
         // 默认添加一个空MAP----returnList.add(new map)//目的是确保计算迪卡乘积以及最后的单值赋值不出现问题
@@ -681,7 +710,7 @@ public class DataFormat {
             if (currentValue instanceof List) {
                 List<Map<String, Object>> tempList = new ArrayList<>();
                 List<Object> list = (List<Object>) currentValue;
-                if (Objects.nonNull(noDiKaList) && noDiKaList.contains(itemKeyName)) {
+                if (Objects.nonNull(noDiKaList) && noDiKaList instanceof List<?> tpList && tpList.contains(itemKeyName)) {
                     Map<String, Object> tempMap = new HashMap<>();
                     tempMap.put(itemKeyName, currentValue.toString());
                     tempList.add(tempMap);
@@ -689,8 +718,12 @@ public class DataFormat {
                     for (Object o : list) {
                         if (o instanceof Map) {
                             List<Map<String, Object>> tempListMap = twoDimensionalization((Map<String, Object>) o, itemKeyName, noDiKaList);
-                            tempListMap = dikaMap(returnList, tempListMap);//计算迪卡乘积
-                            tempList.addAll(tempListMap);
+                            if (noDiKaList instanceof String inStr && inStr.equals("noDika")) {
+                                tempList.addAll(tempListMap);
+                            } else {
+                                tempListMap = dikaMap(returnList, tempListMap);//计算迪卡乘积
+                                tempList.addAll(tempListMap);
+                            }
                         } else {
                             tempList.add(new HashMap<>() {{
                                 put(itemKeyName, o);
@@ -703,13 +736,17 @@ public class DataFormat {
                 if (currentValue instanceof Map) {
                     List<Map<String, Object>> tempListMap = twoDimensionalization((Map<String, Object>) currentValue, itemKeyName, noDiKaList);//递归下一级
                     List<Map<String, Object>> tempList = new ArrayList<>();
-                    if (Objects.nonNull(noDiKaList) && noDiKaList.contains(itemKeyName)) {
+                    if (Objects.nonNull(noDiKaList) && noDiKaList instanceof List<?> tpList && tpList.contains(itemKeyName)) {
                         Map<String, Object> tempMap = new HashMap<>();
                         tempMap.put(itemKeyName, currentValue.toString());
                         tempList.add(tempMap);
                         returnList = tempList;
                     } else {
-                        returnList = dikaMap(returnList, tempListMap);//计算迪卡乘积后替换当前的returnList
+                        if (noDiKaList instanceof String inStr && inStr.equals("noDika")) {
+                            returnList = tempListMap;
+                        } else {
+                            returnList = dikaMap(returnList, tempListMap);//计算迪卡乘积后替换当前的returnList
+                        }
                     }
                 } else {
                     for (Map<String, Object> map : returnList) {//循环returnList

+ 6 - 2
mainFactory/src/main/java/org/bfkj/utils/ImportExcelUtils.java

@@ -34,6 +34,9 @@ public class ImportExcelUtils {
                     int rowNum = sheet.getLastRowNum(); // 获取该页表共有多少行
                     for (int j = 1; j < rowNum+1; j++) {  // 一般来说第一行是标题,所以第二行开始读取
                         Row row = sheet.getRow(j); // 获取表格行
+                        if (Objects.isNull(row)){
+                            continue;
+                        }
                         int rowNum1 = row.getLastCellNum(); // 第一行
                         HashMap<String, Object> tempMap = new HashMap<>();
                         for (int col = 0; col < rowNum1; col++) {
@@ -43,11 +46,12 @@ public class ImportExcelUtils {
                         Date now2 = Calendar.getInstance().getTime();
                         tempMap.put("createtime",format1.format(now2));
                         tempMap.put("dataObjectId",dataObjectId);
-                        tempMapList.add(tempMap);
+                        if (tempMap.keySet().size() > 2){
+                            tempMapList.add(tempMap);
+                        }
                     }
                 }
             }
-
             return MapTools.processSuccess(tempMapList);
         } catch (Exception e) {
             return MapTools.processFail("文件上传失败: " + LogUtils.getException(e));

+ 5 - 23
mainFactory/src/main/java/org/bfkj/utils/MapTools.java

@@ -1,9 +1,7 @@
 package org.bfkj.utils;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import org.bfkj.config.AppConfig;
 
 import java.io.*;
 import java.math.BigInteger;
@@ -11,19 +9,12 @@ import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 public class MapTools implements Serializable {
-    public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
-    private static ObjectMapper mapper = new ObjectMapper();
-    static {
-        mapper.registerModule(new JavaTimeModule());
-        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //关闭
-    }
     /*对象转JSON字符串*/
     public static String objToJSONStr(Object inObj) { //
         try {
@@ -33,27 +24,18 @@ public class MapTools implements Serializable {
             if (inObj instanceof String) {
                 inObj = strToObj(inObj.toString());
             }
-            return mapper.writeValueAsString(inObj);
+            return AppConfig.mapper.writeValueAsString(inObj);
         } catch (Exception e) {
             return null;
         }
     }
-
-    public static void main(String[] args) {
-        HashMap<Object, Object> hashMap = new HashMap<>();
-        hashMap.put("da",new Date());
-        System.out.println(objToJSONStr(hashMap));
-    }
-
-
-
     /*字符串转对象*/
     public static Object strToObj(String inStr) {
         try {
             if (Pattern.compile("[0-9]{2}:[0-9]{2}:[0-9]{2}").matcher(inStr).find()) {
                 return mapStrToObj(inStr, null);
             }
-            return mapper.readValue(inStr, Map.class);
+            return AppConfig.mapper.readValue(inStr, Map.class);
         } catch (JsonProcessingException e) {
             return mapStrToObj(inStr, null);
         }
@@ -134,14 +116,14 @@ public class MapTools implements Serializable {
             if (Objects.isNull(dataStrObj)) {
                 return null;
             }
-            return sdf.parse(dataStrObj.toString());
+            return AppConfig.sdf.parse(dataStrObj.toString());
         } catch (ParseException e) {
             return null;
         }
     }
 
     public static String dateTostr(Date date) {
-        return sdf.format(date);
+        return AppConfig.sdf.format(date);
     }
 
 

+ 22 - 15
mainFactory/src/main/java/org/bfkj/utils/MyDbHelper.java

@@ -113,7 +113,7 @@ public class MyDbHelper {//目前只差主键的条件优化
                 varList = getSQLVarList(newSqlStr);//获取SQL语句中的书名号变量列表,同时也将书名号进行了替换《中内容》 select * from xx
                 newSqlStr = sqlStrNewSQL.get(newSqlStr);//获取已经将书名号替换为?后的SQL语句
             } else {
-                Map<String, Object> metaDataMap = getMetaDataByTable(tableName, Objects.equals("true", calcInfo.get("isActive")));//获取表的所有字段列表
+                Map<String, Object> metaDataMap = getMetaDataByTable(tableName, Objects.equals("true", calcInfo.get("isActiveTable")));//获取表的所有字段列表
                 if ("-1".equals(metaDataMap.get("code"))) {//获取字段失败,大概率是动态表创建失败
                     return metaDataMap;
                 }
@@ -143,7 +143,7 @@ public class MyDbHelper {//目前只差主键的条件优化
 
                 List<Object> dbValueList = new ArrayList<>();
                 String newEvent = "6".equals(event) && MapTools.isNotBlank(tableName) ? isExist(tableName, whereStr, filterList) : event;//如果是事件6则需要先进行判断后再决定事件
-                Map<String, Object> dbValueInfo = MapTools.isNotBlank(sqlStr) ? getdbValueForSql(execSQLStr, varList, signParam) : getdbValueForTable(tableName, newEvent, authColumn, signParam, Objects.equals("true", calcInfo.get("isActive")));//获取执行的参数值集合,SQL语句方式针对的是书名号变量,注意使用未替换书名号的SQL语句
+                Map<String, Object> dbValueInfo = MapTools.isNotBlank(sqlStr) ? getdbValueForSql(execSQLStr, varList, signParam) : getdbValueForTable(tableName, newEvent, authColumn, signParam, Objects.equals("true", calcInfo.get("isActiveTable")));//获取执行的参数值集合,SQL语句方式针对的是书名号变量,注意使用未替换书名号的SQL语句
                 dbValueList = (List<Object>) dbValueInfo.get("dbValue");//执行参数
                 execSQLStr = dbValueInfo.get("newSqlStr").toString();//修订后的SQL语句,针对in方式进行修订 select * from xx
                 rowCountSql = "0".equals(newEvent) && MapTools.isNotBlank(allSQLColumn) ? execSQLStr.replace(allSQLColumn, " count(1) ") : "";//查询则创建rowCountSql
@@ -254,8 +254,6 @@ public class MyDbHelper {//目前只差主键的条件优化
     private String standarSQLStr(String sqlStr) {
         String newSqlStr = sqlStr;
         String[] sqlKeyWordList = "select,from,where,group by,limit,order by".split(",",-1);
-
-
         for (String sqlKeyWord : sqlKeyWordList) {//循环进行替换
             Pattern p = Pattern.compile(sqlKeyWord, Pattern.CASE_INSENSITIVE);
             Matcher m = p.matcher(newSqlStr);
@@ -285,10 +283,12 @@ public class MyDbHelper {//目前只差主键的条件优化
             List<Map<String, Object>> allColumnList = new ArrayList<>();
             for (int i = 0; i < rsd.getColumnCount(); i++) {
                 HashMap<String, Object> tempMap = new HashMap<>();
-                tempMap.put("columnName", rsd.getColumnName(i + 1));
+                String columnName = rsd.getColumnName(i + 1);
+                String columnLabel = rsd.getColumnLabel(i + 1);
+                tempMap.put("columnName",Objects.isNull(columnLabel)? columnName:columnLabel);
                 tempMap.put("columnType", rsd.getColumnType(i + 1));
                 tempMap.put("columnTypeName", rsd.getColumnTypeName(i + 1));
-                tempMap.put("columnLable", rsd.getColumnLabel(i + 1));
+                tempMap.put("columnLable",Objects.isNull(columnLabel)? columnName:columnLabel );
                 allColumnList.add(tempMap);
             }
             return processSuccess(allColumnList);
@@ -501,7 +501,13 @@ public class MyDbHelper {//目前只差主键的条件优化
                         if (Objects.nonNull(column) && !varList.contains(column.toString())) {//列名不为空 且 (可用列未获取 或者 当前列存在于可用列)
                             String connector = Objects.isNull(filterMap.get("connector")) ? "" : filterMap.get("connector").toString();//处理连接字符串
                             Object comparator = Objects.isNull(filterMap.get("comparator")) ? "" : filterMap.get("comparator").toString();//比较符
-                            whereStr = whereStr.concat(filterMap.get("left").toString()).concat(column.toString()).concat(comparator.toString()).concat(" is null ".equals(comparator) ? "" : "?").concat(filterMap.get("right").toString()).concat((MapTools.isBlank(connector)) ? " and " : ("lastConnector".equals(connector) ? " " : " ".concat(connector).concat(" ")));
+                            whereStr = whereStr.concat(filterMap.get("left").toString()).
+                                    concat(column.toString()).
+                                    concat(comparator.toString()).
+                                    concat(" is null ".equals(comparator) ? "" : "?").
+                                    concat(filterMap.get("right").toString()).
+                                    concat((MapTools.isBlank(connector)) ? " and " : ("lastConnector".equals(connector) ? " " : " ".
+                                            concat(connector).concat(" ")));
                             if (!" is null ".equals(comparator)) {//不是is null,且不是SQL语句执行方式
                                 dbFilter.add(filterMap.get("value"));//添加执行参数
                             }
@@ -546,6 +552,7 @@ public class MyDbHelper {//目前只差主键的条件优化
     }
 
     //检测数据是否已经存在,使用同步锁(tableName,whereStr,filterList)
+
     private synchronized String isExist(String tableName, String whereStr, List<Object> dbFilter) {
         String event = "2";//默认为更新
         if (!AppConfig.event6Map.containsKey(tableName)) {//如果对应表名未建立缓存则初始化一个
@@ -554,13 +561,13 @@ public class MyDbHelper {//目前只差主键的条件优化
         HashSet<Object> tableUniqe = AppConfig.event6Map.get(tableName);//获取已经缓存的数据
         String oldKey = whereStr.concat(MapTools.objToJSONStr(dbFilter));//条件字符串加条件执行参数
         if (!tableUniqe.contains(oldKey)) {//如果不存在则查数据库 // HashSet的包含效率高于list的包含
-            try {
+            try {           // isExistResult = null
                 List<Map<String, Object>> isExistResult = theJdbcTemplate.queryForList("select 1 from ".concat(tableName).concat(" where ").concat(whereStr).concat(" limit 1"), dbFilter.toArray());
                 event = (isExistResult.size() == 0) ? "1" : event;//数据库不存在则新增
                 //如果是新增则修订为新增SQL
-                if (tableUniqe.size() > 7000) {
-                    tableUniqe.remove(tableUniqe.iterator().next());
-                }
+               if (tableUniqe.size() > 3000){
+                   tableUniqe.clear();
+               }
                 tableUniqe.add(oldKey);//无论是新增还是更新都添加到缓存
             } catch (Exception e) {//查询失败并不更新缓存
                 //打印错误即可
@@ -599,9 +606,9 @@ public class MyDbHelper {//目前只差主键的条件优化
                     }
                 }
                 Object currentValue = currentParam.get(signKey);
-                if ((Objects.nonNull(currentValue) && currentValue.toString().length() > 10 && currentValue.toString().charAt(10) == 'T')) {
-                    currentValue = currentValue.toString().replace("T", " ");
-                }
+//                if ((Objects.nonNull(currentValue) && currentValue.toString().length() > 10 && currentValue.toString().charAt(10) == 'T')) {
+//                    currentValue = currentValue.toString().replace("T", " ");
+//                }
                 modyColumn.add(signKey);
                 dbValue.add((Objects.isNull(currentValue) && "createtime".equals(signKey)) ? new Date() : currentValue);//为空且字段名为createtime时做默认
                 modifyValue.add("1".equals(event) ? "?" : signKey.concat("=?"));//新增替换为?,更新替换为字段名 = ?依据事件设置字段替换值
@@ -699,7 +706,7 @@ public class MyDbHelper {//目前只差主键的条件优化
                     sqlPS.setObject(index + 1,signdbValue[index]);
                 }
                 sqlPS.addBatch();
-                if ((i + 1) % 100 == 0) {
+                if ((i + 1) % 10 == 0) {
                     sqlPS.executeBatch();
                     connection.commit(); // 统一提交
                     sqlPS.clearBatch();

+ 25 - 14
mainFactory/src/main/java/org/bfkj/utils/ScriptEnginePro.java

@@ -28,7 +28,7 @@ public class ScriptEnginePro {
     private ScriptEngine scriptEngine; //脚本执行引擎
     private CompiledScript scriptCompile;//脚本编译
 
-    private  String library_id; //算法ID
+    private String library_id; //算法ID
     private String library_type; //算法类型: // 1. java 2. js 脚本 3. 数据库  4. webapi
     private String computing_expression; //脚本: 1. java输出执行名称 2.JS脚本 3.sql语句 4.空
 
@@ -40,20 +40,20 @@ public class ScriptEnginePro {
     public ScriptEnginePro(Map<String, Object> calcInfo) {//引擎构造函数
 
         try {
-            if(Objects.isNull(calcInfo) || Objects.isNull(calcInfo.get("library_type")) || Objects.isNull(calcInfo.get("computing_expression"))){
-                errorMessage = "核心参数为空:".concat(Objects.isNull(calcInfo)?"":calcInfo.toString());
+            if (Objects.isNull(calcInfo) || Objects.isNull(calcInfo.get("library_type")) || Objects.isNull(calcInfo.get("computing_expression"))) {
+                errorMessage = "核心参数为空:".concat(Objects.isNull(calcInfo) ? "" : calcInfo.toString());
                 return;
             }
             library_id = calcInfo.get("library_id").toString();//算法编号
             library_type = calcInfo.get("library_type").toString();//算法类型
-            if(!"1,2".contains(library_type)){//目前只支持JS和JAVA
+            if (!"1,2".contains(library_type)) {//目前只支持JS和JAVA
                 errorMessage = "未支持的算法类型:".concat(calcInfo.toString());
                 return;
             }
             computing_expression = calcInfo.get("computing_expression").toString();//脚本
             if ("1".equals(library_type)) {
                 errorMessage = initJava(calcInfo.get("filePath"), calcInfo.get("className"));//初始化java执行对象
-                if(MapTools.isBlank(errorMessage)){
+                if (MapTools.isBlank(errorMessage)) {
                     return;
                 }
             }
@@ -61,13 +61,16 @@ public class ScriptEnginePro {
             if ("2".equals(library_type)) { // 1. java时记录方法名 (缺 目标对象字段) 2. js时 记录脚本(后期可以运用数据源中的文件名在加载js文件,此时脚本为方法名)
                 ScriptEngineManager SEManager = new ScriptEngineManager();
                 NashornScriptEngineFactory NSEFactory = null;
+
                 for (ScriptEngineFactory SEFactory : SEManager.getEngineFactories()) {
                     if ("OpenJDK Nashorn".equalsIgnoreCase(SEFactory.getEngineName())) {
                         NSEFactory = (NashornScriptEngineFactory) SEFactory;
+//                        NSEFactory.getScriptEngine("--language=es6");
+                        System.setProperty("nashorn.args", "--language=es6");
                         break;
                     }
                 }
-                if(Objects.isNull(NSEFactory)){
+                if (Objects.isNull(NSEFactory)) {
                     errorMessage = "未找到OpenJDK Nashorn";
                     return;
                 }
@@ -79,10 +82,11 @@ public class ScriptEnginePro {
                     errorMessage = "JS脚本预编译时出现错误" + LogUtils.getException(e);
                 }
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             errorMessage = "引擎创建失败".concat(LogUtils.getException(e));
         }
     }
+
     //脚本引擎对象关闭时的资源释放
     public void close() {
         //如果算法的类型是数据库 则获取jdbctempalte进行关闭;如果是其他协议则 直接调用invoke方法进行关闭
@@ -90,7 +94,7 @@ public class ScriptEnginePro {
             try {
                 javaMethodClose.invoke(classInstance);
             } catch (IllegalAccessException | InvocationTargetException e) {
-                System.out.println("JAVA反射关闭方法调用失败: ".concat(Objects.nonNull(classInstance)?classInstance.toString():"").concat("释放资源失败"));
+                System.out.println("JAVA反射关闭方法调用失败: ".concat(Objects.nonNull(classInstance) ? classInstance.toString() : "").concat("释放资源失败"));
             }
         }
     }
@@ -102,7 +106,7 @@ public class ScriptEnginePro {
             try {
                 resultData1 = (Map<String, Object>) returnData;
             } catch (Exception e) {
-                resultData1.put("returnData",returnData);
+                resultData1.put("returnData", returnData);
             }
             resultData1.put("code", "0");
             return resultData1;
@@ -121,10 +125,11 @@ public class ScriptEnginePro {
         returnMap.put("library_id", library_id);
         return returnMap;
     }
+
     //初始化JAVA执行对象
     private String initJava(Object filePath, Object className) {
         if (Objects.isNull(className) || Objects.isNull(computing_expression)) {
-            return "java执行参数不全,类名:".concat(Objects.isNull(className)?"":className.toString()).concat("; 方法名:").concat(computing_expression);
+            return "java执行参数不全,类名:".concat(Objects.isNull(className) ? "" : className.toString()).concat("; 方法名:").concat(computing_expression);
         }
         if (Objects.nonNull(filePath)) {//文件名不为空则加载外部JAR
             File file = new File(System.getProperty("user.dir").concat(File.separator).concat("plugins").concat(File.separator).concat(filePath.toString()));
@@ -167,6 +172,7 @@ public class ScriptEnginePro {
         }
         return null;
     }
+
     //初始化执行参数名,同时修正表达式
     private void initParam() {
         Pattern regExpression = Pattern.compile("(?<=《)([^》]+)?(?=》)");//书名号方式提取正则表达式
@@ -175,13 +181,14 @@ public class ScriptEnginePro {
         while (varNameList.find()) {//循环提取的参数
             String varName = varNameList.group();//变量名String.dataContent
             index++;
-            parmaNames.put(varName, "1".equals(library_type)?String.valueOf(index):(varName.replaceAll("\\.", "")).concat(String.valueOf(threadId)));//添加到变量列表中
+            parmaNames.put(varName, "1".equals(library_type) ? String.valueOf(index) : (varName.replaceAll("\\.", "")).concat(String.valueOf(threadId)));//添加到变量列表中
             if ("1".equals(library_type)) {  // java参数
                 javaParams.add(null);//先初始化一个JAVA参数,因为没有键名对应,所以只能按顺序对应(数据订阅)
             }
             computing_expression = computing_expression.replaceFirst("《" + varName + "》", "1".equals(library_type) ? "" : parmaNames.get(varName));
         }
     }
+
     //引擎执行入口函数
     public Map<String, Object> execScript(Map<String, Object> execData) {
         if (null != errorMessage) {
@@ -190,10 +197,10 @@ public class ScriptEnginePro {
         if ("1".equals(library_type)) {
             try {
                 for (String varName : execData.keySet()) {
-                    javaParams.set(Integer.parseInt(parmaNames.get(varName)) -1, execData.get(varName));
+                    javaParams.set(Integer.parseInt(parmaNames.get(varName)) - 1, execData.get(varName));
                 }
                 Object invoke = javaMethod.invoke(classInstance, javaParams.toArray());
-                return  processSuccess(invoke);//数组方式传参,无需参数名,按顺序对应
+                return processSuccess(invoke);//数组方式传参,无需参数名,按顺序对应
             } catch (Exception e) {
                 return processFail("JAVA执行失败,执行参数:".concat(javaParams.toString()).concat(";异常信息:").concat(LogUtils.getException(e)));
             }
@@ -210,7 +217,7 @@ public class ScriptEnginePro {
                         scriptObjec.forEach((index, o) -> tempList.add(o));
                         jsReturnData = tempList;
                     }
-                    jsReturnData =  MapTools.strToObj(MapTools.objToJSONStr(jsReturnData));//JS脚本对象转为JAVA数据对象
+                    jsReturnData = MapTools.strToObj(MapTools.objToJSONStr(jsReturnData));//JS脚本对象转为JAVA数据对象
                 }
                 return processSuccess(jsReturnData);
             } catch (ScriptException e) {
@@ -219,6 +226,7 @@ public class ScriptEnginePro {
         }
         return processFail("未支持的算法类型:");
     }
+
     //修订JS返回值MAP变数组的问题
     private void recursionEencapsulation(ScriptObjectMirror scriptObject) {
         for (String key : scriptObject.keySet()) { // scriptObject 实际是Map 循环map的所有key--- > {"A","B"}
@@ -232,6 +240,7 @@ public class ScriptEnginePro {
             }
         }
     }
+
     /**
      * 数组判定
      *
@@ -248,6 +257,7 @@ public class ScriptEnginePro {
         }
         return true;
     }
+
     /**
      * 对象转数组
      *
@@ -266,6 +276,7 @@ public class ScriptEnginePro {
     public String getErrorMessage() {
         return errorMessage;
     }
+
     public Map<String, String> getParmaNames() {
         return parmaNames;
     }

+ 2 - 2
mainFactory/src/main/resources/application-prod.yml

@@ -26,7 +26,7 @@ log:
 #  title: ${MYDB_USER:bf_dev_epi}
 #  cipher: ${MYDB_PASSWD:Bfepi2021(}
 #  type: ${MYDB_DRIVER:com.mysql.cj.jdbc.Driver}
-#  serviceURL: ${MY_SERVICE_URL:172.23.61.8:8089}
+#  serviceURL: ${MY_SERVICE_URL:127.0.0.99:00}
 
 
 mydb:
@@ -34,7 +34,7 @@ mydb:
   title: ${MYDB_USER:root}
   cipher: ${MYDB_PASSWD:QtrmuqDw^bJu$}
   type: ${MYDB_DRIVER:com.mysql.cj.jdbc.Driver}
-  serviceURL: ${MY_SERVICE_URL:10.211.66.23:500}
+  serviceURL: ${MY_SERVICE_URL:127.0.0.99:00}
 
 #isEs:
 #  open: true

+ 92 - 0
mainFactory/src/main/resources/application-prod2.yml

@@ -0,0 +1,92 @@
+spring:
+  application:
+    name: INTERFACES-GATEWAY-NEW
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 10.211.67.156:8379,10.211.67.164:8631
+        namespace: public
+        group: product
+        username: nacos
+        password: 17f1f4d0bf7e4c9ea0c3d02a9e5efc50
+      config:
+        enabled: false
+
+    gateway:
+      globalcors:
+        corsConfigurations:
+          '[/**]':
+            allowedHeaders: "*"
+            allowedOrigins: "*"
+            allowCredentials: true
+            allowedMethods: "*"
+        default-filters:
+          - DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials Vary, RETAIN_UNIQUE
+      discovery:
+        locator:
+          enabled: true #寮€鍚牴鎹湇鍔″悕鍔ㄦ€佽幏鍙栬矾鐢卞湴鍧€
+          lowerCaseServiceId: true
+      routes:
+        - id: GATWAY-AUTHENTICATION
+          #  uri: http://localhost:8999
+          uri: http://10.211.67.150:18046
+          predicates:
+            - Path=/**
+          filters:
+            - StripPrefix=0  # 杞彂杩囨护鍓嶇紑涓暟\
+        - id: apache
+          uri: http://10.211.67.150:8093
+          predicates:
+              # 鍖归厤璺緞杞彂
+            - Method=GET
+
+
+gatway:
+  url:
+    upload:
+      - /api/4A/GetToken
+      - /api/4A/VerificationCode
+      - /api/4A/RefreshCode
+      - /api/4A/RemoveCode
+      - /api/4A/RemoveToken
+      - /api/fs4a/Logout/v1
+      - /api/4A/LoginGetToken
+      - /api/4A/CheckLoginToken
+      - /api/4A/LoginRefreshToken
+      - /api/4A/LogoutToken
+      - /api/fs4a/Login/v1
+      - /api/fs4a/GetSystemSet/v1
+      - /api/fs4a/GetCheckCode/v1
+    guohang:
+      - /baggageDC/openApi/gettoken
+      - /baggageDC/openApi/refreshtoken
+      - /outSide/openApi/fulltrackinfo
+      - /token
+      - /kafka
+      - /foxlibc/application-token
+      - /foxlibc/sign-in
+      - /foxlibc/system/setting
+      - /foxlibc/verification-code
+
+  config:
+    jwt:
+      header-name: toekn
+      skip-a-uth-url:
+        - /api/4A/GetToken
+        - /RefreshToken
+        - /api/4A/GetSystemSet/v1
+        - /api/4A/GetCheckCode/v1
+        - /api/4A/Login/v1
+logging:
+  level:
+    org.springframework.cloud.gateway.filter.LoadBalancerClientFilter: TRACE
+feign:
+  client:
+    config:
+      default:
+        connectTimeout: 100000
+        readTimeout: 600000
+server:
+  port: 18046
+
+