From 46e8af542c02d801bea9fa8cf8f55974dcfa8554 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 30 十二月 2025 11:03:00 +0800
Subject: [PATCH] 更改头部

---
 server/system_service/pom.xml                                                                                                 |   95 -
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchUpdateParam.java                   |   95 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java                                   |   15 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptCreateParam.java                            |   68 
 server/base_serivce/pom.xml                                                                                                   |  114 +
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/DepartmentPushData.java                      |   12 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleGroupListQueryParam.java                    |   35 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleGroupApiClient.java                           |  108 +
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataDeleteParam.java                        |   76 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberPushData.java                          |   34 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleListQueryParam.java                         |   40 
 server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java                                        |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java                           |   10 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataUpdateParam.java                        |  105 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java                                  |   21 
 server/visits/dmvisit_service/pom.xml                                                                                         |    5 
 server/visits/dmvisit_service/src/main/resources/application-testYL.yml                                                       |    4 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/CorpCoopApiClient.java                            |   80 +
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/FilePushData.java                            |   20 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/file/UploadTokenParam.java                           |   48 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FileApiClient.java                                 |   61 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/http/HttpRequestParam.java                           |   48 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java                            |   22 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleUpdateParam.java                            |   47 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/JiandaoyunCloudController.java                              |  174 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java                           |  734 ++++++---
 server/visits/admin_timer/pom.xml                                                                                             |    3 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/BasePushRequest.java                         |   11 
 server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java                                                       |   49 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleMemberQueryParam.java                       |   28 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java                                |   58 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java                                    |   14 
 admin/src/views/business/internalCompany.vue                                                                                  |   54 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataCreateParam.java                        |  101 +
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserCreateParam.java                            |   65 
 server/visits/dmvisit_service/src/main/resources/application-devYL.yml                                                        |    4 
 admin/src/api/business/company.js                                                                                             |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java |   10 
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                                      |    3 
 server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml                                                              |    3 
 server/jiandaoyun_service/src/main/java/com/doumee/Main.java                                                                  |    7 
 server/visits/dmvisit_service/src/main/resources/application-dev.yml                                                          |    4 
 server/visits/dmvisit_service/src/main/resources/application-pro.yml                                                          |    4 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchRemoveParam.java                   |   58 
 server/system_service/src/main/java/com/doumee/dao/business/model/Member.java                                                 |    7 
 server/visits/dmvisit_service/src/main/resources/application-self.yml                                                         |    4 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java                                  |  210 ++
 server/system_service/src/main/java/com/doumee/service/business/third/model/ApiResponse.java                                  |   20 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/util/LimitUtil.java                                        |   40 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java   |   14 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberStatusSubmitData.java                  |   11 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java                                   |    6 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java                             |  190 ++
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/UserPushData.java                            |   13 
 server/visits/dmvisit_service/src/main/resources/application-testHS.yml.bck                                                   |    4 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/DeptApiClient.java                                |  168 ++
 server/visits/admin_timer/src/main/java/com/doumee/api/HkUsersTimerController.java                                            |    7 
 admin/src/components/business/OperaDeviceDataListWindow.vue                                                                   |   72 
 admin/src/views/business/deviceDuanluqi.vue                                                                                   |    3 
 server/system_timer/src/main/resources/application-self.yml                                                                   |    4 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchCreateParam.java                   |   94 +
 server/base_serivce/src/main/java/com/doumee/Main.java                                                                        |    7 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleApiClient.java                                |  170 ++
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/AppApiClient.java                                  |   53 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormApiClient.java                                 |   71 
 server/visits/dmvisit_service/src/main/resources/application-test.yml                                                         |    4 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/MemberApiClient.java                              |  147 +
 admin/src/components/business/OperaInternalCompanyWindow.vue                                                                  |   13 
 server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck                                                    |    4 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/base/PageBaseParam.java                              |   43 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataQueryParam.java                         |  114 +
 server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java                                             |    1 
 server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java                                      |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java    |   12 
 server/system_service/src/main/java/com/doumee/config/DataSyncConfig.java                                                     |   11 
 server/jiandaoyun_service/pom.xml                                                                                             |   27 
 server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java                                                        |    4 
 server/system_timer/src/main/resources/application-test.yml                                                                   |    4 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserEntityModel.java                            |   28 
 server/pom.xml                                                                                                                |    2 
 server/system_timer/src/main/resources/application-dev.yml                                                                    |    4 
 admin/src/components/business/OperaDeviceDuanluqiWindow.vue                                                                   |    4 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserUpdateParam.java                            |   62 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java                          |  313 ++-
 admin/src/views/business/internalMember.vue                                                                                   |   34 
 server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormQueryParam.java                             |   30 
 86 files changed, 3,990 insertions(+), 607 deletions(-)

diff --git a/admin/src/api/business/company.js b/admin/src/api/business/company.js
index b1ecbcc..3f051b9 100644
--- a/admin/src/api/business/company.js
+++ b/admin/src/api/business/company.js
@@ -34,6 +34,9 @@
 }
 
 // 閮ㄩ棬淇℃伅鍚屾
+export function getSysConfig (data) {
+  return request.get('/visitsAdmin/cloudService/business/company/getSysConfig')
+}
 export function companySync (data) {
   return request.post('/visitsAdmin/cloudService/business/company/syncAll', data)
 }
diff --git a/admin/src/components/business/OperaDeviceDataListWindow.vue b/admin/src/components/business/OperaDeviceDataListWindow.vue
index 69c4a7d..b23d1b4 100644
--- a/admin/src/components/business/OperaDeviceDataListWindow.vue
+++ b/admin/src/components/business/OperaDeviceDataListWindow.vue
@@ -1,7 +1,7 @@
 <template>
   <GlobalWindow
       :title="title"
-      width="85%"
+      width="100%"
       :visible.sync="visible"
   >
     <TableLayout >
@@ -19,20 +19,30 @@
           <div style="display: flex;margin-top: 20px;">
             <div style="flex: 1"><span  class="label">MQTT IP锛�</span>{{model.doorNameObj.mqttIp ||''}}</div>
             <div style="flex: 1"><span  class="label">MQTT绔彛锛�</span>{{model.doorNameObj.mqttPort||''}}</div>
-            <div style="flex: 3"> <span class="label">鏈�杩戞帶鍒舵搷浣滐細</span>{{model.remark||''}}</div>
+            <div style="flex: 3">
+              <span class="label">鏈�杩戞帶鍒舵搷浣滐細</span>
+              <span class="orange" >{{model.remark||''}}</span>
+            </div>
           </div>
         </div>
-        <el-form-item label="寮�鍏冲簭鍙�" prop="val1">
+        <div class="platgroup_tabs">
+          <div class="tab" :class="{ active: activeGroup === item.id }" @click="groupClick(item)"
+               v-for="(item, i) in groupList" :key="i">
+            {{ item.name }}
+          </div>
+        </div>
+        <el-form-item label="寮�鍏冲簭鍙�" v-if="activeGroup==0" prop="val1">
           <el-input v-model="searchForm.val1" placeholder="璇疯緭鍏ュ紑鍏冲簭鍙�" @keypress.enter.native="search"></el-input>
         </el-form-item>
-        <section>
+        <section v-if="activeGroup==0">
           <el-button type="primary" @click="search">鎼滅储</el-button>
           <el-button @click="reset">閲嶇疆</el-button>
         </section>
       </el-form>
       <!-- 琛ㄦ牸鍜屽垎椤� -->
-      <template v-slot:table-wrap>
+      <template  v-slot:table-wrap>
         <el-table
+            v-if="activeGroup===0"
             :height="tableHeightNew"
             v-loading="isWorking.search"
             :data="tableData.list"
@@ -50,6 +60,24 @@
           <el-table-column prop="val3" label="鐢靛湩(V)" min-width="120px"></el-table-column>
           <el-table-column prop="val4" label="娓╁害(鈩�)" min-width="180px" ></el-table-column>
           <el-table-column prop="val5" label="鏈夊姛鍔熺巼鍊硷紙kW锛�" min-width="120px"></el-table-column>
+        </el-table>
+        <el-table
+            v-if="activeGroup===1"
+            :height="tableHeightNew"
+            v-loading="isWorking.search"
+            :data="tableData.list"
+            stripe>
+          <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="150px"></el-table-column>
+          <el-table-column prop="val4" label="鎿嶄綔浜�" min-width="100px" ></el-table-column>
+          <el-table-column prop="val3" label="鎿嶄綔鍐呭" min-width="100px">
+            <template slot-scope="{row}">
+                <span v-if=" row.val3 === '銆愬悎闂搞��'" class="green">{{row.val3||''}}</span>
+                <span  v-else-if=" row.val3 === '銆愬垎闂搞��'" class="red">{{row.val3||''}}</span>
+                <span v-else>{{row.val3||''}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="val5" label="寮�鍏冲簭鍙�" min-width="120px"></el-table-column>
+          <el-table-column prop="val2" label="鍐呭" min-width="300px" show-overflow-tooltip></el-table-column>
         </el-table>
         <pagination
             @size-change="handleSizeChange"
@@ -79,10 +107,13 @@
       // 琛ㄥ崟鏁版嵁
       visible: false,
       title: '',
+      activeGroup:0,
       model:{},
+      groupList: [{ id: 0, name: '鏁版嵁涓婃姤璁板綍', type: 0 }, { id: 1, name: '杩滅▼鎺у埗璁板綍', type: 1 }],
       searchForm: {
         deviceId:  null,
-        val1:''
+        val1: '',
+        dataType:0
       }
     }
   },
@@ -96,6 +127,12 @@
     this.search()
   },
   methods: {
+    groupClick (item) {
+      this.activeGroup = item.id
+      this.searchForm.val1 = ''
+      this.searchForm.dataType = item.type
+      this.search()
+    },
     open (title, row) {
       this.title = title +' 銆�'+ (row.name)+'銆�'
       this.searchForm.deviceId = row.id
@@ -118,12 +155,33 @@
           total: 0
         }
       }
-      this.search()
+      this.groupClick(this.groupList[0])
     }
   }
 }
 </script>
 <style>
+.platgroup_tabs {
+  flex: 1;
+  display: flex;
+  border-bottom: 1px solid #dfe2e8;
+  margin-bottom:30px;
+
+  .tab {
+    color: #666666;
+    margin-right: 40px;
+    cursor: pointer;
+    padding-bottom: 18px;
+    border-bottom: 2px solid #fff;
+  }
+
+  .active {
+    font-weight: 500;
+    font-size: 15px;
+    color: #2080f7;
+    border-bottom: 2px solid $primary-color;
+  }
+}
 .label{
 /*  width: 80px;
   text-align: right;*/
diff --git a/admin/src/components/business/OperaDeviceDuanluqiWindow.vue b/admin/src/components/business/OperaDeviceDuanluqiWindow.vue
index 99021aa..d1ec282 100644
--- a/admin/src/components/business/OperaDeviceDuanluqiWindow.vue
+++ b/admin/src/components/business/OperaDeviceDuanluqiWindow.vue
@@ -34,7 +34,7 @@
             1.鍏ㄩ儴寮�鍏冲簭鍙凤細鍙傝�冭澶囧疄闄呴厤缃紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑锛屽 1,2,3;<br>
             2.鎺у埗寮�鍏冲簭鍙凤細绯荤粺鏍规嵁閰嶇疆瑙勫垯锛屽垽鏂紑鍏冲綋鍓嶇┖闂蹭腑杩涜銆愯嚜鍔ㄥ垎闂搞��,澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑锛屽 1,2;<br>
             3.鑷姩鍒嗛椄瑙勫垯锛氶拡瀵规帶鍒跺紑鍏冲簭鍙风殑閰嶇疆锛屽畾鏃舵娴嬨�愮┖闂叉椂闀裤�戝唴婊¤冻寮�鍏崇數娴佸�奸兘鍦ㄣ�愮┖闂茬數娴侀槇鍊笺�戣寖鍥村唴锛屽垯杩涜鑷姩鍒嗛椄鎺у埗;<br>
-            4.绌洪棽鏃堕暱: 璇疯缃嚦灏戠┖闂叉椂闀垮ぇ浜庣瓑浜�300绉掞紙5鍒嗛挓锛夈��
+            4.绌洪棽鏃堕暱: 璇疯缃嚦灏戠┖闂叉椂闀垮ぇ浜庣瓑浜�300绉掞紙5鍒嗛挓锛夈��<br>
             5.濡傞渶杩滅▼鎺у埗寮�鍏筹紝璇锋纭~鍐欎笅杩板叏閮ㄥ弬鏁颁俊鎭��
           </p>
           <div style="display: flex">
@@ -118,7 +118,7 @@
         name: [
           { required: true, message: '璇疯緭鍏ヨ澶囧悕绉�' }
         ],
-      /*  max: [
+        /*max: [
           { required: true, message: '璇疯緭鍏ヨ澶囩┖闂茬數娴侀槇鍊�' }
         ],*/
         doorId: [
diff --git a/admin/src/components/business/OperaInternalCompanyWindow.vue b/admin/src/components/business/OperaInternalCompanyWindow.vue
index 6ff4b28..b383ad0 100644
--- a/admin/src/components/business/OperaInternalCompanyWindow.vue
+++ b/admin/src/components/business/OperaInternalCompanyWindow.vue
@@ -22,7 +22,7 @@
 <!--              :disabled="(editType === 'edit') || (!!(editType === 'add' && parentId))"-->
             <el-radio-group v-model="form.type">
               <el-radio :label="0">鐩稿叧鏂圭粍缁�</el-radio>
-              <el-radio :label="1">鍐呴儴缁勭粐</el-radio>
+              <el-radio :label="1"  v-if="sysConfig() && sysConfig().orgUserDataOrigin!=3">鍐呴儴缁勭粐</el-radio>
             </el-radio-group>
           </el-form-item>
         </el-form>
@@ -68,6 +68,7 @@
       type: Array
     }
   },
+  inject: ['sysConfig'],
   created () {
     this.config({
       api: '/business/company.js',
@@ -75,7 +76,7 @@
     })
   },
   methods: {
-    open(title, target, row, editType){
+    open (title, target, row, editType) {
       this.title = title
       this.editType = editType
       if (editType === 'edit') {
@@ -96,7 +97,7 @@
       }
       if (target != null) {
         this.form.parentId = target.id
-        this.form.parentType = target.type
+        this.form.parentType = target.type >= 0 ? target.type : 0
         this.form.parentName = target.companyNamePath
       }
       // 鏂板缓缁勭粐
@@ -104,7 +105,7 @@
         this.$nextTick(() => {
           this.$refs.form.resetFields()
           this.form[this.configData['field.id']] = null
-          this.form.type = target.type
+          this.form.type = 0
         })
         return
       }
@@ -114,7 +115,7 @@
         for (const key in this.form) {
           this.form[key] = row[key]
         }
-        if(target.type == 0){
+        if (target.type == 0) {
           this.form.type = 0
         }
       })
@@ -140,7 +141,7 @@
               this.$emit('success')
             })
             .catch(e => {
-             //  this.$tip.apiFailed(e)
+              //  this.$tip.apiFailed(e)
             })
             .finally(() => {
               this.isWorking = false
diff --git a/admin/src/views/business/deviceDuanluqi.vue b/admin/src/views/business/deviceDuanluqi.vue
index 368c0e3..f7851fd 100644
--- a/admin/src/views/business/deviceDuanluqi.vue
+++ b/admin/src/views/business/deviceDuanluqi.vue
@@ -133,10 +133,9 @@
     return {
       // 鎼滅储
       searchForm: {
-        doorName: '',
         doorNo: '',
         no: '',
-        regionPathName: '',
+        name: '',
         type: 5
       },
       isWorkSending: false,
diff --git a/admin/src/views/business/internalCompany.vue b/admin/src/views/business/internalCompany.vue
index e97dbb9..763b87f 100644
--- a/admin/src/views/business/internalCompany.vue
+++ b/admin/src/views/business/internalCompany.vue
@@ -23,36 +23,44 @@
             v-permissions="['business:company:sort']">涓婄Щ</el-button></li>
         <li><el-button @click="sort('bottom')" :loading="sorting" icon="el-icon-sort-down"
             v-permissions="['business:company:sort']">涓嬬Щ</el-button></li>
-        <li><el-button type="primary" v-permissions="['business:company:sync']" :loading="loading"
-            @click="synchronous()">鍚屾</el-button></li>
+<!--        <li><el-button type="primary" v-permissions="['business:company:sync']" :loading="loading"
+            @click="synchronous()">鍚屾</el-button></li>-->
         <li><el-button type="primary" v-permissions="['business:company:create']" :loading="loading"
-            @click="synchronousDingding()">鍚屾閽夐拤</el-button></li>
+            @click="synchronous()">鍚屾</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"
         @selection-change="handleSelectionChange" default-expand-all>
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="name" label="缁勭粐鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="name" label="缁勭粐鍚嶇О" min-width="200px"></el-table-column>
         <el-table-column prop="name" label="缁勭粐绫诲瀷" min-width="80px">
           <template scope="{row}">
             <span v-if="row.type == 0">鐩稿叧鏂圭粍缁�</span>
             <span v-if="row.type == 1">鍐呴儴缁勭粐</span>
           </template>
         </el-table-column>
-        <el-table-column prop="companyNamePath" label="缁勭粐璺緞" min-width="100px"></el-table-column>
+        <el-table-column label="娴峰悍鍚屾鐘舵��" min-width="100px" align="center">
+          <template slot-scope="{row}">
+            <span v-if="row.hkStatus == 0" style="color: #435EBE">寰呭悓姝�</span>
+            <span v-if="row.hkStatus == 1" style="color: green">鍚屾鎴愬姛</span>
+            <span v-if="row.hkStatus == 2" style="color: red">鍚屾澶辫触</span>
+            <span v-if="row.hkStatus == 3" style="color: red">涓嶇鍚堜笅鍙戞潯浠�</span>
+          </template>
+        </el-table-column>
         <el-table-column prop="sortnum" align="center" label="鎺掑簭鐮�" min-width="80px"></el-table-column>
+        <el-table-column prop="companyNamePath" label="缁勭粐璺緞" min-width="200px"></el-table-column>
         <el-table-column prop="editorName" label="鎿嶄綔浜�" width="100px"></el-table-column>
-        <el-table-column prop="editDate" label="鏈�鍚庢洿鏂版椂闂�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="鏈�鍚庢洿鏂版椂闂�" min-width="150px"></el-table-column>
         <el-table-column label="鎿嶄綔" width="230" fixed="right">
           <template slot-scope="{row}">
 <!--            v-if="row.type ==0"-->
             <el-button type="text"
               @click="$refs.OperaInternalCompanyWindow.open('缂栬緫浼佷笟淇℃伅', { id: row.parentId, name: row.parentName, type: row.parentType, companyPath: row.parentCompanyPath }, row, 'edit')"
-              icon="el-icon-edit" v-permissions="['business:company:update']">缂栬緫</el-button>
+              icon="el-icon-edit" v-permissions="['business:company:update']" v-if="sysConfig && sysConfig.orgUserDataOrigin ==3 && row.type !=1 ">缂栬緫</el-button>
             <el-button type="text" @click="$refs.OperaInternalCompanyWindow.open('鏂板缓瀛愮骇', row, null, 'add')"
               icon="el-icon-plus">鏂板缓瀛愮骇</el-button>
             <el-button type="text" @click="deleteById(row)" style="color: red" icon="el-icon-delete"
-              v-permissions="['business:company:delete']" v-if="row.type !== -1">鍒犻櫎</el-button>
+              v-permissions="['business:company:delete']" v-if="sysConfig && sysConfig.orgUserDataOrigin ==3 && row.type ==0 ">鍒犻櫎</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -65,17 +73,18 @@
 <script>
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
-import { companySync,companySyncDingding, sort } from '@/api/business/company'
+import { companySync, companySyncDingding, sort } from '@/api/business/company'
 import OperaInternalCompanyWindow from '@/components/business/OperaInternalCompanyWindow'
 export default {
   name: 'internalCompany',
   extends: BaseTable,
   components: { TableLayout, OperaInternalCompanyWindow },
-  data() {
+  data () {
     return {
       // 鎼滅储
       loading: false,
       sorting: false,
+      sysConfig: null,
       searchForm: {
         // type: 1
       },
@@ -83,7 +92,12 @@
       total: 0
     }
   },
-  created() {
+  provide() {
+    return {
+      sysConfig: () => this.sysConfig
+    }
+  },
+  created () {
     this.config({
       module: '浼佷笟淇℃伅琛�',
       api: '/business/company',
@@ -91,15 +105,19 @@
       'field.main': 'id'
     })
     this.search()
+    this.api.getSysConfig()
+      .then(res => {
+        this.sysConfig = res
+      })
   },
-  mounted() {
+  mounted () {
     this.$nextTick(() => {
       this.tableHeight = document.body.scrollHeight - 220
     })
   },
   methods: {
     // 椤电爜鍙樻洿澶勭悊
-    handlePageChange(pageIndex) {
+    handlePageChange (pageIndex) {
       this.__checkApi()
       this.isWorking.search = true
       this.api.fetchList(this.searchForm.type)
@@ -114,7 +132,7 @@
         })
     },
     // 鍚屾淇℃伅
-    async synchronous() {
+    async synchronous () {
       this.$dialog.actionConfirm('璇ユ搷浣滃皢绯荤粺娓呯┖宸叉湁缁勭粐淇℃伅锛屾偍纭鍚屾鍏ㄩ儴淇℃伅鍚楋紵', '鎿嶄綔纭鎻愰啋')
         .then(() => {
           this.loading = true
@@ -132,7 +150,7 @@
         })
         .catch(() => { })
     },
-    async synchronousDingding() {
+    async synchronousDingding () {
       this.$dialog.actionConfirm('璇ユ搷浣滃皢绯荤粺娓呯┖宸叉湁鍐呴儴缁勭粐淇℃伅锛屾偍纭鍚屾鍏ㄩ儴淇℃伅鍚楋紵', '鎿嶄綔纭鎻愰啋')
         .then(() => {
           this.loading = true
@@ -151,7 +169,7 @@
         .catch(() => { })
     },
     // 鎺掑簭
-    sort(direction) {
+    sort (direction) {
       if (this.sorting) {
         return
       }
@@ -195,7 +213,7 @@
              menuPool.splice(menuIndex, 0, menuPool.splice(menuIndex - 1, 1)[0])
            } else {
              menuPool.splice(menuIndex, 0, menuPool.splice(menuIndex + 1, 1)[0])
-           }*/
+           } */
           this.search()
         })
         .catch(e => {
@@ -206,7 +224,7 @@
         })
     },
     // 鏌ヨ鐖惰妭鐐�
-    __findParent(id, parent) {
+    __findParent (id, parent) {
       if (parent.childList === 0) {
         return
       }
diff --git a/admin/src/views/business/internalMember.vue b/admin/src/views/business/internalMember.vue
index 76d61e7..bcf7d30 100644
--- a/admin/src/views/business/internalMember.vue
+++ b/admin/src/views/business/internalMember.vue
@@ -64,16 +64,14 @@
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <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"
+        <li v-if="sysConfig && sysConfig.orgUserDataOrigin != 3"><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="synchronousDingding()">鍚屾閽夐拤</el-button></li>
-        <li><el-button type="primary"
+        <li  v-if="sysConfig && sysConfig.orgUserDataOrigin != 3"><el-button type="primary"
             @click="add" icon="el-icon-plus"
             v-permissions="['business:member:create']">鏂板缓鍛樺伐</el-button></li>
-        <li><el-button type="primary" @click="$refs.OperaMemberImportWindow.open('浜哄憳瀵煎叆', searchForm.companyType)"
+        <li v-if="sysConfig && sysConfig.orgUserDataOrigin != 3"><el-button type="primary" @click="$refs.OperaMemberImportWindow.open('浜哄憳瀵煎叆', searchForm.companyType)"
             icon="el-icon-plus" v-permissions="['business:member:create']">浜哄憳瀵煎叆</el-button></li>
-        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete"
+        <li  v-if="sysConfig && sysConfig.orgUserDataOrigin != 3"><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete"
             v-permissions="['business:member:delete']">鎵归噺鍒犻櫎</el-button></li>
         <li><el-button type="primary" v-permissions="['business:empower:create']"
             @click="startEmpowerBatch()">涓嬪彂鎺堟潈</el-button></li>
@@ -84,7 +82,7 @@
       </ul>
       <el-table :height="tableHeightNew" v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column fixed="left" prop="name" label="濮撳悕" min-width="80px">
+        <el-table-column fixed="left" prop="name" label="濮撳悕" min-width="100px">
           <template slot-scope="{row}">
             <span>{{ row.name }}</span>
             <span class="zhuguan" v-if="row.headStatus == 1">涓荤</span>
@@ -98,7 +96,6 @@
           </template>
         </el-table-column>
         <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
-        <el-table-column prop="idcardDecode" label="韬唤璇佸彿" min-width="100px"></el-table-column>
         <el-table-column label="鎬у埆" min-width="100px">
           <template slot-scope="{row}">
             <span v-if="row.sex == 1">鐢�</span>
@@ -129,18 +126,21 @@
         </el-table-column>
         <el-table-column label="鍦ㄨ亴鐘舵��">
           <template slot-scope="{row}">
-            <el-switch @change="changeWorkStatus($event, row)" v-model="row.workStatus" active-color="#13ce66"
+            <el-switch  v-if="sysConfig && sysConfig.orgUserDataOrigin != 3"  @change="changeWorkStatus($event, row)" v-model="row.workStatus" active-color="#13ce66"
               inactive-color="#ff4949" :active-value="0" :inactive-value="1">
             </el-switch>
+            <span v-else>{{row.workStatus == 1?"绂昏亴":"鍦ㄨ亴"}}</span>
           </template>
         </el-table-column>
         <el-table-column label="鏄惁鍙嫓璁�">
           <template slot-scope="{row}">
-            <el-switch @change="changeCanvisit($event, row)" v-model="row.canVisit" active-color="#13ce66"
+            <el-switch  v-if="sysConfig && sysConfig.orgUserDataOrigin != 3" @change="changeCanvisit($event, row)" v-model="row.canVisit" active-color="#13ce66"
               inactive-color="#ff4949" :active-value="1" :inactive-value="0">
             </el-switch>
+            <span v-else>{{row.canVisit == 1?"鏄�":"鍚�"}}</span>
           </template>
         </el-table-column>
+        <el-table-column prop="idcardDecode" label="韬唤璇佸彿" min-width="150px" show-overflow-tooltip></el-table-column>
         <el-table-column label="娴峰悍鍚屾鐘舵��" min-width="100px">
           <template slot-scope="{row}">
             <span v-if="row.hkStatus == 0" style="color: #435EBE">寰呭悓姝�</span>
@@ -185,7 +185,7 @@
           v-if="containPermissions(['business:member:update', 'business:member:delete', 'business:empower:create'])"
           label="鎿嶄綔" min-width="280">
           <template slot-scope="{row}">
-           <el-button type="text" icon="el-icon-edit" @click="edit(row)"  v-permissions="['business:member:update']">缂栬緫</el-button>
+           <el-button  v-if="sysConfig && sysConfig.orgUserDataOrigin != 3" type="text" icon="el-icon-edit" @click="edit(row)"  v-permissions="['business:member:update']" >缂栬緫</el-button>
             <el-button type="text" icon="el-icon-plus" @click="empower(row.id)"
               v-permissions="['business:empower:create']">閲嶆柊鎺堟潈</el-button>
             <el-button type="text" :loading="heading" style="color: red" icon="el-icon-delete"
@@ -193,7 +193,7 @@
               v-permissions="['business:member:head']">鍙栨秷涓荤</el-button>
             <el-button type="text" :loading="heading" icon="el-icon-edit" @click="updateHead(row, 1)"
               v-if="row.headStatus == 0" v-permissions="['business:member:head']">璁句负涓荤</el-button>
-            <el-button type="text" icon="el-icon-delete" @click="deleteById(row)" style="color: red"
+            <el-button  v-if="sysConfig && sysConfig.orgUserDataOrigin != 3" type="text" icon="el-icon-delete" @click="deleteById(row)" style="color: red"
               v-permissions="['business:member:delete']">鍒犻櫎</el-button>
           </template>
         </el-table-column>
@@ -218,7 +218,7 @@
 import OperaMemberWindow from '@/components/business/OperaMemberWindow'
 import OperaMemberRoleWindow from '@/components/business/OperaMemberRoleWindow'
 import OperaMemberImportWindow from '@/components/business/OperaMemberImportWindow'
-import { fetchList } from '@/api/business/company'
+import { fetchList,getSysConfig } from '@/api/business/company'
 import { allList } from '@/api/business/position'
 import { memberSync,memberSyncDingding, roleAuth, updateCanVisit, updateHead, updateWorkStatus } from '@/api/business/member'
 export default {
@@ -246,6 +246,7 @@
         authStatus: '',
         idcardNo: ''
       },
+      sysConfig: null,
       loading: false,
       heading: false,
       working: false,
@@ -265,6 +266,7 @@
     // this.search()
     this.getfindCompanyTreePage()
     this.getPositionList()
+    this.getSysConfig()
   },
   mounted() {
     // this.$nextTick(() => {
@@ -299,6 +301,12 @@
           this.positionList = res
         })
     },
+    getSysConfig() {
+      getSysConfig({})
+        .then(res => {
+          this.sysConfig = res
+        })
+    },
     empower(id) {
       var that = this
       this.$confirm('纭畾閲嶆柊鎺堟潈鍚�?', '鎻愮ず', {
diff --git a/server/base_serivce/pom.xml b/server/base_serivce/pom.xml
new file mode 100644
index 0000000..f1ee84e
--- /dev/null
+++ b/server/base_serivce/pom.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.doumee</groupId>
+        <artifactId>dmvisit</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>base_serivce</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <poi.version>5.0.0</poi.version>
+        <oshi.version>5.7.0</oshi.version>
+        <fastjson.version>1.2.70</fastjson.version>
+        <!-- 闃块噷浜慜SS瀛樺偍 -->
+        <aliyun-oss.version>3.8.0</aliyun-oss.version>
+        <!-- 寰俊灏忕▼搴� -->
+        <weixin-java-miniapp.version>4.1.0</weixin-java-miniapp.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>2.1.5</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-miniapp</artifactId>
+            <version>${weixin-java-miniapp.version}</version>
+        </dependency>
+
+        <!-- lombok -->
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+            <version>2.0.1.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <!-- 宸ュ叿鍖� -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>${fastjson.version}</version>
+        </dependency>
+        <!-- Excel瀵煎叆/瀵煎嚭渚濊禆鍖� -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>${poi.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>${poi.version}</version>
+        </dependency>
+        <!-- swagger -->
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+            <version>3.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+            <version>3.0.0</version>
+        </dependency>
+
+        <!--  闃块噷浜慜SS-->
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+            <version>${aliyun-oss.version}</version>
+        </dependency>
+
+        <!-- aliyun sms SDK -->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>4.5.3</version>
+        </dependency>
+
+        <!-- 鑾峰彇绯荤粺淇℃伅渚濊禆鍖� -->
+        <dependency>
+            <groupId>com.github.oshi</groupId>
+            <artifactId>oshi-core</artifactId>
+            <version>${oshi.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jna-platform</artifactId>
+                    <groupId>net.java.dev.jna</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jna</artifactId>
+                    <groupId>net.java.dev.jna</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/server/base_serivce/src/main/java/com/doumee/Main.java b/server/base_serivce/src/main/java/com/doumee/Main.java
new file mode 100644
index 0000000..ada0d0d
--- /dev/null
+++ b/server/base_serivce/src/main/java/com/doumee/Main.java
@@ -0,0 +1,7 @@
+package com.doumee;
+
+public class Main {
+    public static void main(String[] args) {
+        System.out.println("Hello world!");
+    }
+}
\ No newline at end of file
diff --git a/server/jiandaoyun_service/pom.xml b/server/jiandaoyun_service/pom.xml
new file mode 100644
index 0000000..dff9185
--- /dev/null
+++ b/server/jiandaoyun_service/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.doumee</groupId>
+        <artifactId>dmvisit</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>jiandaoyun_service</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>com.doumee</groupId>
+            <artifactId>base_serivce</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/server/jiandaoyun_service/src/main/java/com/doumee/Main.java b/server/jiandaoyun_service/src/main/java/com/doumee/Main.java
new file mode 100644
index 0000000..ada0d0d
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/Main.java
@@ -0,0 +1,7 @@
+package com.doumee;
+
+public class Main {
+    public static void main(String[] args) {
+        System.out.println("Hello world!");
+    }
+}
\ No newline at end of file
diff --git a/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/CorpCoopApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/CorpCoopApiClient.java
new file mode 100644
index 0000000..4b49faf
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/DeptApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/DeptApiClient.java
new file mode 100644
index 0000000..a96129b
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/MemberApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/MemberApiClient.java
new file mode 100644
index 0000000..9370169
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleApiClient.java
new file mode 100644
index 0000000..03a81e5
--- /dev/null
+++ b/server/jiandaoyun_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.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 com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleGroupApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleGroupApiClient.java
new file mode 100644
index 0000000..d4d78db
--- /dev/null
+++ b/server/jiandaoyun_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.doumee.core.jiandaoyun.model.http.ApiClient;
+import com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import com.doumee.core.jiandaoyun.model.role.RoleGroupListQueryParam;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/AppApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/AppApiClient.java
new file mode 100644
index 0000000..699e1a5
--- /dev/null
+++ b/server/jiandaoyun_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.doumee.core.jiandaoyun.model.base.PageBaseParam;
+import com.doumee.core.jiandaoyun.model.http.ApiClient;
+import com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FileApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FileApiClient.java
new file mode 100644
index 0000000..2f34d62
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormApiClient.java
new file mode 100644
index 0000000..fca1dbd
--- /dev/null
+++ b/server/jiandaoyun_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.doumee.core.jiandaoyun.model.form.FormQueryParam;
+import com.doumee.core.jiandaoyun.model.http.ApiClient;
+import com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java
new file mode 100644
index 0000000..ccacb07
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java
@@ -0,0 +1,190 @@
+package com.doumee.core.jiandaoyun.api.jdy;
+
+import com.doumee.core.jiandaoyun.model.form.*;
+import com.doumee.core.jiandaoyun.model.http.ApiClient;
+import com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java
new file mode 100644
index 0000000..9439704
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/base/PageBaseParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/base/PageBaseParam.java
new file mode 100644
index 0000000..8f8c9e8
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptCreateParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptCreateParam.java
new file mode 100644
index 0000000..391ac2f
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java
new file mode 100644
index 0000000..232339c
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java
@@ -0,0 +1,22 @@
+package com.doumee.core.jiandaoyun.model.dept;
+
+import lombok.Data;
+
+/**
+ * 閮ㄩ棬瀹炰綋鍙傛暟
+ */
+
+@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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/file/UploadTokenParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/file/UploadTokenParam.java
new file mode 100644
index 0000000..edb12aa
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchCreateParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchCreateParam.java
new file mode 100644
index 0000000..da47787
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchRemoveParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchRemoveParam.java
new file mode 100644
index 0000000..a36f6fd
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchUpdateParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchUpdateParam.java
new file mode 100644
index 0000000..5d86c1f
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataCreateParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataCreateParam.java
new file mode 100644
index 0000000..189b623
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataDeleteParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataDeleteParam.java
new file mode 100644
index 0000000..dbfb200
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataQueryParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataQueryParam.java
new file mode 100644
index 0000000..b51d99d
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataUpdateParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataUpdateParam.java
new file mode 100644
index 0000000..643d04a
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormQueryParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormQueryParam.java
new file mode 100644
index 0000000..a796c19
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java
new file mode 100644
index 0000000..38e01d1
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java
@@ -0,0 +1,210 @@
+package com.doumee.core.jiandaoyun.model.http;
+
+import com.doumee.core.jiandaoyun.util.LimitUtil;
+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 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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/http/HttpRequestParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/http/HttpRequestParam.java
new file mode 100644
index 0000000..a27fe4b
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/BasePushRequest.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/BasePushRequest.java
new file mode 100644
index 0000000..a5a6cdf
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/BasePushRequest.java
@@ -0,0 +1,11 @@
+package com.doumee.core.jiandaoyun.model.request;
+
+import lombok.Data;
+
+@Data
+public class BasePushRequest<T> {
+    private T data;
+    private String op;//"鎿嶄綔绫诲瀷 data_update"
+    private Long opTime;//鏃堕棿鎴�1766975613395
+
+}
diff --git a/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/DepartmentPushData.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/DepartmentPushData.java
new file mode 100644
index 0000000..de6897d
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/DepartmentPushData.java
@@ -0,0 +1,12 @@
+package com.doumee.core.jiandaoyun.model.request;
+
+import lombok.Data;
+
+@Data
+public class DepartmentPushData {
+    private String _id;
+    private String name;
+    private Integer type;
+    private String dept_no;
+
+}
diff --git a/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/FilePushData.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/FilePushData.java
new file mode 100644
index 0000000..94bd390
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/FilePushData.java
@@ -0,0 +1,20 @@
+package com.doumee.core.jiandaoyun.model.request;
+
+import lombok.Data;
+
+@Data
+public class FilePushData {
+    /**
+     * {
+     *    "mime": "image/jpeg",
+     *    "name": "寰俊鍥剧墖_20240909171527.jpg",
+     *    "size": 66851,
+     *    "url": "https://files.jiandaoyun.com/b3353092-0961-4766-b0f0-c0fd46d21a00?attname=%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20240909171527.jpg&e=1768273199&token=IAM-0WcXoIsrkVmXepo5BSXTXDcIPX-DF4zkUslHbLwm:1Hb-HdLvmhbEYzNaAf6_7OrpyA4="
+     *    }
+     */
+    private String mime;
+    private String name;
+    private Integer size;
+    private String url;
+
+}
diff --git a/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberPushData.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberPushData.java
new file mode 100644
index 0000000..459f817
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberPushData.java
@@ -0,0 +1,34 @@
+package com.doumee.core.jiandaoyun.model.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MemberPushData{
+    private String _id;
+    private String appId;
+    private String code;
+    private String createTime;// "2025-12-26T03:08:39.123Z",
+    private String updateTime;
+    private String username;
+    private String entryId;
+    private String sex;
+    private String job_date;
+    private String can_visit;//鍙嫓璁� 涓嶅彲鎷滆
+    private String phone;
+    private String name;
+    private String idcardno;
+    private String formName;
+    private String deleteTime;
+    private Object flowState;
+    private List<FilePushData> imgurl;
+    private String position;//宀椾綅鍚嶇О
+    private String status;//"鍦ㄨ亴;绂昏亴"
+    private UserPushData creator;
+    private DepartmentPushData department;
+    private UserPushData updater;
+    private UserPushData deleter;
+    private UserPushData user;//鍏宠仈鍐呴儴浜哄憳
+
+}
diff --git a/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberStatusSubmitData.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberStatusSubmitData.java
new file mode 100644
index 0000000..e26a80e
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberStatusSubmitData.java
@@ -0,0 +1,11 @@
+package com.doumee.core.jiandaoyun.model.request;
+
+import lombok.Data;
+
+@Data
+public class MemberStatusSubmitData {
+    private String info;
+    private int status;
+    private String username ;
+
+}
diff --git a/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/UserPushData.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/UserPushData.java
new file mode 100644
index 0000000..d7e5756
--- /dev/null
+++ b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/UserPushData.java
@@ -0,0 +1,13 @@
+package com.doumee.core.jiandaoyun.model.request;
+
+import lombok.Data;
+
+@Data
+public class UserPushData {
+    private String _id;
+    private String name;
+    private Integer status;
+    private Integer type;
+    private String username;
+
+}
diff --git a/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleGroupListQueryParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleGroupListQueryParam.java
new file mode 100644
index 0000000..8518ab2
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleListQueryParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleListQueryParam.java
new file mode 100644
index 0000000..35f8e22
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleMemberQueryParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleMemberQueryParam.java
new file mode 100644
index 0000000..8318a7a
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleUpdateParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleUpdateParam.java
new file mode 100644
index 0000000..185d2c6
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserCreateParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserCreateParam.java
new file mode 100644
index 0000000..71b1798
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserEntityModel.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserEntityModel.java
new file mode 100644
index 0000000..9e304a2
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserUpdateParam.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserUpdateParam.java
new file mode 100644
index 0000000..0c203de
--- /dev/null
+++ b/server/jiandaoyun_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/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/util/LimitUtil.java b/server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/util/LimitUtil.java
new file mode 100644
index 0000000..ddbf736
--- /dev/null
+++ b/server/jiandaoyun_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/pom.xml b/server/pom.xml
index 60f3dff..8b2bb0f 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -18,6 +18,8 @@
       <module>system_gateway</module>
       <module>emaysms</module>
     <module>visits/device_service</module>
+      <module>jiandaoyun_service</module>
+      <module>base_serivce</module>
   </modules>
   <parent>
     <groupId>org.springframework.boot</groupId>
diff --git a/server/system_service/pom.xml b/server/system_service/pom.xml
index 2483770..1d7ddef 100644
--- a/server/system_service/pom.xml
+++ b/server/system_service/pom.xml
@@ -16,27 +16,25 @@
         <java.version>1.8</java.version>
         <swagger.version>2.9.2</swagger.version>
         <swagger.bootstrap-ui.version>1.9.6</swagger.bootstrap-ui.version>
-        <fastjson.version>1.2.70</fastjson.version>
         <druid.version>1.2.0</druid.version>
         <mybatis.plus.version>3.5.7</mybatis.plus.version>
         <apache.shiro.version>1.7.0</apache.shiro.version>
-        <oshi.version>5.7.0</oshi.version>
         <jna.version>5.14.0</jna.version>
-        <poi.version>5.0.0</poi.version>
         <spring-cloud.version>2021.0.3</spring-cloud.version>
         <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
         <!-- jwtToken -->
         <jjwt.version>0.9.1</jjwt.version>
         <!-- hutool 宸ュ叿鐩稿叧-->
         <hutool.version>5.5.8</hutool.version>
-        <!-- 寰俊灏忕▼搴� -->
-        <weixin-java-miniapp.version>4.1.0</weixin-java-miniapp.version>
         <!-- 寰俊鏀粯 -->
         <weixin-java-pay.version>4.1.0</weixin-java-pay.version>
-        <!-- 闃块噷浜慜SS瀛樺偍 -->
-        <aliyun-oss.version>3.8.0</aliyun-oss.version>
     </properties>
     <dependencies>
+        <dependency>
+            <groupId>com.doumee</groupId>
+            <artifactId>base_serivce</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
@@ -51,11 +49,6 @@
             <groupId>org.apache.shiro</groupId>
             <artifactId>shiro-spring</artifactId>
             <version>${apache.shiro.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.binarywang</groupId>
-            <artifactId>weixin-java-miniapp</artifactId>
-            <version>${weixin-java-miniapp.version}</version>
         </dependency>
         <!-- MyBatis plus -->
         <dependency>
@@ -106,28 +99,6 @@
             <scope>runtime</scope>
         </dependency>
 
-        <!-- swagger -->
-         <dependency>
-            <groupId>com.github.xiaoymin</groupId>
-            <artifactId>knife4j-spring-boot-starter</artifactId>
-            <version>3.0.3</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-boot-starter</artifactId>
-            <version>3.0.0</version>
-        </dependency>
-        <dependency>
-            <groupId>io.swagger.core.v3</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>2.1.5</version>
-        </dependency>
-        <!-- lombok -->
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-            <version>2.0.1.Final</version>
-        </dependency>
         <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-validator</artifactId>
@@ -148,52 +119,11 @@
             <artifactId>alibaba-dingtalk-service-sdk</artifactId>
             <version>2.0.0</version>
         </dependency>
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
         <!--google kaptcha-->
         <dependency>
             <groupId>com.github.penggle</groupId>
             <artifactId>kaptcha</artifactId>
             <version>2.3.2</version>
-        </dependency>
-        <!-- 宸ュ叿鍖� -->
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>${fastjson.version}</version>
-        </dependency>
-        <!-- Excel瀵煎叆/瀵煎嚭渚濊禆鍖� -->
-        <dependency>
-            <groupId>org.apache.poi</groupId>
-            <artifactId>poi</artifactId>
-            <version>${poi.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.poi</groupId>
-            <artifactId>poi-ooxml</artifactId>
-            <version>${poi.version}</version>
-        </dependency>
-        <!-- 鑾峰彇绯荤粺淇℃伅渚濊禆鍖� -->
-        <dependency>
-            <groupId>com.github.oshi</groupId>
-            <artifactId>oshi-core</artifactId>
-            <version>${oshi.version}</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>jna-platform</artifactId>
-                    <groupId>net.java.dev.jna</groupId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>jna</artifactId>
-                    <groupId>net.java.dev.jna</groupId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <!-- https://mvnrepository.com/artifact/com.github.yulichang/mybatis-plus-join -->
         <dependency>
@@ -245,21 +175,6 @@
         <!--      <artifactId>weixin-java-pay</artifactId>-->
         <!--      <version>${weixin-java-pay.version}</version>-->
         <!--    </dependency>-->
-
-        <!--  闃块噷浜慜SS-->
-        <dependency>
-            <groupId>com.aliyun.oss</groupId>
-            <artifactId>aliyun-sdk-oss</artifactId>
-            <version>${aliyun-oss.version}</version>
-        </dependency>
-
-        <!-- aliyun sms SDK -->
-        <dependency>
-            <groupId>com.aliyun</groupId>
-            <artifactId>aliyun-java-sdk-core</artifactId>
-            <version>4.5.3</version>
-        </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-configuration-processor</artifactId>
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..9e0ad3f 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,8 +12,19 @@
         int erp = 1;
         int hk = 2;
         int self = 0;
+        int jdy = 3;
+        int dingding = 4;
     }
+
+    /**
+     *
+     鍐呴儴缁勭粐浜哄憳鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+     */
     private Integer orgUserDataOrigin;
+    /**
+     * 璁垮鏉ユ簮锛�0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
+     */
     private Integer visitorDataOrigin;
+
     private Boolean needDealImg;
 }
diff --git a/server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java b/server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
index c39af5d..7875cdb 100644
--- a/server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
+++ b/server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
@@ -12,6 +12,7 @@
 @AllArgsConstructor
 public enum ResponseStatus {
     // 400寮�澶磋〃绀哄弬鏁伴敊璇�
+    JDY_BAD_REQUEST(401, "error"),
     BAD_REQUEST(4000, "鍙傛暟閿欒"),
     DATA_EMPTY(4001, "鎵句笉鍒扮洰鏍囨暟鎹�,璇ヨ褰曚笉瀛樺湪鎴栧凡琚垹闄�"),
     DATA_EXISTS(4002, "璁板綍宸插瓨鍦�"),
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index 391f5a2..b5da3fd 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -60,6 +60,9 @@
     public static final String JK_PLAN_MAX_CLUSTER ="JK_PLAN_MAX_CLUSTER" ;
     public static final String JK_PLAN_DISTANCE_CLUSTER ="JK_PLAN_DISTANCE_CLUSTER" ;
     public static final String HK_PUSH_THIRD_URL ="HK_PUSH_THIRD_URL" ;
+    public static final String JDY_CAR_SECRET = " JDY_CAR_SECRET";
+    public static final String JDY_SECRET ="JDY_SECRET";
+    public static final String JDY_MEMBER_PUSH_STATUS_URL ="JDY_MEMBER_PUSH_STATUS_URL";
 
     /**
      * 鎿嶄綔绫诲瀷锛岀敤浜庡仛鎺ュ彛楠岃瘉鍒嗙粍
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
index 6fe5dc6..d27f3b5 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -92,10 +92,11 @@
         Date nowAsISO = null;
         try {
             nowAsISO = df.parse(date);
-        } catch (ParseException e) {
+        } catch (Exception e) {
         }
         return nowAsISO;
     }
+
     public static Date getISO8601DateByStr2(String date)  {
         TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
         if(date!=null ){
@@ -111,7 +112,7 @@
         Date nowAsISO = null;
         try {
             nowAsISO = df.parse(date);
-        } catch (ParseException e) {
+        } catch (Exception e) {
         }
         return nowAsISO;
     }
@@ -2967,49 +2968,7 @@
 
     public static void main(String[] args) {
         try {
-
-            LocalDate today = LocalDate.now();
-
-            // 鑾峰彇褰撳墠鏃ユ湡鏄槦鏈熷嚑
-            DayOfWeek dayOfWeek = today.getDayOfWeek();
-
-            // 璁$畻鍛ㄤ竴鍜屽懆浜旂殑鏃ユ湡
-            LocalDate monday = today.with(DayOfWeek.MONDAY);
-            LocalDate friday = today.with(DayOfWeek.FRIDAY);
-
-            // 杈撳嚭鍛ㄤ竴鍜屽懆浜旂殑鏃ユ湡
-            System.out.println("Monday: " + monday.toString());
-            System.out.println("Friday: " + friday.toString());
-
-//            Date date = getISO8601DateByStr("2024-04-15T07:46:36.014+08:00");
-//            Date date1 = getISO8601DateByStr("2024-06-14T08:46:36.014+08:00");
-//            System.out.println(DateUtil.afterMinutesDate(-5));
-
-//            System.out.println(DateUtil.getWeekZhouOfDate(getDateFromString2("2025-11-06 00:00:00")));
-
-//            System.out.println(getPlusTime2(DateUtil.addMonthToDate(new Date(),-1)));
-//            System.out.println(DateUtil.getBeforMonthStr(new Date(),12));
-
-//            List<Date> list =getThisMonthDateList();
-//            for(Date d :list){
-//                System.out.println(getPlusTime2(d));
-//            }
-//            List<Date> list1 =getThisYearMonthList();
-//            for(Date d :list1){
-//                System.out.println(getPlusTime2(d));
-//            }
-
-//            Date startTime = DateUtil.StringToDate("2024-05-01 08:00:00" ,"yyyy-MM-dd HH:mm:ss");
-//            Date endTime = DateUtil.StringToDate("2024-05-01 17:00:00" ,"yyyy-MM-dd HH:mm:ss");
-//            Long intervalTime = 35L;
-//
-//
-//            DateUtil.checkDateInterval( startTime.toInstant()
-//                    .atZone(ZoneId.systemDefault())
-//                    .toLocalDateTime(), endTime.toInstant()
-//                    .atZone(ZoneId.systemDefault())
-//                    .toLocalDateTime(),intervalTime);
-
+        System.out.println(getISO8601DateByStr("2025-12-26T03:08:39.123Z"));
         } catch (Exception ex) {
             ex.printStackTrace();
         }
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java
index 9c009bb..5d66ed2 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java
@@ -613,8 +613,8 @@
 
 	public static void main(String[] args) throws Exception {
 		try {
-			FtpUtil ftpUtil = new FtpUtil("175.27.187.84", 21, "ftpuser","doumee168" );
-			ftpUtil.uploadOnlineFile("https://profile-avatar.csdnimg.cn/default.jpg!1", "test"+"/", UUID.randomUUID().toString()+"test.jpg");
+			FtpUtil ftpUtil = new FtpUtil("192.168.0.7", 21, "uftp","doumee@168" );
+			ftpUtil.uploadOnlineFile("https://profile-avatar.csdnimg.cn/default.jpg!1", "member"+"/20251229/", UUID.randomUUID().toString()+"test.jpg");
 			/*FtpUtil myFtp = new FtpUtil("106.15.54.228", 21, "ftptlg",
 					"tlg168.com");
 			System.out.println(myFtp.upload("D:\\devices.sql", "/1111/devices.sql"));
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..a5ccb0d 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
@@ -229,6 +229,9 @@
     @ApiModelProperty(value = "缁勭粐缂栫爜璺緞")
     @TableField(exist = false)
     private String companyPath;
+    @ApiModelProperty(value = "缁勭粐淇℃伅")
+    @TableField(exist = false)
+    private Company company;
     @ApiModelProperty(value = "璐熻矗浜虹紪鐮侊紙鍏宠仈member)")
     @TableField(exist = false)
     private Integer headId;
@@ -304,5 +307,7 @@
     @ApiModelProperty(value = "鏄惁鏌ヨ閽ュ寵鏌滄牎楠屼汉鍛橈細0=鍚︼紱1=鏄�" )
     @TableField(exist = false)
     private Integer queryAuth;
-
+    @ApiModelProperty(value = "閮ㄩ棬閮ㄩ棬闆嗗悎" )
+    @TableField(exist = false)
+    private List<Long>  companyIdList;
 }
diff --git a/server/system_service/src/main/java/com/doumee/service/business/third/model/ApiResponse.java b/server/system_service/src/main/java/com/doumee/service/business/third/model/ApiResponse.java
index aca75c3..fdd22a7 100644
--- a/server/system_service/src/main/java/com/doumee/service/business/third/model/ApiResponse.java
+++ b/server/system_service/src/main/java/com/doumee/service/business/third/model/ApiResponse.java
@@ -100,6 +100,26 @@
         return new ApiResponse<>(code, Boolean.FALSE, message, null, exceptionStack.toString());
     }
 
+    public static void send200SuccessResponse(HttpServletResponse response) throws IOException {
+        try {
+            response.setStatus(200);
+            response.getWriter().write("success");
+            response.getWriter().close();
+        }catch (Exception e){
+
+        }
+    }
+
+    public static void send401FailResponse(HttpServletResponse response)  {
+        try {
+            response.setStatus(401);
+            response.getWriter().write("fail");
+            response.getWriter().close();
+        }catch (Exception e){
+
+        }
+
+    }
 
 
     public static void outputCode(HttpServletResponse response, String code) {
diff --git a/server/system_timer/src/main/resources/application-dev.yml b/server/system_timer/src/main/resources/application-dev.yml
index ce7c96f..ba50b53 100644
--- a/server/system_timer/src/main/resources/application-dev.yml
+++ b/server/system_timer/src/main/resources/application-dev.yml
@@ -34,8 +34,8 @@
 
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 
diff --git a/server/system_timer/src/main/resources/application-self.yml b/server/system_timer/src/main/resources/application-self.yml
index fa12a17..6e122ea 100644
--- a/server/system_timer/src/main/resources/application-self.yml
+++ b/server/system_timer/src/main/resources/application-self.yml
@@ -34,8 +34,8 @@
 
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 
diff --git a/server/system_timer/src/main/resources/application-test.yml b/server/system_timer/src/main/resources/application-test.yml
index 63519a1..2f9df6f 100644
--- a/server/system_timer/src/main/resources/application-test.yml
+++ b/server/system_timer/src/main/resources/application-test.yml
@@ -34,8 +34,8 @@
 
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 
diff --git a/server/visits/admin_timer/pom.xml b/server/visits/admin_timer/pom.xml
index eb4aa16..b059cdd 100644
--- a/server/visits/admin_timer/pom.xml
+++ b/server/visits/admin_timer/pom.xml
@@ -8,15 +8,12 @@
         <artifactId>visits</artifactId>
         <version>1.0.0-SNAPSHOT</version>
     </parent>
-
     <artifactId>admin_timer</artifactId>
-
     <properties>
         <maven.compiler.source>8</maven.compiler.source>
         <maven.compiler.target>8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
-
     <dependencies>
         <dependency>
             <groupId>com.doumee</groupId>
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java
index 6c3d90c..2d5857d 100644
--- a/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java
@@ -1,26 +1,16 @@
 package com.doumee.api;
 
-import com.alibaba.fastjson.JSONObject;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.dingTalk.DingTalk;
-import com.doumee.core.utils.Constants;
-import com.doumee.core.utils.HttpsUtil;
-import com.doumee.core.wx.WXConstant;
-import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.service.business.third.model.ApiResponse;
 import com.doumee.service.system.SystemDictDataService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.mgt.DefaultSecurityManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Date;
-import java.util.Objects;
 
 /**
  * @author 姹熻箘韫�
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/HkUsersTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/HkUsersTimerController.java
index d27ef52..728213b 100644
--- a/server/visits/admin_timer/src/main/java/com/doumee/api/HkUsersTimerController.java
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/HkUsersTimerController.java
@@ -37,8 +37,7 @@
     @PostMapping("/syncOrgData")
     public ApiResponse syncOrgData() {
         log.info("=========================寮�鍚畾鏃跺悓姝ユ捣搴风粍缁囨暟鎹�===========start===========");
-        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp
-            || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self) {
+        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk) {
             //濡傛灉鏄疎RP绯荤粺鍚屾涓嬪彂
             hkSyncOrgUserService.syncOrgData(null);
         }
@@ -50,7 +49,6 @@
     public ApiResponse syncMemberDelData() {
         log.info("=========================寮�鍚畾鏃堕噸鏂颁笅鍙戝垹闄や汉鍛樻暟鎹�===========start===========");
         hkSyncOrgUserService.syncMemberDelData();
-
         log.info("=========================寮�鍚畾鏃堕噸鏂颁笅鍙戝垹闄や汉鍛樻暟鎹�===========end===========");
         return ApiResponse.success("寮�鍚畾鏃堕噸鏂颁笅鍙戝垹闄や汉鍛樻暟鎹垚鍔�");
     }
@@ -58,8 +56,7 @@
     @PostMapping("/syncUserData")
     public ApiResponse syncUserData() {
         log.info("=========================寮�鍚畾鏃跺悓姝ユ捣搴蜂汉鍛樻暟鎹�===========start===========");
-        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp
-                || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self) {
+        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk) {
             //濡傛灉鏄疎RP绯荤粺鍚屾涓嬪彂
             hkSyncOrgUserService.syncUserData(null);
         }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/JiandaoyunCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/JiandaoyunCloudController.java
new file mode 100644
index 0000000..0b057ba
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/JiandaoyunCloudController.java
@@ -0,0 +1,174 @@
+package com.doumee.api.business;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+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.jiandaoyun.model.request.BasePushRequest;
+import com.doumee.core.jiandaoyun.model.request.MemberPushData;
+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.core.wms.model.response.WmsBaseDataResponse;
+import com.doumee.core.wms.model.response.WmsBaseResponse;
+import com.doumee.dao.business.model.CarUseBook;
+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.CarUseBookService;
+import com.doumee.service.business.CarsService;
+import com.doumee.service.business.MemberService;
+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 = "銆愮畝閬撲簯銆戜笟鍔℃帴鍙�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/jiandaoyun")
+@Slf4j
+public class JiandaoyunCloudController extends BaseController {
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private MemberService memberService;
+
+    public  static final String SECRET ="yKSKuO0LoFf06jWGrwwuGudK";
+
+    @LoginNoRequired
+    @ApiOperation("绠�閬撲簯鎺ㄩ�佺敤鎴蜂俊鎭�")
+    @PostMapping("/pushMemberData")
+    @PreventRepeat
+    public ApiResponse pushMemberData (HttpServletRequest request, HttpServletResponse response)  {
+        BasePushRequest<MemberPushData> o = checkParamterValid(request,response,new TypeReference<BasePushRequest<MemberPushData>>(){});
+        if(o == null || o.getData() ==null){
+             return   ApiResponse.failed(401,"error");
+        }
+        int status =0;
+        String info ="鍚屾鎴愬姛";
+        try {
+            memberService.dealJdyMemberInfo(o.getData());//澶勭悊绠�閬撲簯淇℃伅
+        }catch (BusinessException e){
+            status =1;
+            info =e.getMessage();
+            return  ApiResponse.failed(e.getCode(),e.getMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            status =1;
+            info="鍚屾鍙戦�佸紓甯�";
+            return  ApiResponse.failed(ResponseStatus.SERVER_ERROR.getCode(),e.getMessage());
+        }finally {
+            memberService.sendMemberInfoResult(o.getData().getUsername(),info,status);
+        }
+
+        return ApiResponse.success("success");
+    }
+
+    private <T> BasePushRequest<T>  checkParamterValid(HttpServletRequest request, HttpServletResponse response,TypeReference<BasePushRequest<T>> typeReference) {
+
+        log.error("銆愮畝閬撲簯銆� 鐢ㄨ溅鐢宠 =========getRequestURI锛歿}",request.getRequestURI());
+        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 = json.toString();
+            Map<String, String> parameterMap = parseParameter(request.getQueryString());
+            String nonce = parameterMap.get("nonce");
+            String timestamp = parameterMap.get("timestamp");
+            String signature = getSignature(nonce, payload, systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_SECRET).getCode(), timestamp);
+            log.error("銆愮畝閬撲簯銆戞暟鎹帹閫� =========getRequestURI锛歿}\n锛宷ueryParam锛歿}\n,payload:{}\n,绛惧悕锛歿}\n,姝g‘绛惧悕:{}\n",request.getRequestURI(),request.getQueryString(),payload,jdy,signature);
+            if (!signature.equals(jdy)) {
+                return  null;
+            }
+            BasePushRequest<T>  t = JSONObject.parseObject(payload, typeReference.getType());
+            return t;
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("銆愮畝閬撲簯銆� 鐢ㄨ溅鐢宠 =========寮傚父锛歿}",e.getMessage());
+        }
+        return null;
+    }
+
+
+    @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);
+    }
+
+    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/6909d0fbdb93695219faa27eb068192dc4a9532972993159";
+        JSONObject object = new JSONObject();
+        object.put("status",0);
+        object.put("username","20251104160000" );
+        object.put("info", "杩欐槸澶囨敞");
+        String result = HttpsUtil.postJson(url,JSONObject.toJSONString(object));
+        System.out.println(result);
+    }
+}
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..3a5bb20 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
@@ -177,20 +177,15 @@
     public ApiResponse<List<CompanyDTO>> findCompanyTreePage(Integer type){
         return ApiResponse.success(companyService.findCompanyTreePage(type));
     }
-
-    @ApiOperation("鍏ㄩ噺閮ㄩ棬淇℃伅鍚屾 - 閽夐拤")
-    @PostMapping("/syncAllDingding")
-//    @CloudRequiredPermission("business:company:sync")
-    public ApiResponse syncAllDingding() throws ApiException {
-        companyService.syncDDCompany();
-        return ApiResponse.success("鍚屾鎴愬姛");
+    @ApiOperation("鑾峰彇鍐呴儴浜哄憳缁勭粐鏉ユ簮閰嶇疆")
+    @GetMapping("/getSysConfig")
+    public ApiResponse<DataSyncConfig> getSysConfig(){
+        return ApiResponse.success(dataSyncConfig);
     }
-
-
 
     @ApiOperation("鍏ㄩ噺閮ㄩ棬淇℃伅鍚屾")
     @PostMapping("/syncAll")
-    @CloudRequiredPermission("business:company:sync")
+    @CloudRequiredPermission("business:company:create")
     public ApiResponse sync(@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp){
             return ApiResponse.success( erpSyncService.syncCompany(null));
@@ -200,6 +195,12 @@
         }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self){
             hkSyncOrgUserFromSelfService.syncOrgData(this.getLoginUser(token));
             return ApiResponse.success("鍚屾鎴愬姛");
+        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.dingding){
+            companyService.syncDDCompany();
+            return ApiResponse.success("鍚屾鎴愬姛");
+        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.jdy){
+            companyService.syncJdyCompany();
+            return ApiResponse.success("鍚屾鎴愬姛");
         }
         return ApiResponse.failed("鏃犳晥鎿嶄綔");
     }
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..2c8d0a9 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
@@ -327,7 +327,7 @@
 
     @ApiOperation("鍏ㄩ噺淇℃伅鍚屾")
     @PostMapping("/syncAll")
-    @CloudRequiredPermission("business:member:sync")
+    @CloudRequiredPermission("business:member:create")
     public ApiResponse sync(@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp){
             erpSyncService.syncUsers(null);
@@ -335,6 +335,12 @@
             hkSyncOrgUserFHKService.syncUserData(this.getLoginUser(token));
         }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.dingding){
+            memberService.syncDDUserInfo();
+            return ApiResponse.success("鍚屾鎴愬姛");
+        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.jdy){
+            memberService.syncJdyUserInfo();
             return ApiResponse.success("鍚屾鎴愬姛");
         }
         return ApiResponse.success("鍚屾鎴愬姛");
@@ -369,13 +375,6 @@
     }
 
 
-    @ApiOperation("鍏ㄩ噺浜哄憳淇℃伅鍚屾 - 閽夐拤")
-    @PostMapping("/syncAllDingding")
-//    @CloudRequiredPermission("business:company:sync")
-    public ApiResponse syncAllDingding() throws ApiException {
-        memberService.syncDDUserInfo();
-        return ApiResponse.success("鍚屾鎴愬姛");
-    }
 
 
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
index f98a73c..f6356ad 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -49,17 +49,13 @@
                 .build();
     }
     @Bean
-    public Docket getDocket() {
+    public Docket getDocket2() {
         return new Docket(DocumentationType.SWAGGER_2)
                 .apiInfo(this.getApiInfo()).groupName("default")
                 .host(host)
                 .enable(enabled)
                 .select()
-                .apis( basePackage("com.doumee.cloud"))
-//                .apis( basePackage("com.doumee.api.common"))
-
-//                .apis( basePackage("com.doumee.cloud.openapi;com.doumee.api.common"))
-//                .apis( basePackage("com.doumee.cloud.openapi"))
+                .apis( basePackage("com.doumee.cloud;"))
                 // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                 .paths(PathSelectors.any())
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 2e1efaa..3be58d6 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
@@ -24,4 +24,5 @@
   basic:
     enable: true
     username: admin
-    password: 111111
\ No newline at end of file
+    password: 111111
+
diff --git a/server/visits/dmvisit_service/pom.xml b/server/visits/dmvisit_service/pom.xml
index f2ae256..9aff8b7 100644
--- a/server/visits/dmvisit_service/pom.xml
+++ b/server/visits/dmvisit_service/pom.xml
@@ -24,6 +24,11 @@
         </dependency>
         <dependency>
             <groupId>com.doumee</groupId>
+            <artifactId>jiandaoyun_service</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.doumee</groupId>
             <artifactId>device_service</artifactId>
             <version>1.0.0-SNAPSHOT</version>
         </dependency>
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..675110f 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
@@ -130,7 +130,9 @@
 
     void updateSort(UpdateCompanySortDTO dto);
 
-    void ddPushCompanyInfo(String eventType, JSONObject eventData) throws ApiException;
+    void ddPushCompanyInfo(String eventType, JSONObject eventData)  ;
 
-    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..949903c 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
@@ -1,5 +1,6 @@
 package com.doumee.service.business;
 
+import com.doumee.core.jiandaoyun.model.request.MemberPushData;
 import com.doumee.dao.web.response.DDAuthorizeVO;
 import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
@@ -168,6 +169,11 @@
     void registerDriver(RegisterDriverDTO registerDriverDTO);
 
     /**
+     * 鍚屾绠�鍗曚簯鐢ㄦ埛
+     * @return
+     */
+    String syncJdyUserInfo();
+    /**
      * 寰俊鎺堟潈鎺ュ彛
      * @param code
      * @return
@@ -212,7 +218,11 @@
 
     void initPinyinTool();
 
-    void syncDDUserInfo() throws ApiException;
+    void syncDDUserInfo() ;
 
-    void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException;
+    void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData)  ;
+
+    void dealJdyMemberInfo(MemberPushData data);
+
+    void sendMemberInfoResult(String username, String info, int status);
 }
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 34b0097..756854a 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;
@@ -39,7 +46,6 @@
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.CompanyService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import com.taobao.api.ApiException;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
@@ -132,7 +138,7 @@
         company.setIsdeleted(Constants.ZERO);
         company.setHkStatus(Constants.ONE);
         company.setStatus(Constants.ZERO);
-        company.setSortnum(Objects.isNull(company.getSortnum())?0:company.getSortnum());
+        company.setSortnum(0);//榛樿鏈�涓婇潰
         company.setHkDate(company.getCreateDate());
         company.setEditDate(company.getCreateDate());
         company.setEditor(company.getCreator());
@@ -169,8 +175,8 @@
         OrgEditRequest request = (getOrgHkEditModel(company));
         BaseResponse result =  HKService.editOrg(request);
         if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
-                //澶勭悊鏂板鎴愬姛鐨勬暟鎹紝淇敼娴峰悍鍚屾鐘舵��
-                return true;
+            //澶勭悊鏂板鎴愬姛鐨勬暟鎹紝淇敼娴峰悍鍚屾鐘舵��
+            return true;
         }
         return false;
     }
@@ -180,7 +186,7 @@
         request.setIndexCodes(new String[]{company.getHkId()});
         BaseResponse<List<OrgUpdateFailureResponse>> result =  HKService.delBatchOrg(request);
         if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
-                //澶勭悊鏂板鎴愬姛鐨勬暟鎹紝淇敼娴峰悍鍚屾鐘舵��
+            //澶勭悊鏂板鎴愬姛鐨勬暟鎹紝淇敼娴峰悍鍚屾鐘舵��
             if(result.getData()!=null && result.getData().size()==0){
                 return true;
             }
@@ -292,7 +298,7 @@
         if(company.getId() == null|| StringUtils.isBlank(company.getName())){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-        if(company.getType()!=null && !(company.getType() ==0 || company.getType() ==1 || company.getType() ==-1)){
+        if(company.getType()!=null && !(company.getType() ==-1 || company.getType() ==0 || company.getType() ==1)){
             throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝缁勭粐绫诲瀷涓嶆纭紝璇锋寜瑕佹眰濉啓~");
         }
         //鏌ヨ鍚嶇О涓嶈兘閲嶅
@@ -324,7 +330,6 @@
         company.setType(null);
         company.setEditDate(new Date());
         company.setEditor(user.getId());
-
         company.setHkStatus(Constants.ONE);
         company.setHkDate(company.getHkDate());
         company.setHkId(StringUtils.defaultString(model.getHkId(),UUID.randomUUID().toString().replace("-","")));
@@ -334,14 +339,14 @@
         //鏇存柊鐨刢ompanyPath
         String newName = model.getCompanyNamePath().replace(model.getName(),company.getName());
         companyMapper.update(null,new UpdateWrapper<Company>().lambda()
-                        .setSql("company_name_path=REPLACE(company_name_path,'"+ model.getCompanyNamePath()+"','"+newName+"')")
-                        .setSql("hk_company_path=REPLACE(hk_company_path,'"+ model.getCompanyNamePath()+"','"+newName+"')")
+                .setSql("company_name_path=REPLACE(company_name_path,'"+ model.getCompanyNamePath()+"','"+newName+"')")
+                .setSql("hk_company_path=REPLACE(hk_company_path,'"+ model.getCompanyNamePath()+"','"+newName+"')")
                 .likeRight(Company::getCompanyPath,model.getCompanyPath()));
         //涓嬪彂娴峰悍瀹夐槻骞冲彴
         if(StringUtils.isNotBlank(model.getHkId())){
-             if(!editHkOrg(company)){
-                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝缁勭粐鍚屾涓嬪彂澶辫触锛岃绋嶅悗閲嶈瘯");
-             }
+            if(!editHkOrg(company)){
+                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝缁勭粐鍚屾涓嬪彂澶辫触锛岃绋嶅悗閲嶈瘯");
+            }
         }else{//濡傛灉娌℃湁涓嬪彂杩囷紝鐩存帴鏂板缓瀹夐槻骞冲彴缁勭粐
             if(!addHkOrg(company)){
                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝缁勭粐鍚屾涓嬪彂澶辫触锛岃绋嶅悗閲嶈瘯");
@@ -787,35 +792,45 @@
     // org_dept_remove 閮ㄩ棬鍒犻櫎 {"timeStamp":"1758785817760","eventId":"47e289f334e041719ed354052da474de","deptId":[1040735458]}
 
     @Override
-    public void ddPushCompanyInfo(String eventType, JSONObject eventData) throws ApiException {
-        JSONArray jsonArray = eventData.getJSONArray("deptId");
-        if(jsonArray.isEmpty()){
-            return;
-        }
-        if(eventType.equals("org_dept_remove")){
-            //鍒犻櫎瀵瑰簲閮ㄩ棬淇℃伅
-            List<Long> deptIdList = new ArrayList<>();
-            for (int i = 0; i < jsonArray.size(); i++) {
-                Long deptId = jsonArray.getLong(i);
-                 deptIdList.add(deptId);
+    public void ddPushCompanyInfo(String eventType, JSONObject eventData)  {
+        try {
+            JSONArray jsonArray = eventData.getJSONArray("deptId");
+            if(jsonArray.isEmpty()){
+                return;
             }
-            if(CollectionUtils.isNotEmpty(deptIdList)){
-                syncDelCompany(deptIdList);
-            }
-        }else if(eventType.equals("org_dept_create")||eventType.equals("org_dept_modify")){
-            for (int i = 0; i < jsonArray.size(); i++) {
-                Company company  = companyMapper.selectOne(new QueryWrapper<Company>().lambda()
-                        .eq(Company::getIsdeleted,Constants.ZERO)
-                        .eq(Company::getErpId,jsonArray.getLong(i))
-                );
-                OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse = dingTalk.syncDepartmentInfo(jsonArray.getLong(i));
-                if(Objects.isNull(company)){
-                    getAddCompanyModel(deptGetResponse,company);
-                }else{
-                    getUpdateCompanyModel(deptGetResponse,company);
+            if(eventType.equals("org_dept_remove")){
+                //鍒犻櫎瀵瑰簲閮ㄩ棬淇℃伅
+                List<Long> deptIdList = new ArrayList<>();
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    Long deptId = jsonArray.getLong(i);
+                    deptIdList.add(deptId);
+                }
+                if(CollectionUtils.isNotEmpty(deptIdList)){
+                    syncDelCompany(deptIdList);
+                }
+            }else if(eventType.equals("org_dept_create")||eventType.equals("org_dept_modify")){
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    Company company  = companyMapper.selectOne(new QueryWrapper<Company>().lambda()
+                            .eq(Company::getIsdeleted,Constants.ZERO)
+                            .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)){
+                        param.setSortnum(deptGetResponse.getOrder().intValue());//榛樿鏈�涓婇潰
+                        getAddCompanyModel(param);
+                    }else{
+                        getUpdateCompanyModel(param,company);
+                    }
                 }
             }
+        }catch (Exception e){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"鏁版嵁鍚屾澶辫触");
         }
+
     }
 
     private void doHkDeleteOrg(List<Integer> delIds,List<String> delHkIds,  Date date) {
@@ -851,35 +866,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){
@@ -894,21 +980,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);
     }
 
 
@@ -937,27 +1022,39 @@
         }
         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();
+        Company root =getRootCompanyModel(rootOrgId);
         company.setCompanyPath(company.getId()+"/");//鍚嶇О璺緞
         company.setCompanyNamePath(company.getName());//鍚嶇О璺緞
         company.setHkParentId(rootOrgId);
@@ -966,7 +1063,9 @@
             Company parent = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,company.getErpParentId())
                     .eq(Company::getIsdeleted,Constants.ZERO).last(" limit 1 "));
             if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)){
-                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鐖剁骇缁勭粐淇℃伅涓嶅瓨鍦▇");
+                //鐖剁骇涓嶅瓨鍦ㄧ殑锛岀洿鎺ユ寕鍦ㄦ牴缁勭粐涓�
+                parent = root;
+//                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鐖剁骇缁勭粐淇℃伅涓嶅瓨鍦▇");
             }
 //            if(StringUtils.isBlank(parent.getHkId())){
 //                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鐖剁骇缁勭粐淇℃伅灏氭湭鍚屾涓嬪彂鎴愬姛~");
@@ -996,34 +1095,76 @@
         companyMapper.insert(company);
 
         company.setHkId(UUID.randomUUID().toString().replace("-",""));
+        Company com = new Company();
+        com.setId(company.getId());
+        com.setCompanyPath(idPath+company.getId()+"/");
+        companyMapper.updateById(com);
         //涓嬪彂娴峰悍瀹夐槻骞冲彴
-        Boolean issueStatus = addHkOrg(company);
+    /*    Boolean issueStatus = addHkOrg(company);
         Company com = new Company();
         com.setId(company.getId());
         com.setHkId(issueStatus?company.getHkId():null);
         com.setHkStatus(issueStatus?Constants.ONE:Constants.TWO);
-        com.setCompanyPath(idPath+company.getId()+"/");
-        companyMapper.updateById(com);
+        companyMapper.updateById(com);*/
         return company;
     }
 
+    /**
+     * 鍐呯疆鏍圭粍缁�
+     * @param rootOrgId
+     * @return
+     */
+    private Company getRootCompanyModel(String rootOrgId) {
+        Company root = companyMapper.selectOne(new QueryWrapper<Company>().lambda()
+                .eq(Company::getIsdeleted,Constants.ZERO)
+                .isNull(Company::getParentId)
+                .last(" limit 1 "));
+        if(root== null){
+            String name =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_ROOTORG_NAME).getCode();
+            name =StringUtils.defaultString(name,"鏍圭粍缁�");
+            root = new Company();
+            root.setCreateDate(new Date());
+            root.setEditDate(new Date());
+            root.setName(name);
+            root.setType(-1);
+            root.setHkId(rootOrgId);
+            root.setHkStatus(Constants.ONE);
+            root.setIsdeleted(Constants.ZERO);
+            root.setStatus(Constants.ZERO);
+            root.setHkCompanyPath(rootOrgId+"/");
+            root.setCompanyNamePath(root.getName());
+            root.setHkDate(new Date());
+            root.setRemark("榛樿鏍圭粍缁�");
+            companyMapper.insert(root);
+            root.setCompanyPath(root.getId()+"/");
+            companyMapper.updateById(root);
+        }
+        return root;
 
-    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 rootOrgId = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_ROOTORG_CODE).getCode();
+        Company root =getRootCompanyModel(rootOrgId);
         String idPath = "";
         if(StringUtils.isNotBlank(company.getErpParentId())){
-            Company parent = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,company.getErpParentId())
-                    .eq(Company::getIsdeleted,Constants.ZERO).last("limit 1 "));
+            Company parent = companyMapper.selectOne(new QueryWrapper<Company>().lambda()
+                    .eq(Company::getErpId,company.getErpParentId())
+                    .eq(Company::getType,Constants.ONE)
+                    .eq(Company::getIsdeleted,Constants.ZERO)
+                    .last("limit 1 "));
             if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)){
-                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鐖剁骇缁勭粐淇℃伅涓嶅瓨鍦▇");
+              parent =root;
             }
-            if(Objects.nonNull(parent.getType())&&!Constants.equalsInteger(parent.getType(),-1)){
+       /*   if(Objects.nonNull(parent.getType())&&!Constants.equalsInteger(parent.getType(),-1)){
                 if(!Constants.equalsInteger(company.getType(),parent.getType())){
                     throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝缁勭粐淇℃伅閿欒");
                 }
             }else if(Objects.isNull(parent.getType())){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝缁勭粐淇℃伅閿欒");
-            }
+            }*/
             idPath = parent.getCompanyPath();
             company.setHkParentId(parent.getHkId());
             company.setCompanyPath(parent.getCompanyPath()+company.getId()+"/");
@@ -1031,28 +1172,26 @@
             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.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());
         company.setPinyin(Constants.getChinesePingyin(company.getName()));
         companyMapper.updateById(company);
         //涓嬪彂娴峰悍瀹夐槻骞冲彴
-        Boolean issueStatus = editHkOrg(company);
+     /*   Boolean issueStatus = editHkOrg(company);
         Company com = new Company();
         com.setId(company.getId());
         com.setHkId(issueStatus?company.getHkId():null);
         com.setHkStatus(issueStatus?Constants.ONE:Constants.TWO);
         com.setCompanyPath(idPath+company.getId()+"/");
-        companyMapper.updateById(com);
+        companyMapper.updateById(com);*/
         return company;
     }
 
@@ -1078,7 +1217,5 @@
             doHkDeleteOrg(delIds,delHKIds,new Date());
         }
     }
-
-
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
index 5627748..c30157f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
@@ -217,6 +217,12 @@
         if (pageWrap.getModel().getName() != null) {
             queryWrapper.lambda().like(Device::getName, pageWrap.getModel().getName());
         }
+        if (pageWrap.getModel().getDoorNo() != null) {
+            queryWrapper.lambda().like(Device::getDoorNo, pageWrap.getModel().getDoorNo());
+        }
+        if (pageWrap.getModel().getNo() != null) {
+            queryWrapper.lambda().like(Device::getNo, pageWrap.getModel().getNo());
+        }
         if (pageWrap.getModel().getDoorName() != null) {
             queryWrapper.lambda().like(Device::getDoorName, pageWrap.getModel().getDoorName());
         }
@@ -396,7 +402,7 @@
         }
         MqttClientCache.clientMapCache.put("device"+param.getId(),mqttClient);
         String curremak = "銆�"+param.getLoginUserInfo().getRealname()
-                +"銆戜簬"+ DateUtil.getPlusTime2(new Date()) +"杩涜浜�"+(Constants.equalsInteger(param.getStatus(),Constants.ONE)?"銆愬紑闂搞��":"銆愬叧闂搞��")+"鎿嶄綔,寮�鍏炽��"+param.getChannelNo()+"銆戯紱";
+                +"銆戜簬"+ DateUtil.getPlusTime2(new Date()) +"杩涜浜�"+(Constants.equalsInteger(param.getStatus(),Constants.ONE)?"銆愬悎闂搞��":"銆愬垎闂搞��")+"鎿嶄綔,寮�鍏炽��"+param.getChannelNo()+"銆戯紱";
         deviceMapper.update(null,new UpdateWrapper<Device>().lambda()
 //                        .setSql("remark = concat(ifnull(remark,''),'"+curremak+"','\n')")
                 .set(Device::getRemark,curremak)
@@ -414,7 +420,7 @@
         data.setVal1("杩滅▼鎺у埗");
         data.setVal2(curremak);
         data.setHappenTime(DateUtil.getPlusTime2(data.getCreateDate()));
-        data.setVal3((Constants.equalsInteger(param.getStatus(),Constants.ONE)?"銆愬紑闂搞��":"銆愬叧闂搞��"));
+        data.setVal3((Constants.equalsInteger(param.getStatus(),Constants.ONE)?"銆愬悎闂搞��":"銆愬垎闂搞��"));
         data.setVal4(param.getLoginUserInfo().getRealname());
         data.setVal5(param.getChannelNo());
         deviceDataMapper.insert(data);
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 28ed5e9..5b8ff5b 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,12 @@
 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.request.MemberPushData;
+import com.doumee.core.jiandaoyun.model.request.UserPushData;
+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;
@@ -59,17 +67,21 @@
 import com.doumee.service.business.third.model.response.TmsEmployeeListResponse;
 import com.doumee.service.system.SystemLoginService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import com.taobao.api.ApiException;
+import lombok.Synchronized;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.util.DataUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.CellType;
 import org.apache.shiro.SecurityUtils;
+import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -86,6 +98,7 @@
  * @author 姹熻箘韫�
  * @date 2023/11/30 15:33
  */
+@Slf4j
 @Service
 public class MemberServiceImpl implements MemberService {
 
@@ -153,7 +166,7 @@
 
     @Autowired
     private DingTalk dingTalk;
-    
+
     @Value("${debug_model}")
     private Boolean isDebug;
     @Override
@@ -169,18 +182,18 @@
         Member insert = initAddMemberModel(member,loginUserInfo);
         //娴峰悍浜哄憳鏂板涓氬姟
         try {
-             if(dealHkUserBiz(insert)){
-                memberMapper.insert(insert);
-                //鍒涘缓绯荤粺鐧婚檰璐﹀彿锛堥粯璁ゆ棤浠讳綍瑙掕壊锛�
+//             if(dealHkUserBiz(insert)){
+            memberMapper.insert(insert);
+            //鍒涘缓绯荤粺鐧婚檰璐﹀彿锛堥粯璁ゆ棤浠讳綍瑙掕壊锛�
 //                if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
-                    //濡傛灉鏄唴閮ㄧ粍缁囦汉鍛橈紝鏂板绯荤粺鐧婚檰璐﹀彿
-                    systemUserMapper.insert(createSystemUser(insert,systemDictDataBiz));
-                    //澶勭悊鍩硅鏈夋晥鏈熶笟鍔�
-                    dealTrainTIme(member,0,loginUserInfo);
+            //濡傛灉鏄唴閮ㄧ粍缁囦汉鍛橈紝鏂板绯荤粺鐧婚檰璐﹀彿
+            systemUserMapper.insert(createSystemUser(insert,systemDictDataBiz));
+            //澶勭悊鍩硅鏈夋晥鏈熶笟鍔�
+            dealTrainTIme(member,0,loginUserInfo);
 //                }
-            }else{
-                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鍛樺伐淇℃伅鍚屾瀹夐槻骞冲彴澶辫触锛岃绋嶅悗閲嶈瘯锛�");
-            }
+//            }else{
+//                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鍛樺伐淇℃伅鍚屾瀹夐槻骞冲彴澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+//            }
         }catch (BusinessException e){
             //濡傛灉鍙戠敓寮傚父锛屽垹闄ゅ凡缁忓垱寤虹殑浜哄憳淇℃伅
             deleteHkUserBiz(new String[]{insert.getHkId()});
@@ -193,6 +206,7 @@
         }
         return insert;
     }
+
     public static SystemUser createSystemUser(Member insert,SystemDictDataBiz systemDictDataBiz) {
         SystemUser user = new SystemUser();
         // 鐢熸垚瀵嗙爜鐩�
@@ -239,12 +253,12 @@
         insert.setHkDate(new Date());
         insert.setDdId(member.getDdId());
         insert.setErpId(member.getErpId());
-        insert.setWorkStatus(Constants.ZERO);//榛樿鍦ㄨ亴
-        insert.setCanVisit(Constants.ZERO);//榛樿涓嶅彲璁块棶
+        insert.setWorkStatus(Constants.formatIntegerNum(member.getWorkStatus()));//榛樿鍦ㄨ亴
+        insert.setCanVisit(Constants.formatIntegerNum(member.getCanVisit()));//榛樿涓嶅彲璁块棶
         insert.setAuthStatus(Constants.ZERO);
         insert.setName(member.getName());
         insert.setHkId(UUID.randomUUID().toString().replace("-",""));
-        insert.setHkStatus(Constants.ONE);
+        insert.setHkStatus(Constants.ZERO);
         insert.setSex(Constants.getSexByCardNo( member.getIdcardNo()));//鏍规嵁韬唤璇佸彿鑾峰彇鎬у埆
         insert.setJobDate(member.getJobDate());
         insert.setIsDangyuan(member.getIsDangyuan());
@@ -365,7 +379,7 @@
 
     private void isMemberParamValid(Member member) {
         if(member.getCompanyId() == null){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎵�灞炵粍缁囦笉瀛樺湪锛�");
         }
         if (StringUtils.isBlank(member.getPhone())||!PhoneUtil.isPhone(member.getPhone())){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢佃瘽鍙风爜鏍煎紡鏈夎");
@@ -387,13 +401,13 @@
                 .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
             throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+member.getPhone()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
         }
-        Company company = companyMapper.selectById(member.getCompanyId());
+        Company company = member.getCompany()!=null ?member.getCompany(): companyMapper.selectById(member.getCompanyId());
         if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
-            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ョ粍缁囦俊鎭凡琚垹闄わ紝璇峰埛鏂伴〉闈㈤噸璇曪紒");
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ョ粍缁囦俊鎭凡琚垹闄わ紒");
         }
-        if(StringUtils.isBlank(company.getHkId())){
-            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ョ粍缁囦俊鎭湭鍚屾瀹夐槻骞冲彴锛岃鍏堝墠寰�銆愮粍缁囩鐞嗐�戣彍鍗曡繘琛岀淮鎶わ紒");
-        }
+//        if(StringUtils.isBlank(company.getHkId())){
+//            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ョ粍缁囦俊鎭湭鍚屾瀹夐槻骞冲彴锛岃鍏堝墠寰�銆愮粍缁囩鐞嗐�戣彍鍗曡繘琛岀淮鎶わ紒");
+//        }
         member.setHkOrgId(company.getHkId());
         member.setCompanyType(company.getType());
         if(Constants.equalsInteger(company.getType(),Constants.ONE)){
@@ -477,7 +491,7 @@
             isNeedUpdateUser = true;
         }
         if(StringUtils.isNotBlank(member.getCode()) && StringUtils.equals(member.getPhone(),model.getCode())){
-                // 楠岃瘉宸ュ彿
+            // 楠岃瘉宸ュ彿
             SystemUser queryUserDto = new SystemUser();
             queryUserDto = new SystemUser();
             queryUserDto.setDeleted(Boolean.FALSE);
@@ -491,7 +505,7 @@
         }
         if(member.getCompanyId()!=null && !Constants.equalsInteger(member.getCompanyId(),model.getCompanyId())){
             //濡傛灉缁勭粐鍙戠敓鍙樺寲
-            Company company = companyMapper.selectById(member.getCompanyId());
+            Company company = member.getCompany()!=null ?member.getCompany(): companyMapper.selectById(member.getCompanyId());
             if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
                 throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ョ粍缁囦俊鎭凡琚垹闄わ紝璇峰埛鏂伴〉闈㈤噸璇曪紒");
             }
@@ -508,15 +522,15 @@
         if(isNeedUpdateUser){
             //鏇存柊绯荤粺鐢ㄦ埛璐﹀彿淇℃伅
             systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
-                            .set(SystemUser::getUpdateUser,member.getLoginUserInfo().getId())
-                            .set(SystemUser::getUpdateTime,new Date())
-                            .set(StringUtils.isNotBlank(member.getFaceImg()),SystemUser::getAvatar,member.getFaceImg())
-                            .set(StringUtils.isNotBlank(member.getName()),SystemUser::getPinyin,Constants.getChinesePingyin(member.getName()))
-                            .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getMobile,member.getPhone())
-                            .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getUsername,member.getPhone())
-                            .set(StringUtils.isNotBlank(member.getName()),SystemUser::getRealname,member.getName())
-                            .set(member.getCompanyId() !=null,SystemUser::getCompanyId,member.getCompanyId())
-                            .set(StringUtils.isNotBlank(member.getCode()),SystemUser::getEmpNo,member.getCode())
+                    .set(SystemUser::getUpdateUser,member.getLoginUserInfo()!=null?member.getLoginUserInfo().getId():null)
+                    .set(SystemUser::getUpdateTime,new Date())
+                    .set(StringUtils.isNotBlank(member.getFaceImg()),SystemUser::getAvatar,member.getFaceImg())
+                    .set(StringUtils.isNotBlank(member.getName()),SystemUser::getPinyin,Constants.getChinesePingyin(member.getName()))
+                    .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getMobile,member.getPhone())
+                    .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getUsername,member.getPhone())
+                    .set(StringUtils.isNotBlank(member.getName()),SystemUser::getRealname,member.getName())
+                    .set(member.getCompanyId() !=null,SystemUser::getCompanyId,member.getCompanyId())
+                    .set(StringUtils.isNotBlank(member.getCode()),SystemUser::getEmpNo,member.getCode())
                     .eq(SystemUser::getMemberId,model.getId()));
         }
         if(Constants.equalsInteger(model.getCompanyType(),Constants.ZERO)
@@ -524,7 +538,7 @@
                 && member.getTrainStartTime()!=null){
             TrainTime trainTime = new TrainTime();
             trainTime.setIsdeleted(Constants.ZERO);
-            trainTime.setCreator(member.getLoginUserInfo().getId());
+            trainTime.setCreator(member.getLoginUserInfo()!=null?member.getLoginUserInfo().getId():null);
             trainTime.setCreateDate(new Date());
             trainTime.setEdirot(trainTime.getCreator());
             trainTime.setEditDate(trainTime.getCreateDate());
@@ -609,7 +623,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("浜哄憳宸插垹闄わ紝绛夊緟鍒犻櫎闂ㄧ鏉冮檺");
@@ -633,20 +647,20 @@
         );
         if (carsList!=null && carsList.size()>0){
             for(Cars car :carsList){
-               if(Constants.equalsInteger(car.getAuthStatus(),Constants.ONE)){
-                   carsMapper.update(null,new UpdateWrapper<Cars>().lambda()
-                           .eq(Cars::getId,car.getId())
-                           .set(Cars::getStartTime,null)
+                if(Constants.equalsInteger(car.getAuthStatus(),Constants.ONE)){
+                    carsMapper.update(null,new UpdateWrapper<Cars>().lambda()
+                                    .eq(Cars::getId,car.getId())
+                                    .set(Cars::getStartTime,null)
 //                           .set(Cars::getMemberId,null)
-                           .set(Cars::getEndTime,null)
-                           .set(Cars::getAuthTimeType,null)
-                           .set(Cars::getAuthStatus,Constants.ZERO)
-                           .set(Cars::getEditDate,member.getEditDate())
-                           .set(Cars::getEdirot,member.getEditor())
-                   );
-                   //鍒犻櫎宸叉巿鏉冧笅鍙戠殑鍖呮湡鎺堟潈
-                   CarsServiceImpl.dealCancelBookBiz(car.getCode(),date,parkBookMapper);
-               }
+                                    .set(Cars::getEndTime,null)
+                                    .set(Cars::getAuthTimeType,null)
+                                    .set(Cars::getAuthStatus,Constants.ZERO)
+                                    .set(Cars::getEditDate,member.getEditDate())
+                                    .set(Cars::getEdirot,member.getEditor())
+                    );
+                    //鍒犻櫎宸叉巿鏉冧笅鍙戠殑鍖呮湡鎺堟潈
+                    CarsServiceImpl.dealCancelBookBiz(car.getCode(),date,parkBookMapper);
+                }
             }
         }
     }
@@ -683,14 +697,14 @@
             }
         }
         if(Constants.equalsInteger(memberRole.getTimeType(),Constants.ZERO) ){
-           memberRole.setStartTime(null);
-           memberRole.setEndTime(null);
+            memberRole.setStartTime(null);
+            memberRole.setEndTime(null);
         }
         for (Integer id : memberRole.getIds()){
             Member member = memberMapper.selectById(id);
             if(member==null || member.getIsdeleted().equals(Constants.ONE)){
                 //濡傛灉鍛樺伐淇℃伅涓嶅悎娉曠洿鎺ヨ烦杩�
-               continue;
+                continue;
             }
             if(StringUtils.isBlank(member.getFaceId()) || !Constants.equalsInteger(member.getFaceStatus(),Constants.ONE)){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鐢ㄦ埛銆�"+member.getName()+"銆戠殑浜鸿劯淇℃伅涓嶆弧瓒虫巿鏉冩潯浠讹紝璇疯繑鍥炲畬鍠勫悗鍐嶈繘琛岃鎿嶄綔锛�");
@@ -729,7 +743,7 @@
             saveUserActionBiz(member,memberRole.getLoginUserInfo(), Constants.UserActionType.AUTH_ROLE,userActionJoinMapper,null);
             //閲嶆柊鎺堟潈
             HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,member,deviceRoleMapper,empowerMapper,deviceMapper);
-         }
+        }
     }
 
     public static   Integer   getRoleIdByParam(Integer[] param, Member member,MemberRoleMapper memberRoleMapper,DeviceRoleMapper deviceRoleMapper) {
@@ -744,7 +758,7 @@
             //妫�鏌ョ敤鎴锋儏鍐垫潈闄愬師鏈氨鏄┖鐨勶紝 鍒欐棤闇�澶勭悊
             return  0;
         }
-         if((param == null || param.length==0 ) &&( roleList!=null && roleList.size()>0) ){
+        if((param == null || param.length==0 ) &&( roleList!=null && roleList.size()>0) ){
             //濡傛灉娓呯┖鍘熸潵鏈夋潈闄愶紝鎺ュ彛杩涜鏉冮檺鍒犻櫎鍘熸湁鏉冮檺鍗冲彲
             memberRoleMapper.delete(new QueryWrapper<MemberRole>().lambda().eq(MemberRole::getMemberId,member.getId()));
             return 1;
@@ -831,14 +845,14 @@
     @Override
     public     void empowerByList(Member member) {
         if(member.getIdList()!=null && member.getIdList().size() >0){
-             List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda()
-                     .in(Member::getId,member.getIdList())
-                     .eq(Member::getIsdeleted,Constants.ZERO));
-             if(members!=null){
-                 for(Member m : members){
-                     HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,m,deviceRoleMapper,empowerMapper,deviceMapper);
-                 }
-             }
+            List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                    .in(Member::getId,member.getIdList())
+                    .eq(Member::getIsdeleted,Constants.ZERO));
+            if(members!=null){
+                for(Member m : members){
+                    HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,m,deviceRoleMapper,empowerMapper,deviceMapper);
+                }
+            }
         }
     }
 
@@ -951,45 +965,47 @@
         }
         //鏍¢獙鍙傛暟 骞朵笖鏇存柊systemuser 鎵嬫満鍙峰拰宸ュ彿淇℃伅锛堝鏋滈渶瑕佷慨鏀圭殑璇濓級
         Member model =   isMemberUpdateParamValid(updateMember);
-        updateMember.setEditor(loginUserInfo.getId());
+        updateMember.setEditor(loginUserInfo!=null?loginUserInfo.getId():null);
         updateMember.setEditDate(new Date());
         //娴峰悍浜哄憳鏂板涓氬姟
-        if(dealHkUserForUpdateBiz(updateMember)){
-            updateMember.setHkId(null);
-            updateMember.setAuthStatus(Constants.ZERO);
-            memberMapper.update(null,new UpdateWrapper<Member>().lambda()
-                    .set(Member::getStartTime,null)
-                    .set(Member::getEndTime,null)
-                    .set(Member::getRoleId,null)
-                    .set(StringUtils.isNotBlank(updateMember.getPhone()),Member::getPhone,updateMember.getPhone())
-                    .set(StringUtils.isNotBlank(updateMember.getName()),Member::getName,updateMember.getName())
-                    .set(Member::getEditDate,updateMember.getEditDate())
-                    .set(Member::getEditor,updateMember.getEditor())
-                    .set(StringUtils.isNotBlank(updateMember.getName()),Member::getPinyin,Constants.getChinesePingyin(updateMember.getName()))
-                    .set(StringUtils.isNotBlank(updateMember.getIdcardNo()),Member::getIdcardNo,updateMember.getIdcardNo())
-                    .set(StringUtils.isNotBlank(updateMember.getIdcardDecode()),Member::getIdcardDecode,updateMember.getIdcardDecode())
-                    .set( Member::getAuthStatus,Constants.ZERO)
-                    .set(updateMember.getHkStatus()!=null,Member::getHkStatus,updateMember.getHkStatus())
-                    .set(updateMember.getSex()!=null,Member::getSex,updateMember.getSex())
-                    .set(updateMember.getFaceStatus()!=null,Member::getFaceStatus,updateMember.getFaceStatus())
-                    .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate())
-                    .set(StringUtils.isNotBlank(updateMember.getRemark()),Member::getRemark,updateMember.getRemark())
-                    .set(StringUtils.isNotBlank(updateMember.getFaceImg()),Member::getFaceImg,updateMember.getFaceImg())
-                    .set(updateMember.getFaceId()!=null,Member::getFaceId,updateMember.getFaceId())
-                    .set(updateMember.getCompanyId()!=null,Member::getCompanyId,updateMember.getCompanyId())
-                    .set(Member::getCode,updateMember.getCode())
+//        if(dealHkUserForUpdateBiz(updateMember)){
+        updateMember.setHkId(null);
+        updateMember.setAuthStatus(Constants.ZERO);
+        memberMapper.update(null,new UpdateWrapper<Member>().lambda()
+                .set(Member::getStartTime,null)
+                .set(Member::getEndTime,null)
+                .set(Member::getRoleId,null)
+                .set(StringUtils.isNotBlank(updateMember.getPhone()),Member::getPhone,updateMember.getPhone())
+                .set(StringUtils.isNotBlank(updateMember.getName()),Member::getName,updateMember.getName())
+                .set(Member::getEditDate,updateMember.getEditDate())
+                .set(Member::getEditor,updateMember.getEditor())
+                .set(StringUtils.isNotBlank(updateMember.getName()),Member::getPinyin,Constants.getChinesePingyin(updateMember.getName()))
+                .set(StringUtils.isNotBlank(updateMember.getIdcardNo()),Member::getIdcardNo,updateMember.getIdcardNo())
+                .set(StringUtils.isNotBlank(updateMember.getIdcardDecode()),Member::getIdcardDecode,updateMember.getIdcardDecode())
+                .set( Member::getAuthStatus,Constants.ZERO)
+                .set(updateMember.getHkStatus()!=null,Member::getHkStatus,updateMember.getHkStatus())
+                .set(updateMember.getSex()!=null,Member::getSex,updateMember.getSex())
+                .set(updateMember.getCanVisit()!=null,Member::getCanVisit,updateMember.getCanVisit())
+                .set(updateMember.getFaceStatus()!=null,Member::getFaceStatus,updateMember.getFaceStatus())
+                .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate())
+                .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate())
+                .set(StringUtils.isNotBlank(updateMember.getRemark()),Member::getRemark,updateMember.getRemark())
+                .set(StringUtils.isNotBlank(updateMember.getFaceImg()),Member::getFaceImg,updateMember.getFaceImg())
+                .set(updateMember.getFaceId()!=null,Member::getFaceId,updateMember.getFaceId())
+                .set(updateMember.getCompanyId()!=null,Member::getCompanyId,updateMember.getCompanyId())
+                .set(Member::getCode,updateMember.getCode())
 //                    .set(StringUtils.isNotBlank(updateMember.getCode()),Member::getCode,updateMember.getCode())
-                    .set( updateMember.getPositionId()!=null,Member::getPositionId,updateMember.getPositionId())
-                    .set( updateMember.getIsDangyuan()!=null,Member::getIsDangyuan,updateMember.getIsDangyuan())
-                    .set( updateMember.getJobDate()!=null,Member::getJobDate,updateMember.getJobDate())
-                    .eq(Member::getId,updateMember.getId()));
-            dealTrainTIme(updateMember,1,loginUserInfo);
-            cancelAllMemberEmpower(updateMember,memberRoleMapper,empowerMapper);
-            //璁板綍鎿嶄綔鏃ュ織
-            saveUserActionBiz(updateMember,loginUserInfo,Constants.UserActionType.EDIT,userActionJoinMapper,null);
-        }else{
-            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鍛樺伐淇℃伅鍚屾瀹夐槻骞冲彴澶辫触锛岃绋嶅悗閲嶈瘯锛�");
-        }
+                .set( updateMember.getPositionId()!=null,Member::getPositionId,updateMember.getPositionId())
+                .set( updateMember.getIsDangyuan()!=null,Member::getIsDangyuan,updateMember.getIsDangyuan())
+                .set( updateMember.getJobDate()!=null,Member::getJobDate,updateMember.getJobDate())
+                .eq(Member::getId,updateMember.getId()));
+        dealTrainTIme(updateMember,1,loginUserInfo);
+        cancelAllMemberEmpower(updateMember,memberRoleMapper,empowerMapper);
+        //璁板綍鎿嶄綔鏃ュ織
+        saveUserActionBiz(updateMember,loginUserInfo,Constants.UserActionType.EDIT,userActionJoinMapper,null);
+//        }else{
+//            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鍛樺伐淇℃伅鍚屾瀹夐槻骞冲彴澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+//        }
     }
 
     private void dealTrainTIme(Member updateMember, int i,LoginUserInfo loginUserInfo) {
@@ -1015,7 +1031,7 @@
 
     public static void saveUserActionBiz(Member updateMember,LoginUserInfo user, Constants.UserActionType type,UserActionJoinMapper userActionMapper,String content) {
         updateMember.setEditDate(updateMember.getEditDate()==null?new Date():updateMember.getEditDate());
-       UserAction userAction=new UserAction();
+        UserAction userAction=new UserAction();
         userAction.setIsdeleted(Constants.ZERO);
         userAction.setCreateDate(updateMember.getEditDate());
         userAction.setCreator(updateMember.getEditor());
@@ -1033,39 +1049,39 @@
         QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
         wrapper.lambda().ne(Member::getRemark,"浜鸿劯宸插悓姝ユ渶鏂�");
         List<Member> list =memberMapper.selectList(wrapper);
-       if(list!=null){
-           String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_LOCAL_RESOURCE_PATH).getCode()
-                   +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
-           for(Member m : list){
-             String faceId=  HkSyncOrgUserToHKServiceImpl.dealMemberFace(m,path);
-             if(StringUtils.isNotBlank(faceId)){
-                 Member update = new Member();
-                 update.setId(m.getId());
-                 update.setFaceId(faceId);
-                 update.setRemark("浜鸿劯宸插悓姝ユ渶鏂�");
-                 update.setFaceStatus(Constants.ONE);
-                 memberMapper.updateById(update);
-                 return true;
-             }
-           }
-       }
-       return false;
+        if(list!=null){
+            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_LOCAL_RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+            for(Member m : list){
+                String faceId=  HkSyncOrgUserToHKServiceImpl.dealMemberFace(m,path);
+                if(StringUtils.isNotBlank(faceId)){
+                    Member update = new Member();
+                    update.setId(m.getId());
+                    update.setFaceId(faceId);
+                    update.setRemark("浜鸿劯宸插悓姝ユ渶鏂�");
+                    update.setFaceStatus(Constants.ONE);
+                    memberMapper.updateById(update);
+                    return true;
+                }
+            }
+        }
+        return false;
     }
     @Override
     public void delHkForce(Member member) {
-      Member model  =memberMapper.selectById(member.getId());
-       if(model ==null) {
+        Member model  =memberMapper.selectById(member.getId());
+        if(model ==null) {
             throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝浜哄憳淇℃伅涓嶅瓨鍦紒");
-       }
+        }
         if(!Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍙湁閽堝绂昏亴浜哄憳鍙繘琛岃鎿嶄綔锛�");
-       }
+        }
         if(Constants.equalsInteger(model.getHkStatus(),Constants.ONE)){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ汉鍛樺凡琚垹闄わ紒");
-       }
+        }
         if(StringUtils.isBlank(model.getHkId())){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇ヤ汉鍛橀潪瀹夐槻骞冲彴鍒涘缓浜哄憳锛屼笉鑳借繘琛岃鎿嶄綔锛�");
-       }
+        }
         HkSyncEmpowerServiceImpl.doHkDeleteUser(model.getId(),model.getHkId(),new Date(),memberMapper,memberCardMapper);
     }
     @Override
@@ -1074,23 +1090,23 @@
         if(model ==null) {
             throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝浜哄憳淇℃伅涓嶅瓨鍦紒");
         }
-       if(model.getCompanyId()!=null) {
-           if(Constants.equalsInteger(member.getHeadStatus(),Constants.ONE)){
-               //濡傛灉鏄彇娑堜富绠�
-               companyMapper.update(null,new UpdateWrapper<Company>().lambda()
-                       .eq(Company::getId,model.getCompanyId())
-                       .set(Company::getHeadId,member.getId()));
-               //璁板綍鎿嶄綔鏃ュ織
-               saveUserActionBiz(member,member.getLoginUserInfo(), Constants.UserActionType.BE_HEAD,userActionJoinMapper,null);
-           }else{
-               //濡傛灉鏄涓轰富绠�
-               companyMapper.update(null,new UpdateWrapper<Company>().lambda()
-                       .eq(Company::getId,model.getCompanyId())
-                       .set(Company::getHeadId,null)
-               );
-               saveUserActionBiz(member,member.getLoginUserInfo(),Constants.UserActionType.NOT_HEAD,userActionJoinMapper,null);
-           }
-       }
+        if(model.getCompanyId()!=null) {
+            if(Constants.equalsInteger(member.getHeadStatus(),Constants.ONE)){
+                //濡傛灉鏄彇娑堜富绠�
+                companyMapper.update(null,new UpdateWrapper<Company>().lambda()
+                        .eq(Company::getId,model.getCompanyId())
+                        .set(Company::getHeadId,member.getId()));
+                //璁板綍鎿嶄綔鏃ュ織
+                saveUserActionBiz(member,member.getLoginUserInfo(), Constants.UserActionType.BE_HEAD,userActionJoinMapper,null);
+            }else{
+                //濡傛灉鏄涓轰富绠�
+                companyMapper.update(null,new UpdateWrapper<Company>().lambda()
+                        .eq(Company::getId,model.getCompanyId())
+                        .set(Company::getHeadId,null)
+                );
+                saveUserActionBiz(member,member.getLoginUserInfo(),Constants.UserActionType.NOT_HEAD,userActionJoinMapper,null);
+            }
+        }
     }
 
     @Override
@@ -1273,12 +1289,12 @@
         List<Member> list =  memberJoinMapper.selectList(queryWrapper);
         if(list!=null){
             for(Member m : list){
-               if(m.getName()!=null){
-                   Member u = new Member();
-                   u.setId(m.getId());
-                   u.setPinyin(Constants.getChinesePingyin(m.getName()));
-                   memberMapper.updateById(u);
-               }
+                if(m.getName()!=null){
+                    Member u = new Member();
+                    u.setId(m.getId());
+                    u.setPinyin(Constants.getChinesePingyin(m.getName()));
+                    memberMapper.updateById(u);
+                }
             }
         }
 
@@ -1316,7 +1332,7 @@
         Utils.MP.blankToNull(pageWrap.getModel());
         if (pageWrap.getModel().getKeyword() != null) {
             queryWrapper.lambda().and( ms->ms.like(Member::getName,pageWrap.getModel().getKeyword())
-                            .or().like(Member::getPhone,pageWrap.getModel().getKeyword())
+                    .or().like(Member::getPhone,pageWrap.getModel().getKeyword())
                     .or().like(Member::getCode,pageWrap.getModel().getKeyword()));
         }
         if(pageWrap.getModel().getType() != null){
@@ -1576,7 +1592,7 @@
                     systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
             //闂ㄧ缁勪俊鎭�
             List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
-                            .select(DeviceRole::getId,DeviceRole::getName)
+                    .select(DeviceRole::getId,DeviceRole::getName)
                     .eq(DeviceRole::getIsdeleted,Constants.ZERO));
             for (Member memberInfoDTO:memberIPage.getRecords()) {
                 //鑾峰緱闂ㄧ缁勫悕绉版暟缁�
@@ -1642,8 +1658,8 @@
         queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
         queryWrapper.selectAll(Member.class)
                 .selectAs(Company::getName,Member::getCompanyName)
-        .selectAs(Position::getName,Member::getPositionName)
-         .leftJoin(Position.class,Position::getId,Member::getPositionId)
+                .selectAs(Position::getName,Member::getPositionName)
+                .leftJoin(Position.class,Position::getId,Member::getPositionId)
                 .selectAs(Member::getLastVisitDate,Member::getLastVisitDate)
                 .select(" (select count(v.id) from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 and v.status  in (7,8) ) as visitTimes");
         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Member::getName,pageWrap.getModel().getName())
@@ -1682,14 +1698,14 @@
                 .selectAs(Company::getCompanyNamePath,Member::getCompanyName)
                 .select(" (select ua.remark from user_action ua where ua.MEMBER_ID=t.id and ua.ISDELETED=0 and ua.type="+actiontype+"  order by ua.CREATE_DATE desc  limit 1) as optRemark")
                 .eq(Member::getIsdeleted,Constants.ZERO);
-                queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getCreaterId()),Member::getEditor,pageWrap.getModel().getCreaterId());
-                queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Member::getType,pageWrap.getModel().getType());
-                queryWrapper
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getCreaterId()),Member::getEditor,pageWrap.getModel().getCreaterId());
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Member::getType,pageWrap.getModel().getType());
+        queryWrapper
                 .and(StringUtils.isNotBlank(pageWrap.getModel().getName()),ms->ms.like(Member::getPhone,pageWrap.getModel().getName())
                         .or().like(Member::getName,pageWrap.getModel().getName()))
                 .and(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
                         ms->ms.like(Company::getName,pageWrap.getModel().getCompanyName())
-                        .or().like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName()))
+                                .or().like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName()))
                 .like(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Member::getIdcardNo,pageWrap.getModel().getIdcardNo())
                 .eq(Member::getStatus,Constants.Status.FREEZE.getValue())
                 .eq((pageWrap.getModel().getCompanyId())!=null,Company::getId,pageWrap.getModel().getCompanyId())
@@ -1797,7 +1813,7 @@
                 .apply("to_days(LAST_VISIT_DATE)+ "+days+" < to_days(now())" )
                 .orderByAsc(Member::getPinyin));
         if(CollectionUtils.isEmpty(memberList)){
-           return;
+            return;
         }
         List<Integer> memberIds = memberList.stream().map(m->m.getId()).collect(Collectors.toList());
         //鍐荤粨鐘舵��
@@ -2044,7 +2060,7 @@
     public List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO){
         List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                 .selectAll(Member.class)
-                        .selectAs(Company::getName,Member::getCompanyName)
+                .selectAs(Company::getName,Member::getCompanyName)
                 .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                 .selectAs(Position::getName,Member::getPositionName)
                 .leftJoin(Position.class,Position::getId,Member::getPositionId)
@@ -2106,6 +2122,10 @@
     }
 
 
+
+
+
+
     @Override
     public StagingDataVO stagingHead(StagingDataVO stagingHeadVO){
         //浜哄憳淇℃伅
@@ -2140,8 +2160,8 @@
                         .groupBy(Company::getId,Company::getName)
         );
         List<Map<String,Object>> retentionMaps = retentionJoinMapper.selectMaps(new MPJLambdaWrapper<Retention>()
-                        .select(" count(1) as memberCount, type as memberType ")
-                        .ne(Retention::getType,3)
+                .select(" count(1) as memberCount, type as memberType ")
+                .ne(Retention::getType,3)
                 .groupBy(Retention::getType)
         );
         stagingHeadVO.setCompanyUsers(companyMaps);
@@ -2183,10 +2203,10 @@
                 model.setPhone(ScientificNotationTUtil.convertToString(model.getPhone()));
                 model.setIdcardNo(ScientificNotationTUtil.convertToString(model.getIdcardNo()));
                 if(StringUtils.isBlank(model.getName())
-                       &&StringUtils.isBlank(model.getIdcardNo())
+                        &&StringUtils.isBlank(model.getIdcardNo())
                         &&StringUtils.isBlank(model.getPhone())
                         &&StringUtils.isBlank(model.getCompanyName())){
-                      continue;
+                    continue;
                 }
                 Member member = checkModelParam(model,newList,i,loginUserInfo,list,companyList,companyType,positionList);
                 newList.add(member);
@@ -2220,8 +2240,8 @@
             for(Member insert: newList){
                 //鍒涘缓绯荤粺鐧婚檰璐﹀彿锛堥粯璁ゆ棤浠讳綍瑙掕壊锛�
 //                if(Constants.equalsInteger(insert.getCompanyType(),Constants.ONE)){
-                    //濡傛灉鏄唴閮ㄧ粍缁囦汉鍛橈紝鏂板绯荤粺鐧婚檰璐﹀彿
-                    userList.add(createSystemUser(insert,systemDictDataBiz));
+                //濡傛灉鏄唴閮ㄧ粍缁囦汉鍛橈紝鏂板绯荤粺鐧婚檰璐﹀彿
+                userList.add(createSystemUser(insert,systemDictDataBiz));
 //                }
             }
             if(userList.size()>0){
@@ -2355,7 +2375,7 @@
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public void registerDriver(RegisterDriverDTO registerDriverDTO){
         if(Objects.isNull(registerDriverDTO)
-        || StringUtils.isBlank(registerDriverDTO.getName())
+                || StringUtils.isBlank(registerDriverDTO.getName())
                 || StringUtils.isBlank(registerDriverDTO.getPassword())
                 || StringUtils.isBlank(registerDriverDTO.getValidCode())
                 || StringUtils.isBlank(registerDriverDTO.getPhone())
@@ -2371,7 +2391,7 @@
         };
         if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
                 .eq(SystemUser::getDeleted,Constants.ZERO)
-                        .and(i->i.eq(SystemUser::getMobile,registerDriverDTO.getPhone()).or().eq(SystemUser::getUsername,registerDriverDTO.getPhone()))
+                .and(i->i.eq(SystemUser::getMobile,registerDriverDTO.getPhone()).or().eq(SystemUser::getUsername,registerDriverDTO.getPhone()))
         )>Constants.ZERO){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵嬫満鍙峰凡娉ㄥ唽!");
         };
@@ -2410,23 +2430,206 @@
      * 鍚屾閽夐拤鍐呴儴鍛樺伐淇℃伅
      */
     @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;
+            }
+            log.error("閽夐拤浜哄憳淇℃伅鍚屾琛屾暟锛�"+ list.size());
+            log.error("閽夐拤浜哄憳淇℃伅鍚屾鍐呭锛�"+ JSONObject.toJSONString(list));
+            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
+    @Async
+    public void  sendMemberInfoResult(String username, String info, int status){
+        try {
+            String url = systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_MEMBER_PUSH_STATUS_URL).getCode();
+            log.error("==========鎺ㄩ�佷汉鍛榹}锛氬悓姝ョ粨鏋滃紑濮�=====status={},username={},info={},url={}",username,status,info,url);
+            JSONObject object = new JSONObject();
+            object.put("status",status);
+            object.put("username",username);
+            object.put("info",info);
+            String result = HttpsUtil.postJson(url,JSONObject.toJSONString(object));
+            log.error("==========鎺ㄩ�佷汉鍛榹}锛氬悓姝ョ粨鏋滅粨鏉�=====",result);
+        }catch (Exception e){
+
+        }
+    }
+
+    /**
+     * 澶勭悊绠�閬撲簯鐢ㄦ埛淇℃伅
+     * @param data
+     */
+    @Override
+    public void dealJdyMemberInfo(MemberPushData data){
+        if(StringUtils.isBlank(data.getUsername())
+                ||StringUtils.isBlank(data.getPhone())
+                ||StringUtils.isBlank(data.getName())){
+            throw  new BusinessException(ResponseStatus.JDY_BAD_REQUEST.getCode(),"浜哄憳淇℃伅涓嶅畬鏁达紒");
+        }
+        //鍐呴儴浜哄憳淇℃伅
+        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                .eq( Member::getErpId,data.getUsername() )
+                .eq( Member::getIsdeleted,Constants.ZERO )
+                .eq( Member::getType,Constants.TWO )
+                .last("limit 1"));
+        if(member == null){
+            //鏂板浜哄憳
+            if(data.getDeleter()!=null){
+                //濡傛灉鏄凡缁忓垹闄や汉鍛橈紝涓嶅鐞�
+                return;
+            }
+            member = getAddOrUpdateModelFromJDY(data,true);
+            this.create(member);
+        }else{
+            //鏇存柊浜哄憳
+            if(data.getDeleter()!=null){
+                //濡傛灉鏄凡缁忓垹闄や汉鍛橈紝涓嶅鐞�
+                this.deleteById(member.getId(),null);
+            }else{
+                //鏇存柊浜哄憳淇℃伅
+                Member updateMember =getAddOrUpdateModelFromJDY(data,false);
+                updateMember.setId(member.getId());
+                this.updateById(updateMember);
+            }
+        }
+
+    }
+
+    private Member getAddOrUpdateModelFromJDY(MemberPushData data, boolean add) {
+        Member member =  new Member();
+        member.setName(data.getName());
+        member.setType(Constants.TWO);
+        member.setIdcardType(Constants.ZERO);
+        member.setIdcardNo(data.getIdcardno());
+        member.setPhone(data.getPhone());
+        if(StringUtils.isNotBlank(data.getSex())){
+            member.setSex(StringUtils.equals(data.getSex(),"鐢�")?0:1);
+        }
+        if(StringUtils.isNotBlank(data.getStatus())){
+            member.setWorkStatus(StringUtils.equals(data.getStatus(),"鍦ㄨ亴")?0:1);
+        }
+        if(StringUtils.isNotBlank(data.getCan_visit())){
+            member.setCanVisit(StringUtils.equals(data.getCan_visit(),"鍙嫓璁�")?1:0);
+        }
+        member.setErpId(data.getUsername());
+        if(data.getDepartment()!=null){
+            member.setErpOrgId(data.getDepartment().getDept_no());
+        }
+        member.setHkStatus(Constants.ZERO);//寰呮洿鏂�
+        if(data.getImgurl()!=null &&data.getImgurl().size()>0){
+            String imgurl = data.getImgurl().get(0).getUrl();
+            if(StringUtils.isNotBlank(imgurl)){
+                member.setImgurl(getMemberImgByJdyImg(imgurl));
+                member.setFaceStatus(Constants.ZERO);
+                member.setFaceImg(member.getImgurl());
+            }
+        }
+        member.setCreateDate(DateUtil.getISO8601DateByStr(data.getCreateTime()));
+        member.setEditDate(DateUtil.getISO8601DateByStr(data.getUpdateTime()));
+        member.setCode(data.getCode());
+        member.setJobDate(DateUtil.getISO8601DateByStr(data.getJob_date()));
+        member.setIsdeleted(Constants.ZERO);
+        if(add ){
+            SystemUser c=   getSystemuserByErpId(data.getCreator());//鏌ヨ鍒涘缓浜�
+            if(c!=null){
+                member.setCreator(c.getId());
+            }
+        }
+        SystemUser up=   getSystemuserByErpId(data.getUpdater()); //鏌ヨ鏇存柊浜�
+        if(up!=null){
+            member.setEditor(up.getId());
+        }
+        //鏌ヨ缁勭粐淇℃伅
+        Company depart = companyMapper.selectOne(new QueryWrapper<Company>().lambda()
+                .eq( Company::getErpId,data.getDepartment().getDept_no() )
+                .eq( Company::getIsdeleted,Constants.ZERO ));
+        if(depart!=null){
+            member.setCompanyId(depart.getId());
+        }
+        member.setCompany(depart);
+        return  member;
+    }
+
+    private String getMemberImgByJdyImg(String imgurl) {
+        try {
+            String folder =   systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+            FtpUtil ftp = new FtpUtil(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_HOST).getCode(),
+                    Integer.parseInt(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PORT).getCode()),
+                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_USERNAME).getCode(),
+                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PWD).getCode());
+            String date = DateUtil.getNowShortDate()+"/";
+            String name = UUID.randomUUID().toString();
+            if(ftp.uploadOnlineFile(imgurl,folder+date,name)){
+                log.error("=======涓婁紶绠�閬撲簯鍥剧墖鎴愬姛锛歳esult:{}=url:{}",date+name,imgurl);
+                return date+name;
+            }
+        }catch (Exception e){
+            log.error("=======涓婁紶绠�閬撲簯鍥剧墖澶辫触锛歶rl锛歿}",imgurl);
+        }
+        return null;
+
+    }
+
+    private SystemUser getSystemuserByErpId(UserPushData user) {
+        if(user!=null &&StringUtils.isNotBlank(user.getUsername())){
+            return   systemUserMapper.selectJoinOne(SystemUser.class,new MPJLambdaWrapper<SystemUser>().
+                    selectAll(SystemUser.class )
+                    .leftJoin(Member.class,Member::getId,SystemUser::getMemberId)
+                    .eq(SystemUser::getDeleted,Boolean.FALSE)
+                    .eq(Member::getErpId,user.getUsername())
+                    .last("limit 1"));
+        }
+       return null;
+    }
+
+    @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) {
@@ -2462,25 +2665,63 @@
             }
         }
     }
-
+    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);
@@ -2505,7 +2746,7 @@
         }
         if(Objects.nonNull(deptIdList)){
             List<Company> companyList = companyMapper.selectList(new QueryWrapper<Company>().lambda().in(Company::getErpId,deptIdList)
-                    .eq(Company::getType,Constants.ONE).eq(Company::getIsdeleted,Constants.ZERO)
+                            .eq(Company::getType,Constants.ONE).eq(Company::getIsdeleted,Constants.ZERO)
 //                    .isNotNull(Company::getHkId) 鏆傛椂鏃犳硶鍚屾娴峰悍 鍏堟敞閲�
             );
             if(CollectionUtils.isNotEmpty(companyList)){
@@ -2515,7 +2756,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) {
@@ -2532,14 +2773,14 @@
             }
         }
     }
-    
-    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);
@@ -2601,40 +2842,52 @@
         }
         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 {
-        JSONArray jsonArray = eventData.getJSONArray("userId");
-        if(jsonArray.isEmpty()){
-            return;
-        }
-        if(eventType.equals("user_leave_org")){
-            //鍒犻櫎瀵逛汉鍛樹俊鎭�
-            List<String> userIdList = new ArrayList<>();
-            for (int i = 0; i < jsonArray.size(); i++) {
-                String deptId = jsonArray.getString(i);
-                userIdList.add(deptId);
+    public void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData)   {
+        try {
+            JSONArray jsonArray = eventData.getJSONArray("userId");
+            if(jsonArray.isEmpty()){
+                return;
             }
-            if(CollectionUtils.isNotEmpty(userIdList)){
-                syncDelMember(userIdList);
-            }
-        }else if(eventType.equals("user_add_org")||eventType.equals("user_modify_org")){
-            for (int i = 0; i < jsonArray.size(); i++) {
-                OapiV2UserGetResponse.UserGetResponse userGetResponse =  dingTalk.syncUserInfo(jsonArray.getString(i));
-                Member member  = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
-                        .eq(Member::getIsdeleted,Constants.ZERO)
-                        .eq(Member::getErpId,userGetResponse.getUnionid())
-                        .last(" limit 1")
-                );
-                if(Objects.isNull(member)){
-                    member = new Member();
-                    getAddMemberModel(userGetResponse,member);
-                }else{
-                    getUpdateMemberModel(userGetResponse,member);
+            if(eventType.equals("user_leave_org")){
+                //鍒犻櫎瀵逛汉鍛樹俊鎭�
+                List<String> userIdList = new ArrayList<>();
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    String deptId = jsonArray.getString(i);
+                    userIdList.add(deptId);
+                }
+                if(CollectionUtils.isNotEmpty(userIdList)){
+                    syncDelMember(userIdList);
+                }
+            }else if(eventType.equals("user_add_org")||eventType.equals("user_modify_org")){
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    OapiV2UserGetResponse.UserGetResponse userGetResponse =  dingTalk.syncUserInfo(jsonArray.getString(i));
+                    Member member  = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                            .eq(Member::getIsdeleted,Constants.ZERO)
+                            .eq(Member::getErpId,userGetResponse.getUnionid())
+                            .last(" limit 1")
+                    );
+                    if(Objects.isNull(member)){
+                        member = new Member();
+                        getAddMemberModel(userGetResponse,member);
+                    }else{
+                        getUpdateMemberModel(userGetResponse,member);
+                    }
                 }
             }
+        }catch (Exception e){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"鏁版嵁澶勭悊澶辫触锛�");
         }
+
     }
 
     /**
@@ -2642,25 +2895,25 @@
      * @param code
      * @param source
      * @return
-     * @throws ApiException
      */
     @Override
-    public DDAuthorizeVO ddAuthorize(String code, Integer source) throws ApiException {
-        if(StringUtils.isBlank(code)||Objects.isNull(source)){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-        }
-        OapiV2UserGetuserinfoResponse.UserGetByCodeResponse userGetByCodeResponse = dingTalk.getDDUserByCode(code);
-        if(Objects.isNull(userGetByCodeResponse)
-                || StringUtils.isBlank(userGetByCodeResponse.getUnionid())){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閽夐拤鎺堟潈澶辫触");
-        }
-        String unionId = userGetByCodeResponse.getUnionid();
+    public DDAuthorizeVO ddAuthorize(String code, Integer source)  {
+        try {
+            if(StringUtils.isBlank(code)||Objects.isNull(source)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+            OapiV2UserGetuserinfoResponse.UserGetByCodeResponse userGetByCodeResponse = dingTalk.getDDUserByCode(code);
+            if(Objects.isNull(userGetByCodeResponse)
+                    || StringUtils.isBlank(userGetByCodeResponse.getUnionid())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閽夐拤鎺堟潈澶辫触");
+            }
+            String unionId = userGetByCodeResponse.getUnionid();
 
-        DDAuthorizeVO ddAuthorizeVO = new DDAuthorizeVO();
-        if(StringUtils.isBlank(unionId)){
-            return ddAuthorizeVO;
-        }
-        ddAuthorizeVO.setUnionId(unionId);
+            DDAuthorizeVO ddAuthorizeVO = new DDAuthorizeVO();
+            if(StringUtils.isBlank(unionId)){
+                return ddAuthorizeVO;
+            }
+            ddAuthorizeVO.setUnionId(unionId);
 //        if(source==1){
 //            //澶勭悊鏅�氳瀹汉鍛樿嚜鍔ㄦ巿鏉冮�昏緫
 //            dealVisitUserAuthBiz(wxAuthorizeVO,openId,source);
@@ -2674,7 +2927,12 @@
             //濡傛灉鏄唴閮ㄤ汉鍛橈紝鍒欎粠system_user鏌ヨ
             dealSystemUserAuthBizByDD(ddAuthorizeVO,unionId,source);
 //        }
-        return ddAuthorizeVO;
+            return ddAuthorizeVO;
+        }catch (Exception e){
+
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR);
+        }
+
     }
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
index 8fe86fe..77ccb8a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
@@ -129,9 +129,7 @@
      */
     @Override
     public   void syncOrgData(LoginUserInfo user){
-        if(Constants.DEALING_HK_ORG ||
-                !(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp
-                        || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self)){
+        if(Constants.DEALING_HK_ORG || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk ){
             return   ;
         }
         Constants.DEALING_HK_ORG =true;
@@ -321,9 +319,8 @@
      */
     @Override
     public   void syncUserData(LoginUserInfo user){
-        if(Constants.DEALING_HK_USER  ||
-                !(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp
-                || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self)){
+        //浜哄憳鏋勫缓浠ュ畨闃插钩鍙颁负涓伙紝涓嶆墽琛岃鎿嶄綔
+        if(Constants.DEALING_HK_USER  || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk){
             return   ;
         }
         Constants.DEALING_HK_USER =true;
@@ -360,8 +357,7 @@
      */
     @Override
     public   void syncMemberDelData(){
-        if(Constants.DEALING_HK_DEL_USER
-                || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin())== DataSyncConfig.origin.hk){
+        if(Constants.DEALING_HK_DEL_USER  || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin())== DataSyncConfig.origin.hk){
             return   ;
         }
         Constants.DEALING_HK_DEL_USER =true;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
index 0142379..97e4524 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
@@ -57,14 +57,11 @@
     @Override
     @Transactional
     public   void syncOrgData(LoginUserInfo user){
-        if(Constants.DEALING_HK_ORG){
-            return ;
+        if(Constants.DEALING_HK_ORG || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佺粍缁囧悓姝ユ搷浣渵");
         }
         Constants.DEALING_HK_ORG =true;
         try {
-            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佺粍缁囧悓姝ユ搷浣渵");
-            }
             TimeRangeListRequest param = new TimeRangeListRequest();
             //鑾峰彇ERP缁勭粐淇℃伅锛堝叏閲忓悓姝ワ級
             boolean hasNext = true;
@@ -142,14 +139,11 @@
      */
     @Override
     public   void syncUserData(LoginUserInfo user){
-        if(Constants.DEALING_HK_USER){
-            return   ;
+        if(Constants.DEALING_HK_USER || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佺粍缁囧悓姝ユ搷浣渵");
         }
         Constants.DEALING_HK_USER =true;
         try {
-            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佺粍缁囧悓姝ユ搷浣渵");
-            }
             List<Company> companies = companyMapper.selectList(new QueryWrapper<>());
             if(companies == null || companies.size() == 0){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇峰厛鍚屾浼佷笟缁勭粐淇℃伅~");
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java
index 0055e55..4e3f08e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java
@@ -67,14 +67,12 @@
     @Override
     @Transactional
     public   void syncOrgData(LoginUserInfo user ){
-        if(Constants.DEALING_HK_ORG){
-            return ;
+        //鍒濆鍖栧畨闃插钩鍙版暟鎹�
+        if(Constants.DEALING_HK_ORG || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佺粍缁囧悓姝ユ搷浣渵");
         }
         Constants.DEALING_HK_ORG =true;
         try {
-            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.self){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佺粍缁囧悓姝ユ搷浣渵");
-            }
             TimeRangeListRequest param = null;
             //鑾峰彇ERP缁勭粐淇℃伅锛堝叏閲忓悓姝ワ級
             boolean hasNext = true;
@@ -191,7 +189,7 @@
         }
         Constants.DEALING_HK_USER =true;
         try {
-            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.self){
+            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佺粍缁囧悓姝ユ搷浣渵");
             }
             List<Company> companies = companyMapper.selectList(new QueryWrapper<>());
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..4caa299 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-dev.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
@@ -21,8 +21,8 @@
 
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 0 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 0 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 
diff --git a/server/visits/dmvisit_service/src/main/resources/application-devYL.yml b/server/visits/dmvisit_service/src/main/resources/application-devYL.yml
index edeed31..63cb744 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-devYL.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-devYL.yml
@@ -33,8 +33,8 @@
 debug_model: true
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 2 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: false #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 # Swagger閰嶇疆
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..7a4f20d 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-pro.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-pro.yml
@@ -21,8 +21,8 @@
 
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 0 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 0 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 
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
index 05e27a4..4365b39 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck
+++ b/server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck
@@ -44,8 +44,8 @@
 
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 ########################寰俊鏀粯鐩稿叧閰嶇疆########################
diff --git a/server/visits/dmvisit_service/src/main/resources/application-self.yml b/server/visits/dmvisit_service/src/main/resources/application-self.yml
index 1e9601d..0945c46 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-self.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-self.yml
@@ -21,8 +21,8 @@
 
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 0 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 0 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 
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..ef02bae 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-test.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-test.yml
@@ -21,8 +21,8 @@
 
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 0 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 0 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 
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
index 2680b48..d2c679e 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-testHS.yml.bck
+++ b/server/visits/dmvisit_service/src/main/resources/application-testHS.yml.bck
@@ -44,8 +44,8 @@
 
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 ########################寰俊鏀粯鐩稿叧閰嶇疆########################
diff --git a/server/visits/dmvisit_service/src/main/resources/application-testYL.yml b/server/visits/dmvisit_service/src/main/resources/application-testYL.yml
index 363db6d..59b19d7 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-testYL.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-testYL.yml
@@ -33,8 +33,8 @@
 debug_model: true
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
-  org-user-data-origin: 2 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
-  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  org-user-data-origin: 3 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 3绠�閬撲簯 4閽夐拤
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺 2绠�閬撲簯
   need-deal-img: false #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 # Swagger閰嶇疆

--
Gitblit v1.9.3