doum
2025-11-10 36f691267e45ca2861bed663fdcf5f2efcefdfce
最新版本541200007
已添加33个文件
已删除2个文件
已修改39个文件
3356 ■■■■■ 文件已修改
admin/.env 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/public/index.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/company.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/member.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalCompany.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalMember.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/login.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/startsh/admin_start.sh 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/application-pro.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/application-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/bootstrap-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/bootstrap-pro.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/config/DataSyncConfig.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/CorpCoopApiClient.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/DeptApiClient.java 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/MemberApiClient.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleApiClient.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleGroupApiClient.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/AppApiClient.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FileApiClient.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormApiClient.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/base/PageBaseParam.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptCreateParam.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/file/UploadTokenParam.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchCreateParam.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchRemoveParam.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchUpdateParam.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataCreateParam.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataDeleteParam.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataQueryParam.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataUpdateParam.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormQueryParam.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/HttpRequestParam.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleGroupListQueryParam.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleListQueryParam.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleMemberQueryParam.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleUpdateParam.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserCreateParam.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserEntityModel.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserUpdateParam.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/jiandaoyun/util/LimitUtil.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/business/model/Member.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/application-pro.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/application-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/bootstrap-pro.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/resources/bootstrap-pro.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap-pro.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java 169 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 152 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/resources/application-pro.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/resources/application-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/resources/application-testHS.yml.bck 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/openapi/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env
@@ -10,4 +10,4 @@
VUE_APP_API_PREFIX = '/system_gateway'
# é¡¹ç›®åç§°
VUE_APP_TITLE = '芜湖烟草智慧安消安全防范系统'
VUE_APP_TITLE = '马鞍山烟草智慧安消安全防范系统'
admin/.env.development
@@ -5,7 +5,7 @@
# VUE_APP_API_URL  = 'http://192.168.1.45:10010'
VUE_APP_API_URL  = 'http://192.168.0.212/system_gateway'
VUE_APP_API_URL  = 'http://127.0.0.1:10010'
# VUE_APP_API_URL  = 'http://localhost:10010'
admin/public/index.html
@@ -5,11 +5,11 @@
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>芜湖烟草智慧安消安全防范系统</title>
    <title>马鞍山烟草智慧安消安全防范系统</title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but èŠœæ¹–çƒŸè‰æ™ºæ…§å®‰æ¶ˆå®‰å…¨é˜²èŒƒç³»ç»Ÿ doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
      <strong>We're sorry but é©¬éžå±±çƒŸè‰æ™ºæ…§å®‰æ¶ˆå®‰å…¨é˜²èŒƒç³»ç»Ÿ doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
admin/src/api/business/company.js
@@ -40,6 +40,9 @@
export function companySyncDingding (data) {
  return request.post('/visitsAdmin/cloudService/business/company/syncAllDingding', data)
}
export function companySyncJdy (data) {
  return request.post('/visitsAdmin/cloudService/business/company/syncAllJdy', data)
}
// åˆ†é¡µæŸ¥è¯¢
export function companyGetList (data) {
  return request.post('/visitsAdmin/cloudService/business/company/page', data)
admin/src/api/business/member.js
@@ -26,6 +26,9 @@
export function memberSyncDingding (data) {
  return request.post('/visitsAdmin/cloudService/business/member/syncAllDingding', data)
}
export function memberSyncJdy (data) {
  return request.post('/visitsAdmin/cloudService/business/member/syncAllJdy', data)
}
export function delHkForce (data) {
  return request.post('/visitsAdmin/cloudService/business/member/delHkForce', data)
}
admin/src/views/business/internalCompany.vue
@@ -27,6 +27,8 @@
            @click="synchronous()">同步</el-button></li>
        <li><el-button type="primary" v-permissions="['business:company:create']" :loading="loading"
            @click="synchronousDingding()">同步钉钉</el-button></li>
<!--        <li><el-button type="primary" v-permissions="['business:company:create']" :loading="loading"
            @click="synchronousJdy()">同步简道云</el-button></li>-->
      </ul>
      <el-table :max-height="tableHeight" v-loading="isWorking.search" :data="list" stripe
        :tree-props="{ children: 'childList', hasChildren: 'hasChildren' }" row-key="id"
@@ -65,7 +67,7 @@
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import { companySync,companySyncDingding, sort } from '@/api/business/company'
import { companySync,companySyncDingding, companySyncJdy,sort } from '@/api/business/company'
import OperaInternalCompanyWindow from '@/components/business/OperaInternalCompanyWindow'
export default {
  name: 'internalCompany',
@@ -150,6 +152,24 @@
        })
        .catch(() => { })
    },
    async synchronousJdy() {
      this.$dialog.actionConfirm('该操作将系统清空已有内部组织信息,您确认同步全部信息吗?', '操作确认提醒')
        .then(() => {
          this.loading = true
          companySyncJdy({})
            .then(res => {
              this.$tip.apiSuccess(res || '同步成功')
              this.search()
            })
            .catch(e => {
              this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.loading = false
            })
        })
        .catch(() => { })
    },
    // æŽ’序
    sort(direction) {
      if (this.sorting) {
admin/src/views/business/internalMember.vue
@@ -65,8 +65,10 @@
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:member:delete', 'business:member:create,business:empower:create']">
        <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading"
            @click="synchronous()">同步</el-button></li>
        <li><el-button type="primary" v-permissions="['business:member:create']" :loading="loading"
            @click="synchronous()">同步安防平台</el-button></li>
<!--        <li><el-button type="primary" v-permissions="['business:member:create']" :loading="loading"
            @click="synchronousJdy()">同步简道云</el-button></li>-->
         <li><el-button type="primary" v-permissions="['business:member:create']" :loading="loading"
            @click="synchronousDingding()">同步钉钉</el-button></li>
        <li><el-button type="primary"
            @click="add" icon="el-icon-plus"
@@ -220,7 +222,7 @@
import OperaMemberImportWindow from '@/components/business/OperaMemberImportWindow'
import { fetchList } from '@/api/business/company'
import { allList } from '@/api/business/position'
import { memberSync,memberSyncDingding, roleAuth, updateCanVisit, updateHead, updateWorkStatus } from '@/api/business/member'
import { memberSync,memberSyncDingding, memberSyncJdy,roleAuth, updateCanVisit, updateHead, updateWorkStatus } from '@/api/business/member'
export default {
  name: 'internalMember',
  extends: BaseTable,
@@ -389,6 +391,24 @@
        })
        .catch(() => { })
    },
    async synchronousJdy() {
      this.$dialog.actionConfirm('该操作降触发全员信息更新和重新下发!请谨慎操作', '您确认全量同步内部人员信息吗?')
        .then(() => {
          this.loading = true
          memberSyncJdy({})
            .then(res => {
              this.$tip.apiSuccess(res || '同步成功')
              this.search()
            })
            .catch(e => {
              this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.loading = false
            })
        })
        .catch(() => { })
    },
    async updateHead(row, type) {
      this.$dialog.actionConfirm('您确认进行当前操作吗?', '部门主管设置操作提示')
        .then(() => {
admin/src/views/login.vue
@@ -3,7 +3,7 @@
    <img src="@/assets/images/bg@2x.png" class="main_bg" alt="">
    <div class="login_wrap">
      <div class="login_img">
        <div class="h2">芜湖烟草智慧安消安全防范系统</div>
        <div class="h2">马鞍山烟草智慧安消安全防范系统</div>
        <div class="h3">智慧物流园区安消一体化系统</div>
      </div>
      <div class="form_wrap">
@@ -278,7 +278,7 @@
        align-items: center;
        justify-content: center;
        border-radius: 4px;
        width: 208px;
        width: 248px;
        display: flex;
        margin-bottom: 12px;
      }
server/meeting/meeting_service/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://10.50.250.178:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://10.50.250.178:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Atwl@2024
    driver-class-name: com.mysql.cj.jdbc.Driver
server/startsh/admin_start.sh
@@ -8,11 +8,11 @@
/usr/local/nacos/nacos/bin/startup.sh -m standalone
nohup java -jar /usr/local/jars/wuhuyancao/system_gateway.jar > /dev/null 2>&1 &
nohup java -jar /usr/local/jars/wuhuyancao/admin_timer.jar > /dev/null 2>&1 &
nohup java -jar /usr/local/jars/wuhuyancao/system_timer.jar > /dev/null 2>&1 &
nohup java -jar /usr/local/jars/wuhuyancao/admin_interface.jar > /dev/null 2>&1 &
nohup java -jar /usr/local/jars/wuhuyancao/meeting_admin.jar > /dev/null 2>&1 &
nohup java -jar /usr/local/jars/maanshanyancao/system_gateway.jar > /dev/null 2>&1 &
nohup java -jar /usr/local/jars/maanshanyancao/admin_timer.jar > /dev/null 2>&1 &
nohup java -jar /usr/local/jars/maanshanyancao/system_timer.jar > /dev/null 2>&1 &
nohup java -jar /usr/local/jars/maanshanyancao/admin_interface.jar > /dev/null 2>&1 &
nohup java -jar /usr/local/jars/maanshanyancao/meeting_admin.jar > /dev/null 2>&1 &
@@ -20,3 +20,4 @@
tail -f /usr/local/jars/logs/visitsAdmin/info.2025-10-31.0.log
tail -f /usr/local/jars/logs/visitsAdmin/error.2025-11-05.0.log
server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -72,7 +72,7 @@
        return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
    }
    private static Function<Class<?>, Boolean> handlerPackage(String basePackage)     {
    private static Function<Class<?>, Boolean> handlerPackage(String basePackage){
        return input -> {
            // å¾ªçŽ¯åˆ¤æ–­åŒ¹é…
            for (String strPackage : basePackage.split(";")) {
server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerResourceConfig.java
@@ -21,7 +21,6 @@
    private final RouteLocator routeLocator;
    private final GatewayProperties gatewayProperties;
    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources = new ArrayList<>();
@@ -37,7 +36,6 @@
        });
        return resources;
    }
    private SwaggerResource swaggerResource(String name, String location) {
        log.info("name:{},location:{}",name,location);
        SwaggerResource swaggerResource = new SwaggerResource();
server/system_gateway/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    driver-class-name: com.mysql.cj.jdbc.Driver
server/system_gateway/src/main/resources/application-pro.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://localhost:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://localhost:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Whyc@2025
    driver-class-name: com.mysql.cj.jdbc.Driver
server/system_gateway/src/main/resources/application-test.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    driver-class-name: com.mysql.cj.jdbc.Driver
server/system_gateway/src/main/resources/bootstrap-dev.yml
@@ -7,7 +7,7 @@
      discovery:
        server-addr: http://192.168.0.7:8848 #配置Nacos地址
#        namespace: dmvisit
        namespace: wuhu_visit_dev1
        namespace: wuhu_visit_dev
        username: nacos
        password: nacos
    gateway:
server/system_gateway/src/main/resources/bootstrap-pro.yml
@@ -6,7 +6,7 @@
      password: nacos
      discovery:
        server-addr: http://localhost:8848 #配置Nacos地址
        namespace: wuhuyancao
        namespace: maanshanyancao
#        namespace: dev_renkang
        username: nacos
        password: nacos
server/system_service/src/main/java/com/doumee/config/DataSyncConfig.java
@@ -12,6 +12,8 @@
        int erp = 1;
        int hk = 2;
        int self = 0;
        int jdy = 3;
        int dingding = 4;
    }
    private Integer orgUserDataOrigin;
    private Integer visitorDataOrigin;
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/CorpCoopApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
package com.doumee.core.jiandaoyun.api.arch;
import  com.doumee.core.jiandaoyun.model.http.ApiClient;
import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static  com.doumee.core.jiandaoyun.constants.HttpConstant.CORP_COOP_BASE_PATH;
/**
 * ä¼ä¸šäº’联相关接口
 */
public class CorpCoopApiClient extends ApiClient {
    private static final String DEFAULT_VERSION = "v5";
    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
    public CorpCoopApiClient(String apiKey, String host) {
        super(apiKey, host);
        this.setDefaultVersion(DEFAULT_VERSION);
        this.setValidVersionList(VALID_VERSION_LIST);
    }
    @Override
    public String generatePath(String version, String path) {
        return super.getValidVersion(version) + CORP_COOP_BASE_PATH + path;
    }
    /**
     * åˆ—出我连接的企业
     *
     * @param deptNo - éƒ¨é—¨ç¼–号 å¯ä¸ºnull
     * @return æˆ‘连接的企业
     */
    public Map<String, Object> corpCoopDepartList(Integer deptNo, String version) throws Exception {
        String path = this.generatePath(version, "department/list");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("dept_no", deptNo);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆ—出我连接的企业对接人
     *
     * @param deptNo - éƒ¨é—¨ç¼–号 å¯ä¸ºnull
     * @return æˆ‘连接的企业对接人
     */
    public Map<String, Object> corpCoopMemberList(Integer deptNo, String version) throws Exception {
        String path = this.generatePath(version, "user/list");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("dept_no", deptNo);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆ—出我连接的企业对接人详细信息
     *
     * @param userName - ç”¨æˆ·å
     */
    public Map<String, Object> corpCoopUserInfo(String userName, String version) throws Exception {
        if (StringUtils.isBlank(userName)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "user/get");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("username", userName);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/DeptApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,168 @@
package com.doumee.core.jiandaoyun.api.arch;
import  com.doumee.core.jiandaoyun.model.dept.DeptCreateParam;
import  com.doumee.core.jiandaoyun.model.http.ApiClient;
import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static  com.doumee.core.jiandaoyun.constants.HttpConstant.DEPT_BASE_PATH;
/**
 * éƒ¨é—¨ç›¸å…³æŽ¥å£
 */
public class DeptApiClient extends ApiClient {
    private static final String DEFAULT_VERSION = "v5";
    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
    public DeptApiClient(String apiKey, String host) {
        super(apiKey, host);
        this.setDefaultVersion(DEFAULT_VERSION);
        this.setValidVersionList(VALID_VERSION_LIST);
    }
    @Override
    public String generatePath(String version, String path) {
        return super.getValidVersion(version) + DEPT_BASE_PATH + path;
    }
    /**
     * èŽ·å–éƒ¨é—¨ç¼–å·å¯¹åº”éƒ¨é—¨åˆ—è¡¨ ï¼ˆé€’归)
     *
     * @param deptNo - éƒ¨é—¨ç¼–号
     * @return éƒ¨é—¨ä¿¡æ¯
     */
    public Map<String, Object> deptList(Integer deptNo, Boolean hasChild, String version) throws Exception {
        if (deptNo == null) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "list");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("has_child", hasChild);
        data.put("dept_no", deptNo);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆ›å»ºéƒ¨é—¨
     *
     * @param param - éƒ¨é—¨åç§°
     * @return éƒ¨é—¨ä¿¡æ¯
     */
    public Map<String, Object> deptCreate(DeptCreateParam param, String version) throws Exception {
        if (param == null || !param.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "create");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("name", param.getName());
        data.put("dept_no", param.getDept_no());
        data.put("parent_no", param.getParent_no());
        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
        return this.sendPostRequest(httpRequestParam);
    }
    /**
     * æ ¹æ®éƒ¨é—¨ç¼–号 æ›´æ–°éƒ¨é—¨åç§°
     *
     * @param deptNo - éƒ¨é—¨ç¼–号
     * @param name   - åç§°
     * @return æ›´æ–°åŽçš„部门信息
     */
    public Map<String, Object> deptUpdate(Integer deptNo, String name, String version) throws Exception {
        if (deptNo == null || StringUtils.isBlank(name)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "update");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("name", name);
        data.put("dept_no", deptNo);
        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
        return this.sendPostRequest(httpRequestParam);
    }
    /**
     * æ ¹æ®éƒ¨é—¨ç¼–号 åˆ é™¤éƒ¨é—¨
     *
     * @param deptNo - éƒ¨é—¨ç¼–号
     * @return status
     */
    public Map<String, Object> deptDelete(Integer deptNo, String version) throws Exception {
        if (deptNo == null) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "delete");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("dept_no", deptNo);
        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
        return this.sendPostRequest(httpRequestParam);
    }
    /**
     * æ ¹æ®é›†æˆæ¨¡å¼é€šè®¯å½•的部门ID获取部门编号
     *
     * @param integrateId - ç¬¬ä¸‰æ–¹å¹³å°çš„通讯录部门的ID
     * @return éƒ¨é—¨ç¼–号
     */
    public Map<String, Object> deptByIntegrateId(String integrateId, String version) throws Exception {
        if (StringUtils.isBlank(integrateId)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "dept_no/get");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("integrate_id", integrateId);
        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
        return this.sendPostRequest(httpRequestParam);
    }
    /**
     * æ‰¹é‡åˆ›å»ºéƒ¨é—¨
     *
     * @param paramList - éƒ¨é—¨å‚数列表
     * @return status
     */
    public Map<String, Object> departmentImport(List<DeptCreateParam> paramList, String version) throws Exception {
        if (CollectionUtils.isEmpty(paramList)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "import");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("departments", paramList);
        HttpRequestParam httpRequestParam = new HttpRequestParam(path, data);
        return this.sendPostRequest(httpRequestParam);
    }
    /**
     * èŽ·å–éƒ¨é—¨æˆå‘˜ï¼ˆé€’å½’ï¼‰
     *
     * @param deptNo   - éƒ¨é—¨ç¼–号
     * @param hasChild - æ˜¯å¦æŸ¥å­éƒ¨é—¨
     * @return éƒ¨é—¨æˆå‘˜ä¿¡æ¯
     */
    public Map<String, Object> deptMemberList(Integer deptNo, Boolean hasChild, String version) throws Exception {
        if (deptNo == null || hasChild == null) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "user/list");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("has_child", hasChild);
        data.put("dept_no", deptNo);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/MemberApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,147 @@
package com.doumee.core.jiandaoyun.api.arch;
import  com.doumee.core.jiandaoyun.model.http.ApiClient;
import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
import  com.doumee.core.jiandaoyun.model.user.UserCreateParam;
import  com.doumee.core.jiandaoyun.model.user.UserUpdateParam;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static  com.doumee.core.jiandaoyun.constants.HttpConstant.MEMBER_BASE_PATH;
/**
 * æˆå‘˜ç›¸å…³æŽ¥å£
 */
public class MemberApiClient extends ApiClient {
    private static final String DEFAULT_VERSION = "v5";
    private static final List<String> VALID_VERSION_LIST = Arrays.asList("v5");
    public MemberApiClient(String apiKey, String host) {
        super(apiKey, host);
        this.setDefaultVersion(DEFAULT_VERSION);
        this.setValidVersionList(VALID_VERSION_LIST);
    }
    @Override
    public String generatePath(String version, String path) {
        return super.getValidVersion(version) + MEMBER_BASE_PATH + path;
    }
    /**
     * åˆ›å»ºæˆå‘˜
     *
     * @param param - æˆå‘˜ä¿¡æ¯
     * @return æˆå‘˜ä¿¡æ¯
     */
    public Map<String, Object> userCreate(UserCreateParam param, String version) throws Exception {
        if (param == null || !param.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "create");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("name", param.getName());
        data.put("username", param.getUsername());
        data.put("departments", param.getDepartments());
        HttpRequestParam requestParam = new HttpRequestParam(path, data);
        return this.sendPostRequest(requestParam);
    }
    /**
     * æ ¹æ®æˆå‘˜åç§° èŽ·å–æˆå‘˜
     *
     * @param userName - æˆå‘˜åç§°
     * @return æˆå‘˜ä¿¡æ¯
     */
    public Map<String, Object> userInfo(String userName, String version) throws Exception {
        if (StringUtils.isBlank(userName)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "get");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("username", userName);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * æ›´æ–°æˆå‘˜
     *
     * @param updateParam - æ›´æ–°çš„æˆå‘˜ä¿¡æ¯
     * @return æ›´æ–°åŽçš„æˆå‘˜ä¿¡æ¯
     */
    public Map<String, Object> userUpdate(UserUpdateParam updateParam, String version) throws Exception {
        if (updateParam == null || !updateParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "update");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("name", updateParam.getName());
        data.put("username", updateParam.getUserName());
        data.put("departments", updateParam.getDepartmentList());
        HttpRequestParam requestParam = new HttpRequestParam(path, data);
        return this.sendPostRequest(requestParam);
    }
    /**
     * æˆå‘˜åˆ é™¤
     *
     * @param userName - æˆå‘˜åç§°
     * @return status
     */
    public Map<String, Object> userDelete(String userName, String version) throws Exception {
        if (StringUtils.isBlank(userName)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "delete");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("username", userName);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * æ‰¹é‡åˆ é™¤æˆå‘˜
     *
     * @param userNameList - å¾…删除的用户名称列表
     * @return status
     */
    public Map<String, Object> userBatchDelete(List<String> userNameList, String version) throws Exception {
        if (CollectionUtils.isEmpty(userNameList)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "batch_delete");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("usernames", userNameList);
        HttpRequestParam requestParam = new HttpRequestParam(path, data);
        return this.sendPostRequest(requestParam);
    }
    /**
     * æ‰¹é‡å¯¼å…¥æˆå‘˜
     *
     * @param userNameList - å¯¼å…¥çš„æˆå‘˜åˆ—表
     * @return status
     */
    public Map<String, Object> userImport(List<UserCreateParam> userNameList, String version) throws Exception {
        if (CollectionUtils.isEmpty(userNameList)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "import");
        // è¯·æ±‚参数
        Map<String, Object> data = new HashMap<>();
        data.put("users", userNameList);
        HttpRequestParam requestParam = new HttpRequestParam(path, data);
        return this.sendPostRequest(requestParam);
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,170 @@
package com.doumee.core.jiandaoyun.api.arch;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import  com.doumee.core.jiandaoyun.model.http.ApiClient;
import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
import  com.doumee.core.jiandaoyun.model.role.RoleListQueryParam;
import  com.doumee.core.jiandaoyun.model.role.RoleMemberQueryParam;
import  com.doumee.core.jiandaoyun.model.role.RoleUpdateParam;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static  com.doumee.core.jiandaoyun.constants.HttpConstant.ROLE_BASE_PATH;
/**
 * è§’色相关接口
 */
public class RoleApiClient extends ApiClient {
    private static final String DEFAULT_VERSION = "v5";
    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
    public RoleApiClient(String apiKey, String host) {
        super(apiKey, host);
        this.setDefaultVersion(DEFAULT_VERSION);
        this.setValidVersionList(VALID_VERSION_LIST);
    }
    @Override
    public String generatePath(String version, String path) {
        return super.getValidVersion(version) + ROLE_BASE_PATH + path;
    }
    /**
     * åˆ—出角色
     *
     * @param queryParam - æŸ¥è¯¢å‚æ•°
     * @return è§’色信息
     */
    public Map<String, Object> roleList(RoleListQueryParam queryParam, String version) throws Exception {
        if (queryParam == null || !queryParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "list");
        // è¯·æ±‚参数 å°† queryParam é‡Œé¢çš„属性转换成map
        Map<String, Object> data =
                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆ›å»ºè§’色
     *
     * @param name    - è§’色名称
     * @param groupNo - è§’色组编号
     * @return è§’色信息
     */
    public Map<String, Object> roleCreate(String name, Integer groupNo, String version) throws Exception {
        if (StringUtils.isBlank(name) || groupNo == null) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version,"create");
        Map<String, Object> data = new HashMap<>();
        data.put("group_no", groupNo);
        data.put("name", name);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * æ›´æ–°è§’色
     *
     * @param updateParam - è§’色更新信息
     * @return æ›´æ–°åŽçš„角色信息
     */
    public Map<String, Object> roleUpdate(RoleUpdateParam updateParam, String version) throws Exception {
        if (updateParam == null || !updateParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version,"update");
        // è¯·æ±‚参数 å°† queryParam é‡Œé¢çš„属性转换成map
        Map<String, Object> data =
                new ObjectMapper().convertValue(updateParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆ é™¤è§’色
     *
     * @param roleNo - è§’色编号
     * @return æ— 
     */
    public Map<String, Object> roleDelete(Integer roleNo, String version) throws Exception {
        if (roleNo == null) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version,"delete");
        Map<String, Object> data = new HashMap<>();
        data.put("role_no", roleNo);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆ—出角色下的所有成员
     *
     * @param queryParam - äº§çº¿å‚æ•°
     * @return æˆå‘˜ä¿¡æ¯
     */
    public Map<String, Object> roleMemberList(RoleMemberQueryParam queryParam, String version) throws Exception {
        if (queryParam == null || !queryParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version,"user/list");
        // è¯·æ±‚参数 å°† queryParam é‡Œé¢çš„属性转换成map
        Map<String, Object> data =
                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * æ‰¹é‡ç»™å·²æœ‰çš„æˆå‘˜è®¾ç½®è‡ªå»ºè§’色
     *
     * @param roleNo       - è§’色编号
     * @param userNameList - æˆå‘˜åç§°åˆ—表
     * @return success
     */
    public Map<String, Object> roleAddMembers(Integer roleNo, List<String> userNameList, String version)
            throws Exception {
        if (roleNo == null || CollectionUtils.isEmpty(userNameList)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version,"add_members");
        Map<String, Object> data = new HashMap<>();
        data.put("role_no", roleNo);
        data.put("usernames", userNameList);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * ä¸ºè‡ªå»ºè§’色批量移除成员
     *
     * @param roleNo       - è§’色编号
     * @param userNameList - ç”¨æˆ·åç§°åˆ—表
     * @return status
     */
    public Map<String, Object> roleRemoveMembers(Integer roleNo, List<String> userNameList, String version)
            throws Exception {
        if (roleNo == null || CollectionUtils.isEmpty(userNameList)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version,"remove_members");
        Map<String, Object> data = new HashMap<>();
        data.put("role_no", roleNo);
        data.put("usernames", userNameList);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/arch/RoleGroupApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
package com.doumee.core.jiandaoyun.api.arch;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import  com.doumee.core.jiandaoyun.model.http.ApiClient;
import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
import  com.doumee.core.jiandaoyun.model.role.RoleGroupListQueryParam;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.doumee.core.jiandaoyun.constants.HttpConstant.ROLE_GROUP_BASE_PATH;
/**
 * è§’色组相关接口
 */
public class RoleGroupApiClient extends ApiClient {
    private static final String DEFAULT_VERSION = "v5";
    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
    public RoleGroupApiClient(String apiKey, String host) {
        super(apiKey, host);
        this.setDefaultVersion(DEFAULT_VERSION);
        this.setValidVersionList(VALID_VERSION_LIST);
    }
    @Override
    public String generatePath(String version, String path) {
        return super.getValidVersion(version) + ROLE_GROUP_BASE_PATH + path;
    }
    /**
     * åˆ—出角色组
     *
     * @param queryParam - æŸ¥è¯¢å‚æ•°
     * @return è§’色组信息
     */
    public Map<String, Object> roleGroupList(RoleGroupListQueryParam queryParam, String version) throws Exception {
        if (queryParam == null || !queryParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version,"list");
        // è¯·æ±‚参数 å°† queryParam é‡Œé¢çš„属性转换成map
        Map<String, Object> data =
                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆ›å»ºè§’色组
     *
     * @param name - è§’色组名称
     * @return è§’色组信息
     */
    public Map<String, Object> roleGroupCreate(String name, String version) throws Exception {
        if (StringUtils.isBlank(name)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version,"create");
        Map<String, Object> data = new HashMap<>();
        data.put("name", name);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * æ›´æ–°è§’色组
     *
     * @param name        - è§’色组名称
     * @param roleGroupNo - è§’色组编号
     * @return æ›´æ–°åŽçš„角色组信息
     */
    public Map<String, Object> roleGroupUpdate(String name, Integer roleGroupNo, String version) throws Exception {
        if (StringUtils.isBlank(name) || roleGroupNo == null) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version,"update");
        Map<String, Object> data = new HashMap<>();
        data.put("name", name);
        data.put("role_group_no", roleGroupNo);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆ é™¤è§’色组
     *
     * @param roleGroupNo - è§’色组编号
     * @return status
     */
    public Map<String, Object> roleGroupDelete(Integer roleGroupNo, String version) throws Exception {
        if (roleGroupNo == null) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "delete");
        Map<String, Object> data = new HashMap<>();
        data.put("role_group_no", roleGroupNo);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/AppApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.doumee.core.jiandaoyun.api.jdy;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import  com.doumee.core.jiandaoyun.model.base.PageBaseParam;
import  com.doumee.core.jiandaoyun.model.http.ApiClient;
import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static com.doumee.core.jiandaoyun.constants.HttpConstant.APP_BASE_PATH;
/**
 * åº”用相关接口
 */
public class AppApiClient extends ApiClient {
    private static final String DEFAULT_VERSION = "v5";
    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
    public AppApiClient(String apiKey, String host) {
        super(apiKey, host);
        this.setDefaultVersion(DEFAULT_VERSION);
        this.setValidVersionList(VALID_VERSION_LIST);
    }
    @Override
    public String generatePath(String version, String path) {
        return super.getValidVersion(version) + APP_BASE_PATH + path;
    }
    /**
     * åº”用分页列表
     *
     * @param queryParam - æŸ¥è¯¢å‚æ•°
     * @return åº”用信息
     */
    public Map<String, Object> appList(PageBaseParam queryParam, String version) throws Exception {
        if (queryParam == null || !queryParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "list");
        // è¯·æ±‚参数 å°† queryParam é‡Œé¢çš„属性转换成map
        Map<String, Object> data =
                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FileApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.doumee.core.jiandaoyun.api.jdy;
import  com.doumee.core.jiandaoyun.model.file.UploadTokenParam;
import  com.doumee.core.jiandaoyun.model.http.ApiClient;
import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.doumee.core.jiandaoyun.constants.HttpConstant.FORM_BASE_PATH;
/**
 * æ–‡ä»¶ç›¸å…³æŽ¥å£
 */
public class FileApiClient extends ApiClient {
    private static final String DEFAULT_VERSION = "v5";
    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
    public FileApiClient(String apiKey, String host) {
        super(apiKey, host);
        this.setDefaultVersion(DEFAULT_VERSION);
        this.setValidVersionList(VALID_VERSION_LIST);
    }
    @Override
    public String generatePath(String version, String path) {
        return super.getValidVersion(version) + FORM_BASE_PATH + path;
    }
    /**
     * èŽ·å–æ–‡ä»¶ä¸Šä¼ å‡­è¯å’Œä¸Šä¼ åœ°å€æŽ¥å£
     *
     * @param uploadTokenParam - æ–‡ä»¶å¯¹åº”的信息
     * @return token和url信息
     */
    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);
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.doumee.core.jiandaoyun.api.jdy;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import  com.doumee.core.jiandaoyun.model.form.FormQueryParam;
import  com.doumee.core.jiandaoyun.model.http.ApiClient;
import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.doumee.core.jiandaoyun.constants.HttpConstant.FORM_BASE_PATH;
/**
 * è¡¨å•相关接口
 */
public class FormApiClient extends ApiClient {
    private static final String DEFAULT_VERSION = "v5";
    private static final List<String> VALID_VERSION_LIST = Arrays.asList("v5");
    public FormApiClient(String apiKey, String host) {
        super(apiKey, host);
        this.setDefaultVersion(DEFAULT_VERSION);
        this.setValidVersionList(VALID_VERSION_LIST);
    }
    @Override
    public String generatePath(String version, String path) {
        return super.getValidVersion(version) + FORM_BASE_PATH + path;
    }
    /**
     * è¡¨å•字段查询接口
     *
     * @param appId   - åº”用 Id
     * @param entryId - è¡¨å• Id
     */
    public Map<String, Object> formWidgets(String appId, String entryId, String version) throws Exception {
        if (StringUtils.isBlank(appId) || StringUtils.isBlank(entryId)) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "widget/list");
        Map<String, Object> data = new HashMap<>();
        data.put("app_id", appId);
        data.put("entry_id", entryId);
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * è¡¨å•查询接口 åˆ†é¡µ
     *
     * @param queryParam - æŸ¥è¯¢å‚æ•°
     * @return è¡¨å•信息
     */
    public Map<String, Object> entryList(FormQueryParam queryParam, String version) throws Exception {
        if (queryParam == null || !queryParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "list");
        // è¯·æ±‚参数 å°† queryParam é‡Œé¢çš„属性转换成map
        Map<String, Object> data =
                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/api/jdy/FormDataApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,196 @@
package com.doumee.core.jiandaoyun.api.jdy;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import  com.doumee.core.jiandaoyun.model.form.FormDataBatchCreateParam;
import  com.doumee.core.jiandaoyun.model.form.FormDataBatchRemoveParam;
import  com.doumee.core.jiandaoyun.model.form.FormDataBatchUpdateParam;
import  com.doumee.core.jiandaoyun.model.form.FormDataCreateParam;
import  com.doumee.core.jiandaoyun.model.form.FormDataDeleteParam;
import  com.doumee.core.jiandaoyun.model.form.FormDataQueryParam;
import  com.doumee.core.jiandaoyun.model.form.FormDataUpdateParam;
import  com.doumee.core.jiandaoyun.model.http.ApiClient;
import  com.doumee.core.jiandaoyun.model.http.HttpRequestParam;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.doumee.core.jiandaoyun.constants.HttpConstant.FORM_DATA_BASE_PATH;
/**
 * è¡¨å•数据相关接口
 */
public class FormDataApiClient extends ApiClient {
    private static final String DEFAULT_VERSION = "v5";
    private static final List<String> VALID_VERSION_LIST = Collections.singletonList("v5");
    public FormDataApiClient(String apiKey, String host) {
        super(apiKey, host);
        this.setDefaultVersion(DEFAULT_VERSION);
        this.setValidVersionList(VALID_VERSION_LIST);
    }
    @Override
    public String generatePath(String version, String path) {
        return super.getValidVersion(version) + FORM_DATA_BASE_PATH + path;
    }
    /**
     * æ–°å»ºå•条数据接口
     *
     * @param createParam - è¡¨å•数据信息
     * @return æ–°å¢žçš„æ•°æ®ä¿¡æ¯
     */
    public Map<String, Object> singleDataCreate(FormDataCreateParam createParam, String version) throws Exception {
        if (createParam == null || !createParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "create");
        // è¯·æ±‚参数 å°† queryParam é‡Œé¢çš„属性转换成map
        Map<String, Object> data =
                new ObjectMapper().convertValue(createParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * æŸ¥è¯¢å•条数据接口
     *
     * @param queryParam - æŸ¥è¯¢å‚æ•°
     * @return æ•°æ®ä¿¡æ¯
     */
    public Map<String, Object> singleDataQuery(FormDataQueryParam queryParam, String version) throws Exception {
        if (queryParam == null || !queryParam.isSingleQueryValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "get");
        Map<String, Object> data = new HashMap<>();
        data.put("data_id", queryParam.getData_id());
        data.put("app_id", queryParam.getApp_id());
        data.put("entry_id", queryParam.getEntry_id());
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * ä¿®æ”¹å•条数据接口
     *
     * @param updateParam - æ›´æ–°æ•°æ®ä¿¡æ¯
     * @return æ›´æ–°åŽçš„æ•°æ®ä¿¡æ¯
     */
    public Map<String, Object> singleDataUpdate(FormDataUpdateParam updateParam, String version) throws Exception {
        if (updateParam == null || !updateParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "update");
        // è¯·æ±‚参数 å°† queryParam é‡Œé¢çš„属性转换成map
        Map<String, Object> data =
                new ObjectMapper().convertValue(updateParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆªé™¤å•条数据接口
     *
     * @param deleteParam - åˆ é™¤çš„æ•°æ®ä¿¡æ¯
     * @param version     - ç‰ˆæœ¬
     * @return status
     */
    public Map<String, Object> singleDataRemove(FormDataDeleteParam deleteParam, String version) throws Exception {
        if (deleteParam == null || !deleteParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "delete");
        Map<String, Object> data =
                new ObjectMapper().convertValue(deleteParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * æ–°å»ºå¤šæ¡æ•°æ®æŽ¥å£
     *
     * @param createParam - æ–°å»ºçš„æ•°æ®ä¿¡æ¯
     * @param version     - ç‰ˆæœ¬
     * @return success_count
     */
    public Map<String, Object> batchDataCreate(FormDataBatchCreateParam createParam, String version) throws Exception {
        if (createParam == null || !createParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "batch_create");
        Map<String, Object> data =
                new ObjectMapper().convertValue(createParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * æŸ¥è¯¢å¤šæ¡æ•°æ®æŽ¥å£
     *
     * @param queryParam - æŸ¥è¯¢å‚æ•°
     * @param version    - ç‰ˆæœ¬
     * @return æ•°æ®ä¿¡æ¯
     */
    public Map<String, Object> batchDataQuery(FormDataQueryParam queryParam, String version) throws Exception {
        if (queryParam == null || !queryParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "list");
        Map<String, Object> data =
                new ObjectMapper().convertValue(queryParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * åˆ é™¤å¤šæ¡æ•°æ®æŽ¥å£
     *
     * @param removeParam - åˆ é™¤å‚æ•°
     * @param version     - ç‰ˆæœ¬
     * @return status å’Œ success_count
     */
    public Map<String, Object> batchDataRemove(FormDataBatchRemoveParam removeParam, String version) throws Exception {
        if (removeParam == null || !removeParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "batch_delete");
        Map<String, Object> data =
                new ObjectMapper().convertValue(removeParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
    /**
     * ä¿®æ”¹å¤šæ¡æ•°æ®æŽ¥å£
     *
     * @param updateParam - æ›´æ–°æ•°æ®çš„信息
     * @param version     - ç‰ˆæœ¬
     * @return status å’Œ success_count
     */
    public Map<String, Object> batchDataUpdate(FormDataBatchUpdateParam updateParam, String version) throws Exception {
        if (updateParam == null || !updateParam.isValid()) {
            throw new RuntimeException("param lack!");
        }
        String path = this.generatePath(version, "batch_update");
        Map<String, Object> data =
                new ObjectMapper().convertValue(updateParam, new TypeReference<Map<String, Object>>() {
                });
        HttpRequestParam param = new HttpRequestParam(path, data);
        return this.sendPostRequest(param);
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.doumee.core.jiandaoyun.constants;
/**
 * http ç›¸å…³çš„常量
 */
public class HttpConstant {
    public static final String HOST = "https://api.jiandaoyun.com/api/";
    /**
     * éƒ¨é—¨ç›¸å…³çš„æŽ¥å£å‰ç¼€
     */
    public static final String DEPT_BASE_PATH = "/corp/department/";
    /**
     * æˆå‘˜ç›¸å…³çš„æŽ¥å£å‰ç¼€
     */
    public static final String MEMBER_BASE_PATH = "/corp/user/";
    /**
     * åº”用相关的接口前缀
     */
    public static final String APP_BASE_PATH = "/app/";
    /**
     * ä¼ä¸šäº’联的接口前缀
     */
    public static final String CORP_COOP_BASE_PATH = "/corp/guest/";
    /**
     * è§’色相关的接口前缀
     */
    public static final String ROLE_BASE_PATH = "/corp/role/";
    /**
     * è§’色组相关的接口前缀
     */
    public static final String ROLE_GROUP_BASE_PATH = "/corp/role_group/";
    /**
     * è¡¨å•相关的接口前缀
     */
    public static final String FORM_BASE_PATH = "/app/entry/";
    /**
     * è¡¨å•相关的接口前缀
     */
    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";
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/base/PageBaseParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.doumee.core.jiandaoyun.model.base;
/**
 * åˆ†é¡µæŸ¥è¯¢åŸºå‚
 */
public class PageBaseParam {
    /**
     * è·³è¿‡æ•°é‡
     */
    private Integer skip;
    /**
     * æŸ¥è¯¢æ•°é‡
     */
    private Integer limit;
    public Integer getSkip() {
        return skip;
    }
    public void setSkip(Integer skip) {
        this.skip = skip;
    }
    public Integer getLimit() {
        return limit;
    }
    public void setLimit(Integer limit) {
        this.limit = limit;
    }
    public boolean isValid() {
        return this.getLimit() != null && this.getSkip() != null;
    }
    @Override
    public String toString() {
        return "PageBaseParam{" +
                "skip=" + skip +
                ", limit=" + limit +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptCreateParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.doumee.core.jiandaoyun.model.dept;
import org.apache.commons.lang3.StringUtils;
/**
 * åˆ›å»ºéƒ¨é—¨çš„参数
 */
public class DeptCreateParam {
    /**
     * éƒ¨é—¨åç§° å¿…å¡«
     */
    private String name;
    /**
     * çˆ¶çº§éƒ¨é—¨ç¼–号 é€‰å¡«
     */
    private Integer parent_no;
    /**
     * éƒ¨é—¨ç¼–号 é€‰å¡«
     */
    private Integer dept_no;
    public DeptCreateParam(String name) {
        this.name = name;
    }
    public DeptCreateParam() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getParent_no() {
        return parent_no;
    }
    public void setParent_no(Integer parent_no) {
        this.parent_no = parent_no;
    }
    public Integer getDept_no() {
        return dept_no;
    }
    public void setDept_no(Integer dept_no) {
        this.dept_no = dept_no;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getName());
    }
    @Override
    public String toString() {
        return "DeptCreateParam{" +
                "name='" + name + '\'' +
                ", parent_no=" + parent_no +
                ", dept_no=" + dept_no +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/dept/DeptEntityModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.doumee.core.jiandaoyun.model.dept;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
/**
 * éƒ¨é—¨å®žä½“参数
 */
@Data
public class DeptEntityModel {
  private Integer  dept_no;// Number  éƒ¨é—¨ç¼–号,企业内唯一 ä¸åŒä¼ä¸šä¹‹é—´å¯èƒ½å­˜åœ¨é‡å¤
    private String   name  ;//String  éƒ¨é—¨åç§°
    private Integer  parent_no;//   Number çˆ¶éƒ¨é—¨ç¼–号   åœ¨ä¼ä¸šäº’联接口中(外部部门)不存在
    private Integer   type ;//Number  éƒ¨é—¨ç±»åž‹ 0: å¸¸è§„部 2: ä¼ä¸šäº’联外部部门
    private Integer  status;// Number éƒ¨é—¨çŠ¶æ€ 1: ä½¿ç”¨ä¸­çš„部门 -1: é›†æˆæ¨¡å¼ä¸‹åŒæ­¥åŽåˆ é™¤çš„部门
    private String  integrate_id;//  String  é›†æˆæ¨¡å¼åŒæ­¥éƒ¨é—¨å…³è” ID  ä»…在集成模式下返回,且在企业互联接口(外部部门)不返回
    private Integer    seq ;//number éƒ¨é—¨æŽ’序  éƒ¨é—¨åœ¨çˆ¶éƒ¨é—¨å†…的序号,从小到大排列
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/file/UploadTokenParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.doumee.core.jiandaoyun.model.file;
import org.apache.commons.lang3.StringUtils;
public class UploadTokenParam {
    private String appId;
    private String entryId;
    private String transactionId;
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getEntryId() {
        return entryId;
    }
    public void setEntryId(String entryId) {
        this.entryId = entryId;
    }
    public String getTransactionId() {
        return transactionId;
    }
    public void setTransactionId(String transactionId) {
        this.transactionId = transactionId;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getAppId()) && StringUtils.isNotBlank(this.getEntryId())
                && StringUtils.isNotBlank(this.getTransactionId());
    }
    @Override
    public String toString() {
        return "UploadTokenParam{" +
                "appId='" + appId + '\'' +
                ", entryId='" + entryId + '\'' +
                ", transactionId='" + transactionId + '\'' +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchCreateParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
package com.doumee.core.jiandaoyun.model.form;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Map;
public class FormDataBatchCreateParam {
    /**
     * åº”用id
     */
    private String app_id;
    /**
     * è¡¨å•id
     */
    private String entry_id;
    /**
     * æ•°æ®
     */
    private List<Map<String, Object>> data_list;
    private Boolean is_start_workflow;
    private String transaction_id;
    public FormDataBatchCreateParam() {
    }
    public FormDataBatchCreateParam(String app_id, String entry_id, List<Map<String, Object>> data_list) {
        this.app_id = app_id;
        this.entry_id = entry_id;
        this.data_list = data_list;
    }
    public String getApp_id() {
        return app_id;
    }
    public void setApp_id(String app_id) {
        this.app_id = app_id;
    }
    public String getEntry_id() {
        return entry_id;
    }
    public void setEntry_id(String entry_id) {
        this.entry_id = entry_id;
    }
    public List<Map<String, Object>> getData_list() {
        return data_list;
    }
    public void setData_list(List<Map<String, Object>> data_list) {
        this.data_list = data_list;
    }
    public Boolean getIs_start_workflow() {
        return is_start_workflow;
    }
    public void setIs_start_workflow(Boolean is_start_workflow) {
        this.is_start_workflow = is_start_workflow;
    }
    public String getTransaction_id() {
        return transaction_id;
    }
    public void setTransaction_id(String transaction_id) {
        this.transaction_id = transaction_id;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id());
    }
    @Override
    public String toString() {
        return "FormDataBatchCreateParam{" +
                "app_id='" + app_id + '\'' +
                ", entry_id='" + entry_id + '\'' +
                ", data_list=" + data_list +
                ", is_start_workflow=" + is_start_workflow +
                ", transaction_id='" + transaction_id + '\'' +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchRemoveParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.doumee.core.jiandaoyun.model.form;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
public class FormDataBatchRemoveParam {
    private List<String> data_ids;
    private String app_id;
    private String entry_id;
    public FormDataBatchRemoveParam(String app_id, String entry_id, List<String> data_ids) {
        this.data_ids = data_ids;
        this.app_id = app_id;
        this.entry_id = entry_id;
    }
    public List<String> getData_ids() {
        return data_ids;
    }
    public void setData_ids(List<String> data_ids) {
        this.data_ids = data_ids;
    }
    public String getApp_id() {
        return app_id;
    }
    public void setApp_id(String app_id) {
        this.app_id = app_id;
    }
    public String getEntry_id() {
        return entry_id;
    }
    public void setEntry_id(String entry_id) {
        this.entry_id = entry_id;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id()) && CollectionUtils.isNotEmpty(data_ids);
    }
    @Override
    public String toString() {
        return "FormDataBatchRemoveParam{" +
                "data_ids=" + data_ids +
                ", app_id='" + app_id + '\'' +
                ", entry_id='" + entry_id + '\'' +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataBatchUpdateParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
package com.doumee.core.jiandaoyun.model.form;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Map;
public class FormDataBatchUpdateParam {
    /**
     * åº”用id
     */
    private String app_id;
    /**
     * è¡¨å•id
     */
    private String entry_id;
    private List<String> data_ids;
    /**
     * æ•°æ®
     */
    private Map<String, Object> data;
    private String transaction_id;
    public FormDataBatchUpdateParam() {
    }
    public FormDataBatchUpdateParam(String app_id, String entry_id) {
        this.app_id = app_id;
        this.entry_id = entry_id;
    }
    public String getTransaction_id() {
        return transaction_id;
    }
    public void setTransaction_id(String transaction_id) {
        this.transaction_id = transaction_id;
    }
    public String getApp_id() {
        return app_id;
    }
    public void setApp_id(String app_id) {
        this.app_id = app_id;
    }
    public String getEntry_id() {
        return entry_id;
    }
    public void setEntry_id(String entry_id) {
        this.entry_id = entry_id;
    }
    public List<String> getData_ids() {
        return data_ids;
    }
    public void setData_ids(List<String> data_ids) {
        this.data_ids = data_ids;
    }
    public Map<String, Object> getData() {
        return data;
    }
    public void setData(Map<String, Object> data) {
        this.data = data;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id())
                && CollectionUtils.isNotEmpty(this.getData_ids());
    }
    @Override
    public String toString() {
        return "FormDataBatchUpdateParam{" +
                "app_id='" + app_id + '\'' +
                ", entry_id='" + entry_id + '\'' +
                ", data_ids=" + data_ids +
                ", data=" + data +
                ", transaction_id='" + transaction_id + '\'' +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataCreateParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
package com.doumee.core.jiandaoyun.model.form;
import org.apache.commons.lang3.StringUtils;
import java.util.Map;
public class FormDataCreateParam {
    /**
     * åº”用id
     */
    private String app_id;
    /**
     * è¡¨å•id
     */
    private String entry_id;
    /**
     * æ•°æ®
     */
    private Map<String, Object> data;
    private Boolean is_start_workflow;
    private Boolean is_start_trigger;
    private String transaction_id;
    public FormDataCreateParam() {
    }
    public FormDataCreateParam(String app_id, String entry_id, Map<String, Object> data) {
        this.app_id = app_id;
        this.entry_id = entry_id;
        this.data = data;
    }
    public String getApp_id() {
        return app_id;
    }
    public void setApp_id(String app_id) {
        this.app_id = app_id;
    }
    public String getEntry_id() {
        return entry_id;
    }
    public void setEntry_id(String entry_id) {
        this.entry_id = entry_id;
    }
    public Map<String, Object> getData() {
        return data;
    }
    public void setData(Map<String, Object> data) {
        this.data = data;
    }
    public Boolean getIs_start_workflow() {
        return is_start_workflow;
    }
    public void setIs_start_workflow(Boolean is_start_workflow) {
        this.is_start_workflow = is_start_workflow;
    }
    public Boolean getIs_start_trigger() {
        return is_start_trigger;
    }
    public void setIs_start_trigger(Boolean is_start_trigger) {
        this.is_start_trigger = is_start_trigger;
    }
    public String getTransaction_id() {
        return transaction_id;
    }
    public void setTransaction_id(String transaction_id) {
        this.transaction_id = transaction_id;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id());
    }
    @Override
    public String toString() {
        return "FormDataCreateParam{" +
                "app_id='" + app_id + '\'' +
                ", entry_id='" + entry_id + '\'' +
                ", data=" + data +
                ", is_start_workflow=" + is_start_workflow +
                ", is_start_trigger=" + is_start_trigger +
                ", transaction_id='" + transaction_id + '\'' +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataDeleteParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.doumee.core.jiandaoyun.model.form;
import org.apache.commons.lang3.StringUtils;
public class FormDataDeleteParam {
    /**
     * åº”用id
     */
    private String app_id;
    /**
     * è¡¨å•id
     */
    private String entry_id;
    private String data_id;
    private Boolean is_start_trigger;
    public FormDataDeleteParam() {
    }
    public FormDataDeleteParam(String app_id, String entry_id, String data_id) {
        this.app_id = app_id;
        this.entry_id = entry_id;
        this.data_id = data_id;
    }
    public String getApp_id() {
        return app_id;
    }
    public void setApp_id(String app_id) {
        this.app_id = app_id;
    }
    public String getEntry_id() {
        return entry_id;
    }
    public void setEntry_id(String entry_id) {
        this.entry_id = entry_id;
    }
    public String getData_id() {
        return data_id;
    }
    public void setData_id(String data_id) {
        this.data_id = data_id;
    }
    public Boolean getIs_start_trigger() {
        return is_start_trigger;
    }
    public void setIs_start_trigger(Boolean is_start_trigger) {
        this.is_start_trigger = is_start_trigger;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id())
                && StringUtils.isNotBlank(this.getData_id());
    }
    @Override
    public String toString() {
        return "FormDataDeleteParam{" +
                "app_id='" + app_id + '\'' +
                ", entry_id='" + entry_id + '\'' +
                ", data_id='" + data_id + '\'' +
                ", is_start_trigger=" + is_start_trigger +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataQueryParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
package com.doumee.core.jiandaoyun.model.form;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Map;
public class FormDataQueryParam {
    /**
     * åº”用id
     */
    private String app_id;
    /**
     * è¡¨å•id
     */
    private String entry_id;
    /**
     * æ•°æ®ID
     */
    private String data_id;
    /**
     * ä»Ž æ•°æ®ID å¼€å§‹è¿”回 limit æ¡æ•°æ®
     */
    private Integer limit;
    /**
     * æŸ¥è¯¢çš„字段
     */
    private List<String> fields;
    /**
     * è¿‡æ»¤æ¡ä»¶
     */
    private Map<String, Object> filter;
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id());
    }
    public boolean isSingleQueryValid() {
        return this.isValid() && StringUtils.isNotBlank(this.getData_id());
    }
    public FormDataQueryParam() {
    }
    public FormDataQueryParam(String app_id, String entry_id) {
        this.app_id = app_id;
        this.entry_id = entry_id;
    }
    public String getApp_id() {
        return app_id;
    }
    public void setApp_id(String app_id) {
        this.app_id = app_id;
    }
    public String getEntry_id() {
        return entry_id;
    }
    public void setEntry_id(String entry_id) {
        this.entry_id = entry_id;
    }
    public String getData_id() {
        return data_id;
    }
    public void setData_id(String data_id) {
        this.data_id = data_id;
    }
    public Integer getLimit() {
        return limit;
    }
    public void setLimit(Integer limit) {
        this.limit = limit;
    }
    public List<String> getFields() {
        return fields;
    }
    public void setFields(List<String> fields) {
        this.fields = fields;
    }
    public Map<String, Object> getFilter() {
        return filter;
    }
    public void setFilter(Map<String, Object> filter) {
        this.filter = filter;
    }
    @Override
    public String toString() {
        return "FormDataQueryParam{" +
                "app_id='" + app_id + '\'' +
                ", entry_id='" + entry_id + '\'' +
                ", data_id='" + data_id + '\'' +
                ", limit=" + limit +
                ", fields=" + fields +
                ", filter=" + filter +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormDataUpdateParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package com.doumee.core.jiandaoyun.model.form;
import org.apache.commons.lang3.StringUtils;
import java.util.Map;
public class FormDataUpdateParam {
    /**
     * åº”用id
     */
    private String app_id;
    /**
     * è¡¨å•id
     */
    private String entry_id;
    private String data_id;
    /**
     * æ•°æ®
     */
    private Map<String, Object> data;
    private Boolean is_start_trigger;
    private String transaction_id;
    public FormDataUpdateParam() {
    }
    public FormDataUpdateParam(String app_id, String entry_id, Map<String, Object> data) {
        this.app_id = app_id;
        this.entry_id = entry_id;
        this.data = data;
    }
    public Map<String, Object> getData() {
        return data;
    }
    public void setData(Map<String, Object> data) {
        this.data = data;
    }
    public Boolean getIs_start_trigger() {
        return is_start_trigger;
    }
    public void setIs_start_trigger(Boolean is_start_trigger) {
        this.is_start_trigger = is_start_trigger;
    }
    public String getTransaction_id() {
        return transaction_id;
    }
    public void setTransaction_id(String transaction_id) {
        this.transaction_id = transaction_id;
    }
    public String getApp_id() {
        return app_id;
    }
    public void setApp_id(String app_id) {
        this.app_id = app_id;
    }
    public String getEntry_id() {
        return entry_id;
    }
    public void setEntry_id(String entry_id) {
        this.entry_id = entry_id;
    }
    public String getData_id() {
        return data_id;
    }
    public void setData_id(String data_id) {
        this.data_id = data_id;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getApp_id()) && StringUtils.isNotBlank(this.getEntry_id())
                && StringUtils.isNotBlank(this.getData_id());
    }
    @Override
    public String toString() {
        return "FormDataUpdateParam{" +
                "app_id='" + app_id + '\'' +
                ", entry_id='" + entry_id + '\'' +
                ", data_id='" + data_id + '\'' +
                ", data=" + data +
                ", is_start_trigger=" + is_start_trigger +
                ", transaction_id='" + transaction_id + '\'' +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/form/FormQueryParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.doumee.core.jiandaoyun.model.form;
import com.doumee.core.jiandaoyun.model.base.PageBaseParam;
import org.apache.commons.lang3.StringUtils;
public class FormQueryParam extends PageBaseParam {
    private String app_id;
    public String getApp_id() {
        return app_id;
    }
    public void setApp_id(String app_id) {
        this.app_id = app_id;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getApp_id()) && super.isValid();
    }
    @Override
    public String toString() {
        return "FormQueryParam{" +
                "skip=" + super.getSkip() +
                ", limit=" + super.getLimit() +
                ", app_id=" + app_id +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,214 @@
package com.doumee.core.jiandaoyun.model.http;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.HttpsUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.Charsets;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.io.EmptyInputStream;
import org.apache.http.message.BasicHeader;
import org.apache.http.ssl.SSLContextBuilder;
import com.doumee.core.jiandaoyun.util.LimitUtil;
import javax.net.ssl.SSLContext;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
public abstract class ApiClient {
    /**
     * apiKey
     */
    private String apiKey;
    /**
     * åœ°å€
     */
    private String host;
    /**
     * é»˜è®¤ç‰ˆæœ¬
     */
    private String defaultVersion;
    /**
     * åˆæ³•版本
     */
    private List<String> validVersionList;
    public ApiClient(String apiKey, String host) {
        this.apiKey = apiKey;
        this.host = host;
    }
    public String getApiKey() {
        return apiKey;
    }
    public void setApiKey(String apiKey) {
        this.apiKey = apiKey;
    }
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public String getDefaultVersion() {
        return defaultVersion;
    }
    public void setDefaultVersion(String defaultVersion) {
        this.defaultVersion = defaultVersion;
    }
    public List<String> getValidVersionList() {
        return validVersionList;
    }
    public void setValidVersionList(List<String> validVersionList) {
        this.validVersionList = validVersionList;
    }
    /**
     * ç”Ÿæˆ path
     *
     * @param version - ç‰ˆæœ¬å·
     * @param path    - è·¯å¾„
     * @return æŽ¥å£çš„路径
     */
    public abstract String generatePath(String version, String path);
    /**
     * èŽ·å¾—åˆæ³•çš„ç‰ˆæœ¬å·
     *
     * @param version - ç‰ˆæœ¬å·
     * @return åˆæ³•的版本号
     */
    public String getValidVersion(String version) {
        if (this.getValidVersionList() != null && this.getValidVersionList().contains(version)) {
            return version;
        }
        return this.getDefaultVersion();
    }
    /**
     * å‘送POST请求
     *
     * @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<>();
        // æœ‰éƒ¨åˆ†æŽ¥å£ç›´æŽ¥è¿”回 æ²¡æœ‰æ•°æ®
        // fix:不能用content-length大于0判断,response header为gzip编码方式的情况下为-1
        if (!(response.getEntity().getContent() instanceof EmptyInputStream)) {
            result = (Map<String, Object>) mapper.readValue(response.getEntity().getContent(), Object.class);
        }
        if (statusCode >= 400) {
            throw new RuntimeException("请求错误,statusCode:" + 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<>();
        // æœ‰éƒ¨åˆ†æŽ¥å£ç›´æŽ¥è¿”回 æ²¡æœ‰æ•°æ®
        // fix:不能用content-length大于0判断,response header为gzip编码方式的情况下为-1
        if (!(response.getEntity().getContent() instanceof EmptyInputStream)) {
            result = (Map<String, Object>) mapper.readValue(response.getEntity().getContent(), Object.class);
        }
        if (statusCode >= 400) {
            throw new RuntimeException("请求错误,statusCode:" + statusCode + ",Error Code: " + result.get("code") + ", Error Msg: " + result.get("msg"));
        } else {
            // å¤„理返回结果
            return result;
        }
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/http/HttpRequestParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.doumee.core.jiandaoyun.model.http;
import java.util.Map;
public class HttpRequestParam {
    /**
     * è¯·æ±‚路径
     */
    private String path;
    /**
     * è¯·æ±‚参数
     */
    private Map<String, Object> data;
    public HttpRequestParam() {
    }
    public HttpRequestParam(String path, Map<String, Object> data) {
        this.path = path;
        this.data = data;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public Map<String, Object> getData() {
        return data;
    }
    public void setData(Map<String, Object> data) {
        this.data = data;
    }
    @Override
    public String toString() {
        return "HttpRequestParam{" +
                "path='" + path + '\'' +
                ", data=" + data +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleGroupListQueryParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.doumee.core.jiandaoyun.model.role;
import  com.doumee.core.jiandaoyun.model.base.PageBaseParam;
public class RoleGroupListQueryParam extends PageBaseParam {
    private boolean has_internal;
    private boolean has_sync;
    public boolean isHas_internal() {
        return has_internal;
    }
    public void setHas_internal(boolean has_internal) {
        this.has_internal = has_internal;
    }
    public boolean isHas_sync() {
        return has_sync;
    }
    public void setHas_sync(boolean has_sync) {
        this.has_sync = has_sync;
    }
    @Override
    public String toString() {
        return "RoleGroupListQueryParam{" +
                "skip=" + super.getSkip() +
                ", limit=" + super.getLimit() +
                ", has_internal=" + has_internal +
                ", has_sync=" + has_sync +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleListQueryParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.doumee.core.jiandaoyun.model.role;
import  com.doumee.core.jiandaoyun.model.base.PageBaseParam;
public class RoleListQueryParam extends PageBaseParam {
    private boolean has_internal;
    private boolean has_sync;
    public boolean isHas_internal() {
        return has_internal;
    }
    public void setHas_internal(boolean has_internal) {
        this.has_internal = has_internal;
    }
    public boolean isHas_sync() {
        return has_sync;
    }
    public void setHas_sync(boolean has_sync) {
        this.has_sync = has_sync;
    }
    public boolean isValid() {
        return super.isValid();
    }
    @Override
    public String toString() {
        return "RoleListQueryParam{" +
                "skip=" + super.getSkip() +
                ", limit=" + super.getLimit() +
                ", has_internal=" + has_internal +
                ", has_sync=" + has_sync +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleMemberQueryParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.doumee.core.jiandaoyun.model.role;
import  com.doumee.core.jiandaoyun.model.base.PageBaseParam;
public class RoleMemberQueryParam extends PageBaseParam {
    private Integer role_no;
    public Integer getRole_no() {
        return role_no;
    }
    public void setRole_no(Integer role_no) {
        this.role_no = role_no;
    }
    public boolean isValid() {
        return this.getRole_no() != null && super.isValid();
    }
    @Override
    public String toString() {
        return "RoleMemberQueryParam{" +
                "skip=" + super.getSkip() +
                ", limit=" + super.getLimit() +
                ", role_no=" + role_no +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/role/RoleUpdateParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.doumee.core.jiandaoyun.model.role;
import org.apache.commons.lang3.StringUtils;
public class RoleUpdateParam {
    private String name;
    private Integer group_no;
    private Integer role_no;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getGroup_no() {
        return group_no;
    }
    public void setGroup_no(Integer group_no) {
        this.group_no = group_no;
    }
    public Integer getRole_no() {
        return role_no;
    }
    public void setRole_no(Integer role_no) {
        this.role_no = role_no;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getName()) && this.getRole_no() != null && this.getGroup_no() != null;
    }
    @Override
    public String toString() {
        return "RoleUpdateParam{" +
                "name='" + name + '\'' +
                ", group_no=" + group_no +
                ", role_no=" + role_no +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserCreateParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.doumee.core.jiandaoyun.model.user;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
public class UserCreateParam {
    private String name;
    /**
     * ç”¨æˆ·å ç”±æ•°å­—字母和下划线组成
     */
    private String username;
    /**
     * éžå¿…å¡«
     */
    private List<Integer> departments;
    public UserCreateParam() {
    }
    public UserCreateParam(String name, String userName) {
        this.name = name;
        this.username = userName;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public List<Integer> getDepartments() {
        return departments;
    }
    public void setDepartments(List<Integer> departments) {
        this.departments = departments;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getName()) && StringUtils.isNotBlank(this.getUsername());
    }
    @Override
    public String toString() {
        return "UserCreateParam{" +
                "name='" + name + '\'' +
                ", username='" + username + '\'' +
                ", departments=" + departments +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserEntityModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.doumee.core.jiandaoyun.model.user;
import lombok.Data;
import java.util.List;
/**
 * äººå‘˜å®žä½“参数
 */
@Data
public class UserEntityModel {
  private Integer  dept_no;// Number  éƒ¨é—¨ç¼–号,企业内唯一 ä¸åŒä¼ä¸šä¹‹é—´å¯èƒ½å­˜åœ¨é‡å¤
  private String  username;// String  æˆå‘˜çš„编号,企业内唯一  ä¸åŒä¼ä¸šä¹‹é—´å¯èƒ½å­˜åœ¨é‡å¤
  private String  name;//  String æ˜µç§°
  private List<Long> departments;//Number[]    æˆå‘˜æ‰€åœ¨éƒ¨é—¨ç¼–号列表
  private Integer type;//Number成员类 0: å¸¸è§„成员2: ä¼ä¸šäº’联外部对接人
  private Integer   status;//  Number æˆå‘˜çŠ¶æ€ 0: æœªç¡®è®¤çš„æˆå‘˜ 1: å·²åŠ å…¥
  private String   integrate_id;//  String  é›†æˆæ¨¡å¼åŒæ­¥æˆå‘˜å…³è” ID   ä»…在集成模式下返回,且在企业互联接口(外部对接人)不返回
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/model/user/UserUpdateParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.doumee.core.jiandaoyun.model.user;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
public class UserUpdateParam {
    private String name;
    private String userName;
    /**
     * éžå¿…å¡«
     */
    private List<Integer> departmentList;
    public UserUpdateParam() {
    }
    public UserUpdateParam(String name, String userName) {
        this.name = name;
        this.userName = userName;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public List<Integer> getDepartmentList() {
        return departmentList;
    }
    public void setDepartmentList(List<Integer> departmentList) {
        this.departmentList = departmentList;
    }
    public boolean isValid() {
        return StringUtils.isNotBlank(this.getName()) && StringUtils.isNotBlank(this.getUserName());
    }
    @Override
    public String toString() {
        return "UserCreateParam{" +
                "name='" + name + '\'' +
                ", userName='" + userName + '\'' +
                ", departmentList=" + departmentList +
                '}';
    }
}
server/system_service/src/main/java/com/doumee/core/jiandaoyun/util/LimitUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.doumee.core.jiandaoyun.util;
import java.util.Arrays;
import java.util.List;
public class LimitUtil {
    private static volatile int seq = 0;
    private static final int bucket = 1000;
    private static volatile List<Long> requestTimeList = Arrays.asList(0L, 0L, 0L, 0L, 0L);
    private LimitUtil() {
    }
    /**
     * é™æµå®žçް ç”¨ static synchronized ä¿®é¥° è¡¨ç¤º å¯¹ç±»ä¸Šé”
     *
     * @throws InterruptedException
     */
    public static synchronized void tryBeforeRun() throws InterruptedException {
        long now = System.currentTimeMillis();
        // å½“前时间 ä¸Ž å‰limit个请求的时间 ä½œæ¯”较
        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();
    }
}
server/system_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -304,5 +304,8 @@
    @ApiModelProperty(value = "是否查询钥匙柜校验人员:0=否;1=是" )
    @TableField(exist = false)
    private Integer queryAuth;
    @ApiModelProperty(value = "部门编码集合" )
    @TableField(exist = false)
    private List<Long>  companyIdList;
}
server/system_timer/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    driver-class-name: com.mysql.cj.jdbc.Driver
server/system_timer/src/main/resources/application-pro.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://localhost:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://localhost:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Whyc@2025
    driver-class-name: com.mysql.cj.jdbc.Driver
server/system_timer/src/main/resources/application-test.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    driver-class-name: com.mysql.cj.jdbc.Driver
server/system_timer/src/main/resources/bootstrap-pro.yml
@@ -25,6 +25,6 @@
      #        data-id: com.doumee.meeting.admin
      discovery:
        server-addr: http://localhost:8848 #配置Nacos地址
        namespace: wuhuyancao
        namespace: maanshanyancao
        username: nacos
        password: nacos
server/visits/admin_timer/src/main/resources/bootstrap-pro.yml
@@ -23,7 +23,7 @@
      #        data-id: com.doumee.meeting.admin
      discovery:
        server-addr: http://localhost:8848 #配置Nacos地址
        namespace: wuhuyancao
        namespace: maanshanyancao
        username: nacos
        password: nacos
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
@@ -181,10 +181,17 @@
    @ApiOperation("全量部门信息同步 - é’‰é’‰")
    @PostMapping("/syncAllDingding")
//    @CloudRequiredPermission("business:company:sync")
    public ApiResponse syncAllDingding() throws ApiException {
    public ApiResponse syncAllDingding()  {
        companyService.syncDDCompany();
        return ApiResponse.success("同步成功");
    }
    @ApiOperation("全量部门信息同步 - é’‰é’‰")
    @PostMapping("/syncAllJdy")
//    @CloudRequiredPermission("business:company:sync")
    public ApiResponse syncAllJyd() throws ApiException {
        companyService.syncJdyCompany();
        return ApiResponse.success("同步成功");
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -336,6 +336,12 @@
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self){
            hkSyncOrgUserFromSelfService.syncUserData(this.getLoginUser(token));
            return ApiResponse.success("同步成功");
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.jdy){
            memberService.syncJdyUserInfo();
            return ApiResponse.success("同步成功");
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.dingding){
            memberService.syncDDUserInfo();
            return ApiResponse.success("同步成功");
        }
        return ApiResponse.success("同步成功");
    }
@@ -377,5 +383,13 @@
        return ApiResponse.success("同步成功");
    }
    @ApiOperation("全量人员信息同步 - ç®€é“云")
    @PostMapping("/syncAllJdy")
//    @CloudRequiredPermission("business:company:sync")
    public ApiResponse syncAllJdy() throws ApiException {
        memberService.syncJdyUserInfo();
        return ApiResponse.success("同步成功");
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,142 @@
package com.doumee.cloud.web;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.FacePictureCheckRequest;
import com.doumee.core.haikang.model.param.respose.FacePictureCheckResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.FtpUtil;
import com.doumee.core.utils.HttpsUtil;
import com.doumee.core.utils.aliyun.ALiYunUtil;
import com.doumee.dao.business.model.Cars;
import com.doumee.dao.business.model.JkCabinetLog;
import com.doumee.dao.web.reqeust.VisitRecordDTO;
import com.doumee.dao.web.response.VisitRecordVO;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.sun.net.httpserver.HttpExchange;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URI;
import java.util.*;
/**
 * @author Eva.Caesar Liu
 * @date 2023/02/14 11:14
 */
@Api(tags = "【简道云】业务接口")
@Trace(exclude = true)
@RestController
@LoginNoRequired
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/jiandaoyun")
@Slf4j
public class JiandaoyunCloudController extends BaseController {
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @ApiOperation("简道云推送用车申请")
    @PostMapping("/pushCarApply")
    public void pushCarApply (HttpServletRequest request, HttpServletResponse response) {
        log.error("简道云=========getRequestURI:"+request.getRequestURI());
        log.error("简道云=========getRequestURL:"+request.getRequestURL());
        try {
            String jdy = request.getHeader("x-jdy-signature");
            StringBuilder json = new StringBuilder();
            String line;
            BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
            while ((line = reader.readLine()) != null) {
                json.append(line);
            }
//            String payload = IOUtils.toString(request.getInputStream(), "utf-8");
            String payload = json.toString();
            String uri = request.getRequestURI();
            Map<String, String> parameterMap = parseParameter(request.getQueryString());
            String nonce = parameterMap.get("nonce");
            String timestamp = parameterMap.get("timestamp");
            String signature = getSignature(nonce, payload, SECRET, timestamp);
            log.error("简道云=========nonce:"+nonce);
            log.error("简道云=========timestamp:"+timestamp);
            log.error("简道云=========payload:"+payload);
            log.error("简道云=========签名:"+jdy);
            log.error("简道云=========签名(正确):"+signature);
            if (!signature.equals(jdy)) {
                response.setStatus(401);
                response.getWriter().write("fail");
                response.getWriter().close();;
                return ;
            }
            response.setStatus(200);
            response.getWriter().write("success");
            response.getWriter().close();
        }catch (Exception e){
            e.printStackTrace();
            log.error("简道云=========异常:"+e.getMessage());
        }
    }
    @ApiOperation("简道云提交钥匙借还信息")
    @PostMapping("/submitKeyRecord")
    public ApiResponse<JkCabinetLog> submitKeyRecord (HttpServletRequest request, HttpServletResponse response) {
        JkCabinetLog log = new JkCabinetLog();
        log.setKeyId(1);
        log.setCreateDate(new Date());
        log.setMemberName("张三");
        return  ApiResponse.success(log);
    }
    public  static final String SECRET ="yKSKuO0LoFf06jWGrwwuGudK";
    private static String getSignature(String nonce, String payload, String secret, String timestamp) {
        return DigestUtils.sha1Hex(nonce + ":" + payload + ":" + secret + ":" + timestamp);
    }
    private static Map<String, String> parseParameter(String query) {
        Map<String, String> paramMap = new HashMap<String, String>();
        String[] params = query.split("&");
        for (String param : params) {
            String[] keyValue = param.split("=");
            paramMap.put(keyValue[0], keyValue[1]);
        }
        return paramMap;
    }
    public static void main(String[] args) {
        String url = "https://api.jiandaoyun.com/api/v1/automation/tenant/6909b792324dc197821895d1/hooks/6909d0fbdb93690b128a0d56b068192dc4a9c9722dbac428";
//        String url = "https://api.jiandaoyun.com/api/v1/automation/tenant/6909b792324dc197821895d1/hooks/6909d0fbdb93690af97e41d1b068192dc4a9705aca3321e2";
        JSONObject object = new JSONObject();
        object.put("create_date","20251104160000");
        object.put("start_date",System.currentTimeMillis() );
        object.put("end_date", System.currentTimeMillis() + 24*3600*1000);
        object.put("id","10000020251105");
        object.put("type",1);
        String result = HttpsUtil.postJson(url,JSONObject.toJSONString(object));
        System.out.println(result);
    }
}
server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
@@ -16,7 +16,7 @@
      discovery:
        server-addr: http://192.168.0.7:8848 #配置Nacos地址
#        namespace: dmvisit
        namespace: wuhu_visit_dev1
        namespace: wuhu_visit_dev
        username: nacos
        password: nacos
knife4j:
server/visits/dmvisit_admin/src/main/resources/bootstrap-pro.yml
@@ -23,7 +23,7 @@
#        data-id: com.doumee.meeting.admin
      discovery:
        server-addr: http://localhost:8848 #配置Nacos地址
        namespace: wuhuyancao
        namespace: maanshanyancao
        username: nacos
        password: nacos
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: test
    active: dev
  application:
    name: visitsAdmin
    # å®‰å…¨é…ç½®
server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
@@ -188,7 +188,7 @@
                    thisLevelList.addAll(rsp.getResult());
                }
            }else{
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),rsp.getMessage());
               throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),rsp.getMessage());
            }
        }
        return thisLevelList;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java
@@ -132,5 +132,7 @@
    void ddPushCompanyInfo(String eventType, JSONObject eventData) throws ApiException;
    String syncDDCompany()throws ApiException;
    String syncDDCompany()  ;
    String syncJdyCompany();
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -212,7 +212,8 @@
    void initPinyinTool();
    void syncDDUserInfo() throws ApiException;
    String syncJdyUserInfo();
    void syncDDUserInfo() ;
    void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java
@@ -48,8 +48,7 @@
        if(Objects.isNull(approveParam)
                ||Objects.isNull(approveParam.getType())
                ||Objects.isNull(approveParam.getMemberType())
                ||Objects.isNull(approveParam.getLevel())
        ){
                ||Objects.isNull(approveParam.getLevel())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(approveParam.getType().equals(Constants.ZERO)){
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -1,5 +1,7 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -23,6 +25,11 @@
import com.doumee.core.haikang.model.param.respose.OrgOrUserAddResponse;
import com.doumee.core.haikang.model.param.respose.OrgUpdateFailureResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.jiandaoyun.api.arch.DeptApiClient;
import com.doumee.core.jiandaoyun.constants.HttpConstant;
import com.doumee.core.jiandaoyun.model.dept.DeptEntityModel;
import com.doumee.core.wms.model.response.WmsBaseDataResponse;
import com.doumee.core.wms.model.response.WmsBaseResponse;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -808,10 +815,15 @@
                        .eq(Company::getErpId,jsonArray.getLong(i))
                );
                OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse = dingTalk.syncDepartmentInfo(jsonArray.getLong(i));
                Company param = new Company();
                param.setName(deptGetResponse.getName());
                param.setErpId(deptGetResponse.getDeptId().toString());
                param.setErpParentId(deptGetResponse.getParentId().toString());
                if(Objects.isNull(company)){
                    getAddCompanyModel(deptGetResponse,company);
                    param.setSortnum(deptGetResponse.getOrder().intValue());//默认最上面
                    getAddCompanyModel(param);
                }else{
                    getUpdateCompanyModel(deptGetResponse,company);
                    getUpdateCompanyModel(param,company);
                }
            }
        }
@@ -850,35 +862,106 @@
    }
    @Override
    public String syncDDCompany() throws ApiException {
        List<OapiV2DepartmentGetResponse.DeptGetResponse> list = dingTalk.syncAllDDDepartmentList();
        if(list !=null && list.size()>0){
            List<Company> addList = new ArrayList<>();
            List<Company> updateList = new ArrayList<>();
            List<Long> delIds = new ArrayList<>();//修改为使用钉钉id  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<>();//修改为使用钉钉id  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<>();//修改为使用钉钉id  erpId
                    List<Company>  allList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
                            .eq(Company::getIsdeleted,Constants.ZERO).eq(Company::getType,Constants.ONE));
                    dealCompanyChangeListJdy(list,addList,updateList,delIds,allList);
                    if(delIds.size()>0){
                        syncDelCompany(delIds);
                    }
                    return "同步数据:新增【"+addList.size()+"】条,更新【"+updateList.size()+"】条,删除【"+delIds.size()+"】条";
                }else{
                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步钉钉数据为空!");
                }
            }
        }catch (Exception e){
             e.printStackTrace();
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步数据异常!");
        }
        return null;
    }
    private void dealCompanyChangeListJdy(List<DeptEntityModel> list, List<Company> addList, List<Company> updateList, List<Long> delIds, List<Company> allList) {
        Date date = new Date();
        for(DeptEntityModel respone : list){
            Company param = new Company();
            param.setName(respone.getName());
            param.setErpId(respone.getDept_no().toString());
            param.setErpParentId(respone.getParent_no() !=null?respone.getParent_no() .toString():null);
            param.setSortnum(respone.getSeq()!=null?respone.getSeq().intValue():null);//默认最上面
            //根据erpid查询企业信息,判断是新增还是更新
            Company company = findCompanyByERPId(allList,respone.getDept_no().toString());
            if(company == null){
                //如果是新增
                //封装新增组织对象数据
                addList.add(getAddCompanyModel(param));
            }else{
                updateList.add(getUpdateCompanyModel(param,company));
            }
        }
        if(allList!=null && allList.size()>0){
            for(Company  c : allList){
                if(!isCompanyDeletedJdy(c,list)){
                    delIds.add(Long.valueOf(c.getErpId()));
                }
            }
        }
    }
    private void dealCompanyChangeList(List<OapiV2DepartmentGetResponse.DeptGetResponse> list, List<Company> addList, List<Company> updateList, List<Long> delIds, List<Company> allList) {
        Date date = new Date();
        for(OapiV2DepartmentGetResponse.DeptGetResponse respone : list){
            Company param = new Company();
            param.setName(respone.getName());
            param.setErpId(respone.getDeptId().toString());
            param.setErpParentId(respone.getParentId().toString());
            param.setSortnum(respone.getOrder().intValue());//默认最上面
            //根据erpid查询企业信息,判断是新增还是更新
            Company company = findCompanyByERPId(allList,respone.getDeptId().toString());
            if(company == null){
                //如果是新增
                //封装新增组织对象数据
                addList.add(getAddCompanyModel(respone,new Company()));
                addList.add(getAddCompanyModel(param));
            }else{
                updateList.add(getUpdateCompanyModel(respone,company));
                updateList.add(getUpdateCompanyModel(param,company));
            }
        }
        if(allList!=null && allList.size()>0){
@@ -893,21 +976,20 @@
    /**
     * æ•´ç†é’‰é’‰åŒæ­¥ æ–°å¢žç»„织对象
     * @param deptGetResponse
     * @return
     */
    private Company getAddCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse,Company company) {
        return  syncDDAddCompanyModel(deptGetResponse,company);
    private Company getAddCompanyModel(Company param ) {
        return  syncDDAddCompanyModel(param);
    }
    /**
     * æ•´ç†é’‰é’‰åŒæ­¥ æ–°å¢ž éœ€è¦ä¿®æ”¹çš„组织对象
     * @param deptGetResponse
     * @param param
     * @param company
     * @return
     */
    private Company getUpdateCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse, Company company) {
        return syncDDEditCompanyModel(deptGetResponse,company);
    private Company getUpdateCompanyModel(Company param, Company company) {
        return syncDDEditCompanyModel(param,company);
    }
@@ -936,24 +1018,35 @@
        }
        return false;
    }
    private boolean isCompanyDeletedJdy(Company c, List<DeptEntityModel> list) {
        for(DeptEntityModel  m : list){
            if(StringUtils.equals(c.getErpId(),m.getDept_no().toString())){
                return  true;
            }
        }
        return false;
    }
    /**
     * æ•´ç† é’‰é’‰åŒæ­¥çš„ ç»„织信息
     * @param deptGetResponse
     * @param company
     * @param param
     * @return
     */
    public Company syncDDAddCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse,Company company){
        company = new Company();
    public Company syncDDAddCompanyModel(Company param ){
        Company  company = new Company();
        company.setCreateDate(new Date());
        company.setIsdeleted(Constants.ZERO);
        company.setStatus(Constants.ZERO);
        company.setName(deptGetResponse.getName());
        company.setErpId(deptGetResponse.getDeptId().toString());
        company.setErpParentId(deptGetResponse.getParentId().toString());
        company.setSortnum(deptGetResponse.getOrder().intValue());//默认最上面
//        company.setName(deptGetResponse.getName());
//        company.setErpId(deptGetResponse.getDeptId().toString());
//        company.setErpParentId(deptGetResponse.getParentId().toString());
//        company.setSortnum(deptGetResponse.getOrder().intValue());//默认最上面
        company.setName(param.getName());
        company.setErpId(param.getErpId() );
        company.setErpParentId(param.getErpParentId());
        company.setSortnum(param.getSortnum());//默认最上面
        company.setType(Constants.ONE);
        String rootOrgId = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_ROOTORG_CODE).getCode();
@@ -1007,8 +1100,8 @@
    }
    public Company syncDDEditCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse,Company company){
        company.setErpParentId(deptGetResponse.getParentId().toString());
    public Company syncDDEditCompanyModel(Company param,Company company){
        company.setErpParentId(param.getErpParentId().toString());
        String idPath = "";
        if(StringUtils.isNotBlank(company.getErpParentId())){
            Company parent = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,company.getErpParentId())
@@ -1030,15 +1123,13 @@
            company.setParentId(parent.getId());
        }
        company.setName(deptGetResponse.getName());
        company.setErpId(deptGetResponse.getDeptId().toString());
        company.setErpParentId(deptGetResponse.getParentId().toString());
        company.setSortnum(deptGetResponse.getOrder().intValue());//默认最上面
        company.setName(param.getName());
        company.setErpId(param.getErpId());
        company.setSortnum(param.getSortnum());//默认最上面
        company.setEditDate(new Date());
        company.setHkCompanyPath(company.getCompanyNamePath());
        company.setHkStatus(Constants.ZERO);
        company.setStatus(Constants.ZERO);
        company.setSortnum(deptGetResponse.getOrder().intValue());
        company.setHkDate(company.getCreateDate());
        company.setEditDate(company.getCreateDate());
        company.setEditor(company.getCreator());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,7 +2,9 @@
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.PhoneUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -23,6 +25,10 @@
import com.doumee.core.haikang.model.param.respose.UserAddResponse;
import com.doumee.core.haikang.model.param.respose.UserDelResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.jiandaoyun.api.arch.DeptApiClient;
import com.doumee.core.jiandaoyun.constants.HttpConstant;
import com.doumee.core.jiandaoyun.model.dept.DeptEntityModel;
import com.doumee.core.jiandaoyun.model.user.UserEntityModel;
import com.doumee.dao.web.response.DDAuthorizeVO;
import com.doumee.service.business.third.TmsService;
import com.doumee.service.business.third.model.LoginUserInfo;
@@ -609,7 +615,7 @@
        Member member=new Member();
        member.setId(id);
        member.setIsdeleted(Constants.ONE);
        member.setEditor(loginUserInfo.getId());
        member.setEditor(loginUserInfo!=null?loginUserInfo.getId():null);
        member.setEditDate(date);
        member.setHkStatus(Constants.ZERO);
        member.setRemark("人员已删除,等待删除门禁权限");
@@ -2413,23 +2419,60 @@
     * åŒæ­¥é’‰é’‰å†…部员工信息
     */
    @Override
    public void syncDDUserInfo() throws ApiException {
        List<OapiV2UserGetResponse.UserGetResponse>  list = dingTalk.syncAllUserInfo();
        if(CollectionUtils.isEmpty(list)){
            return;
        }
        List<Member> addList = new ArrayList<>();
        List<Member> updateList = new ArrayList<>();
        List<String> delIds = new ArrayList<>();//修改为使用钉钉id  erpId
        List<Member>  allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getType,Constants.TWO));
        dealMemberChangeList(list,addList,updateList,delIds,allList);
    public void syncDDUserInfo(){
        try {
            List<OapiV2UserGetResponse.UserGetResponse>  list = dingTalk.syncAllUserInfo();
            if(CollectionUtils.isEmpty(list)){
                return;
            }
            List<Member> addList = new ArrayList<>();
            List<Member> updateList = new ArrayList<>();
            List<String> delIds = new ArrayList<>();//修改为使用钉钉id  erpId
            List<Member>  allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .eq(Member::getIsdeleted,Constants.ZERO)
                    .eq(Member::getType,Constants.TWO));
            dealMemberChangeList(list,addList,updateList,delIds,allList);
        if(delIds.size()>0){
            syncDelMember(delIds);
            if(delIds.size()>0){
                syncDelMember(delIds);
            }
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"同步钉钉人员信息异常!");
        }
    }
    @Override
    public String syncJdyUserInfo() {
        DeptApiClient deptApiClient = new DeptApiClient(HttpConstant.API_KEY, HttpConstant.HOST);
        try {
            Map<String, Object> result =  deptApiClient.deptMemberList(1,true,deptApiClient.getDefaultVersion());
            if(result!=null && result.get("users")!=null ){
                TypeReference<List<UserEntityModel>> typeReference =     new TypeReference<List<UserEntityModel>>(){};
                Object obj = result.get("users");
                List<UserEntityModel> list =  com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(obj), typeReference.getType());
                if(list !=null && list.size()>0){
                     List<Member> addList = new ArrayList<>();
                    List<Member> updateList = new ArrayList<>();
                    List<String> delIds = new ArrayList<>();//修改为使用钉钉id  erpId
                    List<Member>  allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                            .eq(Member::getIsdeleted,Constants.ZERO)
                            .eq(Member::getType,Constants.TWO));
                    dealMemberChangeListJdy(list,addList,updateList,delIds,allList);
                    if(delIds.size()>0){
                        syncDelMember(delIds);
                    }
                    return "同步数据:新增【"+addList.size()+"】条,更新【"+updateList.size()+"】条,删除【"+delIds.size()+"】条";
                }else{
                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步钉钉数据为空!");
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步数据异常!");
        }
        return null;
    }
    private void syncDelMember(List<String> delIds) {
@@ -2465,25 +2508,65 @@
            }
        }
    }
    private void dealMemberChangeListJdy(List<UserEntityModel> list, List<Member> addList, List<Member> updateList, List<String> delIds, List<Member> allList) {
        Date date = new Date();
        for(UserEntityModel respone : list){
            //根据erpid查询企业信息,判断是新增还是更新
            Member param = new Member();
            param.setErpId(respone.getUsername());
            param.setName(respone.getName());
            param.setDdId(respone.getIntegrate_id());
            param.setCompanyIdList(respone.getDepartments());
            Member member = findMemberByERPId(allList,respone.getUsername());
            if(member == null){
                //如果是新增
                //封装新增组织对象数据
                addList.add(syncDDAddMemberModel(param,new Member()));
            }else{
                updateList.add(syncDDEditMemberModel(param,member));
            }
        }
        if(allList!=null && allList.size()>0){
            for(Member m : allList){
                if(!isMemberDeletedJdy(m,list)){
                    delIds.add(m.getErpId());
                }
            }
        }
    }
    private Member getAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
        return  syncDDAddMemberModel(deptGetResponse,member);
        Member param = new Member();
        param.setErpId(deptGetResponse.getUnionid());
        param.setPhone(deptGetResponse.getMobile());
        param.setName(deptGetResponse.getName());
        param.setCode(deptGetResponse.getJobNumber());
        param.setDdId(deptGetResponse.getUserid());
        param.setCompanyIdList(deptGetResponse.getDeptIdList());
        return  syncDDAddMemberModel(param,member);
    }
    private Member getUpdateMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
        return  syncDDEditMemberModel(deptGetResponse,member);
        Member param = new Member();
        param.setErpId(deptGetResponse.getUnionid());
        param.setPhone(deptGetResponse.getMobile());
        param.setName(deptGetResponse.getName());
        param.setCode(deptGetResponse.getJobNumber());
        param.setDdId(deptGetResponse.getUserid());
        param.setCompanyIdList(deptGetResponse.getDeptIdList());
        return  syncDDEditMemberModel(param,member);
    }
    private Member syncDDAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
    private Member syncDDAddMemberModel(Member deptGetResponse,Member member) {
        member.setCreateDate(new Date());
        member.setErpId(deptGetResponse.getUnionid());
        member.setPhone(deptGetResponse.getMobile());
        member.setErpId(deptGetResponse.getErpId());
        member.setPhone(deptGetResponse.getPhone());
        member.setName(deptGetResponse.getName());
        member.setCode(deptGetResponse.getJobNumber());
        member.setDdId(deptGetResponse.getUserid());
        isMemberParamValidDetail(member,deptGetResponse.getDeptIdList());
        member.setCode(deptGetResponse.getCode());
        member.setDdId(deptGetResponse.getDdId());
        isMemberParamValidDetail(member,deptGetResponse.getCompanyIdList());
        //获取出生日期
        //脱敏操作
        Member insert = initAddMemberModel(member,null);
@@ -2518,7 +2601,7 @@
        }
        member.setCompanyType(Constants.ONE);
        SystemUser queryUserDto = new SystemUser();
        queryUserDto.setUsername(member.getPhone());
        queryUserDto.setUsername(StringUtils.defaultString(member.getPhone(),member.getErpId()));
        queryUserDto.setDeleted(Boolean.FALSE);
        SystemUser user = systemUserMapper.selectOne(new QueryWrapper<>(queryUserDto).last("limit 1"));
        if (user != null) {
@@ -2536,13 +2619,13 @@
        }
    }
    
    public Member syncDDEditMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member updateMember) {
    public Member syncDDEditMemberModel(Member deptGetResponse1,Member updateMember) {
        updateMember.setEditDate(new Date());
        updateMember.setErpId(deptGetResponse.getUnionid());
        updateMember.setPhone(deptGetResponse.getMobile());
        updateMember.setName(deptGetResponse.getName());
        updateMember.setCode(deptGetResponse.getJobNumber());
        updateMember.setDdId(deptGetResponse.getUserid());
//        updateMember.setErpId(deptGetResponse.getErpId());
//        updateMember.setPhone(deptGetResponse.getPhone());
//        updateMember.setName(deptGetResponse.getName());
//        updateMember.setCode(deptGetResponse.getCode());
//        updateMember.setDdId(deptGetResponse.getDdId());
        updateMember.setHkId(null);
        updateMember.setAuthStatus(Constants.ZERO);
        Boolean hkFlag = dealHkUserForUpdateBiz(updateMember);
@@ -2604,7 +2687,14 @@
        }
        return false;
    }
    private boolean isMemberDeletedJdy(Member member, List<UserEntityModel> list) {
        for(UserEntityModel m : list){
            if(StringUtils.equals(m.getUsername(),member.getErpId())){
                return  true;
            }
        }
        return false;
    }
    @Override
    public void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException {
server/visits/dmvisit_service/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    driver-class-name: com.mysql.cj.jdbc.Driver
server/visits/dmvisit_service/src/main/resources/application-pro.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://localhost:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://localhost:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Whyc@2025
    driver-class-name: com.mysql.cj.jdbc.Driver
server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck
ÎļþÒÑɾ³ý
server/visits/dmvisit_service/src/main/resources/application-test.yml
@@ -1,7 +1,7 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://192.168.0.211:3306/wuhuyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://192.168.0.211:3306/maanshanyancao?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    driver-class-name: com.mysql.cj.jdbc.Driver
server/visits/dmvisit_service/src/main/resources/application-testHS.yml.bck
ÎļþÒÑɾ³ý
server/visits/openapi/src/main/resources/application.yml
@@ -9,7 +9,7 @@
  #  application:
  #    name: doumeevisit
  profiles:
    active: proHS
    active: test
  # JSON返回配置
  jackson: