diff --git a/base-manager-ui/admin/vue.config.js b/base-manager-ui/admin/vue.config.js
index b5d243305e45a97a2f509816d09ec878da897ced..5b02dd7ec308768bd73e134bf21ddcdd66e4bf5c 100644
--- a/base-manager-ui/admin/vue.config.js
+++ b/base-manager-ui/admin/vue.config.js
@@ -8,6 +8,7 @@ const CompressionWebpackPlugin = require("compression-webpack-plugin");
 const productionGzipExtensions = ["js", "css"];
 const isProd = process.env.NODE_ENV === "production";
 
+
 const assetsCDN = {
   // webpack build externals
   // externals: {
@@ -33,6 +34,17 @@ const assetsCDN = {
   ],
 };
 
+const HardSourceWebpackPlugin = require('hard-source-webpack-plugin');
+const devPlugins = [
+  new HardSourceWebpackPlugin(),
+  new HardSourceWebpackPlugin.ExcludeModulePlugin([
+    {
+      test: /mini-css-extract-plugin[\\/]dist[\\/]loader/
+    }
+  ])
+];
+
+const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
 module.exports = {
   devServer: {
     disableHostCheck: true,
@@ -56,6 +68,13 @@ module.exports = {
     },
   },
   configureWebpack: (config) => {
+    config.plugin('webpack-report').use(BundleAnalyzerPlugin, [
+      {
+        analyzerMode: 'static'
+      }
+    ])
+    plugins: process.env.NODE_ENV === "production" ? [] : [...devPlugins];
+
     config.entry.app = ["babel-polyfill", "whatwg-fetch", "./src/main.js"];
     config.performance = {
       hints: false,
diff --git a/base-manager/doc/api.md b/base-manager/doc/api.md
index aaf115b2aa2aafcfd5d3196f9aab162215104601..f4aeebdb28378a69ee03197faeb9399f1d90c8d1 100644
--- a/base-manager/doc/api.md
+++ b/base-manager/doc/api.md
@@ -1577,6 +1577,275 @@ msg|String|娑堟伅|-
 
 ```
 
+## 涓婚
+
+### 鏌ヨ涓婚鍒楄〃
+
+**璇锋眰URL:** site/theme/list
+
+**璇锋眰鏂瑰紡:** POST
+
+**鍐呭绫诲瀷:** application/json;charset=utf-8
+
+**绠€瑕佹弿杩�:** 鏌ヨ涓婚
+
+**璇锋眰鍙傛暟:**
+
+鍙傛暟鍚嶇О|绫诲瀷|蹇呭~|鎻忚堪
+:---|:---|:---|:------
+page|Integer|鍚褰撳墠椤�
+size|Integer|鍚姣忛〉鏉℃暟锛屽€间负-1锛屾煡璇㈡墍鏈夎褰�
+siteId|Long|鍚绔欑偣id
+userType|String|鍚鏈嶅姟绫诲瀷缂栧彿,瀛楁鍓嶅悗娣诲姞%%妯$硦鏌ヨ
+themeCode|String|鍚涓婚缂栧彿,瀛楁鍓嶅悗娣诲姞%%妯$硦鏌ヨ
+themeName|String|鍚涓婚鍚嶇О,瀛楁鍓嶅悗娣诲姞%%妯$硦鏌ヨ
+
+**璇锋眰鏍蜂緥:**
+```
+  {
+        "siteId":9425,
+        "userType":"6mu82c",
+        "themeCode":"w7vxfs",
+        "themeName":"a9jq7j",
+        "page":1,
+        "size":10
+  }
+
+```
+**鍝嶅簲鍙傛暟:**
+
+鍙傛暟鍚嶇О|鍙傛暟绫诲瀷|鎻忚堪
+:---|:---|:------
+code|Integer|缁撴灉鐮侊紙-1.澶辫触锛�1.鎴愬姛锛�
+msg|String|娑堟伅
+data|object|鏁版嵁瀵硅薄
+ per_page|Integer|姣忛〉鏉℃暟
+ total|Integer|鎬绘潯鏁�
+ last_page|Integer|鎬婚〉鏁�
+ current_page|Integer|褰撳墠椤�
+ data|array|缁撴灉闆嗗垪琛▅鏁扮粍
+  id|Long|id鍙�
+  siteId|Long|绔欑偣id
+  userType|String|鏈嶅姟绫诲瀷缂栧彿
+  themeCode|String|涓婚缂栧彿
+  themeName|String|涓婚鍚嶇О
+  createTime|Date|鍒涘缓鏃堕棿
+  createUserId|Long|鍒涘缓鐢ㄦ埛id
+  updateTime|Date|鏇存柊鏃堕棿
+dict|object|瀛楀吀瀵硅薄
+
+**鍝嶅簲娑堟伅鏍蜂緥:**
+```
+{
+    "code":1,
+    "data":{
+    }
+}
+```
+
+### 鏌ョ湅涓婚
+
+**璇锋眰URL:** site/theme/info
+
+**璇锋眰鏂瑰紡:** GET
+
+**鍐呭绫诲瀷:** application/json;charset=utf-8
+
+**绠€瑕佹弿杩�:** 鏌ョ湅涓婚锛岃繑鍥炲疄渚嬭缁嗕俊鎭�
+
+**璇锋眰鍙傛暟:**
+
+鍙傛暟鍚嶇О|绫诲瀷|蹇呭~|鎻忚堪
+:---|:---|:---|:------
+id|Long|鏄瘄ID
+
+**璇锋眰鏍蜂緥:**
+```
+    http://localhost/site/theme/info?id=549
+```
+**鍝嶅簲鍙傛暟:**
+
+鍙傛暟鍚嶇О |鍙傛暟绫诲瀷|鎻忚堪
+:---|:---|:-------
+code|Integer|缁撴灉鐮侊紙-1.澶辫触锛�1.鎴愬姛锛�
+msg|String|娑堟伅
+data|object|鏁版嵁瀵硅薄
+ id|Long|id鍙�
+ siteId|Long|绔欑偣id
+ userType|String|鏈嶅姟绫诲瀷缂栧彿
+ themeCode|String|涓婚缂栧彿
+ themeName|String|涓婚鍚嶇О
+ createTime|Date|鍒涘缓鏃堕棿
+ createUserId|Long|鍒涘缓鐢ㄦ埛id
+ updateTime|Date|鏇存柊鏃堕棿
+dict|object|瀛楀吀瀵硅薄
+
+**鍝嶅簲娑堟伅鏍蜂緥:**
+```
+{
+    "code": 1,
+    "data": {
+            "id":539,
+            "siteId":4859,
+            "userType":"ewybhk",
+            "themeCode":"27cygo",
+            "themeName":"qu6dep",
+            "createTime":"2023-01-28",
+            "createUserId":1565,
+            "updateTime":"2023-01-28"
+        }
+}
+```
+
+## 绔欑偣涓婚浜嬮」
+
+### 鏌ヨ绔欑偣涓婚浜嬮」鍒楄〃
+
+**璇锋眰URL:** site/theme/matter/list
+
+**璇锋眰鏂瑰紡:** POST
+
+**鍐呭绫诲瀷:** application/json;charset=utf-8
+
+**绠€瑕佹弿杩�:** 鏌ヨ绔欑偣涓婚浜嬮」
+
+**璇锋眰鍙傛暟:**
+
+鍙傛暟鍚嶇О|绫诲瀷|蹇呭~|鎻忚堪
+:---|:---|:---|:------
+page|Integer|鍚褰撳墠椤�
+size|Integer|鍚姣忛〉鏉℃暟锛屽€间负-1锛屾煡璇㈡墍鏈夎褰�
+siteId|Long|鍚绔欑偣ID
+siteName|String|鍚绔欑偣鍚嶇О,瀛楁鍓嶅悗娣诲姞%%妯$硦鏌ヨ
+matterId|Long|鍚浜嬮」ID
+matterName|String|鍚浜嬮」鍚嶇О,瀛楁鍓嶅悗娣诲姞%%妯$硦鏌ヨ
+matterCode|String|鍚浜嬮」缂栫爜,瀛楁鍓嶅悗娣诲姞%%妯$硦鏌ヨ
+userType|String|鍚鏈嶅姟绫诲瀷锛�1.鍏叡鏈嶅姟锛�2.涓汉鏈嶅姟锛�3.娉曚汉鏈嶅姟锛�,瀛楁鍓嶅悗娣诲姞%%妯$硦鏌ヨ
+themeCode|String|鍚涓婚缂栫爜,瀛楁鍓嶅悗娣诲姞%%妯$硦鏌ヨ
+themeName|String|鍚涓婚鍚嶇О,瀛楁鍓嶅悗娣诲姞%%妯$硦鏌ヨ
+source|Integer|鍚浜嬮」鏉ユ簮
+
+**璇锋眰鏍蜂緥:**
+```
+  {
+        "siteId":2334,
+        "siteName":"j1sn8h",
+        "matterId":5032,
+        "matterName":"xnn17d",
+        "matterCode":"5c6fxz",
+        "userType":"9c8tar",
+        "themeCode":"ztkpff",
+        "themeName":"hyfa7h",
+        "source":3642,
+        "page":1,
+        "size":10
+  }
+
+```
+**鍝嶅簲鍙傛暟:**
+
+鍙傛暟鍚嶇О|鍙傛暟绫诲瀷|鎻忚堪
+:---|:---|:------
+code|Integer|缁撴灉鐮侊紙-1.澶辫触锛�1.鎴愬姛锛�
+msg|String|娑堟伅
+data|object|鏁版嵁瀵硅薄
+ per_page|Integer|姣忛〉鏉℃暟
+ total|Integer|鎬绘潯鏁�
+ last_page|Integer|鎬婚〉鏁�
+ current_page|Integer|褰撳墠椤�
+ data|array|缁撴灉闆嗗垪琛▅鏁扮粍
+  id|Long|搴忓彿锛屼富閿紝鑷闀�
+  siteId|Long|绔欑偣ID
+  siteName|String|绔欑偣鍚嶇О
+  matterId|Long|浜嬮」ID
+  matterName|String|浜嬮」鍚嶇О
+  matterCode|String|浜嬮」缂栫爜
+  userType|String|鏈嶅姟绫诲瀷锛�1.鍏叡鏈嶅姟锛�2.涓汉鏈嶅姟锛�3.娉曚汉鏈嶅姟锛�
+  themeCode|String|涓婚缂栫爜
+  themeName|String|涓婚鍚嶇О
+  source|Integer|浜嬮」鏉ユ簮
+  createTime|Date|鍒涘缓鏃堕棿
+  createUserId|Long|鍒涘缓鐢ㄦ埛
+  updateTime|Date|淇敼鏃堕棿
+dict|object|瀛楀吀瀵硅薄
+ userType|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
+
+**鍝嶅簲娑堟伅鏍蜂緥:**
+```
+{
+    "code":1,
+    "data":{
+    }
+}
+```
+
+### 鏌ョ湅绔欑偣涓婚浜嬮」
+
+**璇锋眰URL:** site/theme/matter/info
+
+**璇锋眰鏂瑰紡:** GET
+
+**鍐呭绫诲瀷:** application/json;charset=utf-8
+
+**绠€瑕佹弿杩�:** 鏌ョ湅绔欑偣涓婚浜嬮」锛岃繑鍥炲疄渚嬭缁嗕俊鎭�
+
+**璇锋眰鍙傛暟:**
+
+鍙傛暟鍚嶇О|绫诲瀷|蹇呭~|鎻忚堪
+:---|:---|:---|:------
+id|Long|鏄瘄ID
+
+**璇锋眰鏍蜂緥:**
+```
+    http://localhost/site/theme/matter/info?id=549
+```
+**鍝嶅簲鍙傛暟:**
+
+鍙傛暟鍚嶇О |鍙傛暟绫诲瀷|鎻忚堪
+:---|:---|:-------
+code|Integer|缁撴灉鐮侊紙-1.澶辫触锛�1.鎴愬姛锛�
+msg|String|娑堟伅
+data|object|鏁版嵁瀵硅薄
+ id|Long|搴忓彿锛屼富閿紝鑷闀�
+ siteId|Long|绔欑偣ID
+ siteName|String|绔欑偣鍚嶇О
+ matterId|Long|浜嬮」ID
+ matterName|String|浜嬮」鍚嶇О
+ matterCode|String|浜嬮」缂栫爜
+ userType|String|鏈嶅姟绫诲瀷锛�1.鍏叡鏈嶅姟锛�2.涓汉鏈嶅姟锛�3.娉曚汉鏈嶅姟锛�
+ themeCode|String|涓婚缂栫爜
+ themeName|String|涓婚鍚嶇О
+ source|Integer|浜嬮」鏉ユ簮
+ createTime|Date|鍒涘缓鏃堕棿
+ createUserId|Long|鍒涘缓鐢ㄦ埛
+ updateTime|Date|淇敼鏃堕棿
+dict|object|瀛楀吀瀵硅薄
+ userType|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
+
+**鍝嶅簲娑堟伅鏍蜂緥:**
+```
+{
+    "code": 1,
+    "data": {
+            "id":6517,
+            "siteId":8377,
+            "siteName":"wnnjis",
+            "matterId":5970,
+            "matterName":"b5c0l3",
+            "matterCode":"y3yyz4",
+            "userType":"sr07tk",
+            "themeCode":"s1az2z",
+            "themeName":"isyo83",
+            "source":7309,
+            "createTime":"2023-01-28",
+            "createUserId":2157,
+            "updateTime":"2023-01-28"
+        }
+}
+```
+
+
+
 ## 涓氬姟
 
 ### 鏌ヨ绔欑偣涓氬姟鍒楄〃
@@ -9264,6 +9533,8 @@ data|object|鏁版嵁瀵硅薄
   updateUserId|Long|鏇存柊鐢ㄦ埛
   updateTime|Date|鏇存柊鏃堕棿
   serviceApi|String|鏈嶅姟鎺ュ彛鍦板潃
+  custUrl|String|鑷富搴旂敤鍓嶇璁块棶鍦板潃
+  appIconUrl|String|鑷富搴旂敤鍓嶇鍥炬爣鍦板潃
 dict|object|瀛楀吀瀵硅薄
  type|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
  shelves|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
@@ -9334,6 +9605,8 @@ data|object|鏁版嵁瀵硅薄
  updateUserId|Long|鏇存柊鐢ㄦ埛
  updateTime|Date|鏇存柊鏃堕棿
  serviceApi|String|鏈嶅姟鎺ュ彛鍦板潃
+ custUrl|String|鑷富搴旂敤鍓嶇璁块棶鍦板潃
+ appIconUrl|String|鑷富搴旂敤鍓嶇鍥炬爣鍦板潃
 dict|object|瀛楀吀瀵硅薄
  type|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
  shelves|object|瀛楀吀灞炴€у璞★紝璇﹁闄勫綍
diff --git a/base-manager/pom.xml b/base-manager/pom.xml
index f1d017c6e593766fd624d66e4643ddb9ef1acdad..466e39cc65c449bb79ac1550932ece8721d0e30b 100644
--- a/base-manager/pom.xml
+++ b/base-manager/pom.xml
@@ -38,7 +38,7 @@
                 <profiles.log.path>/home/mortals/app/logs</profiles.log.path>
                 <profiles.log.level>INFO</profiles.log.level>
                 <package.environment>test</package.environment>
-                <skipDeploy>false</skipDeploy>
+                <skipUi>false</skipUi>
             </properties>
         </profile>
         <profile>
@@ -58,7 +58,7 @@
                 <profiles.log.path>/home/mortals/app/logs</profiles.log.path>
                 <profiles.log.level>INFO</profiles.log.level>
                 <package.environment>test</package.environment>
-                <skipDeploy>false</skipDeploy>
+                <skipUi>true</skipUi>
             </properties>
         </profile>
         <profile>
@@ -78,7 +78,7 @@
                 <profiles.log.path>/home/mortals/app/logs</profiles.log.path>
                 <profiles.log.level>INFO</profiles.log.level>
                 <package.environment>build</package.environment>
-                <skipDeploy>false</skipDeploy>
+                <skipUi>true</skipUi>
             </properties>
         </profile>
 
@@ -88,21 +88,22 @@
                 <profiles.active>yibin</profiles.active>
                 <profiles.server.path>/base</profiles.server.path>
                 <profiles.publish.path>/home/publish</profiles.publish.path>
-                <profiles.rabbitmq.host>127.0.0.1</profiles.rabbitmq.host>
+                <profiles.rabbitmq.host>172.15.28.115</profiles.rabbitmq.host>
                 <profiles.rabbitmq.port>5672</profiles.rabbitmq.port>
                 <profiles.rabbitmq.username>taxi_mq</profiles.rabbitmq.username>
                 <profiles.rabbitmq.password>admin@2020</profiles.rabbitmq.password>
                 <profiles.rabbitmq.virtualhost>/</profiles.rabbitmq.virtualhost>
-                <profiles.nacos.server-addr>127.0.0.1:8848</profiles.nacos.server-addr>
+                <profiles.nacos.server-addr>172.15.28.120:8848</profiles.nacos.server-addr>
                 <profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
                 <profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
                 <profiles.log.path>/home/mortals/app/logs</profiles.log.path>
                 <profiles.filepath>/home/mortals/app/data</profiles.filepath>
                 <profiles.log.level>INFO</profiles.log.level>
                 <package.environment>yibin</package.environment>
-                <skipDeploy>false</skipDeploy>
+                <skipUi>true</skipUi>
             </properties>
         </profile>
+
     </profiles>
 
     <dependencies>
@@ -190,11 +191,11 @@
         </dependency>
         <!-- 铏硅蒋浜鸿劯瑙f瀽 -->
 
-        <dependency>
+<!--        <dependency>
             <groupId>com.arcsoft.face</groupId>
             <artifactId>arcsoft-sdk-face</artifactId>
             <version>3.0.0.0</version>
-        </dependency>
+        </dependency>-->
         <dependency>
             <groupId>net.coobird</groupId>
             <artifactId>thumbnailator</artifactId>
@@ -295,7 +296,7 @@
                 <artifactId>exec-maven-plugin</artifactId>
                 <version>1.6.0</version>
                 <configuration>
-                    <skip>${skipDeploy}</skip>
+                    <skip>${skipUi}</skip>
                 </configuration>
                 <executions>
                     <execution>
@@ -358,7 +359,7 @@
                             <goal>single</goal>
                         </goals>
                         <configuration>
-                            <skipAssembly>${skipDeploy}</skipAssembly>
+                            <skipAssembly>${skipUi}</skipAssembly>
                             <finalName>${project.artifactId}-ui</finalName>
                             <appendAssemblyId>false</appendAssemblyId>
                             <descriptors>
diff --git a/base-manager/src/main/java/com/mortals/xhx/base/framework/aspect/WebLogAspect.java b/base-manager/src/main/java/com/mortals/xhx/base/framework/aspect/WebLogAspect.java
index 67e7a06bfbb87ffed0aec40a85bd6b8f99e36402..9610924573279fc6326004081b8a1db37adab1ef 100644
--- a/base-manager/src/main/java/com/mortals/xhx/base/framework/aspect/WebLogAspect.java
+++ b/base-manager/src/main/java/com/mortals/xhx/base/framework/aspect/WebLogAspect.java
@@ -37,8 +37,8 @@ import java.util.Map;
  * @author: zxfei
  * @date: 2022/4/20 9:24
  */
-//@Aspect
-//@Component
+@Aspect
+@Component
 @Slf4j
 //@Order(1)
 @Profile({"default", "develop", "test"})
diff --git a/base-manager/src/main/java/com/mortals/xhx/base/system/param/service/impl/ParamServiceImpl.java b/base-manager/src/main/java/com/mortals/xhx/base/system/param/service/impl/ParamServiceImpl.java
index ce963f0e63d0ba7d8f1434e230b7d5a9d32a9d14..9f0c82dd47085ca14816326b313d34b07ebec24d 100644
--- a/base-manager/src/main/java/com/mortals/xhx/base/system/param/service/impl/ParamServiceImpl.java
+++ b/base-manager/src/main/java/com/mortals/xhx/base/system/param/service/impl/ParamServiceImpl.java
@@ -1,6 +1,8 @@
 package com.mortals.xhx.base.system.param.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 import com.mortals.framework.exception.AppException;
+import com.mortals.framework.model.Context;
 import com.mortals.framework.service.IParam;
 import com.mortals.framework.service.impl.AbstractCRUDCacheServiceImpl;
 import com.mortals.framework.util.DataUtil;
@@ -32,6 +34,20 @@ public class ParamServiceImpl extends AbstractCRUDCacheServiceImpl<ParamDao, Par
         return "ParamEntity.paramKey";
     }
 
+
+    /**
+     * @param entity
+     * @param context
+     * @throws AppException
+     */
+    @Override
+    protected void saveBefore(ParamEntity entity, Context context) throws AppException {
+        //杩囨护鎹㈣绗�
+        entity.setParamKey(StrUtil.removeAllLineBreaks(entity.getParamKey()));
+        entity.setParamValue(StrUtil.removeAllLineBreaks(entity.getParamValue()));
+        super.saveBefore(entity, context);
+    }
+
     @Override
     public String getValueByKey(String key) {
         List<ParamEntity> list = this.getCacheList();
diff --git a/base-manager/src/main/java/com/mortals/xhx/common/code/JointInfoShowEnum.java b/base-manager/src/main/java/com/mortals/xhx/common/code/JointInfoShowEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..cc08610f716352c96f9ef1451b33aa5d3c5282e2
--- /dev/null
+++ b/base-manager/src/main/java/com/mortals/xhx/common/code/JointInfoShowEnum.java
@@ -0,0 +1,60 @@
+package com.mortals.xhx.common.code;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+public enum JointInfoShowEnum {
+    鍏叡鏈嶅姟閮�("鍏叡鏈嶅姟閮�", "鍏叡鏈嶅姟閮�"),
+    鍏氭斂寤鸿閮�("鍏氭斂寤鸿閮�", "鍏氭斂寤鸿閮�"),
+    缃戠粶鐞嗘斂閮�("缃戠粶鐞嗘斂閮�", "缃戠粶鐞嗘斂閮�");
+    private String value;
+    private String desc;
+
+    JointInfoShowEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    public String getDesc() {
+        return this.desc;
+    }
+
+    public static JointInfoShowEnum getByValue(String value) {
+        for (JointInfoShowEnum isLackEnum : JointInfoShowEnum.values()) {
+            if (isLackEnum.getValue() == value) {
+                return isLackEnum;
+            }
+        }
+        return null;
+    }
+
+    /**
+    * 鑾峰彇Map闆嗗悎
+    *
+    * @param eItem 涓嶅寘鍚」
+    * @return
+    */
+    public static Map<String, String> getEnumMap(String... eItem) {
+        Map<String, String> resultMap = new LinkedHashMap<>();
+        for (JointInfoShowEnum item : JointInfoShowEnum.values()) {
+            try {
+                boolean hasE = false;
+                for (String e : eItem) {
+                    if (item.getValue() == e) {
+                        hasE = true;
+                        break;
+                    }
+                }
+                if (!hasE) {
+                    resultMap.put(item.getValue() + "", item.getDesc());
+                }
+            } catch (Exception ex) {
+
+            }
+        }
+        return resultMap;
+    }
+}
\ No newline at end of file
diff --git a/base-manager/src/main/java/com/mortals/xhx/common/utils/FaceUtil.java b/base-manager/src/main/java/com/mortals/xhx/common/utils/FaceUtil.java
index efb7753650688c6f8b09d15c4ca9f9e6cbdcfc75..d869065882021af3f3c4a2e02ffd1f14dd427127 100644
--- a/base-manager/src/main/java/com/mortals/xhx/common/utils/FaceUtil.java
+++ b/base-manager/src/main/java/com/mortals/xhx/common/utils/FaceUtil.java
@@ -1,110 +1,110 @@
-package com.mortals.xhx.common.utils;
-
-import com.arcsoft.face.*;
-import com.arcsoft.face.enums.DetectMode;
-import com.arcsoft.face.enums.DetectOrient;
-import com.arcsoft.face.enums.ErrorInfo;
-import com.arcsoft.face.toolkit.ImageInfo;
-import com.mortals.framework.exception.AppException;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
-
-@Slf4j
-@Component
-public class FaceUtil {
-
-    public FaceEngine initFace(String appId, String sdkKey) {
-        FaceEngine faceEngine = new FaceEngine(getClass().getResource(getOsName()).getPath());
-        //婵€娲诲紩鎿�
-        int errorCode = faceEngine.activeOnline(appId, sdkKey);
-        isTrue(!(errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()), "寮曟搸婵€娲诲け璐�");
-        ActiveFileInfo activeFileInfo = new ActiveFileInfo();
-        errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
-        isTrue(!(errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()), "鑾峰彇婵€娲绘枃浠朵俊鎭け璐�");
-        //寮曟搸閰嶇疆
-        EngineConfiguration engineConfiguration = new EngineConfiguration();
-        engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
-        engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
-        engineConfiguration.setDetectFaceMaxNum(10);
-        engineConfiguration.setDetectFaceScaleVal(16);
-        //鍔熻兘閰嶇疆
-        FunctionConfiguration functionConfiguration = new FunctionConfiguration();
-        functionConfiguration.setSupportAge(true);
-        functionConfiguration.setSupportFace3dAngle(true);
-        functionConfiguration.setSupportFaceDetect(true);
-        functionConfiguration.setSupportFaceRecognition(true);
-        functionConfiguration.setSupportGender(true);
-        functionConfiguration.setSupportLiveness(true);
-        functionConfiguration.setSupportIRLiveness(true);
-        engineConfiguration.setFunctionConfiguration(functionConfiguration);
-        //鍒濆鍖栧紩鎿�
-        errorCode = faceEngine.init(engineConfiguration);
-        isTrue(errorCode == ErrorInfo.MOK.getValue(), "鍒濆鍖栧紩鎿庡け璐�");
-        return faceEngine;
-    }
-
-
-    /**
-     * 浜鸿劯妫€娴嬨€佺壒寰佹彁鍙�
-     *
-     * @param faceEngine
-     * @param bytes
-     * @return
-     */
-    public byte[] featureData(FaceEngine faceEngine, byte[] bytes) {
-        //浜鸿劯妫€娴�
-        ImageInfo imageInfo = getRGBData(bytes);
-        List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
-        faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
-        //鐗瑰緛鎻愬彇
-        FaceFeature faceFeature = new FaceFeature();
-        faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
-        return faceFeature.getFeatureData();
-    }
-
-
-    /**
-     * 鐗瑰緛姣斿
-     *
-     * @param targeFace
-     * @param sourceFace
-     * @return
-     */
-    public boolean featureComparison(FaceEngine faceEngine, byte[] targeFace, byte[] sourceFace) {
-        //鐗瑰緛姣斿
-        FaceFeature targetFaceFeature = new FaceFeature();
-        targetFaceFeature.setFeatureData(targeFace);
-        FaceFeature sourceFaceFeature = new FaceFeature();
-        sourceFaceFeature.setFeatureData(sourceFace);
-        FaceSimilar faceSimilar = new FaceSimilar();
-        faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
-        float score = faceSimilar.getScore();
-        if (score > 0.8) {
-            return true;
-        }
-        return false;
-    }
-
-    public void unInit(FaceEngine faceEngine) {
-        faceEngine.unInit();
-    }
-
-    public String getOsName() {
-        String os = System.getProperty("os.name");
-        String osName = os.toLowerCase().startsWith("win") ? "/face_lib/win64" : "/face_lib/linux";
-        return osName;
-    }
-
-
-    private void isTrue(boolean b, String errorMsg) {
-        if (!b) {
-            throw new AppException(errorMsg);
-        }
-    }
-
-}
+//package com.mortals.xhx.common.utils;
+//
+//import com.arcsoft.face.*;
+//import com.arcsoft.face.enums.DetectMode;
+//import com.arcsoft.face.enums.DetectOrient;
+//import com.arcsoft.face.enums.ErrorInfo;
+//import com.arcsoft.face.toolkit.ImageInfo;
+//import com.mortals.framework.exception.AppException;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//
+//import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
+//
+//@Slf4j
+//@Component
+//public class FaceUtil {
+//
+//    public FaceEngine initFace(String appId, String sdkKey) {
+//        FaceEngine faceEngine = new FaceEngine(getClass().getResource(getOsName()).getPath());
+//        //婵€娲诲紩鎿�
+//        int errorCode = faceEngine.activeOnline(appId, sdkKey);
+//        isTrue(!(errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()), "寮曟搸婵€娲诲け璐�");
+//        ActiveFileInfo activeFileInfo = new ActiveFileInfo();
+//        errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
+//        isTrue(!(errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()), "鑾峰彇婵€娲绘枃浠朵俊鎭け璐�");
+//        //寮曟搸閰嶇疆
+//        EngineConfiguration engineConfiguration = new EngineConfiguration();
+//        engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
+//        engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
+//        engineConfiguration.setDetectFaceMaxNum(10);
+//        engineConfiguration.setDetectFaceScaleVal(16);
+//        //鍔熻兘閰嶇疆
+//        FunctionConfiguration functionConfiguration = new FunctionConfiguration();
+//        functionConfiguration.setSupportAge(true);
+//        functionConfiguration.setSupportFace3dAngle(true);
+//        functionConfiguration.setSupportFaceDetect(true);
+//        functionConfiguration.setSupportFaceRecognition(true);
+//        functionConfiguration.setSupportGender(true);
+//        functionConfiguration.setSupportLiveness(true);
+//        functionConfiguration.setSupportIRLiveness(true);
+//        engineConfiguration.setFunctionConfiguration(functionConfiguration);
+//        //鍒濆鍖栧紩鎿�
+//        errorCode = faceEngine.init(engineConfiguration);
+//        isTrue(errorCode == ErrorInfo.MOK.getValue(), "鍒濆鍖栧紩鎿庡け璐�");
+//        return faceEngine;
+//    }
+//
+//
+//    /**
+//     * 浜鸿劯妫€娴嬨€佺壒寰佹彁鍙�
+//     *
+//     * @param faceEngine
+//     * @param bytes
+//     * @return
+//     */
+//    public byte[] featureData(FaceEngine faceEngine, byte[] bytes) {
+//        //浜鸿劯妫€娴�
+//        ImageInfo imageInfo = getRGBData(bytes);
+//        List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
+//        faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
+//        //鐗瑰緛鎻愬彇
+//        FaceFeature faceFeature = new FaceFeature();
+//        faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
+//        return faceFeature.getFeatureData();
+//    }
+//
+//
+//    /**
+//     * 鐗瑰緛姣斿
+//     *
+//     * @param targeFace
+//     * @param sourceFace
+//     * @return
+//     */
+//    public boolean featureComparison(FaceEngine faceEngine, byte[] targeFace, byte[] sourceFace) {
+//        //鐗瑰緛姣斿
+//        FaceFeature targetFaceFeature = new FaceFeature();
+//        targetFaceFeature.setFeatureData(targeFace);
+//        FaceFeature sourceFaceFeature = new FaceFeature();
+//        sourceFaceFeature.setFeatureData(sourceFace);
+//        FaceSimilar faceSimilar = new FaceSimilar();
+//        faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
+//        float score = faceSimilar.getScore();
+//        if (score > 0.8) {
+//            return true;
+//        }
+//        return false;
+//    }
+//
+//    public void unInit(FaceEngine faceEngine) {
+//        faceEngine.unInit();
+//    }
+//
+//    public String getOsName() {
+//        String os = System.getProperty("os.name");
+//        String osName = os.toLowerCase().startsWith("win") ? "/face_lib/win64" : "/face_lib/linux";
+//        return osName;
+//    }
+//
+//
+//    private void isTrue(boolean b, String errorMsg) {
+//        if (!b) {
+//            throw new AppException(errorMsg);
+//        }
+//    }
+//
+//}
diff --git a/base-manager/src/main/java/com/mortals/xhx/common/utils/SyncGovMatterDetailThread.java b/base-manager/src/main/java/com/mortals/xhx/common/utils/SyncGovMatterDetailThread.java
index 0957b78dc38a1ad7517a3e8ec288973c7ceed3ff..9e1b3b02bda8a58f30b2db1f723e2c9d6e9abf4d 100644
--- a/base-manager/src/main/java/com/mortals/xhx/common/utils/SyncGovMatterDetailThread.java
+++ b/base-manager/src/main/java/com/mortals/xhx/common/utils/SyncGovMatterDetailThread.java
@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSON;
 import com.mortals.framework.common.Rest;
 import com.mortals.framework.model.Context;
 import com.mortals.framework.service.ICacheService;
-import com.mortals.xhx.ManagerBaseApplication;
 import com.mortals.xhx.common.code.DxTypeEnum;
 import com.mortals.xhx.common.code.SourceEnum;
 import com.mortals.xhx.common.code.YesNoEnum;
@@ -24,12 +23,8 @@ import com.mortals.xhx.module.site.service.SiteService;
 import com.mortals.xhx.module.site.service.SiteThemeMatterService;
 import com.mortals.xhx.module.site.service.SiteThemeService;
 import com.mortals.xhx.utils.SpringUtils;
-import lombok.AllArgsConstructor;
-import lombok.CustomLog;
 import lombok.extern.apachecommons.CommonsLog;
-import lombok.extern.slf4j.Slf4j;
 
-import javax.xml.transform.Source;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -91,7 +86,7 @@ public class SyncGovMatterDetailThread implements Runnable {
             //閲嶆柊娣诲姞
             for (SiteEntity site : siteEntities) {
                 List<SiteMatterEntity> siteMatterList = matterEntityList.stream().map(item -> {
-                    return matterService.switchMatterToSiteMatterr(item, site, context).getData();
+                    return matterService.switchMatterToSiteMatter(item, site, context).getData();
                 }).filter(f -> f != null).collect(Collectors.toList());
 
                 List<List<SiteMatterEntity>> partition = ListUtil.partition(siteMatterList, 100);
diff --git a/base-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/DemoStartedService.java b/base-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/DemoStartedService.java
index e50af4fc8c72d262a19a589f215cf814e090476c..fef10b16b96559985513e98105147105e3da11b4 100644
--- a/base-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/DemoStartedService.java
+++ b/base-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/DemoStartedService.java
@@ -55,7 +55,15 @@ public class DemoStartedService implements IApplicationStartedService {
         SyncTreeSiteThread syncTreeSiteThread = new SyncTreeSiteThread(contextTemp);
         ThreadPool.getInstance().execute(syncTreeSiteThread);
 
-        if(ObjectUtils.isEmpty(userFeign)){
+
+        userService.find(new UserQuery()).forEach(user->{
+            Context context = new Context();
+            context.setUser(user);
+            ThreadPool.getInstance().execute(new SyncTreeSiteThread(context));
+        });
+
+
+/*        if(ObjectUtils.isEmpty(userFeign)){
             logger.info("userFeign鏈姞杞�,鍔犺浇鏈湴鐢ㄦ埛");
             userService.find(new UserQuery()).forEach(user->{
                 Context context = new Context();
@@ -64,9 +72,9 @@ public class DemoStartedService implements IApplicationStartedService {
             });
 
             return;
-        }
+        }*/
 
-        userFeign.list(new UserPdu()).getData().getData().stream().forEach(userPdu->{
+/*        userFeign.list(new UserPdu()).getData().getData().stream().forEach(userPdu->{
             Context context = new Context();
 
             UserEntity entity = new UserEntity();
@@ -75,7 +83,7 @@ public class DemoStartedService implements IApplicationStartedService {
 
             context.setUser(entity);
             ThreadPool.getInstance().execute(new SyncTreeSiteThread(context));
-        });
+        });*/
     }
 
     @Override
diff --git a/base-manager/src/main/java/com/mortals/xhx/face/ArcsoftFaceUtil.java b/base-manager/src/main/java/com/mortals/xhx/face/ArcsoftFaceUtil.java
index 455525ed92a73825419f2b1513a0e9890995a74e..b024a438dcd1e8653c3fef6b4ce7e32db5afa5c9 100644
--- a/base-manager/src/main/java/com/mortals/xhx/face/ArcsoftFaceUtil.java
+++ b/base-manager/src/main/java/com/mortals/xhx/face/ArcsoftFaceUtil.java
@@ -1,236 +1,236 @@
-package com.mortals.xhx.face;
-
-import com.arcsoft.face.*;
-import com.arcsoft.face.toolkit.ImageInfo;
-import com.google.common.collect.Lists;
-import com.mortals.xhx.face.factory.FaceEnginePoolFactory;
-import com.mortals.xhx.module.identity.model.SysFaceEntity;
-import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.pool2.impl.AbandonedConfig;
-import org.apache.commons.pool2.impl.GenericObjectPool;
-import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-
-import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
-
-@Slf4j
-@Component
-public class ArcsoftFaceUtil {
-
-    @Value(value = "${faceAppId}")
-    private String appId;
-
-    @Value(value = "${winSdkKey}")
-    private String winSdkKey;
-
-    @Value(value = "${linuxSdkkey}")
-    private String linuxSdkKey;
-
-
-    public Integer threadPoolSize=5;
-
-    private GenericObjectPool<FaceEngine> faceEngineGenericObjectPool;
-
-    public ArcsoftFaceUtil(){
-
-        String sdkLibPath = getClass().getResource(getOsName()).getPath();
-        String sdkKey = getSdkKey(sdkLibPath);
-        // 瀵硅薄姹犲伐鍘�
-        FaceEnginePoolFactory personPoolFactory = new FaceEnginePoolFactory(appId,sdkKey,sdkLibPath);
-        // 瀵硅薄姹犻厤缃�
-        GenericObjectPoolConfig<FaceEngine> objectPoolConfig = new GenericObjectPoolConfig<>();
-        objectPoolConfig.setMaxTotal(threadPoolSize);
-        AbandonedConfig abandonedConfig = new AbandonedConfig();
-        //鍦∕aintenance鐨勬椂鍊欐鏌ユ槸鍚︽湁娉勬紡
-        abandonedConfig.setRemoveAbandonedOnMaintenance(true);
-        //borrow 鐨勬椂鍊欐鏌ユ硠婕�
-        abandonedConfig.setRemoveAbandonedOnBorrow(true);
-        //濡傛灉涓€涓璞orrow涔嬪悗10绉掕繕娌℃湁杩旇繕缁檖ool锛岃涓烘槸娉勬紡鐨勫璞�
-        abandonedConfig.setRemoveAbandonedTimeout(10);
-        // 瀵硅薄姹�
-        faceEngineGenericObjectPool = new GenericObjectPool<>(personPoolFactory, objectPoolConfig);
-        faceEngineGenericObjectPool.setAbandonedConfig(abandonedConfig);
-        faceEngineGenericObjectPool.setTimeBetweenEvictionRunsMillis(5000); //5绉掕繍琛屼竴娆$淮鎶や换鍔�
-        log.info("寮曟搸姹犲紑鍚垚鍔�");
-    }
-
-    private String getOsName() {
-        String os = System.getProperty("os.name");
-        String osName = os.toLowerCase().startsWith("win") ? "/face_lib/win64" : "/face_lib/linux";
-        return osName;
-    }
-
-    private String getSdkKey(String sdkLibPath) {
-        return sdkLibPath.equals("/face_lib/win64") ? winSdkKey : linuxSdkKey;
-    }
-
-    /**
-     * 浜鸿劯妫€娴�
-     *
-     * @param fileInputStream
-     * @return
-     */
-    public List<FaceInfo> faceFind(InputStream fileInputStream) throws IOException {
-        FaceEngine faceEngine = null;
-        try {
-            faceEngine = faceEngineGenericObjectPool.borrowObject();
-            ImageInfo imageInfo = getRGBData(fileInputStream);
-            List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
-            int errorCode = faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
-            return faceInfoList;
-        } catch (Exception e) {
-            log.error("浜鸿劯妫€娴嬪嚭鐜颁簡寮傚父");
-            e.printStackTrace();
-            return new ArrayList<FaceInfo>();
-        } finally {
-            fileInputStream.close();
-            // 鍥炴敹瀵硅薄鍒板璞℃睜
-            if (faceEngine != null) {
-                faceEngineGenericObjectPool.returnObject(faceEngine);
-            }
-        }
-
-    }
-
-    /**
-     * 浜鸿劯鎴彇
-     *
-     * @param fileInputStream
-     * @param rect
-     * @return
-     */
-    public  String faceCrop(InputStream fileInputStream, Rect rect) {
-        try {
-            ByteArrayOutputStream stream = new ByteArrayOutputStream();
-            BufferedImage bufImage = ImageIO.read(fileInputStream);
-            int height = bufImage.getHeight();
-            int width = bufImage.getWidth();
-            int top = rect.getTop();
-            int bottom = rect.getBottom();
-            int left = rect.getLeft();
-            int right = rect.getRight();
-            //System.out.println(top + "-" + bottom + "-" + left + "-" + right);
-            try {
-                BufferedImage subimage = bufImage.getSubimage(left, top, right - left, bottom - left);
-                ImageIO.write(subimage, "png", stream);
-                String base64 = Base64.encode(stream.toByteArray());
-                return base64;
-            }catch (Exception e){
-                return null;
-            }finally {
-                stream.close();
-                fileInputStream.close();
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }finally {
-
-        }
-        return null;
-    }
-
-    /**
-     * 浜鸿劯鐗瑰緛鍊兼彁鍙�
-     */
-    public byte[] faceFeature(byte[] bytes) {
-        FaceEngine faceEngine = null;
-
-        try {
-            faceEngine = faceEngineGenericObjectPool.borrowObject();
-            ImageInfo imageInfo = getRGBData(bytes);
-            //浜鸿劯妫€娴嬪緱鍒颁汉鑴稿垪琛�
-            List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
-            faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
-            FaceFeature faceFeature = new FaceFeature();
-            faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
-            byte[] featureData = faceFeature.getFeatureData();
-            return featureData;
-        } catch (Exception e) {
-            log.error("浜鸿劯鐗瑰緛鍊兼彁鍙栧嚭鐜颁簡寮傚父");
-            e.printStackTrace();
-            return new byte[0];
-        } finally {
-            // 鍥炴敹瀵硅薄鍒板璞℃睜
-            if (faceEngine != null) {
-                faceEngineGenericObjectPool.returnObject(faceEngine);
-            }
-        }
-    }
-
-    /**
-     * 浜鸿劯瀵规瘮
-     */
-    public float faceCompared(byte [] source,byte [] des) throws IOException {
-        FaceEngine faceEngine = null;
-        try {
-            faceEngine = faceEngineGenericObjectPool.borrowObject();
-            FaceFeature targetFaceFeature = new FaceFeature();
-            targetFaceFeature.setFeatureData(source);
-            FaceFeature sourceFaceFeature = new FaceFeature();
-            sourceFaceFeature.setFeatureData(des);
-            FaceSimilar faceSimilar = new FaceSimilar();
-            faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
-            float score = faceSimilar.getScore();
-            return score;
-        } catch (Exception e) {
-            log.error("浜鸿劯瀵规瘮鍑虹幇浜嗗紓甯�");
-            e.printStackTrace();
-            return 0;
-        } finally {
-            // 鍥炴敹瀵硅薄鍒板璞℃睜
-            if (faceEngine != null) {
-                faceEngineGenericObjectPool.returnObject(faceEngine);
-            }
-        }
-    }
-
-    /**
-     * 浜鸿劯鎼滅储
-     */
-    public List<SysFaceEntity> faceSearch(FaceFeature targetFaceFeature,List<SysFaceEntity> sourceList) throws IOException {
-        FaceEngine faceEngine = null;
-        List<SysFaceEntity> resultFaceInfoList = Lists.newLinkedList();//璇嗗埆鍒扮殑浜鸿劯鍒楄〃
-        try {
-            faceEngine = faceEngineGenericObjectPool.borrowObject();
-
-            for(SysFaceEntity faceUserInfo : sourceList) {
-                FaceFeature sourceFaceFeature = new FaceFeature();
-                sourceFaceFeature.setFeatureData(faceUserInfo.getFaceFeature());
-                FaceSimilar faceSimilar = new FaceSimilar();
-                faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
-                float score = faceSimilar.getScore();
-                if(score > 0.8){
-                    faceUserInfo.setSimilarValue(plusHundred(score));
-                    resultFaceInfoList.add(faceUserInfo);
-                }
-            }
-        } catch (Exception e) {
-            log.error("浜鸿劯瀵规瘮鍑虹幇浜嗗紓甯�");
-            e.printStackTrace();
-        } finally {
-            // 鍥炴敹瀵硅薄鍒板璞℃睜
-            if (faceEngine != null) {
-                faceEngineGenericObjectPool.returnObject(faceEngine);
-            }
-        }
-        return resultFaceInfoList;
-    }
-
-    private int plusHundred(Float value) {
-        BigDecimal target = new BigDecimal(value);
-        BigDecimal hundred = new BigDecimal(100f);
-        return target.multiply(hundred).intValue();
-    }
-
-}
+//package com.mortals.xhx.face;
+//
+//import com.arcsoft.face.*;
+//import com.arcsoft.face.toolkit.ImageInfo;
+//import com.google.common.collect.Lists;
+//import com.mortals.xhx.face.factory.FaceEnginePoolFactory;
+//import com.mortals.xhx.module.identity.model.SysFaceEntity;
+//import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
+//import lombok.extern.slf4j.Slf4j;
+//import org.apache.commons.pool2.impl.AbandonedConfig;
+//import org.apache.commons.pool2.impl.GenericObjectPool;
+//import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//
+//import javax.imageio.ImageIO;
+//import java.awt.image.BufferedImage;
+//import java.io.ByteArrayOutputStream;
+//import java.io.IOException;
+//import java.io.InputStream;
+//import java.math.BigDecimal;
+//import java.util.ArrayList;
+//import java.util.List;
+//
+//import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
+//
+//@Slf4j
+//@Component
+//public class ArcsoftFaceUtil {
+//
+//    @Value(value = "${faceAppId}")
+//    private String appId;
+//
+//    @Value(value = "${winSdkKey}")
+//    private String winSdkKey;
+//
+//    @Value(value = "${linuxSdkkey}")
+//    private String linuxSdkKey;
+//
+//
+//    public Integer threadPoolSize=5;
+//
+//    private GenericObjectPool<FaceEngine> faceEngineGenericObjectPool;
+//
+//    public ArcsoftFaceUtil(){
+//
+//        String sdkLibPath = getClass().getResource(getOsName()).getPath();
+//        String sdkKey = getSdkKey(sdkLibPath);
+//        // 瀵硅薄姹犲伐鍘�
+//        FaceEnginePoolFactory personPoolFactory = new FaceEnginePoolFactory(appId,sdkKey,sdkLibPath);
+//        // 瀵硅薄姹犻厤缃�
+//        GenericObjectPoolConfig<FaceEngine> objectPoolConfig = new GenericObjectPoolConfig<>();
+//        objectPoolConfig.setMaxTotal(threadPoolSize);
+//        AbandonedConfig abandonedConfig = new AbandonedConfig();
+//        //鍦∕aintenance鐨勬椂鍊欐鏌ユ槸鍚︽湁娉勬紡
+//        abandonedConfig.setRemoveAbandonedOnMaintenance(true);
+//        //borrow 鐨勬椂鍊欐鏌ユ硠婕�
+//        abandonedConfig.setRemoveAbandonedOnBorrow(true);
+//        //濡傛灉涓€涓璞orrow涔嬪悗10绉掕繕娌℃湁杩旇繕缁檖ool锛岃涓烘槸娉勬紡鐨勫璞�
+//        abandonedConfig.setRemoveAbandonedTimeout(10);
+//        // 瀵硅薄姹�
+//        faceEngineGenericObjectPool = new GenericObjectPool<>(personPoolFactory, objectPoolConfig);
+//        faceEngineGenericObjectPool.setAbandonedConfig(abandonedConfig);
+//        faceEngineGenericObjectPool.setTimeBetweenEvictionRunsMillis(5000); //5绉掕繍琛屼竴娆$淮鎶や换鍔�
+//        log.info("寮曟搸姹犲紑鍚垚鍔�");
+//    }
+//
+//    private String getOsName() {
+//        String os = System.getProperty("os.name");
+//        String osName = os.toLowerCase().startsWith("win") ? "/face_lib/win64" : "/face_lib/linux";
+//        return osName;
+//    }
+//
+//    private String getSdkKey(String sdkLibPath) {
+//        return sdkLibPath.equals("/face_lib/win64") ? winSdkKey : linuxSdkKey;
+//    }
+//
+//    /**
+//     * 浜鸿劯妫€娴�
+//     *
+//     * @param fileInputStream
+//     * @return
+//     */
+//    public List<FaceInfo> faceFind(InputStream fileInputStream) throws IOException {
+//        FaceEngine faceEngine = null;
+//        try {
+//            faceEngine = faceEngineGenericObjectPool.borrowObject();
+//            ImageInfo imageInfo = getRGBData(fileInputStream);
+//            List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
+//            int errorCode = faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
+//            return faceInfoList;
+//        } catch (Exception e) {
+//            log.error("浜鸿劯妫€娴嬪嚭鐜颁簡寮傚父");
+//            e.printStackTrace();
+//            return new ArrayList<FaceInfo>();
+//        } finally {
+//            fileInputStream.close();
+//            // 鍥炴敹瀵硅薄鍒板璞℃睜
+//            if (faceEngine != null) {
+//                faceEngineGenericObjectPool.returnObject(faceEngine);
+//            }
+//        }
+//
+//    }
+//
+//    /**
+//     * 浜鸿劯鎴彇
+//     *
+//     * @param fileInputStream
+//     * @param rect
+//     * @return
+//     */
+//    public  String faceCrop(InputStream fileInputStream, Rect rect) {
+//        try {
+//            ByteArrayOutputStream stream = new ByteArrayOutputStream();
+//            BufferedImage bufImage = ImageIO.read(fileInputStream);
+//            int height = bufImage.getHeight();
+//            int width = bufImage.getWidth();
+//            int top = rect.getTop();
+//            int bottom = rect.getBottom();
+//            int left = rect.getLeft();
+//            int right = rect.getRight();
+//            //System.out.println(top + "-" + bottom + "-" + left + "-" + right);
+//            try {
+//                BufferedImage subimage = bufImage.getSubimage(left, top, right - left, bottom - left);
+//                ImageIO.write(subimage, "png", stream);
+//                String base64 = Base64.encode(stream.toByteArray());
+//                return base64;
+//            }catch (Exception e){
+//                return null;
+//            }finally {
+//                stream.close();
+//                fileInputStream.close();
+//            }
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }finally {
+//
+//        }
+//        return null;
+//    }
+//
+//    /**
+//     * 浜鸿劯鐗瑰緛鍊兼彁鍙�
+//     */
+//    public byte[] faceFeature(byte[] bytes) {
+//        FaceEngine faceEngine = null;
+//
+//        try {
+//            faceEngine = faceEngineGenericObjectPool.borrowObject();
+//            ImageInfo imageInfo = getRGBData(bytes);
+//            //浜鸿劯妫€娴嬪緱鍒颁汉鑴稿垪琛�
+//            List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
+//            faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
+//            FaceFeature faceFeature = new FaceFeature();
+//            faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
+//            byte[] featureData = faceFeature.getFeatureData();
+//            return featureData;
+//        } catch (Exception e) {
+//            log.error("浜鸿劯鐗瑰緛鍊兼彁鍙栧嚭鐜颁簡寮傚父");
+//            e.printStackTrace();
+//            return new byte[0];
+//        } finally {
+//            // 鍥炴敹瀵硅薄鍒板璞℃睜
+//            if (faceEngine != null) {
+//                faceEngineGenericObjectPool.returnObject(faceEngine);
+//            }
+//        }
+//    }
+//
+//    /**
+//     * 浜鸿劯瀵规瘮
+//     */
+//    public float faceCompared(byte [] source,byte [] des) throws IOException {
+//        FaceEngine faceEngine = null;
+//        try {
+//            faceEngine = faceEngineGenericObjectPool.borrowObject();
+//            FaceFeature targetFaceFeature = new FaceFeature();
+//            targetFaceFeature.setFeatureData(source);
+//            FaceFeature sourceFaceFeature = new FaceFeature();
+//            sourceFaceFeature.setFeatureData(des);
+//            FaceSimilar faceSimilar = new FaceSimilar();
+//            faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
+//            float score = faceSimilar.getScore();
+//            return score;
+//        } catch (Exception e) {
+//            log.error("浜鸿劯瀵规瘮鍑虹幇浜嗗紓甯�");
+//            e.printStackTrace();
+//            return 0;
+//        } finally {
+//            // 鍥炴敹瀵硅薄鍒板璞℃睜
+//            if (faceEngine != null) {
+//                faceEngineGenericObjectPool.returnObject(faceEngine);
+//            }
+//        }
+//    }
+//
+//    /**
+//     * 浜鸿劯鎼滅储
+//     */
+//    public List<SysFaceEntity> faceSearch(FaceFeature targetFaceFeature,List<SysFaceEntity> sourceList) throws IOException {
+//        FaceEngine faceEngine = null;
+//        List<SysFaceEntity> resultFaceInfoList = Lists.newLinkedList();//璇嗗埆鍒扮殑浜鸿劯鍒楄〃
+//        try {
+//            faceEngine = faceEngineGenericObjectPool.borrowObject();
+//
+//            for(SysFaceEntity faceUserInfo : sourceList) {
+//                FaceFeature sourceFaceFeature = new FaceFeature();
+//                sourceFaceFeature.setFeatureData(faceUserInfo.getFaceFeature());
+//                FaceSimilar faceSimilar = new FaceSimilar();
+//                faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
+//                float score = faceSimilar.getScore();
+//                if(score > 0.8){
+//                    faceUserInfo.setSimilarValue(plusHundred(score));
+//                    resultFaceInfoList.add(faceUserInfo);
+//                }
+//            }
+//        } catch (Exception e) {
+//            log.error("浜鸿劯瀵规瘮鍑虹幇浜嗗紓甯�");
+//            e.printStackTrace();
+//        } finally {
+//            // 鍥炴敹瀵硅薄鍒板璞℃睜
+//            if (faceEngine != null) {
+//                faceEngineGenericObjectPool.returnObject(faceEngine);
+//            }
+//        }
+//        return resultFaceInfoList;
+//    }
+//
+//    private int plusHundred(Float value) {
+//        BigDecimal target = new BigDecimal(value);
+//        BigDecimal hundred = new BigDecimal(100f);
+//        return target.multiply(hundred).intValue();
+//    }
+//
+//}
diff --git a/base-manager/src/main/java/com/mortals/xhx/face/factory/FaceEnginePoolFactory.java b/base-manager/src/main/java/com/mortals/xhx/face/factory/FaceEnginePoolFactory.java
index b2c325d8d1be40e382c36ec70ae28bed0e88d4e7..81da120586dadd06794eb130a28d45d1e64541d0 100644
--- a/base-manager/src/main/java/com/mortals/xhx/face/factory/FaceEnginePoolFactory.java
+++ b/base-manager/src/main/java/com/mortals/xhx/face/factory/FaceEnginePoolFactory.java
@@ -1,121 +1,121 @@
-package com.mortals.xhx.face.factory;
-
-import com.arcsoft.face.ActiveFileInfo;
-import com.arcsoft.face.EngineConfiguration;
-import com.arcsoft.face.FaceEngine;
-import com.arcsoft.face.FunctionConfiguration;
-import com.arcsoft.face.enums.DetectMode;
-import com.arcsoft.face.enums.DetectOrient;
-import com.arcsoft.face.enums.ErrorInfo;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.pool2.BasePooledObjectFactory;
-import org.apache.commons.pool2.PooledObject;
-import org.apache.commons.pool2.impl.DefaultPooledObject;
-
-@Slf4j
-public class FaceEnginePoolFactory  extends BasePooledObjectFactory<FaceEngine> {
-
-    private String appId;
-    private String sdkKey;
-    private String sdkLibPath;
-
-    public FaceEnginePoolFactory(String appId, String sdkKey, String sdkLibPath) {
-        this.appId = appId;
-        this.sdkKey = sdkKey;
-        this.sdkLibPath = sdkLibPath;
-        //this.sdkLibPath = "D:\\face\\win64";
-    }
-
-    /**
-     * 鍦ㄥ璞℃睜涓垱寤哄璞�
-     * @return
-     * @throws Exception
-     */
-    @Override
-    public FaceEngine create() throws Exception {
-        FaceEngine faceEngine = new FaceEngine(sdkLibPath);
-        //婵€娲诲紩鎿�
-        int errorCode = faceEngine.activeOnline(appId, sdkKey);
-        if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
-            log.warn("寮曟搸婵€娲诲け璐�");
-        }
-        ActiveFileInfo activeFileInfo=new ActiveFileInfo();
-        errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
-        if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
-            log.warn("鑾峰彇婵€娲绘枃浠朵俊鎭け璐�");
-        }
-        //寮曟搸閰嶇疆
-        EngineConfiguration engineConfiguration = new EngineConfiguration();
-        engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
-        engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
-        engineConfiguration.setDetectFaceMaxNum(10);
-        engineConfiguration.setDetectFaceScaleVal(16);
-        //鍔熻兘閰嶇疆
-        FunctionConfiguration functionConfiguration = new FunctionConfiguration();
-        functionConfiguration.setSupportAge(true);
-        functionConfiguration.setSupportFace3dAngle(true);
-        functionConfiguration.setSupportFaceDetect(true);
-        functionConfiguration.setSupportFaceRecognition(true);
-        functionConfiguration.setSupportGender(true);
-        functionConfiguration.setSupportLiveness(true);
-        functionConfiguration.setSupportIRLiveness(true);
-        engineConfiguration.setFunctionConfiguration(functionConfiguration);
-        //鍒濆鍖栧紩鎿�
-        errorCode = faceEngine.init(engineConfiguration);
-
-        if (errorCode != ErrorInfo.MOK.getValue()) {
-            log.error("鍒濆鍖栧紩鎿庡け璐�");
-        }
-        return faceEngine;
-    }
-
-    /**
-     * 鍖呰瀵硅薄
-     * @param faceEngine
-     * @return
-     */
-    @Override
-    public PooledObject<FaceEngine> wrap(FaceEngine faceEngine) {
-        return new DefaultPooledObject<>(faceEngine);
-    }
-    /**
-     * 閿€姣佸璞�
-     * @param faceEngine 瀵硅薄姹�
-     * @throws Exception 寮傚父
-     */
-    @Override
-    public void destroyObject(PooledObject<FaceEngine> faceEngine) throws Exception {
-        super.destroyObject(faceEngine);
-    }
-
-    /**
-     * 鏍¢獙瀵硅薄鏄惁鍙敤
-     * @param faceEngine 瀵硅薄姹�
-     * @return 瀵硅薄鏄惁鍙敤缁撴灉锛宐oolean
-     */
-    @Override
-    public boolean validateObject(PooledObject<FaceEngine> faceEngine) {
-        return super.validateObject(faceEngine);
-    }
-
-    /**
-     * 婵€娲婚挐鍖栫殑瀵硅薄绯诲垪鎿嶄綔
-     * @param faceEngine 瀵硅薄姹�
-     * @throws Exception 寮傚父淇℃伅
-     */
-    @Override
-    public void activateObject(PooledObject<FaceEngine> faceEngine) throws Exception {
-        super.activateObject(faceEngine);
-    }
-
-    /**
-     * 閽濆寲鏈娇鐢ㄧ殑瀵硅薄
-     * @param faceEngine 瀵硅薄姹�
-     * @throws Exception 寮傚父淇℃伅
-     */
-    @Override
-    public void passivateObject(PooledObject<FaceEngine> faceEngine) throws Exception {
-        super.passivateObject(faceEngine);
-    }
-
-}
+//package com.mortals.xhx.face.factory;
+//
+//import com.arcsoft.face.ActiveFileInfo;
+//import com.arcsoft.face.EngineConfiguration;
+//import com.arcsoft.face.FaceEngine;
+//import com.arcsoft.face.FunctionConfiguration;
+//import com.arcsoft.face.enums.DetectMode;
+//import com.arcsoft.face.enums.DetectOrient;
+//import com.arcsoft.face.enums.ErrorInfo;
+//import lombok.extern.slf4j.Slf4j;
+//import org.apache.commons.pool2.BasePooledObjectFactory;
+//import org.apache.commons.pool2.PooledObject;
+//import org.apache.commons.pool2.impl.DefaultPooledObject;
+//
+//@Slf4j
+//public class FaceEnginePoolFactory  extends BasePooledObjectFactory<FaceEngine> {
+//
+//    private String appId;
+//    private String sdkKey;
+//    private String sdkLibPath;
+//
+//    public FaceEnginePoolFactory(String appId, String sdkKey, String sdkLibPath) {
+//        this.appId = appId;
+//        this.sdkKey = sdkKey;
+//        this.sdkLibPath = sdkLibPath;
+//        //this.sdkLibPath = "D:\\face\\win64";
+//    }
+//
+//    /**
+//     * 鍦ㄥ璞℃睜涓垱寤哄璞�
+//     * @return
+//     * @throws Exception
+//     */
+//    @Override
+//    public FaceEngine create() throws Exception {
+//        FaceEngine faceEngine = new FaceEngine(sdkLibPath);
+//        //婵€娲诲紩鎿�
+//        int errorCode = faceEngine.activeOnline(appId, sdkKey);
+//        if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
+//            log.warn("寮曟搸婵€娲诲け璐�");
+//        }
+//        ActiveFileInfo activeFileInfo=new ActiveFileInfo();
+//        errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
+//        if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
+//            log.warn("鑾峰彇婵€娲绘枃浠朵俊鎭け璐�");
+//        }
+//        //寮曟搸閰嶇疆
+//        EngineConfiguration engineConfiguration = new EngineConfiguration();
+//        engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
+//        engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
+//        engineConfiguration.setDetectFaceMaxNum(10);
+//        engineConfiguration.setDetectFaceScaleVal(16);
+//        //鍔熻兘閰嶇疆
+//        FunctionConfiguration functionConfiguration = new FunctionConfiguration();
+//        functionConfiguration.setSupportAge(true);
+//        functionConfiguration.setSupportFace3dAngle(true);
+//        functionConfiguration.setSupportFaceDetect(true);
+//        functionConfiguration.setSupportFaceRecognition(true);
+//        functionConfiguration.setSupportGender(true);
+//        functionConfiguration.setSupportLiveness(true);
+//        functionConfiguration.setSupportIRLiveness(true);
+//        engineConfiguration.setFunctionConfiguration(functionConfiguration);
+//        //鍒濆鍖栧紩鎿�
+//        errorCode = faceEngine.init(engineConfiguration);
+//
+//        if (errorCode != ErrorInfo.MOK.getValue()) {
+//            log.error("鍒濆鍖栧紩鎿庡け璐�");
+//        }
+//        return faceEngine;
+//    }
+//
+//    /**
+//     * 鍖呰瀵硅薄
+//     * @param faceEngine
+//     * @return
+//     */
+//    @Override
+//    public PooledObject<FaceEngine> wrap(FaceEngine faceEngine) {
+//        return new DefaultPooledObject<>(faceEngine);
+//    }
+//    /**
+//     * 閿€姣佸璞�
+//     * @param faceEngine 瀵硅薄姹�
+//     * @throws Exception 寮傚父
+//     */
+//    @Override
+//    public void destroyObject(PooledObject<FaceEngine> faceEngine) throws Exception {
+//        super.destroyObject(faceEngine);
+//    }
+//
+//    /**
+//     * 鏍¢獙瀵硅薄鏄惁鍙敤
+//     * @param faceEngine 瀵硅薄姹�
+//     * @return 瀵硅薄鏄惁鍙敤缁撴灉锛宐oolean
+//     */
+//    @Override
+//    public boolean validateObject(PooledObject<FaceEngine> faceEngine) {
+//        return super.validateObject(faceEngine);
+//    }
+//
+//    /**
+//     * 婵€娲婚挐鍖栫殑瀵硅薄绯诲垪鎿嶄綔
+//     * @param faceEngine 瀵硅薄姹�
+//     * @throws Exception 寮傚父淇℃伅
+//     */
+//    @Override
+//    public void activateObject(PooledObject<FaceEngine> faceEngine) throws Exception {
+//        super.activateObject(faceEngine);
+//    }
+//
+//    /**
+//     * 閽濆寲鏈娇鐢ㄧ殑瀵硅薄
+//     * @param faceEngine 瀵硅薄姹�
+//     * @throws Exception 寮傚父淇℃伅
+//     */
+//    @Override
+//    public void passivateObject(PooledObject<FaceEngine> faceEngine) throws Exception {
+//        super.passivateObject(faceEngine);
+//    }
+//
+//}
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/app/model/vo/AppVo.java b/base-manager/src/main/java/com/mortals/xhx/module/app/model/vo/AppVo.java
index a1b5f29244c03fcb60c3b527062e97afa26cd9f6..3fd5fc0fd7a6862b049b9fe00a8b9a25633a2a6c 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/app/model/vo/AppVo.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/app/model/vo/AppVo.java
@@ -27,5 +27,9 @@ public class AppVo extends BaseEntityLong {
      * 鑷富搴旂敤璁块棶鍦板潃
      */
     private String custUrl;
+    /**
+     * 鍥炬爣璁块棶鍦板潃
+     */
+    private String appIconUrl;
 
 }
\ No newline at end of file
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/app/service/impl/AppServiceImpl.java b/base-manager/src/main/java/com/mortals/xhx/module/app/service/impl/AppServiceImpl.java
index b283196f8db263690cb6fc6b3b20bcbb4838a3a3..098f8d04d4a00ce02746a24ed84a3e04391413c2 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/app/service/impl/AppServiceImpl.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/app/service/impl/AppServiceImpl.java
@@ -86,12 +86,11 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L
             List<AppEntity> appEntityList = this.find(new AppQuery().appCode(item.getAppCode()), context);
             item.setApplianceSiteScope(appEntityList.size());
             item.setSiteIdList(appEntityList.stream().map(AppEntity::getSiteId).collect(Collectors.toList()));
-
             //鏋勫缓璁块棶鍦板潃
             SiteEntity siteEntity = siteService.getCache(item.getSiteId().toString());
+            String domainUrl = GlobalSysInfo.getParamValue(Constant.PARAM_SERVER_HTTP_URL, "http://192.168.0.98:11078");
             if (!ObjectUtils.isEmpty(siteEntity)) {
                 //璇锋眰鍦板潃 http://domian/app/siteCode/appcode/html
-                String domainUrl = GlobalSysInfo.getParamValue(Constant.PARAM_SERVER_HTTP_URL, "http://192.168.0.98:11078");
                 item.setCustUrl(UrlBuilder.of(domainUrl)
                         .addPath(CUSTAPP_ROOT_PATH)
                         .addPath(siteEntity.getSiteCode())
@@ -101,10 +100,10 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L
             } else {
                 item.setCustUrl("");
             }
-
-
+            //鏋勫缓鍥炬爣鍦板潃
+            item.setAppIconUrl(UrlBuilder.of(domainUrl)
+                    .addPath(item.getAppIconPath()).build());
         });
-
         super.findAfter(params, pageInfo, context, list);
     }
 
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/identity/service/impl/SysFaceServiceImpl.java b/base-manager/src/main/java/com/mortals/xhx/module/identity/service/impl/SysFaceServiceImpl.java
index f817c1945d2eec5aab52a7940bb44c034b90759d..5da9ae29319bab01753895deb71bbd64ac59d657 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/identity/service/impl/SysFaceServiceImpl.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/identity/service/impl/SysFaceServiceImpl.java
@@ -1,248 +1,248 @@
-package com.mortals.xhx.module.identity.service.impl;
-
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.img.Img;
-import cn.hutool.core.util.IdUtil;
-import com.arcsoft.face.FaceEngine;
-import com.arcsoft.face.FaceFeature;
-import com.arcsoft.face.FaceSimilar;
-import com.google.common.collect.Lists;
-import com.mortals.framework.exception.AppException;
-import com.mortals.framework.model.Context;
-import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
-import com.mortals.framework.util.StringUtils;
-import com.mortals.xhx.common.utils.FaceUtil;
-import com.mortals.xhx.face.ArcsoftFaceUtil;
-import com.mortals.xhx.module.identity.dao.SysFaceDao;
-import com.mortals.xhx.module.identity.model.SysFaceEntity;
-import com.mortals.xhx.module.identity.model.SysIdentityEntity;
-import com.mortals.xhx.module.identity.model.vo.FaceInfoResVO;
-import com.mortals.xhx.module.identity.service.SysFaceService;
-import com.mortals.xhx.module.identity.service.SysIdentityService;
-import net.coobird.thumbnailator.Thumbnails;
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.annotation.PostConstruct;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Base64;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.*;
-import java.util.stream.Collectors;
-
-/**
-* SysFaceService
-* 浜鸿劯璇嗗埆淇℃伅 service瀹炵幇
-*
-* @author zxfei
-* @date 2022-08-03
-*/
-@Service("sysFaceService")
-public class SysFaceServiceImpl extends AbstractCRUDServiceImpl<SysFaceDao, SysFaceEntity, String> implements SysFaceService {
-
-    private Integer passRate = 80;
-
-    public static final int WIDTH = 100;
-    public static final int HEIGHT = 100;
-
-    @Value(value = "${faceAppId}")
-    private String appId;
-
-    @Value(value = "${winSdkKey}")
-    private String winSdkKey;
-
-    @Value(value = "${linuxSdkkey}")
-    private String linuxSdkKey;
-
-    public Integer threadPoolSize = 5;
-
-    @Autowired
-    private FaceUtil faceUtil;
-
-    @Autowired
-    private SysIdentityService sysIdentityService;
-
-    @Autowired
-    private ArcsoftFaceUtil arcsoftFaceUtil;
-
-    private ExecutorService executorService;
-
-    @PostConstruct
-    public void init() {
-        executorService = Executors.newFixedThreadPool(threadPoolSize);
-    }
-
-    @Override
-    protected void saveBefore(SysFaceEntity entity, Context context) throws AppException {
-        //闈炵郴缁熻嚜澧烇紝闇€杩欓噷璁剧疆涓婚敭
-        entity.setId(IdUtil.fastSimpleUUID());
-        super.saveBefore(entity, context);
-    }
-
-    @Override
-    public FaceInfoResVO uploadImage(MultipartFile multipartFile, String name, String idCard, String placeId, String placeName) throws AppException {
-        String clientName = multipartFile.getOriginalFilename();
-        if(!(clientName.endsWith(".png") || clientName.endsWith(".jpg") || clientName.endsWith(".jpeg"))){
-            throw new AppException("璇蜂笂浼犲浘鐗囨牸寮�(" + clientName + ")");
-        }
-        FaceInfoResVO resVO = new FaceInfoResVO();
-        SysIdentityEntity idEntityReqVO = new SysIdentityEntity();
-        idEntityReqVO.setName(name);
-        idEntityReqVO.setIdCard(idCard);
-        String entityId = sysIdentityService.saveIdEntity(idEntityReqVO).getId();
-        SysFaceEntity query = new SysFaceEntity();
-        query.setIdCard(entityId);
-        List<SysFaceEntity> sysFaceList = dao.getList(query);
-        if(CollectionUtils.isNotEmpty(sysFaceList)){
-            throw new AppException("璇ョ敤鎴�(" + idEntityReqVO.getName() + "_" + idEntityReqVO.getIdCard() + ")浜鸿劯鏁版嵁宸插瓨鍦�");
-        }
-
-        try {
-            byte[] file = multipartFile.getBytes();
-            //婵€娲诲紩鎿�
-            FaceEngine faceEngine = faceUtil.initFace(appId, getSdkKey());
-            byte[] featureData = faceUtil.featureData(faceEngine, file);
-            //鍒涘缓缂╃暐鍥�
-            BufferedImage image = Thumbnails.of(multipartFile.getInputStream()).size(WIDTH, HEIGHT).asBufferedImage();
-            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-            //姝ゆ柟娉曚細閫犳垚png鍥剧墖鏈夐槾褰�
-//            ImageIO.write(image, "jpg", byteArrayOutputStream);
-            Img.from(image).write(byteArrayOutputStream);
-            byteArrayOutputStream.flush();
-            SysFaceEntity sysFace = new SysFaceEntity();
-            sysFace.setId(IdUtil.fastSimpleUUID());
-            sysFace.setFace(byteArrayOutputStream.toByteArray());
-            sysFace.setFaceFeature(featureData);
-            sysFace.setIdCard(entityId);
-            sysFace.setPlaceId(placeId);
-            sysFace.setPlaceName(placeName);
-            sysFace.setCreateTime(new Date());
-            sysFace.setUpdateTime(sysFace.getCreateTime());
-            sysFace.setDeleted(0);
-            dao.insert(sysFace);
-            resVO.setFace(Base64.getEncoder().encodeToString(file));
-            resVO.setFaceFeature(Base64.getEncoder().encodeToString(featureData));
-            resVO.setIdCard(idCard);
-            resVO.setName(name);
-            resVO.setPhone("");
-            resVO.setId(sysFace.getId());
-        } catch (IOException e) {
-            log.error("鎻愬彇鐗瑰緛澶辫触:", e);
-        }
-        return resVO;
-    }
-
-    @Override
-    public List<FaceInfoResVO> findFaceList(String placeId) throws AppException {
-        SysFaceEntity query = new SysFaceEntity();
-        query.setPlaceId(placeId);
-        List<SysFaceEntity> sysFaceList = dao.getList(query);
-        if(CollectionUtils.isEmpty(sysFaceList)){
-            throw new AppException("璇ュ満鎵€鏃犱汉鑴告暟鎹�");
-        }
-        return sysFaceList.stream().map(o -> {
-            FaceInfoResVO resVO = new FaceInfoResVO();
-            SysIdentityEntity resVO1 = sysIdentityService.findIdEntityDetail(o.getIdCard(), 1);
-            resVO.setId(o.getId());
-            resVO.setPlaceId(o.getPlaceId());
-            resVO.setPlaceName(o.getPlaceName());
-            resVO.setCardId(resVO1.getId());
-            resVO.setName(resVO1.getName());
-            resVO.setPhone(resVO1.getPhone());
-            resVO.setFace(Base64.getEncoder().encodeToString(o.getFace()));
-            resVO.setFaceFeature(Base64.getEncoder().encodeToString(o.getFaceFeature()));
-            return resVO;
-        }).collect(Collectors.toList());
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void batchAddFace(List<MultipartFile> files, String placeId, String placeName) {
-        for (int j = 0; j < files.size(); j++) {
-            String fileName = files.get(j).getOriginalFilename();
-            if(StringUtils.isEmpty(fileName)){
-                throw new AppException("鏂囦欢鍚嶇О(" + fileName + ")涓嶈兘涓虹┖锛�");
-            }
-            String[] info = fileName.split("/");
-            if(info.length != 2){
-                throw new AppException("(" + fileName + ")鏂囦欢鍛藉悕閿欒锛岃鎸夌収瑙勫畾鏂囦欢妯$増涓婁紶锛�");
-            }
-            String[] infos = info[1].split("\\.");
-            if(infos.length != 2){
-                throw new AppException("(" + fileName + ")鏂囦欢鍛藉悕閿欒锛岃鎸夌収瑙勫畾鏂囦欢妯$増涓婁紶锛�");
-            }
-            String[] strings = infos[0].split("_");
-            if(strings.length != 2){
-                throw new AppException("(" + fileName + ")鏂囦欢鍛藉悕閿欒锛岃鎸夌収瑙勫畾鏂囦欢妯$増涓婁紶锛�");
-            }
-            uploadImage(files.get(j), strings[0], strings[1], placeId, placeName);
-        }
-    }
-
-    private String getSdkKey() {
-        return faceUtil.getOsName().equals("/win") ? winSdkKey : linuxSdkKey;
-    }
-
-    @Override
-    public List<FaceInfoResVO> searchUserByFace(byte[] bytes) throws InterruptedException, ExecutionException{
-        List<SysFaceEntity> resultFaceInfoList = Lists.newLinkedList();//璇嗗埆鍒扮殑浜鸿劯鍒楄〃
-
-        byte[] faceFeature = arcsoftFaceUtil.faceFeature(bytes);
-        FaceFeature targetFaceFeature = new FaceFeature();
-        targetFaceFeature.setFeatureData(faceFeature);
-        List<SysFaceEntity> faceInfoList = this.find(new SysFaceEntity());
-        List<List<SysFaceEntity>> faceUserInfoPartList = Lists.partition(faceInfoList, 1000);//鍒嗘垚1000涓€缁勶紝澶氱嚎绋嬪鐞�
-        CompletionService<List<SysFaceEntity>> completionService = new ExecutorCompletionService(executorService);
-        for (List<SysFaceEntity> part : faceUserInfoPartList) {
-            completionService.submit(new CompareFaceTask(part, targetFaceFeature));
-        }
-        for (int i = 0; i < faceUserInfoPartList.size(); i++) {
-            List<SysFaceEntity> faceUserInfoList = completionService.take().get();
-            if (CollectionUtil.isNotEmpty(faceInfoList)) {
-                resultFaceInfoList.addAll(faceUserInfoList);
-            }
-        }
-
-        resultFaceInfoList.sort((h1, h2) -> h2.getSimilarValue().compareTo(h1.getSimilarValue()));//浠庡ぇ鍒板皬鎺掑簭
-
-        return resultFaceInfoList.stream().map(o -> {
-            FaceInfoResVO resVO = new FaceInfoResVO();
-            SysIdentityEntity resVO1 = sysIdentityService.findIdEntityDetail(o.getIdCard(), 1);
-            resVO.setId(o.getId());
-            resVO.setPlaceId(o.getPlaceId());
-            resVO.setPlaceName(o.getPlaceName());
-            resVO.setCardId(resVO1.getId());
-            resVO.setName(resVO1.getName());
-            resVO.setPhone(resVO1.getPhone());
-            resVO.setFace(Base64.getEncoder().encodeToString(o.getFace()));
-            resVO.setFaceFeature(Base64.getEncoder().encodeToString(o.getFaceFeature()));
-            return resVO;
-        }).collect(Collectors.toList());
-    }
-
-    private class CompareFaceTask implements Callable<List<SysFaceEntity>> {
-
-        private List<SysFaceEntity> faceUserInfoList;
-        private FaceFeature targetFaceFeature;
-
-
-        public CompareFaceTask(List<SysFaceEntity> faceUserInfoList, FaceFeature targetFaceFeature) {
-            this.faceUserInfoList = faceUserInfoList;
-            this.targetFaceFeature = targetFaceFeature;
-        }
-
-        @Override
-        public List<SysFaceEntity> call() throws Exception {
-
-            return arcsoftFaceUtil.faceSearch(targetFaceFeature,faceUserInfoList);
-        }
-
-    }
-}
\ No newline at end of file
+//package com.mortals.xhx.module.identity.service.impl;
+//
+//import cn.hutool.core.collection.CollectionUtil;
+//import cn.hutool.core.img.Img;
+//import cn.hutool.core.util.IdUtil;
+//import com.arcsoft.face.FaceEngine;
+//import com.arcsoft.face.FaceFeature;
+//import com.arcsoft.face.FaceSimilar;
+//import com.google.common.collect.Lists;
+//import com.mortals.framework.exception.AppException;
+//import com.mortals.framework.model.Context;
+//import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
+//import com.mortals.framework.util.StringUtils;
+//import com.mortals.xhx.common.utils.FaceUtil;
+//import com.mortals.xhx.face.ArcsoftFaceUtil;
+//import com.mortals.xhx.module.identity.dao.SysFaceDao;
+//import com.mortals.xhx.module.identity.model.SysFaceEntity;
+//import com.mortals.xhx.module.identity.model.SysIdentityEntity;
+//import com.mortals.xhx.module.identity.model.vo.FaceInfoResVO;
+//import com.mortals.xhx.module.identity.service.SysFaceService;
+//import com.mortals.xhx.module.identity.service.SysIdentityService;
+//import net.coobird.thumbnailator.Thumbnails;
+//import org.apache.commons.collections4.CollectionUtils;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Service;
+//import org.springframework.transaction.annotation.Transactional;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import javax.annotation.PostConstruct;
+//import java.awt.image.BufferedImage;
+//import java.io.ByteArrayOutputStream;
+//import java.io.IOException;
+//import java.util.Base64;
+//import java.util.Date;
+//import java.util.List;
+//import java.util.concurrent.*;
+//import java.util.stream.Collectors;
+//
+///**
+//* SysFaceService
+//* 浜鸿劯璇嗗埆淇℃伅 service瀹炵幇
+//*
+//* @author zxfei
+//* @date 2022-08-03
+//*/
+//@Service("sysFaceService")
+//public class SysFaceServiceImpl extends AbstractCRUDServiceImpl<SysFaceDao, SysFaceEntity, String> implements SysFaceService {
+//
+//    private Integer passRate = 80;
+//
+//    public static final int WIDTH = 100;
+//    public static final int HEIGHT = 100;
+//
+//    @Value(value = "${faceAppId}")
+//    private String appId;
+//
+//    @Value(value = "${winSdkKey}")
+//    private String winSdkKey;
+//
+//    @Value(value = "${linuxSdkkey}")
+//    private String linuxSdkKey;
+//
+//    public Integer threadPoolSize = 5;
+//
+//    @Autowired
+//    private FaceUtil faceUtil;
+//
+//    @Autowired
+//    private SysIdentityService sysIdentityService;
+//
+//    @Autowired
+//    private ArcsoftFaceUtil arcsoftFaceUtil;
+//
+//    private ExecutorService executorService;
+//
+//    @PostConstruct
+//    public void init() {
+//        executorService = Executors.newFixedThreadPool(threadPoolSize);
+//    }
+//
+//    @Override
+//    protected void saveBefore(SysFaceEntity entity, Context context) throws AppException {
+//        //闈炵郴缁熻嚜澧烇紝闇€杩欓噷璁剧疆涓婚敭
+//        entity.setId(IdUtil.fastSimpleUUID());
+//        super.saveBefore(entity, context);
+//    }
+//
+//    @Override
+//    public FaceInfoResVO uploadImage(MultipartFile multipartFile, String name, String idCard, String placeId, String placeName) throws AppException {
+//        String clientName = multipartFile.getOriginalFilename();
+//        if(!(clientName.endsWith(".png") || clientName.endsWith(".jpg") || clientName.endsWith(".jpeg"))){
+//            throw new AppException("璇蜂笂浼犲浘鐗囨牸寮�(" + clientName + ")");
+//        }
+//        FaceInfoResVO resVO = new FaceInfoResVO();
+//        SysIdentityEntity idEntityReqVO = new SysIdentityEntity();
+//        idEntityReqVO.setName(name);
+//        idEntityReqVO.setIdCard(idCard);
+//        String entityId = sysIdentityService.saveIdEntity(idEntityReqVO).getId();
+//        SysFaceEntity query = new SysFaceEntity();
+//        query.setIdCard(entityId);
+//        List<SysFaceEntity> sysFaceList = dao.getList(query);
+//        if(CollectionUtils.isNotEmpty(sysFaceList)){
+//            throw new AppException("璇ョ敤鎴�(" + idEntityReqVO.getName() + "_" + idEntityReqVO.getIdCard() + ")浜鸿劯鏁版嵁宸插瓨鍦�");
+//        }
+//
+//        try {
+//            byte[] file = multipartFile.getBytes();
+//            //婵€娲诲紩鎿�
+//            FaceEngine faceEngine = faceUtil.initFace(appId, getSdkKey());
+//            byte[] featureData = faceUtil.featureData(faceEngine, file);
+//            //鍒涘缓缂╃暐鍥�
+//            BufferedImage image = Thumbnails.of(multipartFile.getInputStream()).size(WIDTH, HEIGHT).asBufferedImage();
+//            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+//            //姝ゆ柟娉曚細閫犳垚png鍥剧墖鏈夐槾褰�
+////            ImageIO.write(image, "jpg", byteArrayOutputStream);
+//            Img.from(image).write(byteArrayOutputStream);
+//            byteArrayOutputStream.flush();
+//            SysFaceEntity sysFace = new SysFaceEntity();
+//            sysFace.setId(IdUtil.fastSimpleUUID());
+//            sysFace.setFace(byteArrayOutputStream.toByteArray());
+//            sysFace.setFaceFeature(featureData);
+//            sysFace.setIdCard(entityId);
+//            sysFace.setPlaceId(placeId);
+//            sysFace.setPlaceName(placeName);
+//            sysFace.setCreateTime(new Date());
+//            sysFace.setUpdateTime(sysFace.getCreateTime());
+//            sysFace.setDeleted(0);
+//            dao.insert(sysFace);
+//            resVO.setFace(Base64.getEncoder().encodeToString(file));
+//            resVO.setFaceFeature(Base64.getEncoder().encodeToString(featureData));
+//            resVO.setIdCard(idCard);
+//            resVO.setName(name);
+//            resVO.setPhone("");
+//            resVO.setId(sysFace.getId());
+//        } catch (IOException e) {
+//            log.error("鎻愬彇鐗瑰緛澶辫触:", e);
+//        }
+//        return resVO;
+//    }
+//
+//    @Override
+//    public List<FaceInfoResVO> findFaceList(String placeId) throws AppException {
+//        SysFaceEntity query = new SysFaceEntity();
+//        query.setPlaceId(placeId);
+//        List<SysFaceEntity> sysFaceList = dao.getList(query);
+//        if(CollectionUtils.isEmpty(sysFaceList)){
+//            throw new AppException("璇ュ満鎵€鏃犱汉鑴告暟鎹�");
+//        }
+//        return sysFaceList.stream().map(o -> {
+//            FaceInfoResVO resVO = new FaceInfoResVO();
+//            SysIdentityEntity resVO1 = sysIdentityService.findIdEntityDetail(o.getIdCard(), 1);
+//            resVO.setId(o.getId());
+//            resVO.setPlaceId(o.getPlaceId());
+//            resVO.setPlaceName(o.getPlaceName());
+//            resVO.setCardId(resVO1.getId());
+//            resVO.setName(resVO1.getName());
+//            resVO.setPhone(resVO1.getPhone());
+//            resVO.setFace(Base64.getEncoder().encodeToString(o.getFace()));
+//            resVO.setFaceFeature(Base64.getEncoder().encodeToString(o.getFaceFeature()));
+//            return resVO;
+//        }).collect(Collectors.toList());
+//    }
+//
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public void batchAddFace(List<MultipartFile> files, String placeId, String placeName) {
+//        for (int j = 0; j < files.size(); j++) {
+//            String fileName = files.get(j).getOriginalFilename();
+//            if(StringUtils.isEmpty(fileName)){
+//                throw new AppException("鏂囦欢鍚嶇О(" + fileName + ")涓嶈兘涓虹┖锛�");
+//            }
+//            String[] info = fileName.split("/");
+//            if(info.length != 2){
+//                throw new AppException("(" + fileName + ")鏂囦欢鍛藉悕閿欒锛岃鎸夌収瑙勫畾鏂囦欢妯$増涓婁紶锛�");
+//            }
+//            String[] infos = info[1].split("\\.");
+//            if(infos.length != 2){
+//                throw new AppException("(" + fileName + ")鏂囦欢鍛藉悕閿欒锛岃鎸夌収瑙勫畾鏂囦欢妯$増涓婁紶锛�");
+//            }
+//            String[] strings = infos[0].split("_");
+//            if(strings.length != 2){
+//                throw new AppException("(" + fileName + ")鏂囦欢鍛藉悕閿欒锛岃鎸夌収瑙勫畾鏂囦欢妯$増涓婁紶锛�");
+//            }
+//            uploadImage(files.get(j), strings[0], strings[1], placeId, placeName);
+//        }
+//    }
+//
+//    private String getSdkKey() {
+//        return faceUtil.getOsName().equals("/win") ? winSdkKey : linuxSdkKey;
+//    }
+//
+//    @Override
+//    public List<FaceInfoResVO> searchUserByFace(byte[] bytes) throws InterruptedException, ExecutionException{
+//        List<SysFaceEntity> resultFaceInfoList = Lists.newLinkedList();//璇嗗埆鍒扮殑浜鸿劯鍒楄〃
+//
+//        byte[] faceFeature = arcsoftFaceUtil.faceFeature(bytes);
+//        FaceFeature targetFaceFeature = new FaceFeature();
+//        targetFaceFeature.setFeatureData(faceFeature);
+//        List<SysFaceEntity> faceInfoList = this.find(new SysFaceEntity());
+//        List<List<SysFaceEntity>> faceUserInfoPartList = Lists.partition(faceInfoList, 1000);//鍒嗘垚1000涓€缁勶紝澶氱嚎绋嬪鐞�
+//        CompletionService<List<SysFaceEntity>> completionService = new ExecutorCompletionService(executorService);
+//        for (List<SysFaceEntity> part : faceUserInfoPartList) {
+//            completionService.submit(new CompareFaceTask(part, targetFaceFeature));
+//        }
+//        for (int i = 0; i < faceUserInfoPartList.size(); i++) {
+//            List<SysFaceEntity> faceUserInfoList = completionService.take().get();
+//            if (CollectionUtil.isNotEmpty(faceInfoList)) {
+//                resultFaceInfoList.addAll(faceUserInfoList);
+//            }
+//        }
+//
+//        resultFaceInfoList.sort((h1, h2) -> h2.getSimilarValue().compareTo(h1.getSimilarValue()));//浠庡ぇ鍒板皬鎺掑簭
+//
+//        return resultFaceInfoList.stream().map(o -> {
+//            FaceInfoResVO resVO = new FaceInfoResVO();
+//            SysIdentityEntity resVO1 = sysIdentityService.findIdEntityDetail(o.getIdCard(), 1);
+//            resVO.setId(o.getId());
+//            resVO.setPlaceId(o.getPlaceId());
+//            resVO.setPlaceName(o.getPlaceName());
+//            resVO.setCardId(resVO1.getId());
+//            resVO.setName(resVO1.getName());
+//            resVO.setPhone(resVO1.getPhone());
+//            resVO.setFace(Base64.getEncoder().encodeToString(o.getFace()));
+//            resVO.setFaceFeature(Base64.getEncoder().encodeToString(o.getFaceFeature()));
+//            return resVO;
+//        }).collect(Collectors.toList());
+//    }
+//
+//    private class CompareFaceTask implements Callable<List<SysFaceEntity>> {
+//
+//        private List<SysFaceEntity> faceUserInfoList;
+//        private FaceFeature targetFaceFeature;
+//
+//
+//        public CompareFaceTask(List<SysFaceEntity> faceUserInfoList, FaceFeature targetFaceFeature) {
+//            this.faceUserInfoList = faceUserInfoList;
+//            this.targetFaceFeature = targetFaceFeature;
+//        }
+//
+//        @Override
+//        public List<SysFaceEntity> call() throws Exception {
+//
+//            return arcsoftFaceUtil.faceSearch(targetFaceFeature,faceUserInfoList);
+//        }
+//
+//    }
+//}
\ No newline at end of file
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/identity/web/SysFaceController.java b/base-manager/src/main/java/com/mortals/xhx/module/identity/web/SysFaceController.java
index b45bc6f96bee35d0c6d5c1fdca19d9af7826585e..dbe107d810c7fd2d04bc8d4b57cf846a94ece332 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/identity/web/SysFaceController.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/identity/web/SysFaceController.java
@@ -1,140 +1,140 @@
-package com.mortals.xhx.module.identity.web;
-
-import com.alibaba.fastjson.JSONObject;
-import com.mortals.framework.annotation.UnAuth;
-import com.mortals.framework.model.Context;
-import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
-import com.mortals.xhx.module.identity.model.SysFaceEntity;
-import com.mortals.xhx.module.identity.model.vo.FaceInfoResVO;
-import com.mortals.xhx.module.identity.service.SysFaceService;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-/**
-*
-* 浜鸿劯璇嗗埆淇℃伅
-*
-* @author zxfei
-* @date 2022-08-03
-*/
-@RestController
-@RequestMapping("face")
-public class SysFaceController extends BaseCRUDJsonBodyMappingController<SysFaceService,SysFaceEntity,String> {
-
-    public SysFaceController(){
-        super.setModuleDesc( "浜鸿劯璇嗗埆淇℃伅");
-    }
-
-    @Override
-    protected void init(Map<String, Object> model, Context context) {
-        super.init(model, context);
-    }
-
-
-
-    @PostMapping({"uploadImage"})
-    @UnAuth
-    public String uploadImage(@RequestPart("file") MultipartFile file,
-                              @RequestParam("name") String name,
-                              @RequestParam("idCard") String idCard,
-                              @RequestParam(value = "placeId") String placeId,
-                              @RequestParam(value = "placeName") String placeName) {
-        Map<String, Object> model = new HashMap();
-        JSONObject ret = new JSONObject();
-        String busiDesc = "浜鸿劯鐗瑰緛瑙f瀽";
-        Context context = this.getContext();
-
-        try {
-            FaceInfoResVO resVO = service.uploadImage(file, name, idCard, placeId, placeName);
-            model.put("data",resVO);
-            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
-        } catch (Exception var8) {
-            this.doException(this.request, busiDesc, model, var8);
-            Object msg = model.get("message_info");
-            return this.createFailJsonResp(msg == null ? "绯荤粺寮傚父" : msg.toString());
-        }
-
-        this.init(model, context);
-        ret.put("data", model.get("data"));
-        ret.put("code", 1);
-        ret.put("msg", model.remove("message_info"));
-        return ret.toJSONString();
-    }
-
-    @GetMapping({"findFaceList"})
-    @UnAuth
-    public String findFaceList(@RequestParam("placeId") String placeId) {
-        Map<String, Object> model = new HashMap();
-        JSONObject ret = new JSONObject();
-        String busiDesc = "涓嬪彂浜鸿劯鍒楄〃";
-        Context context = this.getContext();
-        try {
-            List<FaceInfoResVO> list = service.findFaceList(placeId);
-            model.put("data",list);
-            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
-        } catch (Exception var8) {
-            this.doException(this.request, busiDesc, model, var8);
-            Object msg = model.get("message_info");
-            return this.createFailJsonResp(msg == null ? "绯荤粺寮傚父" : msg.toString());
-        }
-
-        this.init(model, context);
-        ret.put("data", model.get("data"));
-        ret.put("code", 1);
-        ret.put("msg", model.remove("message_info"));
-        return ret.toJSONString();
-    }
-
-    @PostMapping({"batchAddFace"})
-    @UnAuth
-    public String batchAddFace(@RequestPart("files") List<MultipartFile> files,
-                               @RequestParam("placeId") String placeId,
-                               @RequestParam("placeName") String placeName) {
-        Map<String, Object> model = new HashMap();
-        JSONObject ret = new JSONObject();
-        String busiDesc = "鎵归噺涓婁紶浜鸿劯";
-        Context context = this.getContext();
-
-        try {
-            service.batchAddFace(files, placeId, placeName);
-            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
-        } catch (Exception var8) {
-            this.doException(this.request, busiDesc, model, var8);
-            Object msg = model.get("message_info");
-            return this.createFailJsonResp(msg == null ? "绯荤粺寮傚父" : msg.toString());
-        }
-
-        this.init(model, context);
-        ret.put("data", null);
-        ret.put("code", 1);
-        ret.put("msg", model.remove("message_info"));
-        return ret.toJSONString();
-    }
-
-    @PostMapping({"search"})
-    @UnAuth
-    public String search(@RequestPart("file") MultipartFile file) {
-        Map<String, Object> model = new HashMap();
-        JSONObject ret = new JSONObject();
-        String busiDesc = "浜鸿劯璇嗗埆";
-        Context context = this.getContext();
-        try {
-            List<FaceInfoResVO> list = service.searchUserByFace(file.getBytes());
-            model.put("data",list);
-            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
-        } catch (Exception var8) {
-            this.doException(this.request, busiDesc, model, var8);
-            Object msg = model.get("message_info");
-            return this.createFailJsonResp(msg == null ? "绯荤粺寮傚父" : msg.toString());
-        }
-
-        this.init(model, context);
-        ret.put("data", model.get("data"));
-        ret.put("code", 1);
-        ret.put("msg", model.remove("message_info"));
-        return ret.toJSONString();
-    }
-}
\ No newline at end of file
+//package com.mortals.xhx.module.identity.web;
+//
+//import com.alibaba.fastjson.JSONObject;
+//import com.mortals.framework.annotation.UnAuth;
+//import com.mortals.framework.model.Context;
+//import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
+//import com.mortals.xhx.module.identity.model.SysFaceEntity;
+//import com.mortals.xhx.module.identity.model.vo.FaceInfoResVO;
+//import com.mortals.xhx.module.identity.service.SysFaceService;
+//import org.springframework.web.bind.annotation.*;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+///**
+//*
+//* 浜鸿劯璇嗗埆淇℃伅
+//*
+//* @author zxfei
+//* @date 2022-08-03
+//*/
+//@RestController
+//@RequestMapping("face")
+//public class SysFaceController extends BaseCRUDJsonBodyMappingController<SysFaceService,SysFaceEntity,String> {
+//
+//    public SysFaceController(){
+//        super.setModuleDesc( "浜鸿劯璇嗗埆淇℃伅");
+//    }
+//
+//    @Override
+//    protected void init(Map<String, Object> model, Context context) {
+//        super.init(model, context);
+//    }
+//
+//
+//
+//    @PostMapping({"uploadImage"})
+//    @UnAuth
+//    public String uploadImage(@RequestPart("file") MultipartFile file,
+//                              @RequestParam("name") String name,
+//                              @RequestParam("idCard") String idCard,
+//                              @RequestParam(value = "placeId") String placeId,
+//                              @RequestParam(value = "placeName") String placeName) {
+//        Map<String, Object> model = new HashMap();
+//        JSONObject ret = new JSONObject();
+//        String busiDesc = "浜鸿劯鐗瑰緛瑙f瀽";
+//        Context context = this.getContext();
+//
+//        try {
+//            FaceInfoResVO resVO = service.uploadImage(file, name, idCard, placeId, placeName);
+//            model.put("data",resVO);
+//            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
+//        } catch (Exception var8) {
+//            this.doException(this.request, busiDesc, model, var8);
+//            Object msg = model.get("message_info");
+//            return this.createFailJsonResp(msg == null ? "绯荤粺寮傚父" : msg.toString());
+//        }
+//
+//        this.init(model, context);
+//        ret.put("data", model.get("data"));
+//        ret.put("code", 1);
+//        ret.put("msg", model.remove("message_info"));
+//        return ret.toJSONString();
+//    }
+//
+//    @GetMapping({"findFaceList"})
+//    @UnAuth
+//    public String findFaceList(@RequestParam("placeId") String placeId) {
+//        Map<String, Object> model = new HashMap();
+//        JSONObject ret = new JSONObject();
+//        String busiDesc = "涓嬪彂浜鸿劯鍒楄〃";
+//        Context context = this.getContext();
+//        try {
+//            List<FaceInfoResVO> list = service.findFaceList(placeId);
+//            model.put("data",list);
+//            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
+//        } catch (Exception var8) {
+//            this.doException(this.request, busiDesc, model, var8);
+//            Object msg = model.get("message_info");
+//            return this.createFailJsonResp(msg == null ? "绯荤粺寮傚父" : msg.toString());
+//        }
+//
+//        this.init(model, context);
+//        ret.put("data", model.get("data"));
+//        ret.put("code", 1);
+//        ret.put("msg", model.remove("message_info"));
+//        return ret.toJSONString();
+//    }
+//
+//    @PostMapping({"batchAddFace"})
+//    @UnAuth
+//    public String batchAddFace(@RequestPart("files") List<MultipartFile> files,
+//                               @RequestParam("placeId") String placeId,
+//                               @RequestParam("placeName") String placeName) {
+//        Map<String, Object> model = new HashMap();
+//        JSONObject ret = new JSONObject();
+//        String busiDesc = "鎵归噺涓婁紶浜鸿劯";
+//        Context context = this.getContext();
+//
+//        try {
+//            service.batchAddFace(files, placeId, placeName);
+//            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
+//        } catch (Exception var8) {
+//            this.doException(this.request, busiDesc, model, var8);
+//            Object msg = model.get("message_info");
+//            return this.createFailJsonResp(msg == null ? "绯荤粺寮傚父" : msg.toString());
+//        }
+//
+//        this.init(model, context);
+//        ret.put("data", null);
+//        ret.put("code", 1);
+//        ret.put("msg", model.remove("message_info"));
+//        return ret.toJSONString();
+//    }
+//
+//    @PostMapping({"search"})
+//    @UnAuth
+//    public String search(@RequestPart("file") MultipartFile file) {
+//        Map<String, Object> model = new HashMap();
+//        JSONObject ret = new JSONObject();
+//        String busiDesc = "浜鸿劯璇嗗埆";
+//        Context context = this.getContext();
+//        try {
+//            List<FaceInfoResVO> list = service.searchUserByFace(file.getBytes());
+//            model.put("data",list);
+//            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
+//        } catch (Exception var8) {
+//            this.doException(this.request, busiDesc, model, var8);
+//            Object msg = model.get("message_info");
+//            return this.createFailJsonResp(msg == null ? "绯荤粺寮傚父" : msg.toString());
+//        }
+//
+//        this.init(model, context);
+//        ret.put("data", model.get("data"));
+//        ret.put("code", 1);
+//        ret.put("msg", model.remove("message_info"));
+//        return ret.toJSONString();
+//    }
+//}
\ No newline at end of file
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/matter/service/MatterService.java b/base-manager/src/main/java/com/mortals/xhx/module/matter/service/MatterService.java
index 37eefb1101a4f40bc05d95e922d74be9a4b6d623..df6ee7bd869e0526792353e92073581a1b5d3bde 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/matter/service/MatterService.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/matter/service/MatterService.java
@@ -5,16 +5,12 @@ import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
 import com.mortals.framework.model.PageInfo;
 import com.mortals.framework.model.Result;
-import com.mortals.framework.service.ICRUDCacheService;
 import com.mortals.framework.service.ICRUDService;
 import com.mortals.xhx.module.matter.model.MatterEntity;
 import com.mortals.xhx.module.matter.model.MatterQuery;
 import com.mortals.xhx.module.matter.model.vo.MatterInfo;
 import com.mortals.xhx.module.site.model.SiteEntity;
 import com.mortals.xhx.module.site.model.SiteMatterEntity;
-import com.mortals.xhx.module.site.model.SiteMatterQuery;
-import org.apache.poi.ss.formula.functions.T;
-import org.w3c.dom.Document;
 
 import java.util.Map;
 
@@ -58,14 +54,21 @@ public interface MatterService extends ICRUDService<MatterEntity, Long> {
     Rest<String> buildMatterDetail(MatterEntity matterEntity, Context context);
 
     /**
-     * 娣诲姞涓氬姟鍒扮珯鐐�
+     * 娣诲姞浜嬮」鍒扮珯鐐逛簨椤�
      *
      * @param matterEntity
      * @param context
      */
-    Rest<SiteMatterEntity> switchMatterToSiteMatterr(MatterEntity matterEntity, SiteEntity siteEntity, Context context);
-
+    Rest<SiteMatterEntity> switchMatterToSiteMatter(MatterEntity matterEntity, SiteEntity siteEntity, Context context);
 
+    /**
+     * 鏌ユ壘宸泦瀛愰」
+     * @param matterQuery
+     * @param pageInfo
+     * @param context
+     * @return
+     * @throws AppException
+     */
     Result<MatterEntity> findSubList(MatterEntity matterQuery, PageInfo pageInfo, Context context) throws AppException;
 
     Result<MatterInfo> findMicroList(MatterQuery matterQuery, PageInfo pageInfo, Context context) throws AppException;
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/matter/service/impl/MatterServiceImpl.java b/base-manager/src/main/java/com/mortals/xhx/module/matter/service/impl/MatterServiceImpl.java
index 914f736267be69c5c20836e3775a4a7691eee6b7..c356679072ea9719be4f5314ade332c392fa53b8 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/matter/service/impl/MatterServiceImpl.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/matter/service/impl/MatterServiceImpl.java
@@ -11,7 +11,6 @@ import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
 import com.mortals.framework.model.PageInfo;
 import com.mortals.framework.model.Result;
-import com.mortals.framework.service.impl.AbstractCRUDCacheServiceImpl;
 import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
 import com.mortals.framework.util.DataUtil;
 import com.mortals.xhx.base.framework.config.InterceptorConfig;
@@ -32,11 +31,11 @@ import com.mortals.xhx.module.matters.model.MattersEntity;
 import com.mortals.xhx.module.matters.model.MattersQuery;
 import com.mortals.xhx.module.matters.service.MattersDetailService;
 import com.mortals.xhx.module.matters.service.MattersService;
-import com.mortals.xhx.module.site.model.SiteEntity;
-import com.mortals.xhx.module.site.model.SiteMatterEntity;
-import com.mortals.xhx.module.site.model.SiteMatterQuery;
+import com.mortals.xhx.module.site.model.*;
 import com.mortals.xhx.module.site.service.SiteMatterService;
 import com.mortals.xhx.module.site.service.SiteService;
+import com.mortals.xhx.module.site.service.SiteThemeMatterService;
+import com.mortals.xhx.module.site.service.SiteThemeService;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.jsoup.Jsoup;
@@ -89,14 +88,52 @@ public class MatterServiceImpl extends AbstractCRUDServiceImpl<MatterDao, Matter
     private DeptService deptService;
     @Autowired
     private MatterExtService matterExtService;
+    @Autowired
+    private SiteThemeMatterService siteThemeMatterService;
+    @Autowired
+    private SiteThemeService siteThemeService;
 
 
     @Override
     protected void saveBefore(MatterEntity entity, Context context) throws AppException {
+        //鍒ゆ柇濡傛灉鏄嚜瀹氫箟浜嬮」锛岄渶瑕佹洿鏂板尯鍩熺紪鐮�
+        if (SourceEnum.鑷畾涔�.getValue().equals(entity.getSource())) {
+            if (!ObjectUtils.isEmpty(entity.getSiteId())) {
+                SiteEntity siteEntity = siteService.get(entity.getSiteId(), context);
+                entity.setAreaCode(siteEntity.getAreaCode());
+            }
 
+        }
         super.saveBefore(entity, context);
     }
 
+    /**
+     * @param entity
+     * @param context
+     * @throws AppException
+     */
+    @Override
+    protected void saveAfter(MatterEntity entity, Context context) throws AppException {
+        //涓婚娣诲姞鑷畾涔夊叧鑱�
+        if (!ObjectUtils.isEmpty(entity.getThemeCode())) {
+            SiteThemeEntity siteThemeEntity = siteThemeService.selectOne(new SiteThemeQuery().siteId(entity.getSiteId()).themeCode(entity.getThemeCode()));
+            SiteThemeMatterEntity siteThemeMatterEntity = new SiteThemeMatterEntity();
+            siteThemeMatterEntity.initAttrValue();
+            siteThemeMatterEntity.setThemeCode(entity.getThemeCode());
+            siteThemeMatterEntity.setSiteId(entity.getSiteId());
+            siteThemeMatterEntity.setSource(entity.getSource());
+            siteThemeMatterEntity.setMatterId(entity.getId());
+            siteThemeMatterEntity.setMatterCode(entity.getMatterNo());
+            siteThemeMatterEntity.setMatterName(entity.getMatterName());
+            siteThemeMatterEntity.setUserType(siteThemeEntity == null ? "2" : siteThemeEntity.getUserType());
+            siteThemeMatterEntity.setCreateTime(new Date());
+            siteThemeMatterEntity.setCreateUserId(this.getContextUserId(context));
+            siteThemeMatterService.save(siteThemeMatterEntity, context);
+        }
+
+        super.saveAfter(entity, context);
+    }
+
     @Override
     protected void updateBefore(MatterEntity entity, Context context) throws AppException {
 
@@ -169,7 +206,7 @@ public class MatterServiceImpl extends AbstractCRUDServiceImpl<MatterDao, Matter
         SiteMatterEntity siteMatterEntity = siteMatterService.selectOne(new SiteMatterQuery().siteId(siteId).matterId(item.getId()));
         if (ObjectUtils.isEmpty(siteMatterEntity)) {
             SiteEntity siteEntity = siteService.getCache(siteId.toString());
-            Rest<SiteMatterEntity> rest = switchMatterToSiteMatterr(item, siteEntity, context);
+            Rest<SiteMatterEntity> rest = switchMatterToSiteMatter(item, siteEntity, context);
             if (rest.getCode() == YesNoEnum.YES.getValue()) {
                 return rest.getData();
             }
@@ -178,7 +215,7 @@ public class MatterServiceImpl extends AbstractCRUDServiceImpl<MatterDao, Matter
     }
 
     @Override
-    public Rest<SiteMatterEntity> switchMatterToSiteMatterr(MatterEntity item, SiteEntity siteEntity, Context context) {
+    public Rest<SiteMatterEntity> switchMatterToSiteMatter(MatterEntity item, SiteEntity siteEntity, Context context) {
         try {
             DeptEntity deptEntity = deptService.getExtCache(item.getDeptCode());
             SiteMatterEntity siteMatterEntity = new SiteMatterEntity();
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/matter/web/MatterController.java b/base-manager/src/main/java/com/mortals/xhx/module/matter/web/MatterController.java
index c71cfa625a15a401faa82b07eee23d9469ce4895..51fef9aa6b00b31c9498cf14780ad2252ab23342 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/matter/web/MatterController.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/matter/web/MatterController.java
@@ -12,8 +12,11 @@ import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.framework.web.BasePhpCRUDJsonMappingController;
 import com.mortals.xhx.base.framework.config.InterceptorConfig;
 import com.mortals.xhx.base.system.param.service.ParamService;
+import com.mortals.xhx.common.code.JointInfoShowEnum;
 import com.mortals.xhx.module.matter.model.MatterEntity;
 import com.mortals.xhx.module.matter.service.MatterService;
+import com.mortals.xhx.module.site.model.SiteThemeQuery;
+import com.mortals.xhx.module.site.service.SiteThemeService;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ObjectUtils;
@@ -44,6 +47,8 @@ public class MatterController extends BaseCRUDJsonBodyMappingController<MatterSe
     @Autowired
     private InterceptorConfig interceptorConfig;
 
+    private SiteThemeService siteThemeService;
+
     public MatterController() {
         super.setFormClass(MatterForm.class);
         super.setModuleDesc("鍩虹浜嬮」");
@@ -84,6 +89,7 @@ public class MatterController extends BaseCRUDJsonBodyMappingController<MatterSe
         this.addDict(model, "parson", paramService.getParamBySecondOrganize("Matter", "parson"));
         this.addDict(model, "lengal", paramService.getParamBySecondOrganize("Matter", "lengal"));
         this.addDict(model, "source", paramService.getParamBySecondOrganize("Matter", "source"));
+        this.addDict(model, "jointInfoShow", JointInfoShowEnum.getEnumMap());
 
         Setting baseInfoSetting = interceptorConfig.getBaseInfoSetting();
         Map<String, String> baseInfoMap = new HashMap<>();
@@ -102,7 +108,9 @@ public class MatterController extends BaseCRUDJsonBodyMappingController<MatterSe
             }
         });
         this.addDict(model, "sqclInfo", sqclInfoMap);
-
+        //theme
+        Map<String, String> themeMap = siteThemeService.find(new SiteThemeQuery()).stream().collect(Collectors.toMap(x -> x.getThemeCode(), y -> y.getThemeName(), (o, n) -> n));
+        this.addDict(model, "theme", themeMap);
         super.init(model, context);
     }
 
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/skin/service/impl/SkinBaseServiceImpl.java b/base-manager/src/main/java/com/mortals/xhx/module/skin/service/impl/SkinBaseServiceImpl.java
index cfc98db2918031cdcb4feff48dcf4f9a4a228132..ab3b4c2fede48bfb109467d5664244d246308b66 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/skin/service/impl/SkinBaseServiceImpl.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/skin/service/impl/SkinBaseServiceImpl.java
@@ -1,5 +1,6 @@
 package com.mortals.xhx.module.skin.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 import com.mortals.framework.ap.GlobalSysInfo;
 import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
@@ -81,10 +82,10 @@ public class SkinBaseServiceImpl extends AbstractCRUDServiceImpl<SkinBaseDao, Sk
             item.setSkinFieldList(skinFieldEntities);
 
             if (!ObjectUtils.isEmpty(item.getPreviewImagePath())) {
-                item.setPreviewImagePath(GlobalSysInfo.getParamValue(Constant.DOMAIN, "http://192.168.0.98:11071/") + item.getPreviewImagePath());
+                item.setPreviewImagePath(StrUtil.removeAllLineBreaks(GlobalSysInfo.getParamValue(Constant.DOMAIN, "http://192.168.0.98:11071/") )+ item.getPreviewImagePath());
             }
             if (!ObjectUtils.isEmpty(item.getCssFilePath())) {
-                item.setCssFilePath(GlobalSysInfo.getParamValue(Constant.DOMAIN, "http://192.168.0.98:11071/") + item.getCssFilePath());
+                item.setCssFilePath(StrUtil.removeAllLineBreaks(GlobalSysInfo.getParamValue(Constant.DOMAIN, "http://192.168.0.98:11071/") )+ item.getCssFilePath());
             }
         });
         super.findAfter(entity, pageInfo, context, list);
@@ -92,7 +93,7 @@ public class SkinBaseServiceImpl extends AbstractCRUDServiceImpl<SkinBaseDao, Sk
 
     private void updateUrl(SkinFieldEntity field) {
         if ("2".equals(field.getFieldType())) {
-            field.setFieldValue(GlobalSysInfo.getParamValue(Constant.DOMAIN, "http://192.168.0.98:11071/") + field.getFieldValue());
+            field.setFieldValue(StrUtil.removeAllLineBreaks(GlobalSysInfo.getParamValue(Constant.DOMAIN, "http://192.168.0.98:11071/")) + field.getFieldValue());
         }
     }
 
diff --git a/base-manager/src/main/java/com/mortals/xhx/module/skin/web/SkinBaseController.java b/base-manager/src/main/java/com/mortals/xhx/module/skin/web/SkinBaseController.java
index b01de64fa36af42b777e94bbc4670d99571f4988..ee665136df1e7c4035f22aa7a98b7809b9f022f1 100644
--- a/base-manager/src/main/java/com/mortals/xhx/module/skin/web/SkinBaseController.java
+++ b/base-manager/src/main/java/com/mortals/xhx/module/skin/web/SkinBaseController.java
@@ -1,4 +1,5 @@
 package com.mortals.xhx.module.skin.web;
+import cn.hutool.core.util.StrUtil;
 import com.mortals.framework.ap.GlobalSysInfo;
 import com.mortals.framework.exception.AppException;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
@@ -89,7 +90,7 @@ public class SkinBaseController extends BaseCRUDJsonBodyMappingController<SkinBa
 
     private void updateUrl(SkinFieldEntity field) {
         if ("2".equals(field.getFieldType())) {
-            field.setFieldValue(GlobalSysInfo.getParamValue(Constant.DOMAIN, "http://192.168.0.98:11071/") + field.getFieldValue());
+            field.setFieldValue(StrUtil.removeAllLineBreaks(GlobalSysInfo.getParamValue(Constant.DOMAIN, "http://192.168.0.98:11071/")) + field.getFieldValue());
         }
     }
 
diff --git a/base-manager/src/main/resources/logback-spring.xml b/base-manager/src/main/resources/logback-spring.xml
index 3c3c9481db59f3bcc117c1e91e2a2d1758de2902..5ca6fcda485befe1b5641306c9ed6e3f96e68e3f 100644
--- a/base-manager/src/main/resources/logback-spring.xml
+++ b/base-manager/src/main/resources/logback-spring.xml
@@ -56,13 +56,13 @@
     <!-- level 鐢ㄦ潵璁剧疆鎵撳嵃绾у埆锛屽ぇ灏忓啓鏃犲叧锛歍RACE, DEBUG, INFO, WARN, ERROR, ALL 鍜� OFF锛岃繕鏈変竴涓壒淇楀€糏NHERITED鎴栬€呭悓涔夎瘝NULL锛屼唬琛ㄥ己鍒舵墽琛屼笂绾х殑绾у埆銆傚鏋滄湭璁剧疆姝ゅ睘鎬э紝閭d箞褰撳墠logger灏嗕細缁ф壙涓婄骇鐨勭骇鍒�-->
     <!-- additivity 鏄惁鍚戜笂绾ogger浼犻€掓墦鍗颁俊鎭€傞粯璁ゆ槸true銆俧alse锛氳〃绀哄彧鐢ㄥ綋鍓峫ogger鐨刟ppender-ref銆倀rue锛氳〃绀哄綋鍓峫ogger鐨刟ppender-ref鍜宺ootLogger鐨刟ppender-ref閮芥湁鏁堛€�-->
 
-    <logger name="com.mortals" level="INFO" additivity="false">
+    <logger name="com.mortals" level="${logLevel}" additivity="false">
         <appender-ref ref="console"/>
         <appender-ref ref="fileInfo"/>
         <appender-ref ref="fileError"/>
     </logger>
 
-    <logger name="com.mortals.xhx.module" level="debug" additivity="false">
+    <logger name="com.mortals.xhx.module" level="${logLevel}" additivity="false">
         <appender-ref ref="console"/>
         <appender-ref ref="fileInfo"/>
         <appender-ref ref="fileError"/>
diff --git a/base-manager/src/test/java/com/mortals/httpclient/app/AppController.http b/base-manager/src/test/java/com/mortals/httpclient/app/AppController.http
index 0e03b70d9a849dc153e21b6c69f384c85ef0ae08..1b345349002eb86c37d8432bd563b82755afeebd 100644
--- a/base-manager/src/test/java/com/mortals/httpclient/app/AppController.http
+++ b/base-manager/src/test/java/com/mortals/httpclient/app/AppController.http
@@ -15,11 +15,9 @@ client.global.set("authToken", JSON.parse(response.body).data.token);
 
 ###鑷姪缁堢搴旂敤鍒楄〃
 POST {{baseUrl}}/app/list
-Authorization: {{authToken}}
 Content-Type: application/json
 
 {
-    "idList":[19,22,20],
     "page":1,
     "size":-1
 }
diff --git a/base-manager/src/test/java/com/mortals/httpclient/business/BusinessMatterController.http b/base-manager/src/test/java/com/mortals/httpclient/business/BusinessMatterController.http
index 95b8dd3ca4982d2432c4baf57fdd5359b1f7726f..d3273b808c3070f9972c4c3e1775887a32d7ee0c 100644
--- a/base-manager/src/test/java/com/mortals/httpclient/business/BusinessMatterController.http
+++ b/base-manager/src/test/java/com/mortals/httpclient/business/BusinessMatterController.http
@@ -5,7 +5,7 @@ Content-Type: application/json
 
 {
   "page": 1,
-  "siteBusinessName": "%涓嶅姩浜ф姷鎶肩櫥璁�%",
+  "matterId": 123,
   "siteId": 53,
   "size": 10
 }
diff --git a/base-manager/src/test/java/com/mortals/httpclient/matter/MatterController.http b/base-manager/src/test/java/com/mortals/httpclient/matter/MatterController.http
index b0064db295feefa2b40531b7b4b2a5ccd50fe407..797ec69053fbb046c375c2021d69332cf2ffafe0 100644
--- a/base-manager/src/test/java/com/mortals/httpclient/matter/MatterController.http
+++ b/base-manager/src/test/java/com/mortals/httpclient/matter/MatterController.http
@@ -20,7 +20,9 @@ POST {{baseUrl}}/matter/list
 Content-Type: application/json
 
 {
-  "idList": [1,2],
+  "siteId": "",
+  "matterName": "%瀵瑰绌村崰鍦伴潰绉秴杩囨爣鍑嗙殑澶勭綒%",
+  "deptCode":"",
   "page": 1,
   "size": 10
 }
@@ -30,7 +32,7 @@ POST {{baseUrl}}/micro/matter/list
 Content-Type: application/json
 
 {
-  "idList": [1,2],
+  "matterName": "%瀵瑰绌村崰鍦伴潰绉秴杩囨爣鍑嗙殑澶勭綒%",
   "page": 1,
   "size": 10
 }
@@ -124,7 +126,7 @@ client.global.set("Matter_id", JSON.parse(response.body).data.id);
 %}
 
 ###鍩虹浜嬮」鏌ョ湅
-GET {{baseUrl}}/matter/info?id=1
+GET {{baseUrl}}/matter/info?id=5809
 Accept: application/json
 
 ###鍩虹浜嬮」缂栬緫
diff --git a/base-manager/src/test/java/com/mortals/httpclient/site/SiteMatterController.http b/base-manager/src/test/java/com/mortals/httpclient/site/SiteMatterController.http
index e255a08ed0fb84752897db2f5ba649a759bedc77..b5081bc9ea7c04e604bbb64e73b66c3c6b89a6bc 100644
--- a/base-manager/src/test/java/com/mortals/httpclient/site/SiteMatterController.http
+++ b/base-manager/src/test/java/com/mortals/httpclient/site/SiteMatterController.http
@@ -4,7 +4,8 @@ POST {{baseUrl}}/site/matter/list
 Content-Type: application/json
 
 {
-    "siteId":21 ,
+    "siteId":35,
+    "matterId": 5809,
     "page":1,
     "size":10
 }
diff --git a/base-manager/src/test/java/com/mortals/httpclient/site/SiteThemeController.http b/base-manager/src/test/java/com/mortals/httpclient/site/SiteThemeController.http
index 278e27b3ea237ee811afadcd3b01d434db88dab5..f9a1618f594c58d2fd472539560fa9ceaa03402c 100644
--- a/base-manager/src/test/java/com/mortals/httpclient/site/SiteThemeController.http
+++ b/base-manager/src/test/java/com/mortals/httpclient/site/SiteThemeController.http
@@ -15,15 +15,10 @@ client.global.set("authToken", JSON.parse(response.body).data.token);
 
 ###涓婚鍒楄〃
 POST {{baseUrl}}/site/theme/list
-Authorization: {{authToken}}
 Content-Type: application/json
 
 {
-    "siteId":149,
-    "userType":"0ee9bm",
-    "themeCode":"p2seel",
-    "themeName":"2unqht",
-    "updatetime":"1669132800000"
+    "siteId":3,
     "page":1,
     "size":10
 }
diff --git a/base-manager/src/test/java/com/mortals/httpclient/site/SiteThemeMatterController.http b/base-manager/src/test/java/com/mortals/httpclient/site/SiteThemeMatterController.http
index 8da5835b71b08541f0740d14aa20f9a4cbac6952..adc8057b9b6b7395bad98bf93d082529cac1a06f 100644
--- a/base-manager/src/test/java/com/mortals/httpclient/site/SiteThemeMatterController.http
+++ b/base-manager/src/test/java/com/mortals/httpclient/site/SiteThemeMatterController.http
@@ -4,7 +4,7 @@ Content-Type: application/json
 
 {
 "loginName":"admin",
-"password":"admin",
+"password":"adsmile",
 "securityCode":"8888"
 }
 
@@ -15,19 +15,11 @@ client.global.set("authToken", JSON.parse(response.body).data.token);
 
 ###绔欑偣涓婚浜嬮」鍒楄〃
 POST {{baseUrl}}/site/theme/matter/list
-Authorization: {{authToken}}
 Content-Type: application/json
 
 {
-    "siteId":41,
-    "siteName":"fzbhd9",
-    "matterId":736,
-    "matterName":"dhnjnq",
-    "matterCode":"g61fxt",
-    "userType":"xd2eec",
-    "themeCode":"60d2h2",
-    "themeName":"gcfnnz",
-    "source":261,
+    "siteId":3,
+    "matterId":5809,
     "page":1,
     "size":10
 }
@@ -55,7 +47,7 @@ client.global.set("SiteThemeMatter_id", JSON.parse(response.body).data.id);
 %}
 
 ###绔欑偣涓婚浜嬮」鏌ョ湅
-GET {{baseUrl}}/site/theme/matter/info?id={{SiteThemeMatter_id}}
+GET {{baseUrl}}/site/theme/matter/info?id=52237
 Authorization: {{authToken}}
 Accept: application/json
 
diff --git a/deploy.sh b/deploy.sh
index e5842fa9e0d076c36295b873ec6bd5d3833f75ea..b77312ebe470dfa93ed5d352cf5206bafc39af8b 100644
--- a/deploy.sh
+++ b/deploy.sh
@@ -272,8 +272,8 @@ socket=/tmp/mysql.sock
   #bin/mysqld --initialize-insecure --user=mysql --datadir=${MYSQL_DATA_PATH} --basedir=${MYSQL_EXECPATH} --socket=/tmp/mysql.sock
 
   #鍒涘缓杞繛鎺�
-  rm -m /etc/init.d/mysql
-  rm -m /usr/bin/mysql
+  rm -f /etc/init.d/mysql
+  rm -f /usr/bin/mysql
   ln -s ${MYSQL_EXECPATH}/support-files/mysql.server /etc/init.d/mysql
   ln -s ${MYSQL_EXECPATH}/bin/mysql /usr/bin/mysql
 #  export PATH=$PATH:${MYSQL_EXECPATH}/bin
@@ -282,6 +282,8 @@ socket=/tmp/mysql.sock
 #  mysql -uroot -p123 <${BASEDIR}/soft/${MYSQL}/user.sql
 #  sed -i "s/skip-grant-tables/#skip-grant-tables/g" ${MYSQL_CONF_PATH}
   #service mysql restart
+
+  writelog $MYSQL_SERVICE
   echo"
 [Unit]
 Description=MySQL Server
@@ -298,7 +300,7 @@ ExecReload= /etc/init.d/mysql restart
 LimitNOFILE = 5000
 [Install]
 WantedBy=multi-user.target
-  ">${MYSQL_CONF_PATH}
+  ">${MYSQL_SERVICE}
 
   systemctl enable mysql
   systemctl daemon-reload
diff --git a/pom.xml b/pom.xml
index 9a8b6065659fc5400242c48cd29d94447282a8e3..a172b30e7d1a385b4a0db6053566e7d09c82edb7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,6 +25,16 @@
         <common-lib.version>0.0.1-SNAPSHOT</common-lib.version>
     </properties>
 
+    <repositories>
+        <repository>
+            <id>aliyun</id>
+            <name>aliyun Repository</name>
+            <url>https://maven.aliyun.com/repository/public</url>
+
+        </repository>
+
+    </repositories>
+
     <dependencyManagement>
         <dependencies>
             <dependency>
@@ -93,6 +103,15 @@
                     <useDefaultDelimiters>false</useDefaultDelimiters>
                 </configuration>
             </plugin>
+
+            <!-- 鎵撳寘璺宠繃娴嬭瘯 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>
\ No newline at end of file
diff --git a/portal-manager-ui/admin/package-lock.json b/portal-manager-ui/admin/package-lock.json
index 2716c3109fc2181716d6c1fa223a487e7abb8360..da81a2cfb1893a4722cfe16734a94585baa5c618 100644
--- a/portal-manager-ui/admin/package-lock.json
+++ b/portal-manager-ui/admin/package-lock.json
@@ -19,6 +19,7 @@
         "highlight.js": "^11.5.1",
         "js-export-excel": "^1.1.4",
         "lodash": "^4.17.21",
+        "moment": "^2.29.4",
         "qs": "^6.10.3",
         "vue": "^2.6.14",
         "vue-highlightjs": "^1.3.3",
@@ -35,7 +36,8 @@
         "less": "^4.0.0",
         "less-loader": "^8.0.0",
         "postcss": "^8.4.12",
-        "vue-template-compiler": "^2.6.14"
+        "vue-template-compiler": "^2.6.14",
+        "webpack-bundle-analyzer": "^4.7.0"
       }
     },
     "node_modules/@achrinza/node-ipc": {
diff --git a/portal-manager-ui/admin/package.json b/portal-manager-ui/admin/package.json
index 1fdd3e789beb98b2d685c98d4729970112c1b883..6d4064b4015129dea8475bf2361b3055c655c7a2 100644
--- a/portal-manager-ui/admin/package.json
+++ b/portal-manager-ui/admin/package.json
@@ -38,7 +38,8 @@
     "less": "^4.0.0",
     "less-loader": "^8.0.0",
     "postcss": "^8.4.12",
-    "vue-template-compiler": "^2.6.14"
+    "vue-template-compiler": "^2.6.14",
+    "webpack-bundle-analyzer": "^4.7.0"
   },
   "browserslist": [
     "> 1%",
diff --git a/portal-manager/pom.xml b/portal-manager/pom.xml
index 8ac5f6a3b8efd8d84919ae6e7c319ae428533b68..ed30790fdf4e6533021ac010d50d2819a94a59fa 100644
--- a/portal-manager/pom.xml
+++ b/portal-manager/pom.xml
@@ -34,7 +34,7 @@
 				<profiles.log.level>INFO</profiles.log.level>
 				<profiles.log.path>/mortals/app/logs</profiles.log.path>
 				<package.environment>test</package.environment>
-				<skipDeploy>false</skipDeploy>
+				<skipUi>false</skipUi>
 			</properties>
 		</profile>
 		<profile>
@@ -54,7 +54,7 @@
 				<profiles.log.level>INFO</profiles.log.level>
 				<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
 				<package.environment>test</package.environment>
-				<skipDeploy>false</skipDeploy>
+				<skipUi>true</skipUi>
 			</properties>
 		</profile>
 		<profile>
@@ -74,30 +74,30 @@
 				<profiles.log.level>INFO</profiles.log.level>
 				<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
 				<package.environment>build</package.environment>
-				<skipDeploy>false</skipDeploy>
+				<skipUi>true</skipUi>
 			</properties>
 		</profile>
-
 		<profile>
 			<id>yibin</id>
 			<properties>
 				<profiles.active>yibin</profiles.active>
 				<profiles.server.path>/zwfw</profiles.server.path>
 				<profiles.publish.path>/home/publish</profiles.publish.path>
-				<profiles.rabbitmq.host>127.0.0.1</profiles.rabbitmq.host>
+				<profiles.rabbitmq.host>172.15.28.115</profiles.rabbitmq.host>
 				<profiles.rabbitmq.port>5672</profiles.rabbitmq.port>
-				<profiles.rabbitmq.username>root_mq</profiles.rabbitmq.username>
-				<profiles.rabbitmq.password>xhx@2022</profiles.rabbitmq.password>
+				<profiles.rabbitmq.username>taxi_mq</profiles.rabbitmq.username>
+				<profiles.rabbitmq.password>admin@2020</profiles.rabbitmq.password>
 				<profiles.rabbitmq.virtualhost>/</profiles.rabbitmq.virtualhost>
-				<profiles.nacos.server-addr>127.0.0.1:8848</profiles.nacos.server-addr>
+				<profiles.nacos.server-addr>172.15.28.120:8848</profiles.nacos.server-addr>
 				<profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
 				<profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
 				<profiles.log.level>INFO</profiles.log.level>
 				<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
 				<package.environment>yibin</package.environment>
-				<skipDeploy>false</skipDeploy>
+				<skipUi>true</skipUi>
 			</properties>
 		</profile>
+
 	</profiles>
 	<properties>
 	</properties>
@@ -246,7 +246,7 @@
 				<artifactId>exec-maven-plugin</artifactId>
 				<version>1.6.0</version>
 				<configuration>
-					<skip>${skipDeploy}</skip>
+					<skip>${skipUi}</skip>
 				</configuration>
 				<executions>
 					<execution>
@@ -309,7 +309,7 @@
 							<goal>single</goal>
 						</goals>
 						<configuration>
-							<skipAssembly>${skipDeploy}</skipAssembly>
+							<skipAssembly>${skipUi}</skipAssembly>
 							<finalName>${project.artifactId}-ui</finalName>
 							<appendAssemblyId>false</appendAssemblyId>
 							<descriptors>
diff --git a/smart-gateway/pom.xml b/smart-gateway/pom.xml
index ff6739561d516707a90ec308f4b5a24aa58ccff2..1e35b8700e00d32b39c2fcf04886eca76f30a9ce 100644
--- a/smart-gateway/pom.xml
+++ b/smart-gateway/pom.xml
@@ -88,20 +88,20 @@
                 <profiles.server.ip>192.168.2.144</profiles.server.ip>
                 <profiles.server.port>17214</profiles.server.port>
                 <profiles.nginx.port>11078</profiles.nginx.port>
-                <profiles.rabbitmq.host>127.0.0.1</profiles.rabbitmq.host>
+                <profiles.rabbitmq.host>172.15.28.115</profiles.rabbitmq.host>
                 <profiles.rabbitmq.port>5672</profiles.rabbitmq.port>
                 <profiles.rabbitmq.username>taxi_mq</profiles.rabbitmq.username>
                 <profiles.rabbitmq.password>admin@2020</profiles.rabbitmq.password>
                 <profiles.rabbitmq.virtualhost>/</profiles.rabbitmq.virtualhost>
-                <profiles.nacos.server-addr>127.0.0.1:8848</profiles.nacos.server-addr>
+                <profiles.nacos.server-addr>172.15.28.120:8848</profiles.nacos.server-addr>
                 <profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
                 <profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
                 <profiles.log.level>INFO</profiles.log.level>
                 <profiles.log.path>/home/mortals/app/logs</profiles.log.path>
                 <profiles.publish.path>/home/publish</profiles.publish.path>
-
             </properties>
         </profile>
+
     </profiles>
 
     <properties>