docs: 认证授权服务部署文档
diff --git a/poa-api-docs/api-docs/admin-center-poa.v1.yaml b/poa-api-docs/api-docs/admin-center-poa.v1.yaml
new file mode 100644
index 0000000..6627c51
--- /dev/null
+++ b/poa-api-docs/api-docs/admin-center-poa.v1.yaml
@@ -0,0 +1,202 @@
+# admin-center-poa.v1.yaml
+#
+# 1. 创建服务
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services' -H 'Content-Type: application/json' -d '{"id": "admincenter", "origin": "http://admin-center-poa-svc.admin-center.svc.cluster.local:8080", "name": "管理中心", "description": "管理中心"}'
+#
+# 2. 创建版本
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/admincenter/apiVersions/v1'
+#
+# 3. 上传OAS Yaml
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/admincenter/apiVersions/v1/apiSpecs' -H 'Content-Type: application/yaml' --data-binary @admin-center-poa.v1.yaml
+#
+# 4. 发布版本
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/admincenter/apiVersions/v1/publish'
+#
+openapi: 3.0.2
+info:
+  title: Admin Center Platform Open APIs
+  version: v1
+  description: '管理中心 - 平台开放接口'
+servers:
+  - url: '${POA_SERVER_URL}/apis/admincenter/v1'
+    description: '正式环境'
+tags:
+  - name: Menu
+    description: '管理中心菜单'
+paths:
+
+  '/menus/accountName/{accountName}/menus':
+    get:
+      summary: 获取用户帐号可访问的菜单
+      description: 获取用户帐号可访问的菜单
+      operationId: loadAccountMenus
+      tags:
+        - Menu
+      security:
+        - oauth2:
+          - "admincenter:v1:readMenu"
+      parameters:
+        - name: accountName
+          in: path
+          required: true
+          description: 用户名
+          schema:
+            type: string
+        # - name: applicationId
+        #   in: query
+        #   required: true
+        #   description: 应用标识
+        #   schema:
+        #     type: string
+      responses:
+        '200':
+          description: 菜单列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GrantedMenusResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+components:
+
+  # Security Schemes
+  
+  securitySchemes:
+    oauth2:
+      type: oauth2
+      flows:
+        clientCredentials:
+          tokenUrl: ${POA_SERVER_URL}/oauth2/token
+          scopes:
+            "admincenter:v1:readMenu": "读取后台菜单"
+
+  responses:
+    'ErrorResponse400':
+      description: unexpected error
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorResponse'
+
+    DefaultErrorResponse:
+      description: unexpected error
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorResponse'
+
+  schemas:
+  
+    # Error
+    
+    ErrorResponse:
+      title: '异常响应'
+      required:
+        - code
+        - message
+      properties:
+        code:
+          title: 异常代码
+          type: integer
+          format: int32
+          default: -1
+        message:
+          title: 异常信息
+          type: string
+          default: "未知错误"
+
+    # DTO
+
+    GrantedMenu:
+      title: DTO - 菜单数据
+      type: object
+      properties:
+        id:
+          title: ID
+          type: string
+        code:
+          title: 代码
+          type: string
+        name:
+          title: 名称
+          type: string
+        memo:
+          title: 备注
+          type: string
+        status:
+          title: 状态(1 启用,0 停用)
+          type: string
+        icon:
+          title: 菜单图标
+          type: string
+        origin:
+          title: 来源系统
+          type: string
+        url:
+          title: URL地址
+          type: string
+        applicationId:
+          title: 系统ID
+          type: string
+        parentId:
+          title: 父级ID
+          type: string
+        order:
+          title: 排序
+          type: string
+
+
+    # Request VO
+
+
+    # Response Data
+
+    GrantedMenusResponseData:
+      title: 响应数据 - 菜单列表
+      type: object
+      properties:
+        menus:
+          title: 菜单列表
+          type: array
+          items:
+            $ref: '#/components/schemas/GrantedMenu'
+
+
+    # Response VO
+
+    ApiDataResponse:
+      title: 响应
+      properties:
+        code:
+          title: 响应代码
+          type: integer
+          format: int32
+          default: 0
+        message:
+          title: 响应信息
+          type: string
+        data:
+          title: 响应数据
+          type: object
+
+    DefaultApiDataResponse:
+      allOf:
+        - $ref: '#/components/schemas/ApiDataResponse'
+        - type: object
+          title: 响应
+          properties:
+            data:
+              title: 响应数据
+              type: object
+
+    GrantedMenusResponse:
+      allOf:
+        - $ref: '#/components/schemas/DefaultApiDataResponse'
+        - type: object
+          title: 响应
+          properties:
+            data:
+              allOf:
+                - $ref: '#/components/schemas/GrantedMenusResponseData'
diff --git a/poa-api-docs/api-docs/communicate-center-poa.v1.yaml b/poa-api-docs/api-docs/communicate-center-poa.v1.yaml
new file mode 100644
index 0000000..1b27686
--- /dev/null
+++ b/poa-api-docs/api-docs/communicate-center-poa.v1.yaml
@@ -0,0 +1,304 @@
+# communicate-center-poa.v1.yaml
+#
+# 1. 创建服务
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services' -H 'Content-Type: application/json' -d '{"id": "communicate", "origin": "http://communicate-center-poa-svc.communicate-center.svc.cluster.local:8080", "name": "通信服务", "description": "通信服务"}'
+#
+# 2. 创建版本
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/communicate/apiVersions/v1'
+#
+# 3. 上传OAS Yaml
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/communicate/apiVersions/v1/apiSpecs' -H 'Content-Type: application/yaml' --data-binary @communicate-center-poa.v1.yaml
+#
+# 4. 发布版本
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/communicate/apiVersions/v1/publish'
+#
+openapi: 3.0.2
+info:
+  title: Communicate Center Platform Open APIs
+  version: v1
+  description: '通信服务 - 平台开放接口'
+servers:
+  - url: '${POA_SERVER_URL}/apis/communicate/v1'
+    description: '正式环境'
+tags:
+  - name: Communication
+    description: '通信'
+paths:
+
+  '/communications/{communicationLogId}/sendStatus':
+    get:
+      summary: 检查发送状态
+      description: 检查发送状态
+      operationId: checkSendStatus
+      tags:
+        - Communication
+      security:
+        - oauth2:
+          - "communicate:v1:communicationCheck"
+      parameters:
+        - name: communicationLogId
+          in: path
+          required: true
+          description: 通信记录ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 发送状态
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CommunicationSendResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/communications/sendMail':
+    post:
+      summary: 发送邮件
+      description: 发送邮件
+      operationId: sendMail
+      tags:
+        - Communication
+      security:
+        - oauth2:
+          - "communicate:v1:communicationSend"
+      requestBody:
+        description: 发送请求数据
+        required: true
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CommunicationSendRequest'
+      responses:
+        '200':
+          description: 发送状态
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CommunicationSendResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/communications/sendSms':
+    post:
+      summary: 发送短信
+      description: 发送短信
+      operationId: sendSms
+      tags:
+        - Communication
+      security:
+        - oauth2:
+          - "communicate:v1:communicationSend"
+      requestBody:
+        description: 发送请求数据
+        required: true
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CommunicationSendRequest'
+      responses:
+        '200':
+          description: 发送状态
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CommunicationSendResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+
+
+
+components:
+
+  # Security Schemes
+  
+  securitySchemes:
+    oauth2:
+      type: oauth2
+      flows:
+        clientCredentials:
+          tokenUrl: ${POA_SERVER_URL}/oauth2/token
+          scopes:
+            "communicate:v1:communicationCheck": "检查"
+            "communicate:v1:communicationSend": "发送"
+
+
+  responses:
+    'ErrorResponse400':
+      description: unexpected error
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ApiErrorResponse'
+
+    DefaultErrorResponse:
+      description: unexpected error
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ApiErrorResponse'
+
+  schemas:
+  
+    # Error
+    
+    ApiErrorResponse:
+      title: '异常响应'
+      required:
+        - code
+        - message
+      properties:
+        code:
+          title: 异常代码
+          type: integer
+          format: int32
+          default: -1
+        message:
+          title: 异常信息
+          type: string
+          default: "未知错误"
+
+    # Entity
+    
+    BaseEntity:
+      title: 实体 - 基类
+      type: object
+      properties:
+        id:
+          title: ID
+          type: string
+        #companyId:
+        #  title: 'Company ID, 固定 1'
+        #  type: string
+        #  default: '1'
+        #deleted:
+        #  title: 是否删除
+        #  type: boolean
+        #  default: false
+        #addAccount:
+        #  title: 创建人
+        #  type: string
+        #addTime:
+        #  title: 创建时间
+        #  type: string
+        #  format: date-time
+        #editAccount:
+        #  title: 修改人
+        #  type: string
+        #editTime:
+        #  title: 修改时间
+        #  type: string
+        #  format: date-time
+        #deleteAccount:
+        #  title: 删除人
+        #  type: string
+        #deleteTime:
+        #  title: 删除时间
+        #  type: string
+        #  format: date-time
+
+
+    # DTO
+    Communication: 
+      title: DTO - 通信数据
+      type: object
+      properties:
+        from:
+          title: 来源
+          type: string
+        to:
+          title: 接收帐号
+          type: string
+        payload:
+          title: 数据载荷
+          allOf:
+            - $ref: '#/components/schemas/CommunicationPayload'
+
+    CommunicationPayload:
+      title: DTO - 通信数据载荷
+      type: object
+      properties:
+        subject:
+          title: 主题
+          type: string
+        template:
+          title: 模板
+          type: string
+        data:
+          title: 数据(Map<String, String>)
+          type: object
+          additionalProperties:
+            type: string
+
+          # type: array
+          # items: 
+          #   title: 数据项
+          #   type: object
+          #   properties:
+          #     key:
+          #       title: 键
+          #       type: string
+          #     value: 
+          #       title: 值
+          #       type: string
+
+
+    # Request VO
+    CommunicationSendRequest:
+      title: 请求数据 - 发送请求
+      allOf:
+        - $ref: '#/components/schemas/Communication'
+
+
+    # Response Data
+    CommunicationSendResponseData:
+      title: 响应数据 - 发送响应
+      type: object
+      properties:
+        sendStatus:
+          title: 发送状态
+          type: string
+        sendResult:
+          title: 发送结果
+          type: string
+
+
+    # Response VO
+
+    ApiDataResponse:
+      title: 响应
+      properties:
+        code:
+          title: 响应代码
+          type: integer
+          format: int32
+          default: 0
+        message:
+          title: 响应信息
+          type: string
+        data:
+          title: 响应数据
+          type: object
+
+    DefaultApiDataResponse:
+      allOf:
+        - $ref: '#/components/schemas/ApiDataResponse'
+        - type: object
+          title: 响应
+          properties:
+            data:
+              title: 响应数据
+              type: object
+
+    CommunicationSendResponse:
+      allOf:
+        - $ref: '#/components/schemas/DefaultApiDataResponse'
+        - type: object
+          title: 响应
+          properties:
+            data:
+              allOf:
+                - $ref: '#/components/schemas/CommunicationSendResponseData'
diff --git a/poa-api-docs/api-docs/user-authorization-service-poa.v1.yaml b/poa-api-docs/api-docs/user-authorization-service-poa.v1.yaml
new file mode 100644
index 0000000..7d2b40f
--- /dev/null
+++ b/poa-api-docs/api-docs/user-authorization-service-poa.v1.yaml
@@ -0,0 +1,459 @@
+# user-authorization-service-poa.v1.yaml
+#
+# 1. 创建服务
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services' -H 'Content-Type: application/json' -d '{"id": "authz", "origin": "http://user-authorization-poa-svc.user-authorization-service.svc.cluster.local:8080", "name": "授权服务", "description": "授权服务"}'
+#
+# 2. 创建版本
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/authz/apiVersions/v1'
+#
+# 3. 上传OAS Yaml
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/authz/apiVersions/v1/apiSpecs' -H 'Content-Type: application/yaml' --data-binary @user-authorization-service-poa.v1.yaml
+#
+# 4. 发布版本
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/authz/apiVersions/v1/publish'
+#
+openapi: 3.0.2
+info:
+  title: User Authorization Service Platform Open APIs
+  version: v1
+  description: '用户授权服务 - 平台开放接口'
+servers:
+  - url: 'https://poa.dev.supwisdom.com/apis/authz/v1'
+    description: '演示环境'
+tags:
+  - name: Role
+    description: '角色'
+paths:
+
+  '/application/{applicationId}/roles':
+    get:
+      summary: 获取应用下的角色列表
+      description: 获取应用下的角色列表
+      operationId: loadApplicationRoles
+      tags:
+        - Role
+      security:
+        - oauth2:
+          - "authz:v1:readRole"
+      parameters:
+        - name: applicationId
+          in: path
+          required: true
+          description: 应用标识
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 角色列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApplicationRolesResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/application/{applicationId}/role/{rolecode}/accounts':
+    get:
+      summary: 获取应用下的一个角色的用户帐号
+      description: 获取应用下的一个角色的用户帐号
+      operationId: loadApplicationRoleAccounts
+      tags:
+        - Role
+      security:
+        - oauth2:
+          - "authz:v1:readRole"
+      parameters:
+        - name: applicationId
+          in: path
+          required: true
+          description: 应用标识
+          schema:
+            type: string
+        - name: rolecode
+          in: path
+          required: true
+          description: 角色代码
+          schema:
+            type: string
+        - name: loadAll
+          in: query
+          required: false
+          description: 分页-是否返回所有(当为 true 时,不分页,参数 pageIndex、pageSize 无效)
+          schema:
+            type: boolean
+            default: false
+        - name: pageIndex
+          in: query
+          required: false
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: false
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 1000
+      responses:
+        '200':
+          description: 用户的帐号ID
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApplicationRoleAccountsResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/application/{applicationId}/account/{username}/roles':
+    get:
+      summary: 获取用户帐号在某一应用下所拥有的角色
+      description: 获取用户帐号在某一应用下所拥有的角色
+      operationId: loadAccountApplicationRoles
+      tags:
+        - Role
+      security:
+        - oauth2:
+          - "authz:v1:readRole"
+      parameters:
+        - name: applicationId
+          in: path
+          required: true
+          description: 应用标识
+          schema:
+            type: string
+        - name: username
+          in: path
+          required: true
+          description: 用户名
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 角色列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/AccountApplicationRolesResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/application/{applicationId}/roles/accounts':
+    post:
+      summary: 获取应用下的多个角色的用户帐号
+      description: 获取应用下的多个角色的用户帐号
+      operationId: loadAccountsByApplicationRole
+      tags:
+        - Role
+      security:
+        - oauth2:
+          - "authz:v1:readRole"
+      parameters:
+        - name: applicationId
+          in: path
+          required: true
+          description: 应用标识
+          schema:
+            type: string
+        - name: loadAll
+          in: query
+          required: false
+          description: 分页-是否返回所有(当为 true 时,不分页,参数 pageIndex、pageSize 无效)
+          schema:
+            type: boolean
+            default: false
+        - name: pageIndex
+          in: query
+          required: false
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: false
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 1000
+      requestBody:
+        description: 角色IDs
+        required: true
+        content:
+          application/json:
+            schema:
+              type: array
+              items: 
+                title: 角色ID
+                type: string
+      responses:
+        '200':
+          description: 用户的帐号ID
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApplicationRolesAccountsResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+components:
+
+  # Security Schemes
+  
+  securitySchemes:
+    oauth2:
+      type: oauth2
+      flows:
+        clientCredentials:
+          tokenUrl: https://poa.dev.supwisdom.com/oauth2/token
+          scopes:
+            "authz:v1:readRole": "读取角色"
+
+  responses:
+    'ErrorResponse400':
+      description: unexpected error
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorResponse'
+
+    DefaultErrorResponse:
+      description: unexpected error
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorResponse'
+
+  schemas:
+  
+    # Error
+    
+    ErrorResponse:
+      title: '异常响应'
+      required:
+        - code
+        - message
+      properties:
+        code:
+          title: 异常代码
+          type: integer
+          format: int32
+          default: -1
+        message:
+          title: 异常信息
+          type: string
+          default: "未知错误"
+
+    # Entity
+    
+    BaseEntity:
+      title: 实体 - 基类
+      type: object
+      properties:
+        id:
+          title: ID
+          type: string
+        #companyId:
+        #  title: 'Company ID, 固定 1'
+        #  type: string
+        #  default: '1'
+        #deleted:
+        #  title: 是否删除
+        #  type: boolean
+        #  default: false
+        #addAccount:
+        #  title: 创建人
+        #  type: string
+        #addTime:
+        #  title: 创建时间
+        #  type: string
+        #  format: date-time
+        #editAccount:
+        #  title: 修改人
+        #  type: string
+        #editTime:
+        #  title: 修改时间
+        #  type: string
+        #  format: date-time
+        #deleteAccount:
+        #  title: 删除人
+        #  type: string
+        #deleteTime:
+        #  title: 删除时间
+        #  type: string
+        #  format: date-time
+
+    User:
+      title: 实体 - 用户
+      allOf:
+        - $ref: '#/components/schemas/BaseEntity'
+        - type: object
+          title: 实体属性
+          properties:
+            username:
+              title: 代码
+              type: string
+            name:
+              title: 姓名
+              type: string
+
+    Role:
+      title: 实体 - 角色
+      allOf:
+        - $ref: '#/components/schemas/BaseEntity'
+        - type: object
+          title: 实体属性
+          properties:
+            code:
+              title: 代码
+              type: string
+            name:
+              title: 名称
+              type: string
+            description:
+              title: 描述
+              type: string
+            enabled:
+              title: 是否可用
+              type: boolean
+            externalId:
+              title: 扩展ID
+              type: string
+
+    # Request VO
+
+
+    # Response Data
+
+
+    # Response VO
+
+    AbstractApiResponse:
+      title: 响应
+      properties:
+        acknowleged:
+          title: 响应结果(废弃,请使用code)
+          type: boolean
+          default: true
+        code:
+          title: 响应代码
+          type: integer
+          format: int32
+          default: 0
+        message:
+          title: 响应信息
+          type: string
+    DefaultApiResponse:
+      allOf:
+        - $ref: '#/components/schemas/AbstractApiResponse'
+        - type: object
+          title: 响应数据
+          properties:
+            data:
+              title: 响应数据
+              type: object
+
+
+
+    ApplicationRolesResponse:
+      allOf:
+        - $ref: '#/components/schemas/DefaultApiResponse'
+        - type: object
+          title: 响应数据
+          properties:
+            data:
+              allOf:
+              - type: object
+                title: 数据
+                properties:
+                  applicationId:
+                    title: 应用标识
+                    type: string
+                  roles:
+                    title: 角色数据
+                    type: array
+                    items:
+                      $ref: '#/components/schemas/Role'
+
+
+    ApplicationRoleAccountsResponse:
+      allOf:
+        - $ref: '#/components/schemas/DefaultApiResponse'
+        - type: object
+          title: 响应数据
+          properties:
+            data:
+              allOf:
+              - type: object
+                title: 数据
+                properties:
+                  applicationId:
+                    title: 应用标识
+                    type: string
+                  rolecode:
+                    title: 角色代码
+                    type: string
+                  accounts:
+                    title: 用户帐号数据
+                    type: array
+                    items:
+                      title: 用户的帐号ID
+                      type: string
+
+
+    AccountApplicationRolesResponse:
+      allOf:
+        - $ref: '#/components/schemas/DefaultApiResponse'
+        - type: object
+          title: 响应数据
+          properties:
+            data:
+              allOf:
+              - type: object
+                title: 数据
+                properties:
+                  username:
+                    title: 用户名
+                    type: string
+                  applicationId:
+                    title: 应用标识
+                    type: string
+                  roles:
+                    title: 角色数据
+                    type: array
+                    items:
+                      $ref: '#/components/schemas/Role'
+
+
+    ApplicationRolesAccountsResponse:
+      allOf:
+        - $ref: '#/components/schemas/DefaultApiResponse'
+        - type: object
+          title: 响应数据
+          properties:
+            data:
+              allOf:
+              - type: object
+                title: 数据
+                properties:
+                  applicationId:
+                    title: 应用标识
+                    type: string
+                  roleIds:
+                    title: 角色IDs
+                    type: array
+                    items:
+                      title: 角色ID
+                      type: string
+                  accounts:
+                    title: 用户帐号数据
+                    type: array
+                    items:
+                      title: 用户的帐号ID
+                      type: string
diff --git a/poa-api-docs/api-docs/user-data-service-poa.v1.yaml b/poa-api-docs/api-docs/user-data-service-poa.v1.yaml
new file mode 100644
index 0000000..c59e26d
--- /dev/null
+++ b/poa-api-docs/api-docs/user-data-service-poa.v1.yaml
@@ -0,0 +1,3013 @@
+# user-data-service-poa.v1.yaml
+#
+# 1. 创建服务
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services' -H 'Content-Type: application/json' -d '{"id": "user", "origin": "http://user-data-service-poa-svc.user-data-service.svc.cluster.local:8080", "name": "用户服务", "description": "用户服务"}'
+#
+# 2. 创建版本
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/user/apiVersions/v1'
+#
+# 3. 上传OAS Yaml
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/user/apiVersions/v1/apiSpecs' -H 'Content-Type: application/yaml' --data-binary @user-data-service-poa.v1.yaml
+#
+# 4. 发布版本
+# curl -i -s -X POST 'https://poa-sa.dev.supwisdom.com/v1/services/user/apiVersions/v1/publish'
+#
+openapi: 3.0.2
+info:
+  title: User Data Service Platform Open APIs
+  version: v1
+  description: '用户服务 - 平台开放接口'
+servers:
+  - url: '${POA_SERVER_URL}/apis/user/v1'
+    description: '正式环境'
+tags:
+  - name: User
+    description: '用户'
+  - name: UserBatchQuery
+    description: '用户批量查询'
+  - name: Organization
+    description: '组织机构'
+  - name: Group
+    description: '用户组'
+  - name: Label
+    description: '用户标签'
+  - name: PostAdmin
+    description: '用户组(岗位)管理'
+
+paths:
+
+  '/users':
+    get:
+      summary: 获取用户列表
+      operationId: pageUsers
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUser"
+      parameters:
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              keyword:
+                title: 查询条件 - 关键字(模糊,帐号、姓名等)
+                type: string
+              accountName:
+                title: 查询条件 - 账户名(模糊)
+                type: string
+              name:
+                title: 查询条件 - 姓名(模糊)
+                type: string
+              ids:
+                title: 查询条件 - ids(精确匹配,多个用逗号隔开)
+                type: string
+              accountNames:
+                title: 查询条件 - 账户名s(精确匹配,多个用逗号隔开)
+                type: string
+      responses:
+        '200':
+          description: 用户分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/{accountId}':
+    get:
+      summary: 根据帐号ID获取用户信息
+      operationId: loadUserInfoByAccountId
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUser"
+      parameters:
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/accountName/{accountName}':
+    get:
+      summary: 根据帐号获取用户信息
+      operationId: loadUserInfoByAccountName
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUser"
+      parameters:
+        - name: accountName
+          in: path
+          required: true
+          description: 用户名
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/users/phoneNumber/{phoneNumber}':
+    get:
+      summary: 根据手机号(安全手机)获取用户列表
+      operationId: listUsersByPhoneNumber
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUser"
+      parameters:
+        - name: phoneNumber
+          in: path
+          required: true
+          description: 手机号(安全手机)
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/email/{email}':
+    get:
+      summary: 根据邮件地址(安全邮箱)获取用户列表
+      operationId: listUsersByEmail
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUser"
+      parameters:
+        - name: email
+          in: path
+          required: true
+          description: 邮件地址(安全邮箱)
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/{accountId}/portrait':
+    get:
+      summary: 根据帐号ID获取用户头像
+      operationId: loadUserPortraitByAccountId
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUser"
+      parameters:
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户头像
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserPortraitLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/accountName/{accountName}/portrait':
+    get:
+      summary: 根据帐号获取用户头像
+      operationId: loadUserPortraitByAccountName
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUser"
+      parameters:
+        - name: accountName
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户头像
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserPortraitLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/{accountId}/safety':
+    get:
+      summary: 根据帐号ID获取用户的安全信息
+      operationId: loadUserSafetyByAccountId
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUserSecret"
+      parameters:
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 安全信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserSafetyLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/accountName/{accountName}/safety':
+    get:
+      summary: 根据帐号获取用户的安全信息
+      operationId: loadUserSafetyByAccountName
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUserSecret"
+      parameters:
+        - name: accountName
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 安全信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserSafetyLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/{accountId}/federation/{federatedType}':
+    get:
+      summary: 根据帐号ID获取用户的联合登录信息
+      operationId: loadUserFederationByAccountId
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUserSecret"
+      parameters:
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号ID
+          schema:
+            type: string
+        - name: federatedType
+          in: path
+          required: true
+          description: 联合登录类型(qq, openweixin, workweixin, alipay, dingtalk)
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 联合登录信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserFederationLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/accountName/{accountName}/federation/{federatedType}':
+    get:
+      summary: 根据帐号获取用户的联合登录信息
+      operationId: loadUserFederationByAccountName
+      tags:
+        - User
+      security:
+        - oauth2:
+          - "user:v1:readUserSecret"
+      parameters:
+        - name: accountName
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+        - name: federatedType
+          in: path
+          required: true
+          description: 联合登录类型(qq, openweixin, workweixin, alipay, dingtalk)
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 联合登录信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserFederationLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/users/batchQuery':
+    post:
+      summary: 批量获取用户列表
+      operationId: batchQueryUsers
+      description: |-
+        查询条件accountIds, accountNames, phoneNumbers, emails之间的是或关系。
+        如果你同时制定了accountIds和phoneNumbers,那么会分别按照这两个查询条件
+        查询出用户列表,然后合并返回给你。
+        同时,这些查询条件的数组长度最多1000个
+      tags:
+        - UserBatchQuery
+      security:
+        - oauth2:
+          - "user:v1:readUser"
+      requestBody:
+        description: 查询条件
+        required: true
+        content:
+          'application/json':
+            schema:
+              type: object
+              properties:
+                accountIds:
+                  title: 账号Id(复数)
+                  type: array
+                  items:
+                    title: 账号Id
+                    type: string
+                  maxItems: 1000
+                accountNames:
+                  title: 账户名(复数)
+                  type: array
+                  items:
+                    title: 账户名
+                    type: string
+                  maxItems: 1000
+                securePhoneNumbers:
+                  title: 安全手机(复数)
+                  type: array
+                  items:
+                    title: 安全手机
+                    type: string
+                  maxItems: 1000
+                secureEmails:
+                  title: 安全邮箱(复数)
+                  type: array
+                  items:
+                    title: 安全邮箱
+                    type: string
+                  maxItems: 1000
+      responses:
+        '200':
+          description: 用户列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/safety/phoneNumber/batchQuery':
+    post:
+      summary: 批量查询用户的安全手机
+      operationId: batchQueryUserSafetyPhoneNumber
+      description: |-
+        查询条件accountIds, accountNames之间的是或关系。
+        如果你同时制定了accountIds和accountNames,那么会分别按照这两个查询条件
+        查询出用户列表,然后合并返回给你。
+        同时,这些查询条件的数组长度最多1000个
+      tags:
+        - UserBatchQuery
+      security:
+        - oauth2:
+          - "user:v1:readUserSecret"
+      requestBody:
+        description: 查询条件
+        required: true
+        content:
+          'application/json':
+            schema:
+              type: object
+              properties:
+                accountIds:
+                  title: 账号Id(复数)
+                  type: array
+                  items:
+                    title: 账号Id
+                    type: string
+                  maxItems: 1000
+                accountNames:
+                  title: 账户名(复数)
+                  type: array
+                  items:
+                    title: 账户名
+                    type: string
+                  maxItems: 1000
+      responses:
+        '200':
+          description: 用户安全信息列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserSafetyPhoneNumberList'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/safety/email/batchQuery':
+    post:
+      summary: 批量查询用户的安全邮箱
+      operationId: batchQueryUserSafetyEmail
+      description: |-
+        查询条件accountIds, accountNames之间的是或关系。
+        如果你同时制定了accountIds和accountNames,那么会分别按照这两个查询条件
+        查询出用户列表,然后合并返回给你。
+        同时,这些查询条件的数组长度最多1000个
+      tags:
+        - UserBatchQuery
+      security:
+        - oauth2:
+          - "user:v1:readUserSecret"
+      requestBody:
+        description: 查询条件
+        required: true
+        content:
+          'application/json':
+            schema:
+              type: object
+              properties:
+                accountIds:
+                  title: 账号Id(复数)
+                  type: array
+                  items:
+                    title: 账号Id
+                    type: string
+                  maxItems: 1000
+                accountNames:
+                  title: 账户名(复数)
+                  type: array
+                  items:
+                    title: 账户名
+                    type: string
+                  maxItems: 1000
+      responses:
+        '200':
+          description: 用户安全信息列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserSafetyEmailList'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/users/federation/{federatedType}/batchQuery':
+    post:
+      summary: 批量查询用户的联合登录信息
+      operationId: batchQueryUserFederation
+      description: |-
+        查询条件accountIds, accountNames之间的是或关系。
+        如果你同时制定了accountIds和accountNames,那么会分别按照这两个查询条件
+        查询出用户列表,然后合并返回给你。
+        同时,这些查询条件的数组长度最多1000个
+      tags:
+        - UserBatchQuery
+      security:
+        - oauth2:
+          - "user:v1:readUserSecret"
+      parameters: 
+        - name: federatedType
+          description: 联合登录类型
+          in: path
+          required: true
+          schema:
+            type: string
+            enum:
+            - qq
+            - openweixin
+            - workweixin
+            - alipay
+            - dingtalk
+      requestBody:
+        description: 查询条件
+        required: true
+        content:
+          'application/json':
+            schema:
+              type: object
+              properties:
+                accountIds:
+                  title: 账号Id(复数)
+                  type: array
+                  items:
+                    title: 账号Id
+                    type: string
+                  maxItems: 1000
+                accountNames:
+                  title: 账户名(复数)
+                  type: array
+                  items:
+                    title: 账户名
+                    type: string
+                  maxItems: 1000
+      responses:
+        '200':
+          description: 用户联合登录信息列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserFederationList'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/organizations/organizationTree':
+    get:
+      summary: 获取组织机构树
+      operationId: treeOrganization
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      responses:
+        '200':
+          description: 组织机构列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/OrganizationListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/organizations/rootOrganization':
+    get:
+      summary: 获取根组织机构列表
+      operationId: listRootOrganization
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      responses:
+        '200':
+          description: 根组织机构列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/RootOrganizationListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/organizations/rootOrganization/{rootOrganizationId}/organizations':
+    get:
+      summary: 获取根组织机构下的组织机构列表
+      operationId: pageOrganizationsOfRoot
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      parameters:
+        - name: rootOrganizationId
+          in: path
+          required: true
+          description: 根组织机构ID
+          schema:
+            type: string
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              ids:
+                title: 查询条件 - IDs(多个用逗号隔开)
+                type: string
+              keyword:
+                title: 查询条件 - 关键字(模糊,代码、名称、描述等)
+                type: string
+              code:
+                title: 查询条件 - 代码(模糊)
+                type: string
+              name:
+                title: 查询条件 - 名称(模糊)
+                type: string
+              description:
+                title: 查询条件 - 描述(模糊)
+                type: string
+      responses:
+        '200':
+          description: 组织机构列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/OrganizationListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/organizations/rootOrganization/{rootOrganizationId}/organizationTree':
+    get:
+      summary: 获取根组织机构下的组织机构树
+      operationId: treeOrganizationsOfRoot
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      parameters:
+        - name: rootOrganizationId
+          in: path
+          required: true
+          description: 根组织机构ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 组织机构列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/OrganizationListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/organizations/{organizationId}':
+    get:
+      summary: 根据组织机构ID获取组织机构
+      operationId: getOrganization
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      parameters:
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 组织机构信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/OrganizationLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/organizations/organizationCode/{organizationCode}':
+    get:
+      summary: 根据组织机构代码获取组织机构
+      operationId: getOrganizationByCode
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      parameters:
+        - name: organizationCode
+          in: path
+          required: true
+          description: 组织机构代码
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 组织机构信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/OrganizationLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/organizations/{organizationId}/users':
+    get:
+      summary: 获取组织机构下的用户列表(弃用)
+      description: 弃用,应该使用 /organizations/users
+      operationId: listUsersByOrganization
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      parameters:
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              keyword:
+                title: 查询条件 - 关键字(模糊,帐号、姓名等)
+                type: string
+              accountName:
+                title: 查询条件 - 账户名(模糊)
+                type: string
+              name:
+                title: 查询条件 - 姓名(模糊)
+                type: string
+      responses:
+        '200':
+          description: 用户分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/organizations/{organizationId}/allSub/users':
+    get:
+      summary: 获取组织机构(及其子集)下的用户列表(弃用)
+      description: 弃用,应该使用 /organizations/users
+      operationId: listUsersByOrganizationAllSub
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      parameters:
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              keyword:
+                title: 查询条件 - 关键字(模糊,帐号、姓名等)
+                type: string
+              accountName:
+                title: 查询条件 - 账户名(模糊)
+                type: string
+              name:
+                title: 查询条件 - 姓名(模糊)
+                type: string
+      responses:
+        '200':
+          description: 用户分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/organizations/users':
+    get:
+      summary: 获取组织机构下的用户列表
+      description: organizationId和organizationCode二选一
+      operationId: listOrganizationUsers
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      parameters:
+        - name: organizationId
+          in: query
+          description: 组织机构Id
+          schema:
+            type: string
+        - name: organizationCode
+          in: query
+          description: 组织机构Code
+          schema:
+            type: string
+        - name: fetchSub
+          in: query
+          description: 是否包含子组织机构的用户
+          schema:
+            type: boolean
+            default: false
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              keyword:
+                title: 查询条件 - 关键字(模糊,帐号、姓名等)
+                type: string
+              accountName:
+                title: 查询条件 - 账户名(模糊)
+                type: string
+              name:
+                title: 查询条件 - 姓名(模糊)
+                type: string
+      responses:
+        '200':
+          description: 用户分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/organizations/accountId/{accountId}/rootOrganization/{rootOrganizationId}/organizationChain':
+    get:
+      summary: 获取帐号在根组织机构下的所属组织机构
+      operationId: getAccountOrganizationsOfRoot
+      tags:
+        - Organization
+      security:
+        - oauth2:
+          - "user:v1:readOrganization"
+      parameters:
+        - name: rootOrganizationId
+          in: path
+          required: true
+          description: 根组织机构ID
+          schema:
+            type: string
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 组织机构列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/OrganizationListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/groups':
+    get:
+      summary: 获取用户组(所有)的列表
+      operationId: pageGroups
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              ids:
+                title: 查询条件 - IDs(多个用逗号隔开)
+                type: string
+              keyword:
+                title: 查询条件 - 关键字(模糊,名称、描述等)
+                type: string
+              name:
+                title: 查询条件 - 名称(模糊)
+                type: string
+              description:
+                title: 查询条件 - 描述(模糊)
+                type: string
+              type:
+                title: 查询条件 - 类型(精确,1 普通用户组,2 岗位用户组)
+                type: string
+      responses:
+        '200':
+          description: 用户组分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/{groupId}':
+    get:
+      summary: 根据用户组ID获取用户组(所有)的基本信息
+      operationId: getGroup
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupId
+          in: path
+          required: true
+          description: 用户组ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户组信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/groupCode/{groupCode}':
+    get:
+      summary: 根据用户组代码获取用户组(所有)的基本信息
+      operationId: getGroupByCode
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupCode
+          in: path
+          required: true
+          description: 用户组代码
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户组信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/groups/{groupId}/users':
+    get:
+      summary: 获取用户组(所有)下的用户列表(弃用)
+      description: 弃用,应该使用 /groups/users
+      operationId: listUsersByGroup
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupId
+          in: path
+          required: true
+          description: 用户组ID
+          schema:
+            type: string
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              keyword:
+                title: 查询条件 - 关键字(模糊,帐号、姓名等)
+                type: string
+              accountName:
+                title: 查询条件 - 账户名(模糊)
+                type: string
+              name:
+                title: 查询条件 - 姓名(模糊)
+                type: string
+      responses:
+        '200':
+          description: 用户分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/users':
+    get:
+      summary: 获取用户组(所有)下的用户列表
+      description: groupId和groupCode二选一
+      operationId: listGroupUsers
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupId
+          in: query
+          description: 用户组ID
+          schema:
+            type: string
+        - name: groupCode
+          in: query
+          description: 用户组Code
+          schema:
+            type: string
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              keyword:
+                title: 查询条件 - 关键字(模糊,帐号、姓名等)
+                type: string
+              accountName:
+                title: 查询条件 - 账户名(模糊)
+                type: string
+              name:
+                title: 查询条件 - 姓名(模糊)
+                type: string
+      responses:
+        '200':
+          description: 用户分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/{groupId}/organizationId/{organizationId}/users':
+    get:
+      summary: 获取用户组(所有)、部门下的用户列表
+      operationId: listUsersByGroupOrganization
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupId
+          in: path
+          required: true
+          description: 用户组ID
+          schema:
+            type: string
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              keyword:
+                title: 查询条件 - 关键字(模糊,帐号、姓名等)
+                type: string
+              accountName:
+                title: 查询条件 - 账户名(模糊)
+                type: string
+              name:
+                title: 查询条件 - 姓名(模糊)
+                type: string
+      responses:
+        '200':
+          description: 用户分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/{groupId}/accountId/{accountId}':
+    get:
+      summary: 获取用户组(普通)下指定帐号的关系
+      operationId: loadAccountGroup
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupId
+          in: path
+          required: true
+          description: 用户组ID
+          schema:
+            type: string
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 帐号-用户组
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/AccountGroupResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/accountId/{accountId}/groups':
+    get:
+      summary: 获取帐号的用户组(普通)
+      operationId: listAccountGroups
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户组
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/groups/{groupId}/accountOrganizations':
+    get:
+      summary: 获取用户组(岗位)下的帐号 - 组织机构列表
+      operationId: listAccountOrganizationsByGroup
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupId
+          in: path
+          required: true
+          description: 用户组ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构-帐号关系的列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/accountId/{accountId}/groupOrganizations':
+    get:
+      summary: 获取帐号的用户组(岗位) - 组织机构列表
+      operationId: listGroupOrganizationsByAccount
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构-帐号关系的列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/organizationId/{organizationId}/accountGroups':
+    get:
+      summary: 获取组织机构下的帐号 - 用户组(岗位)列表
+      operationId: listAccountGroupsByOrganization
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构-帐号关系的列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/{groupId}/accountId/{accountId}/organizations':
+    get:
+      summary: 获取用户组(岗位)下指定帐号 的 组织机构
+      operationId: listOrganizationsByAccountGroup
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupId
+          in: path
+          required: true
+          description: 用户组ID
+          schema:
+            type: string
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构-帐号关系的列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/{groupId}/organizationId/{organizationId}/accounts':
+    get:
+      summary: 获取用户组(岗位)下指定组织机构 的 帐号
+      operationId: listAccountsByGroupOrganization
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupId
+          in: path
+          required: true
+          description: 用户组ID
+          schema:
+            type: string
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构-帐号关系的列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/groups/{groupId}/accountId/{accountId}/organizationId/{organizationId}':
+    get:
+      summary: 获取用户组(岗位)下指定帐号、组织机构的关系
+      operationId: loadAccountGroupOrganization
+      tags:
+        - Group
+      security:
+        - oauth2:
+          - "user:v1:readGroup"
+      parameters:
+        - name: groupId
+          in: path
+          required: true
+          description: 用户组ID
+          schema:
+            type: string
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号ID
+          schema:
+            type: string
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构-帐号关系
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/labels':
+    get:
+      summary: 获取用户标签列表
+      operationId: pageLabels
+      tags:
+        - Label
+      security:
+        - oauth2:
+          - "user:v1:readLabel"
+      parameters:
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              keyword:
+                title: 查询条件 - 关键字(模糊,名称、描述等)
+                type: string
+              name:
+                title: 查询条件 - 名称(模糊)
+                type: string
+              description:
+                title: 查询条件 - 描述(模糊)
+                type: string
+      responses:
+        '200':
+          description: 用户标签分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LabelPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/labels/{labelId}':
+    get:
+      summary: 获取用户标签
+      operationId: getLabel
+      tags:
+        - Label
+      security:
+        - oauth2:
+          - "user:v1:readLabel"
+      parameters:
+        - name: labelId
+          in: path
+          required: true
+          description: 用户标签ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户标签信息
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LabelLoadResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/labels/{labelId}/accountId/{accountId}':
+    get:
+      summary: 获取用户标签下指定帐号的关系
+      operationId: loadAccountLabel
+      tags:
+        - Label
+      security:
+        - oauth2:
+          - "user:v1:readLabel"
+      parameters:
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+        - name: labelId
+          in: path
+          required: true
+          description: 用户标签ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户标签
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/AccountLabelResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/labels/{labelId}/users':
+    get:
+      summary: 获取用户标签下的用户列表
+      operationId: listUsersByLabel
+      tags:
+        - Label
+      security:
+        - oauth2:
+          - "user:v1:readLabel"
+      parameters:
+        - name: labelId
+          in: path
+          required: true
+          description: 用户标签ID
+          schema:
+            type: string
+        - name: pageIndex
+          in: query
+          required: true
+          description: 分页-页码
+          schema:
+            type: integer
+            format: int32
+            default: 0
+        - name: pageSize
+          in: query
+          required: true
+          description: 分页-每页记录数
+          schema:
+            type: integer
+            format: int32
+            default: 20
+        - name: mapBean
+          in: query
+          required: false
+          description: 查询条件
+          style: deepObject
+          explode: true
+          schema:
+            type: object
+            properties:
+              keyword:
+                title: 查询条件 - 关键字(模糊,帐号、姓名等)
+                type: string
+              accountName:
+                title: 查询条件 - 账户名(模糊)
+                type: string
+              name:
+                title: 查询条件 - 姓名(模糊)
+                type: string
+      responses:
+        '200':
+          description: 用户分页列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserInfoPageResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/labels/accountId/{accountId}/labels':
+    get:
+      summary: 获取帐号的用户标签
+      operationId: listAccountLabels
+      tags:
+        - Label
+      security:
+        - oauth2:
+          - "user:v1:readLabel"
+      parameters:
+        - name: accountId
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 用户标签
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LabelListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+
+
+  '/admin/posts/accountName/{accountName}/manOrganizations':
+    get:
+      summary: 根据帐号获取可管理的组织机构列表
+      operationId: loadManOrganizationsByAccount
+      tags:
+        - PostAdmin
+      security:
+        - oauth2:
+          - "user:v1:readPost"
+      parameters:
+        - name: accountName
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构-帐号关系的列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/admin/posts/organizationId/{organizationId}/accountName/{accountName}/manPosts':
+    get:
+      summary: 根据组织机构Id、帐号获取该帐号在组织机构下的可管理岗位
+      operationId: loadManPostsByOrganizationOfAccount
+      tags:
+        - PostAdmin
+      security:
+        - oauth2:
+          - "user:v1:readPost"
+      parameters:
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+        - name: accountName
+          in: path
+          required: true
+          description: 帐号
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构设置的列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/admin/posts/organizationId/{organizationId}/posts':
+    get:
+      summary: 根据组织机构Id获取组织机构下的所有岗位
+      operationId: loadPostsByOrganization
+      tags:
+        - PostAdmin
+      security:
+        - oauth2:
+          - "user:v1:readPost"
+      parameters:
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构设置的列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+
+  '/admin/posts/organizationId/{organizationId}/postAccounts':
+    get:
+      summary: 根据组织机构Id获取组织机构下的岗位人员
+      operationId: listPostAccountsByOrganization
+      tags:
+        - PostAdmin
+      security:
+        - oauth2:
+          - "user:v1:readPost"
+      parameters:
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+      responses:
+        '200':
+          description: 岗位-组织机构-帐号关系的列表
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountListResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+    post:
+      summary: 根据组织机构Id保存组织机构下的岗位人员
+      operationId: savePostAccountsByOrganization
+      tags:
+        - PostAdmin
+      security:
+        - oauth2:
+          - "user:v1:writePost"
+      parameters:
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+      requestBody:
+        description: 岗位-组织机构-帐号关系的列表
+        required: true
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GroupOrganizationAccountSaveRequest'
+      responses:
+        '200':
+          description: 保存结果
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountSaveResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+  '/admin/posts/organizationId/{organizationId}/group/{groupId}/accounts':
+    post:
+      summary: 根据组织机构Id、岗位Id保存人员
+      operationId: saveAccountsByOrganizationPost
+      tags:
+        - PostAdmin
+      security:
+        - oauth2:
+          - "user:v1:writePost"
+      parameters:
+        - name: organizationId
+          in: path
+          required: true
+          description: 组织机构ID
+          schema:
+            type: string
+        - name: groupId
+          in: path
+          required: true
+          description: 岗位(用户组)ID
+          schema:
+            type: string
+      requestBody:
+        description: 岗位-组织机构-帐号关系的列表
+        required: true
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GroupOrganizationAccountSaveRequest'
+      responses:
+        '200':
+          description: 保存结果
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GroupOrganizationAccountSaveResponse'
+        default:
+          $ref: '#/components/responses/DefaultErrorResponse'
+
+components:
+
+  # Security Schemes
+  
+  securitySchemes:
+    oauth2:
+      type: oauth2
+      flows:
+        clientCredentials:
+          tokenUrl: ${POA_SERVER_URL}/oauth2/token
+          scopes:
+            "user:v1:readUser": "读取用户"
+            "user:v1:readUserSecret": "读取用户私密信息"
+            "user:v1:readOrganization": "读取组织机构"
+            "user:v1:readGroup": "读取用户组"
+            "user:v1:readLabel": "读取用户标签"
+            "user:v1:readPost": "读取岗位"
+            "user:v1:writePost": "写入岗位"
+
+  responses:
+    'ErrorResponse400':
+      description: unexpected error
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorResponse'
+
+    DefaultErrorResponse:
+      description: unexpected error
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorResponse'
+
+  schemas:
+  
+    # Error
+    
+    ErrorResponse:
+      title: '异常响应'
+      required:
+        - code
+        - message
+      properties:
+        code:
+          title: 异常代码
+          type: integer
+          format: int32
+          default: -1
+        message:
+          title: 异常信息
+          type: string
+          default: "未知错误"
+
+    # Entity
+    
+    BaseEntity:
+      title: 实体 - 基类
+      type: object
+      properties:
+        id:
+          title: ID
+          type: string
+        #companyId:
+        #  title: 'Company ID, 固定 1'
+        #  type: string
+        #  default: '1'
+        #deleted:
+        #  title: 是否删除
+        #  type: boolean
+        #  default: false
+        #addAccount:
+        #  title: 创建人
+        #  type: string
+        #addTime:
+        #  title: 创建时间
+        #  type: string
+        #  format: date-time
+        #editAccount:
+        #  title: 修改人
+        #  type: string
+        #editTime:
+        #  title: 修改时间
+        #  type: string
+        #  format: date-time
+        #deleteAccount:
+        #  title: 删除人
+        #  type: string
+        #deleteTime:
+        #  title: 删除时间
+        #  type: string
+        #  format: date-time
+        #isDataCenter:
+        #  title: 是否来源数据中心
+        #  type: boolean
+        #  default: false
+
+    DictionaryType:
+      title: 实体 - 字典
+      allOf:
+        - $ref: '#/components/schemas/BaseEntity'
+        - type: object
+          title: 实体属性
+          properties:
+            code:
+              title: 代码
+              type: string
+            name:
+              title: 名称
+              type: string
+            enable:
+              title: 是否启用
+              type: boolean
+              default: true
+            sort:
+              title: 排序
+              type: integer
+              format: int64
+            multiLevel:
+              title: 是否多层级
+              type: boolean
+
+    Dictionary:
+      title: 实体 - 字典
+      allOf:
+        - $ref: '#/components/schemas/BaseEntity'
+        - type: object
+          title: 实体属性
+          properties:
+            code:
+              title: 代码
+              type: string
+            name:
+              title: 名称
+              type: string
+            enable:
+              title: 是否启用
+              type: boolean
+              default: true
+            sort:
+              title: 排序
+              type: integer
+              format: int64
+            dictionaryType:
+              title: 字典类型
+              allOf:
+                - $ref: '#/components/schemas/DictionaryType'
+            parentDictionary:
+              title: 父字典
+              allOf:
+                - $ref: '#/components/schemas/Dictionary'
+
+    IdentityType:
+      title: 实体 - 字典
+      allOf:
+        - $ref: '#/components/schemas/BaseEntity'
+        - type: object
+          title: 实体属性
+          properties:
+            code:
+              title: 代码
+              type: string
+            name:
+              title: 名称
+              type: string
+            enable:
+              title: 是否启用
+              type: boolean
+            sort:
+              title: 排序
+              type: integer
+              format: int64
+            parentIdentityType:
+              title: 父身份类型
+              allOf:
+                - $ref: '#/components/schemas/IdentityType'
+
+    User:
+      title: 实体 - 用户
+      allOf:
+        - $ref: '#/components/schemas/BaseEntity'
+        - type: object
+          title: 实体属性
+          properties:
+            uid:
+              title: 用户标识
+              type: string
+            passWord:
+              title: 密码
+              type: string
+            name:
+              title: 名称
+              type: string
+            fullNameSpelling:
+              title: 姓名全拼,根据姓名生成
+              type: string
+            nameSpelling:
+              title: 姓名简拼,根据姓名生成
+              type: string
+            email:
+              title: 名称
+              type: string
+            phoneNumber:
+              title: 名称
+              type: string
+            imageUrl:
+              title: 个人照片地址
+              type: string
+            certificateType:
+              title: 证件类型
+              allOf:
+                - $ref: '#/components/schemas/Dictionary'
+            certificateNumber:
+              title: 证件号码
+              type: string
+            gender:
+              title: 性别
+              allOf:
+                - $ref: '#/components/schemas/Dictionary'
+            nation:
+              title: 民族
+              allOf:
+                - $ref: '#/components/schemas/Dictionary'
+            country:
+              title: 国家
+              allOf:
+                - $ref: '#/components/schemas/Dictionary'
+            address:
+              title: 地址
+              allOf:
+                - $ref: '#/components/schemas/Dictionary'
+
+    Organization:
+      title: 实体 - 组织机构
+      allOf:
+        - $ref: '#/components/schemas/BaseEntity'
+        - type: object
+          title: 实体属性
+          properties:
+            code:
+              title: 代码
+              type: string
+            name:
+              title: 名称
+              type: string
+            enable:
+              title: 是否启用
+              type: boolean
+            sort:
+              title: 排序
+              type: integer
+              format: int64
+            state:
+              title: 状态
+              type: integer
+              format: int32
+            type:
+              title: 类型
+              allOf:
+                - $ref: '#/components/schemas/Dictionary'
+            parentOrganization:
+              title: 所属的父级组织机构
+              allOf:
+                - $ref: '#/components/schemas/Organization'
+
+    Account:
+      title: 实体 - 帐号
+      allOf:
+        - $ref: '#/components/schemas/BaseEntity'
+        - type: object
+          title: 实体属性
+          properties:
+            accountName:
+              title: 帐号
+              type: string
+            state:
+              title: 状态
+              type: string
+            activation:
+              title: 是否激活
+              type: boolean
+            accountExpiryDate:
+              title: 失效时间
+              type: string
+              format: date-time
+            identityType:
+              title: 身份
+              allOf:
+                - $ref: '#/components/schemas/IdentityType'
+            organization:
+              title: 组织机构
+              allOf:
+                - $ref: '#/components/schemas/Organization'
+            user:
+              title: 用户信息
+              allOf:
+                - $ref: '#/components/schemas/User'
+
+
+    # Model
+
+    UserInfoModel:
+      title: 用户信息
+      type: object
+      properties:
+        id:
+          title: 账号Id(弃用,请用accountId)
+          type: string
+        accountId:
+          title: 账号Id
+          type: string
+        accountName:
+          title: 帐号
+          type: string
+        identityTypeId:
+          title: 身份(ID)
+          type: string
+        identityTypeCode:
+          title: 身份(代码)
+          type: string
+        identityTypeName:
+          title: 身份(名称)
+          type: string
+        organizationId:
+          title: 组织机构(ID)
+          type: string
+        organizationCode:
+          title: 组织机构(代码)
+          type: string
+        organizationName:
+          title: 组织机构(名称)
+          type: string
+        userId:
+          title: 用户Id
+          type: string
+        uid:
+          title: 用户号(弃用,应该userNo)
+          type: string
+        userNo:
+          title: 用户号
+          type: string
+        name:
+          title: 姓名
+          type: string
+        fullNameSpelling:
+          title: 姓名全拼,根据姓名生成
+          type: string
+        nameSpelling:
+          title: 姓名简拼,根据姓名生成
+          type: string
+        email:
+          title: 邮箱(注意不是安全邮箱)
+          type: string
+        phoneNumber:
+          title: 手机号(注意不是安全手机)
+          type: string
+        imageUrl:
+          title: 个人照片地址
+          type: string
+        certificateTypeId:
+          title: 证件类型(ID)
+          type: string
+        certificateTypeCode:
+          title: 证件类型(代码)
+          type: string
+        certificateTypeName:
+          title: 证件类型(名称)
+          type: string
+        certificateNumber:
+          title: 证件号码
+          type: string
+        genderId:
+          title: 性别(ID)
+          type: string
+        genderCode:
+          title: 性别(代码)
+          type: string
+        genderName:
+          title: 性别(名称)
+          type: string
+        nationId:
+          title: 民族(ID)
+          type: string
+        nationCode:
+          title: 民族(代码)
+          type: string
+        nationName:
+          title: 民族(名称)
+          type: string
+        countryId:
+          title: 国家(ID)
+          type: string
+        countryCode:
+          title: 国家(代码)
+          type: string
+        countryName:
+          title: 国家(名称)
+          type: string
+        addressId:
+          title: 地址(ID)
+          type: string
+        addressCode:
+          title: 地址(代码)
+          type: string
+        addressName:
+          title: 地址(名称)
+          type: string
+
+    OrganizationModel:
+      title: 组织机构信息
+      type: object
+      properties:
+        id:
+          title: ID
+          type: string
+        code:
+          title: 代码
+          type: string
+        name:
+          title: 名称
+          type: string
+        description:
+          title: 描述
+          type: string
+        isRootOrganization:
+          title: 是否根组织机构
+          type: string
+        rootOrganizationId:
+          title: 所在根组织机构(ID)
+          type: string
+        parentId:
+          title: 父级组织机构(ID)
+          type: string
+        parentCode:
+          title: 父级组织机构(代码)
+          type: string
+        parentName:
+          title: 父级组织机构(名称)
+          type: string
+        typeId:
+          title: 类型(ID)
+          type: string
+        typeName:
+          title: 类型(名称)
+          type: string
+
+    GroupModel:
+      title: 用户组信息
+      type: object
+      properties:
+        id:
+          title: ID
+          type: string
+        code:
+          title: 代码
+          type: string
+        name:
+          title: 名称
+          type: string
+        description:
+          title: 描述
+          type: string
+        type:
+          title: 类型(1 普通用户组,2 岗位用户组)
+          type: string
+
+    LabelModel:
+      title: 用户标签信息
+      type: object
+      properties:
+        id:
+          title: ID
+          type: string
+        name:
+          title: 名称
+          type: string
+        description:
+          title: 描述
+          type: string
+
+    GroupOrganizationModel:
+      title: 岗位组织机构设置信息
+      type: object
+      properties:
+        id:
+          title: ID
+          type: string
+        groupId:
+          title: 用户组(岗位)ID
+          type: string
+        organizationId:
+          title: 组织机构ID
+          type: string
+
+        groupCode:
+          title: 用户组(岗位)代码
+          type: string
+        groupName:
+          title: 用户组(岗位)名称
+          type: string
+        groupDescription:
+          title: 用户组(岗位)描述
+          type: string
+        organizationCode:
+          title: 组织机构代码
+          type: string
+        organizationName:
+          title: 组织机构名称
+          type: string
+        organizationDescription:
+          title: 组织机构描述
+          type: string
+
+    GroupOrganizationAccountModel:
+      title: 岗位组织机构帐号信息
+      type: object
+      properties:
+        id:
+          title: ID
+          type: string
+        groupId:
+          title: 用户组(岗位)ID
+          type: string
+        organizationId:
+          title: 组织机构ID
+          type: string
+        accountId:
+          title: 帐号ID
+          type: string
+
+        groupCode:
+          title: 用户组(岗位)代码
+          type: string
+        groupName:
+          title: 用户组(岗位)名称
+          type: string
+        organizationCode:
+          title: 组织机构代码
+          type: string
+        organizationName:
+          title: 组织机构名称
+          type: string
+        accountName:
+          title: 帐号
+          type: string
+        userName:
+          title: 用户姓名
+          type: string
+
+        accountOrganizationId:
+          title: 帐号的组织机构ID
+          type: string
+        accountOrganizationCode:
+          title: 帐号的组织机构代码
+          type: string
+        accountOrganizationName:
+          title: 帐号的组织机构名称
+          type: string
+
+
+    # Request VO
+    GroupOrganizationAccountSaveRequest:
+      title: 请求
+      properties:
+        groupOrganizatonAccounts:
+          title: 岗位组织机构帐号信息列表
+          type: array
+          items:
+            $ref: '#/components/schemas/GroupOrganizationAccountModel'
+
+
+    # Response Data
+
+
+    # Response VO
+
+    AbstractApiResponse:
+      title: 响应
+      properties:
+        acknowleged:
+          title: 响应结果
+          type: boolean
+          default: true
+        code:
+          title: 响应代码
+          type: integer
+          format: int32
+          default: 0
+        message:
+          title: 响应信息
+          type: string
+    DefaultApiResponse:
+      allOf:
+        - $ref: '#/components/schemas/AbstractApiResponse'
+        - type: object
+          title: 响应数据
+          properties:
+            data:
+              title: 响应数据
+              type: object
+
+
+    UserInfoPageResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 分页数据
+              properties:
+                pageCount:
+                  title: 分页总数
+                  type: integer
+                  format: int32
+                totalCount:
+                  title: 记录总数
+                  type: integer
+                  format: int64
+                currentItemCount:
+                  title: 当前返回记录数
+                  type: integer
+                  format: int32
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/UserInfoModel'
+
+    UserInfoLoadResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - $ref: '#/components/schemas/UserInfoModel'
+
+    UserInfoListResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/UserInfoModel'
+
+    UserPortraitLoadResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                portraitBase64:
+                  title: 头像数据(Base64)
+                  type: string
+    UserSafety:
+      type: object
+      title: 安全信息
+      properties:
+        userId:
+          title: 用户Id
+          type: string
+        accountId:
+          title: 账号Id
+          type: string
+        accountName:
+          title: 账号名
+          type: string
+        securePhone:
+          title: 安全手机
+          type: string
+        secureEmail:
+          title: 安全邮箱
+          type: string
+
+    UserSafetyList:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/UserSafety'
+
+    UserSafetyPhoneNumber:
+      type: object
+      title: 安全手机
+      properties:
+        userId:
+          title: 用户Id
+          type: string
+        accountId:
+          title: 账号Id
+          type: string
+        accountName:
+          title: 账号名
+          type: string
+        securePhone:
+          title: 安全手机
+          type: string
+
+    UserSafetyPhoneNumberList:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/UserSafetyPhoneNumber'
+
+    UserSafetyEmail:
+      type: object
+      title: 安全邮箱
+      properties:
+        userId:
+          title: 用户Id
+          type: string
+        accountId:
+          title: 账号Id
+          type: string
+        accountName:
+          title: 账号名
+          type: string
+        secureEmail:
+          title: 安全邮箱
+          type: string
+
+    UserSafetyEmailList:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/UserSafetyEmail'
+
+    UserSafetyLoadResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - $ref: '#/components/schemas/UserSafety'
+
+    UserFederation:
+      type: object
+      title: 联合登录信息
+      properties:
+        userId:
+          title: 用户Id
+          type: string
+        accountId:
+          title: 账号Id
+          type: string
+        accountName:
+          title: 账号名
+          type: string
+        federatedType:
+          title: 联合登录类型
+          type: string
+          enum:
+          - qq
+          - openweixin
+          - workweixin
+          - alipay
+          - dingtalk
+        federatedId:
+          title: 联合登录ID
+          type: string
+
+    UserFederationList:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/UserFederation'
+
+    UserFederationLoadResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - $ref: '#/components/schemas/UserFederation'
+
+    RootOrganizationListResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/OrganizationModel'
+
+    OrganizationListResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/OrganizationModel'
+
+    OrganizationLoadResponse: 
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - $ref: '#/components/schemas/OrganizationModel'
+
+
+    GroupPageResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 分页数据
+              properties:
+                pageCount:
+                  title: 分页总数
+                  type: integer
+                  format: int32
+                totalCount:
+                  title: 记录总数
+                  type: integer
+                  format: int64
+                currentItemCount:
+                  title: 当前返回记录数
+                  type: integer
+                  format: int32
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/GroupModel'
+
+    GroupListResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/GroupModel'
+
+    GroupLoadResponse: 
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - $ref: '#/components/schemas/GroupModel'
+
+    AccountGroupResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                accountGroupId:
+                  title: 帐号用户组ID
+                  type: string
+
+    GroupOrganizationAccountListResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/GroupOrganizationAccountModel'
+
+    GroupOrganizationAccountResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                groupOrganizationAccountId:
+                  title: 岗位组织机构帐号的关系ID
+                  type: string
+
+    LabelPageResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 分页数据
+              properties:
+                pageCount:
+                  title: 分页总数
+                  type: integer
+                  format: int32
+                totalCount:
+                  title: 记录总数
+                  type: integer
+                  format: int64
+                currentItemCount:
+                  title: 当前返回记录数
+                  type: integer
+                  format: int32
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/LabelModel'
+
+    LabelListResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/LabelModel'
+
+    LabelLoadResponse: 
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - $ref: '#/components/schemas/LabelModel'
+
+    AccountLabelResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                accountLabelId:
+                  title: 帐号标签ID
+                  type: string
+
+
+    GroupOrganizationListResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                items:
+                  title: 当前返回记录集
+                  type: array
+                  items:
+                    $ref: '#/components/schemas/GroupOrganizationModel'
+
+    GroupOrganizationAccountSaveResponse:
+      allOf:
+      - $ref: '#/components/schemas/DefaultApiResponse'
+      - type: object
+        title: 响应数据
+        properties:
+          data:
+            allOf:
+            - type: object
+              title: 列表数据
+              properties:
+                message:
+                  title: 保存结果
+                  type: string