From 36f691267e45ca2861bed663fdcf5f2efcefdfce Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 10 十一月 2025 15:27:08 +0800
Subject: [PATCH] 最新版本541200007

---
 admin/.env                                                                                                |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchRemoveParam.java   |   58 +
 server/system_timer/src/main/resources/bootstrap-pro.yml                                                  |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/DeptApiClient.java                |  168 +++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java               |   14 
 server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java                          |    2 
 server/meeting/meeting_service/src/main/resources/application-dev.yml                                     |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleApiClient.java                |  170 +++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java              |    9 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java            |   23 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/base/PageBaseParam.java              |   43 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataCreateParam.java        |  101 +
 server/system_gateway/src/main/resources/application-dev.yml                                              |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptCreateParam.java            |   68 +
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleGroupListQueryParam.java    |   35 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java             |  196 +++
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleGroupApiClient.java           |  108 +
 admin/.env.development                                                                                    |    2 
 admin/src/api/business/member.js                                                                          |    3 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/AppApiClient.java                  |   53 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserEntityModel.java            |   28 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormApiClient.java                 |   71 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java       |  152 ++
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormQueryParam.java             |   30 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchCreateParam.java   |   94 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java                |    3 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java                |   58 +
 admin/src/views/business/internalCompany.vue                                                              |   22 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/HttpRequestParam.java           |   48 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleListQueryParam.java         |   40 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserUpdateParam.java            |   62 +
 server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java                  |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/file/UploadTokenParam.java           |   48 
 admin/src/api/business/company.js                                                                         |    3 
 admin/public/index.html                                                                                   |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java                        |    2 
 server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml                                          |    2 
 server/visits/dmvisit_admin/src/main/resources/bootstrap-pro.yml                                          |    2 
 server/visits/dmvisit_service/src/main/resources/application-dev.yml                                      |    2 
 server/visits/dmvisit_service/src/main/resources/application-pro.yml                                      |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleMemberQueryParam.java       |   28 
 server/visits/dmvisit_admin/src/main/resources/bootstrap.yml                                              |    2 
 server/system_gateway/src/main/resources/application-test.yml                                             |    2 
 server/system_service/src/main/java/com/doumee/dao/business/model/Member.java                             |    3 
 server/system_timer/src/main/resources/application-pro.yml                                                |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchUpdateParam.java   |   95 +
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataUpdateParam.java        |  105 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java |    3 
 server/system_gateway/src/main/resources/bootstrap-dev.yml                                                |    2 
 server/system_gateway/src/main/resources/bootstrap-pro.yml                                                |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java             |  142 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java               |    4 
 server/visits/openapi/src/main/resources/application.yml                                                  |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java                  |  214 +++
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleUpdateParam.java            |   47 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/CorpCoopApiClient.java            |   80 +
 admin/src/views/login.vue                                                                                 |    4 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FileApiClient.java                 |   61 +
 server/visits/admin_timer/src/main/resources/bootstrap-pro.yml                                            |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/util/LimitUtil.java                        |   40 
 server/visits/dmvisit_service/src/main/resources/application-test.yml                                     |    2 
 server/startsh/admin_start.sh                                                                             |   11 
 server/system_gateway/src/main/resources/application-pro.yml                                              |    2 
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataDeleteParam.java        |   76 +
 server/system_service/src/main/java/com/doumee/config/DataSyncConfig.java                                 |    2 
 /dev/null                                                                                                 |   81 -
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserCreateParam.java            |   65 +
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/MemberApiClient.java              |  147 ++
 server/system_timer/src/main/resources/application-test.yml                                               |    2 
 server/system_timer/src/main/resources/application-dev.yml                                                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java      |  169 ++
 server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataQueryParam.java         |  114 ++
 admin/src/views/business/internalMember.vue                                                               |   26 
 73 files changed, 3,082 insertions(+), 193 deletions(-)

diff --git a/admin/.env b/admin/.env
index fc2f445..c93e01f 100644
--- a/admin/.env
+++ b/admin/.env
@@ -10,4 +10,4 @@
 VUE_APP_API_PREFIX = '/system_gateway'
 
 # 椤圭洰鍚嶇О
-VUE_APP_TITLE = '鑺滄箹鐑熻崏鏅烘収瀹夋秷瀹夊叏闃茶寖绯荤粺'
+VUE_APP_TITLE = '椹瀺灞辩儫鑽夋櫤鎱у畨娑堝畨鍏ㄩ槻鑼冪郴缁�'
diff --git a/admin/.env.development b/admin/.env.development
index 05e081e..654e0ea 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -5,7 +5,7 @@
 
 # VUE_APP_API_URL  = 'http://192.168.1.45:10010'
 
-VUE_APP_API_URL  = 'http://192.168.0.212/system_gateway'
+VUE_APP_API_URL  = 'http://127.0.0.1:10010'
 
 # VUE_APP_API_URL  = 'http://localhost:10010'
 
diff --git a/admin/public/index.html b/admin/public/index.html
index 4dba259..c2b7a65 100644
--- a/admin/public/index.html
+++ b/admin/public/index.html
@@ -5,11 +5,11 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
-    <title>鑺滄箹鐑熻崏鏅烘収瀹夋秷瀹夊叏闃茶寖绯荤粺</title>
+    <title>椹瀺灞辩儫鑽夋櫤鎱у畨娑堝畨鍏ㄩ槻鑼冪郴缁�</title>
   </head>
   <body>
     <noscript>
-      <strong>We're sorry but 鑺滄箹鐑熻崏鏅烘収瀹夋秷瀹夊叏闃茶寖绯荤粺 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+      <strong>We're sorry but 椹瀺灞辩儫鑽夋櫤鎱у畨娑堝畨鍏ㄩ槻鑼冪郴缁� doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
     </noscript>
     <div id="app"></div>
     <!-- built files will be auto injected -->
diff --git a/admin/src/api/business/company.js b/admin/src/api/business/company.js
index b1ecbcc..cd1c390 100644
--- a/admin/src/api/business/company.js
+++ b/admin/src/api/business/company.js
@@ -40,6 +40,9 @@
 export function companySyncDingding (data) {
   return request.post('/visitsAdmin/cloudService/business/company/syncAllDingding', data)
 }
+export function companySyncJdy (data) {
+  return request.post('/visitsAdmin/cloudService/business/company/syncAllJdy', data)
+}
 // 鍒嗛〉鏌ヨ
 export function companyGetList (data) {
   return request.post('/visitsAdmin/cloudService/business/company/page', data)
diff --git a/admin/src/api/business/member.js b/admin/src/api/business/member.js
index 9492c36..2858b99 100644
--- a/admin/src/api/business/member.js
+++ b/admin/src/api/business/member.js
@@ -26,6 +26,9 @@
 export function memberSyncDingding (data) {
   return request.post('/visitsAdmin/cloudService/business/member/syncAllDingding', data)
 }
+export function memberSyncJdy (data) {
+  return request.post('/visitsAdmin/cloudService/business/member/syncAllJdy', data)
+}
 export function delHkForce (data) {
   return request.post('/visitsAdmin/cloudService/business/member/delHkForce', data)
 }
diff --git a/admin/src/views/business/internalCompany.vue b/admin/src/views/business/internalCompany.vue
index 6bfea48..f9de2c7 100644
--- a/admin/src/views/business/internalCompany.vue
+++ b/admin/src/views/business/internalCompany.vue
@@ -27,6 +27,8 @@
             @click="synchronous()">鍚屾</el-button></li>
         <li><el-button type="primary" v-permissions="['business:company:create']" :loading="loading"
             @click="synchronousDingding()">鍚屾閽夐拤</el-button></li>
+<!--        <li><el-button type="primary" v-permissions="['business:company:create']" :loading="loading"
+            @click="synchronousJdy()">鍚屾绠�閬撲簯</el-button></li>-->
       </ul>
       <el-table :max-height="tableHeight" v-loading="isWorking.search" :data="list" stripe
         :tree-props="{ children: 'childList', hasChildren: 'hasChildren' }" row-key="id"
@@ -65,7 +67,7 @@
 <script>
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
-import { companySync,companySyncDingding, sort } from '@/api/business/company'
+import { companySync,companySyncDingding, companySyncJdy,sort } from '@/api/business/company'
 import OperaInternalCompanyWindow from '@/components/business/OperaInternalCompanyWindow'
 export default {
   name: 'internalCompany',
@@ -150,6 +152,24 @@
         })
         .catch(() => { })
     },
+    async synchronousJdy() {
+      this.$dialog.actionConfirm('璇ユ搷浣滃皢绯荤粺娓呯┖宸叉湁鍐呴儴缁勭粐淇℃伅锛屾偍纭鍚屾鍏ㄩ儴淇℃伅鍚楋紵', '鎿嶄綔纭鎻愰啋')
+        .then(() => {
+          this.loading = true
+          companySyncJdy({})
+            .then(res => {
+              this.$tip.apiSuccess(res || '鍚屾鎴愬姛')
+              this.search()
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.loading = false
+            })
+        })
+        .catch(() => { })
+    },
     // 鎺掑簭
     sort(direction) {
       if (this.sorting) {
diff --git a/admin/src/views/business/internalMember.vue b/admin/src/views/business/internalMember.vue
index 76d61e7..2428c44 100644
--- a/admin/src/views/business/internalMember.vue
+++ b/admin/src/views/business/internalMember.vue
@@ -65,8 +65,10 @@
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:member:delete', 'business:member:create,business:empower:create']">
         <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading"
-            @click="synchronous()">鍚屾</el-button></li>
-        <li><el-button type="primary" v-permissions="['business:member:create']" :loading="loading"
+            @click="synchronous()">鍚屾瀹夐槻骞冲彴</el-button></li>
+<!--        <li><el-button type="primary" v-permissions="['business:member:create']" :loading="loading"
+            @click="synchronousJdy()">鍚屾绠�閬撲簯</el-button></li>-->
+         <li><el-button type="primary" v-permissions="['business:member:create']" :loading="loading"
             @click="synchronousDingding()">鍚屾閽夐拤</el-button></li>
         <li><el-button type="primary"
             @click="add" icon="el-icon-plus"
@@ -220,7 +222,7 @@
 import OperaMemberImportWindow from '@/components/business/OperaMemberImportWindow'
 import { fetchList } from '@/api/business/company'
 import { allList } from '@/api/business/position'
-import { memberSync,memberSyncDingding, roleAuth, updateCanVisit, updateHead, updateWorkStatus } from '@/api/business/member'
+import { memberSync,memberSyncDingding, memberSyncJdy,roleAuth, updateCanVisit, updateHead, updateWorkStatus } from '@/api/business/member'
 export default {
   name: 'internalMember',
   extends: BaseTable,
@@ -389,6 +391,24 @@
         })
         .catch(() => { })
     },
+    async synchronousJdy() {
+      this.$dialog.actionConfirm('璇ユ搷浣滈檷瑙﹀彂鍏ㄥ憳淇℃伅鏇存柊鍜岄噸鏂颁笅鍙戯紒璇疯皑鎱庢搷浣�', '鎮ㄧ‘璁ゅ叏閲忓悓姝ュ唴閮ㄤ汉鍛樹俊鎭悧锛�')
+        .then(() => {
+          this.loading = true
+          memberSyncJdy({})
+            .then(res => {
+              this.$tip.apiSuccess(res || '鍚屾鎴愬姛')
+              this.search()
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.loading = false
+            })
+        })
+        .catch(() => { })
+    },
     async updateHead(row, type) {
       this.$dialog.actionConfirm('鎮ㄧ‘璁よ繘琛屽綋鍓嶆搷浣滃悧锛�', '閮ㄩ棬涓荤璁剧疆鎿嶄綔鎻愮ず')
         .then(() => {
diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue
index 12a0bb7..6e0cf28 100644
--- a/admin/src/views/login.vue
+++ b/admin/src/views/login.vue
@@ -3,7 +3,7 @@
     <img src="@/assets/images/bg@2x.png" class="main_bg" alt="">
     <div class="login_wrap">
       <div class="login_img">
-        <div class="h2">鑺滄箹鐑熻崏鏅烘収瀹夋秷瀹夊叏闃茶寖绯荤粺</div>
+        <div class="h2">椹瀺灞辩儫鑽夋櫤鎱у畨娑堝畨鍏ㄩ槻鑼冪郴缁�</div>
         <div class="h3">鏅烘収鐗╂祦鍥尯瀹夋秷涓�浣撳寲绯荤粺</div>
       </div>
       <div class="form_wrap">
@@ -278,7 +278,7 @@
         align-items: center;
         justify-content: center;
         border-radius: 4px;
-        width: 208px;
+        width: 248px;
         display: flex;
         margin-bottom: 12px;
       }
diff --git a/server/meeting/meeting_service/src/main/resources/application-dev.yml b/server/meeting/meeting_service/src/main/resources/application-dev.yml
index 7020783..2350526 100644
--- a/server/meeting/meeting_service/src/main/resources/application-dev.yml
+++ b/server/meeting/meeting_service/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://10.50.250.178:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://10.50.250.178:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Atwl@2024
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/startsh/admin_start.sh b/server/startsh/admin_start.sh
index d980965..fa044ec 100644
--- a/server/startsh/admin_start.sh
+++ b/server/startsh/admin_start.sh
@@ -8,11 +8,11 @@
 
 /usr/local/nacos/nacos/bin/startup.sh -m standalone
 
-nohup java -jar /usr/local/jars/wuhuyancao/system_gateway.jar > /dev/null 2>&1 &
-nohup java -jar /usr/local/jars/wuhuyancao/admin_timer.jar > /dev/null 2>&1 &
-nohup java -jar /usr/local/jars/wuhuyancao/system_timer.jar > /dev/null 2>&1 &
-nohup java -jar /usr/local/jars/wuhuyancao/admin_interface.jar > /dev/null 2>&1 &
-nohup java -jar /usr/local/jars/wuhuyancao/meeting_admin.jar > /dev/null 2>&1 &
+nohup java -jar /usr/local/jars/maanshanyancao/system_gateway.jar > /dev/null 2>&1 &
+nohup java -jar /usr/local/jars/maanshanyancao/admin_timer.jar > /dev/null 2>&1 &
+nohup java -jar /usr/local/jars/maanshanyancao/system_timer.jar > /dev/null 2>&1 &
+nohup java -jar /usr/local/jars/maanshanyancao/admin_interface.jar > /dev/null 2>&1 &
+nohup java -jar /usr/local/jars/maanshanyancao/meeting_admin.jar > /dev/null 2>&1 &
 
 
 
@@ -20,3 +20,4 @@
 
 
 tail -f /usr/local/jars/logs/visitsAdmin/info.2025-10-31.0.log
+tail -f /usr/local/jars/logs/visitsAdmin/error.2025-11-05.0.log
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
index a04545a..04fb01a 100644
--- a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
+++ b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -72,7 +72,7 @@
         return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
     }
 
-    private static Function<Class<?>, Boolean> handlerPackage(String basePackage)     {
+    private static Function<Class<?>, Boolean> handlerPackage(String basePackage){
         return input -> {
             // 寰幆鍒ゆ柇鍖归厤
             for (String strPackage : basePackage.split(";")) {
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java
index a471efe..e6824b0 100644
--- a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java
+++ b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java
@@ -21,7 +21,6 @@
     private final RouteLocator routeLocator;
     private final GatewayProperties gatewayProperties;
 
-
     @Override
     public List<SwaggerResource> get() {
         List<SwaggerResource> resources = new ArrayList<>();
@@ -37,7 +36,6 @@
         });
         return resources;
     }
-
     private SwaggerResource swaggerResource(String name, String location) {
         log.info("name:{},location:{}",name,location);
         SwaggerResource swaggerResource = new SwaggerResource();
diff --git a/server/system_gateway/src/main/resources/application-dev.yml b/server/system_gateway/src/main/resources/application-dev.yml
index c4cb500..fa9d9de 100644
--- a/server/system_gateway/src/main/resources/application-dev.yml
+++ b/server/system_gateway/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Doumee@168
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/system_gateway/src/main/resources/application-pro.yml b/server/system_gateway/src/main/resources/application-pro.yml
index df592ab..414451c 100644
--- a/server/system_gateway/src/main/resources/application-pro.yml
+++ b/server/system_gateway/src/main/resources/application-pro.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://localhost:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Whyc@2025
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/system_gateway/src/main/resources/application-test.yml b/server/system_gateway/src/main/resources/application-test.yml
index 20c212f..8383f3c 100644
--- a/server/system_gateway/src/main/resources/application-test.yml
+++ b/server/system_gateway/src/main/resources/application-test.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Doumee@168
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/system_gateway/src/main/resources/bootstrap-dev.yml b/server/system_gateway/src/main/resources/bootstrap-dev.yml
index acef110..a375799 100644
--- a/server/system_gateway/src/main/resources/bootstrap-dev.yml
+++ b/server/system_gateway/src/main/resources/bootstrap-dev.yml
@@ -7,7 +7,7 @@
       discovery:
         server-addr: http://192.168.0.7:8848 #閰嶇疆Nacos鍦板潃
 #        namespace: dmvisit
-        namespace: wuhu_visit_dev1
+        namespace: wuhu_visit_dev
         username: nacos
         password: nacos
     gateway:
diff --git a/server/system_gateway/src/main/resources/bootstrap-pro.yml b/server/system_gateway/src/main/resources/bootstrap-pro.yml
index 8d0b245..8310c2f 100644
--- a/server/system_gateway/src/main/resources/bootstrap-pro.yml
+++ b/server/system_gateway/src/main/resources/bootstrap-pro.yml
@@ -6,7 +6,7 @@
       password: nacos
       discovery:
         server-addr: http://localhost:8848 #閰嶇疆Nacos鍦板潃
-        namespace: wuhuyancao
+        namespace: maanshanyancao
 #        namespace: dev_renkang
         username: nacos
         password: nacos
diff --git a/server/system_service/src/main/java/com/doumee/config/DataSyncConfig.java b/server/system_service/src/main/java/com/doumee/config/DataSyncConfig.java
index fc22973..dd23a6a 100644
--- a/server/system_service/src/main/java/com/doumee/config/DataSyncConfig.java
+++ b/server/system_service/src/main/java/com/doumee/config/DataSyncConfig.java
@@ -12,6 +12,8 @@
         int erp = 1;
         int hk = 2;
         int self = 0;
+        int jdy = 3;
+        int dingding = 4;
     }
     private Integer orgUserDataOrigin;
     private Integer visitorDataOrigin;
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/CorpCoopApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/CorpCoopApiClient.java
new file mode 100644
index 0000000..c4864b1
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/CorpCoopApiClient.java
@@ -0,0 +1,80 @@
+package com.doumee.core.jiandaoyun.api.arch;
+
+import  com.doumee.core.jiandaoyun.model.http.ApiClient;
+import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static  com.doumee.core.jiandaoyun.constants.HttpConstant.CORP_COOP_BASE_PATH;
+
+/**
+ * 浼佷笟浜掕仈鐩稿叧鎺ュ彛
+ */
+public class CorpCoopApiClient extends ApiClient {
+
+    private static final String DEFAULT_VERSION = "v5";
+    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
+
+
+    public CorpCoopApiClient(String apiKey, String host) {
+        super(apiKey, host);
+        this.setDefaultVersion(DEFAULT_VERSION);
+        this.setValidVersionList(VALID_VERSION_LIST);
+    }
+
+    @Override
+    public String generatePath(String version, String path) {
+        return super.getValidVersion(version) + CORP_COOP_BASE_PATH + path;
+    }
+
+    /**
+     * 鍒楀嚭鎴戣繛鎺ョ殑浼佷笟
+     *
+     * @param deptNo - 閮ㄩ棬缂栧彿 鍙负null
+     * @return 鎴戣繛鎺ョ殑浼佷笟
+     */
+    public Map<String, Object> corpCoopDepartList(Integer deptNo, String version) throws Exception {
+        String path = this.generatePath(version, "department/list");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("dept_no", deptNo);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鍒楀嚭鎴戣繛鎺ョ殑浼佷笟瀵规帴浜�
+     *
+     * @param deptNo - 閮ㄩ棬缂栧彿 鍙负null
+     * @return 鎴戣繛鎺ョ殑浼佷笟瀵规帴浜�
+     */
+    public Map<String, Object> corpCoopMemberList(Integer deptNo, String version) throws Exception {
+        String path = this.generatePath(version, "user/list");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("dept_no", deptNo);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鍒楀嚭鎴戣繛鎺ョ殑浼佷笟瀵规帴浜鸿缁嗕俊鎭�
+     *
+     * @param userName - 鐢ㄦ埛鍚�
+     */
+    public Map<String, Object> corpCoopUserInfo(String userName, String version) throws Exception {
+        if (StringUtils.isBlank(userName)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "user/get");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("username", userName);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/DeptApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/DeptApiClient.java
new file mode 100644
index 0000000..cc66d63
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/DeptApiClient.java
@@ -0,0 +1,168 @@
+package com.doumee.core.jiandaoyun.api.arch;
+
+import  com.doumee.core.jiandaoyun.model.dept.DeptCreateParam;
+import  com.doumee.core.jiandaoyun.model.http.ApiClient;
+import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static  com.doumee.core.jiandaoyun.constants.HttpConstant.DEPT_BASE_PATH;
+
+/**
+ * 閮ㄩ棬鐩稿叧鎺ュ彛
+ */
+public class DeptApiClient extends ApiClient {
+    private static final String DEFAULT_VERSION = "v5";
+    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
+
+    public DeptApiClient(String apiKey, String host) {
+        super(apiKey, host);
+        this.setDefaultVersion(DEFAULT_VERSION);
+        this.setValidVersionList(VALID_VERSION_LIST);
+    }
+
+    @Override
+    public String generatePath(String version, String path) {
+        return super.getValidVersion(version) + DEPT_BASE_PATH + path;
+    }
+
+    /**
+     * 鑾峰彇閮ㄩ棬缂栧彿瀵瑰簲閮ㄩ棬鍒楄〃 锛堥�掑綊锛�
+     *
+     * @param deptNo - 閮ㄩ棬缂栧彿
+     * @return 閮ㄩ棬淇℃伅
+     */
+    public Map<String, Object> deptList(Integer deptNo, Boolean hasChild, String version) throws Exception {
+        if (deptNo == null) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "list");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("has_child", hasChild);
+        data.put("dept_no", deptNo);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鍒涘缓閮ㄩ棬
+     *
+     * @param param - 閮ㄩ棬鍚嶇О
+     * @return 閮ㄩ棬淇℃伅
+     */
+    public Map<String, Object> deptCreate(DeptCreateParam param, String version) throws Exception {
+        if (param == null || !param.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "create");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("name", param.getName());
+        data.put("dept_no", param.getDept_no());
+        data.put("parent_no", param.getParent_no());
+        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
+        return this.sendPostRequest(httpRequestParam);
+    }
+
+
+    /**
+     * 鏍规嵁閮ㄩ棬缂栧彿 鏇存柊閮ㄩ棬鍚嶇О
+     *
+     * @param deptNo - 閮ㄩ棬缂栧彿
+     * @param name   - 鍚嶇О
+     * @return 鏇存柊鍚庣殑閮ㄩ棬淇℃伅
+     */
+    public Map<String, Object> deptUpdate(Integer deptNo, String name, String version) throws Exception {
+        if (deptNo == null || StringUtils.isBlank(name)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "update");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("name", name);
+        data.put("dept_no", deptNo);
+        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
+        return this.sendPostRequest(httpRequestParam);
+    }
+
+    /**
+     * 鏍规嵁閮ㄩ棬缂栧彿 鍒犻櫎閮ㄩ棬
+     *
+     * @param deptNo - 閮ㄩ棬缂栧彿
+     * @return status
+     */
+    public Map<String, Object> deptDelete(Integer deptNo, String version) throws Exception {
+        if (deptNo == null) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "delete");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("dept_no", deptNo);
+        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
+        return this.sendPostRequest(httpRequestParam);
+    }
+
+    /**
+     * 鏍规嵁闆嗘垚妯″紡閫氳褰曠殑閮ㄩ棬ID鑾峰彇閮ㄩ棬缂栧彿
+     *
+     * @param integrateId - 绗笁鏂瑰钩鍙扮殑閫氳褰曢儴闂ㄧ殑ID
+     * @return 閮ㄩ棬缂栧彿
+     */
+    public Map<String, Object> deptByIntegrateId(String integrateId, String version) throws Exception {
+        if (StringUtils.isBlank(integrateId)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "dept_no/get");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("integrate_id", integrateId);
+        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
+        return this.sendPostRequest(httpRequestParam);
+    }
+
+    /**
+     * 鎵归噺鍒涘缓閮ㄩ棬
+     *
+     * @param paramList - 閮ㄩ棬鍙傛暟鍒楄〃
+     * @return status
+     */
+    public Map<String, Object> departmentImport(List<DeptCreateParam> paramList, String version) throws Exception {
+        if (CollectionUtils.isEmpty(paramList)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "import");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("departments", paramList);
+        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
+        return this.sendPostRequest(httpRequestParam);
+    }
+
+
+    /**
+     * 鑾峰彇閮ㄩ棬鎴愬憳锛堥�掑綊锛�
+     *
+     * @param deptNo   - 閮ㄩ棬缂栧彿
+     * @param hasChild - 鏄惁鏌ュ瓙閮ㄩ棬
+     * @return 閮ㄩ棬鎴愬憳淇℃伅
+     */
+    public Map<String, Object> deptMemberList(Integer deptNo, Boolean hasChild, String version) throws Exception {
+        if (deptNo == null || hasChild == null) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "user/list");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("has_child", hasChild);
+        data.put("dept_no", deptNo);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/MemberApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/MemberApiClient.java
new file mode 100644
index 0000000..da39223
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/MemberApiClient.java
@@ -0,0 +1,147 @@
+package com.doumee.core.jiandaoyun.api.arch;
+
+import  com.doumee.core.jiandaoyun.model.http.ApiClient;
+import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import  com.doumee.core.jiandaoyun.model.user.UserCreateParam;
+import  com.doumee.core.jiandaoyun.model.user.UserUpdateParam;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static  com.doumee.core.jiandaoyun.constants.HttpConstant.MEMBER_BASE_PATH;
+
+/**
+ * 鎴愬憳鐩稿叧鎺ュ彛
+ */
+public class MemberApiClient extends ApiClient {
+    private static final String DEFAULT_VERSION = "v5";
+    private static final List<String> VALID_VERSION_LIST = Arrays.asList("v5");
+
+    public MemberApiClient(String apiKey, String host) {
+        super(apiKey, host);
+        this.setDefaultVersion(DEFAULT_VERSION);
+        this.setValidVersionList(VALID_VERSION_LIST);
+    }
+
+    @Override
+    public String generatePath(String version, String path) {
+        return super.getValidVersion(version) + MEMBER_BASE_PATH + path;
+    }
+
+    /**
+     * 鍒涘缓鎴愬憳
+     *
+     * @param param - 鎴愬憳淇℃伅
+     * @return 鎴愬憳淇℃伅
+     */
+    public Map<String, Object> userCreate(UserCreateParam param, String version) throws Exception {
+        if (param == null || !param.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "create");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("name", param.getName());
+        data.put("username", param.getUsername());
+        data.put("departments", param.getDepartments());
+        HttpRequestParam requestParam = new HttpRequestParam(path, data);
+        return this.sendPostRequest(requestParam);
+    }
+
+    /**
+     * 鏍规嵁鎴愬憳鍚嶇О 鑾峰彇鎴愬憳
+     *
+     * @param userName - 鎴愬憳鍚嶇О
+     * @return 鎴愬憳淇℃伅
+     */
+    public Map<String, Object> userInfo(String userName, String version) throws Exception {
+        if (StringUtils.isBlank(userName)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "get");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("username", userName);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鏇存柊鎴愬憳
+     *
+     * @param updateParam - 鏇存柊鐨勬垚鍛樹俊鎭�
+     * @return 鏇存柊鍚庣殑鎴愬憳淇℃伅
+     */
+    public Map<String, Object> userUpdate(UserUpdateParam updateParam, String version) throws Exception {
+        if (updateParam == null || !updateParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "update");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("name", updateParam.getName());
+        data.put("username", updateParam.getUserName());
+        data.put("departments", updateParam.getDepartmentList());
+        HttpRequestParam requestParam = new HttpRequestParam(path, data);
+        return this.sendPostRequest(requestParam);
+    }
+
+    /**
+     * 鎴愬憳鍒犻櫎
+     *
+     * @param userName - 鎴愬憳鍚嶇О
+     * @return status
+     */
+    public Map<String, Object> userDelete(String userName, String version) throws Exception {
+        if (StringUtils.isBlank(userName)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "delete");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("username", userName);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+
+    /**
+     * 鎵归噺鍒犻櫎鎴愬憳
+     *
+     * @param userNameList - 寰呭垹闄ょ殑鐢ㄦ埛鍚嶇О鍒楄〃
+     * @return status
+     */
+    public Map<String, Object> userBatchDelete(List<String> userNameList, String version) throws Exception {
+        if (CollectionUtils.isEmpty(userNameList)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "batch_delete");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("usernames", userNameList);
+        HttpRequestParam requestParam = new HttpRequestParam(path, data);
+        return this.sendPostRequest(requestParam);
+    }
+
+    /**
+     * 鎵归噺瀵煎叆鎴愬憳
+     *
+     * @param userNameList - 瀵煎叆鐨勬垚鍛樺垪琛�
+     * @return status
+     */
+    public Map<String, Object> userImport(List<UserCreateParam> userNameList, String version) throws Exception {
+        if (CollectionUtils.isEmpty(userNameList)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "import");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("users", userNameList);
+        HttpRequestParam requestParam = new HttpRequestParam(path, data);
+        return this.sendPostRequest(requestParam);
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleApiClient.java
new file mode 100644
index 0000000..fb48a3e
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleApiClient.java
@@ -0,0 +1,170 @@
+package com.doumee.core.jiandaoyun.api.arch;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import  com.doumee.core.jiandaoyun.model.http.ApiClient;
+import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import  com.doumee.core.jiandaoyun.model.role.RoleListQueryParam;
+import  com.doumee.core.jiandaoyun.model.role.RoleMemberQueryParam;
+import  com.doumee.core.jiandaoyun.model.role.RoleUpdateParam;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static  com.doumee.core.jiandaoyun.constants.HttpConstant.ROLE_BASE_PATH;
+
+/**
+ * 瑙掕壊鐩稿叧鎺ュ彛
+ */
+public class RoleApiClient extends ApiClient {
+    private static final String DEFAULT_VERSION = "v5";
+    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
+
+    public RoleApiClient(String apiKey, String host) {
+        super(apiKey, host);
+        this.setDefaultVersion(DEFAULT_VERSION);
+        this.setValidVersionList(VALID_VERSION_LIST);
+    }
+
+    @Override
+    public String generatePath(String version, String path) {
+        return super.getValidVersion(version) + ROLE_BASE_PATH + path;
+    }
+
+    /**
+     * 鍒楀嚭瑙掕壊
+     *
+     * @param queryParam - 鏌ヨ鍙傛暟
+     * @return 瑙掕壊淇℃伅
+     */
+    public Map<String, Object> roleList(RoleListQueryParam queryParam, String version) throws Exception {
+        if (queryParam == null || !queryParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "list");
+        // 璇锋眰鍙傛暟 灏� queryParam 閲岄潰鐨勫睘鎬ц浆鎹㈡垚map
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鍒涘缓瑙掕壊
+     *
+     * @param name    - 瑙掕壊鍚嶇О
+     * @param groupNo - 瑙掕壊缁勭紪鍙�
+     * @return 瑙掕壊淇℃伅
+     */
+    public Map<String, Object> roleCreate(String name, Integer groupNo, String version) throws Exception {
+        if (StringUtils.isBlank(name) || groupNo == null) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version,"create");
+        Map<String, Object> data = new HashMap<>();
+        data.put("group_no", groupNo);
+        data.put("name", name);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鏇存柊瑙掕壊
+     *
+     * @param updateParam - 瑙掕壊鏇存柊淇℃伅
+     * @return 鏇存柊鍚庣殑瑙掕壊淇℃伅
+     */
+    public Map<String, Object> roleUpdate(RoleUpdateParam updateParam, String version) throws Exception {
+        if (updateParam == null || !updateParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version,"update");
+        // 璇锋眰鍙傛暟 灏� queryParam 閲岄潰鐨勫睘鎬ц浆鎹㈡垚map
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(updateParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鍒犻櫎瑙掕壊
+     *
+     * @param roleNo - 瑙掕壊缂栧彿
+     * @return 鏃�
+     */
+    public Map<String, Object> roleDelete(Integer roleNo, String version) throws Exception {
+        if (roleNo == null) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version,"delete");
+        Map<String, Object> data = new HashMap<>();
+        data.put("role_no", roleNo);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鍒楀嚭瑙掕壊涓嬬殑鎵�鏈夋垚鍛�
+     *
+     * @param queryParam - 浜х嚎鍙傛暟
+     * @return 鎴愬憳淇℃伅
+     */
+    public Map<String, Object> roleMemberList(RoleMemberQueryParam queryParam, String version) throws Exception {
+        if (queryParam == null || !queryParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version,"user/list");
+        // 璇锋眰鍙傛暟 灏� queryParam 閲岄潰鐨勫睘鎬ц浆鎹㈡垚map
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鎵归噺缁欏凡鏈夌殑鎴愬憳璁剧疆鑷缓瑙掕壊
+     *
+     * @param roleNo       - 瑙掕壊缂栧彿
+     * @param userNameList - 鎴愬憳鍚嶇О鍒楄〃
+     * @return success
+     */
+    public Map<String, Object> roleAddMembers(Integer roleNo, List<String> userNameList, String version)
+            throws Exception {
+        if (roleNo == null || CollectionUtils.isEmpty(userNameList)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version,"add_members");
+        Map<String, Object> data = new HashMap<>();
+        data.put("role_no", roleNo);
+        data.put("usernames", userNameList);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 涓鸿嚜寤鸿鑹叉壒閲忕Щ闄ゆ垚鍛�
+     *
+     * @param roleNo       - 瑙掕壊缂栧彿
+     * @param userNameList - 鐢ㄦ埛鍚嶇О鍒楄〃
+     * @return status
+     */
+    public Map<String, Object> roleRemoveMembers(Integer roleNo, List<String> userNameList, String version)
+            throws Exception {
+        if (roleNo == null || CollectionUtils.isEmpty(userNameList)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version,"remove_members");
+        Map<String, Object> data = new HashMap<>();
+        data.put("role_no", roleNo);
+        data.put("usernames", userNameList);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleGroupApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleGroupApiClient.java
new file mode 100644
index 0000000..1b2384c
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleGroupApiClient.java
@@ -0,0 +1,108 @@
+package com.doumee.core.jiandaoyun.api.arch;
+
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import  com.doumee.core.jiandaoyun.model.http.ApiClient;
+import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import  com.doumee.core.jiandaoyun.model.role.RoleGroupListQueryParam;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.doumee.core.jiandaoyun.constants.HttpConstant.ROLE_GROUP_BASE_PATH;
+
+/**
+ * 瑙掕壊缁勭浉鍏虫帴鍙�
+ */
+public class RoleGroupApiClient extends ApiClient {
+
+    private static final String DEFAULT_VERSION = "v5";
+    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
+
+    public RoleGroupApiClient(String apiKey, String host) {
+        super(apiKey, host);
+        this.setDefaultVersion(DEFAULT_VERSION);
+        this.setValidVersionList(VALID_VERSION_LIST);
+    }
+
+    @Override
+    public String generatePath(String version, String path) {
+        return super.getValidVersion(version) + ROLE_GROUP_BASE_PATH + path;
+    }
+
+    /**
+     * 鍒楀嚭瑙掕壊缁�
+     *
+     * @param queryParam - 鏌ヨ鍙傛暟
+     * @return 瑙掕壊缁勪俊鎭�
+     */
+    public Map<String, Object> roleGroupList(RoleGroupListQueryParam queryParam, String version) throws Exception {
+        if (queryParam == null || !queryParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version,"list");
+        // 璇锋眰鍙傛暟 灏� queryParam 閲岄潰鐨勫睘鎬ц浆鎹㈡垚map
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鍒涘缓瑙掕壊缁�
+     *
+     * @param name - 瑙掕壊缁勫悕绉�
+     * @return 瑙掕壊缁勪俊鎭�
+     */
+    public Map<String, Object> roleGroupCreate(String name, String version) throws Exception {
+        if (StringUtils.isBlank(name)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version,"create");
+        Map<String, Object> data = new HashMap<>();
+        data.put("name", name);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鏇存柊瑙掕壊缁�
+     *
+     * @param name        - 瑙掕壊缁勫悕绉�
+     * @param roleGroupNo - 瑙掕壊缁勭紪鍙�
+     * @return 鏇存柊鍚庣殑瑙掕壊缁勪俊鎭�
+     */
+    public Map<String, Object> roleGroupUpdate(String name, Integer roleGroupNo, String version) throws Exception {
+        if (StringUtils.isBlank(name) || roleGroupNo == null) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version,"update");
+        Map<String, Object> data = new HashMap<>();
+        data.put("name", name);
+        data.put("role_group_no", roleGroupNo);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鍒犻櫎瑙掕壊缁�
+     *
+     * @param roleGroupNo - 瑙掕壊缁勭紪鍙�
+     * @return status
+     */
+    public Map<String, Object> roleGroupDelete(Integer roleGroupNo, String version) throws Exception {
+        if (roleGroupNo == null) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "delete");
+        Map<String, Object> data = new HashMap<>();
+        data.put("role_group_no", roleGroupNo);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/AppApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/AppApiClient.java
new file mode 100644
index 0000000..0dffcbe
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/AppApiClient.java
@@ -0,0 +1,53 @@
+package com.doumee.core.jiandaoyun.api.jdy;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import  com.doumee.core.jiandaoyun.model.base.PageBaseParam;
+import  com.doumee.core.jiandaoyun.model.http.ApiClient;
+import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import static com.doumee.core.jiandaoyun.constants.HttpConstant.APP_BASE_PATH;
+
+
+/**
+ * 搴旂敤鐩稿叧鎺ュ彛
+ */
+public class AppApiClient extends ApiClient {
+
+    private static final String DEFAULT_VERSION = "v5";
+    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
+
+    public AppApiClient(String apiKey, String host) {
+        super(apiKey, host);
+        this.setDefaultVersion(DEFAULT_VERSION);
+        this.setValidVersionList(VALID_VERSION_LIST);
+    }
+
+    @Override
+    public String generatePath(String version, String path) {
+        return super.getValidVersion(version) + APP_BASE_PATH + path;
+    }
+
+    /**
+     * 搴旂敤鍒嗛〉鍒楄〃
+     *
+     * @param queryParam - 鏌ヨ鍙傛暟
+     * @return 搴旂敤淇℃伅
+     */
+    public Map<String, Object> appList(PageBaseParam queryParam, String version) throws Exception {
+        if (queryParam == null || !queryParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "list");
+        // 璇锋眰鍙傛暟 灏� queryParam 閲岄潰鐨勫睘鎬ц浆鎹㈡垚map
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FileApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FileApiClient.java
new file mode 100644
index 0000000..736abca
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FileApiClient.java
@@ -0,0 +1,61 @@
+package com.doumee.core.jiandaoyun.api.jdy;
+
+import  com.doumee.core.jiandaoyun.model.file.UploadTokenParam;
+import  com.doumee.core.jiandaoyun.model.http.ApiClient;
+import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.doumee.core.jiandaoyun.constants.HttpConstant.FORM_BASE_PATH;
+
+/**
+ * 鏂囦欢鐩稿叧鎺ュ彛
+ */
+public class FileApiClient extends ApiClient {
+
+    private static final String DEFAULT_VERSION = "v5";
+    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
+
+    public FileApiClient(String apiKey, String host) {
+        super(apiKey, host);
+        this.setDefaultVersion(DEFAULT_VERSION);
+        this.setValidVersionList(VALID_VERSION_LIST);
+    }
+
+    @Override
+    public String generatePath(String version, String path) {
+        return super.getValidVersion(version) + FORM_BASE_PATH + path;
+    }
+
+    /**
+     * 鑾峰彇鏂囦欢涓婁紶鍑瘉鍜屼笂浼犲湴鍧�鎺ュ彛
+     *
+     * @param uploadTokenParam - 鏂囦欢瀵瑰簲鐨勪俊鎭�
+     * @return token鍜寀rl淇℃伅
+     */
+    public Map<String, Object> uploadToken(UploadTokenParam uploadTokenParam, String version) throws Exception {
+        if (uploadTokenParam == null || !uploadTokenParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "file/get_upload_token");
+        // 璇锋眰鍙傛暟
+        Map<String, Object> data = new HashMap<>();
+        data.put("transaction_id", uploadTokenParam.getTransactionId());
+        data.put("app_id", uploadTokenParam.getAppId());
+        data.put("entry_id", uploadTokenParam.getEntryId());
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    public Map<String, Object> uploadFile(String url, String token, File file) throws Exception {
+        if (StringUtils.isBlank(url) || StringUtils.isBlank(token) || file == null) {
+            throw new RuntimeException("param lack!");
+        }
+        return this.httpPostFile(url, token, file);
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormApiClient.java
new file mode 100644
index 0000000..d8d35a5
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormApiClient.java
@@ -0,0 +1,71 @@
+package com.doumee.core.jiandaoyun.api.jdy;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import  com.doumee.core.jiandaoyun.model.form.FormQueryParam;
+import  com.doumee.core.jiandaoyun.model.http.ApiClient;
+import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.doumee.core.jiandaoyun.constants.HttpConstant.FORM_BASE_PATH;
+
+/**
+ * 琛ㄥ崟鐩稿叧鎺ュ彛
+ */
+public class FormApiClient extends ApiClient {
+    private static final String DEFAULT_VERSION = "v5";
+    private static final List<String> VALID_VERSION_LIST = Arrays.asList("v5");
+
+    public FormApiClient(String apiKey, String host) {
+        super(apiKey, host);
+        this.setDefaultVersion(DEFAULT_VERSION);
+        this.setValidVersionList(VALID_VERSION_LIST);
+    }
+
+    @Override
+    public String generatePath(String version, String path) {
+        return super.getValidVersion(version) + FORM_BASE_PATH + path;
+    }
+
+    /**
+     * 琛ㄥ崟瀛楁鏌ヨ鎺ュ彛
+     *
+     * @param appId   - 搴旂敤 Id
+     * @param entryId - 琛ㄥ崟 Id
+     */
+    public Map<String, Object> formWidgets(String appId, String entryId, String version) throws Exception {
+        if (StringUtils.isBlank(appId) || StringUtils.isBlank(entryId)) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "widget/list");
+        Map<String, Object> data = new HashMap<>();
+        data.put("app_id", appId);
+        data.put("entry_id", entryId);
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 琛ㄥ崟鏌ヨ鎺ュ彛 鍒嗛〉
+     *
+     * @param queryParam - 鏌ヨ鍙傛暟
+     * @return 琛ㄥ崟淇℃伅
+     */
+    public Map<String, Object> entryList(FormQueryParam queryParam, String version) throws Exception {
+        if (queryParam == null || !queryParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "list");
+        // 璇锋眰鍙傛暟 灏� queryParam 閲岄潰鐨勫睘鎬ц浆鎹㈡垚map
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java
new file mode 100644
index 0000000..54aadd5
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java
@@ -0,0 +1,196 @@
+package com.doumee.core.jiandaoyun.api.jdy;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import  com.doumee.core.jiandaoyun.model.form.FormDataBatchCreateParam;
+import  com.doumee.core.jiandaoyun.model.form.FormDataBatchRemoveParam;
+import  com.doumee.core.jiandaoyun.model.form.FormDataBatchUpdateParam;
+import  com.doumee.core.jiandaoyun.model.form.FormDataCreateParam;
+import  com.doumee.core.jiandaoyun.model.form.FormDataDeleteParam;
+import  com.doumee.core.jiandaoyun.model.form.FormDataQueryParam;
+import  com.doumee.core.jiandaoyun.model.form.FormDataUpdateParam;
+import  com.doumee.core.jiandaoyun.model.http.ApiClient;
+import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.doumee.core.jiandaoyun.constants.HttpConstant.FORM_DATA_BASE_PATH;
+
+/**
+ * 琛ㄥ崟鏁版嵁鐩稿叧鎺ュ彛
+ */
+public class FormDataApiClient extends ApiClient {
+
+    private static final String DEFAULT_VERSION = "v5";
+    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
+
+    public FormDataApiClient(String apiKey, String host) {
+        super(apiKey, host);
+        this.setDefaultVersion(DEFAULT_VERSION);
+        this.setValidVersionList(VALID_VERSION_LIST);
+    }
+
+    @Override
+    public String generatePath(String version, String path) {
+        return super.getValidVersion(version) + FORM_DATA_BASE_PATH + path;
+    }
+
+
+    /**
+     * 鏂板缓鍗曟潯鏁版嵁鎺ュ彛
+     *
+     * @param createParam - 琛ㄥ崟鏁版嵁淇℃伅
+     * @return 鏂板鐨勬暟鎹俊鎭�
+     */
+    public Map<String, Object> singleDataCreate(FormDataCreateParam createParam, String version) throws Exception {
+        if (createParam == null || !createParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "create");
+        // 璇锋眰鍙傛暟 灏� queryParam 閲岄潰鐨勫睘鎬ц浆鎹㈡垚map
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(createParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+
+    /**
+     * 鏌ヨ鍗曟潯鏁版嵁鎺ュ彛
+     *
+     * @param queryParam - 鏌ヨ鍙傛暟
+     * @return 鏁版嵁淇℃伅
+     */
+    public Map<String, Object> singleDataQuery(FormDataQueryParam queryParam, String version) throws Exception {
+        if (queryParam == null || !queryParam.isSingleQueryValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "get");
+        Map<String, Object> data = new HashMap<>();
+        data.put("data_id", queryParam.getData_id());
+        data.put("app_id", queryParam.getApp_id());
+        data.put("entry_id", queryParam.getEntry_id());
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 淇敼鍗曟潯鏁版嵁鎺ュ彛
+     *
+     * @param updateParam - 鏇存柊鏁版嵁淇℃伅
+     * @return 鏇存柊鍚庣殑鏁版嵁淇℃伅
+     */
+    public Map<String, Object> singleDataUpdate(FormDataUpdateParam updateParam, String version) throws Exception {
+        if (updateParam == null || !updateParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "update");
+        // 璇锋眰鍙傛暟 灏� queryParam 閲岄潰鐨勫睘鎬ц浆鎹㈡垚map
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(updateParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+
+    /**
+     * 鍒櫎鍗曟潯鏁版嵁鎺ュ彛
+     *
+     * @param deleteParam - 鍒犻櫎鐨勬暟鎹俊鎭�
+     * @param version     - 鐗堟湰
+     * @return status
+     */
+    public Map<String, Object> singleDataRemove(FormDataDeleteParam deleteParam, String version) throws Exception {
+        if (deleteParam == null || !deleteParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "delete");
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(deleteParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鏂板缓澶氭潯鏁版嵁鎺ュ彛
+     *
+     * @param createParam - 鏂板缓鐨勬暟鎹俊鎭�
+     * @param version     - 鐗堟湰
+     * @return success_count
+     */
+    public Map<String, Object> batchDataCreate(FormDataBatchCreateParam createParam, String version) throws Exception {
+        if (createParam == null || !createParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "batch_create");
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(createParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鏌ヨ澶氭潯鏁版嵁鎺ュ彛
+     *
+     * @param queryParam - 鏌ヨ鍙傛暟
+     * @param version    - 鐗堟湰
+     * @return 鏁版嵁淇℃伅
+     */
+    public Map<String, Object> batchDataQuery(FormDataQueryParam queryParam, String version) throws Exception {
+        if (queryParam == null || !queryParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "list");
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 鍒犻櫎澶氭潯鏁版嵁鎺ュ彛
+     *
+     * @param removeParam - 鍒犻櫎鍙傛暟
+     * @param version     - 鐗堟湰
+     * @return status 鍜� success_count
+     */
+    public Map<String, Object> batchDataRemove(FormDataBatchRemoveParam removeParam, String version) throws Exception {
+        if (removeParam == null || !removeParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "batch_delete");
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(removeParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+    /**
+     * 淇敼澶氭潯鏁版嵁鎺ュ彛
+     *
+     * @param updateParam - 鏇存柊鏁版嵁鐨勪俊鎭�
+     * @param version     - 鐗堟湰
+     * @return status 鍜� success_count
+     */
+    public Map<String, Object> batchDataUpdate(FormDataBatchUpdateParam updateParam, String version) throws Exception {
+        if (updateParam == null || !updateParam.isValid()) {
+            throw new RuntimeException("param lack!");
+        }
+        String path = this.generatePath(version, "batch_update");
+        Map<String, Object> data =
+                new ObjectMapper().convertValue(updateParam, new TypeReference<Map<String, Object>>() {
+                });
+        HttpRequestParam param = new HttpRequestParam(path, data);
+        return this.sendPostRequest(param);
+    }
+
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java
new file mode 100644
index 0000000..9439704
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java
@@ -0,0 +1,58 @@
+package com.doumee.core.jiandaoyun.constants;
+
+/**
+ * http 鐩稿叧鐨勫父閲�
+ */
+public class HttpConstant {
+    public static final String HOST = "https://api.jiandaoyun.com/api/";
+
+    /**
+     * 閮ㄩ棬鐩稿叧鐨勬帴鍙e墠缂�
+     */
+    public static final String DEPT_BASE_PATH = "/corp/department/";
+
+    /**
+     * 鎴愬憳鐩稿叧鐨勬帴鍙e墠缂�
+     */
+    public static final String MEMBER_BASE_PATH = "/corp/user/";
+
+    /**
+     * 搴旂敤鐩稿叧鐨勬帴鍙e墠缂�
+     */
+    public static final String APP_BASE_PATH = "/app/";
+
+
+    /**
+     * 浼佷笟浜掕仈鐨勬帴鍙e墠缂�
+     */
+    public static final String CORP_COOP_BASE_PATH = "/corp/guest/";
+
+    /**
+     * 瑙掕壊鐩稿叧鐨勬帴鍙e墠缂�
+     */
+    public static final String ROLE_BASE_PATH = "/corp/role/";
+
+    /**
+     * 瑙掕壊缁勭浉鍏崇殑鎺ュ彛鍓嶇紑
+     */
+    public static final String ROLE_GROUP_BASE_PATH = "/corp/role_group/";
+
+    /**
+     * 琛ㄥ崟鐩稿叧鐨勬帴鍙e墠缂�
+     */
+    public static final String FORM_BASE_PATH = "/app/entry/";
+
+    /**
+     * 琛ㄥ崟鐩稿叧鐨勬帴鍙e墠缂�
+     */
+    public static final String FORM_DATA_BASE_PATH = "/app/entry/data/";
+
+    /**
+     * API_KEY
+     */
+    public static final String API_KEY = "JsmYomhn3dissp9ZJ6QeTpnH2xKoKZgw";
+
+    public static final String APP_ID = "APP_ID";
+
+    public static final String ENTRY_ID = "ENTRY_ID";
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/base/PageBaseParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/base/PageBaseParam.java
new file mode 100644
index 0000000..8f8c9e8
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/base/PageBaseParam.java
@@ -0,0 +1,43 @@
+package com.doumee.core.jiandaoyun.model.base;
+
+/**
+ * 鍒嗛〉鏌ヨ鍩哄弬
+ */
+public class PageBaseParam {
+    /**
+     * 璺宠繃鏁伴噺
+     */
+    private Integer skip;
+    /**
+     * 鏌ヨ鏁伴噺
+     */
+    private Integer limit;
+
+    public Integer getSkip() {
+        return skip;
+    }
+
+    public void setSkip(Integer skip) {
+        this.skip = skip;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public boolean isValid() {
+        return this.getLimit() != null && this.getSkip() != null;
+    }
+
+    @Override
+    public String toString() {
+        return "PageBaseParam{" +
+                "skip=" + skip +
+                ", limit=" + limit +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptCreateParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptCreateParam.java
new file mode 100644
index 0000000..391ac2f
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptCreateParam.java
@@ -0,0 +1,68 @@
+package com.doumee.core.jiandaoyun.model.dept;
+
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 鍒涘缓閮ㄩ棬鐨勫弬鏁�
+ */
+public class DeptCreateParam {
+
+    /**
+     * 閮ㄩ棬鍚嶇О 蹇呭~
+     */
+    private String name;
+
+    /**
+     * 鐖剁骇閮ㄩ棬缂栧彿 閫夊~
+     */
+    private Integer parent_no;
+
+    /**
+     * 閮ㄩ棬缂栧彿 閫夊~
+     */
+    private Integer dept_no;
+
+    public DeptCreateParam(String name) {
+        this.name = name;
+    }
+
+    public DeptCreateParam() {
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getParent_no() {
+        return parent_no;
+    }
+
+    public void setParent_no(Integer parent_no) {
+        this.parent_no = parent_no;
+    }
+
+    public Integer getDept_no() {
+        return dept_no;
+    }
+
+    public void setDept_no(Integer dept_no) {
+        this.dept_no = dept_no;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getName());
+    }
+
+    @Override
+    public String toString() {
+        return "DeptCreateParam{" +
+                "name='" + name + '\'' +
+                ", parent_no=" + parent_no +
+                ", dept_no=" + dept_no +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java
new file mode 100644
index 0000000..2f46174
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java
@@ -0,0 +1,23 @@
+package com.doumee.core.jiandaoyun.model.dept;
+
+import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 閮ㄩ棬瀹炰綋鍙傛暟
+ */
+
+@Data
+public class DeptEntityModel {
+
+  private Integer  dept_no;// Number  閮ㄩ棬缂栧彿锛屼紒涓氬唴鍞竴 涓嶅悓浼佷笟涔嬮棿鍙兘瀛樺湪閲嶅
+
+    private String   name  ;//String  閮ㄩ棬鍚嶇О
+    private Integer  parent_no;//   Number 鐖堕儴闂ㄧ紪鍙�   鍦ㄤ紒涓氫簰鑱旀帴鍙d腑(澶栭儴閮ㄩ棬)涓嶅瓨鍦�
+
+    private Integer   type ;//Number  閮ㄩ棬绫诲瀷 0: 甯歌閮� 2: 浼佷笟浜掕仈澶栭儴閮ㄩ棬
+    private Integer  status;// Number 閮ㄩ棬鐘舵�� 1: 浣跨敤涓殑閮ㄩ棬 -1: 闆嗘垚妯″紡涓嬪悓姝ュ悗鍒犻櫎鐨勯儴闂�
+    private String  integrate_id;//  String  闆嗘垚妯″紡鍚屾閮ㄩ棬鍏宠仈 ID  浠呭湪闆嗘垚妯″紡涓嬭繑鍥烇紝涓斿湪浼佷笟浜掕仈鎺ュ彛(澶栭儴閮ㄩ棬)涓嶈繑鍥�
+    private Integer    seq ;//number 閮ㄩ棬鎺掑簭  閮ㄩ棬鍦ㄧ埗閮ㄩ棬鍐呯殑搴忓彿锛屼粠灏忓埌澶ф帓鍒�
+
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/file/UploadTokenParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/file/UploadTokenParam.java
new file mode 100644
index 0000000..edb12aa
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/file/UploadTokenParam.java
@@ -0,0 +1,48 @@
+package com.doumee.core.jiandaoyun.model.file;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class UploadTokenParam {
+    private String appId;
+    private String entryId;
+    private String transactionId;
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public String getEntryId() {
+        return entryId;
+    }
+
+    public void setEntryId(String entryId) {
+        this.entryId = entryId;
+    }
+
+    public String getTransactionId() {
+        return transactionId;
+    }
+
+    public void setTransactionId(String transactionId) {
+        this.transactionId = transactionId;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getAppId()) && StringUtils.isNotBlank(this.getEntryId())
+                && StringUtils.isNotBlank(this.getTransactionId());
+    }
+
+
+    @Override
+    public String toString() {
+        return "UploadTokenParam{" +
+                "appId='" + appId + '\'' +
+                ", entryId='" + entryId + '\'' +
+                ", transactionId='" + transactionId + '\'' +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchCreateParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchCreateParam.java
new file mode 100644
index 0000000..da47787
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchCreateParam.java
@@ -0,0 +1,94 @@
+package com.doumee.core.jiandaoyun.model.form;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+
+public class FormDataBatchCreateParam {
+    /**
+     * 搴旂敤id
+     */
+    private String app_id;
+
+    /**
+     * 琛ㄥ崟id
+     */
+    private String entry_id;
+
+    /**
+     * 鏁版嵁
+     */
+    private List<Map<String, Object>> data_list;
+
+    private Boolean is_start_workflow;
+
+
+    private String transaction_id;
+
+    public FormDataBatchCreateParam() {
+    }
+
+    public FormDataBatchCreateParam(String app_id, String entry_id, List<Map<String, Object>> data_list) {
+        this.app_id = app_id;
+        this.entry_id = entry_id;
+        this.data_list = data_list;
+    }
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public String getEntry_id() {
+        return entry_id;
+    }
+
+    public void setEntry_id(String entry_id) {
+        this.entry_id = entry_id;
+    }
+
+    public List<Map<String, Object>> getData_list() {
+        return data_list;
+    }
+
+    public void setData_list(List<Map<String, Object>> data_list) {
+        this.data_list = data_list;
+    }
+
+    public Boolean getIs_start_workflow() {
+        return is_start_workflow;
+    }
+
+    public void setIs_start_workflow(Boolean is_start_workflow) {
+        this.is_start_workflow = is_start_workflow;
+    }
+
+    public String getTransaction_id() {
+        return transaction_id;
+    }
+
+    public void setTransaction_id(String transaction_id) {
+        this.transaction_id = transaction_id;
+    }
+
+
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id());
+    }
+
+    @Override
+    public String toString() {
+        return "FormDataBatchCreateParam{" +
+                "app_id='" + app_id + '\'' +
+                ", entry_id='" + entry_id + '\'' +
+                ", data_list=" + data_list +
+                ", is_start_workflow=" + is_start_workflow +
+                ", transaction_id='" + transaction_id + '\'' +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchRemoveParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchRemoveParam.java
new file mode 100644
index 0000000..a36f6fd
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchRemoveParam.java
@@ -0,0 +1,58 @@
+package com.doumee.core.jiandaoyun.model.form;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+public class FormDataBatchRemoveParam {
+
+    private List<String> data_ids;
+
+    private String app_id;
+
+    private String entry_id;
+
+    public FormDataBatchRemoveParam(String app_id, String entry_id, List<String> data_ids) {
+        this.data_ids = data_ids;
+        this.app_id = app_id;
+        this.entry_id = entry_id;
+    }
+
+    public List<String> getData_ids() {
+        return data_ids;
+    }
+
+    public void setData_ids(List<String> data_ids) {
+        this.data_ids = data_ids;
+    }
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public String getEntry_id() {
+        return entry_id;
+    }
+
+    public void setEntry_id(String entry_id) {
+        this.entry_id = entry_id;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id()) && CollectionUtils.isNotEmpty(data_ids);
+    }
+
+    @Override
+    public String toString() {
+        return "FormDataBatchRemoveParam{" +
+                "data_ids=" + data_ids +
+                ", app_id='" + app_id + '\'' +
+                ", entry_id='" + entry_id + '\'' +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchUpdateParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchUpdateParam.java
new file mode 100644
index 0000000..5d86c1f
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchUpdateParam.java
@@ -0,0 +1,95 @@
+package com.doumee.core.jiandaoyun.model.form;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+
+public class FormDataBatchUpdateParam {
+    /**
+     * 搴旂敤id
+     */
+    private String app_id;
+
+    /**
+     * 琛ㄥ崟id
+     */
+    private String entry_id;
+
+    private List<String> data_ids;
+
+    /**
+     * 鏁版嵁
+     */
+    private Map<String, Object> data;
+
+
+    private String transaction_id;
+
+    public FormDataBatchUpdateParam() {
+    }
+
+    public FormDataBatchUpdateParam(String app_id, String entry_id) {
+        this.app_id = app_id;
+        this.entry_id = entry_id;
+    }
+
+
+    public String getTransaction_id() {
+        return transaction_id;
+    }
+
+    public void setTransaction_id(String transaction_id) {
+        this.transaction_id = transaction_id;
+    }
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public String getEntry_id() {
+        return entry_id;
+    }
+
+    public void setEntry_id(String entry_id) {
+        this.entry_id = entry_id;
+    }
+
+    public List<String> getData_ids() {
+        return data_ids;
+    }
+
+    public void setData_ids(List<String> data_ids) {
+        this.data_ids = data_ids;
+    }
+
+    public Map<String, Object> getData() {
+        return data;
+    }
+
+    public void setData(Map<String, Object> data) {
+        this.data = data;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id())
+                && CollectionUtils.isNotEmpty(this.getData_ids());
+
+    }
+
+    @Override
+    public String toString() {
+        return "FormDataBatchUpdateParam{" +
+                "app_id='" + app_id + '\'' +
+                ", entry_id='" + entry_id + '\'' +
+                ", data_ids=" + data_ids +
+                ", data=" + data +
+                ", transaction_id='" + transaction_id + '\'' +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataCreateParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataCreateParam.java
new file mode 100644
index 0000000..189b623
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataCreateParam.java
@@ -0,0 +1,101 @@
+package com.doumee.core.jiandaoyun.model.form;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Map;
+
+public class FormDataCreateParam {
+    /**
+     * 搴旂敤id
+     */
+    private String app_id;
+
+    /**
+     * 琛ㄥ崟id
+     */
+    private String entry_id;
+
+    /**
+     * 鏁版嵁
+     */
+    private Map<String, Object> data;
+
+    private Boolean is_start_workflow;
+
+    private Boolean is_start_trigger;
+
+    private String transaction_id;
+
+    public FormDataCreateParam() {
+    }
+
+    public FormDataCreateParam(String app_id, String entry_id, Map<String, Object> data) {
+        this.app_id = app_id;
+        this.entry_id = entry_id;
+        this.data = data;
+    }
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public String getEntry_id() {
+        return entry_id;
+    }
+
+    public void setEntry_id(String entry_id) {
+        this.entry_id = entry_id;
+    }
+
+    public Map<String, Object> getData() {
+        return data;
+    }
+
+    public void setData(Map<String, Object> data) {
+        this.data = data;
+    }
+
+    public Boolean getIs_start_workflow() {
+        return is_start_workflow;
+    }
+
+    public void setIs_start_workflow(Boolean is_start_workflow) {
+        this.is_start_workflow = is_start_workflow;
+    }
+
+    public Boolean getIs_start_trigger() {
+        return is_start_trigger;
+    }
+
+    public void setIs_start_trigger(Boolean is_start_trigger) {
+        this.is_start_trigger = is_start_trigger;
+    }
+
+    public String getTransaction_id() {
+        return transaction_id;
+    }
+
+    public void setTransaction_id(String transaction_id) {
+        this.transaction_id = transaction_id;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id());
+    }
+
+    @Override
+    public String toString() {
+        return "FormDataCreateParam{" +
+                "app_id='" + app_id + '\'' +
+                ", entry_id='" + entry_id + '\'' +
+                ", data=" + data +
+                ", is_start_workflow=" + is_start_workflow +
+                ", is_start_trigger=" + is_start_trigger +
+                ", transaction_id='" + transaction_id + '\'' +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataDeleteParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataDeleteParam.java
new file mode 100644
index 0000000..dbfb200
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataDeleteParam.java
@@ -0,0 +1,76 @@
+package com.doumee.core.jiandaoyun.model.form;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class FormDataDeleteParam {
+    /**
+     * 搴旂敤id
+     */
+    private String app_id;
+
+    /**
+     * 琛ㄥ崟id
+     */
+    private String entry_id;
+
+    private String data_id;
+
+    private Boolean is_start_trigger;
+
+
+    public FormDataDeleteParam() {
+    }
+
+    public FormDataDeleteParam(String app_id, String entry_id, String data_id) {
+        this.app_id = app_id;
+        this.entry_id = entry_id;
+        this.data_id = data_id;
+    }
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public String getEntry_id() {
+        return entry_id;
+    }
+
+    public void setEntry_id(String entry_id) {
+        this.entry_id = entry_id;
+    }
+
+    public String getData_id() {
+        return data_id;
+    }
+
+    public void setData_id(String data_id) {
+        this.data_id = data_id;
+    }
+
+    public Boolean getIs_start_trigger() {
+        return is_start_trigger;
+    }
+
+    public void setIs_start_trigger(Boolean is_start_trigger) {
+        this.is_start_trigger = is_start_trigger;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id())
+                && StringUtils.isNotBlank(this.getData_id());
+    }
+
+    @Override
+    public String toString() {
+        return "FormDataDeleteParam{" +
+                "app_id='" + app_id + '\'' +
+                ", entry_id='" + entry_id + '\'' +
+                ", data_id='" + data_id + '\'' +
+                ", is_start_trigger=" + is_start_trigger +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataQueryParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataQueryParam.java
new file mode 100644
index 0000000..b51d99d
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataQueryParam.java
@@ -0,0 +1,114 @@
+package com.doumee.core.jiandaoyun.model.form;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+
+public class FormDataQueryParam {
+    /**
+     * 搴旂敤id
+     */
+    private String app_id;
+
+    /**
+     * 琛ㄥ崟id
+     */
+    private String entry_id;
+
+    /**
+     * 鏁版嵁ID
+     */
+    private String data_id;
+
+    /**
+     * 浠� 鏁版嵁ID 寮�濮嬭繑鍥� limit 鏉℃暟鎹�
+     */
+    private Integer limit;
+
+    /**
+     * 鏌ヨ鐨勫瓧娈�
+     */
+    private List<String> fields;
+
+    /**
+     * 杩囨护鏉′欢
+     */
+    private Map<String, Object> filter;
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id());
+    }
+
+    public boolean isSingleQueryValid() {
+        return this.isValid() && StringUtils.isNotBlank(this.getData_id());
+    }
+
+    public FormDataQueryParam() {
+    }
+
+    public FormDataQueryParam(String app_id, String entry_id) {
+        this.app_id = app_id;
+        this.entry_id = entry_id;
+    }
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public String getEntry_id() {
+        return entry_id;
+    }
+
+    public void setEntry_id(String entry_id) {
+        this.entry_id = entry_id;
+    }
+
+    public String getData_id() {
+        return data_id;
+    }
+
+    public void setData_id(String data_id) {
+        this.data_id = data_id;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public List<String> getFields() {
+        return fields;
+    }
+
+    public void setFields(List<String> fields) {
+        this.fields = fields;
+    }
+
+    public Map<String, Object> getFilter() {
+        return filter;
+    }
+
+    public void setFilter(Map<String, Object> filter) {
+        this.filter = filter;
+    }
+
+    @Override
+    public String toString() {
+        return "FormDataQueryParam{" +
+                "app_id='" + app_id + '\'' +
+                ", entry_id='" + entry_id + '\'' +
+                ", data_id='" + data_id + '\'' +
+                ", limit=" + limit +
+                ", fields=" + fields +
+                ", filter=" + filter +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataUpdateParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataUpdateParam.java
new file mode 100644
index 0000000..643d04a
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataUpdateParam.java
@@ -0,0 +1,105 @@
+package com.doumee.core.jiandaoyun.model.form;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Map;
+
+public class FormDataUpdateParam {
+    /**
+     * 搴旂敤id
+     */
+    private String app_id;
+
+    /**
+     * 琛ㄥ崟id
+     */
+    private String entry_id;
+
+    private String data_id;
+
+    /**
+     * 鏁版嵁
+     */
+    private Map<String, Object> data;
+
+
+    private Boolean is_start_trigger;
+
+    private String transaction_id;
+
+    public FormDataUpdateParam() {
+    }
+
+    public FormDataUpdateParam(String app_id, String entry_id, Map<String, Object> data) {
+        this.app_id = app_id;
+        this.entry_id = entry_id;
+        this.data = data;
+    }
+
+
+    public Map<String, Object> getData() {
+        return data;
+    }
+
+    public void setData(Map<String, Object> data) {
+        this.data = data;
+    }
+
+
+    public Boolean getIs_start_trigger() {
+        return is_start_trigger;
+    }
+
+    public void setIs_start_trigger(Boolean is_start_trigger) {
+        this.is_start_trigger = is_start_trigger;
+    }
+
+    public String getTransaction_id() {
+        return transaction_id;
+    }
+
+    public void setTransaction_id(String transaction_id) {
+        this.transaction_id = transaction_id;
+    }
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public String getEntry_id() {
+        return entry_id;
+    }
+
+    public void setEntry_id(String entry_id) {
+        this.entry_id = entry_id;
+    }
+
+    public String getData_id() {
+        return data_id;
+    }
+
+    public void setData_id(String data_id) {
+        this.data_id = data_id;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id())
+                && StringUtils.isNotBlank(this.getData_id());
+    }
+
+    @Override
+    public String toString() {
+        return "FormDataUpdateParam{" +
+                "app_id='" + app_id + '\'' +
+                ", entry_id='" + entry_id + '\'' +
+                ", data_id='" + data_id + '\'' +
+                ", data=" + data +
+                ", is_start_trigger=" + is_start_trigger +
+                ", transaction_id='" + transaction_id + '\'' +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormQueryParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormQueryParam.java
new file mode 100644
index 0000000..a796c19
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormQueryParam.java
@@ -0,0 +1,30 @@
+package com.doumee.core.jiandaoyun.model.form;
+
+import com.doumee.core.jiandaoyun.model.base.PageBaseParam;
+import org.apache.commons.lang3.StringUtils;
+
+public class FormQueryParam extends PageBaseParam {
+
+    private String app_id;
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getApp_id()) && super.isValid();
+    }
+
+    @Override
+    public String toString() {
+        return "FormQueryParam{" +
+                "skip=" + super.getSkip() +
+                ", limit=" + super.getLimit() +
+                ", app_id=" + app_id +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java
new file mode 100644
index 0000000..ce93887
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java
@@ -0,0 +1,214 @@
+package com.doumee.core.jiandaoyun.model.http;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.HttpsUtil;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.Charsets;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.StringBody;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.io.EmptyInputStream;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.ssl.SSLContextBuilder;
+import com.doumee.core.jiandaoyun.util.LimitUtil;
+
+import javax.net.ssl.SSLContext;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+public abstract class ApiClient {
+
+    /**
+     * apiKey
+     */
+    private String apiKey;
+
+    /**
+     * 鍦板潃
+     */
+    private String host;
+
+    /**
+     * 榛樿鐗堟湰
+     */
+    private String defaultVersion;
+
+    /**
+     * 鍚堟硶鐗堟湰
+     */
+    private List<String> validVersionList;
+
+    public ApiClient(String apiKey, String host) {
+        this.apiKey = apiKey;
+        this.host = host;
+    }
+
+    public String getApiKey() {
+        return apiKey;
+    }
+
+    public void setApiKey(String apiKey) {
+        this.apiKey = apiKey;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getDefaultVersion() {
+        return defaultVersion;
+    }
+
+    public void setDefaultVersion(String defaultVersion) {
+        this.defaultVersion = defaultVersion;
+    }
+
+    public List<String> getValidVersionList() {
+        return validVersionList;
+    }
+
+    public void setValidVersionList(List<String> validVersionList) {
+        this.validVersionList = validVersionList;
+    }
+
+
+    /**
+     * 鐢熸垚 path
+     *
+     * @param version - 鐗堟湰鍙�
+     * @param path    - 璺緞
+     * @return 鎺ュ彛鐨勮矾寰�
+     */
+    public abstract String generatePath(String version, String path);
+
+    /**
+     * 鑾峰緱鍚堟硶鐨勭増鏈彿
+     *
+     * @param version - 鐗堟湰鍙�
+     * @return 鍚堟硶鐨勭増鏈彿
+     */
+    public String getValidVersion(String version) {
+        if (this.getValidVersionList() != null && this.getValidVersionList().contains(version)) {
+            return version;
+        }
+        return this.getDefaultVersion();
+    }
+
+    /**
+     * 鍙戦�丳OST璇锋眰
+     *
+     * @param param - 璇锋眰鍙傛暟
+     * @return 鎺ュ彛杩斿洖鍙傛暟
+     */
+    public Map<String, Object> sendPostRequest(HttpRequestParam param) throws Exception {
+        if (param == null || StringUtils.isBlank(param.getPath())) {
+            throw new RuntimeException("缂哄け鍙傛暟锛�");
+        }
+        HttpClient client = getSSLHttpClient();
+        Header[] headers = getHttpHeaders(this.getApiKey());
+        String url = this.host + param.getPath();
+        HttpRequestBase request = new HttpPost(url);
+
+        // 璇锋眰鍙傛暟
+        if (param.getData() != null) {
+            ObjectMapper queryMap = new ObjectMapper();
+            HttpEntity entity = new StringEntity(queryMap.writeValueAsString(param.getData()), Charsets.UTF_8);
+            ((HttpPost) request).setEntity(entity);
+        }
+        // 璁剧疆璇锋眰澶�
+        request.setHeaders(headers);
+        // 闄愭祦闃诲
+        LimitUtil.tryBeforeRun();
+        // 鍙戦�佽姹傚苟鑾峰彇杩斿洖缁撴灉
+        HttpResponse response = client.execute(request);
+        // 杩斿洖鐘舵�佺爜
+        int statusCode = response.getStatusLine().getStatusCode();
+        ObjectMapper mapper = new ObjectMapper();
+        Map<String, Object> result = new HashMap<>();
+        // 鏈夐儴鍒嗘帴鍙g洿鎺ヨ繑鍥� 娌℃湁鏁版嵁
+        // fix锛氫笉鑳界敤content-length澶т簬0鍒ゆ柇锛宺esponse header涓篻zip缂栫爜鏂瑰紡鐨勬儏鍐典笅涓�-1
+        if (!(response.getEntity().getContent() instanceof EmptyInputStream)) {
+            result = (Map<String, Object>) mapper.readValue(response.getEntity().getContent(), Object.class);
+        }
+        if (statusCode >= 400) {
+            throw new RuntimeException("璇锋眰閿欒锛宻tatusCode:" + statusCode + ",Error Code: " + result.get("code") + ", Error Msg: " + result.get("msg"));
+        } else {
+            // 澶勭悊杩斿洖缁撴灉
+            return result;
+        }
+    }
+
+    private static HttpClient getSSLHttpClient() throws Exception {
+        //淇′换鎵�鏈�
+        SSLContext sslContext =
+                new SSLContextBuilder().loadTrustMaterial(null, (chain, authType) -> true).build();
+        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
+        return HttpClients.custom().setSSLSocketFactory(sslsf).build();
+    }
+
+    /**
+     * 鑾峰彇璇锋眰澶翠俊鎭�
+     *
+     * @return 璇锋眰澶翠俊鎭�
+     */
+    private Header[] getHttpHeaders(String apiKey) {
+        List<Header> headerList = new ArrayList<>();
+        headerList.add(new BasicHeader("Authorization", "Bearer " + apiKey));
+        headerList.add(new BasicHeader("Content-Type", "application/json;charset=utf-8"));
+        return headerList.toArray(new Header[headerList.size()]);
+    }
+
+    public Map<String, Object> httpPostFile(String url, String token, File file) throws Exception {
+        HttpClient client = getSSLHttpClient();
+        HttpPost httpPost = new HttpPost(url);
+        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+        httpPost.addHeader("token", token);
+        builder.addBinaryBody("file", file, ContentType.MULTIPART_FORM_DATA, file.getName());
+        // 浼犻�� token
+        builder.addTextBody("token", token);
+        StringBody tokenBody = new StringBody(token, ContentType.MULTIPART_FORM_DATA);
+        builder.addPart("token", tokenBody);
+        HttpEntity entity = builder.build();
+        httpPost.setEntity(entity);
+        // 闄愭祦闃诲
+        LimitUtil.tryBeforeRun();
+        // 鍙戦�佽姹傚苟鑾峰彇杩斿洖缁撴灉
+        HttpResponse response = client.execute(httpPost);
+        // 杩斿洖鐘舵�佺爜
+        int statusCode = response.getStatusLine().getStatusCode();
+        ObjectMapper mapper = new ObjectMapper();
+        Map<String, Object> result = new HashMap<>();
+        // 鏈夐儴鍒嗘帴鍙g洿鎺ヨ繑鍥� 娌℃湁鏁版嵁
+        // fix锛氫笉鑳界敤content-length澶т簬0鍒ゆ柇锛宺esponse header涓篻zip缂栫爜鏂瑰紡鐨勬儏鍐典笅涓�-1
+        if (!(response.getEntity().getContent() instanceof EmptyInputStream)) {
+            result = (Map<String, Object>) mapper.readValue(response.getEntity().getContent(), Object.class);
+        }
+        if (statusCode >= 400) {
+            throw new RuntimeException("璇锋眰閿欒锛宻tatusCode:" + statusCode + ",Error Code: " + result.get("code") + ", Error Msg: " + result.get("msg"));
+        } else {
+            // 澶勭悊杩斿洖缁撴灉
+            return result;
+        }
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/HttpRequestParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/HttpRequestParam.java
new file mode 100644
index 0000000..a27fe4b
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/HttpRequestParam.java
@@ -0,0 +1,48 @@
+package com.doumee.core.jiandaoyun.model.http;
+
+import java.util.Map;
+
+public class HttpRequestParam {
+
+    /**
+     * 璇锋眰璺緞
+     */
+    private String path;
+
+    /**
+     * 璇锋眰鍙傛暟
+     */
+    private Map<String, Object> data;
+
+    public HttpRequestParam() {
+    }
+
+    public HttpRequestParam(String path, Map<String, Object> data) {
+        this.path = path;
+        this.data = data;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public Map<String, Object> getData() {
+        return data;
+    }
+
+    public void setData(Map<String, Object> data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "HttpRequestParam{" +
+                "path='" + path + '\'' +
+                ", data=" + data +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleGroupListQueryParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleGroupListQueryParam.java
new file mode 100644
index 0000000..119a70a
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleGroupListQueryParam.java
@@ -0,0 +1,35 @@
+package com.doumee.core.jiandaoyun.model.role;
+
+
+import  com.doumee.core.jiandaoyun.model.base.PageBaseParam;
+
+public class RoleGroupListQueryParam extends PageBaseParam {
+    private boolean has_internal;
+    private boolean has_sync;
+
+    public boolean isHas_internal() {
+        return has_internal;
+    }
+
+    public void setHas_internal(boolean has_internal) {
+        this.has_internal = has_internal;
+    }
+
+    public boolean isHas_sync() {
+        return has_sync;
+    }
+
+    public void setHas_sync(boolean has_sync) {
+        this.has_sync = has_sync;
+    }
+
+    @Override
+    public String toString() {
+        return "RoleGroupListQueryParam{" +
+                "skip=" + super.getSkip() +
+                ", limit=" + super.getLimit() +
+                ", has_internal=" + has_internal +
+                ", has_sync=" + has_sync +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleListQueryParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleListQueryParam.java
new file mode 100644
index 0000000..1ac66e0
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleListQueryParam.java
@@ -0,0 +1,40 @@
+package com.doumee.core.jiandaoyun.model.role;
+
+
+import  com.doumee.core.jiandaoyun.model.base.PageBaseParam;
+
+public class RoleListQueryParam extends PageBaseParam {
+
+    private boolean has_internal;
+    private boolean has_sync;
+
+    public boolean isHas_internal() {
+        return has_internal;
+    }
+
+    public void setHas_internal(boolean has_internal) {
+        this.has_internal = has_internal;
+    }
+
+    public boolean isHas_sync() {
+        return has_sync;
+    }
+
+    public void setHas_sync(boolean has_sync) {
+        this.has_sync = has_sync;
+    }
+
+    public boolean isValid() {
+        return super.isValid();
+    }
+
+    @Override
+    public String toString() {
+        return "RoleListQueryParam{" +
+                "skip=" + super.getSkip() +
+                ", limit=" + super.getLimit() +
+                ", has_internal=" + has_internal +
+                ", has_sync=" + has_sync +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleMemberQueryParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleMemberQueryParam.java
new file mode 100644
index 0000000..4e9a6fd
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleMemberQueryParam.java
@@ -0,0 +1,28 @@
+package com.doumee.core.jiandaoyun.model.role;
+
+import  com.doumee.core.jiandaoyun.model.base.PageBaseParam;
+
+public class RoleMemberQueryParam extends PageBaseParam {
+    private Integer role_no;
+
+    public Integer getRole_no() {
+        return role_no;
+    }
+
+    public void setRole_no(Integer role_no) {
+        this.role_no = role_no;
+    }
+
+    public boolean isValid() {
+        return this.getRole_no() != null && super.isValid();
+    }
+
+    @Override
+    public String toString() {
+        return "RoleMemberQueryParam{" +
+                "skip=" + super.getSkip() +
+                ", limit=" + super.getLimit() +
+                ", role_no=" + role_no +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleUpdateParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleUpdateParam.java
new file mode 100644
index 0000000..185d2c6
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleUpdateParam.java
@@ -0,0 +1,47 @@
+package com.doumee.core.jiandaoyun.model.role;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class RoleUpdateParam {
+
+    private String name;
+    private Integer group_no;
+    private Integer role_no;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getGroup_no() {
+        return group_no;
+    }
+
+    public void setGroup_no(Integer group_no) {
+        this.group_no = group_no;
+    }
+
+    public Integer getRole_no() {
+        return role_no;
+    }
+
+    public void setRole_no(Integer role_no) {
+        this.role_no = role_no;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getName()) && this.getRole_no() != null && this.getGroup_no() != null;
+    }
+
+    @Override
+    public String toString() {
+        return "RoleUpdateParam{" +
+                "name='" + name + '\'' +
+                ", group_no=" + group_no +
+                ", role_no=" + role_no +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserCreateParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserCreateParam.java
new file mode 100644
index 0000000..71b1798
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserCreateParam.java
@@ -0,0 +1,65 @@
+package com.doumee.core.jiandaoyun.model.user;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+public class UserCreateParam {
+
+    private String name;
+
+    /**
+     * 鐢ㄦ埛鍚� 鐢辨暟瀛楀瓧姣嶅拰涓嬪垝绾跨粍鎴�
+     */
+    private String username;
+
+    /**
+     * 闈炲繀濉�
+     */
+    private List<Integer> departments;
+
+    public UserCreateParam() {
+    }
+
+    public UserCreateParam(String name, String userName) {
+        this.name = name;
+        this.username = userName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public List<Integer> getDepartments() {
+        return departments;
+    }
+
+    public void setDepartments(List<Integer> departments) {
+        this.departments = departments;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getName()) && StringUtils.isNotBlank(this.getUsername());
+    }
+
+    @Override
+    public String toString() {
+        return "UserCreateParam{" +
+                "name='" + name + '\'' +
+                ", username='" + username + '\'' +
+                ", departments=" + departments +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserEntityModel.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserEntityModel.java
new file mode 100644
index 0000000..9e304a2
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserEntityModel.java
@@ -0,0 +1,28 @@
+package com.doumee.core.jiandaoyun.model.user;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 浜哄憳瀹炰綋鍙傛暟
+ */
+
+@Data
+public class UserEntityModel {
+
+  private Integer  dept_no;// Number  閮ㄩ棬缂栧彿锛屼紒涓氬唴鍞竴 涓嶅悓浼佷笟涔嬮棿鍙兘瀛樺湪閲嶅
+
+  private String  username;// String  鎴愬憳鐨勭紪鍙凤紝浼佷笟鍐呭敮涓�  涓嶅悓浼佷笟涔嬮棿鍙兘瀛樺湪閲嶅
+
+  private String  name;//  String 鏄电О
+
+  private List<Long> departments;//Number[]    鎴愬憳鎵�鍦ㄩ儴闂ㄧ紪鍙峰垪琛�
+
+  private Integer type;//Number鎴愬憳绫� 0: 甯歌鎴愬憳2: 浼佷笟浜掕仈澶栭儴瀵规帴浜�
+
+  private Integer   status;//  Number 鎴愬憳鐘舵�� 0: 鏈‘璁ょ殑鎴愬憳 1: 宸插姞鍏�
+
+  private String   integrate_id;//  String  闆嗘垚妯″紡鍚屾鎴愬憳鍏宠仈 ID   浠呭湪闆嗘垚妯″紡涓嬭繑鍥烇紝涓斿湪浼佷笟浜掕仈鎺ュ彛(澶栭儴瀵规帴浜�)涓嶈繑鍥�
+
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserUpdateParam.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserUpdateParam.java
new file mode 100644
index 0000000..0c203de
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserUpdateParam.java
@@ -0,0 +1,62 @@
+package com.doumee.core.jiandaoyun.model.user;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+public class UserUpdateParam {
+
+    private String name;
+
+    private String userName;
+
+    /**
+     * 闈炲繀濉�
+     */
+    private List<Integer> departmentList;
+
+    public UserUpdateParam() {
+    }
+
+    public UserUpdateParam(String name, String userName) {
+        this.name = name;
+        this.userName = userName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public List<Integer> getDepartmentList() {
+        return departmentList;
+    }
+
+    public void setDepartmentList(List<Integer> departmentList) {
+        this.departmentList = departmentList;
+    }
+
+    public boolean isValid() {
+        return StringUtils.isNotBlank(this.getName()) && StringUtils.isNotBlank(this.getUserName());
+    }
+
+    @Override
+    public String toString() {
+        return "UserCreateParam{" +
+                "name='" + name + '\'' +
+                ", userName='" + userName + '\'' +
+                ", departmentList=" + departmentList +
+                '}';
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/jiandaoyun/util/LimitUtil.java b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/util/LimitUtil.java
new file mode 100644
index 0000000..ddbf736
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/jiandaoyun/util/LimitUtil.java
@@ -0,0 +1,40 @@
+package com.doumee.core.jiandaoyun.util;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class LimitUtil {
+    private static volatile int seq = 0;
+
+    private static final int bucket = 1000;
+
+    private static volatile List<Long> requestTimeList = Arrays.asList(0L, 0L, 0L, 0L, 0L);
+
+    private LimitUtil() {
+    }
+
+    /**
+     * 闄愭祦瀹炵幇 鐢� static synchronized 淇グ 琛ㄧず 瀵圭被涓婇攣
+     *
+     * @throws InterruptedException
+     */
+    public static synchronized void tryBeforeRun() throws InterruptedException {
+        long now = System.currentTimeMillis();
+        // 褰撳墠鏃堕棿 涓� 鍓峫imit涓姹傜殑鏃堕棿 浣滄瘮杈�
+        long interval = now - requestTimeList.get(seq);
+        if (interval < 0) {
+            // 鎵ц鏃堕棿: t[seq]+bucket=now-interval+bucket
+            // 绛夊緟鏃堕棿: bucket-interval
+            Thread.sleep(bucket - interval);
+            // 閲嶆柊绛夊緟
+            tryBeforeRun();
+        }
+        if (interval < bucket) {
+            requestTimeList.set(seq, requestTimeList.get(seq) + bucket);
+            Thread.sleep(bucket - interval);
+        } else {
+            requestTimeList.set(seq, now);
+        }
+        seq = (seq + 1) % requestTimeList.size();
+    }
+}
diff --git a/server/system_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/system_service/src/main/java/com/doumee/dao/business/model/Member.java
index 4ea043a..19a68c3 100644
--- a/server/system_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/system_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -304,5 +304,8 @@
     @ApiModelProperty(value = "鏄惁鏌ヨ閽ュ寵鏌滄牎楠屼汉鍛橈細0=鍚︼紱1=鏄�" )
     @TableField(exist = false)
     private Integer queryAuth;
+    @ApiModelProperty(value = "閮ㄩ棬缂栫爜闆嗗悎" )
+    @TableField(exist = false)
+    private List<Long>  companyIdList;
 
 }
diff --git a/server/system_timer/src/main/resources/application-dev.yml b/server/system_timer/src/main/resources/application-dev.yml
index ce7c96f..f7ca65b 100644
--- a/server/system_timer/src/main/resources/application-dev.yml
+++ b/server/system_timer/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Doumee@168
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/system_timer/src/main/resources/application-pro.yml b/server/system_timer/src/main/resources/application-pro.yml
index 0f85cb5..5ec4cc6 100644
--- a/server/system_timer/src/main/resources/application-pro.yml
+++ b/server/system_timer/src/main/resources/application-pro.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://localhost:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Whyc@2025
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/system_timer/src/main/resources/application-test.yml b/server/system_timer/src/main/resources/application-test.yml
index 63519a1..1887999 100644
--- a/server/system_timer/src/main/resources/application-test.yml
+++ b/server/system_timer/src/main/resources/application-test.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Doumee@168
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/system_timer/src/main/resources/bootstrap-pro.yml b/server/system_timer/src/main/resources/bootstrap-pro.yml
index caac07c..e237994 100644
--- a/server/system_timer/src/main/resources/bootstrap-pro.yml
+++ b/server/system_timer/src/main/resources/bootstrap-pro.yml
@@ -25,6 +25,6 @@
       #        data-id: com.doumee.meeting.admin
       discovery:
         server-addr: http://localhost:8848 #閰嶇疆Nacos鍦板潃
-        namespace: wuhuyancao
+        namespace: maanshanyancao
         username: nacos
         password: nacos
\ No newline at end of file
diff --git a/server/visits/admin_timer/src/main/resources/bootstrap-pro.yml b/server/visits/admin_timer/src/main/resources/bootstrap-pro.yml
index c8032c1..a903b81 100644
--- a/server/visits/admin_timer/src/main/resources/bootstrap-pro.yml
+++ b/server/visits/admin_timer/src/main/resources/bootstrap-pro.yml
@@ -23,7 +23,7 @@
       #        data-id: com.doumee.meeting.admin
       discovery:
         server-addr: http://localhost:8848 #閰嶇疆Nacos鍦板潃
-        namespace: wuhuyancao
+        namespace: maanshanyancao
         username: nacos
         password: nacos
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
index d4cb723..eb9a4c4 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
@@ -181,10 +181,17 @@
     @ApiOperation("鍏ㄩ噺閮ㄩ棬淇℃伅鍚屾 - 閽夐拤")
     @PostMapping("/syncAllDingding")
 //    @CloudRequiredPermission("business:company:sync")
-    public ApiResponse syncAllDingding() throws ApiException {
+    public ApiResponse syncAllDingding()  {
         companyService.syncDDCompany();
         return ApiResponse.success("鍚屾鎴愬姛");
     }
+    @ApiOperation("鍏ㄩ噺閮ㄩ棬淇℃伅鍚屾 - 閽夐拤")
+    @PostMapping("/syncAllJdy")
+//    @CloudRequiredPermission("business:company:sync")
+    public ApiResponse syncAllJyd() throws ApiException {
+        companyService.syncJdyCompany();
+        return ApiResponse.success("鍚屾鎴愬姛");
+    }
 
 
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
index b8f1acc..9516670 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -336,6 +336,12 @@
         }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self){
             hkSyncOrgUserFromSelfService.syncUserData(this.getLoginUser(token));
             return ApiResponse.success("鍚屾鎴愬姛");
+        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.jdy){
+            memberService.syncJdyUserInfo();
+            return ApiResponse.success("鍚屾鎴愬姛");
+        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.dingding){
+            memberService.syncDDUserInfo();
+            return ApiResponse.success("鍚屾鎴愬姛");
         }
         return ApiResponse.success("鍚屾鎴愬姛");
     }
@@ -377,5 +383,13 @@
         return ApiResponse.success("鍚屾鎴愬姛");
     }
 
+    @ApiOperation("鍏ㄩ噺浜哄憳淇℃伅鍚屾 - 绠�閬撲簯")
+    @PostMapping("/syncAllJdy")
+//    @CloudRequiredPermission("business:company:sync")
+    public ApiResponse syncAllJdy() throws ApiException {
+        memberService.syncJdyUserInfo();
+        return ApiResponse.success("鍚屾鎴愬姛");
+    }
+
 
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java
new file mode 100644
index 0000000..0ab5635
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java
@@ -0,0 +1,142 @@
+package com.doumee.cloud.web;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.FacePictureCheckRequest;
+import com.doumee.core.haikang.model.param.respose.FacePictureCheckResponse;
+import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.FtpUtil;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.core.utils.aliyun.ALiYunUtil;
+import com.doumee.dao.business.model.Cars;
+import com.doumee.dao.business.model.JkCabinetLog;
+import com.doumee.dao.web.reqeust.VisitRecordDTO;
+import com.doumee.dao.web.response.VisitRecordVO;
+import com.doumee.service.business.third.model.ApiResponse;
+import com.doumee.service.business.third.model.PageData;
+import com.doumee.service.business.third.model.PageWrap;
+import com.sun.net.httpserver.HttpExchange;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+import javax.imageio.ImageIO;
+import javax.imageio.stream.ImageOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.URI;
+import java.util.*;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/02/14 11:14
+ */
+@Api(tags = "銆愮畝閬撲簯銆戜笟鍔℃帴鍙�")
+@Trace(exclude = true)
+@RestController
+@LoginNoRequired
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/jiandaoyun")
+@Slf4j
+public class JiandaoyunCloudController extends BaseController {
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @ApiOperation("绠�閬撲簯鎺ㄩ�佺敤杞︾敵璇�")
+    @PostMapping("/pushCarApply")
+    public void pushCarApply (HttpServletRequest request, HttpServletResponse response) {
+        log.error("绠�閬撲簯=========getRequestURI锛�"+request.getRequestURI());
+        log.error("绠�閬撲簯=========getRequestURL锛�"+request.getRequestURL());
+        try {
+            String jdy = request.getHeader("x-jdy-signature");
+            StringBuilder json = new StringBuilder();
+            String line;
+            BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
+            while ((line = reader.readLine()) != null) {
+                json.append(line);
+            }
+//            String payload = IOUtils.toString(request.getInputStream(), "utf-8");
+            String payload = json.toString();
+            String uri = request.getRequestURI();
+            Map<String, String> parameterMap = parseParameter(request.getQueryString());
+            String nonce = parameterMap.get("nonce");
+            String timestamp = parameterMap.get("timestamp");
+            String signature = getSignature(nonce, payload, SECRET, timestamp);
+            log.error("绠�閬撲簯=========nonce锛�"+nonce);
+            log.error("绠�閬撲簯=========timestamp锛�"+timestamp);
+            log.error("绠�閬撲簯=========payload锛�"+payload);
+            log.error("绠�閬撲簯=========绛惧悕锛�"+jdy);
+            log.error("绠�閬撲簯=========绛惧悕(姝g‘锛夛細"+signature);
+            if (!signature.equals(jdy)) {
+                response.setStatus(401);
+                response.getWriter().write("fail");
+                response.getWriter().close();;
+                return ;
+            }
+            response.setStatus(200);
+            response.getWriter().write("success");
+            response.getWriter().close();
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("绠�閬撲簯=========寮傚父锛�"+e.getMessage());
+        }
+
+    }
+    @ApiOperation("绠�閬撲簯鎻愪氦閽ュ寵鍊熻繕淇℃伅")
+    @PostMapping("/submitKeyRecord")
+    public ApiResponse<JkCabinetLog> submitKeyRecord (HttpServletRequest request, HttpServletResponse response) {
+        JkCabinetLog log = new JkCabinetLog();
+        log.setKeyId(1);
+        log.setCreateDate(new Date());
+        log.setMemberName("寮犱笁");
+        return  ApiResponse.success(log);
+    }
+
+    public  static final String SECRET ="yKSKuO0LoFf06jWGrwwuGudK";
+    private static String getSignature(String nonce, String payload, String secret, String timestamp) {
+        return DigestUtils.sha1Hex(nonce + ":" + payload + ":" + secret + ":" + timestamp);
+    }
+
+    private static Map<String, String> parseParameter(String query) {
+        Map<String, String> paramMap = new HashMap<String, String>();
+        String[] params = query.split("&");
+        for (String param : params) {
+            String[] keyValue = param.split("=");
+            paramMap.put(keyValue[0], keyValue[1]);
+        }
+        return paramMap;
+    }
+
+    public static void main(String[] args) {
+        String url = "https://api.jiandaoyun.com/api/v1/automation/tenant/6909b792324dc197821895d1/hooks/6909d0fbdb93690b128a0d56b068192dc4a9c9722dbac428";
+//        String url = "https://api.jiandaoyun.com/api/v1/automation/tenant/6909b792324dc197821895d1/hooks/6909d0fbdb93690af97e41d1b068192dc4a9705aca3321e2";
+        JSONObject object = new JSONObject();
+        object.put("create_date","20251104160000");
+        object.put("start_date",System.currentTimeMillis() );
+        object.put("end_date", System.currentTimeMillis() + 24*3600*1000);
+        object.put("id","10000020251105");
+        object.put("type",1);
+        String result = HttpsUtil.postJson(url,JSONObject.toJSONString(object));
+        System.out.println(result);
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
index 49606a5..2e1efaa 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
@@ -16,7 +16,7 @@
       discovery:
         server-addr: http://192.168.0.7:8848 #閰嶇疆Nacos鍦板潃
 #        namespace: dmvisit
-        namespace: wuhu_visit_dev1
+        namespace: wuhu_visit_dev
         username: nacos
         password: nacos
 knife4j:
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap-pro.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap-pro.yml
index f0af774..9e9fa63 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap-pro.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap-pro.yml
@@ -23,7 +23,7 @@
 #        data-id: com.doumee.meeting.admin
       discovery:
         server-addr: http://localhost:8848 #閰嶇疆Nacos鍦板潃
-        namespace: wuhuyancao
+        namespace: maanshanyancao
         username: nacos
         password: nacos
 
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
index 86e11a3..9dc10e9 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: test
+    active: dev
   application:
     name: visitsAdmin
     # 瀹夊叏閰嶇疆
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
index 87e5ffc..86b12f6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
@@ -188,7 +188,7 @@
                     thisLevelList.addAll(rsp.getResult());
                 }
             }else{
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),rsp.getMessage());
+               throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),rsp.getMessage());
             }
         }
         return thisLevelList;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java
index 5087d55..03d60d8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java
@@ -132,5 +132,7 @@
 
     void ddPushCompanyInfo(String eventType, JSONObject eventData) throws ApiException;
 
-    String syncDDCompany()throws ApiException;
+    String syncDDCompany()  ;
+
+    String syncJdyCompany();
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index 024145c..ff8998b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -212,7 +212,8 @@
 
     void initPinyinTool();
 
-    void syncDDUserInfo() throws ApiException;
+    String syncJdyUserInfo();
+    void syncDDUserInfo() ;
 
     void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java
index c4f8caa..c40aed4 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java
@@ -48,8 +48,7 @@
         if(Objects.isNull(approveParam)
                 ||Objects.isNull(approveParam.getType())
                 ||Objects.isNull(approveParam.getMemberType())
-                ||Objects.isNull(approveParam.getLevel())
-        ){
+                ||Objects.isNull(approveParam.getLevel())){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         if(approveParam.getType().equals(Constants.ZERO)){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index 575f5a3..6bc2a13 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -1,5 +1,7 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -23,6 +25,11 @@
 import com.doumee.core.haikang.model.param.respose.OrgOrUserAddResponse;
 import com.doumee.core.haikang.model.param.respose.OrgUpdateFailureResponse;
 import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.jiandaoyun.api.arch.DeptApiClient;
+import com.doumee.core.jiandaoyun.constants.HttpConstant;
+import com.doumee.core.jiandaoyun.model.dept.DeptEntityModel;
+import com.doumee.core.wms.model.response.WmsBaseDataResponse;
+import com.doumee.core.wms.model.response.WmsBaseResponse;
 import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
@@ -808,10 +815,15 @@
                         .eq(Company::getErpId,jsonArray.getLong(i))
                 );
                 OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse = dingTalk.syncDepartmentInfo(jsonArray.getLong(i));
+                Company param = new Company();
+                param.setName(deptGetResponse.getName());
+                param.setErpId(deptGetResponse.getDeptId().toString());
+                param.setErpParentId(deptGetResponse.getParentId().toString());
                 if(Objects.isNull(company)){
-                    getAddCompanyModel(deptGetResponse,company);
+                    param.setSortnum(deptGetResponse.getOrder().intValue());//榛樿鏈�涓婇潰
+                    getAddCompanyModel(param);
                 }else{
-                    getUpdateCompanyModel(deptGetResponse,company);
+                    getUpdateCompanyModel(param,company);
                 }
             }
         }
@@ -850,35 +862,106 @@
     }
 
     @Override
-    public String syncDDCompany() throws ApiException {
-        List<OapiV2DepartmentGetResponse.DeptGetResponse> list = dingTalk.syncAllDDDepartmentList();
-        if(list !=null && list.size()>0){
-            List<Company> addList = new ArrayList<>();
-            List<Company> updateList = new ArrayList<>();
-            List<Long> delIds = new ArrayList<>();//淇敼涓轰娇鐢ㄩ拤閽塱d  erpId
-            List<Company>  allList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
-                    .eq(Company::getIsdeleted,Constants.ZERO).eq(Company::getType,Constants.ONE));
-            dealCompanyChangeList(list,addList,updateList,delIds,allList);
-            if(delIds.size()>0){
-                syncDelCompany(delIds);
+    public String syncDDCompany()  {
+        try {
+            List<OapiV2DepartmentGetResponse.DeptGetResponse> list = dingTalk.syncAllDDDepartmentList();
+            if(list !=null && list.size()>0){
+                List<Company> addList = new ArrayList<>();
+                List<Company> updateList = new ArrayList<>();
+                List<Long> delIds = new ArrayList<>();//淇敼涓轰娇鐢ㄩ拤閽塱d  erpId
+                List<Company>  allList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
+                        .eq(Company::getIsdeleted,Constants.ZERO).eq(Company::getType,Constants.ONE));
+                dealCompanyChangeList(list,addList,updateList,delIds,allList);
+                if(delIds.size()>0){
+                    syncDelCompany(delIds);
+                }
+                return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+updateList.size()+"銆戞潯锛屽垹闄ゃ��"+delIds.size()+"銆戞潯";
+            }else{
+                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾閽夐拤鏁版嵁涓虹┖锛�");
             }
-            return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+updateList.size()+"銆戞潯锛屽垹闄ゃ��"+delIds.size()+"銆戞潯";
-        }else{
-            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾閽夐拤鏁版嵁涓虹┖锛�");
+        }catch (Exception e){
+            e.printStackTrace();
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾閽夐拤鏁版嵁寮傚父锛�");
         }
     }
+    @Override
+    public String syncJdyCompany() {
+        //{
+        //  "dept_no": 1,//鏁板瓧 1 涓烘牴閮ㄩ棬缂栧彿銆�
+        //  "has_child": true
+        //}
+        DeptApiClient deptApiClient = new DeptApiClient(HttpConstant.API_KEY, HttpConstant.HOST);
+        try {
+            Map<String, Object> result =  deptApiClient.deptList(1,true,deptApiClient.getDefaultVersion());
+            if(result!=null && result.get("departments")!=null ){
+                TypeReference<List<DeptEntityModel>> typeReference =     new TypeReference<List<DeptEntityModel>>(){};
+                Object obj = result.get("departments");
+                List<DeptEntityModel> list =  com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(obj), typeReference.getType());
+                if(list !=null && list.size()>0){
+                    List<Company> addList = new ArrayList<>();
+                    List<Company> updateList = new ArrayList<>();
+                    List<Long> delIds = new ArrayList<>();//淇敼涓轰娇鐢ㄩ拤閽塱d  erpId
+                    List<Company>  allList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
+                            .eq(Company::getIsdeleted,Constants.ZERO).eq(Company::getType,Constants.ONE));
+                    dealCompanyChangeListJdy(list,addList,updateList,delIds,allList);
+                    if(delIds.size()>0){
+                        syncDelCompany(delIds);
+                    }
+                    return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+updateList.size()+"銆戞潯锛屽垹闄ゃ��"+delIds.size()+"銆戞潯";
+                }else{
+                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾閽夐拤鏁版嵁涓虹┖锛�");
+                }
+            }
+        }catch (Exception e){
+             e.printStackTrace();
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾鏁版嵁寮傚父锛�");
+        }
 
+        return null;
+    }
+
+    private void dealCompanyChangeListJdy(List<DeptEntityModel> list, List<Company> addList, List<Company> updateList, List<Long> delIds, List<Company> allList) {
+        Date date = new Date();
+        for(DeptEntityModel respone : list){
+            Company param = new Company();
+            param.setName(respone.getName());
+            param.setErpId(respone.getDept_no().toString());
+            param.setErpParentId(respone.getParent_no() !=null?respone.getParent_no() .toString():null);
+            param.setSortnum(respone.getSeq()!=null?respone.getSeq().intValue():null);//榛樿鏈�涓婇潰
+            //鏍规嵁erpid鏌ヨ浼佷笟淇℃伅锛屽垽鏂槸鏂板杩樻槸鏇存柊
+            Company company = findCompanyByERPId(allList,respone.getDept_no().toString());
+            if(company == null){
+                //濡傛灉鏄柊澧�
+                //灏佽鏂板缁勭粐瀵硅薄鏁版嵁
+                addList.add(getAddCompanyModel(param));
+            }else{
+                updateList.add(getUpdateCompanyModel(param,company));
+            }
+        }
+        if(allList!=null && allList.size()>0){
+            for(Company  c : allList){
+                if(!isCompanyDeletedJdy(c,list)){
+                    delIds.add(Long.valueOf(c.getErpId()));
+                }
+            }
+        }
+    }
     private void dealCompanyChangeList(List<OapiV2DepartmentGetResponse.DeptGetResponse> list, List<Company> addList, List<Company> updateList, List<Long> delIds, List<Company> allList) {
         Date date = new Date();
         for(OapiV2DepartmentGetResponse.DeptGetResponse respone : list){
+            Company param = new Company();
+            param.setName(respone.getName());
+            param.setErpId(respone.getDeptId().toString());
+            param.setErpParentId(respone.getParentId().toString());
+            param.setSortnum(respone.getOrder().intValue());//榛樿鏈�涓婇潰
             //鏍规嵁erpid鏌ヨ浼佷笟淇℃伅锛屽垽鏂槸鏂板杩樻槸鏇存柊
             Company company = findCompanyByERPId(allList,respone.getDeptId().toString());
             if(company == null){
                 //濡傛灉鏄柊澧�
                 //灏佽鏂板缁勭粐瀵硅薄鏁版嵁
-                addList.add(getAddCompanyModel(respone,new Company()));
+                addList.add(getAddCompanyModel(param));
             }else{
-                updateList.add(getUpdateCompanyModel(respone,company));
+                updateList.add(getUpdateCompanyModel(param,company));
             }
         }
         if(allList!=null && allList.size()>0){
@@ -893,21 +976,20 @@
 
     /**
      * 鏁寸悊閽夐拤鍚屾 鏂板缁勭粐瀵硅薄
-     * @param deptGetResponse
      * @return
      */
-    private Company getAddCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse,Company company) {
-        return  syncDDAddCompanyModel(deptGetResponse,company);
+    private Company getAddCompanyModel(Company param ) {
+        return  syncDDAddCompanyModel(param);
     }
 
     /**
      * 鏁寸悊閽夐拤鍚屾 鏂板 闇�瑕佷慨鏀圭殑缁勭粐瀵硅薄
-     * @param deptGetResponse
+     * @param param
      * @param company
      * @return
      */
-    private Company getUpdateCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse, Company company) {
-        return syncDDEditCompanyModel(deptGetResponse,company);
+    private Company getUpdateCompanyModel(Company param, Company company) {
+        return syncDDEditCompanyModel(param,company);
     }
 
 
@@ -936,24 +1018,35 @@
         }
         return false;
     }
+    private boolean isCompanyDeletedJdy(Company c, List<DeptEntityModel> list) {
+        for(DeptEntityModel  m : list){
+            if(StringUtils.equals(c.getErpId(),m.getDept_no().toString())){
+                return  true;
+            }
+        }
+        return false;
+    }
 
 
     /**
      * 鏁寸悊 閽夐拤鍚屾鐨� 缁勭粐淇℃伅
-     * @param deptGetResponse
-     * @param company
+     * @param param
      * @return
      */
-    public Company syncDDAddCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse,Company company){
-        company = new Company();
+    public Company syncDDAddCompanyModel(Company param ){
+        Company  company = new Company();
         company.setCreateDate(new Date());
         company.setIsdeleted(Constants.ZERO);
         company.setStatus(Constants.ZERO);
 
-        company.setName(deptGetResponse.getName());
-        company.setErpId(deptGetResponse.getDeptId().toString());
-        company.setErpParentId(deptGetResponse.getParentId().toString());
-        company.setSortnum(deptGetResponse.getOrder().intValue());//榛樿鏈�涓婇潰
+//        company.setName(deptGetResponse.getName());
+//        company.setErpId(deptGetResponse.getDeptId().toString());
+//        company.setErpParentId(deptGetResponse.getParentId().toString());
+//        company.setSortnum(deptGetResponse.getOrder().intValue());//榛樿鏈�涓婇潰
+        company.setName(param.getName());
+        company.setErpId(param.getErpId() );
+        company.setErpParentId(param.getErpParentId());
+        company.setSortnum(param.getSortnum());//榛樿鏈�涓婇潰
 
         company.setType(Constants.ONE);
         String rootOrgId = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_ROOTORG_CODE).getCode();
@@ -1007,8 +1100,8 @@
     }
 
 
-    public Company syncDDEditCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse,Company company){
-        company.setErpParentId(deptGetResponse.getParentId().toString());
+    public Company syncDDEditCompanyModel(Company param,Company company){
+        company.setErpParentId(param.getErpParentId().toString());
         String idPath = "";
         if(StringUtils.isNotBlank(company.getErpParentId())){
             Company parent = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,company.getErpParentId())
@@ -1030,15 +1123,13 @@
             company.setParentId(parent.getId());
         }
 
-        company.setName(deptGetResponse.getName());
-        company.setErpId(deptGetResponse.getDeptId().toString());
-        company.setErpParentId(deptGetResponse.getParentId().toString());
-        company.setSortnum(deptGetResponse.getOrder().intValue());//榛樿鏈�涓婇潰
+        company.setName(param.getName());
+        company.setErpId(param.getErpId());
+        company.setSortnum(param.getSortnum());//榛樿鏈�涓婇潰
         company.setEditDate(new Date());
         company.setHkCompanyPath(company.getCompanyNamePath());
         company.setHkStatus(Constants.ZERO);
         company.setStatus(Constants.ZERO);
-        company.setSortnum(deptGetResponse.getOrder().intValue());
         company.setHkDate(company.getCreateDate());
         company.setEditDate(company.getCreateDate());
         company.setEditor(company.getCreator());
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index a9ae43a..dfd57cf 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,7 +2,9 @@
 
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.PhoneUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -23,6 +25,10 @@
 import com.doumee.core.haikang.model.param.respose.UserAddResponse;
 import com.doumee.core.haikang.model.param.respose.UserDelResponse;
 import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.jiandaoyun.api.arch.DeptApiClient;
+import com.doumee.core.jiandaoyun.constants.HttpConstant;
+import com.doumee.core.jiandaoyun.model.dept.DeptEntityModel;
+import com.doumee.core.jiandaoyun.model.user.UserEntityModel;
 import com.doumee.dao.web.response.DDAuthorizeVO;
 import com.doumee.service.business.third.TmsService;
 import com.doumee.service.business.third.model.LoginUserInfo;
@@ -609,7 +615,7 @@
         Member member=new Member();
         member.setId(id);
         member.setIsdeleted(Constants.ONE);
-        member.setEditor(loginUserInfo.getId());
+        member.setEditor(loginUserInfo!=null?loginUserInfo.getId():null);
         member.setEditDate(date);
         member.setHkStatus(Constants.ZERO);
         member.setRemark("浜哄憳宸插垹闄わ紝绛夊緟鍒犻櫎闂ㄧ鏉冮檺");
@@ -2413,23 +2419,60 @@
      * 鍚屾閽夐拤鍐呴儴鍛樺伐淇℃伅
      */
     @Override
-    public void syncDDUserInfo() throws ApiException {
-        List<OapiV2UserGetResponse.UserGetResponse>  list = dingTalk.syncAllUserInfo();
-        if(CollectionUtils.isEmpty(list)){
-            return;
-        }
-        List<Member> addList = new ArrayList<>();
-        List<Member> updateList = new ArrayList<>();
-        List<String> delIds = new ArrayList<>();//淇敼涓轰娇鐢ㄩ拤閽塱d  erpId
-        List<Member>  allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
-                .eq(Member::getIsdeleted,Constants.ZERO)
-                .eq(Member::getType,Constants.TWO));
-        dealMemberChangeList(list,addList,updateList,delIds,allList);
+    public void syncDDUserInfo(){
+        try {
+            List<OapiV2UserGetResponse.UserGetResponse>  list = dingTalk.syncAllUserInfo();
+            if(CollectionUtils.isEmpty(list)){
+                return;
+            }
+            List<Member> addList = new ArrayList<>();
+            List<Member> updateList = new ArrayList<>();
+            List<String> delIds = new ArrayList<>();//淇敼涓轰娇鐢ㄩ拤閽塱d  erpId
+            List<Member>  allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .eq(Member::getType,Constants.TWO));
+            dealMemberChangeList(list,addList,updateList,delIds,allList);
 
-        if(delIds.size()>0){
-            syncDelMember(delIds);
+            if(delIds.size()>0){
+                syncDelMember(delIds);
+            }
+        }catch (Exception e){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"鍚屾閽夐拤浜哄憳淇℃伅寮傚父锛�");
         }
 
+
+    }
+    @Override
+    public String syncJdyUserInfo() {
+        DeptApiClient deptApiClient = new DeptApiClient(HttpConstant.API_KEY, HttpConstant.HOST);
+        try {
+            Map<String, Object> result =  deptApiClient.deptMemberList(1,true,deptApiClient.getDefaultVersion());
+            if(result!=null && result.get("users")!=null ){
+                TypeReference<List<UserEntityModel>> typeReference =     new TypeReference<List<UserEntityModel>>(){};
+                Object obj = result.get("users");
+                List<UserEntityModel> list =  com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(obj), typeReference.getType());
+                if(list !=null && list.size()>0){
+                     List<Member> addList = new ArrayList<>();
+                    List<Member> updateList = new ArrayList<>();
+                    List<String> delIds = new ArrayList<>();//淇敼涓轰娇鐢ㄩ拤閽塱d  erpId
+                    List<Member>  allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                            .eq(Member::getIsdeleted,Constants.ZERO)
+                            .eq(Member::getType,Constants.TWO));
+                    dealMemberChangeListJdy(list,addList,updateList,delIds,allList);
+                    if(delIds.size()>0){
+                        syncDelMember(delIds);
+                    }
+                    return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+updateList.size()+"銆戞潯锛屽垹闄ゃ��"+delIds.size()+"銆戞潯";
+                }else{
+                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾閽夐拤鏁版嵁涓虹┖锛�");
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾鏁版嵁寮傚父锛�");
+        }
+
+        return null;
     }
 
     private void syncDelMember(List<String> delIds) {
@@ -2465,25 +2508,65 @@
             }
         }
     }
+    private void dealMemberChangeListJdy(List<UserEntityModel> list, List<Member> addList, List<Member> updateList, List<String> delIds, List<Member> allList) {
+        Date date = new Date();
+        for(UserEntityModel respone : list){
+            //鏍规嵁erpid鏌ヨ浼佷笟淇℃伅锛屽垽鏂槸鏂板杩樻槸鏇存柊
+            Member param = new Member();
+            param.setErpId(respone.getUsername());
+            param.setName(respone.getName());
+            param.setDdId(respone.getIntegrate_id());
+            param.setCompanyIdList(respone.getDepartments());
+            Member member = findMemberByERPId(allList,respone.getUsername());
+            if(member == null){
+                //濡傛灉鏄柊澧�
+                //灏佽鏂板缁勭粐瀵硅薄鏁版嵁
+                addList.add(syncDDAddMemberModel(param,new Member()));
+            }else{
+                updateList.add(syncDDEditMemberModel(param,member));
+            }
+        }
+        if(allList!=null && allList.size()>0){
+            for(Member m : allList){
+                if(!isMemberDeletedJdy(m,list)){
+                    delIds.add(m.getErpId());
+                }
+            }
+        }
+    }
 
     private Member getAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
-        return  syncDDAddMemberModel(deptGetResponse,member);
+        Member param = new Member();
+        param.setErpId(deptGetResponse.getUnionid());
+        param.setPhone(deptGetResponse.getMobile());
+        param.setName(deptGetResponse.getName());
+        param.setCode(deptGetResponse.getJobNumber());
+        param.setDdId(deptGetResponse.getUserid());
+        param.setCompanyIdList(deptGetResponse.getDeptIdList());
+        return  syncDDAddMemberModel(param,member);
     }
 
 
     private Member getUpdateMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
-        return  syncDDEditMemberModel(deptGetResponse,member);
+        Member param = new Member();
+        param.setErpId(deptGetResponse.getUnionid());
+        param.setPhone(deptGetResponse.getMobile());
+        param.setName(deptGetResponse.getName());
+        param.setCode(deptGetResponse.getJobNumber());
+        param.setDdId(deptGetResponse.getUserid());
+        param.setCompanyIdList(deptGetResponse.getDeptIdList());
+        return  syncDDEditMemberModel(param,member);
     }
 
 
-    private Member syncDDAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
+    private Member syncDDAddMemberModel(Member deptGetResponse,Member member) {
         member.setCreateDate(new Date());
-        member.setErpId(deptGetResponse.getUnionid());
-        member.setPhone(deptGetResponse.getMobile());
+        member.setErpId(deptGetResponse.getErpId());
+        member.setPhone(deptGetResponse.getPhone());
         member.setName(deptGetResponse.getName());
-        member.setCode(deptGetResponse.getJobNumber());
-        member.setDdId(deptGetResponse.getUserid());
-        isMemberParamValidDetail(member,deptGetResponse.getDeptIdList());
+        member.setCode(deptGetResponse.getCode());
+        member.setDdId(deptGetResponse.getDdId());
+        isMemberParamValidDetail(member,deptGetResponse.getCompanyIdList());
         //鑾峰彇鍑虹敓鏃ユ湡
         //鑴辨晱鎿嶄綔
         Member insert = initAddMemberModel(member,null);
@@ -2518,7 +2601,7 @@
         }
         member.setCompanyType(Constants.ONE);
         SystemUser queryUserDto = new SystemUser();
-        queryUserDto.setUsername(member.getPhone());
+        queryUserDto.setUsername(StringUtils.defaultString(member.getPhone(),member.getErpId()));
         queryUserDto.setDeleted(Boolean.FALSE);
         SystemUser user = systemUserMapper.selectOne(new QueryWrapper<>(queryUserDto).last("limit 1"));
         if (user != null) {
@@ -2536,13 +2619,13 @@
         }
     }
     
-    public Member syncDDEditMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member updateMember) { 
+    public Member syncDDEditMemberModel(Member deptGetResponse1,Member updateMember) {
         updateMember.setEditDate(new Date());
-        updateMember.setErpId(deptGetResponse.getUnionid());
-        updateMember.setPhone(deptGetResponse.getMobile());
-        updateMember.setName(deptGetResponse.getName());
-        updateMember.setCode(deptGetResponse.getJobNumber());
-        updateMember.setDdId(deptGetResponse.getUserid());
+//        updateMember.setErpId(deptGetResponse.getErpId());
+//        updateMember.setPhone(deptGetResponse.getPhone());
+//        updateMember.setName(deptGetResponse.getName());
+//        updateMember.setCode(deptGetResponse.getCode());
+//        updateMember.setDdId(deptGetResponse.getDdId());
         updateMember.setHkId(null);
         updateMember.setAuthStatus(Constants.ZERO);
         Boolean hkFlag = dealHkUserForUpdateBiz(updateMember);
@@ -2604,7 +2687,14 @@
         }
         return false;
     }
-
+    private boolean isMemberDeletedJdy(Member member, List<UserEntityModel> list) {
+        for(UserEntityModel m : list){
+            if(StringUtils.equals(m.getUsername(),member.getErpId())){
+                return  true;
+            }
+        }
+        return false;
+    }
 
     @Override
     public void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException {
diff --git a/server/visits/dmvisit_service/src/main/resources/application-dev.yml b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
index 8dd392d..d01483f 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-dev.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Doumee@168
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/visits/dmvisit_service/src/main/resources/application-pro.yml b/server/visits/dmvisit_service/src/main/resources/application-pro.yml
index 32e6976..4316485 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-pro.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-pro.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://localhost:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Whyc@2025
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck b/server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck
deleted file mode 100644
index 05e27a4..0000000
--- a/server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck
+++ /dev/null
@@ -1,81 +0,0 @@
-spring:
-  # 鏁版嵁婧愰厤缃�
-  datasource:
-    url: jdbc:mysql://10.10.99.68:3306/visit?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
-    username: root
-    password: Hs@20240307
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    type: com.alibaba.druid.pool.DruidDataSource
-  redis:
-    #    database: 0
-    host: 127.0.0.1
-    port: 6379
-    password:
-    timeout: 5000      # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
-  jackson:
-    time-zone: GMT+8
-    date-format: yyyy-MM-dd HH:mm:ss
-
-#rocketmq:
-#  namesrvAddr: rmq-cn-pe335rcnn06.cn-shanghai.rmq.aliyuncs.com:8080
-#  groupId: GID-wakatest
-#  topic: waka-test
-#  username: 4derRb4Sw5EkqUMI
-#  password: v50N97wf4av8Q8I4
-
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: 111111
-
-debug_model: false
-
-# Swagger閰嶇疆
-swagger:
-  host: dmtest.ahapp.net
-  title: ${project.name}鎺ュ彛鏂囨。
-  description: ${project.name}鎺ュ彛鏂囨。
-  enabled: true
-  context-path: /erp_interface
-  # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
-  redirect-uri: /
-
-########################鍚屾鏁版嵁妯″紡  ########################
-data-sync:
-  org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
-
-########################寰俊鏀粯鐩稿叧閰嶇疆########################
-wx:
-  pay:
-    appId: wxfab6da18632e28de
-    appSecret: 4ee3b22afa90287834319fc3c1635271
-    mchId: 1229817002
-    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
-    notifyUrl: https://dmtest.ahapp.net/smartmeeting_interface/web/api/wxPayNotify
-    keyPath: /usr/local/apiclient_cert.p12
-
-tencent:
-  map:
-    remoteHost: https://apis.map.qq.com
-    appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ
-
-
-des_pwd: 123456SDFKDJF
-
-## MQTT##
-mqtt:
-  host: tcp://192.168.10.198:1883
-  userName: root
-  passWord: 123456
-  qos: 1
-  clientId: ClientId_local #ClientId_local蹇呴』鍞竴 姣斿浣犲凡缁忓畾浜嗗彨ABC  閭d綘灏变竴鐩村彨ABC  鍏朵粬鍦版柟灏变笉瑕佷娇鐢ˋBC浜�
-  timeout: 10
-  keepalive: 20
-  topic1: A/pick/warn/#  #绗﹀彿鏄唬琛ㄦ暣涓獁arn涓嬮潰鐨勫叏閮ㄥ瓙涓婚 娌℃湁鐞嗚В鐨勮瘽 鍙互鐧惧害浠旂粏鐞嗚В涓�涓�
-  topic2: A/cmd/resp
-  topic3: ABCF
-  topic4: ABCH
diff --git a/server/visits/dmvisit_service/src/main/resources/application-test.yml b/server/visits/dmvisit_service/src/main/resources/application-test.yml
index 867c7c2..0dffa92 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-test.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-test.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Doumee@168
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/visits/dmvisit_service/src/main/resources/application-testHS.yml.bck b/server/visits/dmvisit_service/src/main/resources/application-testHS.yml.bck
deleted file mode 100644
index 2680b48..0000000
--- a/server/visits/dmvisit_service/src/main/resources/application-testHS.yml.bck
+++ /dev/null
@@ -1,81 +0,0 @@
-spring:
-  # 鏁版嵁婧愰厤缃�
-  datasource:
-    url: jdbc:mysql://10.10.99.63:3306/visit?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
-    username: root
-    password: HS!20240227
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    type: com.alibaba.druid.pool.DruidDataSource
-  redis:
-    #    database: 0
-    host: 127.0.0.1
-    port: 6379
-    password: huasun618
-    timeout: 5000      # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
-  jackson:
-    time-zone: GMT+8
-    date-format: yyyy-MM-dd HH:mm:ss
-
-#rocketmq:
-#  namesrvAddr: rmq-cn-pe335rcnn06.cn-shanghai.rmq.aliyuncs.com:8080
-#  groupId: GID-wakatest
-#  topic: waka-test
-#  username: 4derRb4Sw5EkqUMI
-#  password: v50N97wf4av8Q8I4
-
-knife4j:
-  enable: true
-  basic:
-    enable: true
-    username: admin
-    password: 111111
-
-debug_model: true
-
-# Swagger閰嶇疆
-swagger:
-  host: dmtest.ahapp.net
-  title: ${project.name}鎺ュ彛鏂囨。
-  description: ${project.name}鎺ュ彛鏂囨。
-  enabled: true
-  context-path: /erp_interface
-  # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
-  redirect-uri: /
-
-########################鍚屾鏁版嵁妯″紡  ########################
-data-sync:
-  org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
-
-########################寰俊鏀粯鐩稿叧閰嶇疆########################
-wx:
-  pay:
-    appId: wxfab6da18632e28de
-    appSecret: 4ee3b22afa90287834319fc3c1635271
-    mchId: 1229817002
-    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
-    notifyUrl: https://dmtest.ahapp.net/smartmeeting_interface/web/api/wxPayNotify
-    keyPath: /usr/local/apiclient_cert.p12
-
-tencent:
-  map:
-    remoteHost: https://apis.map.qq.com
-    appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ
-
-
-des_pwd: 123456SDFKDJF
-
-## MQTT##
-mqtt:
-  host: tcp://192.168.10.198:1883
-  userName: root
-  passWord: 123456
-  qos: 1
-  clientId: ClientId_local #ClientId_local蹇呴』鍞竴 姣斿浣犲凡缁忓畾浜嗗彨ABC  閭d綘灏变竴鐩村彨ABC  鍏朵粬鍦版柟灏变笉瑕佷娇鐢ˋBC浜�
-  timeout: 10
-  keepalive: 20
-  topic1: A/pick/warn/#  #绗﹀彿鏄唬琛ㄦ暣涓獁arn涓嬮潰鐨勫叏閮ㄥ瓙涓婚 娌℃湁鐞嗚В鐨勮瘽 鍙互鐧惧害浠旂粏鐞嗚В涓�涓�
-  topic2: A/cmd/resp
-  topic3: ABCF
-  topic4: ABCH
diff --git a/server/visits/openapi/src/main/resources/application.yml b/server/visits/openapi/src/main/resources/application.yml
index 0d1a8bb..308d275 100644
--- a/server/visits/openapi/src/main/resources/application.yml
+++ b/server/visits/openapi/src/main/resources/application.yml
@@ -9,7 +9,7 @@
   #  application:
   #    name: doumeevisit
   profiles:
-    active: proHS
+    active: test
 
   # JSON杩斿洖閰嶇疆
   jackson:

--
Gitblit v1.9.3