From 36754ba47da7a3277d5be183a523c912a1dc4cef Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期四, 31 三月 2022 15:07:08 +0800
Subject: [PATCH] service服务bug修复

---
 src/main/java/com/ks/codegenerator/utils/ServiceBuilder.java                                                          |   49 +
 src/main/resources/code/service/app/src/main/resources/application-dev.yml                                            |    6 
 src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/WXUserInfoMapper.java                           |    2 
 src/main/resources/code/service/app/src/main/resources/mapper/UserInfoMapper.xml                                      |    5 
 src/main/resources/code/flutter/lib/utils/image_util.dart                                                             |   36 
 src/main/resources/code/service/app/src/main/resources/application-pro.yml                                            |    6 
 src/main/resources/code/flutter/lib/utils/sqlite_utils.dart                                                           |   68 +
 src/main/java/com/ks/codegenerator/vo/ServiceVO.java                                                                  |   75 +
 src/main/resources/code/android/library-flutter/build.gradle                                                          |   13 
 src/main/resources/code/service/app/src/main/java/com/ks/app/dao/feedback/PrivacyComplainDao.java                     |   94 ++
 src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/WXUserInfoServiceImpl.java             |    6 
 src/main/resources/code/android/app/src/main/res/layout/fragment_mine.xml                                             |    6 
 src/main/resources/code/service/app/src/main/resources/mapper/OrderRecordMapper.xml                                   |    2 
 src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/feedback/PrivacyComplainServiceImpl.java    |   89 ++
 src/main/resources/code/android/library-common/build/intermediates/runtime_library_classes_jar/debug/classes.jar      |    0 
 src/main/resources/code/android/library-ad/build.gradle                                                               |    1 
 src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/OrderRecordMapper.java                           |    2 
 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/SplashActivity.java                                 |  143 ++-
 src/main/resources/code/android/library-ec/build.gradle                                                               |    4 
 src/main/resources/code/service/app/src/main/java/com/ks/app/dao/feedback/AdviceDao.java                              |   94 ++
 src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/VIPServiceImpl.java                     |    8 
 src/main/resources/code/flutter/lib/utils/des/number_utils.dart                                                       |   95 ++
 src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/UserVIPInfoMapper.java                           |    2 
 src/main/resources/code/android/library-common/build/intermediates/compile_library_classes_jar/debug/classes.jar      |    0 
 src/main/resources/code/flutter/lib/utils/des/crypto_util.dart                                                        |   34 
 src/main/resources/code/service/app/src/main/resources/mapper/UserVIPInfoMapper.xml                                   |    2 
 src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/OrderServiceImpl.java                   |   14 
 src/main/resources/code/flutter/pubspec.yaml                                                                          |   18 
 src/main/resources/code/service/app/src/main/resources/static/index.html                                              |    2 
 src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/UserInfoMapper.java                             |    2 
 src/main/resources/code/flutter/pubspec.lock                                                                          |  126 ++
 src/main/resources/code/flutter/lib/utils/des/des.dart                                                                |  415 +++++++++
 src/main/resources/code/flutter_module/pubspec.yaml                                                                   |   16 
 src/main/resources/code/service/app/src/main/java/com/ks/app/utils/SystemInfoUtil.java                                |    2 
 src/main/resources/code/android/app/src/main/java/com/demo/app/MyApplication.java                                     |   36 
 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/MainActivity.java                                   |   22 
 src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/DataMethodChannel.java |    3 
 src/main/resources/code/android/library-dp/build.gradle                                                               |    1 
 src/main/resources/code/flutter/lib/utils/des/padding.dart                                                            |   19 
 src/main/resources/static/service.html                                                                                |   29 
 src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/FlutterCommonActivity.java     |    7 
 src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/QQUserInfoServiceImpl.java             |    6 
 src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/feedback/AdviceServiceImpl.java             |   90 ++
 src/main/resources/code/service/app/src/main/java/com/ks/app/service/inter/user/UserInfoService.java                  |    8 
 src/main/resources/code/android/library-login/build.gradle                                                            |    1 
 src/main/resources/code/service/app/src/main/resources/mapper/QQUserInfoMapper.xml                                    |    2 
 src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/UIMethodChannel.java   |    3 
 src/main/resources/code/service/app/src/main/java/com/ks/app/dao/admin/AdminUserDao.java                              |    2 
 src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/AdMethodChannel.java   |    3 
 src/main/resources/code/android/library-common/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt         |  116 +-
 src/main/java/com/ks/codegenerator/controller/GeneratorController.java                                                |   16 
 src/main/resources/code/flutter_module/lib/main.dart                                                                  |  449 ++++++++--
 src/main/resources/code/flutter_module/pubspec.lock                                                                   |    6 
 src/main/resources/code/service/app/src/main/resources/mysql.sql                                                      |   99 ++
 src/main/resources/code/service/pom.xml                                                                               |    2 
 src/main/resources/code/android/library-flutter/src/main/AndroidManifest.xml                                          |   30 
 src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/QQUserInfoMapper.java                           |    2 
 src/main/resources/code/flutter/lib/utils/string_util.dart                                                            |    6 
 src/main/resources/code/service/app/src/main/resources/mapper/WXUserInfoMapper.xml                                    |   12 
 src/main/resources/code/android/app/build.gradle                                                                      |    3 
 src/main/resources/code/android/app/src/main/AndroidManifest.xml                                                      |    2 
 src/main/resources/code/android/library-ad/src/main/AndroidManifest.xml                                               |   49 +
 src/main/resources/code/flutter/lib/api/http.dart                                                                     |   62 
 src/main/resources/code/service/app/src/main/java/com/ks/app/controller/client/api/UserController.java                |    2 
 src/main/resources/code/service/app/src/main/java/com/ks/app/aop/UserLoginValid.java                                  |    2 
 src/main/resources/code/flutter_module/test/widget_test.dart                                                          |    2 
 src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/UserInfoServiceImpl.java               |    6 
 67 files changed, 2,199 insertions(+), 336 deletions(-)

diff --git a/src/main/java/com/ks/codegenerator/controller/GeneratorController.java b/src/main/java/com/ks/codegenerator/controller/GeneratorController.java
index 0d955b9..e32272e 100644
--- a/src/main/java/com/ks/codegenerator/controller/GeneratorController.java
+++ b/src/main/java/com/ks/codegenerator/controller/GeneratorController.java
@@ -2,6 +2,7 @@
 
 import com.ks.codegenerator.utils.AndroidBuilder;
 import com.ks.codegenerator.utils.ServiceBuilder;
+import com.ks.codegenerator.vo.ServiceVO;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.yeshi.utils.JsonUtil;
@@ -23,14 +24,21 @@
 
     //鐢熸垚service
     @RequestMapping("createService")
-    public void service(String name, String pks, String subpks, PrintWriter out, HttpServletRequest request) {
-        if (StringUtil.isNullOrEmpty(name) || StringUtil.isNullOrEmpty(pks) || StringUtil.isNullOrEmpty(subpks)) {
-            out.print(JsonUtil.loadFalseResult("椤圭洰鍚嶇О锛岄」鐩寘鍚嶏紝搴旂敤鍖呭悕涓嶈兘涓虹┖"));
+    public void service(ServiceVO vo, PrintWriter out, HttpServletRequest request) {
+        if (StringUtil.isNullOrEmpty(vo.getName()) || StringUtil.isNullOrEmpty(vo.getPks()) || StringUtil.isNullOrEmpty(vo.getSubpks()) || StringUtil.isNullOrEmpty(vo.getChineseName())) {
+            out.print(JsonUtil.loadFalseResult("鍙傛暟涓嶅畬鏁�"));
             return;
         }
+
+        if (StringUtil.isNullOrEmpty(vo.getSqlDataBaseName()) || StringUtil.isNullOrEmpty(vo.getSqlTablePrefix()) || StringUtil.isNullOrEmpty(vo.getMongoDataBaseName())) {
+            out.print(JsonUtil.loadFalseResult("鍙傛暟涓嶅畬鏁�"));
+            return;
+        }
+
+
         String rootPath = request.getServletContext().getRealPath("cache");
         try {
-            String path = new ServiceBuilder().setCacheDir(rootPath).setName(name).setPks(pks).setSubpks(subpks).build();
+            String path = new ServiceBuilder().setCacheDir(rootPath).setName(vo.getName()).setPks(vo.getPks()).setSubpks(vo.getSubpks()).setProjectChineseName(vo.getChineseName()).setMongoDatabaseName(vo.getMongoDataBaseName()).setSqlDatabaseName(vo.getSqlDataBaseName()).setSqlTablePrefix(vo.getSqlTablePrefix()).build();
             out.print(JsonUtil.loadTrueResult(path));
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/src/main/java/com/ks/codegenerator/utils/ServiceBuilder.java b/src/main/java/com/ks/codegenerator/utils/ServiceBuilder.java
index 3ae6de7..6261ea2 100644
--- a/src/main/java/com/ks/codegenerator/utils/ServiceBuilder.java
+++ b/src/main/java/com/ks/codegenerator/utils/ServiceBuilder.java
@@ -30,6 +30,11 @@
     private String subpks;
     private String cacheDir;
 
+    private String projectChineseName;
+    private String sqlTablePrefix;
+    private String sqlDatabaseName;
+    private String mongoDatabaseName;
+
 
     public ServiceBuilder setName(String name) {
         this.name = name;
@@ -48,6 +53,26 @@
 
     public ServiceBuilder setCacheDir(String cacheDir) {
         this.cacheDir = cacheDir;
+        return this;
+    }
+
+    public ServiceBuilder setProjectChineseName(String projectChineseName) {
+        this.projectChineseName = projectChineseName;
+        return this;
+    }
+
+    public ServiceBuilder setSqlTablePrefix(String sqlTablePrefix) {
+        this.sqlTablePrefix = sqlTablePrefix;
+        return this;
+    }
+
+    public ServiceBuilder setSqlDatabaseName(String sqlDatabaseName) {
+        this.sqlDatabaseName = sqlDatabaseName;
+        return this;
+    }
+
+    public ServiceBuilder setMongoDatabaseName(String mongoDatabaseName) {
+        this.mongoDatabaseName = mongoDatabaseName;
         return this;
     }
 
@@ -119,7 +144,31 @@
 
 
         FileUtils.replaceFileContent(path + "/app/src/main/resources/application-dev.yml", "com.ks.app", subpks);
+        FileUtils.replaceFileContent(path + "/app/src/main/resources/application-dev.yml", "${mongoDataBaseName}", mongoDatabaseName);
+        FileUtils.replaceFileContent(path + "/app/src/main/resources/application-dev.yml", "${sqlDataBaseName}", sqlDatabaseName);
+        FileUtils.replaceFileContent(path + "/app/src/main/resources/application-dev.yml", "${projectName}", name);
+
         FileUtils.replaceFileContent(path + "/app/src/main/resources/application-pro.yml", "com.ks.app", subpks);
+        FileUtils.replaceFileContent(path + "/app/src/main/resources/application-pro.yml", "${mongoDataBaseName}", mongoDatabaseName);
+        FileUtils.replaceFileContent(path + "/app/src/main/resources/application-pro.yml", "${sqlDataBaseName}", sqlDatabaseName);
+        FileUtils.replaceFileContent(path + "/app/src/main/resources/application-pro.yml", "${projectName}", name);
+
+        //鏇挎崲Mapper涓嬬殑琛ㄥ墠缂�
+        String mapperDir = path + "/app/src/main/resources/mapper";
+        File mapperFiles = new File(mapperDir);
+        for (File f : mapperFiles.listFiles()) {
+            FileUtils.replaceFileContent(f.getAbsolutePath(), "com.ks.app", subpks);
+            FileUtils.replaceFileContent(f.getAbsolutePath(), "lt_", sqlTablePrefix);
+        }
+
+        FileUtils.replaceFileContent(path + "/app/src/main/resources/mysql.sql", "${sqlDataBaseName}", sqlDatabaseName);
+        FileUtils.replaceFileContent(path + "/app/src/main/resources/mysql.sql", "${sqlTablePrefix}", sqlTablePrefix);
+        FileUtils.replaceFileContent(path + "/app/src/main/resources/static/index.html", "${projectChineseName}", projectChineseName);
+
+        FileUtils.replaceFileContent(path + "/app/src/main/java/"+subpks.replace(".","/")+"/aop/AdminApiFilter.java", "com.ks.app", subpks);
+        FileUtils.replaceFileContent(path + "/app/src/main/java/"+subpks.replace(".","/")+"/aop/SignValidate.java", "com.ks.app", subpks);
+        FileUtils.replaceFileContent(path + "/app/src/main/java/"+subpks.replace(".","/")+"/aop/UserLoginValid.java", "com.ks.app", subpks);
+        FileUtils.replaceFileContent(path + "/app/src/main/java/"+subpks.replace(".","/")+"/Application.java", "com.ks.app", subpks);
     }
 
     //閲嶆柊鍛藉悕鏂囦欢澶逛笌鏂囦欢
diff --git a/src/main/java/com/ks/codegenerator/vo/ServiceVO.java b/src/main/java/com/ks/codegenerator/vo/ServiceVO.java
new file mode 100644
index 0000000..ee19399
--- /dev/null
+++ b/src/main/java/com/ks/codegenerator/vo/ServiceVO.java
@@ -0,0 +1,75 @@
+package com.ks.codegenerator.vo;
+
+/**
+ * @author hxh
+ * @title: ServiceVO
+ * @description: TODO
+ * @date 2022/3/31 14:17
+ */
+public class ServiceVO {
+
+
+    private String chineseName;
+    private String name;
+    private String pks;
+    private String subpks;
+    private String sqlDataBaseName;
+    private String sqlTablePrefix;
+    private String mongoDataBaseName;
+
+    public String getChineseName() {
+        return chineseName;
+    }
+
+    public void setChineseName(String chineseName) {
+        this.chineseName = chineseName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPks() {
+        return pks;
+    }
+
+    public void setPks(String pks) {
+        this.pks = pks;
+    }
+
+    public String getSubpks() {
+        return subpks;
+    }
+
+    public void setSubpks(String subpks) {
+        this.subpks = subpks;
+    }
+
+    public String getSqlDataBaseName() {
+        return sqlDataBaseName;
+    }
+
+    public void setSqlDataBaseName(String sqlDataBaseName) {
+        this.sqlDataBaseName = sqlDataBaseName;
+    }
+
+    public String getSqlTablePrefix() {
+        return sqlTablePrefix;
+    }
+
+    public void setSqlTablePrefix(String sqlTablePrefix) {
+        this.sqlTablePrefix = sqlTablePrefix;
+    }
+
+    public String getMongoDataBaseName() {
+        return mongoDataBaseName;
+    }
+
+    public void setMongoDataBaseName(String mongoDataBaseName) {
+        this.mongoDataBaseName = mongoDataBaseName;
+    }
+}
diff --git a/src/main/resources/code/android/app/build.gradle b/src/main/resources/code/android/app/build.gradle
index 4157a04..fbc64b2 100644
--- a/src/main/resources/code/android/app/build.gradle
+++ b/src/main/resources/code/android/app/build.gradle
@@ -6,7 +6,7 @@
 
     useLibrary 'org.apache.http.legacy'
 
-    compileSdk 29
+    compileSdk 31
 
     defaultConfig {
         applicationId "com.demo.android"
@@ -42,7 +42,6 @@
     implementation project(path: ':library-ec')
     implementation project(path: ':library-login')
     implementation project(path: ':library-flutter')
-    testImplementation 'junit:junit:4.+'
     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
     implementation 'androidx.cardview:cardview:1.0.0'
diff --git a/src/main/resources/code/android/app/src/main/AndroidManifest.xml b/src/main/resources/code/android/app/src/main/AndroidManifest.xml
index 34c359e..65dc70b 100644
--- a/src/main/resources/code/android/app/src/main/AndroidManifest.xml
+++ b/src/main/resources/code/android/app/src/main/AndroidManifest.xml
@@ -3,6 +3,8 @@
     xmlns:tools="http://schemas.android.com/tools"
     package="com.demo.app">
 
+    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
+
     <application
         android:name="com.demo.app.MyApplication"
         android:allowBackup="true"
diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/MyApplication.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/MyApplication.java
index a8d56f7..0671d7c 100644
--- a/src/main/resources/code/android/app/src/main/java/com/demo/app/MyApplication.java
+++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/MyApplication.java
@@ -25,10 +25,12 @@
 import com.idlefish.flutterboost.FlutterBoost;
 import com.idlefish.flutterboost.FlutterBoostDelegate;
 import com.idlefish.flutterboost.FlutterBoostRouteOptions;
+import com.idlefish.flutterboost.FlutterBoostSetupOptions;
 import com.idlefish.flutterboost.containers.FlutterBoostActivity;
 import com.umeng.analytics.MobclickAgent;
 import com.umeng.commonsdk.UMConfigure;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -36,6 +38,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.multidex.MultiDex;
+import io.flutter.Log;
+import io.flutter.app.FlutterApplication;
 import io.flutter.embedding.android.FlutterActivityLaunchConfigs;
 import io.flutter.embedding.engine.FlutterEngine;
 import io.flutter.plugin.common.MethodCall;
@@ -82,9 +86,9 @@
         initAd(application, initListener);
 
         //灏忚
-        initNovel(application);
+//        initNovel(application);
         //绌垮北鐢插皬瑙嗛
-        initDPSDK(application);
+//        initDPSDK(application);
 
         initFlutter(application);
     }
@@ -139,16 +143,30 @@
 
     public static void initFlutter(Application application) {
 
+        FlutterBoostSetupOptions options = new FlutterBoostSetupOptions.Builder().build();
         FlutterBoost.instance().setup(application, new FlutterBoostDelegate() {
             @Override
             public void pushNativeRoute(FlutterBoostRouteOptions options) {
+                Log.i(TAG, "pushNativeRoute");
+//                options.arguments()
                 //杩欓噷鏍规嵁options.pageName鏉ュ垽鏂綘鎯宠烦杞摢涓〉闈紝杩欓噷绠�鍗曠粰涓�涓�
-                Intent intent = new Intent(FlutterBoost.instance().currentActivity(), FlutterCommonActivity.class);
-                FlutterBoost.instance().currentActivity().startActivityForResult(intent, options.requestCode());
+//                Intent intent = new Intent(FlutterBoost.instance().currentActivity(), FlutterCommonActivity.class);
+//                intent.putExtra("pageRoute", options.pageName());
+//                FlutterBoost.instance().currentActivity().startActivityForResult(intent, options.requestCode());
+
+                Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterCommonActivity.class)
+                        .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent)
+                        .destroyEngineWithActivity(false)
+                        .uniqueId(options.uniqueId())
+                        .url(options.pageName())
+                        .urlParams(options.arguments())
+                        .build(FlutterBoost.instance().currentActivity());
+                FlutterBoost.instance().currentActivity().startActivity(intent);
             }
 
             @Override
             public void pushFlutterRoute(FlutterBoostRouteOptions options) {
+                Log.i(TAG, "pushFlutterRoute");
                 Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.class)
                         .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent)
                         .destroyEngineWithActivity(false)
@@ -157,6 +175,12 @@
                         .urlParams(options.arguments())
                         .build(FlutterBoost.instance().currentActivity());
                 FlutterBoost.instance().currentActivity().startActivity(intent);
+            }
+
+            @Override
+            public boolean popRoute(FlutterBoostRouteOptions options) {
+                Log.i(TAG, "popRoute");
+                return false;
             }
         }, engine -> {
             PlatformViewRegistry registry = engine.getPlatformViewsController().getRegistry();
@@ -186,13 +210,13 @@
                     return true;
                 }
             });
-            //骞垮憡鎺ュ彛
+//            //骞垮憡鎺ュ彛
             new AdMethodChannel(engine.getDartExecutor().getBinaryMessenger(), application.getApplicationContext(), new AdMethodChannel.DataListener() {
 
             });
 
 
-        });
+        }, options);
     }
 
 
diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/MainActivity.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/MainActivity.java
index 2bdcec5..3aeb584 100644
--- a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/MainActivity.java
+++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/MainActivity.java
@@ -3,7 +3,6 @@
 import android.content.DialogInterface;
 import android.os.Bundle;
 import android.view.KeyEvent;
-import android.view.View;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
 
@@ -15,11 +14,16 @@
 import com.demo.lib.common.activity.BaseActivity;
 import com.demo.lib.common.dialog.DialogUtil;
 import com.demo.lib.common.util.FragmentSwitchHelperV2;
+import com.demo.library_flutter.FlutterRecommendFragment;
+import com.idlefish.flutterboost.containers.FlutterBoostFragment;
+import com.jaeger.library.StatusBarUtil;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 import androidx.fragment.app.Fragment;
+import io.flutter.embedding.android.FlutterFragment;
 
 public class MainActivity extends BaseActivity {
 
@@ -30,8 +34,21 @@
 
     private void initFragment() {
         List<Fragment> list = new ArrayList<>();
+
+
+        FlutterRecommendFragment flutterRecommendFragment = new FlutterBoostFragment.CachedEngineFragmentBuilder(FlutterRecommendFragment.class)
+                .url("/")
+                .urlParams(new HashMap<>())
+                .build();
+        list.add(flutterRecommendFragment);
+
+        MineFragment mineFragment = new MineFragment();
+        list.add(mineFragment);
+
         Fragment[] fs = new Fragment[list.size()];
         list.toArray(fs);
+
+
         mFragmentSwitchHelper = FragmentSwitchHelperV2.create(R.id.fl_container, getSupportFragmentManager(), fs);
     }
 
@@ -50,7 +67,7 @@
                 switch (checkedId) {
                     case R.id.rb_nav_recommend: {
                         mFragmentSwitchHelper
-                                .changeFragment(HomeFragment.class);
+                                .changeFragment(FlutterRecommendFragment.class);
                     }
                     break;
 
@@ -85,6 +102,7 @@
     }
 
     ExitDialog exitDialog = null;
+
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_BACK) {
diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/SplashActivity.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/SplashActivity.java
index 033a5d0..f9f870e 100644
--- a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/SplashActivity.java
+++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/SplashActivity.java
@@ -25,10 +25,12 @@
 import org.apache.http.Header;
 import org.json.JSONObject;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.core.app.ActivityCompat;
 import androidx.core.content.ContextCompat;
 
+import static android.content.pm.PackageManager.PERMISSION_DENIED;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 
 public class SplashActivity extends AppCompatActivity {
@@ -123,64 +125,86 @@
         SharedPreferences sharedPreferences = getSharedPreferences("permission", Context.MODE_PRIVATE);
         boolean showPermission = sharedPreferences.getBoolean("show", true);
 
+//        if (1 > 0) {
+//            toMainActivity();
+//            return;
+//        }
+
+
         if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PERMISSION_GRANTED && showPermission) {
             ActivityCompat.requestPermissions(this, PERMISSIONS, REQUEST_CODE);
         } else {
-            MyApplication.init(MyApplication.application, new MyApplication.InitListener() {
-                @Override
-                public void onFinish() {
+            next();
+        }
+    }
 
-                }
-            });
-            int delayMs = 1;
+
+    void next() {
+        MyApplication.init(MyApplication.application, new MyApplication.InitListener() {
+            @Override
+            public void onFinish() {
+
+            }
+        });
+
+        if (1 > 0) {
             vg_ad.postDelayed(new Runnable() {
                 @Override
                 public void run() {
-                    HttpApiUtil.getConfig(getApplicationContext(), new BasicTextHttpResponseHandler() {
-
-                        @Override
-                        public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
-                            if (jsonObject != null) {
-                                if (jsonObject.getBoolean("IsPost")) {
-                                    JSONObject data = jsonObject.getJSONObject("Data");
-                                    JSONObject ad = data.optJSONObject("adNew");
-                                    //娴忚鍣ㄥ璺冲崗璁�
-                                    AppConfigUtil.saveBrowserJumpOutProtocolPrefix(getApplicationContext(), data.optString("jumpAppProtocolPrefix"));
-                                    //淇濆瓨鑱旂郴瀹㈡湇锛屾敞閿�閾炬帴
-                                    AppConfigUtil.saveConcatUsLink(getApplicationContext(), data.optString("contactUsLink"));
-                                    AppConfigUtil.saveUnRegisterLink(getApplicationContext(), data.optString("unRegisterLink"));
-                                    AdUtil.saveAdConfig(getApplicationContext(), ad);
-                                    MyApplication.initAd(MyApplication.application, new MyApplication.InitListener() {
-                                        @Override
-                                        public void onFinish() {
-                                            runOnUiThread(new Runnable() {
-                                                @Override
-                                                public void run() {
-                                                    loadSplashAd();
-                                                }
-                                            });
-                                        }
-                                    });
-                                    return;
-                                }
-                            }
-                            loadSplashAd();
-                        }
-
-
-                        @Override
-                        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
-                            super.onFailure(statusCode, headers, responseString, throwable);
-                            loadSplashAd();
-                        }
-                    });
-
-
+                    toMainActivity();
                 }
-            }, delayMs);
+            },3000);
 
-
+            return;
         }
+
+
+        int delayMs = 1;
+        vg_ad.postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                HttpApiUtil.getConfig(getApplicationContext(), new BasicTextHttpResponseHandler() {
+
+                    @Override
+                    public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
+                        if (jsonObject != null) {
+                            if (jsonObject.getBoolean("IsPost")) {
+                                JSONObject data = jsonObject.getJSONObject("Data");
+                                JSONObject ad = data.optJSONObject("adNew");
+                                //娴忚鍣ㄥ璺冲崗璁�
+                                AppConfigUtil.saveBrowserJumpOutProtocolPrefix(getApplicationContext(), data.optString("jumpAppProtocolPrefix"));
+                                //淇濆瓨鑱旂郴瀹㈡湇锛屾敞閿�閾炬帴
+                                AppConfigUtil.saveConcatUsLink(getApplicationContext(), data.optString("contactUsLink"));
+                                AppConfigUtil.saveUnRegisterLink(getApplicationContext(), data.optString("unRegisterLink"));
+                                AdUtil.saveAdConfig(getApplicationContext(), ad);
+                                MyApplication.initAd(MyApplication.application, new MyApplication.InitListener() {
+                                    @Override
+                                    public void onFinish() {
+                                        runOnUiThread(new Runnable() {
+                                            @Override
+                                            public void run() {
+                                                loadSplashAd();
+                                            }
+                                        });
+                                    }
+                                });
+                                return;
+                            }
+                        }
+                        loadSplashAd();
+                    }
+
+
+                    @Override
+                    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
+                        super.onFailure(statusCode, headers, responseString, throwable);
+                        loadSplashAd();
+                    }
+                });
+
+
+            }
+        }, delayMs);
     }
 
 
@@ -188,6 +212,7 @@
      * 鍔犺浇寮�灞忓箍鍛�
      */
     private void loadSplashAd() {
+
         AdUtil.AD_TYPE splashType = AdUtil.getAdType(getApplicationContext(), "");
         if (splashType == null) {
             vg_ad.postDelayed(new Runnable() {
@@ -286,4 +311,26 @@
             finish();
         }
     }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        if (requestCode == REQUEST_CODE) {
+            for (int i = 0; i < permissions.length; i++) {
+                if (grantResults[i] == PERMISSION_GRANTED) {//閫夋嫨浜嗏�滃缁堝厑璁糕��
+                    requetPermission();
+                } else {
+                    //鎷掔粷浜嗘巿鏉�
+                    if (grantResults[i] == PERMISSION_DENIED) {
+                        SharedPreferences sharedPreferences = getSharedPreferences("permission", Context.MODE_PRIVATE);
+                        SharedPreferences.Editor editor = sharedPreferences.edit();
+                        editor.putBoolean("show", false);
+                        editor.commit();
+                    }
+                    next();
+                }
+            }
+        }
+
+    }
 }
diff --git a/src/main/resources/code/android/app/src/main/res/layout/fragment_mine.xml b/src/main/resources/code/android/app/src/main/res/layout/fragment_mine.xml
index 322da92..a586ea1 100644
--- a/src/main/resources/code/android/app/src/main/res/layout/fragment_mine.xml
+++ b/src/main/resources/code/android/app/src/main/res/layout/fragment_mine.xml
@@ -5,6 +5,12 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="鎴戠殑"></TextView>
+
 
     <LinearLayout
         android:id="@+id/ll_user_info"
diff --git a/src/main/resources/code/android/library-ad/build.gradle b/src/main/resources/code/android/library-ad/build.gradle
index b8d9aec..6739054 100644
--- a/src/main/resources/code/android/library-ad/build.gradle
+++ b/src/main/resources/code/android/library-ad/build.gradle
@@ -30,7 +30,6 @@
 
     implementation 'androidx.appcompat:appcompat:1.2.0'
     implementation 'com.google.android.material:material:1.3.0'
-    testImplementation 'junit:junit:4.+'
     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
     implementation project(path: ':library-common')
diff --git a/src/main/resources/code/android/library-ad/src/main/AndroidManifest.xml b/src/main/resources/code/android/library-ad/src/main/AndroidManifest.xml
index 0b4df6d..a3cf1cc 100644
--- a/src/main/resources/code/android/library-ad/src/main/AndroidManifest.xml
+++ b/src/main/resources/code/android/library-ad/src/main/AndroidManifest.xml
@@ -12,7 +12,52 @@
         android:allowBackup="true"
         android:label="@string/app_name"
         android:supportsRtl="true"
-        tools:replace="android:allowBackup,android:theme"
-        android:theme="@style/Theme.Android" />
+        android:theme="@style/Theme.Android"
+        tools:replace="android:allowBackup,android:theme">
+        <!--骞跨偣閫氬箍鍛�-->
+        <!-- targetSDKVersion >= 24鏃舵墠闇�瑕佹坊鍔犺繖涓猵rovider銆俻rovider鐨刟uthorities灞炴�х殑鍊间负${applicationId}.fileprovider锛岃寮�鍙戣�呮牴鎹嚜宸辩殑${applicationId}鏉ヨ缃繖涓�硷紝渚嬪鏈緥涓璦pplicationId涓�"com.qq.e.union.demo"銆� -->
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="${applicationId}.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/gdt_file_path"
+                tools:replace="android:resource" />
+        </provider>
+
+        <provider
+            android:name="com.qq.e.comm.GDTFileProvider"
+            android:authorities="${applicationId}.gdt.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/gdt_file_path" />
+        </provider>
+
+
+        <service
+            android:name="com.qq.e.comm.DownloadService"
+            android:exported="false" />
+
+        <!-- 缃戠洘骞垮憡 -->
+        <provider
+            android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
+            android:authorities="${applicationId}.TTFileProvider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths" />
+        </provider>
+
+        <!-- 缃戠洘骞垮憡 -->
+        <provider
+            android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
+            android:authorities="${applicationId}.TTMultiProvider" />
+
+    </application>
 
 </manifest>
\ No newline at end of file
diff --git a/src/main/resources/code/android/library-common/build/intermediates/compile_library_classes_jar/debug/classes.jar b/src/main/resources/code/android/library-common/build/intermediates/compile_library_classes_jar/debug/classes.jar
index af13d0b..6bb7fac 100644
--- a/src/main/resources/code/android/library-common/build/intermediates/compile_library_classes_jar/debug/classes.jar
+++ b/src/main/resources/code/android/library-common/build/intermediates/compile_library_classes_jar/debug/classes.jar
Binary files differ
diff --git a/src/main/resources/code/android/library-common/build/intermediates/runtime_library_classes_jar/debug/classes.jar b/src/main/resources/code/android/library-common/build/intermediates/runtime_library_classes_jar/debug/classes.jar
index f7b2c84..8afff32 100644
--- a/src/main/resources/code/android/library-common/build/intermediates/runtime_library_classes_jar/debug/classes.jar
+++ b/src/main/resources/code/android/library-common/build/intermediates/runtime_library_classes_jar/debug/classes.jar
Binary files differ
diff --git a/src/main/resources/code/android/library-common/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt b/src/main/resources/code/android/library-common/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt
index 3a4bcd4..a93a3fa 100644
--- a/src/main/resources/code/android/library-common/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt
+++ b/src/main/resources/code/android/library-common/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt
@@ -4,6 +4,8 @@
  com.demo.lib.common.okhttp.request.CountingRequestBody$Listener
 com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.java
  com.demo.lib.common.okhttp.cookie.store.SerializableHttpCookie
+com/demo/lib/common/widget/FlowLayout.java
+ com.demo.lib.common.widget.FlowLayout
 com/demo/lib/common/activity/BaseActivity.java
  com.demo.lib.common.activity.BaseActivity
 com/demo/lib/common/upgrade/UpdateService.java
@@ -28,10 +30,8 @@
  com.demo.lib.common.util.common.ConnectionUtils$3
 com/demo/lib/common/DatabaseContext.java
  com.demo.lib.common.DatabaseContext
-com/demo/lib/common/okhttp/request/PostFormRequest.java
- com.demo.lib.common.okhttp.request.PostFormRequest
- com.demo.lib.common.okhttp.request.PostFormRequest$1
- com.demo.lib.common.okhttp.request.PostFormRequest$1$1
+com/demo/lib/common/util/ui/LoadingDialogUtil.java
+ com.demo.lib.common.util.ui.LoadingDialogUtil
 com/demo/lib/common/util/FragmentSwitchHelper.java
  com.demo.lib.common.util.FragmentSwitchHelper
 com/demo/lib/common/util/device/MobileUtil.java
@@ -46,34 +46,31 @@
  com.demo.lib.common.widget.SystemBarTintManager
  com.demo.lib.common.widget.SystemBarTintManager$1
  com.demo.lib.common.widget.SystemBarTintManager$SystemBarConfig
+com/demo/lib/common/util/ui/MyActivityManager.java
+ com.demo.lib.common.util.ui.MyActivityManager
 com/demo/lib/common/okhttp/builder/HeadBuilder.java
  com.demo.lib.common.okhttp.builder.HeadBuilder
 com/demo/lib/common/util/common/DimenUtils.java
  com.demo.lib.common.util.common.DimenUtils
-com/demo/lib/common/okhttp/utils/L.java
- com.demo.lib.common.okhttp.utils.L
+com/demo/lib/common/dialog/BottomDialog.java
+ com.demo.lib.common.dialog.BottomDialog
 com/demo/lib/common/okhttp/builder/OtherRequestBuilder.java
  com.demo.lib.common.okhttp.builder.OtherRequestBuilder
-com/demo/lib/common/widget/TagCloudLayout.java
- com.demo.lib.common.widget.TagCloudLayout
- com.demo.lib.common.widget.TagCloudLayout$FlingRunnable
- com.demo.lib.common.widget.TagCloudLayout$OnScrollListener
- com.demo.lib.common.widget.TagCloudLayout$TagView
+com/demo/lib/common/widget/ShelfView.java
+ com.demo.lib.common.widget.ShelfView
 com/demo/lib/common/util/ManifestDataUtil.java
  com.demo.lib.common.util.ManifestDataUtil
 com/demo/lib/common/util/SingleToast.java
  com.demo.lib.common.util.SingleToast
  com.demo.lib.common.util.SingleToast$1
-com/demo/lib/common/okhttp/utils/Platform.java
- com.demo.lib.common.okhttp.utils.Platform
- com.demo.lib.common.okhttp.utils.Platform$Android
- com.demo.lib.common.okhttp.utils.Platform$Android$MainThreadExecutor
+com/demo/lib/common/dialog/SlidingDialog.java
+ com.demo.lib.common.dialog.SlidingDialog
 com/demo/lib/common/okhttp/log/LoggerInterceptor.java
  com.demo.lib.common.okhttp.log.LoggerInterceptor
 com/demo/lib/common/util/common/SoftKeyboardUtils.java
  com.demo.lib.common.util.common.SoftKeyboardUtils
-com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.java
- com.demo.lib.common.widget.verticalviewpager.ExtendedWebView
+com/demo/lib/common/emotion/EmotionEditText.java
+ com.demo.lib.common.emotion.EmotionEditText
 com/demo/lib/common/util/MarketUtils.java
  com.demo.lib.common.util.MarketUtils
 com/demo/lib/common/upgrade/Version.java
@@ -82,8 +79,8 @@
  com.demo.lib.common.okhttp.builder.PostStringBuilder
 com/demo/lib/common/okhttp/request/RequestCall.java
  com.demo.lib.common.okhttp.request.RequestCall
-com/demo/lib/common/util/common/StringUtils.java
- com.demo.lib.common.util.common.StringUtils
+com/demo/lib/common/drawable/SpotlightDrawable.java
+ com.demo.lib.common.drawable.SpotlightDrawable
 com/lcjian/lcjianlibrary/BuildConfig.java
  com.lcjian.lcjianlibrary.BuildConfig
 com/demo/lib/common/okhttp/request/PostFileRequest.java
@@ -114,8 +111,8 @@
 com/demo/lib/common/util/cache/StrictLineReader.java
  com.demo.lib.common.util.cache.StrictLineReader
  com.demo.lib.common.util.cache.StrictLineReader$1
-com/demo/lib/common/widget/MyGridView.java
- com.demo.lib.common.widget.MyGridView
+com/demo/lib/common/emotion/EmotionTextView.java
+ com.demo.lib.common.emotion.EmotionTextView
 com/demo/lib/common/entity/IsSeeking.java
  com.demo.lib.common.entity.IsSeeking
 com/demo/lib/common/util/security/MD5Utils.java
@@ -148,14 +145,17 @@
  com.demo.lib.common.okhttp.cookie.store.PersistentCookieStore
 com/demo/lib/common/okhttp/builder/PostFileBuilder.java
  com.demo.lib.common.okhttp.builder.PostFileBuilder
-com/demo/lib/common/entity/ClipCopyContent.java
- com.demo.lib.common.entity.ClipCopyContent
+com/demo/lib/common/widget/RatioLayout.java
+ com.demo.lib.common.widget.RatioLayout
 com/demo/lib/common/upgrade/UpdateActivity.java
  com.demo.lib.common.upgrade.UpdateActivity
  com.demo.lib.common.upgrade.UpdateActivity$1
  com.demo.lib.common.upgrade.UpdateActivity$2
-com/demo/lib/common/util/PermissionsChecker.java
- com.demo.lib.common.util.PermissionsChecker
+com/demo/lib/common/emotion/EmotionGridFragment.java
+ com.demo.lib.common.emotion.EmotionGridFragment
+ com.demo.lib.common.emotion.EmotionGridFragment$1
+ com.demo.lib.common.emotion.EmotionGridFragment$EmotionAdapter
+ com.demo.lib.common.emotion.EmotionGridFragment$OnEditListener
 com/demo/lib/common/DeviceUuidFactory.java
  com.demo.lib.common.DeviceUuidFactory
 com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.java
@@ -192,8 +192,9 @@
 com/demo/lib/common/drawable/CrossFadeDrawable.java
  com.demo.lib.common.drawable.CrossFadeDrawable
  com.demo.lib.common.drawable.CrossFadeDrawable$1
-com/demo/lib/common/widget/MyViewPager.java
- com.demo.lib.common.widget.MyViewPager
+com/demo/lib/common/util/RefreshLayout.java
+ com.demo.lib.common.util.RefreshLayout
+ com.demo.lib.common.util.RefreshLayout$OnLoadListener
 com/demo/lib/common/util/common/SerializeUtils.java
  com.demo.lib.common.util.common.SerializeUtils
 com/demo/lib/common/okhttp/callback/StringCallback.java
@@ -306,35 +307,36 @@
  com.demo.lib.common.util.common.IClipboardContentListener
 com/demo/lib/common/drawable/FastBitmapDrawable.java
  com.demo.lib.common.drawable.FastBitmapDrawable
-com/demo/lib/common/okhttp/request/PostStringRequest.java
- com.demo.lib.common.okhttp.request.PostStringRequest
-com/demo/lib/common/content/CursorLoader.java
- com.demo.lib.common.content.CursorLoader
-com/demo/lib/common/dialog/BottomDialog.java
- com.demo.lib.common.dialog.BottomDialog
-com/demo/lib/common/emotion/EmotionEditText.java
- com.demo.lib.common.emotion.EmotionEditText
-com/demo/lib/common/widget/FlowLayout.java
- com.demo.lib.common.widget.FlowLayout
-com/demo/lib/common/widget/ShelfView.java
- com.demo.lib.common.widget.ShelfView
-com/demo/lib/common/util/ui/LoadingDialogUtil.java
- com.demo.lib.common.util.ui.LoadingDialogUtil
 com/demo/lib/common/widget/AdaptiveListView.java
  com.demo.lib.common.widget.AdaptiveListView
-com/demo/lib/common/emotion/EmotionTextView.java
- com.demo.lib.common.emotion.EmotionTextView
-com/demo/lib/common/widget/RatioLayout.java
- com.demo.lib.common.widget.RatioLayout
-com/demo/lib/common/emotion/EmotionGridFragment.java
- com.demo.lib.common.emotion.EmotionGridFragment
- com.demo.lib.common.emotion.EmotionGridFragment$1
- com.demo.lib.common.emotion.EmotionGridFragment$EmotionAdapter
- com.demo.lib.common.emotion.EmotionGridFragment$OnEditListener
-com/demo/lib/common/drawable/SpotlightDrawable.java
- com.demo.lib.common.drawable.SpotlightDrawable
-com/demo/lib/common/util/RefreshLayout.java
- com.demo.lib.common.util.RefreshLayout
- com.demo.lib.common.util.RefreshLayout$OnLoadListener
-com/demo/lib/common/dialog/SlidingDialog.java
- com.demo.lib.common.dialog.SlidingDialog
+com/demo/lib/common/content/CursorLoader.java
+ com.demo.lib.common.content.CursorLoader
+com/demo/lib/common/okhttp/utils/Platform.java
+ com.demo.lib.common.okhttp.utils.Platform
+ com.demo.lib.common.okhttp.utils.Platform$Android
+ com.demo.lib.common.okhttp.utils.Platform$Android$MainThreadExecutor
+com/demo/lib/common/widget/MyViewPager.java
+ com.demo.lib.common.widget.MyViewPager
+com/demo/lib/common/util/common/StringUtils.java
+ com.demo.lib.common.util.common.StringUtils
+com/demo/lib/common/util/PermissionsChecker.java
+ com.demo.lib.common.util.PermissionsChecker
+com/demo/lib/common/entity/ClipCopyContent.java
+ com.demo.lib.common.entity.ClipCopyContent
+com/demo/lib/common/widget/MyGridView.java
+ com.demo.lib.common.widget.MyGridView
+com/demo/lib/common/okhttp/request/PostStringRequest.java
+ com.demo.lib.common.okhttp.request.PostStringRequest
+com/demo/lib/common/okhttp/request/PostFormRequest.java
+ com.demo.lib.common.okhttp.request.PostFormRequest
+ com.demo.lib.common.okhttp.request.PostFormRequest$1
+ com.demo.lib.common.okhttp.request.PostFormRequest$1$1
+com/demo/lib/common/widget/TagCloudLayout.java
+ com.demo.lib.common.widget.TagCloudLayout
+ com.demo.lib.common.widget.TagCloudLayout$FlingRunnable
+ com.demo.lib.common.widget.TagCloudLayout$OnScrollListener
+ com.demo.lib.common.widget.TagCloudLayout$TagView
+com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.java
+ com.demo.lib.common.widget.verticalviewpager.ExtendedWebView
+com/demo/lib/common/okhttp/utils/L.java
+ com.demo.lib.common.okhttp.utils.L
diff --git a/src/main/resources/code/android/library-dp/build.gradle b/src/main/resources/code/android/library-dp/build.gradle
index c531382..705a8a4 100644
--- a/src/main/resources/code/android/library-dp/build.gradle
+++ b/src/main/resources/code/android/library-dp/build.gradle
@@ -31,7 +31,6 @@
     implementation 'androidx.appcompat:appcompat:1.2.0'
     implementation 'com.google.android.material:material:1.3.0'
     implementation project(path: ':library-common')
-    testImplementation 'junit:junit:4.+'
     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
     api project(path: ':library-ad')
diff --git a/src/main/resources/code/android/library-ec/build.gradle b/src/main/resources/code/android/library-ec/build.gradle
index 5ec7ae1..4ce4b57 100644
--- a/src/main/resources/code/android/library-ec/build.gradle
+++ b/src/main/resources/code/android/library-ec/build.gradle
@@ -32,7 +32,7 @@
 
     implementation 'androidx.appcompat:appcompat:1.2.0'
     implementation 'com.google.android.material:material:1.3.0'
-    testImplementation 'junit:junit:4.+'
+    implementation project(path: ':fluwx_no_pay')
     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
 
@@ -71,5 +71,5 @@
     implementation files('libs/JDSDK_h.jar')
 
     api 'com.umeng.umsdk:share-wx:7.1.6' //寰俊瀹屾暣鐗�
-    api 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'//寰俊瀹樻柟渚濊禆搴擄紝蹇呴��
+//    api 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'//寰俊瀹樻柟渚濊禆搴擄紝蹇呴��
 }
\ No newline at end of file
diff --git a/src/main/resources/code/android/library-flutter/build.gradle b/src/main/resources/code/android/library-flutter/build.gradle
index d81fadb..4700f14 100644
--- a/src/main/resources/code/android/library-flutter/build.gradle
+++ b/src/main/resources/code/android/library-flutter/build.gradle
@@ -6,7 +6,6 @@
     compileSdkVersion 31
 
     defaultConfig {
-        applicationId "com.demo.library_flutter"
         minSdkVersion 19
         targetSdkVersion 31
         versionCode 1
@@ -20,9 +19,9 @@
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
-        profile {
-            initWith debug
-        }
+//        profile {
+//            initWith release
+//        }
     }
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
@@ -37,10 +36,10 @@
     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
     implementation project(path: ':library-ad')
     implementation project(path: ':library-common')
-    testImplementation 'junit:junit:4.+'
+
     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
 
-    api project(':flutter')
-    api project(':flutter_boost')
+    api project(path: ':flutter')
+    api project(path: ':flutter_boost')
 }
\ No newline at end of file
diff --git a/src/main/resources/code/android/library-flutter/src/main/AndroidManifest.xml b/src/main/resources/code/android/library-flutter/src/main/AndroidManifest.xml
index 54081ae..c23b0c4 100644
--- a/src/main/resources/code/android/library-flutter/src/main/AndroidManifest.xml
+++ b/src/main/resources/code/android/library-flutter/src/main/AndroidManifest.xml
@@ -2,6 +2,14 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.demo.library_flutter">
 
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
+
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
@@ -11,20 +19,24 @@
         android:theme="@style/Theme.Android">
         <activity
             android:name=".FlutterCommonActivity"
-            android:exported="true">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
+            android:exported="true"></activity>
 
         <activity
             android:name="io.flutter.embedding.android.FlutterActivity"
             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
             android:hardwareAccelerated="true"
-            android:windowSoftInputMode="adjustResize"
-            />
+            android:windowSoftInputMode="adjustResize" />
+
+        <activity
+            android:name="com.idlefish.flutterboost.containers.FlutterBoostActivity"
+            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
+            android:hardwareAccelerated="true"
+            android:windowSoftInputMode="adjustResize" />
+
+        <meta-data
+            android:name="flutterEmbedding"
+            android:value="2"></meta-data>
+
 
     </application>
 
diff --git a/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/FlutterCommonActivity.java b/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/FlutterCommonActivity.java
index cf8a92a..6663296 100644
--- a/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/FlutterCommonActivity.java
+++ b/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/FlutterCommonActivity.java
@@ -1,14 +1,13 @@
 package com.demo.library_flutter;
 
-import androidx.appcompat.app.AppCompatActivity;
-
 import android.os.Bundle;
 
-public class FlutterCommonActivity extends AppCompatActivity {
+import com.idlefish.flutterboost.containers.FlutterBoostActivity;
+
+public class FlutterCommonActivity extends FlutterBoostActivity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_main);
     }
 }
\ No newline at end of file
diff --git a/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/AdMethodChannel.java b/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/AdMethodChannel.java
index 8a2eb8a..870ee05 100644
--- a/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/AdMethodChannel.java
+++ b/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/AdMethodChannel.java
@@ -17,10 +17,11 @@
 import io.flutter.plugin.common.MethodChannel;
 import io.flutter.plugin.common.MethodCodec;
 import io.flutter.plugin.common.StandardMessageCodec;
+import io.flutter.plugin.common.StandardMethodCodec;
 
 public class AdMethodChannel extends MethodChannel {
     public AdMethodChannel(BinaryMessenger messenger, Context context, DataListener dataListener) {
-        super(messenger, "com.yeshi.video/ad", (MethodCodec) StandardMessageCodec.INSTANCE);
+        super(messenger, "com.yeshi.video/ad", StandardMethodCodec.INSTANCE);
         setMethodCallHandler(new MethodCallHandler() {
             @Override
             public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
diff --git a/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/DataMethodChannel.java b/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/DataMethodChannel.java
index cbe1e79..c854e25 100644
--- a/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/DataMethodChannel.java
+++ b/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/DataMethodChannel.java
@@ -14,10 +14,11 @@
 import io.flutter.plugin.common.MethodChannel;
 import io.flutter.plugin.common.MethodCodec;
 import io.flutter.plugin.common.StandardMessageCodec;
+import io.flutter.plugin.common.StandardMethodCodec;
 
 public class DataMethodChannel extends MethodChannel {
     public DataMethodChannel(BinaryMessenger messenger, Context context, DataListener dataListener) {
-        super(messenger, "com.yeshi.video/data", (MethodCodec) StandardMessageCodec.INSTANCE);
+        super(messenger, "com.yeshi.video/data", StandardMethodCodec.INSTANCE);
         setMethodCallHandler(new MethodCallHandler() {
             @Override
             public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
diff --git a/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/UIMethodChannel.java b/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/UIMethodChannel.java
index bc497ac..0d8b68c 100644
--- a/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/UIMethodChannel.java
+++ b/src/main/resources/code/android/library-flutter/src/main/java/com/demo/library_flutter/message/UIMethodChannel.java
@@ -16,10 +16,11 @@
 import io.flutter.plugin.common.MethodChannel;
 import io.flutter.plugin.common.MethodCodec;
 import io.flutter.plugin.common.StandardMessageCodec;
+import io.flutter.plugin.common.StandardMethodCodec;
 
 public class UIMethodChannel extends MethodChannel {
     public UIMethodChannel(BinaryMessenger messenger, Context context, DataListener dataListener) {
-        super(messenger, "com.yeshi.video/ui", (MethodCodec) StandardMessageCodec.INSTANCE);
+        super(messenger, "com.yeshi.video/ui", StandardMethodCodec.INSTANCE);
         setMethodCallHandler(new MethodCallHandler() {
             @Override
             public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
diff --git a/src/main/resources/code/android/library-login/build.gradle b/src/main/resources/code/android/library-login/build.gradle
index 4863343..828393e 100644
--- a/src/main/resources/code/android/library-login/build.gradle
+++ b/src/main/resources/code/android/library-login/build.gradle
@@ -30,7 +30,6 @@
 
     implementation 'androidx.appcompat:appcompat:1.2.0'
     implementation 'com.google.android.material:material:1.3.0'
-    testImplementation 'junit:junit:4.+'
     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
     implementation project(path: ':library-common')
diff --git a/src/main/resources/code/flutter/lib/api/http.dart b/src/main/resources/code/flutter/lib/api/http.dart
index beb274b..b372acb 100644
--- a/src/main/resources/code/flutter/lib/api/http.dart
+++ b/src/main/resources/code/flutter/lib/api/http.dart
@@ -14,6 +14,8 @@
 import '../ui/widget/dialog.dart';
 import '../utils/ui_utils.dart';
 import '../model/common/http_model.dart';
+import 'package:dio/dio.dart';
+import 'package:dio/adapter.dart';
 
 typedef OnHttpRequestFinish = void Function(HttpRequestResult result);
 
@@ -100,42 +102,52 @@
     // params ??= {};
     params = await getBaseParams(params);
 
-    var httpClient = HttpClient();
-    httpClient.connectionTimeout = const Duration(seconds: 20);
-    var uri = Uri(
-        scheme: "http",
-        host: "api.location.izzql.com",
-        path: api,
-        port: 8090,
-        queryParameters: params);
-
-    // var uri = Uri(
-    //     scheme: "http",
-    //     host: "192.168.3.122",
-    //     path: api,
-    //     port: 8082,
-    //     queryParameters: params);
-
-    print("uri:$uri");
-
     if (onStart != null) {
       onStart();
     }
     HttpRequestResult requestResult;
 
     try {
-      HttpClientRequest request = await httpClient.postUrl(uri);
-      var response = await request.close();
+      var dio = Dio()
+        ..options = BaseOptions(
+            baseUrl: "http://api.hanju.goxcw.com:8089/BuWan",
+            connectTimeout: 20000,
+            receiveTimeout: 1000 * 60,
+            contentType: "application/x-www-form-urlencoded");
+      //璁剧疆浠g悊
+      (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
+          (HttpClient client) {
+        client.findProxy = (uri) {
+          return 'PROXY 192.168.3.122:8888';
+        };
+        client.badCertificateCallback =
+            (X509Certificate cert, String host, int port) => true;
+      };
+
+      // FormData formData = FormData.fromMap(params);
+      var response = await dio.post(
+        api,
+        data: params,
+        onSendProgress: (int sent, int total) {
+          print('$sent $total');
+        },
+      );
       if (response.statusCode == HttpStatus.ok) {
-        String result = await response.transform(const Utf8Decoder()).join();
+        String result = response.data.toString();
+        print("缃戠粶璇锋眰缁撴灉:$result");
         requestResult = HttpRequestResult(true, jsonDecode(result));
       } else {
         requestResult = HttpRequestResult(false, null, msg: "缃戠粶璇锋眰澶辫触");
       }
-    } on TimeoutException catch (_) {
-      requestResult = HttpRequestResult(false, null, msg: "缃戠粶璇锋眰瓒呮椂");
-    } on SocketException catch (_) {
-      Fluttertoast.showToast(msg: "缃戠粶璇锋眰鍑洪敊");
+    } on DioError catch (_) {
+      if (_.type == DioErrorType.connectTimeout ||
+          _.type == DioErrorType.receiveTimeout ||
+          _.type == DioErrorType.sendTimeout) {
+        requestResult = HttpRequestResult(false, null, msg: "缃戠粶璇锋眰瓒呮椂");
+      } else {
+        requestResult = HttpRequestResult(false, null, msg: "缃戠粶璇锋眰鍑洪敊");
+      }
+    } catch (e) {
       requestResult = HttpRequestResult(false, null, msg: "缃戠粶璇锋眰鍑洪敊");
     }
     if (notifyError && !requestResult.success) {
diff --git a/src/main/resources/code/flutter/lib/utils/des/crypto_util.dart b/src/main/resources/code/flutter/lib/utils/des/crypto_util.dart
new file mode 100644
index 0000000..9672e32
--- /dev/null
+++ b/src/main/resources/code/flutter/lib/utils/des/crypto_util.dart
@@ -0,0 +1,34 @@
+import 'dart:typed_data';
+
+class CryptoUtil {
+  static List<int>? hex2List(String hexStr) {
+    if (hexStr == null || hexStr.length % 2 != 0) {
+      //鍗佸叚杩涘埗瀛楃涓查敊璇�
+      return null;
+    }
+
+    if (hexStr.startsWith('0x')) {
+      hexStr = hexStr.substring(2);
+    }
+    List<int> result = List.filled(hexStr.length ~/ 2,0);
+    String temp = '0123456789ABCDEF';
+    for (int i = 0; i < hexStr.length; i += 2) {
+      int h = temp.indexOf(hexStr.substring(i, i + 1));
+      int l = temp.indexOf(hexStr.substring(i + 1, i + 2));
+      result[i ~/ 2] = (h * 16 + l);
+    }
+    return result;
+  }
+
+  static String list2Hex(List<int> list) {
+    List<String> results =  List.filled(list.length * 2,"");
+    String temp = '0123456789ABCDEF';
+    for (int i = 0; i < list.length; i++) {
+      int h = list[i] ~/ 16;
+      int l = list[i] % 16;
+      results[i * 2] = temp.substring(h, h + 1);
+      results[i * 2 + 1] = temp.substring(l, l + 1);
+    }
+    return results.join();
+  }
+}
diff --git a/src/main/resources/code/flutter/lib/utils/des/des.dart b/src/main/resources/code/flutter/lib/utils/des/des.dart
new file mode 100644
index 0000000..6b590fc
--- /dev/null
+++ b/src/main/resources/code/flutter/lib/utils/des/des.dart
@@ -0,0 +1,415 @@
+import 'dart:convert';
+import 'dart:typed_data';
+
+import 'crypto_util.dart';
+import 'number_utils.dart';
+import 'padding.dart';
+
+/// author: karedem
+/// 鍙傝�冭嚦: https://blog.csdn.net/yxtxiaotian/article/details/52025653
+/// 浠ュ強 https://www.cnblogs.com/songwenlong/p/5944139.html
+///
+class DES {
+  static const String _iv = '01234567';
+  static const BLOCK_SIZE = 8;
+  List<List<int>>? dispareKeys;
+  static const E_box = [
+    //E
+    32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9,
+    8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17,
+    16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25,
+    24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1
+  ];
+
+  static const IP = [
+    //IP
+    58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
+    62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
+    57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
+    61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
+  ];
+
+  static const IP_1 = [
+    //IP_R
+    40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,
+    38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,
+    36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27,
+    34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25
+  ];
+
+  static const PC_1 = [
+    //PC_1
+    57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,
+    10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
+    63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,
+    14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
+  ];
+
+  static const PC_2 = [
+    //PC_2
+    14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
+    23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
+    41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
+    44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32
+  ];
+
+  static const S_Box = [
+    [
+      // S1
+      14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
+      0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
+      4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
+      15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13
+    ],
+    [
+      //S2
+      15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
+      3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
+      0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
+      13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9
+    ],
+    [
+      //S3
+      10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
+      13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
+      13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
+      1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12
+    ],
+    [
+      //S4
+      7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
+      13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
+      10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
+      3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14
+    ],
+    [
+      //S5
+      2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
+      14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
+      4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
+      11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3
+    ],
+    [
+      //S6
+      12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
+      10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
+      9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
+      4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13
+    ],
+    [
+      //S7
+      4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
+      13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
+      1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
+      6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12
+    ],
+    [
+      //S8
+      13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
+      1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
+      7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
+      2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11
+    ]
+  ];
+
+  static const P_Box = [
+    //P_box
+    16, 7, 20, 21,
+    29, 12, 28, 17,
+    1, 15, 23, 26,
+    5, 18, 31, 10,
+    2, 8, 24, 14,
+    32, 27, 3, 9,
+    19, 13, 30, 6,
+    22, 11, 4, 25
+  ];
+
+  static const shift_digit = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1];
+
+  ///灏�64瀛楄妭鐨勫瘑閽ュ帇缂╂垚56瀛楄妭  瀛楄妭鏁扮粍杞负浜岃繘鍒舵暟缁�
+  List<int> _compressKeyTo56(List<int> key) {
+    List<int> bitKey = List.filled(56,0);
+    for (int i = 0; i < 56; i++) {
+      int realIndex = PC_1[i] - 1;
+      bitKey[i] = (key[realIndex >> 3] >> (7 - realIndex & 7)) & 1;
+    }
+    return bitKey;
+  }
+
+  ///绂绘暎寰楀埌16涓瓙瀵嗛挜
+  List<List<int>> dispareKey(List<int> compressKey) {
+    List<List<int>> dispareKeys = List.filled(16,[]);
+    List<int> c0 = compressKey.sublist(0, 28);
+    List<int> d0 = compressKey.sublist(28);
+    List<int> tempc = c0;
+    List<int> tempd = d0;
+    for (int i = 0; i < 16; i++) {
+      tempc = left_shift(i, tempc);
+      tempd = left_shift(i, tempd);
+      List<int> tempAll = [];
+      tempAll.addAll(tempc);
+      tempAll.addAll(tempd);
+
+      List<int> dispareKey = compressDispareKey(tempAll);
+      dispareKeys[i] = dispareKey;
+    }
+    return dispareKeys;
+  }
+
+  ///宸︾Щ鍑芥暟  闇�瑕佹牴鎹鏁� 宸︾Щ
+  static List<int> left_shift(int times, List<int> key) {
+    ///闇�绉诲姩鐨勪綅鏁�
+    int shift_length = shift_digit[times];
+    List<int> newList = key.sublist(shift_length);
+    newList.addAll(key.sublist(0, shift_length));
+    return newList;
+  }
+
+  ///灏�56浣嶇殑瀵嗛挜鍘嬬缉涓�48浣� 浜岃繘鍒舵暟缁� 澶勭悊
+  List<int> compressDispareKey(List<int> dispareKey) {
+    List<int> bitKey = List.filled(48,0);
+    for (int i = 0; i < 48; i++) {
+      int realIndex = PC_2[i] - 1;
+      bitKey[i] = dispareKey[realIndex];
+    }
+    return bitKey;
+  }
+
+  //01001  9  1111 1111 >> 6
+
+  ///鏄庢枃杞崲  瀛楄妭鏁扮粍杞簩杩涘埗鏁扮粍
+  List<int> compressPlain(List<int> plain) {
+    List<int> bitKey = List.filled(64,0);
+    for (int i = 0; i < 64; i++) {
+      int realIndex = IP[i] - 1;
+      bitKey[i] = (plain[realIndex >> 3] >> (7 - realIndex & 7)) & 1;
+    }
+    return bitKey;
+  }
+
+  ///E鐩掓墿灞�
+  List<int> E_transform(List<int> list) {
+    ///宸﹀崐閮ㄥ垎涓� L0  鍙冲崐閮ㄥ垎涓篟0
+    //print("before E transform : " + list.toString());
+    List<int> result = List.filled(48,0);
+    for (int i = 0; i < 48; i++) {
+      result[i] = list[E_box[i] - 1];
+    }
+    //print("after E transform : " + result.toString());
+    return result;
+  }
+
+  ///P鐩掔疆鎹�
+  List<int> P_transform(List<int> list) {
+    List<int> bitKey = List.filled(32,0);
+    for (int i = 0; i < 32; i++) {
+      int realIndex = P_Box[i] - 1;
+      bitKey[i] = list[realIndex];
+    }
+    return bitKey;
+  }
+
+  ///S鐩掑彉鎹� 浜岃繘鍒剁粨鏋�
+  List<int> _S_Box_transform(List<int> list) {
+    ///check list length 48
+    List<int> result = List.filled(32,0);
+    for (int i = 0; i < list.length; i += 6) {
+      int x = (list[i + 1] << 3 |
+          list[i + 2] << 2 |
+          list[i + 3] << 1 |
+          list[i + 4]);
+      int y = (list[i] << 1 | list[i + 5]);
+      int i_n = S_Box[i ~/ 6][(y << 4) + x];
+      result[(i << 1) ~/ 3] = (i_n >> 3) & 1;
+      result[(i << 1) ~/ 3 + 1] = (i_n >> 2) & 1;
+      result[(i << 1) ~/ 3 + 2] = (i_n >> 1) & 1;
+      result[(i << 1) ~/ 3 + 3] = i_n & 1;
+    }
+    //print('before S box : ${list.toString()}');
+    //print('after S box : ${result.toString()}');
+    return result;
+  }
+
+  ///寮傛垨
+  List<int> _XOR_with_Left(List<int> left, List<int> presult) {
+    List<int> result = List.filled(left.length,0);
+    for (int i = 0; i < left.length; i++) {
+      result[i] = left[i] ^ presult[i];
+    }
+    return result;
+  }
+
+  ///IP_1缃崲
+  List<int> _IP_1_transform(List<int> list) {
+    ///check list length 48
+    List<int> bitKey = List.filled(64,0);
+    for (int i = 0; i < 64; i++) {
+      int realIndex = IP_1[i] - 1;
+      bitKey[i] = list[realIndex];
+    }
+    return bitKey;
+  }
+
+  void initKey(List<int> key) {
+    if (dispareKeys != null) {
+      return;
+    }
+    List<int> pc1_key = _compressKeyTo56(key);
+    dispareKeys = dispareKey(pc1_key);
+  }
+
+  /// ECB鍔犲瘑 鍔犲瘑缁撴灉涓哄崄鍏繘鍒� 榛樿涓篜KCS7濉厖
+  /// plain : 寰呭姞瀵嗘暟鎹� (utf-8)
+  /// hexKey : 鍗佸叚杩涘埗瀵嗛挜
+  String encryptToHexWithECB(String plain, String hexKey) {
+    return CryptoUtil.list2Hex(encrypWithEcb(
+        Utf8Encoder().convert(plain).toList(), CryptoUtil.hex2List(hexKey)!));
+  }
+
+  /// CBC鍔犲瘑 鍔犲瘑缁撴灉涓哄崄鍏繘鍒� 榛樿涓篜KCS7濉厖
+  /// plain : 寰呭姞瀵嗘暟鎹� (utf-8)
+  /// hexKey : 鍗佸叚杩涘埗瀵嗛挜
+  /// iv : 鍚戦噺 (utf-8 榛樿鍊间负_iv)
+  String encryptToHexWithCBC(String plain, String hexKey, {String iv = _iv}) {
+    return CryptoUtil.list2Hex(encryptWithCBC(
+        Utf8Encoder().convert(plain).toList(), CryptoUtil.hex2List(hexKey)!,
+        iv: iv));
+  }
+
+  /// CBC瑙e瘑
+  /// cipher : 寰呰В瀵嗘暟鎹� (鍗佸叚杩涘埗)
+  /// hexKey : 鍗佸叚杩涘埗瀵嗛挜
+  /// iv : 鍚戦噺 (utf-8 榛樿鍊间负_iv)
+  String decryptFromHexWithCBC(String cipher, String hexKey,
+      {String iv = _iv}) {
+    return Utf8Decoder().convert(decryptWithCBC(
+        CryptoUtil.hex2List(cipher)!, CryptoUtil.hex2List(hexKey)!,
+        iv: iv));
+  }
+
+  /// ECB瑙e瘑
+  /// cipher : 寰呰В瀵嗘暟鎹� (鍗佸叚杩涘埗)
+  /// hexKey : 鍗佸叚杩涘埗瀵嗛挜
+  String decryptFromHexWithECB(String cipher, String hexKey,
+      {String iv = _iv}) {
+    return Utf8Decoder().convert(decryptWithEcb(
+        CryptoUtil.hex2List(cipher)!, CryptoUtil.hex2List(hexKey)!));
+  }
+
+  ///鍔犲瘑   鏄庢枃瀛楄妭鏁扮粍  瀵嗛挜瀛楄妭鏁扮粍
+  List<int> _encryptBlock(List<int> block) {
+    ///dispareKey right!
+    //print("block " + block.toString());
+    var plainCompressed = compressPlain(block);
+    //print("plainCompressed " + plainCompressed.toString());
+    List<int> L0 = plainCompressed.sublist(0, 32);
+    List<int> R0 = plainCompressed.sublist(32);
+    List<int> L0Z = L0;
+    List<int> R0Z = R0;
+
+    for (int i = 0; i < 16; i++) {
+      var ln = R0Z;
+      var pResult = P_transform(
+          _S_Box_transform(_XOR_with_Left(dispareKeys![i], E_transform(R0Z))));
+
+      ///P鐩掔疆鎹㈢殑缁撴灉鐩扡0鍋氬紓鎴�
+      var rn = _XOR_with_Left(pResult, L0Z);
+      L0Z = ln;
+      R0Z = rn;
+    }
+    List<int> result = [];
+    result.addAll(R0Z);
+    result.addAll(L0Z);
+    result = _IP_1_transform(result);
+    return NumberUtils.intListFromBits(result);
+  }
+
+  List<int> encryptWithCBC(List<int> plain, List<int> key, {String iv = _iv}) {
+    int allLen = plain.length;
+    int blockCount = allLen >> 3;
+    List<int> padPlain = plain.sublist(0, blockCount << 3);
+    padPlain.addAll(Padding.pkcs7Padding(plain.sublist(blockCount << 3)));
+    //List<int> blockCipher = List(padPlain.length);
+    List<int> blockCipher = [];
+    List<int> tempIv = iv.codeUnits;
+    initKey(key);
+    for (int i = 0; i < padPlain.length; i += BLOCK_SIZE) {
+      List<int> xorPlain =
+          _XOR_with_Left(padPlain.sublist(i, i + BLOCK_SIZE), tempIv);
+      tempIv = _encryptBlock(xorPlain);
+      blockCipher.addAll(tempIv);
+    }
+    return blockCipher;
+  }
+
+  List<int> decryptWithCBC(List<int> cipher, List<int> key, {String iv = _iv}) {
+    List<int> plain = [];
+    List<int> tempIv = iv.codeUnits;
+    initKey(key);
+    for (int i = 0; i < cipher.length; i += BLOCK_SIZE) {
+      if (i == cipher.length - BLOCK_SIZE) {
+        List<int> plainXor = decryptBlock(cipher.sublist(i, i + BLOCK_SIZE));
+        List<int> plainBlock =
+            Padding.pkcs7UnPadding(_XOR_with_Left(plainXor, tempIv));
+        tempIv = cipher.sublist(i, i + BLOCK_SIZE);
+        plain.addAll(plainBlock);
+      } else {
+        List<int> plainXor = decryptBlock(cipher.sublist(i, i + BLOCK_SIZE));
+        List<int> plainBlock = _XOR_with_Left(plainXor, tempIv);
+        tempIv = cipher.sublist(i, i + BLOCK_SIZE);
+        plain.addAll(plainBlock);
+      }
+    }
+    return plain;
+  }
+
+  ///鍔犲瘑   鏄庢枃瀛楄妭鏁扮粍  瀵嗛挜瀛楄妭鏁扮粍
+  List<int> encrypWithEcb(List<int> plain, List<int> key) {
+    List<int> blockCipher = [];
+    int allLen = plain.length;
+    int blockCount = allLen >> 3;
+    List<int> padPlain = plain.sublist(0, blockCount << 3).toList();
+    padPlain.addAll(Padding.pkcs7Padding(plain.sublist(blockCount << 3)));
+    initKey(key);
+    for (int i = 0; i < padPlain.length; i += BLOCK_SIZE) {
+      blockCipher.addAll(_encryptBlock(padPlain.sublist(i, i + BLOCK_SIZE)));
+    }
+    return blockCipher;
+  }
+
+  List<int> decryptBlock(List<int> cipher) {
+    var plainCompressed = compressPlain(cipher);
+    List<int> L0 = plainCompressed.sublist(0, plainCompressed.length >> 1);
+    List<int> R0 = plainCompressed.sublist(plainCompressed.length >> 1);
+    List<int> L0Z = L0;
+    List<int> R0Z = R0;
+    for (int i = 0; i < 16; i++) {
+      var ln = R0Z;
+      var pResult = P_transform(_S_Box_transform(
+          _XOR_with_Left(dispareKeys![15 - i], E_transform(R0Z))));
+      var rn = _XOR_with_Left(pResult, L0Z);
+      L0Z = ln;
+      R0Z = rn;
+    }
+    List<int> result = [];
+    result.addAll(R0Z);
+    result.addAll(L0Z);
+    result = _IP_1_transform(result);
+    return NumberUtils.intListFromBits(result);
+  }
+
+  ///鏀寔闀挎暟鎹В瀵�
+  List<int> decryptWithEcb(List<int> cipher, List<int> key) {
+    List<int> plain = [];
+    initKey(key);
+    for (int i = 0; i < cipher.length; i += BLOCK_SIZE) {
+      if (i == cipher.length - BLOCK_SIZE) {
+        plain.addAll(Padding.pkcs7UnPadding(
+            decryptBlock(cipher.sublist(i, i + BLOCK_SIZE))));
+      } else {
+        plain.addAll(decryptBlock(cipher.sublist(i, i + BLOCK_SIZE)));
+      }
+    }
+    return plain;
+  }
+}
diff --git a/src/main/resources/code/flutter/lib/utils/des/number_utils.dart b/src/main/resources/code/flutter/lib/utils/des/number_utils.dart
new file mode 100644
index 0000000..4ef5b41
--- /dev/null
+++ b/src/main/resources/code/flutter/lib/utils/des/number_utils.dart
@@ -0,0 +1,95 @@
+import 'dart:math';
+
+class NumberUtils {
+  ///浜岃繘鍒舵暟缁勮浆瀛楄妭鏁扮粍
+  static List<int> intListFromBits(List<int> bits) {
+    //print("${bits.toString()} ${bits.length ~/ 8}");
+    List<int> result = List.generate(bits.length >> 3, (index) => 0);
+    for (int i = 0; i < bits.length; i++) {
+      result[i >> 3] |= (bits[i] << (7 - i & 7));
+    }
+    return result;
+  }
+
+  ///瀛楄妭鏁扮粍杞簩杩涘埗鏁扮粍
+  static List<int> bitsFromIntList(List<int> ints) {
+    List<int> result = List.filled(ints.length << 3,0);
+    for (int i = 0; i < (ints.length << 3); ++i) {
+      result[i] = (ints[i >> 3] >> (7 - i & 7)) & 1;
+    }
+    return result;
+//    List<int> result = [];
+//    ints.forEach((i) {
+//      result.addAll(to8Bit(i));
+//    });
+//    return result;
+  }
+
+  ///浜岃繘鍒跺瓧绗︿覆杞暟瀛�
+  static int intFromBits(List<int> bits) {
+    //return int.parse(bits.join(), radix: 2);
+    int result = 0;
+    for (int i = 0; i < bits.length; i++) {
+      result |= (bits[i] << (7 - i & 7));
+    }
+    return result;
+  }
+
+  ///to8Bit  01100100
+  static List<int> t8Bit(List<int> bytes) {
+    List<int> result = List.filled(8 * bytes.length,0);
+    for (int i = 0; i < 8 * bytes.length; ++i) {
+      result[i] = (bytes[i >> 3] >> (7 - i & 7)) & 1;
+    }
+    return result;
+  }
+
+  /// 4 -> 00000100
+  static List<int> to8Bit(int num) {
+    List<int> result = List.filled(8,0);
+    for (int i = 0; i < 8; i++) {
+      result[i] = (num >> (7 - i & 7)) & 1;
+    }
+    return result;
+
+    String temp = num.toRadixString(2);
+    int zeroLen = 8 - temp.length;
+    for (int i = 0; i < 8; i++) {
+      if (i < zeroLen) {
+        result[i] = 0;
+      } else {
+        result[i] = (temp.codeUnitAt(i - zeroLen) - 48);
+      }
+    }
+    return result;
+  }
+
+  /// 4 -> 0100
+  static List<int> to4Bit(int num) {
+    List<int> result = List.filled(4,0);
+    for (int i = 0; i < 4; i++) {
+      result[i] = (num >> (3 - i & 3)) & 1;
+    }
+    return result;
+
+    String temp = num.toRadixString(2);
+    temp.codeUnits.forEach((code) {
+      result.add(code - 48);
+    });
+    int len = result.length;
+    if (len < 4) {
+      result.insertAll(0, List.generate(4, (index) => 0).sublist(len));
+    }
+    return result;
+  }
+
+  static String formatSeeds(int seeds) {
+    if (seeds > 9999) {
+      return '${(seeds / 10000.0).toStringAsFixed(1)}w';
+    } else if (seeds > 999) {
+      return '${(seeds / 1000.0).toStringAsFixed(1)}k';
+    } else {
+      return '$seeds';
+    }
+  }
+}
diff --git a/src/main/resources/code/flutter/lib/utils/des/padding.dart b/src/main/resources/code/flutter/lib/utils/des/padding.dart
new file mode 100644
index 0000000..6bb4052
--- /dev/null
+++ b/src/main/resources/code/flutter/lib/utils/des/padding.dart
@@ -0,0 +1,19 @@
+class Padding {
+  static List<int> pkcs7Padding(List<int> data) {
+    int fillLen = 8 - data.length % 8;
+    List<int> padDate = data.toList();
+    for (int i = 0; i < fillLen; i++) {
+      padDate.add(fillLen);
+    }
+    return padDate;
+  }
+
+  static List<int> pkcs7UnPadding(List<int> padData) {
+    int fillLen = padData.last;
+    if (fillLen < 0 || fillLen > 8) {
+      return padData;
+    }
+    List<int> data = padData.sublist(0, padData.length - fillLen);
+    return data;
+  }
+}
diff --git a/src/main/resources/code/flutter/lib/utils/image_util.dart b/src/main/resources/code/flutter/lib/utils/image_util.dart
new file mode 100644
index 0000000..dba0b0c
--- /dev/null
+++ b/src/main/resources/code/flutter/lib/utils/image_util.dart
@@ -0,0 +1,36 @@
+//鍥剧墖宸ュ叿
+import 'package:flutter/material.dart';
+import 'package:hanju/utils/ui_constant.dart';
+import 'package:image_cropper/image_cropper.dart';
+import 'dart:io';
+import 'package:image_picker/image_picker.dart';
+
+class ImageUtil{
+
+  //閫夋嫨骞惰鍓浘鐗�
+  static Future<File?> selectAndCropImage() async{
+    final ImagePicker _picker = ImagePicker();
+    final XFile? image = await _picker.pickImage(source: ImageSource.gallery);
+    ImageCropper cropper=ImageCropper();
+    File? croppedFile = await cropper.cropImage(
+        cropStyle:CropStyle.circle,
+        sourcePath: image!.path,
+        aspectRatioPresets: [
+          CropAspectRatioPreset.square
+        ],
+        androidUiSettings: const AndroidUiSettings(
+            toolbarTitle: 'Cropper',
+            toolbarColor: ColorConstant.theme,
+            toolbarWidgetColor: Colors.white,
+            initAspectRatio: CropAspectRatioPreset.square,
+            lockAspectRatio: true),
+        iosUiSettings: const IOSUiSettings(
+          minimumAspectRatio: 1.0,
+        )
+    );
+    return croppedFile;
+  }
+
+
+
+}
\ No newline at end of file
diff --git a/src/main/resources/code/flutter/lib/utils/sqlite_utils.dart b/src/main/resources/code/flutter/lib/utils/sqlite_utils.dart
new file mode 100644
index 0000000..78bded3
--- /dev/null
+++ b/src/main/resources/code/flutter/lib/utils/sqlite_utils.dart
@@ -0,0 +1,68 @@
+import 'package:sqflite/sqflite.dart';
+import 'package:path_provider/path_provider.dart';
+import 'dart:io';
+
+class SQLiteUtil {
+  static const String DB_NAME = "hanju.db";
+
+  static Future<Database> _getDB() async {
+    var path = await getDatabasesPath() + "/$DB_NAME";
+    print("databasepath:$path");
+    Database database = await openDatabase(path, version: 1,
+        onCreate: (Database db, int version) async {
+      // TODO
+      List<String> tables =[];
+      for (var i = 0; i < tables.length; i++) {
+        await db.execute(tables[i]);
+      }
+    });
+    return database;
+  }
+
+  static Future executeSQL(String sql) async {
+    var db = await openDatabase("");
+    await db.execute(sql);
+    await db.close();
+  }
+
+  static Future executeSQLWithParams(String sql, List params) async {
+    var db = await _getDB();
+    await db.execute(sql, params);
+    await db.close();
+  }
+
+  static Future executeSQLs(List<String> sqls) async {
+    var db = await _getDB();
+    for (var i = 0; i < sqls.length; i++) {
+      await db.execute(sqls[i]);
+    }
+    await db.close();
+  }
+
+  ///鎵归噺鎻掑叆
+  ///sql绀轰緥锛欼NSERT INTO artists (name) VALUES (?)
+  static Future insert(String sql, List<List> list) async {
+    var db = await _getDB();
+    await db.transaction((txn) async {
+      for (var i = 0; i < list.length; i++) {
+        await txn.rawInsert(sql, list[i]);
+      }
+    });
+    await db.close();
+  }
+
+  ///鏌ヨ
+  static Future<List<Map>> select(String sql, List params) async {
+    var db = await _getDB();
+    List<Map> list = await db.rawQuery(sql, params);
+    await db.close();
+    return list;
+  }
+
+  static Future<int> count(String sql, List params) async {
+    var db = await _getDB();
+    int? count = Sqflite.firstIntValue(await db.rawQuery(sql, params));
+    await db.close();
+    return count!;
+  }
+}
diff --git a/src/main/resources/code/flutter/lib/utils/string_util.dart b/src/main/resources/code/flutter/lib/utils/string_util.dart
index a40a7a7..0c1560f 100644
--- a/src/main/resources/code/flutter/lib/utils/string_util.dart
+++ b/src/main/resources/code/flutter/lib/utils/string_util.dart
@@ -6,6 +6,12 @@
         .hasMatch(str);
   }
 
+  static bool isEmail(String str) {
+    return RegExp(
+        '^(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w+)+)\$')
+        .hasMatch(str);
+  }
+
   static bool isNullOrEmpty(String? str) {
     return str==null|| str.isEmpty || str.trim().isEmpty;
   }
diff --git a/src/main/resources/code/flutter/pubspec.lock b/src/main/resources/code/flutter/pubspec.lock
index df6225e..fb1d087 100644
--- a/src/main/resources/code/flutter/pubspec.lock
+++ b/src/main/resources/code/flutter/pubspec.lock
@@ -15,6 +15,27 @@
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.0"
+  cached_network_image:
+    dependency: "direct dev"
+    description:
+      name: cached_network_image
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.2.0"
+  cached_network_image_platform_interface:
+    dependency: transitive
+    description:
+      name: cached_network_image_platform_interface
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.0.0"
+  cached_network_image_web:
+    dependency: transitive
+    description:
+      name: cached_network_image_web
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.0.1"
   characters:
     dependency: transitive
     description:
@@ -43,6 +64,13 @@
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.15.0"
+  cross_file:
+    dependency: transitive
+    description:
+      name: cross_file
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.3.2"
   crypto:
     dependency: "direct dev"
     description:
@@ -125,6 +153,20 @@
     description: flutter
     source: sdk
     version: "0.0.0"
+  flutter_blurhash:
+    dependency: transitive
+    description:
+      name: flutter_blurhash
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.6.4"
+  flutter_cache_manager:
+    dependency: transitive
+    description:
+      name: flutter_cache_manager
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.3.0"
   flutter_datetime_picker:
     dependency: "direct dev"
     description:
@@ -146,6 +188,13 @@
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.0.3"
+  flutter_plugin_android_lifecycle:
+    dependency: transitive
+    description:
+      name: flutter_plugin_android_lifecycle
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.5"
   flutter_spinkit:
     dependency: "direct dev"
     description:
@@ -160,6 +209,13 @@
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.1.6"
+  flutter_swiper_null_safety:
+    dependency: "direct dev"
+    description:
+      name: flutter_swiper_null_safety
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.0.2"
   flutter_tencentad:
     dependency: "direct dev"
     description:
@@ -219,6 +275,13 @@
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.15.0"
+  http:
+    dependency: transitive
+    description:
+      name: http
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.13.4"
   http_parser:
     dependency: transitive
     description:
@@ -226,6 +289,41 @@
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "4.0.0"
+  image_cropper:
+    dependency: "direct dev"
+    description:
+      name: image_cropper
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.5.0"
+  image_gallery_saver:
+    dependency: "direct dev"
+    description:
+      name: image_gallery_saver
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.7.1"
+  image_picker:
+    dependency: "direct dev"
+    description:
+      name: image_picker
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.8.4+11"
+  image_picker_for_web:
+    dependency: transitive
+    description:
+      name: image_picker_for_web
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.1.6"
+  image_picker_platform_interface:
+    dependency: transitive
+    description:
+      name: image_picker_platform_interface
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.4.4"
   jpush_flutter:
     dependency: "direct dev"
     description:
@@ -272,6 +370,13 @@
     dependency: transitive
     description:
       name: mime
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.0.1"
+  octo_image:
+    dependency: transitive
+    description:
+      name: octo_image
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.0.1"
@@ -338,6 +443,13 @@
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.5"
+  pedantic:
+    dependency: transitive
+    description:
+      name: pedantic
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.11.1"
   permission_handler:
     dependency: "direct dev"
     description:
@@ -394,6 +506,13 @@
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "4.0.0"
+  rxdart:
+    dependency: transitive
+    description:
+      name: rxdart
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.27.3"
   screenshot:
     dependency: "direct dev"
     description:
@@ -637,6 +756,13 @@
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.2"
+  uuid:
+    dependency: transitive
+    description:
+      name: uuid
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.0.6"
   vector_math:
     dependency: transitive
     description:
diff --git a/src/main/resources/code/flutter/pubspec.yaml b/src/main/resources/code/flutter/pubspec.yaml
index bdffb91..b97c460 100644
--- a/src/main/resources/code/flutter/pubspec.yaml
+++ b/src/main/resources/code/flutter/pubspec.yaml
@@ -51,12 +51,13 @@
 
   shared_preferences: ^2.0.8
 
-  sqflite: ^2.0.0+3
-
   dio: ^4.0.0
 
   #杞挱鍥炬彃浠�
   flutter_swiper: ^1.1.6
+
+  #杞挱鍥炬彃浠�
+  flutter_swiper_null_safety: ^1.0.2
 
   fluttertoast: ^8.0.8
 
@@ -107,6 +108,19 @@
   #鎴浘鎻掍欢
   screenshot: ^1.2.3
 
+  #缃戠粶鍥剧墖鍔犺浇妗嗘灦
+  cached_network_image: ^3.2.0
+
+  #鍥剧墖閫夋嫨
+  image_picker: ^0.8.4+9
+  #鍥剧墖瑁佸壀
+  image_cropper: ^1.5.0
+
+  sqflite: ^2.0.2
+
+  #淇濆瓨鍥剧墖鍒扮浉鍐�
+  image_gallery_saver: ^1.7.1
+
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/src/main/resources/code/flutter_module/lib/main.dart b/src/main/resources/code/flutter_module/lib/main.dart
index 358c6ce..4f939d7 100644
--- a/src/main/resources/code/flutter_module/lib/main.dart
+++ b/src/main/resources/code/flutter_module/lib/main.dart
@@ -1,112 +1,371 @@
+import 'dart:convert';
+
+import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_boost/flutter_boost.dart';
 
-void main() => runApp(const MyApp());
+import '../../home.dart';
+import '../../model/video/video_model.dart';
+import '../../ui/common/browser.dart';
+import '../../ui/demo_page.dart';
+import '../../ui/mine/email_login.dart';
+import '../../ui/mine/login.dart';
+import '../../ui/mine/person_info.dart';
+import '../../ui/mine/settings.dart';
+import '../../ui/video/video_collected_list.dart';
+import '../../ui/video/video_detail.dart';
+import '../../ui/video/video_list.dart';
+import '../../ui/video/video_scan_record_list.dart';
+import 'mine.dart';
+import 'ui/mine/about_us.dart';
+import 'ui/mine/advice.dart';
+import 'ui/search/search.dart';
+import 'ui/video/video_attention_list.dart';
+import 'ui/video/video_download_list.dart';
+import 'ui/video/video_player_browser.dart';
 
-class MyApp extends StatelessWidget {
-  const MyApp({Key? key}) : super(key: key);
+// void main() {
+//   runApp(getBasePage(
+//     AboutUsPage(title: ""),
+//   ));
+// }
 
-  // This widget is the root of your application.
+void main() {
+  ///娣诲姞鍏ㄥ眬鐢熷懡鍛ㄦ湡鐩戝惉绫�
+  PageVisibilityBinding.instance.addGlobalObserver(AppLifecycleObserver());
+  CustomFlutterBinding();
+  //window.defaultRouteName
+  runApp(MyApp());
+}
+
+class CustomFlutterBinding extends WidgetsFlutterBinding
+    with BoostFlutterBinding {}
+
+class MyApp extends StatefulWidget {
   @override
-  Widget build(BuildContext context) {
+  _MyAppState createState() => _MyAppState();
+}
+
+class _MyAppState extends State<MyApp> {
+  /// 鐢变簬寰堝鍚屽璇存病鏈夎烦杞姩鐢伙紝杩欓噷鏄洜涓轰箣鍓峞xmaple閲岄潰鐢ㄧ殑鏄� [PageRouteBuilder]锛�
+  /// 鍏跺疄杩欓噷鏄彲浠ヨ嚜瀹氫箟鐨勶紝鍜孊oost娌″お澶氬叧绯伙紝姣斿鎴戞兂鐢ㄧ被浼糹OS骞冲彴鐨勫姩鐢伙紝
+  /// 閭d箞鍙渶瑕佸儚涓嬮潰杩欐牱鍐欐垚 [CupertinoPageRoute] 鍗冲彲
+  /// (杩欓噷鍏ㄥ啓鎴怺MaterialPageRoute]涔熻锛岃繖閲屽彧涓嶈繃鐢╗CupertinoPageRoute]涓句緥瀛�)
+  ///
+  /// 娉ㄦ剰锛屽鏋滈渶瑕乸ush鐨勬椂鍊欙紝涓や釜椤甸潰閮介渶瑕佸姩鐨勮瘽锛�
+  /// 锛堝氨鏄儚iOS native閭f牱锛屽湪push鐨勬椂鍊欙紝鍓嶉潰涓�涓〉闈篃浼氬悜宸︽帹涓�娈佃窛绂伙級
+  /// 閭d箞鍓嶅悗涓や釜椤甸潰閮藉繀椤绘槸閬靛惊CupertinoRouteTransitionMixin鐨勮矾鐢�
+  /// 绠�鍗曟潵璇达紝灏变袱涓〉闈㈤兘鏄疌upertinoPageRoute灏卞ソ
+  /// 濡傛灉鐢∕aterialPageRoute鐨勮瘽鍚岀悊
+  static Route<dynamic>? _getSimpleRoute(
+      RouteSettings settings, String? uniqueId, Widget page) {
+    return CupertinoPageRoute(
+        settings: settings,
+        builder: (_) {
+          return page;
+        });
+  }
+
+  Map<String, FlutterBoostRouteFactory> routerMap = {
+    '/': (RouteSettings settings, String? uniqueId) {
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            // Map<String, Object> map = settings.arguments as Map<String, Object> ;
+            // String data = map['data'] as String;
+            return HomePage(
+              title: "",
+            );
+          });
+    },
+    'home': (RouteSettings settings, String? uniqueId) {
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            // Map<String, Object> map = settings.arguments as Map<String, Object> ;
+            // String data = map['data'] as String;
+            return HomePage(
+              title: "",
+            );
+          });
+    },
+    'mine': (RouteSettings settings, String? uniqueId) {
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            return MinePage(
+              title: "",
+            );
+          });
+    },
+    'VideoDetailPage': (RouteSettings settings, String? uniqueId) {
+      if (settings.arguments == null) {
+        return null;
+      }
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            Map<String, dynamic> params =
+                settings.arguments as Map<String, dynamic>;
+            int position = params["position"] ?? 0;
+            return VideoDetailPage(
+              videoInfo: VideoInfoModel.fromJson(params["video"]),
+              position: position,
+            );
+          });
+    },
+    'VideoCollectedPage': (RouteSettings settings, String? uniqueId) {
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            return VideoCollectedPage(
+              title: "",
+            );
+          });
+    },
+    'VideoAttentionPage': (RouteSettings settings, String? uniqueId) {
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            return VideoAttentionPage(
+              title: "",
+            );
+          });
+    },
+    'VideoScanRecordPage': (RouteSettings settings, String? uniqueId) {
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            return VideoScanRecordPage(
+              title: "",
+            );
+          });
+    },
+    'VideoDownloadPage': (RouteSettings settings, String? uniqueId) {
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            return VideoDownloadPage(
+              title: "",
+            );
+          });
+    },
+    "PersonInfoPage": (RouteSettings settings, String? uniqueId) {
+      return _getSimpleRoute(settings, uniqueId, PersonInfoPage(title: ""));
+    },
+    "SettingPage": (RouteSettings settings, String? uniqueId) {
+      return _getSimpleRoute(settings, uniqueId, SettingPage(title: ""));
+    },
+    "EmailLoginPage": (RouteSettings settings, String? uniqueId) {
+      return _getSimpleRoute(settings, uniqueId, EmailLoginPage(title: ""));
+    },
+    "LoginPage": (RouteSettings settings, String? uniqueId) {
+      return _getSimpleRoute(settings, uniqueId, LoginPage(title: ""));
+    },
+    "AdvicePage": (RouteSettings settings, String? uniqueId) {
+      return _getSimpleRoute(settings, uniqueId, AdvicePage(title: ""));
+    },
+    "AboutUsPage": (RouteSettings settings, String? uniqueId) {
+      return _getSimpleRoute(settings, uniqueId, AboutUsPage(title: ""));
+    },
+    'SearchPage': (RouteSettings settings, String? uniqueId) {
+      if (settings.arguments == null) {
+        return null;
+      }
+      Map<String, dynamic> params = settings.arguments as Map<String, dynamic>;
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            return SearchPage(
+              title: params["title"] ?? "",
+            );
+          });
+    },
+    'VideoListPage': (RouteSettings settings, String? uniqueId) {
+      if (settings.arguments == null) {
+        return null;
+      }
+      Map<String, dynamic> params = settings.arguments as Map<String, dynamic>;
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            String kw = params["kw"]!;
+            String title = params["title"] ?? "";
+            return VideoListPage(
+              title: title,
+              kw: kw,
+            );
+          });
+    },
+    'BrowserPage': (RouteSettings settings, String? uniqueId) {
+      if (settings.arguments == null) {
+        return null;
+      }
+      Map<String, dynamic> params = settings.arguments as Map<String, dynamic>;
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            String title = params["title"] ?? "";
+            return BrowserPage(title: title, url: params["url"]);
+          });
+    },
+    'VideoPlayerWebPage': (RouteSettings settings, String? uniqueId) {
+      if (settings.arguments == null) {
+        return null;
+      }
+      Map<String, dynamic> params = settings.arguments as Map<String, dynamic>;
+      return CupertinoPageRoute(
+          settings: settings,
+          builder: (_) {
+            String title = params["title"] ?? "";
+            return VideoPlayerWebPage(title: title, url: params["url"]);
+          });
+    },
+  };
+
+  Route<dynamic>? routeFactory(RouteSettings settings, String? uniqueId) {
+    print("璺敱鏋勯��:${settings}");
+    FlutterBoostRouteFactory? func = routerMap[settings.name!];
+    if (func == null) {
+      return null;
+    }
+    return func(settings, uniqueId);
+  }
+
+  Widget appBuilder(Widget home) {
     return MaterialApp(
-      title: 'Flutter Demo',
-      theme: ThemeData(
-        // This is the theme of your application.
-        //
-        // Try running your application with "flutter run". You'll see the
-        // application has a blue toolbar. Then, without quitting the app, try
-        // changing the primarySwatch below to Colors.green and then invoke
-        // "hot reload" (press "r" in the console where you ran "flutter run",
-        // or press Run > Flutter Hot Reload in a Flutter IDE). Notice that the
-        // counter didn't reset back to zero; the application is not restarted.
-        primarySwatch: Colors.blue,
-      ),
-      home: const MyHomePage(title: 'Flutter Demo Home Page'),
+      home: home,
+      debugShowCheckedModeBanner: true,
+
+      ///蹇呴』鍔犱笂builder鍙傛暟锛屽惁鍒檚howDialog绛変細鍑洪棶棰�
+      builder: (_, __) {
+        return home;
+      },
     );
   }
-}
-
-class MyHomePage extends StatefulWidget {
-  const MyHomePage({Key? key, required this.title}) : super(key: key);
-
-  // This widget is the home page of your application. It is stateful, meaning
-  // that it has a State object (defined below) that contains fields that affect
-  // how it looks.
-
-  // This class is the configuration for the state. It holds the values (in this
-  // case the title) provided by the parent (in this case the App widget) and
-  // used by the build method of the State. Fields in a Widget subclass are
-  // always marked "final".
-
-  final String title;
 
   @override
-  State<MyHomePage> createState() => _MyHomePageState();
-}
-
-class _MyHomePageState extends State<MyHomePage> {
-  int _counter = 0;
-
-  void _incrementCounter() {
-    setState(() {
-      // This call to setState tells the Flutter framework that something has
-      // changed in this State, which causes it to rerun the build method below
-      // so that the display can reflect the updated values. If we changed
-      // _counter without calling setState(), then the build method would not be
-      // called again, and so nothing would appear to happen.
-      _counter++;
-    });
+  void initState() {
+    super.initState();
   }
 
   @override
   Widget build(BuildContext context) {
-    // This method is rerun every time setState is called, for instance as done
-    // by the _incrementCounter method above.
-    //
-    // The Flutter framework has been optimized to make rerunning build methods
-    // fast, so that you can just rebuild anything that needs updating rather
-    // than having to individually change instances of widgets.
-    return Scaffold(
-      appBar: AppBar(
-        // Here we take the value from the MyHomePage object that was created by
-        // the App.build method, and use it to set our appbar title.
-        title: Text(widget.title),
-      ),
-      body: Center(
-        // Center is a layout widget. It takes a single child and positions it
-        // in the middle of the parent.
-        child: Column(
-          // Column is also a layout widget. It takes a list of children and
-          // arranges them vertically. By default, it sizes itself to fit its
-          // children horizontally, and tries to be as tall as its parent.
-          //
-          // Invoke "debug painting" (press "p" in the console, choose the
-          // "Toggle Debug Paint" action from the Flutter Inspector in Android
-          // Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
-          // to see the wireframe for each widget.
-          //
-          // Column has various properties to control how it sizes itself and
-          // how it positions its children. Here we use mainAxisAlignment to
-          // center the children vertically; the main axis here is the vertical
-          // axis because Columns are vertical (the cross axis would be
-          // horizontal).
-          mainAxisAlignment: MainAxisAlignment.center,
-          children: <Widget>[
-            const Text(
-              'You have pushed the button this many times:',
-            ),
-            Text(
-              '$_counter',
-              style: Theme.of(context).textTheme.headline4,
-            ),
-          ],
-        ),
-      ),
-      floatingActionButton: FloatingActionButton(
-        onPressed: _incrementCounter,
-        tooltip: 'Increment',
-        child: const Icon(Icons.add),
-      ), // This trailing comma makes auto-formatting nicer for build methods.
+    return FlutterBoostApp(
+      routeFactory,
+      appBuilder: appBuilder,
     );
   }
 }
+
+Widget widgetForRoute(String route) {
+  print("flutter page: $route");
+  Map<String, dynamic> json = jsonDecode(route);
+  String page = json["page"];
+  dynamic params = json["params"];
+
+  switch (page) {
+    case "DemoPage":
+      return DemoPage(
+        title: '',
+      );
+    case "home":
+      return HomePage(
+        title: '',
+      );
+    case "mine":
+      return MinePage(title: "");
+    case "VideoCollectedPage":
+      return VideoCollectedPage(title: "");
+    case "VideoAttentionPage":
+      return VideoAttentionPage(title: "");
+    case "VideoScanRecordPage":
+      return VideoScanRecordPage(title: "");
+    case "VideoDownloadPage":
+      return VideoDownloadPage(title: "");
+    case "PersonInfoPage":
+      return PersonInfoPage(title: "");
+    case "SettingPage":
+      return SettingPage(title: "");
+    case "EmailLoginPage":
+      return EmailLoginPage(title: "");
+    case "LoginPage":
+      return LoginPage(title: "");
+    case "AdvicePage":
+      return AdvicePage(title: "");
+    case "SearchPage":
+      return SearchPage(title: params!["title"]);
+    case "AboutUsPage":
+      return AboutUsPage(title: "");
+    case "VideoDetailPage":
+      {
+        int position = params!["position"] ?? 0;
+        return VideoDetailPage(
+          videoInfo: VideoInfoModel.fromJson(params!["video"]),
+          position: position,
+        );
+      }
+
+    case "VideoListPage":
+      {
+        String kw = params!["kw"]!;
+        String title = params!["title"] ?? "";
+        return VideoListPage(
+          title: title,
+          kw: kw,
+        );
+      }
+    case "BrowserPage":
+      {
+        String title = params!["title"] ?? "";
+        return BrowserPage(title: title, url: params!["url"]);
+      }
+    case "VideoPlayerWebPage":
+      {
+        String title = params!["title"] ?? "";
+        return VideoPlayerWebPage(title: title, url: params!["url"]);
+      }
+  }
+
+  return Container();
+}
+
+///鍏ㄥ眬鐢熷懡鍛ㄦ湡鐩戝惉绀轰緥
+class AppLifecycleObserver with GlobalPageVisibilityObserver {
+  @override
+  void onBackground(Route route) {
+    super.onBackground(route);
+    print("AppLifecycleObserver - ${route.settings.name} - onBackground");
+  }
+
+  @override
+  void onForeground(Route route) {
+    super.onForeground(route);
+    print("AppLifecycleObserver ${route.settings.name} - onForground");
+  }
+
+  @override
+  void onPagePush(Route route) {
+    super.onPagePush(route);
+    print("AppLifecycleObserver - ${route.settings.name}- onPagePush");
+  }
+
+  @override
+  void onPagePop(Route route) {
+    super.onPagePop(route);
+    print("AppLifecycleObserver - ${route.settings.name}- onPagePop");
+  }
+
+  @override
+  void onPageHide(Route route) {
+    super.onPageHide(route);
+    print("AppLifecycleObserver - ${route.settings.name}- onPageHide");
+  }
+
+  @override
+  void onPageShow(Route route) {
+    super.onPageShow(route);
+    print("AppLifecycleObserver - ${route.settings.name}- onPageShow");
+  }
+}
diff --git a/src/main/resources/code/flutter_module/pubspec.lock b/src/main/resources/code/flutter_module/pubspec.lock
index 446550e..6bfdb1d 100644
--- a/src/main/resources/code/flutter_module/pubspec.lock
+++ b/src/main/resources/code/flutter_module/pubspec.lock
@@ -164,8 +164,8 @@
     dependency: "direct dev"
     description:
       path: "."
-      ref: "v3.0-null-safety-preview.18"
-      resolved-ref: c4e5ed7c0471fe11b202b5df70b6ee6fe28369ed
+      ref: "v3.0-null-safety-release.1"
+      resolved-ref: "3684506c38d2f52a62d6d92bce6ffe1e54395216"
       url: "https://github.com/alibaba/flutter_boost.git"
     source: git
     version: "3.0.0"
@@ -430,7 +430,7 @@
       name: permission_handler
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "8.3.0"
+    version: "9.0.2"
   permission_handler_platform_interface:
     dependency: transitive
     description:
diff --git a/src/main/resources/code/flutter_module/pubspec.yaml b/src/main/resources/code/flutter_module/pubspec.yaml
index 4d43c65..bdea7cb 100644
--- a/src/main/resources/code/flutter_module/pubspec.yaml
+++ b/src/main/resources/code/flutter_module/pubspec.yaml
@@ -1,6 +1,8 @@
 name: flutter_module
 description: A new Flutter module.
 
+
+publish_to: 'none'
 # The following defines the version and build number for your application.
 # A version number is three numbers separated by dots, like 1.2.43
 # followed by an optional build number separated by a +.
@@ -33,7 +35,7 @@
     sdk: flutter
   flutter_lints: ^1.0.0
   cupertino_icons: ^1.0.3
-  permission_handler: ^8.2.6
+  permission_handler: ^9.0.2
 
 
   shared_preferences: ^2.0.8
@@ -61,7 +63,7 @@
   path_provider: ^2.0.6
 
   #寰俊鐧诲綍
-  fluwx_no_pay: ^3.6.1+5
+  fluwx_no_pay: ^3.8.1
 
   event_bus: ^2.0.0
 
@@ -106,7 +108,7 @@
   flutter_boost:
     git:
       url: 'https://github.com/alibaba/flutter_boost.git'
-      ref: 'v3.0-null-safety-preview.18'
+      ref: 'v3.0-null-safety-release.1'
 
 
 # For information on the generic Dart part of this file, see the
@@ -118,6 +120,14 @@
   # the material Icons class.
   uses-material-design: true
 
+  assets:
+    - assets/imgs/
+    - assets/imgs/advice/
+    - assets/imgs/common/
+    - assets/imgs/login/
+    - assets/imgs/video/
+    - assets/imgs/home/
+
   # To add Flutter specific assets to your application, add an assets section,
   # like this:
   # assets:
diff --git a/src/main/resources/code/flutter_module/test/widget_test.dart b/src/main/resources/code/flutter_module/test/widget_test.dart
index 0c7ffca..f29cc33 100644
--- a/src/main/resources/code/flutter_module/test/widget_test.dart
+++ b/src/main/resources/code/flutter_module/test/widget_test.dart
@@ -13,7 +13,7 @@
 void main() {
   testWidgets('Counter increments smoke test', (WidgetTester tester) async {
     // Build our app and trigger a frame.
-    await tester.pumpWidget(const MyApp());
+    await tester.pumpWidget(MyApp());
 
     // Verify that our counter starts at 0.
     expect(find.text('0'), findsOneWidget);
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/aop/UserLoginValid.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/aop/UserLoginValid.java
index 9473b07..0612517 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/aop/UserLoginValid.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/aop/UserLoginValid.java
@@ -21,7 +21,7 @@
 @Component
 public class UserLoginValid {
 
-    public static final String EDP = "execution(* com.yeshi.location.app.controller.client..*.*(..))";
+    public static final String EDP = "execution(* com.ks.app.controller.client..*.*(..))";
 
     @Resource
     private SystemConfigService systemConfigService;
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/controller/client/api/UserController.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/controller/client/api/UserController.java
index 61296f9..dbce9da 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/controller/client/api/UserController.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/controller/client/api/UserController.java
@@ -50,7 +50,7 @@
     @Resource
     private VerifyCodeManager verifyCodeManager;
 
-    @Reference(version = "1.0", check = false)
+    //@Reference(version = "1.0", check = false)
     private BDeviceTokenService bDeviceTokenService;
 
     @ResponseBody
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/admin/AdminUserDao.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/admin/AdminUserDao.java
index 5a87efd..e0fe3d4 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/admin/AdminUserDao.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/admin/AdminUserDao.java
@@ -16,7 +16,7 @@
 public class AdminUserDao extends MongodbBaseDao<AdminUser> {
 
     /**
-     * @return com.ks.app.entity.AdminUser
+     * @return AdminUser
      * @author hxh
      * @description 鏍规嵁璐﹀彿鏌ヨ
      * @date 13:10 2021/11/13
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/feedback/AdviceDao.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/feedback/AdviceDao.java
new file mode 100644
index 0000000..619e259
--- /dev/null
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/feedback/AdviceDao.java
@@ -0,0 +1,94 @@
+package com.ks.app.dao.feedback;
+
+import com.ks.app.entity.SystemEnum;
+import com.ks.app.entity.feedback.Advice;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+import org.yeshi.utils.mongo.MongodbBaseDao;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+
+@Repository
+public class AdviceDao extends MongodbBaseDao<Advice> {
+
+    public void updateSelective(Advice bean) {
+        Query query = new Query();
+        Update update = new Update();
+        query.addCriteria(Criteria.where("id").is(bean.getId()));
+        if (bean.getSystem() != null) {
+            update.set("system", bean.getSystem());
+        }
+        if (bean.getUid() != null) {
+            update.set("uid", bean.getUid());
+        }
+        if (bean.getDevice() != null) {
+            update.set("device", bean.getDevice());
+        }
+        if (bean.getType() != null) {
+            update.set("type", bean.getType());
+        }
+        if (bean.getContent() != null) {
+            update.set("content", bean.getContent());
+        }
+        if (bean.getCreateTime() != null) {
+            update.set("createTime", bean.getCreateTime());
+        }
+        update.set("updateTime", new Date());
+        update(query, update);
+    }
+
+
+    public List<Advice> list(DaoQuery daoQuery) {
+        Query query = getQuery(daoQuery);
+        if (daoQuery.sortList != null && daoQuery.sortList.size() > 0) {
+            query.with(Sort.by(daoQuery.sortList));
+        }
+        query.skip(daoQuery.start);
+        query.limit(daoQuery.count);
+        return findList(query);
+    }
+
+    public long count(DaoQuery daoQuery) {
+        Query query = getQuery(daoQuery);
+        return count(query);
+    }
+
+    private Query getQuery(DaoQuery daoQuery) {
+        List<Criteria> andList = new ArrayList<>();
+        if (daoQuery.system != null) {
+            andList.add(Criteria.where("system").is(daoQuery.system));
+        }
+        if (daoQuery.uid != null) {
+            andList.add(Criteria.where("uid").is(daoQuery.uid));
+        }
+        if (daoQuery.maxCreateTime != null) {
+            andList.add(Criteria.where("createTime").lt(daoQuery.maxCreateTime));
+        }
+        if (daoQuery.minCreateTime != null) {
+            andList.add(Criteria.where("createTime").gte(daoQuery.minCreateTime));
+        }
+        Query query = new Query();
+        Criteria[] ands = new Criteria[andList.size()];
+        andList.toArray(ands);
+        if (ands.length > 0) {
+            query.addCriteria(new Criteria().andOperator(ands));
+        }
+        return query;
+    }
+
+    public static class DaoQuery {
+        public SystemEnum system;
+        public Long uid;
+        public Date maxCreateTime;
+        public Date minCreateTime;
+        public int start;
+        public int count;
+        public List<Sort.Order> sortList;
+    }
+}
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/feedback/PrivacyComplainDao.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/feedback/PrivacyComplainDao.java
new file mode 100644
index 0000000..bd032ac
--- /dev/null
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/feedback/PrivacyComplainDao.java
@@ -0,0 +1,94 @@
+package com.ks.app.dao.feedback;
+
+import com.ks.app.entity.SystemEnum;
+import com.ks.app.entity.feedback.PrivacyComplain;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+import org.yeshi.utils.mongo.MongodbBaseDao;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+
+@Repository
+public class PrivacyComplainDao extends MongodbBaseDao<PrivacyComplain> {
+
+    public void updateSelective(PrivacyComplain bean) {
+        Query query = new Query();
+        Update update = new Update();
+        query.addCriteria(Criteria.where("id").is(bean.getId()));
+        if (bean.getSystem() != null) {
+            update.set("system", bean.getSystem());
+        }
+        if (bean.getUid() != null) {
+            update.set("uid", bean.getUid());
+        }
+        if (bean.getDevice() != null) {
+            update.set("device", bean.getDevice());
+        }
+        if (bean.getContent() != null) {
+            update.set("content", bean.getContent());
+        }
+        if (bean.getImgList() != null) {
+            update.set("imgList", bean.getImgList());
+        }
+        if (bean.getCreateTime() != null) {
+            update.set("createTime", bean.getCreateTime());
+        }
+        update.set("updateTime", new Date());
+        update(query, update);
+    }
+
+
+    public List<PrivacyComplain> list(DaoQuery daoQuery) {
+        Query query = getQuery(daoQuery);
+        if (daoQuery.sortList != null && daoQuery.sortList.size() > 0) {
+            query.with(Sort.by(daoQuery.sortList));
+        }
+        query.skip(daoQuery.start);
+        query.limit(daoQuery.count);
+        return findList(query);
+    }
+
+    public long count(DaoQuery daoQuery) {
+        Query query = getQuery(daoQuery);
+        return count(query);
+    }
+
+    private Query getQuery(DaoQuery daoQuery) {
+        List<Criteria> andList = new ArrayList<>();
+        if (daoQuery.system != null) {
+            andList.add(Criteria.where("system").is(daoQuery.system));
+        }
+        if (daoQuery.uid != null) {
+            andList.add(Criteria.where("uid").is(daoQuery.uid));
+        }
+        if (daoQuery.maxCreateTime != null) {
+            andList.add(Criteria.where("createTime").lt(daoQuery.maxCreateTime));
+        }
+        if (daoQuery.minCreateTime != null) {
+            andList.add(Criteria.where("createTime").gte(daoQuery.minCreateTime));
+        }
+        Query query = new Query();
+        Criteria[] ands = new Criteria[andList.size()];
+        andList.toArray(ands);
+        if (ands.length > 0) {
+            query.addCriteria(new Criteria().andOperator(ands));
+        }
+        return query;
+    }
+
+    public static class DaoQuery {
+        public SystemEnum system;
+        public Long uid;
+        public Date maxCreateTime;
+        public Date minCreateTime;
+        public int start;
+        public int count;
+        public List<Sort.Order> sortList;
+    }
+}
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/QQUserInfoDao.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/QQUserInfoMapper.java
similarity index 90%
rename from src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/QQUserInfoDao.java
rename to src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/QQUserInfoMapper.java
index 0a23422..22bb115 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/QQUserInfoDao.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/QQUserInfoMapper.java
@@ -12,7 +12,7 @@
 import com.ks.app.entity.user.QQUserInfo;
 
 @Repository
-public interface QQUserInfoDao extends BaseMapper<QQUserInfo> {
+public interface QQUserInfoMapper extends BaseMapper<QQUserInfo> {
 
     QQUserInfo selectByPrimaryKeyForUpdate(@Param("id") Long id);
 
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/UserInfoDao.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/UserInfoMapper.java
similarity index 95%
rename from src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/UserInfoDao.java
rename to src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/UserInfoMapper.java
index 76ac357..316facd 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/UserInfoDao.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/UserInfoMapper.java
@@ -12,7 +12,7 @@
 import java.util.List;
 
 @Repository
-public interface UserInfoDao extends BaseMapper<UserInfo> {
+public interface UserInfoMapper extends BaseMapper<UserInfo> {
 
     UserInfo selectByPrimaryKeyForUpdate(@Param("id") java.lang.Long id);
 
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/WXUserInfoDao.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/WXUserInfoMapper.java
similarity index 90%
rename from src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/WXUserInfoDao.java
rename to src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/WXUserInfoMapper.java
index c0c5477..27af45e 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/WXUserInfoDao.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/user/WXUserInfoMapper.java
@@ -12,7 +12,7 @@
 import com.ks.app.entity.user.WXUserInfo;
 
 @Repository
-public interface WXUserInfoDao extends BaseMapper<WXUserInfo> {
+public interface WXUserInfoMapper extends BaseMapper<WXUserInfo> {
 
     WXUserInfo selectByPrimaryKeyForUpdate(@Param("id") java.lang.Long id);
 
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/OrderRecordDao.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/OrderRecordMapper.java
similarity index 91%
rename from src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/OrderRecordDao.java
rename to src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/OrderRecordMapper.java
index a241b71..8ee2325 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/OrderRecordDao.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/OrderRecordMapper.java
@@ -10,7 +10,7 @@
 import com.ks.app.entity.vip.OrderRecord;
 
 @Repository
-public interface OrderRecordDao extends BaseMapper<OrderRecord> {
+public interface OrderRecordMapper extends BaseMapper<OrderRecord> {
 
   OrderRecord selectByPrimaryKeyForUpdate(@Param("id") java.lang.Long id);
 
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/UserVIPInfoDao.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/UserVIPInfoMapper.java
similarity index 90%
rename from src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/UserVIPInfoDao.java
rename to src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/UserVIPInfoMapper.java
index ace7ede..e1e004c 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/UserVIPInfoDao.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/dao/vip/UserVIPInfoMapper.java
@@ -11,7 +11,7 @@
 import com.ks.app.entity.vip.UserVIPInfo;
 
 @Repository
-public interface UserVIPInfoDao extends BaseMapper<UserVIPInfo> {
+public interface UserVIPInfoMapper extends BaseMapper<UserVIPInfo> {
 
     UserVIPInfo selectByPrimaryKeyForUpdate(@Param("id") java.lang.Long id);
 
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/feedback/AdviceServiceImpl.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/feedback/AdviceServiceImpl.java
new file mode 100644
index 0000000..a797341
--- /dev/null
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/feedback/AdviceServiceImpl.java
@@ -0,0 +1,90 @@
+package com.ks.app.service.impl.feedback;
+
+import com.yeshi.makemoney.app.dao.feedback.AdviceDao;
+import com.yeshi.makemoney.app.entity.feedback.Advice;
+import com.yeshi.makemoney.app.service.inter.feedback.AdviceService;
+import com.yeshi.makemoney.app.service.query.feedback.AdviceQuery;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Service;
+import org.yeshi.utils.bean.BeanUtil;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+@Service
+public class AdviceServiceImpl implements AdviceService {
+
+    @Resource
+    private AdviceDao adviceDao;
+
+    @Override
+    public List<Advice> list(AdviceQuery adviceQuery, int page, int pageSize) {
+        AdviceDao.DaoQuery daoQuery = new AdviceDao.DaoQuery();
+        try {
+            BeanUtil.copyProperties(adviceQuery, daoQuery);
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+        daoQuery.start = (page - 1) * pageSize;
+        daoQuery.count = pageSize;
+        return adviceDao.list(daoQuery);
+    }
+
+    @Override
+    public long count(AdviceQuery adviceQuery) {
+        AdviceDao.DaoQuery daoQuery = new AdviceDao.DaoQuery();
+        try {
+            BeanUtil.copyProperties(adviceQuery, daoQuery);
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+        return adviceDao.count(daoQuery);
+    }
+
+    @Override
+    public Advice get(String id) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("_id").is(id));
+        return adviceDao.findOne(query);
+    }
+
+    @Override
+    public void add(Advice advice) throws Exception {
+
+        if (advice.getId() == null) {
+            advice.setId(UUID.randomUUID().toString());
+        }
+
+        //鏌ヨ涓婚敭ID鏄惁瀛樺湪
+        if (adviceDao.get(advice.getId()) != null) {
+            throw new Exception("宸插瓨鍦�");
+        }
+
+        if (advice.getCreateTime() == null) {
+            advice.setCreateTime(new Date());
+        }
+        //淇濆瓨
+        adviceDao.save(advice);
+    }
+
+    @Override
+    public void update(Advice advice) {
+        if (advice.getUpdateTime() == null) {
+            advice.setUpdateTime(new Date());
+        }
+        //鏇存柊
+        adviceDao.updateSelective(advice);
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        for (String id : idList) {
+            adviceDao.delete(id);
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/feedback/PrivacyComplainServiceImpl.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/feedback/PrivacyComplainServiceImpl.java
new file mode 100644
index 0000000..8c7c803
--- /dev/null
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/feedback/PrivacyComplainServiceImpl.java
@@ -0,0 +1,89 @@
+package com.ks.app.service.impl.feedback;
+
+import com.ks.app.dao.feedback.PrivacyComplainDao;
+import com.ks.app.entity.feedback.PrivacyComplain;
+import com.ks.app.service.inter.feedback.PrivacyComplainService;
+import com.ks.app.service.query.feedback.PrivacyComplainQuery;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Service;
+import org.yeshi.utils.bean.BeanUtil;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+@Service
+public class PrivacyComplainServiceImpl implements PrivacyComplainService {
+
+  @Resource
+  private PrivacyComplainDao privacyComplainDao;
+
+  @Override
+  public List<PrivacyComplain> list(PrivacyComplainQuery privacyComplainQuery, int page, int pageSize)  {
+    PrivacyComplainDao.DaoQuery daoQuery = new PrivacyComplainDao.DaoQuery();
+    try {
+        BeanUtil.copyProperties(privacyComplainQuery, daoQuery);
+    } catch (IllegalAccessException e) {
+          e.printStackTrace();
+    }
+    daoQuery.start=(page-1)*pageSize;
+    daoQuery.count=pageSize;
+    return privacyComplainDao.list(daoQuery);
+  }
+
+  @Override
+  public long count(PrivacyComplainQuery privacyComplainQuery)  {
+    PrivacyComplainDao.DaoQuery daoQuery = new PrivacyComplainDao.DaoQuery();
+    try {
+        BeanUtil.copyProperties(privacyComplainQuery, daoQuery);
+    } catch (IllegalAccessException e) {
+          e.printStackTrace();
+    }
+    return privacyComplainDao.count(daoQuery);
+  }
+
+  @Override
+  public PrivacyComplain get(String id)  {
+    Query query=new Query();
+    query.addCriteria(Criteria.where("_id").is(id));
+    return privacyComplainDao.findOne(query);
+  }
+
+  @Override
+  public void add(PrivacyComplain privacyComplain)  throws Exception {
+
+      if (privacyComplain.getId() == null) {
+          privacyComplain.setId(UUID.randomUUID().toString());
+      }
+     //鏌ヨ涓婚敭ID鏄惁瀛樺湪
+     if(privacyComplainDao.get(privacyComplain.getId())!=null){
+        throw new Exception("宸插瓨鍦�");
+     }
+
+     if(privacyComplain.getCreateTime()==null){
+        privacyComplain.setCreateTime(new Date());
+     }
+     //淇濆瓨
+     privacyComplainDao.save(privacyComplain);
+  }
+
+  @Override
+  public void update(PrivacyComplain privacyComplain)  {
+     if(privacyComplain.getUpdateTime()==null){
+        privacyComplain.setUpdateTime(new Date());
+     }
+     //鏇存柊
+     privacyComplainDao.updateSelective(privacyComplain);
+  }
+
+  @Override
+  public void delete(List<String> idList)  {
+     for (String id : idList){
+        privacyComplainDao.delete(id);
+     }
+  }
+
+
+}
\ No newline at end of file
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/QQUserInfoServiceImpl.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/QQUserInfoServiceImpl.java
index e606e33..662a77a 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/QQUserInfoServiceImpl.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/QQUserInfoServiceImpl.java
@@ -13,17 +13,17 @@
 
 import java.util.List;
 
-import com.ks.app.dao.user.QQUserInfoDao;
+import com.ks.app.dao.user.QQUserInfoMapper;
 import com.ks.app.entity.user.QQUserInfo;
 import com.ks.app.service.inter.user.QQUserInfoService;
 import com.ks.app.service.query.user.QQUserInfoQuery;
-import com.ks.app.dao.user.QQUserInfoDao.DaoQuery;
+import com.ks.app.dao.user.QQUserInfoMapper.DaoQuery;
 
 @Service
 public class QQUserInfoServiceImpl implements QQUserInfoService {
 
     @Resource
-    private QQUserInfoDao qQUserInfoMapper;
+    private QQUserInfoMapper qQUserInfoMapper;
 
     @Override
     public List<QQUserInfo> list(QQUserInfoQuery qQUserInfoQuery, int page, int pageSize) {
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/UserInfoServiceImpl.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/UserInfoServiceImpl.java
index c0ac37b..68130e7 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/UserInfoServiceImpl.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/UserInfoServiceImpl.java
@@ -15,11 +15,11 @@
 
 import java.util.List;
 
-import com.ks.app.dao.user.UserInfoDao;
+import com.ks.app.dao.user.UserInfoMapper;
 import com.ks.app.entity.user.UserInfo;
 import com.ks.app.service.inter.user.UserInfoService;
 import com.ks.app.service.query.user.UserInfoQuery;
-import com.ks.app.dao.user.UserInfoDao.DaoQuery;
+import com.ks.app.dao.user.UserInfoMapper.DaoQuery;
 import org.yeshi.utils.statistic.BaseStatisticMySQLTimeQuery;
 import org.yeshi.utils.statistic.BaseStatisticTimeQuery;
 import org.yeshi.utils.statistic.StatisticNumberResult;
@@ -28,7 +28,7 @@
 public class UserInfoServiceImpl implements UserInfoService {
 
     @Resource
-    private UserInfoDao userInfoMapper;
+    private UserInfoMapper userInfoMapper;
     @Resource
     private WXUserInfoService wxUserInfoService;
     @Resource
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/WXUserInfoServiceImpl.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/WXUserInfoServiceImpl.java
index 3a6cf39..c011c86 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/WXUserInfoServiceImpl.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/user/WXUserInfoServiceImpl.java
@@ -14,17 +14,17 @@
 
 import java.util.List;
 
-import com.ks.app.dao.user.WXUserInfoDao;
+import com.ks.app.dao.user.WXUserInfoMapper;
 import com.ks.app.entity.user.WXUserInfo;
 import com.ks.app.service.inter.user.WXUserInfoService;
 import com.ks.app.service.query.user.WXUserInfoQuery;
-import com.ks.app.dao.user.WXUserInfoDao.DaoQuery;
+import com.ks.app.dao.user.WXUserInfoMapper.DaoQuery;
 
 @Service
 public class WXUserInfoServiceImpl implements WXUserInfoService {
 
     @Resource
-    private WXUserInfoDao wXUserInfoMapper;
+    private WXUserInfoMapper wXUserInfoMapper;
 
     @Override
     public List<WXUserInfo> list(WXUserInfoQuery wXUserInfoQuery, int page, int pageSize) {
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/OrderServiceImpl.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/OrderServiceImpl.java
index 8a2e884..b8bf139 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/OrderServiceImpl.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/OrderServiceImpl.java
@@ -2,8 +2,8 @@
 
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.response.AlipayTradeQueryResponse;
-import com.ks.app.dao.vip.OrderRecordDao;
-import com.ks.app.dao.vip.UserVIPInfoDao;
+import com.ks.app.dao.vip.OrderRecordMapper;
+import com.ks.app.dao.vip.UserVIPInfoMapper;
 import com.ks.app.dto.vip.OrderPaySuccessForm;
 import com.ks.app.dto.vip.PayWayInfoDTO;
 import com.ks.app.entity.SystemEnum;
@@ -56,7 +56,7 @@
     private static Logger orderLogger = LoggerFactory.getLogger("order");
 
     @Resource
-    private OrderRecordDao OrderRecordDao;
+    private OrderRecordMapper OrderRecordDao;
 
     @Resource
     private RedisTemplate<String, String> redisTemplate;
@@ -71,7 +71,7 @@
     private UserInfoService userInfoService;
 
     @Resource
-    private UserVIPInfoDao userVIPInfoDao;
+    private UserVIPInfoMapper userVIPInfoDao;
 
     @Transactional(rollbackFor = Exception.class)
     @Override
@@ -334,7 +334,7 @@
     @Override
     public List<OrderRecord> getCanCancelOrderList(int page, int pageSize) {
 
-        OrderRecordDao.DaoQuery daoQuery = new OrderRecordDao.DaoQuery();
+        OrderRecordMapper.DaoQuery daoQuery = new OrderRecordMapper.DaoQuery();
         daoQuery.state = OrderRecord.STATE_NOT_PAY;
         //30鍒嗛挓鏈敮浠樺彇娑堣鍗�
         daoQuery.maxCreateTime = new Date(System.currentTimeMillis() - 1000 * 60 * 30);
@@ -427,7 +427,7 @@
     @Override
     public List<OrderRecord> listOrderRecord(Long uid, OrderType orderType, Integer state, int page, int pageSize) {
 
-        OrderRecordDao.DaoQuery query = new OrderRecordDao.DaoQuery();
+        OrderRecordMapper.DaoQuery query = new OrderRecordMapper.DaoQuery();
         query.start = (page - 1) * pageSize;
         query.count = pageSize;
         query.uid = uid;
@@ -438,7 +438,7 @@
 
     @Override
     public long countOrderRecord(Long uid, OrderType orderType, Integer state) {
-        OrderRecordDao.DaoQuery query = new OrderRecordDao.DaoQuery();
+        OrderRecordMapper.DaoQuery query = new OrderRecordMapper.DaoQuery();
         query.uid = uid;
         query.state = state;
         query.orderType = orderType;
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/VIPServiceImpl.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/VIPServiceImpl.java
index 639d847..f5665fe 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/VIPServiceImpl.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/impl/vip/VIPServiceImpl.java
@@ -1,6 +1,6 @@
 package com.ks.app.service.impl.vip;
 
-import com.ks.app.dao.vip.UserVIPInfoDao;
+import com.ks.app.dao.vip.UserVIPInfoMapper;
 import com.ks.app.entity.vip.UserVIPInfo;
 import com.ks.app.service.inter.vip.VIPService;
 import org.slf4j.Logger;
@@ -25,7 +25,7 @@
     Logger logger = LoggerFactory.getLogger(VIPServiceImpl.class);
 
     @Resource
-    private UserVIPInfoDao userVIPInfoDao;
+    private UserVIPInfoMapper userVIPInfoDao;
 
     @Override
     public UserVIPInfo getVIPInfo(Long uid) {
@@ -76,7 +76,7 @@
 
     @Override
     public List<UserVIPInfo> listVIPUser(Date minVIPExpireDate, Date maxVIPExpireDate, int page, int pageSize) {
-        UserVIPInfoDao.DaoQuery daoQuery = new UserVIPInfoDao.DaoQuery();
+        UserVIPInfoMapper.DaoQuery daoQuery = new UserVIPInfoMapper.DaoQuery();
         daoQuery.maxExpireDate = maxVIPExpireDate;
         daoQuery.minExpireDate = minVIPExpireDate;
         daoQuery.start = (page - 1) * pageSize;
@@ -87,7 +87,7 @@
 
     @Override
     public long countVIPUser(Date minVIPExpireDate, Date maxVIPExpireDate) {
-        UserVIPInfoDao.DaoQuery daoQuery = new UserVIPInfoDao.DaoQuery();
+        UserVIPInfoMapper.DaoQuery daoQuery = new UserVIPInfoMapper.DaoQuery();
         daoQuery.maxExpireDate = maxVIPExpireDate;
         daoQuery.minExpireDate = minVIPExpireDate;
         return userVIPInfoDao.count(daoQuery);
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/inter/user/UserInfoService.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/inter/user/UserInfoService.java
index c67c7e7..e0aef7e 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/service/inter/user/UserInfoService.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/service/inter/user/UserInfoService.java
@@ -57,7 +57,7 @@
 
 
     /**
-     * @return com.yeshi.location.app.entity.user.UserInfo
+     * @return UserInfo
      * @author hxh
      * @description 鑾峰彇鐢ㄦ埛淇℃伅璇︽儏
      * @date 17:15 2021/11/15
@@ -67,7 +67,7 @@
 
 
     /**
-     * @return java.util.List<com.yeshi.location.app.entity.user.UserInfo>
+     * @return java.util.List<UserInfo>
      * @author hxh
      * @description 鎵归噺鑾峰彇鐢ㄦ埛淇℃伅璇︽儏
      * @date 17:39 2021/11/15
@@ -77,7 +77,7 @@
 
 
     /**
-     * @return com.yeshi.location.app.entity.user.UserInfo
+     * @return UserInfo
      * @author hxh
      * @description 鏍规嵁鐢佃瘽鍜岀郴缁熸煡璇�
      * @date 10:26 2021/11/16
@@ -96,7 +96,7 @@
 
 
     /**
-     * @return com.yeshi.location.app.entity.SystemEnum
+     * @return SystemEnum
      * @author hxh
      * @description //鑾峰彇鐢ㄦ埛绯荤粺
      * @date 15:06 2021/11/17
diff --git a/src/main/resources/code/service/app/src/main/java/com/ks/app/utils/SystemInfoUtil.java b/src/main/resources/code/service/app/src/main/java/com/ks/app/utils/SystemInfoUtil.java
index ff84588..4c51c22 100644
--- a/src/main/resources/code/service/app/src/main/java/com/ks/app/utils/SystemInfoUtil.java
+++ b/src/main/resources/code/service/app/src/main/java/com/ks/app/utils/SystemInfoUtil.java
@@ -14,7 +14,7 @@
 public class SystemInfoUtil {
 
     /**
-     * @return com.ks.app.entity.SystemEnum
+     * @return SystemEnum
      * @author hxh
      * @description 鑾峰彇绯荤粺
      * @date 18:02 2021/11/16
diff --git a/src/main/resources/code/service/app/src/main/resources/application-dev.yml b/src/main/resources/code/service/app/src/main/resources/application-dev.yml
index 1519452..6d7ea78 100644
--- a/src/main/resources/code/service/app/src/main/resources/application-dev.yml
+++ b/src/main/resources/code/service/app/src/main/resources/application-dev.yml
@@ -17,7 +17,7 @@
       password: 'Yeshi2016@'
       host: 193.112.35.168
       port: 27016
-      database: location
+      database: ${mongoDataBaseName}
       authentication-database: admin
   redis:
     host: 193.112.35.168 #193.112.34.40
@@ -44,7 +44,7 @@
 
 
   datasource:
-    url: jdbc:mysql://gz-cdb-r13d0yi9.sql.tencentcdb.com:62929/location?serverTimezone=GMT%2B8
+    url: jdbc:mysql://gz-cdb-r13d0yi9.sql.tencentcdb.com:62929/${sqlDataBaseName}?serverTimezone=GMT%2B8
     username: root
     password: Yeshi2016@
     driver-class-name: com.mysql.jdbc.Driver
@@ -76,7 +76,7 @@
   job:
     accessToken:
     executor:
-      appname: service-push
+      appname: service-${projectName}
       ip:
       logpath: /data/applogs/xxl-job/jobhandler
       logretentiondays: -1
diff --git a/src/main/resources/code/service/app/src/main/resources/application-pro.yml b/src/main/resources/code/service/app/src/main/resources/application-pro.yml
index db5845c..ec74e58 100644
--- a/src/main/resources/code/service/app/src/main/resources/application-pro.yml
+++ b/src/main/resources/code/service/app/src/main/resources/application-pro.yml
@@ -17,7 +17,7 @@
       password: 'Yeshi2016@'
       host: 172.16.16.44
       port: 27017
-      database: push
+      database: ${mongoDataBaseName}
       authentication-database: admin
   redis:
     host: 172.16.16.15 #193.112.34.40
@@ -45,7 +45,7 @@
 
   datasource:
     #jdbc:mysql://gz-cdb-r13d0yi9.sql.tencentcdb.com:62929/ks_goldcorn?serverTimezone=GMT%2B8
-    url: jdbc:mysql://172.16.16.17:3306/bpush?serverTimezone=GMT%2B8
+    url: jdbc:mysql://172.16.16.17:3306/${sqlDataBaseName}?serverTimezone=GMT%2B8
     username: root
     password: Yeshi2016@
     driver-class-name: com.mysql.jdbc.Driver
@@ -76,7 +76,7 @@
   job:
     accessToken:
     executor:
-      appname: service-push
+      appname: service-${projectName}
       ip:
       logpath: /data/applogs/xxl-job/jobhandler
       logretentiondays: -1
diff --git a/src/main/resources/code/service/app/src/main/resources/mapper/OrderRecordMapper.xml b/src/main/resources/code/service/app/src/main/resources/mapper/OrderRecordMapper.xml
index 73866d3..6d9118d 100644
--- a/src/main/resources/code/service/app/src/main/resources/mapper/OrderRecordMapper.xml
+++ b/src/main/resources/code/service/app/src/main/resources/mapper/OrderRecordMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="com.ks.app.dao.vip.OrderRecordDao">
+<mapper namespace="com.ks.app.dao.vip.OrderRecordMapper">
     <resultMap id="BaseResultMap"
                type="com.ks.app.entity.vip.OrderRecord">
         <id column="id" property="id" jdbcType="BIGINT"/>
diff --git a/src/main/resources/code/service/app/src/main/resources/mapper/QQUserInfoMapper.xml b/src/main/resources/code/service/app/src/main/resources/mapper/QQUserInfoMapper.xml
index c6f1ae5..8171d90 100644
--- a/src/main/resources/code/service/app/src/main/resources/mapper/QQUserInfoMapper.xml
+++ b/src/main/resources/code/service/app/src/main/resources/mapper/QQUserInfoMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="com.ks.app.dao.user.QQUserInfoDao">
+<mapper namespace="com.ks.app.dao.user.QQUserInfoMapper">
     <resultMap id="BaseResultMap"
                type="com.ks.app.entity.user.QQUserInfo">
         <id column="id" property="id" jdbcType="BIGINT"/>
diff --git a/src/main/resources/code/service/app/src/main/resources/mapper/UserInfoMapper.xml b/src/main/resources/code/service/app/src/main/resources/mapper/UserInfoMapper.xml
index bf6a6a4..539da71 100644
--- a/src/main/resources/code/service/app/src/main/resources/mapper/UserInfoMapper.xml
+++ b/src/main/resources/code/service/app/src/main/resources/mapper/UserInfoMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="com.ks.app.dao.user.UserInfoDao">
+<mapper namespace="com.ks.app.dao.user.UserInfoMapper">
     <resultMap id="BaseResultMap"
                type="com.ks.app.entity.user.UserInfo">
         <id column="id" property="id" jdbcType="BIGINT"/>
@@ -159,9 +159,6 @@
 
     <sql id="listWhere">
 
-        public SystemEnum system;
-        public Long wxId;
-        public Long qqId;
         <if test="query.system!=null">
             and system = #{query.system}
         </if>
diff --git a/src/main/resources/code/service/app/src/main/resources/mapper/UserVIPInfoMapper.xml b/src/main/resources/code/service/app/src/main/resources/mapper/UserVIPInfoMapper.xml
index 2916b46..3e6c84e 100644
--- a/src/main/resources/code/service/app/src/main/resources/mapper/UserVIPInfoMapper.xml
+++ b/src/main/resources/code/service/app/src/main/resources/mapper/UserVIPInfoMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="com.ks.app.dao.vip.UserVIPInfoDao">
+<mapper namespace="com.ks.app.dao.vip.UserVIPInfoMapper">
     <resultMap id="BaseResultMap"
                type="com.ks.app.entity.vip.UserVIPInfo">
         <id column="uid" property="uid" jdbcType="BIGINT"/>
diff --git a/src/main/resources/code/service/app/src/main/resources/mapper/WXUserInfoMapper.xml b/src/main/resources/code/service/app/src/main/resources/mapper/WXUserInfoMapper.xml
index 99a71a7..18627a7 100644
--- a/src/main/resources/code/service/app/src/main/resources/mapper/WXUserInfoMapper.xml
+++ b/src/main/resources/code/service/app/src/main/resources/mapper/WXUserInfoMapper.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="com.yeshi.location.app.mapper.user.WXUserInfoMapper">
+<mapper namespace="com.ks.app.mapper.user.WXUserInfoMapper">
     <resultMap id="BaseResultMap"
-               type="com.yeshi.location.app.entity.user.WXUserInfo">
+               type="com.ks.app.entity.user.WXUserInfo">
         <id column="id" property="id" jdbcType="BIGINT"/>
         <result column="system" property="system" jdbcType="VARCHAR"/>
         <result column="nick_name" property="nickName" jdbcType="VARCHAR"/>
@@ -44,7 +44,7 @@
         lt_user_wx where id = #{id,jdbcType=BIGINT}
     </delete>
     <insert id="insert"
-            parameterType="com.yeshi.location.app.entity.user.WXUserInfo"
+            parameterType="com.ks.app.entity.user.WXUserInfo"
             useGeneratedKeys="true" keyProperty="id">
         insert into
         lt_user_wx
@@ -80,7 +80,7 @@
 
     </insert>
     <insert id="insertSelective"
-            parameterType="com.yeshi.location.app.entity.user.WXUserInfo"
+            parameterType="com.ks.app.entity.user.WXUserInfo"
             useGeneratedKeys="true" keyProperty="id">
         insert into lt_user_wx
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -114,7 +114,7 @@
         </trim>
     </insert>
     <update id="updateByPrimaryKey"
-            parameterType="com.yeshi.location.app.entity.user.WXUserInfo">
+            parameterType="com.ks.app.entity.user.WXUserInfo">
         update lt_user_wx
         <set>
             <if test="id != null">id = #{id,jdbcType=BIGINT},</if>
@@ -133,7 +133,7 @@
         where id = #{id,jdbcType=BIGINT}
     </update>
     <update id="updateByPrimaryKeySelective"
-            parameterType="com.yeshi.location.app.entity.user.WXUserInfo">
+            parameterType="com.ks.app.entity.user.WXUserInfo">
         update lt_user_wx
         <set>
             <if test="system != null">system = #{system,jdbcType=VARCHAR},</if>
diff --git a/src/main/resources/code/service/app/src/main/resources/mysql.sql b/src/main/resources/code/service/app/src/main/resources/mysql.sql
new file mode 100644
index 0000000..7307b35
--- /dev/null
+++ b/src/main/resources/code/service/app/src/main/resources/mysql.sql
@@ -0,0 +1,99 @@
+
+CREATE DATABASE /*!32312 IF NOT EXISTS*/`${sqlDataBaseName}` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
+
+USE `${sqlDataBaseName}`;
+
+DROP TABLE IF EXISTS `${sqlTablePrefix}user`;
+
+CREATE TABLE `${sqlTablePrefix}user` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `system` varchar(32) DEFAULT NULL COMMENT '绯荤粺',
+  `nick_name` varchar(128) DEFAULT NULL COMMENT '鏄电О',
+  `portrait` varchar(512) DEFAULT NULL COMMENT '澶村儚',
+  `phone` varchar(64) DEFAULT NULL COMMENT '鎵嬫満鍙�',
+  `email` varchar(64) DEFAULT NULL COMMENT '閭',
+  `pwd` varchar(32) DEFAULT NULL COMMENT '瀵嗙爜',
+  `wx_id` bigint(20) DEFAULT NULL COMMENT '寰俊绱㈠紩',
+  `qq_id` bigint(20) DEFAULT NULL COMMENT 'QQ绱㈠紩',
+  `status` int(11) DEFAULT '0' COMMENT '鐘舵��',
+  `create_time` datetime DEFAULT NULL,
+  `update_time` datetime DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UX_SYSTEM_PHONE` (`system`,`phone`),
+  UNIQUE KEY `UX_SYSTEM_EMAIL` (`system`,`email`),
+  KEY `INX_EMAIL` (`email`),
+  KEY `INX_PHONE` (`phone`)
+) ENGINE=InnoDB AUTO_INCREMENT=22380 DEFAULT CHARSET=utf8mb4 COMMENT='鐢ㄦ埛淇℃伅';
+
+DROP TABLE IF EXISTS `${sqlTablePrefix}user_qq`;
+
+CREATE TABLE `${sqlTablePrefix}user_qq` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `system` varchar(32) DEFAULT NULL,
+  `nick_name` varchar(64) DEFAULT NULL COMMENT '鏄电О',
+  `portrait` varchar(512) DEFAULT NULL COMMENT '澶村儚',
+  `open_id` varchar(64) DEFAULT NULL COMMENT 'openid',
+  `create_time` datetime DEFAULT NULL,
+  `update_time` datetime DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UX_SYSTEM_OPEN_ID` (`system`,`open_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='QQ鎺堟潈淇℃伅';
+
+
+DROP TABLE IF EXISTS `${sqlTablePrefix}user_vip_info`;
+
+CREATE TABLE `${sqlTablePrefix}user_vip_info` (
+  `uid` bigint(20) NOT NULL,
+  `expire_date` datetime DEFAULT NULL,
+  `create_time` datetime DEFAULT NULL,
+  `update_time` datetime DEFAULT NULL,
+  PRIMARY KEY (`uid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+DROP TABLE IF EXISTS `${sqlTablePrefix}user_wx`;
+
+CREATE TABLE `${sqlTablePrefix}user_wx` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `system` varchar(32) DEFAULT NULL,
+  `nick_name` varchar(64) DEFAULT NULL COMMENT '鏄电О',
+  `sex` int(11) DEFAULT NULL COMMENT '鎬у埆',
+  `province` varchar(64) DEFAULT NULL COMMENT '鐪�',
+  `city` varchar(64) DEFAULT NULL COMMENT '甯�',
+  `country` varchar(64) DEFAULT NULL COMMENT '鍥藉',
+  `head_img_url` varchar(512) DEFAULT NULL COMMENT '澶村儚',
+  `open_id` varchar(64) DEFAULT NULL COMMENT 'openid',
+  `union_id` varchar(64) DEFAULT NULL COMMENT 'unionid',
+  `create_time` datetime DEFAULT NULL,
+  `update_time` datetime DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UX_SYSTEM_UNION_ID` (`system`,`union_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='寰俊鎺堟潈淇℃伅';
+
+
+DROP TABLE IF EXISTS `${sqlTablePrefix}vip_order_record`;
+
+CREATE TABLE `${sqlTablePrefix}vip_order_record` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `order_type` varchar(64) DEFAULT NULL,
+  `uid` bigint(20) DEFAULT NULL,
+  `state` int(11) DEFAULT NULL,
+  `money_pay` tinyint(4) DEFAULT NULL,
+  `gold_corn_pay` tinyint(4) DEFAULT NULL,
+  `gold_corn` int(11) DEFAULT NULL,
+  `type` varchar(64) DEFAULT NULL,
+  `money` decimal(8,2) DEFAULT NULL,
+  `pay_way` int(11) DEFAULT NULL,
+  `pay_money` decimal(8,2) DEFAULT NULL,
+  `ip_info` varchar(64) DEFAULT NULL,
+  `pay_time` datetime DEFAULT NULL,
+  `vip_start_time` datetime DEFAULT NULL,
+  `vip_end_time` datetime DEFAULT NULL,
+  `remarks` varchar(256) DEFAULT NULL,
+  `apple_transaction_id` varchar(64) DEFAULT NULL,
+  `apple_original_transaction_id` varchar(64) DEFAULT NULL,
+  `create_time` datetime DEFAULT NULL,
+  `update_time` datetime DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=200010 DEFAULT CHARSET=utf8mb4;
+
+
diff --git a/src/main/resources/code/service/app/src/main/resources/static/index.html b/src/main/resources/code/service/app/src/main/resources/static/index.html
index bab98b1..8af3014 100644
--- a/src/main/resources/code/service/app/src/main/resources/static/index.html
+++ b/src/main/resources/code/service/app/src/main/resources/static/index.html
@@ -40,7 +40,7 @@
 <!-- 椤堕儴寮�濮� -->
 <div class="container">
     <div class="logo">
-        <a href="index.html">瀹氫綅杩借釜绯荤粺</a></div>
+        <a href="index.html">${projectChineseName}绯荤粺</a></div>
     <div class="left_open">
         <a><i title="灞曞紑宸︿晶鏍�" class="iconfont">&#xe699;</i></a>
     </div>
diff --git a/src/main/resources/code/service/pom.xml b/src/main/resources/code/service/pom.xml
index 0f18b95..d1fcc85 100644
--- a/src/main/resources/code/service/pom.xml
+++ b/src/main/resources/code/service/pom.xml
@@ -160,7 +160,7 @@
         <dependency>
             <groupId>com.yeshi</groupId>
             <artifactId>utils</artifactId>
-            <version>0.2.9</version>
+            <version>0.3.2</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.springframework.data</groupId>
diff --git a/src/main/resources/static/service.html b/src/main/resources/static/service.html
index 81b5046..5a9b7b2 100644
--- a/src/main/resources/static/service.html
+++ b/src/main/resources/static/service.html
@@ -60,9 +60,14 @@
 <p>鏁版嵁搴撴鏋讹細mybatis,mongodb,redis</p>
 <p>RPC妗嗘灦锛歞ubbo</p>
 <p>鍒嗗竷寮忎换鍔℃鏋讹細xxl-job</p>
-<p>甯哥敤宸ュ叿绫伙細com.yeshi.utils_0.1.5</p>
+<p>甯哥敤宸ュ叿绫伙細com.yeshi.utils_0.3.2</p>
 <p>鍙噰鐢ㄨ嚜鍔ㄥ伐鍏风被涓殑浠g爜鐢熸垚宸ュ叿锛屾牴鎹甧ntity浠ュ強entity涓婄殑閰嶇疆锛岃嚜鍔ㄧ敓鎴愮浉鍏崇殑鍔熻兘閫昏緫浠g爜锛屽敖閲忓仛鍒版柊椤圭洰灏卞彲寮�绠卞嵆鐢�</p>
 <p style="color: red;">涓嬭浇浠g爜涔嬪墠闇�濉啓濡備笅淇℃伅锛�</p>
+
+
+<p>
+    <input type="text" class="layui-text" placeholder="璇峰~鍐欓」鐩悕绉�(涓枃鍚嶇О)">
+</p>
 
 <p>
     <input type="text" class="layui-text" placeholder="璇峰~鍐欓」鐩悕绉�(鑻辨枃鍚嶇О)">
@@ -72,6 +77,18 @@
 </p>
 <p>
     <input type="text" class="layui-text" placeholder="璇峰~鍐欏簲鐢ㄥ寘鍚嶏紙濡俢om.ks.push.app锛�">
+</p>
+
+<p>
+    <input type="text" class="layui-text" placeholder="璇峰~鍐橫ySQl鏁版嵁搴撳悕绉�">
+</p>
+
+<p>
+    <input type="text" class="layui-text" placeholder="璇峰~鍐橫ySql琛ㄥ墠缂�">
+</p>
+
+<p>
+    <input type="text" class="layui-text" placeholder="璇峰~鍐橫ongodb鏁版嵁搴撳悕绉�">
 </p>
 
 
@@ -89,9 +106,13 @@
 
     function startDownLoad() {
         ksapp.post("api/generator/createService", {
-            name: $("input[type=text]").eq(0).val(),
-            pks: $("input[type=text]").eq(1).val(),
-            subpks: $("input[type=text]").eq(2).val()
+            chineseName: $("input[type=text]").eq(0).val(),
+            name: $("input[type=text]").eq(1).val(),
+            pks: $("input[type=text]").eq(2).val(),
+            subpks: $("input[type=text]").eq(3).val(),
+            sqlDataBaseName: $("input[type=text]").eq(4).val(),
+            sqlTablePrefix: $("input[type=text]").eq(5).val(),
+            mongoDataBaseName: $("input[type=text]").eq(6).val(),
         }, function (res) {
             if (res.code == 0) {
                 window.location.href = "api/generator/downloadZIP?name=" + encodeURIComponent(res.data)

--
Gitblit v1.8.0