组织与人员字段模型

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

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

查询控制字段

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

JSON 路径 JSON 类型 必填 可空 默认值/范围 语义与证据
sqlQueryCriteriaLike boolean true false 时字符串按精确匹配;各 *ListRequestDTO 与 Mapper selectWhere
sqlQueryCriteria object<string,string> {} Mapper 已观察值为字段级 eqdeleteTime=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 类型 说明
employeeIdemployeeNoorgIdcallNamefullNamemobilePhonetelePhoneintroiconemployeeStateenableIntercomusername string 可选筛选;当前 Web 页面使用 employeeNo/callName/fullName/orgId,选择器还使用 employeeId
numberOfChannelsrevision number 可选精确筛选
birthDateRangeStart/EndeffectiveStartTimeRangeStart/EndeffectiveEndTimeRangeStart/End、审计时间范围 number UTC epoch 秒;结束值不含
tenantIdtenantIds[] string、array 服务端作用域字段;普通 App 不以此替代已认证租户

data[] 或详情 data 的雇员对象字段为:employeeIdemployeeNoorgIdorgNoorgNamecallNamefullNamemobilePhonetelePhoneintroiconemployeeStateenableIntercomusername(string,可空未知),numberOfChannelsrevision(number,可空未知),birthDateeffectiveStartTimeeffectiveEndTimecreatedTimelastModifiedTimedeleteTime(number,UTC epoch 秒,可空未知),以及 createdUsernamelastModifiedUsernametenantId(string,可空未知)。证据为 Employee*ResponseDTOEmployeeMapper.selectColumns/selectOnePlusResponseDTOByEmployeeId

雇员写入字段

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

雇员—用户关联

查询字段包括 employeeUserIdemployeeIdusernamePrefixusernameemployeeNoemployeeFullNameuserFullName(string),审计/租户与通用查询控制字段同上。返回对象字段为 employeeUserIdemployeeIdusernamePrefixusernameemployeeNoemployeeFullNameuserFullNamecreatedUsernamelastModifiedUsernametenantId(string),createdTimelastModifiedTimedeleteTime(UTC epoch 秒)和 revision(number);成功响应字段的可空性源码未完全约束。

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

角色

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

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

角色—用户关联

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

机构查询与返回

查询字段为 orgIdorgNonameparentOrgIdparentOrgNoparentOrgNametreeOrgIdtreeOrgName、审计/租户字段及通用查询控制字段。机构对象返回 orgIdorgNonameparentOrgIdparentOrgNoparentOrgNametreeOrgIdtreeOrgNamecreatedUsernamelastModifiedUsernametenantId(string),审计时间(UTC epoch 秒)与 revision(number);可空性未由 DTO 单独保证。

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

租户查询与返回

查询字段为 tenantIdtenantNoPrefixtenantNotenantTypenameparentTenantIdtreeTenantIdtreeTenantName、审计字段、tenantIds[] 及通用查询控制字段。返回对象包含同名资源字段、createdUsernamelastModifiedUsername(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;已核实行为分支只有 teampersonal-space,其他非空值会写租户但不执行用户绑定
name string 最长 256
parentTenantId string 最长 32;当前 Web 编辑表单不发送,更新会把空值写回并重设树根字段
username string 后端 3..36;新用户额外限字母、数字、下划线
passwordconfirmPassword string 最长 1024;Web 发送大写 MD5;后端不比较确认字段

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

用户查询与返回

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

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

字段组 JSON 类型 可空 说明
userIdusernamePrefixusernamecallNamefullNameemailintromobilePhonelocuscompanyNametelePhoneprofessionmaritalStatenationdiplomacountryprovincecityareaaddressgenderqqidCardNoportraitUrl、审计用户名 string 未知 getById 会用关联表查询到的最后一个手机号/邮箱覆盖主用户字段;没有关联时设为 null
birthDate、审计时间 number 未知 UTC epoch 秒
revision number 未知 版本字段
passwordpasswordSaltprivatePasswordprivatePasswordSalt 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 不应假定这是安全的开户流程,应在产品流程确认后立即走改密操作。

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

树节点

机构和租户树返回 data: array<TreeNode>;每个节点含 title: string(资源名称)、value: string(资源 ID)和 children: array<TreeNode>(叶子可空)。树根由请求的 parentOrgId/parentTenantId 决定。证据为 Lists.TitleValueTreeNodeOrgPlusController/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/fetchTimeoutResponseJsonapp/.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 TenantLineInnerInterceptorconfig/SecurityConfig.java:179-189 tenantIdIgnoreTableFunctionsrc/main/resources/application-default-es-center-server.yaml:4-9 tenant-id-ignore-tablesgt-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-128es-center-server-basedata-dto/src/main/java/com/es/center/server/basedata/dto/EmployeeListRequestDTO.java:23-135es-center-server-basedata-dto/src/main/java/com/es/center/server/basedata/dto/employee/EmployeeSavePlusRequestDTO.java:21-52es-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-47es-center-server-basedata-dto/src/main/java/com/es/center/server/basedata/dto/employee_user/EmployeeUserListPlusResponseDTO.java:20-29es-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-42gt-common-authority-dto/src/main/java/tech/gt/authority/dto/role/RoleGetByIdPlusResponseDTO.java:21-25gt-common-authority-dto/src/main/java/tech/gt/authority/dto/RoleUserListRequestDTO.java:23-82gt-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-54gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/org/OrgListPlusResponseDTO.java:20-26es-center-server-main-service/src/main/java/com/es/center/server/user/center/controller/OrgController.java:55-172OrgPlusController.java:44-156 与 HEAD 一致
租户字段、树与绑定分支 已源码核验 services aed1381 gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/TenantSaveRequestDTO.java:22-63gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/tenant/TenantSavePlusRequestDTO.java:22-37gt-common-user-center-common/src/main/java/tech/gt/user/center/service/impl/TenantServiceImpl.java:43-197es-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-156gt-common-user-center-dto/src/main/java/tech/gt/user/center/dto/UserGetByIdResponseDTO.java:20-127gt-common-user-center-common/src/main/resources/mapper/postgresql/gt-common-user-center/UserMapper.xml:4-40 selectColumnsgt-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-111gt-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/文件代理