组织与人员字段模型

验证状态:已源码核验、未联调;适用基线:Web 959f8f9、services aed1381;核验日期:2026-09-12

本页是本资源族操作页复用的字段正本。字段来自当前后端 DTO、Mapper 与序列化配置;“可空未知”表示源码没有足以证明数据库值或成功响应一定非空的约束。时间字段均按 UTC epoch 秒传输,响应顶层 timestamp 例外为 epoch 毫秒,详见数据类型与时间。

查询控制字段

所有 list、page 和树查询都接收 JSON object。资源 DTO 还声明了审计字段和时间范围过滤,但当前 Web 只发送下表字段;App 不应把未列出的动态查询能力当作稳定合同。

JSON 路径 JSON 类型 必填 可空 默认值/范围 语义与证据
sqlQueryCriteriaLike boolean 否 是 true false 时字符串按精确匹配;各 *ListRequestDTO 与 Mapper selectWhere
sqlQueryCriteria object<string,string> 否 否 {} Mapper 已观察值为字段级 eq,deleteTime=skip 可包含已删除行;不要发送任意 SQL
sqlQuerySorter.field string 否 是 无 仅 Mapper 显式白名单字段生效;未知字段不形成排序
sqlQuerySorter.order string 否 是 非 ascend 按降序分支 当前 Web 只发送 ascend 或省略;Mapper 未定义其他稳定枚举
sqlQueryLimit number 否 是 null→100;钳制到 1..100000 QueryLimits.normalizeSqlQueryLimit;Web 下拉选择用 1000,XLSX 导出用 100000
current number 否(Web 始终发送) 未承诺 省略时 Java primitive 为 0;Web 从 1 开始 Java long,Controller 没有 Bean Validation;当前 Web 每次递增页码
pageSize number 否(Web 始终发送) 未承诺 省略时 Java primitive 为 0;Web 为 10 Java long,本组 Controller 未调用 normalizePageSize,服务端边界未闭合

字符串筛选默认是包含匹配;sqlQueryCriteriaLike=false 或对应 sqlQueryCriteria.<field>="eq" 才是精确匹配。范围结束值在 Mapper 中使用 <,因此是左闭右开。

雇员查询与返回

字段组 JSON 类型 说明
employeeId、employeeNo、orgId、callName、fullName、mobilePhone、telePhone、intro、icon、employeeState、enableIntercom、username string 可选筛选;当前 Web 页面使用 employeeNo/callName/fullName/orgId,选择器还使用 employeeId
numberOfChannels、revision number 可选精确筛选
birthDateRangeStart/End、effectiveStartTimeRangeStart/End、effectiveEndTimeRangeStart/End、审计时间范围 number UTC epoch 秒;结束值不含
tenantId、tenantIds[] string、array 服务端作用域字段;普通 App 不以此替代已认证租户

data[] 或详情 data 的雇员对象字段为:employeeId、employeeNo、orgId、orgNo、orgName、callName、fullName、mobilePhone、telePhone、intro、icon、employeeState、enableIntercom、username(string,可空未知),numberOfChannels、revision(number,可空未知),birthDate、effectiveStartTime、effectiveEndTime、createdTime、lastModifiedTime、deleteTime(number,UTC epoch 秒,可空未知),以及 createdUsername、lastModifiedUsername、tenantId(string,可空未知)。证据为 Employee*ResponseDTO、EmployeeMapper.selectColumns/selectOnePlusResponseDTOByEmployeeId。

雇员写入字段

JSON 路径 JSON 类型 保存必填 更新必填 可空 长度/语义
employeeId string 否 是 保存可省略 最长 32;Web 保存时生成 ID
employeeNo string 是 是 否 1..36;Controller 按精确值拒绝重复
orgId string Web 是 Web 是 后端可空 最长 32;Web 从机构树选择
callName、fullName string 否 否 是 最长 256
mobilePhone、telePhone string 否 否 是 最长 36
intro string 否 否 是 最长 1024
birthDate、effectiveStartTime、effectiveEndTime number 否 否 是 UTC epoch 秒;小于 1 反序列化为 null
icon string 否 否 是 最长 512;最终文件责任端未由本接口证明
numberOfChannels、revision number 否 否 是 DTO 未给范围
employeeState string 否 否 是 最长 128;枚举未闭合
enableIntercom string 否 否 是 最长 1;枚举未闭合
username string 是 是 否 后端 3..36;Web 表单仅要求 1..36,短于 3 会在后端失败
password、confirmPassword string 是 是 否 最长 1024;Web 把 3..20 位字母数字口令转成大写 MD5 后发送;后端不比较两字段
roleIds、userGroupIds array<string> 否 否 是 绑定目标用户的角色/用户组;当前 Web 始终发送数组

雇员—用户关联

查询字段包括 employeeUserId、employeeId、usernamePrefix、username、employeeNo、employeeFullName、userFullName(string),审计/租户与通用查询控制字段同上。返回对象字段为 employeeUserId、employeeId、usernamePrefix、username、employeeNo、employeeFullName、userFullName、createdUsername、lastModifiedUsername、tenantId(string),createdTime、lastModifiedTime、deleteTime(UTC epoch 秒)和 revision(number);成功响应字段的可空性源码未完全约束。

保存要求 employeeId、username 为非空 string、最长分别 32 和 36;employeeUserId 可省略、最长 32,Web 会生成。更新还要求非空 employeeUserId。usernamePrefix 可省略、最长 36,服务会按 username 计算前缀。更新实现只持久化 employeeId 与 revision,不会改写请求中的 username;要更换用户应删除后重建关联。

角色

查询字段为 roleId、roleCode、name、createdUsername、lastModifiedUsername(string),审计时间、revision、tenantId/tenantIds 和通用查询控制字段。返回对象包含 roleId、roleCode、name、createdUsername、lastModifiedUsername、tenantId(string),审计时间(UTC epoch 秒)与 revision(number);详情另含 permissionCodes: array<string>。

写入时 roleCode 是非空 string、最长 36;roleId 保存可省略、更新必填、最长 32;name 可空、最长 256;permissionCodes 可空数组。服务拒绝创建或改写 roleCode="administrator",也拒绝把现有 administrator 角色改成其他代码。角色保存/更新与权限集合变更在同一事务中。

角色—用户关联

本票实际使用只查询:username(string,消费者发送精确匹配)、roleId、roleUserId、usernamePrefix 及通用查询控制字段。返回对象字段为 roleUserId、roleId、usernamePrefix、username、createdUsername、lastModifiedUsername、tenantId(string),审计时间(UTC epoch 秒)与 revision(number)。

机构查询与返回

查询字段为 orgId、orgNo、name、parentOrgId、parentOrgNo、parentOrgName、treeOrgId、treeOrgName、审计/租户字段及通用查询控制字段。机构对象返回 orgId、orgNo、name、parentOrgId、parentOrgNo、parentOrgName、treeOrgId、treeOrgName、createdUsername、lastModifiedUsername、tenantId(string),审计时间(UTC epoch 秒)与 revision(number);可空性未由 DTO 单独保证。

保存时 orgNo 必填、1..36;orgId 可省略、最长 32(当前 Web 生成);name 最长 256;parentOrgId 最长 32;treeOrgId/treeOrgName DTO 上限为 Java int 最大值,不能视为可无限输入;roleIds、parentOrgNo、parentOrgName 可省略。更新还要求 orgId 非空;空 parentOrgId 会把 treeOrgId/treeOrgName 重设为自身 ID/名称。Controller 按精确 orgNo 拒绝重复。

租户查询与返回

查询字段为 tenantId、tenantNoPrefix、tenantNo、tenantType、name、parentTenantId、treeTenantId、treeTenantName、审计字段、tenantIds[] 及通用查询控制字段。返回对象包含同名资源字段、createdUsername、lastModifiedUsername(string),审计时间(UTC epoch 秒)与 revision(number)。

JSON 路径 JSON 类型 必填 限制与行为
tenantId string 当前 Web 是 最长 32;Web 对 team/personal-space 分别生成 t_/p_ 前缀;非 administrator 会被 Controller 覆盖为当前租户
tenantNo string 是 1..36;按精确值拒绝重复
tenantType string 是 1..128;已核实行为分支只有 team、personal-space,其他非空值会写租户但不执行用户绑定
name string 否 最长 256
parentTenantId string 否 最长 32;当前 Web 编辑表单不发送,更新会把空值写回并重设树根字段
username string 是 后端 3..36;新用户额外限字母、数字、下划线
password、confirmPassword string 是 最长 1024;Web 发送大写 MD5;后端不比较确认字段

更新 DTO 也声明 tenantNoPrefix/treeTenantId/treeTenantName/revision,但当前 Plus 更新实现不持久化它们;tenantType 只决定绑定分支,不改写数据库中的租户类型。

用户查询与返回

当前 Web 列表使用 username、callName、fullName;查重使用 username + sqlQueryCriteriaLike=false。DTO 还声明 userId、usernamePrefix、email、mobilePhone、地址和个人资料字段、审计时间范围、tenantIds[] 与通用查询控制字段。

用户详情和列表当前 Mapper 会返回下列字段:

字段组 JSON 类型 可空 说明
userId、usernamePrefix、username、callName、fullName、email、intro、mobilePhone、locus、companyName、telePhone、profession、maritalState、nation、diploma、country、province、city、area、address、gender、qq、idCardNo、portraitUrl、审计用户名 string 未知 getById 会用关联表查询到的最后一个手机号/邮箱覆盖主用户字段;没有关联时设为 null
birthDate、审计时间 number 未知 UTC epoch 秒
revision number 未知 版本字段
password、passwordSalt、privatePassword、privatePasswordSalt string 未知 当前 DTO/Mapper 会暴露这些存储值;客户端必须忽略、不得记录或回传。此行为是已确认安全风险,不是推荐合同。

保存要求 username 非空、最长 36;userId 可省略、最长 32,当前 Web 生成。callName/fullName 最长 256,intro 最长 1024,portraitUrl 最长 512,email/mobilePhone/telePhone 最长 36;其余个人资料 string 上限见 UserSaveRequestDTO(128、512 或 1024)。birthDate 为 UTC epoch 秒,roleIds/userGroupIds 为 array。

保存不要求 password;为空时服务使用 MD5(username).toUpperCase() 作为初始 wire 密码,再用随机盐加密存储。当前 Web 的“新增用户”表单不发送密码,因此 App 不应假定这是安全的开户流程,应在产品流程确认后立即走改密操作。

更新要求 userId、username 非空。服务只更新非空字符串及非空 birthDate/revision,因此空字符串不能清除旧值;password/passwordSalt/privatePassword/privatePasswordSalt 不由此操作更新。对非当前登录用户,roleIds 仅在非空时同步(空数组不能清空角色),userGroupIds 会同步;当前用户的角色和用户组变更被跳过。

树节点

机构和租户树返回 data: array<TreeNode>;每个节点含 title: string(资源名称)、value: string(资源 ID)和 children: array<TreeNode>(叶子可空)。树根由请求的 parentOrgId/parentTenantId 决定。证据为 Lists.TitleValueTreeNode 及 OrgPlusController/TenantPlusController 的 node mapper。

证据基线

前端:2.0.1-cn-1-yaoht-20260730,HEAD 959f8f913eedd8dbb5b0d1439e8f9b455bf18792。后端:同名分支,HEAD aed13815811b026b6b1f0ae59eb46a334b932c1c。核验日期:2026-09-12。所读 Controller、DTO、Mapper、Service、复合函数和监听器均与各自 HEAD 一致;后端工作树其他文件的脏改动不在本票证据链内。

结论 状态 仓库/基线 路径、符号及定位 内容指纹(脏文件)
Web JSON、header、method 推导与 15 分钟超时 已源码核验 web 959f8f9 app/.common/lib/fetch-timeouts.ts:4-75 fetchTimeout/fetchTimeoutResponseJson;app/.common/auth/index.ts:35-52 getFetchRequestInit 与 HEAD 一致
tenant-bound 表与全局用户表的数据范围差异 已源码核验 services aed1381 es-center-server-main-service/src/main/java/com/es/center/server/config/MybatisPlusConfig.java:72-87 TenantLineInnerInterceptor、config/SecurityConfig.java:179-189 tenantIdIgnoreTableFunction、src/main/resources/application-default-es-center-server.yaml:4-9 tenant-id-ignore-tables;gt-common-user-center-common/src/main/resources/mapper/postgresql/gt-common-user-center/UserMapper.xml:4-40,392-405 与 HEAD 一致
雇员字段、校验、查询和 Plus 投影 已源码核验 services aed1381 es-center-server-basedata-dto/src/main/java/com/es/center/server/basedata/dto/EmployeeSaveRequestDTO.java:22-128、es-center-server-basedata-dto/src/main/java/com/es/center/server/basedata/dto/EmployeeListRequestDTO.java:23-135、es-center-server-basedata-dto/src/main/java/com/es/center/server/basedata/dto/employee/EmployeeSavePlusRequestDTO.java:21-52;es-center-server-basedata-common/src/main/resources/mapper/postgresql/es-center-server-basedata/EmployeeMapper.xml:4-230 selectColumns/selectWhere 与 HEAD 一致
雇员—用户关联字段与唯一性/更新语义 已源码核验 services aed1381 es-center-server-basedata-dto/src/main/java/com/es/center/server/basedata/dto/EmployeeUserSaveRequestDTO.java:22-47、es-center-server-basedata-dto/src/main/java/com/es/center/server/basedata/dto/employee_user/EmployeeUserListPlusResponseDTO.java:20-29;es-center-server-basedata-common/src/main/java/com/es/center/server/basedata/service/EmployeeUserService.java:34-100 save/updateById 与 HEAD 一致
角色及角色—用户字段 已源码核验 services aed1381 gt-common-authority-dto/src/main/java/tech/gt/authority/dto/RoleSaveRequestDTO.java:22-42、gt-common-authority-dto/src/main/java/tech/gt/authority/dto/role/RoleGetByIdPlusResponseDTO.java:21-25、gt-common-authority-dto/src/main/java/tech/gt/authority/dto/RoleUserListRequestDTO.java:23-82;gt-common-authority-common/src/main/java/tech/gt/authority/service/impl/RoleServiceImpl.java:38-93 与 HEAD 一致
机构字段、树与数据权限 已源码核验 services aed1381 gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/OrgSaveRequestDTO.java:22-54、gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/org/OrgListPlusResponseDTO.java:20-26;es-center-server-main-service/src/main/java/com/es/center/server/user/center/controller/OrgController.java:55-172、OrgPlusController.java:44-156 与 HEAD 一致
租户字段、树与绑定分支 已源码核验 services aed1381 gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/TenantSaveRequestDTO.java:22-63、gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/tenant/TenantSavePlusRequestDTO.java:22-37;gt-common-user-center-common/src/main/java/tech/gt/user/center/service/impl/TenantServiceImpl.java:43-197;es-center-server-main-service/src/main/java/com/es/center/server/user/center/controller/TenantPlusController.java:320-380 与 HEAD 一致
用户字段、敏感返回字段与写入语义 已源码核验 services aed1381 gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/UserSaveRequestDTO.java:22-156、gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/UserGetByIdResponseDTO.java:20-127;gt-common-user-center-common/src/main/resources/mapper/postgresql/gt-common-user-center/UserMapper.xml:4-40 selectColumns、gt-common-user-center-common/src/main/java/tech/gt/user/center/service/UserService.java:35-155 与 HEAD 一致
时间、BigDecimal 与响应信封 已源码核验 services aed1381 es-center-server-main-service/src/main/java/com/es/center/server/config/JsonFormatConfig.java:20-111;gt-common-core/src/main/java/tech/gt/api/ApiResult.java:43-159 与 HEAD 一致
树节点 JSON 形态 已源码核验 services aed1381 gt-common-core/src/main/java/tech/gt/collect/Lists.java:186-199 TitleValueTreeNode 与 HEAD 一致
真实部署联调 未执行 — 未发送请求、未连接数据库/JMS/文件代理 —